前言:
服务器通常不会执行文件,除非它们已被配置为这样做。例如,在 Apache 服务器执行客户端请求的 PHP 文件之前,开发人员可能必须将以下指令添加到他们的/etc/apache2/apache2.conf文件中:
LoadModule php_module /usr/lib/apache2/modules/libphp.so
AddType application/x-httpd-php .php
- 许多服务器还允许开发人员在各个目录中创建特殊的配置文件,以便覆盖或添加一个或多个全局设置。例如,Apache
服务器将从一个名为(.htaccess如果存在)的文件中加载特定于目录的配置。
同样,开发人员可以使用web.config文件在 IIS 服务器上进行特定于目录的配置。这可能包括如下指令,在这种情况下允许将 JSON 文件提供给用户:
<staticContent>
<mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>
Web 服务器在存在时使用这些类型的配置文件,但通常不允许您使用 HTTP 请求访问它们。但是您可能偶尔会发现无法阻止您上传自己的恶意配置文件的服务器,在这种情况下,即使您需要的文件扩展名被列入黑名单,您也可以欺骗服务器将任意自定义文件扩展名映射到可执行的 MIME 类型。
第一步:登录网站,上传文件e.php失败,网站禁止上传.php类型文件。
第二步:打开 Burp 的代理历史记录,设置过滤器,找到POST /my-account/avatar用于提交文件上传的请求发送到“重发器”。在响应中,请注意标头显示您正在与 Apache 服务器通信。
第三步:进行以下更改:
1.filename将参数 的值更改为.htaccess
。
2.Content-Type将标头 的值更改为text/plain
.
3.将上传文件的内容替换为以下 Apache 指令:AddType application/x-httpd-php .l33t)
这会将任意扩展名 ( .l33t) 映射到可执行 MIME 类型application/x-httpd-php。由于服务器使用该mod_php模块,它已经知道如何处理这个问题。
第四步:复制请求到浏览器,找到请求并修改filename参数值,更改exploit.php为exploit.l33t。再次发送请求,发现文件上传成功。
第五步:复制到浏览器响应,切换到包含GET /files/avatars/<文件名>请求。观察响应中返回了 Carlos 的秘密。
1.首先将修改后的请求复制到浏览器
2.找到GET请求
将密码提交,实验完成!
文中有的地方可能讲的不对,还希望大佬多多保函,给予改正,万分感谢!