반응형
Level14에 들어가서 파일들과 hint를 봅니다.
코드를 해석하면 이번 문제는 쉬운 문제인 것 같습니다.
check의 위치를 찾아서 check값이 deadbeat가 되면 자동으로 15레벨의 쉘을 띄어줍니다.
프로그램 가지고 메모리 구조를 생각해 보면
RET 4
SFP 4
dummy ?
int crap 4
dummy ?
int check 4
dummy ?
buf 20
이렇게 됩니다.
main+3을 보면 총 56byte가 할당되는 것을 확인 할 수 있습니다.
그렇다면
20Byte(Buf) + Dummy + 4byte(Check) + Dummy + 4byte(crap) + Dummy = 56Byte
가 되는 것입니다.
여기서 Buf와 Check사이의 거리를 알아내어 Check에 deadbeef값을 넣어주면 됩니다.
이때 main+29 부분에서 ebp -16을 하면서 deadbeef값을 비교하는 것을 볼 수 있습니다.
즉 4byte(Check) + Dummy + 4byte(crap) + Dummy = 16Byte라는 것을 알 수 있습니다.
그럼 이제 Buf와 Check사이의 Dummy값을 알 수 있습니다.
20Byte가 됩니다.
쉘코드를 작성할 필요없이
Check에다가 바로 deadbeef를 넣어 줍니다.
(gets 함수이므로 cat을 이용)
(python -c 'print "A"*40 + "\xef\xbe\xad\xde"';cat)|./attackme
반응형
'Security > Pwnable' 카테고리의 다른 글
FTZ Level 15 (0) | 2021.08.09 |
---|---|
FTZ Level 15 (0) | 2021.08.09 |
FTZ Level 13 (0) | 2021.08.09 |
FTZ Level 12 (0) | 2021.08.09 |
FTZ Level 11 (0) | 2021.08.09 |