Pwnable/FTZ
[FTZ] level16 풀이!!
RootJJang
2022. 5. 12. 08:59
SMALL
소스코드를 확인해보죠
attackme.c를 읽어보죠
권한이 거부되었다고 떠서 확인해보니 attackme.c가 root 권한으로밖에 읽을 수가 없네요
그럼 hint 파일을 보겠습니다
fgets()로 buf를 48bytes 입력 받고, call() 함수로 printit() 함수의 주소를 호출하네요
printit() 위에 shell() 함수가 있는데 call() 함수로 printit()의 주소를 호출하는 곳을 shell() 주소로 덮어버리면 되겠네요
buf와 printit() 사이에 거리를 구해봅시다
fgets()로 ebp-56에 입력을 받고 아래에 call eax 부분에서 eax에 DWORD PTR [ebp-16]이 들어가는 걸 보니 ebp-16이 printit()의 주소네요
두 사이의 거리는 40, 이제 shell() 함수의 주소를 구해봅시디ㅏ
shell() 함수의 시작 주소는 0x080484d0입니다
페이로드 구성은 dummy[40] + shell() 함수 주소로 짜면 될 것 같습니다
최종 페이로드 = (python -c 'print "A"*40 + "\xd0\x84\x04\x08"'; cat) | ./attackme
LIST