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

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

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

1.实验内容

1.1 目标任务

  • a.对一个存在漏洞的pwn文件,直接修改其机器指令从而改变执行过程,运行getShell得到可用Shell
  • b.对一个存在漏洞的pwn文件,通过构造特殊的输入字符串覆盖返回地址从而跳转执行getShell函数
  • c.对一个存在漏洞的pwn文件,注入shellcode并运行得到可用Shell

1.2 学习内容

  • a.掌握反汇编、gdb调试与十六进制编辑器
  • b.能正确修改机器指令改变程序执行流程
  • c.能正确构造payload进行BOF攻击

2.实验过程

2.1 环境准备

  • 下载kali镜像文件,并挂载在VMWare上
    Screenshot 2025-10-12 155529

  • 通过共享文件夹传递实验文件pwn1
    Screenshot 2025-10-12 155701

2.2 通过直接修改程序机器指令getShell

  • 通过objdump命令对实验文件进行反汇编,查看核心源代码
    d4a34d47d76ee7d817f3eab8496e96dc

  • 通过查看得知main函数调用foo对应的机器指令为e8 d7ffffff,foo函数位于地址0x08048491处,CPU跳转执行EIP + 0xd7ffffff这个位置的指令,0xd7ffffff-41的补码,因此可以计算出EIP保存的值为0x080484ba,现在我们希望通过修改e8 d7ffffff来使程序跳转执行getShell,因此先查看getShell函数的地址addr<getShell>0x0804847d,计算addr<getShell>-EIP得到操作数c3ffffff,因此将机器指令e8 d7ffffff修改为e8 c3ffffff即可,以下为修改过程
    image
    image
    image
    image
    image
    image

2.3 构造输入进行BOF攻击

  • 通过反汇编观察计算,我们知道foo函数使用了一个只预留28(0x1c)字节的缓冲区来读取字符串,call调用foo,同时在堆栈上压上返回地址值0x080484ba,我们通过gdb调试找到覆盖返回地址的注入点即能构造输入跳转执行getShell,以下为具体过程
    1fecf5ae4a541999a792a99364194542
    image

2.4 ShellCode注入

  • 准备Shellcode:\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\

  • 修改程序执行环境:设置堆栈可执行,关闭地址随机化
    image

  • 选择payload构造结构:anything+retaddr+nop+shellcode,前面计算字符串缓冲区可知返回地址之前有32字节需要填充,所以anything部分为'A'x32,我们要确定的是retaddr的值,可知要执行的shellcode就在retaddr的后面(落在nop上会自动滑行至shellcode部分),因此我们输入payloadprint "A" x 32;print "\x04\x03\x02\x01\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\xd3\xff\xff\x00"(perl)来进行调试,如图

  • 首先将payload作为输入给到程序
    image

  • 在另一窗口中找到PID进入gdb调试
    image

  • 在gdb中foo的返回函数处设置断点
    image

  • 继续执行至断点处,查看esp中的值,找到返回函数的地址,查看确认是我们所预设的位置,由此可以得到shellcode地址为0xffffcf90
    image

  • 将返回地址修改为shellcode地址,输入执行即可得到shell
    image

3.问题及解决方案

  • 问题1:无法下载execstack
  • 问题1解决方案:在网络上下载execstack的deb包,在虚拟机内本地安装

4.学习感悟、思考等

在本次实验中我系统了解了BOF漏洞的原理和利用方法,尤其对ShellCode注入有了更深的理解,在首次进行实验时,我急于验证方法的正确性,直接将完整的ShellCode进行注入,结果失败,后来一步步分析,发现是返回地址找错了,这一过程使我更加深入地了解了ShellCode注入方法。完成ShellCode注入后有一种成就感,但本实验是在设置了堆栈可执行且关闭了地址随机化,真实的BOF攻击往往会更加复杂,相关的程序员更要从多个角度加强程序安全性,抵御类似的攻击,一旦对方攻击成功拿到Shell很可能会造成极大的损失。

参考资料

  • 逆向与Bof基础
  • 【干货分享】手把手简易实现shellcode及详解
http://www.hskmm.com/?act=detail&tid=29427

相关文章:

  • for 循环 range
  • 在AI技术唾手可得的时代,挖掘新需求成为核心竞争力——某知名离线转录工具需求洞察
  • JavaScript async/await 基础使用
  • 27. 移除元素 暴力+快慢指针+相向双指针
  • ST表学习笔记
  • 谈一类易实现的非四毛子线性 RMQ
  • 我们学会在具体情境中做出恰当判断
  • 编译安装nginx
  • AutoGCL——AutoGCL: automated graph contrastive learning via learnable view generators
  • 【教程】无需第三方应用,Windows自带邮箱如何绑定QQ邮箱等第三方邮箱
  • 2025婚纱摄影影楼权威推荐榜:专业团队与创意拍摄打造梦幻婚礼
  • 为什么40岁后的快乐消失了
  • 分布式结构化存储系统-HBase访问方式
  • 【Azure APIM】自建网关(self-host gateway)收集请求的Header和Body内容到日志中的办法
  • [JAVA]JDK多版本设置
  • Google Veo3生成跳舞视频
  • 【PolarCTF】stackof
  • 新生赛 F,H,J 题解
  • pycharm跑python项目易出错的困难
  • 双端队列的0-1BFS
  • Python psycopg2 类库使用学习总结
  • [GenAI] RAG架构演进
  • 24NOIP游记——彼时彼刻
  • 嵌入式-C++面经1
  • 合并区间 - MKT
  • 如何防止员工向第三方 AI 泄露数据?滤海 AI DLP 全方位技术防护方案解析
  • 20232322 2025-2026-1 《网络与系统攻防技术》实验一实验报告
  • 实验1 现代c++编程初体验
  • 冬天快乐
  • P2441M 见过的 tricks