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知识库]文件上传漏洞之白名单

白名单:只允许XX文件上传

文件上传流程:用户上传文件 ->服务器的缓存目录 ->移动到目标位置并且重命名

URL编码原理:把字符变成16进制,然后加上一个%

URL编码的核心是为了更好的传参

1、%00截断[16进制]

%00实际上代表的是经过了URL编码之后的16进制的00

00在电报中代表着结束,而在PHP某些版本中也代表着结束

我们查看源码可以知道,只允许上传jpg,png,gif后缀的文件

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $ext_arr = array('jpg','png','gif');
    $file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
    if(in_array($file_ext,$ext_arr)){
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        }
        else{
            $msg = '上传失败!';
        }
    }
    else{
        $msg = "只允许上传.jpg|.png|.gif类型文件!";
    }
}

我们上传一个文件,然后用Burp抓包,可以看到有一个save_path=../upload/,我们分析源码可以知道,这个意思就是将上传的文件移动到上一层目录的upload的文件夹下,然后在后面会跟上一个/和随机值和当前的时间还有当前你传入文件的后缀名。如果我们在后面加上一个333.php%00,那么我们上传的文件名就会变为 /随机值333.php%00当前时间.jpg,而在php的理解中,在%00这个地方就会截止,实际的文件名就是 /随机值333.php,我们实际操作一下看一看

?我们上传成功以后,复制图片地址,可以看到,因为编码问题,这个%00显示成了�,那我们可以截取http://zmie8016.ia.aqlab.cn/upload/333.php这一段,然后访问,可以看到,成功解析

http://zmie8016.ia.aqlab.cn/upload/333.php�/5620220912063600.jpg

?2、00截断

%00截断和00截断的区别就是传参方式不同,%00是GET传参,我们可以利用URL编码和16进制来直接传00,但是POST传参?他是不会进行URL编码的,查看源码我们可以知道

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $ext_arr = array('jpg','png','gif');
    $file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
    if(in_array($file_ext,$ext_arr)){
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $img_path = $_POST['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        }
        else{
            $msg = "上传失败";
        }
    }
    else{
        $msg = "只允许上传.jpg|.png|.gif类型文件!";
    }
}

我们上传一个一句话木马的文件,用Burp抓包,在upload的后面加上一个555.phpa,然后点击Hex,这个模式就是以16进制的角度来看这个数据包,我们在右边找到我们刚才写的555.phpa,然后找到那一行的61,因为a的16进制数字是61,我们将它改为00

?我们上传成功以后,复制图片地址,删除掉php后面多余的字符,即可成功访问

3、图片马绕过

我们之前所说的所有文件上传,都是在文件类型上面做文章,而这个图片马绕过,他是代码去检测图片的本身了,因为你上传一张图片,他是有图片的格式的,之前我们直接改后缀,它的格式是和图片的格式不一样的,我们随便打开一张JPG图片,以HEX模式查看,基本上每一个JPG图片的头部都会是JFIF

?那遇到这种检测怎么办呢?我们可以做一个图片马

我们打开cmd命令行,输入 copy 1.jpg/b + 1.txt? 66.jpg ,这个的意思就是将1.jpg和1.txt里面的东西黏到一起,/b的意思是以二进制的方法去黏,变为一个新的66.jpg的图片。注意,这个1.txt里面要放我们的一句话木马,图片的大小尽量要小一点,这个cmd命令行需要在你图片和一句话木马存放的文件夹里面打开

为了保险一点,我们可以给他再加一层, 输入copy 66.jpg/b + 1.jpg/b? 88.jpg

当然,我们也可以用这样的方法来藏文件,我们输入 copy 1.jpg + 1.zip? 2.jpg

完成之后,我们将后缀改为.zip,然后用好压或者其他的rar应用来打开,就会看到我们所藏的文件了,当然,图片的大小也会随之改变

另外,图片马的食用需要搭配解析漏洞来完成,这个后面会讲到

4、 二次渲染

?二次渲染:获得图片后,给你重新加载,然后重新保存,相当于把你加进去的东西给你祛除了,只保留图片本身,可能是给你压缩、或者裁剪

我们可以用gif图去破,因为二次渲染他只会渲染画面部分,一般动态图片的头部四行不会渲染

我们随便打开一张GIF图片,点击用Hex模式查看,我们在第四行开始写我们的一句话木马

?5、条件竞争

?过滤一般有两种:

? ? ? ? 1、先上传,再检测

? ? ? ? 2、先检测,再上传

如果是第一种过滤方法的话,就存在条件竞争,因为你检测是需要时间的,如果你上传的够快的话,你就可以利用检测的时间差,在删除之前可以访问得到上传的木马

要想能够访问的到2木马,我们得具备两个条件

? ? ? ? 1、单身300年的手速(当然,这就需要一个工具了)

? ? ? ? 2、马生马(访问一个木马,生成另一个木马)

由于检测的是我们上传的文件,所以我们上传的文件,再生成的另一个文件,他是不会被检测的

这里我们需要用到一个函数

file_put_contents(文件地址,文件内容)? 可以将一个字符串写入文件

????????例:file_put_contents('66.php','<?php eval($_REQUEST[8])?>'),这个文件地址就是当前文件夹下

所以我们只需要在上传的文件被删除之前访问到我们上传的文件,他就会再生成一个木马

我们点击上传文件,这里可以直接上传一个一句话木马的文件,然后用Burp抓包,把数据包放到跑包模块lntruder,然后随便框中一个不影响大局的数据,然后在Payloads的Payload type处选中Null payloads,然后在下图中输入一个不小于10000的次数,就可以进行跑包了,当然,访问的时候,我们就是访问我们上传的文件,跟这个操作是一样的,只不过抓的数据包需要换成访问的那个数据包

?6、解析漏洞

上传漏洞的核心:上传一个.php的文件

解析漏洞的核心:让其他后缀的文件当作php来解析

一、IIS6.0解析漏洞:

IIS是一个Web容器(Windows自带),6.0是他的一个版本

asa,cer,cdx的后缀都会默认被当做asp来执行

所以我们可以写一个asp的一句话木马,然后将他的后缀改为jpg,用Burp抓包,再将他的后缀改回cer或者asa或者cdx,知道地址之后,直接用蚁剑或者菜刀连马就好了

IIS解析文件的时候,是从左到右来解析的,如果遇到分号(;),他就会认为结束了,就和00截断是差不多的,我们的文件名需要写成66.asp;.jpg,这样就会被当做ASP来执行了

如果我们传入一个66.asp/1.jpg,IIS读取文件的时候会把66.asp当做文件夹来处理,但是在将这个我们传入的文件解析的时候,这个 / 符号又被当做了一个截断,又会被认为是66.asp,当然,这个利用是需要我们在后台进行文件上传,并且具备移动文件和新建文件夹的功能

二、CGI解析漏洞(PHP特有)

IIS7.0、IIS7.5、Nginx可能存在

我们随便上传一张图片、复制图片地址,然后在末尾加上一个/.php,如果乱码了,那就是存在解析漏洞

我们直接上传一个图片马,复制图片地址,在末尾加上/.php,如果乱码,直接连菜刀就好了

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 20:37:31  更:2022-09-24 20:37:52 
 
开发: 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年5日历 -2024/5/5 11:57:06-

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