文件包含漏洞
文件包含漏洞的定义:
Php文件包含漏洞的产生原因是在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。
产生的原因:
程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这中文件调用的过程一般被称为文件包含。
程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,
但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。
文件包含漏洞有哪几种类型:
1.本地文件包含漏洞
本地包含顾名思义,就是在网站服务器本身存在恶意文件,然后利用本地文件包含使用
2.远程文件包含漏洞
远程文件包含就是调用其他网站的恶意文件进行打开(指定第三方服务器上可运行的PHP木马,拿到webshell,拿到flag文件)
导致文件包含漏洞产生的四个函数
Include()
Include_once() 只包含一次
Require()
Require_once() 只包含一次
Php.ini 全局配置文件
这个文件用来查看一下两个是否开启或关闭
Allow_url_fopen= on/off 允许打开URL文件(预设启用)/ 禁止打开URL文件
Allow_url_include= on/off 允许引用URL文件,新版增加功能(预设关闭) / 禁止引用URL文件,新版增加功能
本地文件包含(解题思路)
直接包含有Flag的文件
通过php伪协议读取代码中的Flag
写入php木马获取webshell,查看Flag
直接包含flag文件
通过php伪协议读取代码中的Flag
Php伪协议(一下两种是经常用到的)
File:// 访问本地文件系统
Php:// 访问各个输入/输出流
一般url中存在参数就可以去猜想是否存在文件包含漏洞,而在不能直接使用file://的情况下(这里也不能直接去查看php.ini文件),我们则需要去查看网页源代码,而输出如下:
File =php://filter/read = convert.base64-encode/resource = index.php
Resource 指定我们要筛选的数据流
Read 可以设定过滤器的名称(就是读取Index.php的内容),并对输入流进行base64编码进行输出(这里必须进行base64编码,不然就会当作php文件进行执行,这样就看不到源码的内容了)
写入php木马获取webshell,查看Flag
将木马上传成功后就可以直接用菜刀连接木马即可查看flag文件
如何判断远程文件包含是否存在
直接查看php.ini全局配置文件
并且以下两个都要开启,才存在远程文件包含漏洞
Allow_url_fopen= on/off 允许打开URL文件(预设启用)/ 禁止打开URL文件
Allow_url_include= on/off 允许引用URL文件,新版增加功能(预设关闭) / 禁止引用URL文件,新版增加功能
远程文件包含漏洞的解题思路
先看远程文件包含漏洞是否存在
指定第三方服务器上可运行的php木马,拿到webshell,查看flag文件
注意:这里一般都是做一个Php木马,在通过url进行运行,拿到webshell,查看flag文件
webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境,主要用于网站管理、服务器管理、权限管理等操作。使用方法简单,只需上传一个代码文件,通过网址访问,便可进行很多日常操作,极大地方便了使用者对网站和服务器的管理。正因如此,也有小部分人将代码修改后当作后门程序使用,以达到控制网站服务器的目的。 [1]
顾名思义,“web”的含义是显然需要服务器开放web服务,“shell”的含义是取得对服务器某种程度上操作命令。webshell主要用于网站和服务器管理,由于其便利性和功能强大,被特别修改后的webshell也被部分人当作网站后门工具使用。
伪协议
?file=php://filter/read=convert.base64-encode/resource=flag.php
这里设置base64编码将flag.php给隐藏了