본문 바로가기

system/writeup

2014 codegate angry_doraemon

angry_doraemon

2014 codegate angry_doraemon

1번 메뉴에 쉘 실행 명령이 존재한다.

4번 메뉴에서 오버플로우가 발생한다. 하지만 rop는 불가능, canary 존재

5번 메뉴 First Attack에서

함수 포인터 buf에 read로 4바이트를 받고 있고 밑에서

다시 buf에 4바이트를 입력 받고 buf()를 실행시켜 준다.

(HIBYTE는 매크로인데 상위 1바이트를 의미함, 즉 \x08로 시작하면 안됨 코드섹션, 데이터섹션 힙..등등으로 점프할 수 없다.)

 

leak을 찾아야 rop를 하는데.. 여기서 좀 헤맷다.

read는 맨 뒤에 NULL을 안 넣기 때문에 밑에 sprintf, write에서 leak 발생

여기서 canary leak을 해야 하는데 canary는 하위 1바이트가 '\x00'으로 되어 있어서 '\x0a'까지 포함한 10바이트를 넣어줘야 leak이 가능하다.

bss에 x권한 있는걸로 봤었는데 없었어서 시간을 많이 허비했네요 하..

payload 길이가 110 최대라 dup2로는 힘들다. nc -vlp 7777 -e /bin/sh을 이용한 리버스 커넥션은 요즘 nc에 -e 옵션이 떼져 있어 좀 그렇고 리다이렉트를 이용해서 풀어보겠다. -> 지금 글쓰면서 보니까 dup2로 입출력 바꿔주고 코드에 execl("/bin/sh") 존재하니 호출해주면 110바이트 안넘게 가능하네요

리다이렉트는 >&, <&를 이용해서 푸는 방법인데 사용법은

명령 >& 파일명 ( <&도 동일 ) 이다.

e.g. /bin/sh >&4 <&4 는 4번 (fd) 파일로 /bin/sh의 입력과 출력을 보내라는 말이다.

 

전체적인 익스플로잇 순서도는 다음과 같다.

stack overflow
stack overflow
start
canary leak
rop
redirect shell

mermaid로 처음 그린 순서도 입니다,.,.

 

 

쉘!


'system > writeup' 카테고리의 다른 글

2017 codegate babypwn  (0) 2019.01.04
2014 plaidCTF ezhp  (0) 2019.01.04
2013 hdcon luckyzzang  (0) 2019.01.02
2016 whithat malloc  (0) 2019.01.01
2015 codegate yocto  (0) 2018.12.31