SECURITY/System | Wargame
[Hackerschool] FTZ level 15
yuujoeng
2022. 10. 4. 12:22

이번에도 역시 hint와 attackme가 있고,
코드는 level14와 유사하지만 check가 포인터라는 차이점이 있다.
하지만 앞선 문제와 동일하기 buf 크기는 20byte 이므로 버퍼 오버플로우가 발생할 수 있다.

attackme는 분석할 수 있는 권한이 없기 때문에
우선 tmp로 복사했고 tmp로 이동해 복사가 된 것을 확인하였다.

gdb 명령어로 attamkme를 분석해보았다.
level14의 어셈블리와 비교해봤는데 차이점은 check가 포인터 변수로 사용하므로
<main+32> 의 cmpl 앞에 값을 가져오는 mov가 하나 더 추가되었다는 점이다.
프로그램 안에서 0xdeadbeef의 값을 찾아서 check의 위치에 씌워주면 된다.

프로그램 안에서 0xdeadbeef가 존재하는 위치는 0x80484b2이다.
이를 dummy 다음에 위치하여 *check의 값의 위치에 저장되게 하면
%eax로 값을 찾아와서 if문을 통과할 수 있다.
[메모리 구조]
RET // 4byte
SFP // 4byte
dummy // 8byte
crap // 4byte
*check // 4byte
dummy // 20byte
buff // 20byte
[페이로드]
buff ( 20 byte ) + dummy ( 20 byte ) + *check ( 0x80484b2 주소를 대입)


level15도 끝 !
level16의 패스워드는 "abouf to cause mass" !