글
FTZ level15 write up
포너블
2020. 3. 16. 23:35

fegets에서 bof가 발생함을 알 수 있다.
level14와 문제가 똑같은것 같은데 check이 이번엔 포인터 변수다.
check의 값에 0xdeadbeef가 존재하는 곳의 주소를 넣어주면 level16의 패스워드 값을 알 수 있다.

gdb로 분석해보면 이렇다.
buf[20]에서 *check까지의 거리는 '56'
*check에서 ebp까지의 거리는 '16'
buf[20]에서 *check까지의 거리는 '40'
level 14와 똑같다.
이제 , 메모리 상에서 0xdeadbeef가 존재하는 위치를 확인해야 한다.
<main+32>에서 cmp 어셈블리어 명령어를 이용해 eax레지스터와 값을 비교한다.
*0xdeadbeef값이 하드 코딩 되어있는 상태라서 프로그램 내부에 존재한다.
메모리 보기 (x/[범위][출력형식][단위])
(gdb) x/10x 0x80808080 (hexa)
(gdb) x/10s 0x80808080 (string)
(gdb) help x (도움말 보기)
x/10x 0x80484b0명령어로 해당 주소로부터 10바이트까지 주소를 출력시켜서 찾아보자.

0x80484b2에 있음을 확인했다.
(python -c 'print "A"*40+"\xb2\x84\x04\x08"'; cat) | ./attackme
level16의 패스워드 값을 찾았다!
'포너블' 카테고리의 다른 글
| FTZ level17 write up (0) | 2020.03.17 |
|---|---|
| FTZ level16 write up (0) | 2020.03.17 |
| FTZ level14 write up (0) | 2020.03.16 |
| FTZ level13 write up (0) | 2020.03.16 |
| FTZ level12 write up (0) | 2020.03.15 |