티스토리 뷰






FTZ level16

pw : about to cause mass


레벨 16입니다.


먼저 hint를 보겠습니다.



함수가 여러개 있습니다.


buf의 크기는 20이지만 48만큼의 입력을 받으니 bof취약점이 발생합니다.

이 프로그램을 실행시키면 fgets로 입력을 받고 printit이라는 함수를 호출해줍니다.


printit 함수가 아니라 shell 함수를 실행시켜주면 쉘을 얻을 수 있을 것 같습니다.


먼저 분석을 하기 위해 tmp폴더 안으로 복사하도록 하겠습니다.





보기 쉬운 intel형식으로 정했습니다.


main의 어셈블리 코드 입니다.


main의 스택 프레임은 0x38만큼 할당되어 있습니다.


0x38은 10진수로 56입니다.



ebp-56부터 fgets로 입력을 받습니다.


따라서 esp부터 입력을 받네요.


제일 중요한 부분입니다.


이 부분을 보면 ebp-16을 eax에 넣고 eax를 call합니다.


현재 여기에는 printit의 주소가 들어가있겠죠?


이 값을 저희는 shell함수의 주소로 바꿔주면 됩니다.


shell 함수의 주소를 구해보겠습니다.


0x80484d0 입니다.


이제 payload를 생각해보면


40개의 A라는 문자를 넣고 그 다음에는 ebp-16인 0x80484d0라는 값을 넣어주면 될 것 같습니다.


tmp파일에 공격해 보겠습니다.


payload입니다.


(python -c 'print "A"*40+"\xd0\x84\x04\x08"';cat)|./attackme


fgets로 입력을 받으니 |파이프 명령을 통해서 값을 넘겨줘야 합니다.



쉘이 실행된 것을 확인 할 수 있습니다.


실제 공격을 해보겠습니다.

권한을 획득했습니다.




Level17 Password is "king poetic".

'pwnable > FTZ' 카테고리의 다른 글

[Hackerschool FTZ] Level18 write-up  (0) 2018.01.18
[Hackerschool FTZ] Level17 write-up  (0) 2018.01.17
[Hackerschool FTZ] Level15 write-up  (0) 2018.01.15
[Hackerschool FTZ] Level14 write-up  (0) 2018.01.15
[Hackerschool FTZ] Level13 write-up  (0) 2018.01.15
Comments