Apache
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Proverite koje ekstenzije izvršava Apache server. Da biste ih pretražili, možete izvršiti:
Takođe, neka mesta gde možete pronaći ovu konfiguraciju su:
Ove vrste napada su predstavljene i dokumentovane od strane Orange u ovom blog postu i sledeći je sažetak. Napad "confusion" u suštini zloupotrebljava način na koji desetine modula koji rade zajedno u kreiranju Apache-a ne rade savršeno sinkronizovano, a modifikacija nekih od njih može izazvati ranjivost u kasnijem modulu.
mod_rewrite
će skratiti sadržaj r->filename
nakon karaktera ?
(modules/mappers/mod_rewrite.c#L4141). Ovo nije potpuno pogrešno jer će većina modula tretirati r->filename
kao URL. Međutim, u drugim prilikama ovo će biti tretirano kao putanja do fajla, što bi moglo izazvati problem.
Path Truncation
Moguće je zloupotrebiti mod_rewrite
kao u sledećem primeru pravila da bi se pristupilo drugim fajlovima unutar fajl sistema, uklanjajući poslednji deo očekivane putanje jednostavno dodajući ?
:
Zavaravajuća dodela RewriteFlag
U sledećem pravilu preusmeravanja, sve dok URL završava sa .php, biće tretiran i izvršen kao php. Stoga, moguće je poslati URL koji se završava sa .php nakon ?
karaktera dok se u putanji učitava drugačija vrsta datoteke (poput slike) sa zloćudnim php kodom unutar nje:
Moguće je pristupiti datotekama kojima korisnik ne bi trebao imati pristup, čak i ako bi pristup trebao biti odbijen sa konfiguracijama kao što su:
Ovo je zato što će PHP-FPM po defaultu primati URL-ove koji se završavaju sa .php
, kao što je http://server/admin.php%3Fooo.php
, i zato što će PHP-FPM ukloniti sve nakon karaktera ?
, prethodni URL će omogućiti učitavanje /admin.php
čak i ako je prethodno pravilo to zabranilo.
Zanimljiva činjenica o Apachu je da će prethodni prepravak pokušati da pristupi datoteci i iz documentRoot i iz root. Dakle, zahtev za https://server/abouth.html
će proveriti datoteku u /var/www/html/about.html
i /about.html
u datotečnom sistemu. Što se u suštini može zloupotrebiti za pristup datotekama u datotečnom sistemu.
Otkrivanje CGI Izvora Koda
Samo dodavanje %3F na kraju je dovoljno da se otkrije izvorni kod cgi modula:
Otkrivanje PHP Izvornog Koda
Ako server ima različite domene, a jedna od njih je statična domena, to se može iskoristiti za pretraživanje datotečnog sistema i otkrivanje php koda:
Glavni problem sa prethodnim napadom je to što će po defaultu većina pristupa preko datotečnog sistema biti odbijena kao u konfiguracionom šablonu Apache HTTP Server-a:
Međutim, Debian/Ubuntu operativni sistemi po defaultu dozvoljavaju /usr/share
:
Zato, bilo bi moguće zloupotrebiti datoteke smeštene unutar /usr/share
u ovim distribucijama.
Lokalni Gadget za Otkriće Informacija
Apache HTTP Server sa websocketd može izložiti dump-env.php skriptu na /usr/share/doc/websocketd/examples/php/, koja može otkriti osetljive promenljive okruženja.
Serveri sa Nginx ili Jetty mogu izložiti osetljive informacije o web aplikacijama (npr., web.xml) kroz svoje podrazumevane web korene smeštene pod /usr/share:
/usr/share/nginx/html/
/usr/share/jetty9/etc/
/usr/share/jetty9/webapps/
Lokalni Gadget za XSS
Na Ubuntu Desktop-u sa instaliranim LibreOffice, iskorišćavanje funkcije promene jezika u pomoćnim datotekama može dovesti do Cross-Site Scripting (XSS). Manipulacija URL-om na /usr/share/libreoffice/help/help.html može preusmeriti na zlonamerne stranice ili starije verzije putem unsafe RewriteRule.
Lokalni Gadget za LFI
Ako su instalirani PHP ili određeni front-end paketi poput JpGraph ili jQuery-jFeed, njihove datoteke mogu biti iskorišćene za čitanje osetljivih datoteka poput /etc/passwd:
/usr/share/doc/libphp-jpgraph-examples/examples/show-source.php
/usr/share/javascript/jquery-jfeed/proxy.php
/usr/share/moodle/mod/assignment/type/wims/getcsv.php
Lokalni Gadget za SSRF
Korišćenjem MagpieRSS's magpie_debug.php na /usr/share/php/magpierss/scripts/magpie_debug.php, može se lako stvoriti SSRF ranjivost, pružajući prolaz za dalja iskorišćavanja.
Lokalni Gadget za RCE
Mogućnosti za Remote Code Execution (RCE) su velike, sa ranjivim instalacijama poput zastare PHPUnit ili phpLiteAdmin. Ove se mogu iskoristiti za izvršavanje proizvoljnog koda, pokazujući opsežan potencijal manipulacije lokalnim gadgetima.
Takođe je moguće jailbreak-ovati iz dozvoljenih foldera prateći symlinkove koje generiše instalirani softver u tim folderima, kao što su:
Cacti Log: /usr/share/cacti/site/
-> /var/log/cacti/
Solr Data: /usr/share/solr/data/
-> /var/lib/solr/data
Solr Config: /usr/share/solr/conf/
-> /etc/solr/conf/
MediaWiki Config: /usr/share/mediawiki/config/
-> /var/lib/mediawiki/config/
SimpleSAMLphp Config: /usr/share/simplesamlphp/config/
-> /etc/simplesamlphp/
Pored toga, zloupotrebom symlinkova bilo je moguće dobiti RCE u Redmine.
Ovaj napad koristi preklapanje funkcionalnosti između AddHandler
i AddType
direktiva, koje se obe mogu koristiti za omogućavanje PHP obrade. Prvobitno, ove direktive su uticale na različita polja (r->handler
i r->content_type
respektivno) u unutrašnjoj strukturi servera. Međutim, zbog nasleđenog koda, Apache obrađuje ove direktive naizmenično pod određenim uslovima, pretvarajući r->content_type
u r->handler
ako je prvi postavljen, a drugi nije.
Pored toga, u Apache HTTP Server-u (server/config.c#L420
), ako je r->handler
prazan pre izvršavanja ap_run_handler()
, server koristi r->content_type
kao handler, efektivno čineći AddType
i AddHandler
identičnim u efektu.
Na ovoj prezentaciji, predstavljena je ranjivost gde netačan Content-Length
poslat od strane klijenta može uzrokovati da Apache greškom vrati PHP izvorni kod. To je bilo zbog problema sa obradom grešaka sa ModSecurity i Apache Portable Runtime (APR), gde dvostruki odgovor dovodi do prepisivanja r->content_type
na text/html
.
Zato što ModSecurity ne obrađuje pravilno povratne vrednosti, vraća PHP kod i ne interpretira ga.
TODO: Orange još nije otkrio ovu ranjivost
Ako napadač može da kontroliše Content-Type
zaglavlje u odgovoru servera, moći će da pozove proizvoljne module handler-a. Međutim, do trenutka kada napadač kontroliše ovo, većina procesa zahteva će biti završena. Ipak, moguće je ponovo pokrenuti proces zahteva zloupotrebom Location
zaglavlja jer ako je returned Status
200 i Location
zaglavlje počinje sa /
, odgovor se tretira kao Server-Side Redirection i treba ga obraditi.
Prema RFC 3875 (specifikacija o CGI) u Sekciji 6.2.2 definiše se ponašanje lokalnog preusmeravanja odgovora:
CGI skripta može vratiti URI putanju i upitni niz (‘local-pathquery’) za lokalni resurs u polju zaglavlja Location. To ukazuje serveru da treba ponovo obraditi zahtev koristeći specificiranu putanju.
Zato, da bi se izveo ovaj napad potrebna je jedna od sledećih ranjivosti:
CRLF Injection u CGI odgovorima zaglavlja
SSRF sa potpunom kontrolom nad odgovorima zaglavlja
Na primer, /server-status
bi trebao biti dostupan samo lokalno:
Moguće je pristupiti tome postavljanjem Content-Type
na server-status
i zaglavlja Location koje počinje sa /
Preusmeravanje na mod_proxy
za pristup bilo kom protokolu na bilo kojoj URL adresi:
Međutim, X-Forwarded-For
zaglavlje je dodato kako bi se sprečio pristup krajnjim tačkama metapodataka u oblaku.
Pristupite lokalnom Unix Domen Socket-u PHP-FPM-a da biste izvršili PHP backdoor smešten u /tmp/
:
Zvanična PHP Docker slika uključuje PEAR (Pearcmd.php
), alat za upravljanje PHP paketima putem komandne linije, koji se može zloupotrebiti za dobijanje RCE:
Check Docker PHP LFI Summary, written by Phith0n for the details of this technique.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)