文件包含漏洞
什么是文件包含
指的是一个源文件可以将另一个源文件的全部内容包含进来。
使用场景是将重复部分代码单独一个文件,然后在有需要的页面直接引入该文件,减少重复代码便于维护。
而如果包含的文件是通过参数传递,且是我们可修改的,那么可以让它包含恶意文件拿到webshell。
本地包含
如果代码里有限制只能包含本地文件,那么可以上传图片马(正常图片尾部加入一句话代码),使用文件包含漏洞来执行。
有些包含地方会有限制包含的文件类型如:
<?php
$filename = $_GET['filename'];
include($filename+'.html');
?>
这里限制了包含的格式是php,但我们只能上传jpg格式。
通过填充大量 *绕过(windows OS,要长于256;linux OS 长于4096)
shell.php*****************************************************************************
远程包含
如果可以远程包含,无需在目标网站上传,直接包含我们自己服务器上的木马文件。
有些包含地方会有限制包含的文件类型如:
<?php
$filename = $_GET['filename'];
include($filename+'.html');
?>
通过尾部添加:?、#、空格绕过
shell.php?
shell.php%23
shell.php%20
伪协议
通过伪协议可以执行一些操作
php://filter 文件读取
php://filter/read=convert.base64-encode/resource=index.php
data:// 命令执行(php版本大于等于5.2,allow_url_include和allow_url_fopen都为开启状态)
data://text/plain,<?php phpinfo();?>
文件下载漏洞
什么是文件下载
文件下载功能如果是通过传递的参数下载文件,没有做目录类型等过滤,且参数是我们可以修改的,那么通过修改参数就可以下载任意文件。
判断是否是存在漏洞
找到网站的下载功能页,随便下载个东西,查看下载请求格式,注意请求头,post参数,get参数等,都有可能是传参的地方。
如果有传递路径或文件名的参数,那就可能存在文件下载漏洞。
多看几个下载对比下。
存在加密传参
有些下载请求的参数可能是加密的,大部分都是base64加密,如果看到传参有疑似加密参数的,去解密看看会有惊喜。
http://xx.aabbcc.com/download?file=JUZEJUQ2JUFEayVGNyVFMiU5NSVFRiVGMyU4QSU5MCUwMA==
http://xx.aabbcc.com/download?file=/data/file/好东西.zip
文件读取漏洞
文件读取功能如果是通过传递的参数读取文件,没有做目录类型等过滤,且参数是我们可以修改的,那么通过修改参数就可以读取任意文件。
与文件下载基本一样的原理,一个下载,一个读取。
评论区