Apache
Last updated
Last updated
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)
Angalia ni extensions gani zinazoendesha seva ya Apache. Ili kuzitafuta unaweza kutekeleza:
Pia, baadhi ya maeneo ambapo unaweza kupata usanidi huu ni:
Aina hizi za mashambulizi zimeanzishwa na kuandikwa na Orange katika chapisho hili la blog na yafuatayo ni muhtasari. Shambulio la "confusion" kimsingi linatumia jinsi moduli kumi za kufanya kazi pamoja kuunda Apache hazifanyi kazi kwa usahihi na kufanya baadhi yao kubadilisha data zisizotarajiwa kunaweza kusababisha udhaifu katika moduli inayofuata.
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 ?
:
Kukanganya Mipangilio ya RewriteFlag
Katika sheria ifuatayo ya rewrite, 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:
Inawezekana kufikia faili ambazo mtumiaji hapaswi kuwa na uwezo wa kufikia hata kama ufikiaji unapaswa kukataliwa na mipangilio kama:
Hii ni kwa sababu kwa kawaida PHP-FPM itapokea URLs zinazomalizika kwa .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.
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.
Disclose CGI Source Code
Just adding a %3F at the end is enough to kufichua the source code of a cgi module:
Fichua Msimbo 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:
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:
Hata hivyo, mifumo ya uendeshaji ya Debian/Ubuntu kwa default inaruhusu /usr/share
:
Therefore, it would be possible to kutilia faili zilizo 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 iliyo 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, kutumia 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 RewriteRule isiyo salama.
Gadget ya Mitaa kwa LFI
Ikiwa PHP au pakiti fulani za mbele kama JpGraph au jQuery-jFeed zimewekwa, faili zao zinaweza kutumika 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 mashambulizi 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 kutumika kutekeleza msimbo wa kiholela, ikionyesha uwezo mkubwa wa udanganyifu wa gadget za ndani.
Pia inawezekana kufanya jailbreak kutoka kwa folda zilizo ruhusiwa kwa kufuata symlinks zinazozalishwa 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, kutumia symlinks ilikuwa inawezekana kupata RCE katika Redmine.
Shambulio hili linatumia mchanganyiko wa kazi kati ya maagizo ya AddHandler
na AddType
, ambayo yote yanaweza kutumika kuwezesha usindikaji wa PHP. Awali, maagizo haya yalihusisha maeneo tofauti (r->handler
na r->content_type
mtawalia) katika muundo wa ndani wa seva. Hata hivyo, kutokana na msimbo wa urithi, Apache inashughulikia maagizo haya 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.
Katika hii hotuba, ilionyeshwa udhaifu ambapo Content-Length
isiyo sahihi iliyotumwa na mteja inaweza kusababisha Apache kurudisha msimbo wa chanzo 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.
TODO: Orange haijafichua udhaifu huu bado
Ikiwa mshambuliaji anaweza kudhibiti kichwa cha Content-Type
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 kutumia kichwa cha Location
kwa sababu ikiwa Status
iliyorejeshwa ni 200 na kichwa cha Location
kinaanza na /
, jibu linachukuliwa kama Uelekeo wa Seva na linapaswa kushughulikiwa.
Kulingana na RFC 3875 (maelezo kuhusu CGI) katika Sehemu ya 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 kichwa cha 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 majibu ya CGI
SSRF kwa udhibiti kamili wa vichwa vya majibu
Kwa mfano /server-status
inapaswa kuwa inapatikana tu kwa ndani:
Ni inawezekana kuipata kwa kuweka Content-Type
kuwa server-status
na kichwa cha Location kinachoanza na /
Kuelekeza kwa mod_proxy
ili kufikia protokali yoyote kwenye URL yoyote:
Hata hivyo, kichwa cha X-Forwarded-For
kinaongezwa kuzuia ufikiaji wa mwisho wa metadata ya wingu.
Fikia Soketi ya Kihandisi ya Unix ya PHP-FPM ili kutekeleza backdoor ya PHP iliyoko katika /tmp/
:
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:
Angalia Docker PHP LFI Summary, iliyoandikwa na Phith0n kwa maelezo ya mbinu hii.
Jifunze & fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Jifunze & fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)