·xss文件上传漏洞
本质:对上传的文件不加限制的漏洞,例如上传PHP文件。
面对一定程度上的防护,我们应该如何绕过。
一·,一句话木马:
<?php
Eval($.post{})>
::$DATA ([‘pass’]);
?>
再url栏对pass进行赋值,可实现类似cmd命令的操作。
Eval():将括号内的语句当作PHP语句进行执行。
二,工具:webs hell,可以通过它传递任意php代码,让其去执行,并且是可视化操作。
三,靶场:upload-labs(注意要使用老版本的PHP study,不然无法运行)。
- 绕过方法
- 若过滤.php,可以将其改为.ph51上传(我们可以通过尝试 php3、php5、php*这种后缀名尝试,PHP5 文件实际上就是.PHP 文件,只不过代码由 PHP5 引擎解析。PHP5 是一种 PHP 版本间的区分,该后缀名并不常见,另外还有.PHP2、.PHP3 和.PHP4 文件。而当前最新的 PHP 版本为 PHP7)。
- 存在 js 前端判断,通过删除前端代码中的 checkfile(),使前端无法对上传的文件进行判断。
- 先上传一个符合要求后缀的文件,使用抓包软件进行抓包,发送成功后将文件名改为.php,再放包。
- 开代理进行抓包,看过滤位置在前端还是后端。
- 在前端过滤的话,更改文件后缀让其运行。
- 将文件后缀改为原后缀,重发,让其运行。
- 复制链接,将其添加到webs hell上,得到shell。
- 如果服务端代码是通过 Content-Type (白名单)的值来判断文件的类型,那么就存在被绕过的可能,因为可以将其修改为可以通过的类型。
4,超文本入口:.htaccess,可以重新定义规则,例如:
:AddType application/x-httpd-php .jpg
这个指令代表着.jpg 文件会当做.php进行执行,但检测时,会被识别为jpg文件。
5,用 5.php. .绕过
代码运行最后得到的后缀为"." 不在黑名单中 然而又用原来的 5.php. .来拼接路径 由于 windows在文件命名中会删除.和空格 所以最终得到的是 5.php 因此绕过了黑名单限制。
补充知识:php 在 window 的时候如果文件名+"::$DATA"会把::$DATA 之后的数据当成文件流处理, 不会检测后缀名,且保持"::$DATA"之前的文件名 他的目的就是不检查后缀名。所以我们上传的文件绕过了检测,会被执行。
6,大小写绕过
$file_ext = strtolower($file_ext); //转换为小写 这个函数会将文件后缀名转化为小写 如果没有这类型的函数进行黑名单的检测,我们可以考虑使用大小写绕过的方式进行文件上传。 例如 pHP、PHP、PHp。
7、空格绕过 $file_ext = trim($file_ext); //首尾去空 会将文件后缀名前后的空格去除 在没有这种函数的情况 下,我们可以使用在后缀名后面加空格的方法绕过黑名单检测。
8、加点绕过
$file_name = deldot($file_name);//删除文件名末尾的点 在没有这类型函数的情况下,我们可以在文件名后加.绕过黑名单。
9、::$DATA 绕过
补充知识:php 在 window 的时候如果文件名+"::$DATA"会把::$DATA 之后的数据当成文件流处理, 不会检测后缀名,且保持"::$DATA"之前的文件名名可以改成 1.php::$DAT
10、综合型绕过,具体得根据代码是如何过滤的来设定
用 10.php. .绕过代码运行最后得到的后缀为"." 不在黑名单中 然而又用原来的 10.php. .来保存文件,因此绕过了黑名单限制。
11、双写绕过
阅读代码 关键代码如下
$file_name = trim($_FILES['upload_file']['name']);
$file_name = str_ireplace($deny_ext,"", $file_name);
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.$file_name;
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
}
发现依旧是用上传的文件名来拼接路径并保存文件 没有对文件重命名,只是用了 str_ireplace()函数
来检测(此函数无视大小写) 如果文件名含有黑名单里面的字符串 就替换为空
但是只替换一次 并没有进行正则匹配或者是循环匹配敏感字符 因此只要双写 php 即可 因为是从
左往右读的 所以替换为空后 还是 php。pphphp、phphpp 都可以尝试
12、get 型 00 截断
需要 php 版本<5.3.4,并且 magic_quotes_gpc 关闭。
上传 zoe.php 用 BP 抓包修改参数,把 upload/后面加上 zoe.php%00(即图二),下面的
filename=”zoe.php”改为 zoe.png