20222402 2024-2025-1 《网络与系统攻防技术》实验一实验报告
1.实验内容
本周我们学习了缓冲区溢出的基础知识和一些案例。课上我们首先回忆了缓冲区的概念,随后讲解了缓冲区溢出的定义,以及例如蠕虫病毒等案例。最后学习了缓冲区溢出基础知识,例如编译器和调试器的使用,汇编语言等知识。
具体实验内容:
①手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
②利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
③注入一个自己制作的shellcode并运行这段shellcode。
2.实验过程
实验内容一:直接修改程序机器指令,改变程序执行流程
①下载目标文件20222402gbc,反汇编。
输入代码:objdump -d 20222402gbc | more
图中"call 8048491 "是汇编指令是说这条指令将调用位于地址8048491处的foo函数;main函数调用foo,对应机器指令为“ e8 d7ffffff”,让它调用getShell,只要修改“d7ffffff”为“c3ffffff”,如下图:
②输入代码:cp 20222402gbc 20222402
vi 20222402
在vi中,按ESC键
:%!xxd
/e8d7
③修改d7为c3
:%!xxd -r
:wq
④反汇编,输入代码:objdump -d 20222402 | more
实验内容二:通过构造输入参数,造成BOF攻击,改变程序执行流
①反汇编,输入代码:objdump -d 20222402gbc | more
找到目标触发的函数getShell
②确认输入字符串哪几个字符会覆盖到返回地址
输入代码:gdb 20222402gbc
③确认用什么值来覆盖返回地址
对比之前eip 0x34333231 0x34333231,正确应用输入11111111222222223333333344444444\x7d\x84\x04\x08
④构造输入字符串
实验内容三:注入Shellcode并执行
①准备工作
②构造要注入的payload,并注入这段攻击buf
③另外一个终端,用gdb来调试这个进程
找到进程号是:48787
④启动gdb调试这个进程,通过设置断点,来查看注入buf的内存地址
⑤在另外一个终端中按下回车
⑥计算返回地址
看到01020304就是返回地址的位置。所以shellcode地址是0xffffd3c0
⑦验证结果
3.问题及解决方案
- 问题1:打开gdb模式失败。
- 问题1解决方案:按照终端提示的代码安装gdb。
- 问题2:无法识别execstack。
- 问题2解决方案:在网上搜到了解决办法,下载安装包后拖入虚拟机中,并安装
- 问题3:构造要注入的payload时,找不到进程号。
- 问题3解决方案:注入这段攻击buf后按一次enter。
4.学习感悟、思考等
在完成本次实验的过程中,我接触到了许多新的知识,也将之前的知识以具象的方式再次复习。在实验准备前,如何安装虚拟机让我有些茫然,随后我在网上查阅了相关方法,在配置过程中,相继解决了修改用户名等问题,最终成功安装。在实验过程中,我参照了实验指导书,从最初的毫无头绪到现在的小有所获,学会了细心的检查代码并且计算验证实验结果。由于第一次接触linux系统,对命令的功能有些陌生,但是我在学习和实践的过程中,逐渐熟悉并加以利用,让实验得以完成,让我很有成就感。
回顾我在实验的收获,我不仅在技术层面取得了显著的进步,更重要的是,我的学习能力和解决问题的能力得到了极大的锻炼和提升。
参考资料