首页
社区
课程
招聘
[原创]pwn中one_gadget的使用技巧
发表于: 2020-8-1 11:12 16120

[原创]pwn中one_gadget的使用技巧

2020-8-1 11:12
16120

很多新手在栈溢出的时候会手动输入/bin/sh地址和system等函数的地址,这样不仅麻烦而且很容易出错。其实libc中带有很多gadget,控制程序跳转到这些位置执行并满足一定的条件就可以拿到shell。

最常见的用法是one_gadget后面跟libc文件,就可以拿到one_gadget的地址了,上图我以libc 2.27为例,这里有一个小技巧,就是可以看到one_gadget是需要满足一定条件的,这里我认为最好满足的是 rsp+0x40==NULL 这个条件,要求栈上的这个位置为null,这里随便拿一个程序来看一下。我在返回地址处填充了0x4f3c2这个gadget。

然后跟进去运行, ,发现程序将rsp+0x40赋值给了rsi,那么显然这个值是需要是null的,这也跟刚才one_gadget给我们提示的满足条件相符合。看一下这个值,
这个值并不是null,这样的话运行下去显然是会出错的,修改这个值显然也很麻烦,但是我们可以观察到0x7fffb5b9e0d0 + 0x60是null,符合我们的要求,而且刚才溢出的时候我们是可以控制rsp的,我们可以在输入one_gadget之前多个ret指令的addr,这样就可以增加rsp的值了。修改后的payload如下

此时

这样就可以满足我们的要求了

后面加-l2参数可以找到更多的gadget。

另外还有一个near功能也很管用,可以找最靠近某个函数的gadget,这里我以libc 2.23为例。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2020-8-1 14:06 被Mr.Bean编辑 ,原因: 刚才图片挂了
收藏
免费 5
支持
分享
最新回复 (5)
雪    币: 7
活跃值: (4331)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
2
图片挂了
2020-8-1 11:26
0
雪    币: 3072
活跃值: (20)
能力值: ( LV1,RANK:40 )
在线值:
发帖
回帖
粉丝
3
403
2020-8-1 12:18
0
雪    币: 117
活跃值: (892)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
图片已修复
2020-8-1 14:07
0
雪    币: 61
活跃值: (2390)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
5
图片上的one和read不是三个字节不一样么?
2020-8-6 21:18
0
雪    币: 117
活跃值: (892)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
6
iddm 图片上的one和read不是三个字节不一样么?
尾部字节虽然是不一样的,但是一直是一个固定的值
2020-8-7 23:31
0
游客
登录 | 注册 方可回帖
返回
//