이번에는 권한도 setreuid()도 있다. 하지만 fgets가 경계검사를 하기때문에 함수의 리턴주소를 침범하지 못하게막아놨다.
다만 printf를 보게되면 포맷스트링 취약점이 있다는 것을 확인 할 수가 있다.
또한 gdb 디버깅이 되지는 않지만 대략적인 메모리 구조를 생각하면
bleh[80] : 80
dummy : ?
SFP : 4
RET : 4
바이트씩 할당이 되어있다는걸 알 수 있다..
적어도 그럼 80바이트이상을 채워서 RET값을 덮어야하는데 힌트로 주어진 코드에서는 불가능하게 막아놓았다.
그럼 다른방법을 써야하는데
우선 실행하고 아래와 같이 입력해보자. 포맷스트링 버그를 활용해서.
무언가 특이점이 보이지 않는가?
level11과 비슷하게 네 번째에 입력 문자열이 표시되는 것이 보인다.
그럼 이번에는 덮어써야할 .dtors의 주소를 보면
메모리로 올라오는 심볼이 보이지 않는다. 심볼 분석이 되지 않게 컴파일을 해놓았기 때문이다.
objdump를 이용하여 메모리에 올라온 심볼을 확인해 보자.
덮어써야할 주소가 0x08049598인걸로 확인되었다.
이제 한번 공격해보자
공격형태는 (printf "낮은주소낮은주소높은주소높은주소")%8x%8x%8x%낮은쉘코드주소c%n%높은쉘코드주소c%n
(python -c 'print "AAAA\x98\x95\x04\x08AAAA\x9a\x95\x04\x08%8x%8x%63552c%n%51095c%n"'; cat) | /home/level20/attackme
-> 최종적으로 입력한 코드... 트러블슈팅중... OTL..
'Pwnable > FTZ' 카테고리의 다른 글
Segmentation fault에 빡침 (0) | 2016.07.21 |
---|---|
Egg Shell 소스코드 (0) | 2016.07.21 |
FTZ Level19 풀이(미해결) (0) | 2016.07.17 |
FTZ Level18 풀이 (0) | 2016.07.17 |
FTZ Level17 풀이(해결) (0) | 2016.07.17 |