[PWN][进阶篇]ROP-Ret2Shellcode-64位实例

ROP-Ret2Shellcode-64位实例

/usr/include/x86_64-linux-gnu/asm/unisted_64.h
在这里插入图片描述在这里插入图片描述编写64位shellcode,思路和32位是一样的
(1)想办法调用execve("/bin/sh",null,null)
(2)借助栈来传入字符串/bin/sh
(3)系统调用execve
rax = 0x3b(64bit)
rdi = bin_sh_addr
rsi = 0
rdx = 0
在这里插入图片描述
实例代码如下:
在这里插入图片描述
setvbuf函数的作用是优化io流,在服务器上时,或者是比赛时,一般都会有这个函数。
我们还发现了最重要的切入点 get()

我的大刀已经饥渴难耐了
实例开始

step1 检查保护
在这里插入图片描述step2 查看buf2

在这里插入图片描述
在这里插入图片描述
step3 查601080的段是否可执行
在这里插入图片描述我们利用vmmap看看601080
在这里插入图片描述rwxp权限,可以执行

step4 计算偏移
cyclic 300
cyclic -l +异常地址
但是pwndbg只能读四字节的
在这里插入图片描述
所以我们读6161616b
在这里插入图片描述
偏移量是40,起飞

step5 exp搞起
整体思路:
一个全局变量一个main函数一个局部变量
两个get
第一个get把他覆盖到输入,栈的返回值覆盖到全局变量的入口处,第二个get输入我们的shellcode
注意选用全局变量存放shellcode,就要考虑是否有权限

在这里插入图片描述在这里插入图片描述
exp理解:
程序是64位的,os是linux的,所以我们要告诉电脑
offset是40,我们上面cyclic求的
shellcode是自动生成的
grep可以找到buf2,这里我们用其他的方式来找ELF()+symbols[]
一个get的payload使我们指向buf2
第二个get利用shellcode来getshell
因为程序有交互,p.recvuntil(’: '),的意思就是直到程序输出的内容含有:+空格再继续向下发送信息

希望大家可以有所收获!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹏华李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值