ToB企服应用市场:ToB评测及商务社交产业平台
标题:
文件包含漏洞篇
[打印本页]
作者:
篮之新喜
时间:
2022-6-23 14:26
标题:
文件包含漏洞篇
文件包含漏洞原理
程序开发人员通常会把
可重复使用的执行函数
写在单个文件内,在使用某个函数的时候,直接可以通过文件包含函数,
直接调用执行函数文件
,无需多次或再次编写,这种调用文件的过程通常被称为包含
产生的原因:
为了代码更加的灵活,开发者会把
被包含的文件设置为变量,
进行
动态调用,从而导致客户端可以调用任意文件,
假设攻击者构造恶意代码,并包含了该恶意代码执行文件。
文件包含漏洞可以解析含PHP代码的文件内容
如果文件内 包含php可执行代码 则php程序会被
解析并正常执行
产生原因
⭐⭐⭐PHP文件包含会将一切的文件当成PHP脚本执行
文件包含是php的正常功能,如果包含的文件用户可以控制。且后端代码没有进行严格验证,就会造成文件包含漏洞。
Java、ASP是完全面向对象的语言 不存在文件包含漏洞
产生代码思路
[/code][b]⭐⭐⭐[/b]PHP文件包含常用函数:
[list]
[*]include include "db_connect.php" 包含db_connect.php脚本文件
- 如果脚本文件不存在,则网站提示报错,[b]不影响执行[/b]
[*]include_once incluede_once "db_connect.php" [b]只包含一次[/b]php脚本文件
- 如果脚本文件不存在,则网站提示报错,不影响执行程序继续执行
[*]require incluede_once "db_connect.php" 包含db_connect.php脚本文件
- 如果脚本文件不存在,则网站[b]出现致命错误[/b]并终止执行
[*]require_once incluede_once "db_connect.php" ** 只包含一次[b]php脚本文件
- 如果脚本文件不存在,则网站[/b]出现致命错误**并终止执行
[/list]代码审计思路:搜索可能产生漏洞的函数
include
include_once
require
require_once
[size=3]防御方法[/size]
对文件包含内容做判断;文件包含处写死
[size=4]文件包含漏洞利用[/size]
[img]https://img2022.cnblogs.com/blog/2902742/202206/2902742-20220620212647109-670526080.png[/img]
[img]https://img2022.cnblogs.com/blog/2902742/202206/2902742-20220620212657015-1796464483.png[/img]
[size=3]文件包含漏洞分类[/size]
[size=2]本地文件包含[/size]
allow_url_fopen=On/Off(php默认就是On)
allow_url_include=On/Off(php默认是Off)
[size=2]远程文件包含[/size]
allow_url_fopen=On/Off(php默认就是On)
allow_url_include=On/Off(php默认是Off,远程文件包含[b]需要手动开启[/b]很少遇见)
[size=3]利用方法[/size]
[list=1]
[*]读取任意文件 绝对路径?file=/etc/passwd
[*]相对路径?file=../../../../etc/passwd
[*]和文件上传漏洞共同利用,包含图片马
[/list][size=3]利用核心[/size]
[b]php文件包含会把一切的文件都当做php脚本执行[/b]
⭐⭐windows 本地host 文件[b]C:/windows/system32/drivers/etc/hosts[/b]
[img]https://img2022.cnblogs.com/blog/2902742/202206/2902742-20220620212715810-582587952.png[/img]
绕过方法:
%00截断
条件:
[b]1.magic_quotes_gpc = Off 2.php 版本低于5.3.4[/b]
[b]3.远程文件包含[/b]
远程文件包含可以包含任意的url链接进行调用
[img]https://img2022.cnblogs.com/blog/2902742/202206/2902742-20220620212807873-566726128.png[/img]
[img]https://img2022.cnblogs.com/blog/2902742/202206/2902742-20220620212817643-481564714.png[/img]
[img]https://img2022.cnblogs.com/blog/2902742/202206/2902742-20220620212829052-726377441.png[/img]
绕过方法:
[list=1]
[*]?绕过
[*][size=6]绕过 在url中#需要编码[/size]
[*]%20空格绕过
[*]攻击机主动更改后缀名
[/list][size=4]PHP伪协议[/size]
[size=3]file://访问本地系统文件 必须跟上绝对路径 读取本地文件[/size]
(allow_url_fopen和allow_url_include无论开关都可以)
[img]https://img2022.cnblogs.com/blog/2902742/202206/2902742-20220620212846930-1721381214.png[/img]
[size=3]php://filter 常用于读取文件/源码[/size]
[img]https://img2022.cnblogs.com/blog/2902742/202206/2902742-20220620212901069-472942517.png[/img]
(allow_url_fopen和allow_url_include无论开关都可以)
读取php文件时可以防止其执行 所以使用该伪类协议 对文件内容进行编码输出的处理
base64编码方法
?path=php://filter/read=convert.base64-encode/resource=文件.php txt
rot13加密方法
?path=php://filter/string.rot13/resource=文件.php
[size=2]php://filter协议和file://协议的区别[/size]
file://伪协议只能使用绝对路径
php:filter//伪协议可以相对路径和绝对路径都可以使用
[size=3]php://input 接收POST请求体当作PHP代码执行[/size]
接收POST体当作php代码执行
[img]https://img2022.cnblogs.com/blog/2902742/202206/2902742-20220620212919183-808446825.png[/img]
[img]https://img2022.cnblogs.com/blog/2902742/202206/2902742-20220620212929974-67283471.png[/img]
allow_url_fopen off/on
offallow_url_incluede On 必须开启
[size=2]burpsuite 执行演示[/size]
[img]https://img2022.cnblogs.com/blog/2902742/202206/2902742-20220620212953179-725071623.png[/img]
[size=4]其它伪协议的使用方法[/size]
[img]https://img2022.cnblogs.com/blog/2902742/202206/2902742-20220620213030175-567139702.png[/img]
[size=3]zip:// 读取Zip文件内容[/size]
allow_url_fopen;allow_url_include 无论开关
【必须是绝对路径】包含读取zip文件中内容
?id=zip://D/phpStudy/www/file.zip%23test.txt
[size=3]data://text/plain 把GET请求参数中的一部分字符串当作PHP脚本执行[/size]
allow_url_fopen;allow_url_include 都需打开
伪协议编码
[code]data://text/plain,<?php phpinfo()?>
复制代码
对base64编码后的字符进行php代码执行
data://text/plain;base64,[执行脚本]
base64编码是 出现+号 在URL中 出现 需要二次编码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4