啥也不会还想学PWN

今天,是rop的介绍与编写。

什么是rop呢?

上一次我学习了一种栈溢出的思路:pop rdi ret ;/bin/sh+字符串地址;system。

像这种形式的传参和调用,或者说这种编程方法,就叫做rop。

rop,是英文返回导向编程的简称,实际上就是程序中以一大堆ret的拼凑来完成代码逻辑。所以,这些ret的如何拼凑?(编写?)

以system(“/bin/sh”)为例:

我们需要做的,是将rdi这个地址改写为/bin/sh的字符串地址,然后call system。

如果我们不能执行shellcode,那么我们可以通过栈来修改参数。

pop rdi ret ;/bin/sh addr。

那么如何call?我们使用ret。

综上,我们构造的payload是:

填充区(用于填充缓冲区buf的那部分无效数据)+pop rdi ;ret +/bin/sh +system

比喻一下,rop就像是搭积木,一小部分一小部分的拼凑,基本上只会用到栈。

这些“积木”,我们称之为gadget。

怎么找到gadget呢?这里就要用到两个工具:ropper和ropgadgets。

简单说一下ropgadgets 的使用:

 

指令:ROPgadgets --(想找的二进制文件)。

当分析一些内核的时候,ropgadgets可能就会比较慢。

接下来是ropper。

使用:ropper --file file的名字。

比如这样,执行后很快就会将gadget打印出来:

 

 

 

正常情况:

好了,今天到这。 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值