Java DNS Deserialization, GadgetProbe and Java Deserialization Scanner
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Darasa java.net.URL
linafanya kazi Serializable
, hii inamaanisha kwamba darasa hili linaweza kupewa muundo.
Hii darasa lina tabia ya kushangaza. Kutoka kwenye hati: “Wenyeji wawili wanachukuliwa kuwa sawa ikiwa majina yote ya mwenyeji yanaweza kutatuliwa kuwa anwani sawa za IP.”
Basi, kila wakati kitu cha URL kinapoitisha yoyote ya kazi equals
au hashCode
ombi la DNS kupata Anwani ya IP litakuwa litatumwa.
Kuita kazi hashCode
kutoka kwa kitu cha URL ni rahisi sana, inatosha kuingiza kitu hiki ndani ya HashMap
ambacho kitakuwa kinachakatwa. Hii ni kwa sababu mwishowe ya kazi readObject
kutoka HashMap
hii nambari inatekelezwa:
Ni kuenda kutekeleza putVal
na kila thamani ndani ya HashMap
. Lakini, muhimu zaidi ni wito wa hash
na kila thamani. Hii ni nambari ya kazi ya hash
:
Kama unavyoweza kuona, wakati wa deserialization ya HashMap
kazi hash
itatekelezwa na kila kitu na wakati wa utekelezaji wa hash
itaweza kutekelezwa .hashCode()
ya kitu. Hivyo, ikiwa unafanya deserialization ya HashMap
iliyokuwa na kitu cha URL, kitu cha URL kita tekeleza .hashCode()
.
Sasa, hebu tuangalie msimbo wa URLObject.hashCode()
:
Kama unavyoona, wakati URLObject
inatekeleza .hashCode()
, inaitwa hashCode(this)
. Unaweza kuona msimbo wa kazi hii:
You can see that a getHostAddress
is executed to the domain, kuanzisha ombi la DNS.
Therefore, this class can be kutumiwa vibaya in order to kuanzisha a ombio la DNS to kuonyesha that deserialization is possible, or even to kuondoa taarifa (you can append as subdomain the output of a command execution).
You can find the URDNS payload code from ysoserial here. However, just for make it easier to understand how to code it I created my own PoC (based on the one from ysoserial):
Katika wazo la asili, mzigo wa makusanyo ya kawaida ulibadilishwa ili kutekeleza uchunguzi wa DNS, hii ilikuwa na uhakika mdogo kuliko njia iliyopendekezwa, lakini hii ndiyo chapisho: https://www.gosecure.net/blog/2017/03/22/detecting-deserialization-bugs-with-dns-exfiltration/
Unaweza kupakua GadgetProbe kutoka Duka la Programu la Burp Suite (Extender).
GadgetProbe itajaribu kubaini kama darasa la Java fulani lipo kwenye darasa la Java la seva ili uweze kujua kama lina udhaifu kwa exploit inayojulikana.
GadgetProbe itatumia mzigo wa DNS wa sehemu ya awali lakini kabla ya kuendesha uchunguzi wa DNS itajaribu kufanya deserialization ya darasa lolote. Ikiwa darasa lolote lipo, uchunguzi wa DNS uta tumwa na GadgetProbe itakumbuka kwamba darasa hili lipo. Ikiwa ombio la DNS halijatumwa kamwe, hii inamaanisha kwamba darasa lolote halikufanywa deserialization kwa mafanikio hivyo labda halipo au halitambuliki/haliwezi kutumika.
Ndani ya github, GadgetProbe ina orodha za maneno zenye madarasa ya Java kwa ajili ya kupimwa.
Scanner hii inaweza kupakuliwa kutoka Duka la Programu la Burp (Extender). Kipanzi kina uwezo wa kupita na wa kazi.
Kwa kawaida inachunguza kwa siri maombi yote na majibu yaliyotumwa ikiangalia baiti za uchawi za Java zilizosajiliwa na itawasilisha onyo la udhaifu ikiwa yoyote itapatikana:
Upimaji wa Mikono
Unaweza kuchagua ombi, bonyeza kulia na Tuma ombi kwa DS - Upimaji wa Mikono
.
Kisha, ndani ya Deserialization Scanner Tab --> Manual testing tab unaweza kuchagua nukta ya kuingiza. Na anzisha upimaji (Chagua shambulio linalofaa kulingana na uandishi ulio tumika).
Hata kama hii inaitwa "Upimaji wa Mikono", ni otomatiki sana. Itakagua kiotomatiki kama deserialization ina udhaifu kwa mzigo wowote wa ysoserial ikichunguza maktaba zilizopo kwenye seva ya wavuti na itasisitiza zile zenye udhaifu. Ili kuangalia maktaba zenye udhaifu unaweza kuchagua kuanzisha Javas Sleeps, sleeps kupitia matumizi ya CPU, au kutumia DNS kama ilivyotajwa hapo awali.
Kutatua
Mara tu unapokuwa umepata maktaba yenye udhaifu unaweza kutuma ombi kwenye Exploiting Tab. Katika tab hii unapaswa kuchagua nukta ya kuingiza tena, na kuandika maktaba yenye udhaifu unayotaka kuunda mzigo kwa, na amri. Kisha, bonyeza tu kitufe cha Attack kinachofaa.
Fanya mzigo wako utekeleze kitu kama ifuatavyo:
Jifunze & fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Jifunze & fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)