IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 文件上传漏洞个人笔记 -> 正文阅读

[PHP知识库]文件上传漏洞个人笔记

什么是文件上传漏洞及原理?

顾名思义,文件上传漏洞就是有可以上传文件的地方就 可能 会存在上传漏洞,可以说有文件上传的地方就可以测试是否存在文件上传漏洞,攻击者找到上传文件或者上传图片一个地方,在上传的文件或者图片中写入一句话木马或者可进行攻击的代码,并且程序员未做上传文件的格式及内容过滤,导致这句代码可在后端服务器执行(.php、.asp等文件格式)。

不是有文件上传的地方就有上传漏洞,但有文件上传的地方都可以测试是否存在漏洞。~~~有点儿绕。。。

如何查找及判断?

上传头像、图片、文件的地方,大部分网站的会员中心,及后台管理系统上传有无上传的地方,再则通过URL爆破目录进行查找。

同样,我也是搭建了一个靶场,这个靶场主要就是针对上传漏洞的,网上可以说大部分也是讲的这个靶场,我也来讲一讲。

可以看见这个图有一个上传的功能,我试一试上传一个php后缀的文件。

这是文件内容

?

?弹出一个JS窗口,说的是只能上传.jpg等三种格式的图片,有弹窗说明是JS,我们禁用JS尝试能否上传成功。

禁用JS

?上传php文件成功

?访问该图片

说明木马成功执行。

既然禁用了JS,说明这个网站是做了前端的过滤。那么我们就可以进行抓包改包绕过前端。

上传jpg文件

?

抓包,将jpg改为php后缀放包

?

后缀为php文件,成功。

要知道的是,不同的后端的脚本语言的后缀都是不相同的,所以进行测试的时候要搞清楚后端脚本语言的后缀有哪些。

再一种就是可以通过各种cms的版本以及CVE的文件上传漏洞编号在网上搜索历史漏洞,或者已经有人发布的漏洞来进行漏洞查找或复现。

如何利用

上传成功了就直接上菜刀、蚁剑等自我觉得刑的工具。

文件上传漏洞有哪些危害?

我们上传的文件内容是自己编辑的,那么这文件中写着一句话木马,或者大马(后门文件)等等可以直接拿到webshell权限的文件。直接控制服务器。

验证和绕过

验证

这里举个简单的例子。这个是 upload-labs 漏洞靶场的第一关代码

<?php
include '../config.php';
include '../head.php';
include '../menu.php';

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name'];
        if (move_uploaded_file($temp_file, $img_path)){
            $is_upload = true;
        } else {
            $msg = '上传出错!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}
?>

上面包含了3个文件,也就是说这个文件中可能会调用以上三个文件中的代码。

submit在前端页面中就是上传按钮,意思就是点击了上传按钮过后就会进行isset验证。

?往下走,如果存在再执行 file_exists(UPLOAD_PATH)验证

?UPLOAD_PATH可以理解为上传的路径(上传到哪里去)我们在config.php文件中查看。

?上传的文件夹路径是../upload

$_FILES['表单中参数的名字']['文件名'],这个$_FILES全局变量作用在下。

$_FILES['upload_file']['name']; ????? ?? //客户端上传文件的原名称,不包含路径
$_FILES['upload_file']['type']; ????? ? ?? //上传文件的MIME类型 ?
$_FILES['upload_file']['tmp_name'];? //已上传文件在服务器端保存的临时文件名,包含路径(绝对路径)
$_FILES['upload_file']['size'];? ?????? ?? ? //已上传文件的大小,单位为字节

将上传的文件写入变量$temp_file

将上传的文件及原文件名上传到UPLOAD_PATH的 / 下面?? UPLOAD_PATH= .. / upload? 所以就是upload / 下面。

?

?将获取的$temp_file文件移动到$img_path下面,然后允许上传。

绕过

绕过分为黑名单和白名单绕过

黑名单,是不允许某些文件类型上传。例:不允许 image/jpg || gif || png 格式上传,其余文件格式全部可以上传。

白名单,是只允许某些文件类型上传。例:只允许 image/jpg || gif || png? 格式上传,其余过滤。

黑名单

特殊解析后缀

?可以看出过滤了以上四个后缀,但是php有很多可执行的后缀,php3、php5等等。

?

.htaccess

<?php
<FilesMatch "baby">
SetHandler application/x-httpd-php
</FilesMatch>

在同目录下文件名有baby这个词的都解析成.php

在未设置白名单和黑名单过滤不严情况下,上传一个.htaccess的文件,内容是上面代码。

凡是包含baby的内容文件都会被以php的格式来执行。

现在的网站99%都是设置的白名单这样的基本不可能,所以简单提一下。

大小写

您黑名单把php、php3、php5过滤了,但是没有过滤phP、pHp3、Php5。

点与空格

在文件后面加上空格或点。

就像这样

?但是保存过后呢,操作系统就会直接将空格或者点去掉

::$DATA(windows尿性)

代码中没有对::$DATA做过滤处理

在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名。\

windows操作系统不用符号

?那就抓咯

?

?叠名绕过

这个绕过只能够针对粗心大意程序员对过滤的文件后缀只进行一次过滤。

比如说只过滤了yijuh1ua.php 过滤的代码是

?str_ireplace():替换函数,将选中的数组或者字符串中的某个字符替换成另一个字符。

这里意思就是将上传文件的原名字拿去和$deny_ext中的值做对比,有的话就替换成空格。

但这里只是做了一次过滤,我们可以将文件改成 yijuh1ua.pphphp来进行尝试。


白名单验证

第二关 MIME绕过

他在验证中夹着这么一段代码。

 if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) 

意思是上传文件的MIME类型只接受等于image/jpeg 或者 image/png 或者 image/gif 后缀的图片文件。

什么是MIME类型--如图。

?但是这种过滤方式在抓包的时候改一下就上传成功了

上传一个php文件进行抓包。

?这个content -type的格式肯定是不会通过的,我们只需要改成他能够允许的就行了。

?

?

%00截断

x.php%00x.jpg = x.php??

%00是url中的编码,所以只能在url地址栏使用,如需要进行post请求,则需要进行url编码

其他

配合文件包含漏洞

上传的地方过滤得太严谨,只能上传图片得话,我们可以制作图片马,利用文件包含执行图片马中得代码。

制作图片马

你可以

将 1.jpg 和 yijuhua.php 合并成一个文件 yijuhua.jpg

也可以直接在1.jpg后面加上 一句话代码。

?

?最后都是一个意思。

上传图片马

利用文件包含来执行图片中得代码

这是正常打开

?

?这就把图片当作php文件来执行了。

文件头

图片文件格式的开头呢都有各自的文件头格式

.jpg

.png

.gif

什么意思呢,我截几张图自行研究。

?

?加上GIF89a

?

二次渲染

??????? 原理:图片有大有小,电脑壁纸用到手机上的话那肯定尺寸不一样的,所以就会重新渲染成相对大小合适的尺寸,但里面的代码也会改变,这也是一种防范你写入攻击代码的手段。

可以上传一张图片等渲染过后,二次渲染后的图片保存下来,再在二次渲染图片中写上代码在上传,这叫二次渲染马。

条件竞争
??????? 原理:指多个线程或进程在读写一个共享数据时结果依赖于他们执行的相对时间情形

????????利用发包软件,不断提交上传文件数据包,并通过浏览器或自动化脚本对其进行访问,当访问成功时,即上传木马成功(爆破)。

????????再简单说,我们在使用一个文件得时候,你想去给那个文件重命名或者删除那个文件,那系统就会报错并说:文件正在使用无法重命名/删除。这就是在上传后还未验证前,在知道对方上传路径后直接访问上传的文件,就算是对方服务器想改名或者想删除都只能是 “文件正在使用中”这样的意思。

以上的自我总结不是特别完善,但是总的来说知识针对于网站的上面的漏洞 。通过各种中间件的解析漏洞来配合使用。或者在是各种历史漏洞CVE漏洞,CMS的漏洞

除了网站的漏洞,我们还可以通过

各种中间件的解析漏洞来配合使用。

各种历史漏洞CVE漏洞

CMS的漏洞

编辑器漏洞

当我碰到上传漏洞的时候会先查看他的中间件及版本,后端服务器,查看是否存在历史漏洞,在二进行网站上传的测试,黑盒测试在实战的时侯是不会看着代码的,所以得一个一个方法试一试。

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-08-27 11:38:35  更:2021-08-27 11:40:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 9:57:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码