티스토리 뷰
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 |
- srop
- stack reusing
- fsop
- FSB
- shellcoding
- 해킹
- tcache
- hacking
- codegate
- fastbindup
- overflow
- rt_sigreturn
- fastbin
- 본선가고싶다
- TLS
- heap
- exit
- pwnable
- ebp change
- HackCTF
- oob
- glibc
- SQLi
- pwnable.tw
- pwable
- Total
- Today
- Yesterday