FTZ 16 Level
ID : level16
Passwd : about to cause mass
접속해서 ls 명령어로 파일과 디렉터리를 확인합니다.
cat 명령으로 hint를 열어보면 코드가 있는데요. call이라는 이름을 가진 함수 포인터에 printit 함수를 넣고 buf 배열을 선언합니다. 그리고 call에 있는 함수를 호출합니다.
지금까지 했던 Overflow를 보면 뭔가 call 함수 포인터에 있는 함수의 주소를 printit 함수에서 shell 함수로 변조하면 될 것 같은 느낌이 옵니다.
그럼 call 함수 포인터의 위치와 shell 함수의 주소를 찾아야합니다.
tmp로 복사하고 gdb로 디스어셈블 해봅시다.
fgets 함수의 첫 번째 인자는 buf의 시작 주소이고, call 하기 전 마지막으로 push하는 인자입니다.
즉, buf의 위치는 ebp-56 이 됩니다.
main+36과 main+39를 보면 어떤 주소에 있는 값을 eax 레지스터에 넣고 call로 호출하고 있습니다. 그럼 ebp-16은 함수 포인터라는 것을 알 수 있습니다.
shell 함수의 주소를 구해봅시다.
shell 함수의 주소는 0x080484d0 입니다.
payload를 구성해보겠습니다.
ebp-56 ~ ebp-16 을 dummy 값으로 채우고, shell 함수의 주소로 변조합니다.
payload : (python –c ‘print “A”*40 + “\xd0\x84\x04\x08”’; cat) | ./attackme
원본 파일에 공격해봅시다.
exploit!
감사합니다.
'System&Write up > FTZ' 카테고리의 다른 글
FTZ level18 -> level19 Write up (0) | 2017.09.27 |
---|---|
FTZ level17 -> level18 Write up (0) | 2017.09.27 |
FTZ level15 -> level16 Write up (0) | 2017.09.25 |
FTZ level14 -> level15 Write up (0) | 2017.09.25 |
FTZ level13 -> level14 Write up (0) | 2017.09.25 |