- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ProSSHD v1.2 漏洞分析学习总结
简介
ProSSHD 服务器是一种网络SSH 服务器,运行于端口22 上,针对后认证行
为存在缓冲区溢出漏洞。用户必须在服务器上拥有一个账号才能利用该漏洞。可
通过向SCP GET 命令的路径字符串传入超过500 字节的数据来攻击漏洞。
实验环境
虚拟机中搭建WinXP + ProSSHD + immunity debugger + mona + Kali。
在XP 上安装ProSSHD,要注册下,30 天免费试用(到期了改下虚拟机时间
就行了)。同时要在XP 上添加一个账号,后面连SSH 要用,并不是在ProSSHD 上
添加,软件上没添加账号的地方,安装完成后就是这样了。
漏洞分析
1、控制EIP
在Kali 中创建如下脚本prosshd.py
运行脚本向ProSSHD 发送1000 个A,切换到XP 下打开Immunity Debugger 附着
到wsshd.exe 上,按F9 让其继续运行,将看到如下结果。
EIP 已经被改写通过溢出改写了EIP 的值。
2、确定偏移
利用pattern_create 和pattern_offset 来确定,得到结果为489,不多说了。
3、漏洞定位
已知偏移量为489,向ProSSHD 发送493 个A 即可刚好将EIP 覆盖,此时栈上和
寄存器的情况如下图所示。
栈上0013EFBC 处即为我们所覆盖的EIP。向栈上高地址查找看到该函数是从
0x00401B40 处调用来,同时可以看到我们输入的字符串作为参数传至此函数中。
函数将字符串进一步拼接成如下格式后传入函数wsshd中。
在函数wsshd中,调用了strcpy 函数,但是并未进行长度限制和检查,
如下所示
函数将我们输入的字符串(EAX)直接拷贝至ECX 所指向的栈缓冲区中去。此时
ECX 值为0x0013EDBC,存放函数返回地址的地方为0x0013EFBC,可以计算得出
想要覆盖该地址需要516 个字节,而EAX 中拼接后的字符串正好为516,刚好覆
盖到存放返回地址处。
执行strcpy 验证得到如下结果
成功改写了函数返回地址,让函数继续执行至RETN,此时ESP 指向0x0013EFBC,
由此控制了函数返回地址。
漏洞利用
利用ROP 来绕过ALSR 和DEP 执行shellcode。
ROP(Return-Oriented Programming 返回导向编程)当开启了数据执行保护时,
栈上的shellcode 将无法执行,此时需要利用经过链接的模块中的小块代码片段,
他们后面跟着RETN 指令,如果调用者类小块代码,它会返回到栈,那么我们就
可以调用下块代码,以此类推,通过组合这些小块代码片段达到我们的目的。具
体到当前实验中就是利用 ROP 来调用 VirtualProtect()函数以修改位于栈上的
shellcode 对应页面的权限,使shellcode 可以执行,原理图如下:
|7C35F1FB | 59 |POP | 栈上的ROP
|7C35F1FC | C3 |RETN | | 缓冲区溢出 |
| 0X7C35F1FB |
|7C34115E | 33C0 |XOR EAX,EAX| | 4 字节填充物(POP) |
|7C341160 | C3 |RETN | | 0X7C34115E |
| 0X7C35F21A |
|7C35F21A | 83C4 0C |ADD ESP,0C | | 12字节填充物(ADD) |
|7C35F21D | C3 |RETN | | 0X7C35F126 |
文档评论(0)