首页
论坛
课程
招聘
[原创]Pwn入门--简单的nx绕过
2017-12-20 22:58 5233

[原创]Pwn入门--简单的nx绕过

2017-12-20 22:58
5233

新人刚刚接触pwn,如有不对的地方,欢迎指出!


首先贴出我们要测试的环境要求。

  • 操作系统:

  • 开启的保护:

代码:

  • 产生溢出的函数:

通过查看代码,我们可以分析出,在readpw()这个函数中,read()函数可造成buf的溢出。

所以我们先手工输入字符,找到溢出的字符的位置,推荐使用abcdefghi…ABC…123这种方式来确定溢出长度,pwntolls中也可根据溢出的字符,来判断溢出位置。(@nbw:可以使用pattern来生成随机字符串)

  • 溢出字符: 

图中显示溢出字符串为0x46454443即“CDEF”

Payload构造

  • 结构: 

首先是28个字符填充,其次跟着system()函数地址,exit()函数地址,/bin/sh地址。

  • 构造原因:

函数调用栈(图一)


图二

如图一,为函数调用的栈结构,即32位模式下,函数参数通过栈传递,传递的位置为函数参数从右至左依此入栈,之后为父函数返回地址(函数调用地址的下一条指定地址)。从上面的第二张图中我们可以得知,函数调用完毕后,执行到ret指令时,将执行栈顶指针esp处内存所指向的地址。所以我们需要将system()函数的地址作为溢出函数父函数的返回地址,而将exit()函数的地址作为system()函数的返回地址(防止程序崩溃),将bin/sh作为参数传递给system函数。

  • 查找函数地址:

  system()函数地址:  

/bin/sh地址:


exit()函数地址:


  • Payload代码:

其中,被注释的代码作为远程调试使用。

结果:

在gdb中可以看到如下输出:

在运行的脚本交互中,可命令执行。


Tips:

可以通过脚本运行后输出的pid,在gdb中来将程序附加上。

attach pid




远程运行程序命令:



socat tcp-listen:8088,fork Exec:./main





[看雪官方]《安卓高级研修班》线下班,网课(12月)班开始同步招生!!

上传的附件:
收藏
点赞1
打赏
分享
最新回复 (12)
雪    币: 4
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wx_万丈阳光 活跃值 2017-12-20 23:14
2
0
支持!
雪    币: 2
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
0
canary不需要绕过么? 
雪    币: 100
活跃值: 活跃值 (18)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
nbw 活跃值 24 2017-12-21 11:18
4
0
楼主应该把bin发上来呢
雪    币: 759
活跃值: 活跃值 (30)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
pwnda 活跃值 2 2017-12-21 14:11
5
0
同意二楼师傅说的  没有绕过canary,我最开始以为是用mprotect这样的函数来修改内存属性呢.
雪    币: 1946
活跃值: 活跃值 (115)
能力值: ( LV13,RANK:405 )
在线值:
发帖
回帖
粉丝
sudozhange 活跃值 5 2017-12-21 16:34
6
0
nbw 楼主应该把bin发上来呢
关于bin,提供源码了,只需简单编译下就好了。
雪    币: 1946
活跃值: 活跃值 (115)
能力值: ( LV13,RANK:405 )
在线值:
发帖
回帖
粉丝
sudozhange 活跃值 5 2017-12-21 16:35
7
0
wx_对方正在输入…_973086 canary不需要绕过么?
这个没绕过也成功了,不知道问题出在哪里了
雪    币: 1946
活跃值: 活跃值 (115)
能力值: ( LV13,RANK:405 )
在线值:
发帖
回帖
粉丝
sudozhange 活跃值 5 2017-12-21 16:36
8
0
下次会把bin文件一起上传的
雪    币: 16826
活跃值: 活跃值 (656)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
挽梦雪舞 活跃值 2018-3-1 00:40
9
0
nbw 楼主应该把bin发上来呢
膜拜大神!24篇全精华文章,好强势!
雪    币: 5453
活跃值: 活跃值 (232)
能力值: ( LV17,RANK:1155 )
在线值:
发帖
回帖
粉丝
holing 活跃值 15 2018-3-2 07:31
10
0
整个系统的ASLR都没开吗
雪    币: 1946
活跃值: 活跃值 (115)
能力值: ( LV13,RANK:405 )
在线值:
发帖
回帖
粉丝
sudozhange 活跃值 5 2018-3-2 09:44
11
0
holing 整个系统的ASLR都没开吗
对的
雪    币: 60
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
返無歸一 活跃值 2018-3-4 05:31
12
0
sudozhange 这个没绕过也成功了,不知道问题出在哪里了[em_31]
canary有分等级的......预设的好像只有几个function有放canary,从你的图中明显ret前没有检查canary有没有被破坏,所以有漏洞的function是没有插入canary

全开的话好像是fstack-protect-all的样子
雪    币: 1946
活跃值: 活跃值 (115)
能力值: ( LV13,RANK:405 )
在线值:
发帖
回帖
粉丝
sudozhange 活跃值 5 2018-3-4 14:44
13
0
返無歸一 canary有分等级的......预设的好像只有几个function有放canary,从你的图中明显ret前没有检查canary有没有被破坏,所以有漏洞的function是没有插入canary ...
哦哦,谢谢指出,学习了
游客
登录 | 注册 方可回帖
返回