PHP -- 文件包含、文件上传漏洞

文件包含

文件包含漏洞

文件引入漏洞,是由一个动态页面编译时引入另一个文件的操作。

文件引入本身是没有问题,它是用于统一页面风格,减少代码冗余的一种技术。但是在特定的场景下就会形成漏洞

jsp:include指令和include动作,其中include动作用于引入动态文件

php:include(),include_once(),require(),require_once() 函数

require() 如果在包含的过程中有错,比如文件不存在,则直接退出

include()如果在包含的过程中有错,只会给出警告,继续执行

require_once()功能同require();include_once()功能同include。如果文件已经被包含了一次,那么_once函数就不会在去包含了
为什么PHP的文件包含比JSP的文件引入漏洞更严重

JSP的include指令仅用于引入静态文件或页面,include动作可用于引入静态页面或动态页面。但是JSP在引入的时候严格限定了文件类型,当引入一个txt的时候,它就是一个文本文件被加载且读取

PHP利用四个函数进行包含时,不管文件是什么类型,都会直接作为PHP文件进行解析

文件包含漏洞条件

必须使用了引入的函数
引入文件的名字参数化并且参数是由用户构建的

本地文件包含 LFI条件

本地文件包含,能打开并包含本地文件的漏洞

php.ini —> allow_url_fopen=on

远程文件包含RFI条件

包含远程服务器上的文件

php.ini—>allow_url_fopen=on

php.ini—>allow_url_include=on

文件包含漏洞的几个思考

在JAVA容器中的文件包含

首先,大部分的程序员不太可能让include的参数动态;其次,大部分程序员在处理include引入时都以静态资源为主。所以在这个环境下使用文件包含漏洞的几率不大。但是,如果WEB-APP中存在文件上传漏洞,那么可以利用上传漏洞上传带有include的页面,又但是,有了上传漏洞不如直接上传文件扫描或者一句话木马。综上,在JAVA容器,JSP文件引入漏洞利用率不高

在PHP容器中的文件包含

服务器会默认对某些参数禁用,但文件包含的4个函数是PHP中常用到的,因此有很大可能在服务器上会开启这些配置。对于引入时动态参数的问题,会有一部分程序员可能这么做,因此在PHP上,文件包含有一定的利用率

PHP伪协议包含

php://input

allow_url_include=on

php://filter

allow_url_include=on

通过指定末尾的文件,可以读取经过base64编码后的文件原文

phar://

版本大于等于5.3.0

allow_url_include=on

读取压缩文件中的内容

zip://

版本大于等于5.3.0

allow_url_include=on

同phar://,使用zip协议需要约对路径,并且使用%23来分割压缩文件名和文件名

b.txt在a.zip里面时,需要包含b.txt则需要用到a.zip%23b.txt

data://

版本大于等于5.2

allow_url_include=on

allow_url_fopen=on

    data://text/plain,<?php phpinfo(); ?>

PHP包含的利用

PHP包含Session

Session包存在服务器,PHP的Session以文件形式存在服务器中,sess_[PHPSESSID]

PHP包含Web日志

MySQL日志

SSH日志

包含environ

包含fd

包含临时文件

包含上传文件

包含其它文件

JSP引入漏洞的利用

利用动作含动态引入WEBSHELL

利用指令引入数据库配置文件,通常为xml或者poperties文件后缀

利用指令引入Web.xml配置文件,这是一个系统工程的全局配置

利用指含引入框架的配置文件,如:spring\springMVC\myBatis等,其中Hibernate框架和MyBatis框架的配置文件包含数据库信息,甚至表信息及语句

理论上可以利用动作非同源引入其它文件,包含容器下其它工程的配置信息

绕过

路径:相对路径 …/…/xxx.php,绝对路径+相对路径 D:/php/…/xxx

编码:利用URL编码

后缀:? %00 file=phpinfo.txt%00

协议:zip
解决

加强服务器配置安全性

有效过滤用户输入,如果一定要动态引入,则限定引入的范围和类型;甚至你可以做一个引入的列表,用户禁止直接输入文件名,只能以编号的形式进行传递,而程序需要判定编号范围,并引入适当的文件

文件上传漏洞

文件上传

比较常见一类漏洞,文件上传漏洞可以上传WebShell、PowerShell、BashShell

并非所有的文件上传功能都有漏洞,并非所有的文件上传漏洞都可以被利用

上传的文件能够被容器加载和编译

上传的文件能够被访问(直接、间接)

上传的文件不能被服务器压缩或者修改内容

在这里插入图片描述

WebShell

php、jsp、asp、aspx

一句话木马:

PHP

<?php
    $a=$_GET['command'];
    eval($a); //或者执行shell_exec
?>

JSP

<%
    String cmd = request.getParameter("command");
    Runtime.getRuntime().exec(cmd)
%>

上传可以上传一句话木马,也可以上传其它的WebShell然后使用菜刀或者冰蝎去连接

绕过限制

验证过程:

利用JS在前端进行的验证
服务器端检查文件后缀名
检查MIME类型
随机新建文件名和扩展名
上传路径是不可被加载解析的
修改文件内容
检查文件内容

绕过:

前端校验 — 直接篡改页面,把JS校验内容删除掉

文件后缀名 — 特殊文件后缀 PHP(phtml);或截断[\0] \t

MIME类型检查

JPEG .jpg .jpeg Content-Type:image/jpeg

TEXT .txt Content-Type:text/plain

网页 .html Content-Type:text/html

RTF .rtf Content-Type:application/rtf

抓包修该类型

常见绕过

利用大小写绕过

利用截断后缀绕过

​ — 找操作系统不能识别但程序会认为是字符串的字符

​ 1.php%00.jpg

​ 1.php/00.jpg

​ 1.php\0.jpg

​ 1.php[\0].jpg

​ 1.php\t.jpg

​ 1.php(0x00).jpg

​ 1.php

利用Windows解析漏洞

​ 1.php.

​ 1.php::$DATA

​ 1.php:1.jpg

利用Apache的解析漏洞

​ 1.php.xxx.abc

​ 上传.htaccess 内容包含 SetHandler application/x-httpd-php

<FilesMatch "filename">
SetHandler application/x-httpd-php
</FilesMatch>

利用不太常用的后缀,但服务器会识别的

​ jsp jspx

​ php php3 php5 phtml

利用请求头

​ Content-Type

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UEditor的PHP版本的文件上传漏洞主要是由于后台没有进行严格的文件类型、大小和内容的检测,攻击者可以通过修改上传文件文件名和后缀来绕过检测,上传恶意文件,从而在服务器上执行任意代码。 攻击者可以通过以下方式来利用文件上传漏洞: 1. 修改文件名和后缀:攻击者可以将恶意文件文件名和后缀修改为常见的图片、文档或者压缩文件的后缀名,来绕过后台的文件类型检测。比如将恶意文件文件名修改为“test.jpg”,就可以上传一个恶意的PHP文件,并且绕过后台的检测。 2. 绕过文件大小限制:攻击者可以通过改变文件上传请求中的Content-Length值,来绕过后台的文件大小限制。比如,攻击者可以使用Burp Suite等工具,修改Content-Length值,将一个超过限制大小的文件上传到服务器。 为了防止文件上传漏洞的利用,应该对上传的文件进行严格的文件类型、大小和内容的检测。具体措施可以包括: 1. 对上传文件的后缀名进行白名单过滤,只允许上传指定的文件类型。 2. 对上传文件的大小进行限制,限制上传文件的大小不能超过最大限制值。 3. 对上传文件的内容进行检测,防止上传恶意文件。 4. 对上传目录进行安全设置,禁止直接访问上传目录下的文件。 5. 定期清理上传目录,删除不必要的文件。 总之,为了保障网站的安全性,必须加强文件上传的安全控制,防止恶意文件的上传和执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值