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

+ Recent posts