FTZ - LEVEL19 를 chaining RTL 기법으로 풀어봤습니다
level19의 소스입니다! gets 함수가 잇으니 cat과 파이프를 이용해야겠군요
gdb를 분석해봤습니다
<main+0> push ebp
<main+1> mov ebp , esp
스택프레임을 설정해줬습니다
<main+3> sub esp , 0x28
esp에 40만큼 빼줫습니다 (버퍼 40 선언)
<main+6> sub esp , 0xc
esp 에서 13만큼 뺴줬습니다
<main+9> lea eax , [ebp-40]
eax에 ebp-40의 주소값을 넣어줬습니다
<main+12> push eax
스택에 ebp-40을 넣어줬습니다
<main+13> call 0x80482f4 < gets >
gets 함수를 호출해줬습니다
<main+18> add esp , 0x10
16만큼의 공간을 사용했습니다
<main+21> sub esp , 0x8
8만큼의 공간을 할당해줬습니다
<main+24> lea eax,[ebp-40]
eax에 ebp-40의 주소를 넣어줬습니다
<main+27> push eax
eax를 스택에 넣어줬습니다
<main+28> push 0x80484d8
stdin을 넣습니다
<main+33> call 0x80483234 <printf>
printf 함수를 호출해줬습니다
<main+38> add esp , 0x10
esp에 16을 더해줬습니다
RTL을 하기 위해서 System의 주소와 /bin/sh의 주소를 구해보겠습니다
/bin/sh의 주소도 구해보겠습니다
buf[40]+sfp[4]+&system[4]+exit[4]+/bin/sh[4]
쉘은 떳지만 id는 변하지 않아서
RTL Chaining 을 이용해서 권한도 설정해줘보겠습니다
0x420d7920 = setreuid
3010 00000c1c 3009가 레벨19의 권한이므로 3010을 권한으로 넣어주겠습니다
setreuid(3010,3010)
그 후 setreuid의 인자값이 두개이므로 pop pop ret 하는 가젯의 주소를 구했습니다.
buf[40] + sfp[4] + &setreuid + &ppr + 3010 + 3010 + &system + dummy + &/bin/sh
를 넣어줬습니다
정상적으로 level20의 권한을 휙득한 것을 확인할 수 있습니다
'해커스쿨 ftz' 카테고리의 다른 글
FTZ 정리 (0) | 2016.05.22 |
---|---|
FTZ-LEVEL20 (0) | 2016.04.26 |
FTZ-LEVEL19 (0) | 2016.04.25 |
FTZ-LEVEL18 (0) | 2016.04.24 |
FTZ-LEVEL17 (0) | 2016.04.24 |