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

설정

트랙백

댓글