当前位置:网站首页>文件包含漏洞
文件包含漏洞
2022-06-29 19:47:00 【弥补之途】
文件包含
程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,无需再次编写,这种调用文件的过程一般被称为文件包含。
原理
文件包含漏洞产生的原因是在通过PHP函数引入文件时,由于传入的文件没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。
文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞。远程文件包含漏洞是因为开启了PHP配置中的allow_url_include选项,选项开启之后,服务器允许包含一个远程文件,服务器通过PHP特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到自己的目的。
远程包含条件
在php.ini里有两个重要的参数allow_url_fopen、allow_url_include。只有
allow_url_fopen:默认值是ON。允许url里的封装协议访问文件;
allow_url_include:默认值是OFF,需要远程包含的时候需要设置成On。不允许包含url里的封装协议包含文件;
PHP中常见包含函数
include():当使用该函数包含文件时,只有代码执行到 include()函数时才将文件包含
进来,发生错误时之给出一个警告,继续向下执行。
include_once():与Include()相同,区别在于当重复调用同一文件时,程序只调用一次
require():require()与include()的区别在于require()执行如果发生错误,函数会输出
错误信息,并终止脚本的运行。
require_once():与require()相同,区别在于当重复调用同一文件时,程序只调用一次
常用PHP伪协议
file://
访问本地文件系统
不受 allow_url_fopen、allow_url_include 影响
php 涉及到文件以及协议的地方默认使用 file 协议,如果没有写出协议名或者协议不存在,都会被当成 file 协议来解析
http://、ftp://
访问 HTTP(s) 网址/访问 FTP(s) URLs
allow_url_fopen = On、allow_url_include = On
php://
访问各个输入/输出流(I/O streams)
包括 php://stdin、php://stdout、php://stderr、php://input、php://output、php://filter、php://fd、php://memory、php://temp 九种。php://input
访问请求的原始数据的只读流,即直接读取POST上没有经过解析的原始数据,enctype=“multipart/form-data” 的时候 php://input 是无效的
allow_url_include = On、不受 allow_url_fopen 影响php://filter
数据流打开时的筛选过滤应用,读取本地源代码;
不受 allow_url_fopen、allow_url_include 影响。
?a=php://filter/read=convert.base64-encode/resource=index.php("read="可以省略) //将php文件通过base64编码读出,若不加read=convert.base64-encode,则会将其中内容当做php代码执行。
zip://
压缩流,可以访问压缩文件中的子文件,将子文件的内容当做 php 代码执行
不受 allow_url_fopen、allow_url_include 影响
文件路径必须为绝对路径;zip文件后缀名可以改为其他如图片后缀;#进行url编码为%23
zlib://、bzip2://
压缩流,可以访问压缩文件中的子文件,将子文件的内容当做 php 代码执行
不受 allow_url_fopen、allow_url_include 影响
文件路径无绝对路径限制;zlib://协议文件压缩为zip或gz都可以,bzip2://协议文件压缩为bz2;后缀名也可以改为其他如图片后缀

利用方式
包含日志文件
原理:WEB服务器一般会将用户的访问记录保存在访问日志中。那么我们可以根据日志记录的内容,精心构造请求,把PHP代码插入到日志文件中,通过文件包含漏洞来执行日志中的PHP代码。
利用条件:
1、日志的物理存放路径
2、存在文件包含漏洞
3、curl命令行url请求工具或者 burpsuit代理
日志默认路径:
1. apache+Linux日志默认路径
/etc/httpd/logs/access_log
/var/log/httpd/access_log
2. apache+win2003日志默认路径D:\xampp\apache\logs\access.log
D:\xampp\apache\logs\error.log
3. IIS6.0+win2003默认日志文件C:\WINDOWS\system32\Logfiles
4. IIS7.0+win2003 默认日志文件%SystemDrive%\inetpub\logs\LogFiles
5. nginx 日志文件日志文件在用户安装目录logs目录下
以我的安装路径为例/usr/local/nginx,
那我的日志目录就是在/usr/local/nginx/logs里web中间件默认配置
1.apache+linux 默认配置文件
/etc/httpd/conf/httpd.conf
index.php?page=/etc/init.d/httpd
2.IIS6.0+win2003 配置文件C:/Windows/system32/inetsrv/metabase.xml
3.IIS7.0+WIN 配置文件C:\Windows\System32\inetsrv\config\applicationHost.config
curl 构造一句话,写入日志文件测试记录
D:\curl>curl -v "http://127.0.0.1/php/1.php?page=<?php @eval($_POST\[123\]);?>"
包含上传文件
包含临时文件
php中上传文件,会创建临时文件。在linux下使用/tmp目录,而在windows下使用c:\winsdows\temp目录。在临时文件被删除之前,利用竞争即可包含该临时文件。
包含session
可以先根据尝试包含到SESSION文件,在根据文件内容寻找可控变量,在构造payload插入到文件中,最后包含即可。
利用条件:
- 找到Session内的可控变量
- Session文件可读写,并且知道存储路径
session常见存储路径:
/var/lib/php/sess_PHPSESSID
/var/lib/php/sess_PHPSESSID
/tmp/sess_PHPSESSID
/tmp/sessions/sess_PHPSESSID
session文件格式: sess_[phpsessid] ,而 phpsessid 在发送的请求的 cookie 字段中可以看到。
包含 /pros/self/environ
原理:proc/self/environ中会保存user-agent头,如果在user-agent中插入php代码,则php代码会被写入到environ中,之后再包含它,即可。
利用条件:
php以cgi方式运行,这样environ才会保持UA头。
environ文件存储位置已知,且environ文件可读。
c:\boot.ini // 查看系统版本
c:\XX\httpd.conf Apache配置信息
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 账户密码文件
/etc/httpd/conf/httpd.conf Apache配置文件
/etc/my.conf mysql 配置文件
/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相关配置绕过方法
目录遍历(目录穿越)
使用 ../../ 来返回上一目录,被称为目录遍历(Path Traversal)。
编码绕过
服务器端常常会对于../等做一些过滤,可以用一些编码来进行绕过。
%00截断
%00会被认为是结束符,后面的数据会被直接忽略,导致扩展名截断。攻击者可以利用这个漏洞绕过扩展名过滤。
条件:magic_quotes_gpc=off PHP<5.3.4
路径长度截断
操作系统存在最大路径长度的限制。可以输入超过最大路径长度的目录,这样系统就会将后面的路径丢弃,导致扩展名截断。
Windows下目录的最大路径256B
Linux下目录的最大路径长度为4096B
例:filename=xiaohua.txt/./././././././././././././././././././././././././././././././././././.././
点号截断
点号截断适用于Windows系统,当点号的长度大于256B时,就可以造成扩展名截断。
例:?filename=xiaohua.txt................................................................................
无限制远程文件包含
无限制远程文件包含是指文件的位置并不是本地服务器,而是通过URL形式包含其他服务器上的文件,执行文件中的恶意代码。
有限制远程文件包含
有限制远程文件包含是指当代吗中存在特定的前缀或者.php、.html等扩展名过滤时,攻击者仅需要绕过前缀或者扩展名过滤,才能执行远程URL中恶意代码。
1.问号绕过:文件名后加"?"号
2.#号绕过:文件名后加"%23"(#号编码:%23)
3.空格绕过:文件名后加空格(空格编码:%20)
边栏推荐
- How important is it to make a silver K-line chart?
- The list of winners in the classic Smurfs of childhood: bluedad's digital collection was announced
- Exploration and practice of NLP problem modeling scheme
- The concept and properties of mba-day26 number
- 3-2主机发现-三层发现
- 苹果iPhone手机升级系统内存空间变小不够如何解决?
- 以其他组件为代价的性能提升不是好提升
- Freemaker template framework generates images
- npm ERR! fatal: early EOF npm ERR! fatal: index-pack failed
- Performance improvement at the cost of other components is not good
猜你喜欢

Classic illustration of K-line diagram (Collection Edition)

The list of winners in the classic Smurfs of childhood: bluedad's digital collection was announced

一次 Keepalived 高可用的事故,让我重学了一遍它!

数据基础设施升级窗口下,AI 新引擎的技术方法论

【精品】pinia详解

One hour to build a sample scenario sound network to release lingfalcon Internet of things cloud platform

CorelDRAW最新24.1.0.360版本更新介绍讲解
![[network orientation training] - Enterprise Park Network Design - [had done]](/img/12/17f95378fcc6d0fef15feb99cc4f49.png)
[network orientation training] - Enterprise Park Network Design - [had done]

3-3主机发现-四层发现

npm ERR! fatal: early EOF npm ERR! fatal: index-pack failed
随机推荐
Sword finger offer 41 Median in data stream
4-1端口扫描技术
La collection numérique Meng xiangshun, artiste national du tigre peint, est disponible en quantité limitée et est offerte avec Maotai de l'année du tigre
Dynamics CRM: 本地部署的服务器中, Sandbox, Unzip, VSS, Asynchronous还有Monitor服务的作用
做白银k线图有多重要?
一个mysql里有3306端口下,一个mysql有20多个数据库,怎么一键备份20多个数据库,做系统备份,防止数据误删除?
【网络方向实训】-企业园区网络设计-【Had Done】
After CDN is added to the website, the Font Icon reports an error access control allow origin
童年经典蓝精灵之百变蓝爸爸数字藏品中奖名单公布
NLP - giza++ implements word alignment
Mba-day19 if P then q contradictory relation P and not Q
[observation] softcom power liutianwen: embrace change and "follow the trend" to become an "enabler" of China's digital economy
JVM(4) 字節碼技術+運行期優化
数据基础设施升级窗口下,AI 新引擎的技术方法论
数据链路层
JVM (2) garbage collection
The era of data security solutions
lock4j--分布式锁中间件--自定义获取锁失败的逻辑
14.04 million! Sichuan provincial human resources and social security department relational database and middleware software system upgrade procurement bidding!
Static static member variables use @value injection