HSCTF - Return to Sender (Binary)
Wargame | CTF/CTF WriteUp

HSCTF - Return to Sender (Binary)

return to sender.c

매우 기초적인 Bof 문제입니다. 이것도 안한지 오래되서 까먹어서 헤맸습니다.. vuln() 함수내에 있는 get(dest) 를 이용해서 ret 주소를 win() 함수로 변경시키면 되는 문제입니다.

먼저 gdb로 열어준 뒤, set disassembly-flavor intel 명령어로 intel 표현식으로 바꿔줍니다(보기편함)

disas vuln 명령어로 확인해본 결과, 해당 함수 내 get 함수는 ebp-0x10 의 주소에있는 버퍼에 문자열을 입력받는것을 알았습니다. 여기서 우리는 ebp 주소를 굳이 알 필요 는 없죠. 버퍼의 주소와 ret 가 있는 주소 까지의 거리만 알면 됩니다.

16 + ebp(4 byte) = 20 byte  총 20바이트만큼 덮어쓰고, ret 주소를 바꿔주면 됩니다. 그러면.. 필요한 코드는

(python -c 'print "a"*20+"\xb6\x91\x04\x08"';cat) | nc pwn.hsctf.com 1234

가 되겠습니다. a*20 으로 20바이트를 덮어써주고, 0x080491b6 (win 함수의 주소) 를 리틀엔디언 방식으로 적어준뒤, cat 명령어를 추가로 실행하게 하여 파이썬이 종료되더라도 쉘이 꺼지지 않도록 해줍니다.

ls 명령을 입력하니 서버내 파일들이 조회되었고, flag 파일도 보이네요. 

'Wargame | CTF > CTF WriteUp' 카테고리의 다른 글

BCACTF - Basic Pass 3  (0) 2019.06.09
HSCTF - Networked Password (WEB)  (2) 2019.06.05
CBM CTF / WriteUp (web - 45point)  (0) 2019.04.07