Lxiaozhu
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

文件包含漏洞个人理解
存在原因
服务器执行php文件时,通过文件包含函数来加载另一个文件中的php代码,然后未加限制或者限制做的不到位。
$file=$_GET['x'];
include($file);
例如此代码,直接包含get传过来的参数进行包含。 只要执行文件包含函数所包含的文件不管是不是php文件只要里面有php代码那么就会被执行!
php文件包含函数
require()
require_once()
include()
include_once()
思路
配合文件上传getshell
利用php伪协议/远程包含
配合记录日志进行getshell,日志会记录访问UA信息,修改UA信息为后门代码,包含即执行后门代码
配合文件上传
什么是文件上传?可以看一看我前面所写的文章,这里就不多说了。 如果文件上传限制做的比较好的话,那我们只能上传它所规定的文件类型,但是可以这个文件内容我们是可控的(webshell代码)。 如:txt,png,jpg,gif等等其它文件格式 当有文件包含漏洞的话,那我们就可以利用漏洞去包含我们的后门文件执行后门代码。
上一篇文章里面pikachu靶场有一关做的后缀白名单防护,好像是只允许jpg.png.gif文件吧。 当我们上传一个带后门的png文件,然后跳到文件包含那一关,利用漏洞跳出当前目录到后门文件目录执行后发现图片文件被调用了(当时我弄的phpinfo)。
利用php伪协议/远程包含
php伪协议解释网上好的文章有很多何以去看一看我这里就不仔细描述了。 看这张图提示就能明白要想利用是有条件的。 file://协议和远程包含的条件
allow_url_fopen:off/on
allow_url_include:off/on
可以看到filename将png文件执行php代码了,file需要知道绝对路径。 下面看一下http协议
由于我没有服务器我这里就简单测试一下 它可以包含一个远程地址的文件,如果在你的服务器下构造一个webshell让它去包含。
因为我用的是本站执行可能不太严谨,所以换了一个服务器还是一样的结果。
配合记录日志进行getshell,日志会记录访问UA信息,修改UA信息为后门代码,包含即执行后门代码
什么是UA信息? 数据包的User Agent记录的访问者浏览器的版本信息,还可以区分浏览器和移动端还是PC端。 网站日志文件会读取UA信息,通过抓包改包的方式修改UA的内容,然后日志文件记录后,利用文件包含漏洞包含日志文件。 简单来说就是将后面代码写入日志然后通过包含日志文件执行getshell。 条件是要知道日志文件的绝对路径,一般通过网上查询相应中间件的日志文件存放位置来利用。
简单描述这么多吧,还是有很多利用方案的,session和UA大同小异,但是细节不同。
文件包含漏洞防御
设置白名单
代码在进行文件包含时,如果文件名可以确定,可以设置白名单对传入的参数进行比较。
过滤危险字符
由于Include/Require可以对PHP [Wrapper](https://so.csdn.net/so/search?q=Wrapper&spm=1001.2101.3001.7020)形式的地址进行包含执行(需要配置php.ini),在Linux环境中可以通过”…/…/”的形式进行目录绕过,所以需要判断文件名称是否为合法的PHP文件。
设置文件目录(配置php.inn
PHP配置文件中有open_basedir选项可以设置用户需要执行的文件目录,如果设置目录的话,PHP仅仅在该目录内搜索文件。
关闭危险配置(配置php.ini)
PHP配置中的allow_url_include选项如果打开,PHP会通过Include/Require进行远程文件包含,由于远程文件的不可信任性及不确定性,在开发中禁止打开此选项,PHP默认是关闭的。
总结
任意文件包含漏洞出现的主要原因是在能够解析处理脚本文件的函数上,没有对输入的变量进行过滤,导致任意文件包含,进而导致恶意代码执行。在开发处理这类功能函数上,一定要遵循编程规范;在代码核心处,对变量进行过滤限制,设置文件路径或者白名单,避免执行任意文件包含。
转载出https://blog.csdn.net/wsnbbz/article/details/104651996
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
