-
[Toddler's Bottle] 3번.[bof]$ 시스템 해킹 $/pwnable.kr 2018. 12. 1. 23:17
이번에 풀어볼 문제는 pwnable.kr의 3번문제인 [bof] 문제 입니다.
문제를 보니까 download가 있으니 한번 다운 받아 보겠습니다.
URL 이 있기 때문에 wget 을 사용했습니다.
파일을 한번 확인 해 보겠습니다
음.. 일반폴더 하나와 c언어로 작성된 코드가 하나 있네요
내용을 확인해보면 func함수로 들어가서 값을 출력하는거 같은데..
Key 값과 0xcafebabe와 일치해야 /bin/sh에 있는 flag가 나오는 코드인거 같네요
Key값은 func에 있는 0xdeadbeef 인거 같은데… 실행을 한번 해보겠습니다.
실행권한을 부여해주고 실행을 해보니 값을 입력 받으려고 하는거 같네요
저기에있는 0xcafebabe를 입력해보겠습니다.
안나오는 걸 보니 gdb를 이용해서 한번 리버싱 해보겠습니다.
Intel형식으로 나오도록 설정을 하고 main 함수부터 보도록 하겠습니다.
음… 저기 <+9> 보시면 mov DWORD PTR [esp], 0xdeadbeef 라고 되어있는데
0xdeadbeef를 [esp]에 넣어주는데 이는 파라미터를 뜻합니다.
그리고나서 바로 func 함수로 call 해서 들어가는데
이번엔 func 함수를 한번 리버싱 해보도록 하겠습니다.
여기서 주의깊게 봐야하는 명령은 cmp입니다
cmp 명령은 비교하는 명령이기때문에 c언어에서 if문을 뜻합니다.
<+40>에 있는 0xcafebabe와 비교하는 [ebp+0x8]은 아마 key일것입니다.
그러면 overflowme 시작 주소 부분이 있을텐데 그부분은 lea명령을 사용한 <+29>입니다.
lea명령은 주소를 불러와서 연산을 하는 명령입니다.
그래서 저 [ebp-0x2c]가 overflowme의 시작 주소 입니다.
key-overflowme = ebp+0x8 - (ebp - 0x2c) = 0x8 + 0x2c 인데, 0x8은 10진수로 8 0x2c는 10진수로 44이기 때문에 8+44는 52 입니다.
그렇다면 52바이트 만큼을 아무런 문자를 넣고 그다음에 key값인 0xcafebabe를 넣어주면 될거 같습니다.
리틀 엔디언 방식으로 넣어야 하기 때문에 0xcafebabe의 값을 거꾸로 넣으시면됩니다.
파이썬을 이용해서 a를 52개 넣고 그 뒤에 리틀 엔디언 방식으로 넣으면 되요
그리고 입력을 받으려고 할테니 ls 로 들어있는 파일을 확인하고 flag파일이 있으니까 한번 확인해 볼게요
Flag가 나왔습니다.
'$ 시스템 해킹 $ > pwnable.kr' 카테고리의 다른 글
[Toddler's Bottle] 5번.[passcode] (0) 2018.12.02 [Toddler's Bottle] 4번.[flag] (0) 2018.11.30 [Toddler's Bottle] 2번.[collision] (0) 2018.11.29 [Toddler's Bottle] 1번.[fd] (0) 2018.11.29