-
-
[原创]2.实战栈溢出漏洞
-
发表于:
2019-12-23 23:40
8623
-
编写exploit攻击程序,构造畸形数据包,使exploit_me_A.exe成功执行shellcode
用IDA先大体的看了下,就是一个正常的TCP的服务器,我们要给他发包让他接收到我们的包,才好继续调试他。
编写socket通信代码,想要和这个服务端通信就得知道ip和端口
通过下面bind这个函数得参数可以知道7777是端口
0代表是INADDR_ANY,本机所有ip都可以
知道这些就可以写代码了
接下来我又看到了recv得参数是512个字节每次接收,这里是不会溢出得,他每次收只会收512个字节,所有写服务器得一般都会循环收包,直到收完
接下来往下面看
这三句是判断recv的返回值
如果返回值esi==0则执行下面代码,否则跳转
也就是recv收到东西就跳转
跳转后进入一个call,参数是buff,也就是发包的东西
进入函数内部
很容易发现红色框抬栈0xC8
然后黑色框算buff 00结尾的长度
蓝色框是拷贝字节esi到edi
shr 2是除4,然后赋值给ecx 然后movsd4个字节一拷贝
还剩下不能整除的字节数
and ecx,3就是%4
然后继续拷贝movsb
在这里就能够想到当超过C8都没有00比如CC后面才有00那么返回地址不是就被覆盖了,并且我后面要跑的代码里面不能有00。根据上一篇的知识,寻找jmp esp
我是用插件找的,这里就不详细说了,上一篇有。然后把这个地址填写到0XC8的位置。后面则可以填上不带00的shellcode,这样就能执行代码了
实现的效果图
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2019-12-23 23:41
被自然dashen编辑
,原因: