php所提供的文件包含功能太强大,导致包含漏洞易出现
php文件包含漏洞
四个函数 include(),include_once(),require(),require_once()
区别:require找不到被包含的文件会报错并停止运行,include则是警告继续运行脚本
once为包含一次的意思,只会包含一次文件中代码
本地包含
只要文件中有正确的php代码,就好被执行。
可利用文件上传与文件包含来执行恶意代码。
非php代码文件会暴露源码信息
远程包含
条件是远程包含功能开启
在php.ini中
all_url_include = off /on 默认为off 需改为on
攻击者可构造恶意站点进行攻击。
$_GET[‘page’]
利用方式
- 敏感文件读取
访问目标主机文件,若有并且可以读取,可以读取文件内容
无该文件,会有类似open_basedir restriction in effect的警告
敏感路径
windows
linux
2. 远程包含shell
若all_url_open是激活状态可以写入一句话木马
如:
?>
-
本地包含+文件上传
可以上传图片,文档
采用拼接方式构造图片木马等
再加上包含漏洞,调用文件
即使是jpg格式文件php恶意代码也会执行 -
php封装协议
①封装协议读取文件
php://filter/read=convert.base64-encode/recource=index.php;
读取源码并加密
对此有:
https://blog.csdn.net/destiny1507/article/details/82347371
②写入php文件
php://input 可以执行php语句,allow_url_include = on
构造
在index.php所在目录下生成shell.php
5. 日志文件利用
利用apache的access.log日志(变像上传文件)
构造一个
http://www.xxx.com/<?php phpinfo(); ?>
apache会记录这条记录
浏览器会对<>进行编码,要抓包修改
然后再用包含漏洞去包含access.log
代码会被执行
首先要确定日志文件路径
- 截断包含
部分程序员设计网站时会给包含文件加扩展名的处理
比如包含1.jpg会被解析成1.jpg.php文件不存在!
00截断的方法
1.jpg%00 会截断后面的.php
magic_quotes_gpc=off 若为on%00(NULL)会被转义,会为单引号,双引号,反斜杠,null转义
- 绕过waf防火墙
藏在jpg文件里的木马一般检测不到。
jsp包含
静态包含
特征<%@ include file=“page.txt”%>
动态包含
<jsp: include page=“page.txt”/>
---略
如何杜绝?
- 保证包含的参数不可以被外部控制
- 限制被包含文件在某一文件夹
- 包含文件验证------白名单
- 不要使用动态包含如 inlcude(“head.php”);
来源:CSDN
作者:砍箱子
链接:https://blog.csdn.net/weixin_45551083/article/details/104761090