Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >上传靶机实战之upload-labs解题

上传靶机实战之upload-labs解题

作者头像
雪痕@
发布于 2021-06-10 07:57:59
发布于 2021-06-10 07:57:59
1.8K00
代码可运行
举报
文章被收录于专栏:代码审计代码审计
运行总次数:0
代码可运行

前言

我们知道对靶机的渗透可以提高自己对知识的掌握能力,这篇文章就对上传靶机upload-labs做一个全面的思路分析,一共21个关卡。让我们开始吧,之前也写过关于上传的专题,分别为浅谈文件上传漏洞(客户端JS检测绕过)

浅谈文件上传漏洞(其他方式绕过总结)

靶机环境搭建

Upload-Labs 环境要求

操作系统:windowsLinux

php版本:推荐5.2.17(其它版本可能会导致部分Pass无法突破)

php组件:php_gd2,php_exif(部分Pass需要开启这两个扩展)

apache:以moudel方式连接

项目地址:https://github.com/c0ny1/upload-labs

直接使用phpstudy搭建,将下载的文件放在对应的根目录即可。访问如下:

解题思路

pass-01

首先看第一关,查看提示和源码,发现是前端JS验证,而我们知道,前端验证,有和没有基本一样。

绕过也非常简单,可以浏览器直接禁用JS,先按F12,然后按F1,找到禁用JS,如下图:

然后直接上传php木马。结果如下:

这是一种方法,当然也可以直接burp抓包,修改后缀直接上传。

pass-02

看第二关,首先分析源码

分析代码,发现只是检查了content-type类型,这个也是很好绕过的,直接抓取数据包,修改类型就可以了。抓的数据包如下:

将类型改为image/jpeg,直接上传PHP木马,结果如下

木马上传成功。

pass-03

看第三关,分析源码

发现第三关是基于黑名单防护,不允许上传'.asp','.aspx','.php','.jsp'后缀的文件,这个黑名单是不全的,比如可以尝试上传.phtml .phps .php5 .pht的后缀文件,也是可以当做php脚本解析的,如果Web服务器是apache的话,也可以上传.htaccess文件,来绕过黑名单。首先尝试上传.phtml,发现上传成功,再响应包中找到上传路径。这里要注意一下,要在apache的httpd.conf中有如下配置代码

AddType application/x-httpd-php .php .phtml .phps .php5 .pht

pass-04

看第四关,分析源码

发现这里黑名单基本过滤了后缀,但是,没有.htaccess,可以上传.htaccess文件,来达到解析脚本的目的。也可以用另外的一种方法,看代码6到10行,这里是对文件后缀的一些处理,包括删除结尾的点,删除空格,全都转换成小写等,然而这么处理肯定有想不到的地方,比如构造后缀.php. .中间是一个空格(后面的第八关和第十关是同样的思路),即达到了绕过黑名单,又经过检查使得脚本木马可以解析。如下图:

访问脚本木马,成功解析

pass-05

第五关和第四关一样,只是黑名单里添加了.htaccess,所以只能使用构造后缀的方式了,四关的方法五官通用,所以这里就不详细赘述了。

pass-06

看第六关,分析源码

看第5至10行,里面的过滤没有限制大小写,所以可以尝试大小写组合绕过。比如.pHP等。尝试上传,如下图:

上传成功,脚本木马成功解析:

pass-07

看第七关,分析源码:

通过观察源码,发现没有对空格进行处理,可以直接在末尾添加空格来绕过黑名单。如下:

上传成功,成功解析。

pass-08

看第八关,分析源码:

这里的黑名单限制了所有可以解析的后缀,所以只能构造特殊后缀来绕过防护,这里去除了空格,并用strrchr函数查找指定小黑点最后一次出现,所以构造的后缀为.php. (点php点加空格),成功绕过,如下图:

上传成功,成功解析。

pass-09

看第九关,分析源码: 看第5行到第10行,源码中未过滤::DATA,可以利用:: DATA来绕过过滤,到这里小伙伴可能就要问了,为什么::DATA可以绕过黑名单呢?这其实是利用了windows的特性,在window的时候如果文件名+"::$``$DATA之后的数据当成文件流处理,不会检测后缀名,且保持:: DATA之前的文件名,他的目的就是不检查后缀名。例如:"test.php::DATA"Windows会自动去掉末尾的::

pass-10

看第十关,分析源码

这一关和第八关类似,就比第八关多了一行,多删除了一个点,所以还是采用构造后缀的方式,这次构造的后缀为.php. .(点php点空格点)正好绕过过滤。

构造好后,上传成功

解析成功

pass-11

看第十一关,分析源码

这里的重点在第八行,这里使用了str_ireplace函数将匹配到的字符替换为空,所以绕过思路就很简单了,只需要双写就可以了,删除字符后,剩余的又重新拼接为后缀,达到绕过的目的,抓取数据包测试如下,上传成功。

访问,解析成功。

pass-12

看十二关,分析源码

分析源码我们可以知道,这里是基于白名单过滤,只允许上传'jpg','png','gif',但是这里注意第八行,上传路径是可以控制的,所以可以利用%00截断,来达到上传木马的目的。这里要注意一下,%00截断想要利用成功,php版本小于5.3.4(高版本php官方修复了这个漏洞),php的magic_quotes_gpc为OFF状态。抓取数据包,进行尝试,如下图:

访问,解析成功

pass-13

看十三关,分析源码

同样是白名单,也是上传位置可控,不过是由GET传输变为POST,还是利用%00截断。不过因为POST不会进行自动解码,所以要自己在16进制中进行修改,如下图:

上传成功,解析成功

pass-14

第十四关是上传图片马,配合解析漏洞

分析代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function getReailFileType($filename){
    $file = fopen($filename, "rb");
    $bin = fread($file, 2); //只读2字节
    fclose($file);
    $strInfo = @unpack("C2chars", $bin);    
    $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);    
    $fileType = '';    
    switch($typeCode){      
        case 255216:            
            $fileType = 'jpg';
            break;
        case 13780:            
            $fileType = 'png';
            break;        
        case 7173:            
            $fileType = 'gif';
            break;
        default:            
            $fileType = 'unknown';
        }    
        return $fileType;
}

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $file_type = getReailFileType($temp_file);

    if($file_type == 'unknown'){
        $msg = "文件未知,上传失败!";
    }else{
        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$file_type;
        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上传出错!";
        }
    }
}

下面是文件包含的代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
include.php
<?php
/*
本页面存在文件包含漏洞,用于测试图片马是否能正常运行!
*/
header("Content-Type:text/html;charset=utf-8");
$file = $_GET['file'];
if(isset($file)){
    include $file;
}else{
    show_source(__file__);
}
?>

分析代码可以知道它只读2字节,只需要将木马后缀改为图片格式,内容加个图片头部,然后在返回包中找到路径,然后写在file参数后,因为file参数include的原因都会直接执行。如下:

长传成功,配合文件包含漏洞解析图片格式的木马。

pass-15

先看源码:

这里使用getimagesize()函数来验证是否是图片,这里说一下getimagesize(),这个函数功能会对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求的。getimagesize()返回结果中有文件大小和文件类型,如果用这个函数来获取类型,从而判断是否是图片的话,会存在问题。是可以被绕过的,因为图片头可以被伪造。这里伪造gif的图片头,来进行上传,如下

图片木马上传成功。

pass-16

这一关需要开启php_exif

看源码

这里使用exif_imagetype函数来检查是否是图片,这里说一下exif_imagetype(),它是读取一个图像的第一个字节并检查其签名。所以也是可以通过伪造图片头来进行绕过的。这里同样伪造gif的图片头,来进行上传,如下

上传成功

pass-17

看源码

这一关比较综合,判断了后缀名、content-type,以及利用imagecreatefromgif判断是否为gif图片,最后再做了一次二次渲染。还是按照第16关的思路走一下,看是否成功。显然失败了。

那就做一个图片木马,上传一个正常图片,抓取数据包,在图片末尾插入恶意代码,如下:

然后,进行上传操作。上传成功,如下。

因为这里进行了二次渲染,所以还没有结束,我们将上传的图片下载到本地查看。

这里发现在进行二次渲染的过程中,我们插入到图片的恶意代码被清理掉了,所以需要对比渲染前后,哪些地方没有变化,我们将恶意代码插入到那里,来绕过二次渲染。对比发现,这里渲染前后没有发生变化。

所以,我将恶意代码插入到这里,如下图:

重新上传,上传成功,再次下载到本地,发现恶意代码没有被清除,绕过了二次渲染。

pass-18

看源码

这里的代码逻辑是先将文件上传到服务器,然后判断文件后缀是否在白名单里,如果在则重命名,否则删除。这样就存在一个安全问题,那就是我同时上传多个相同文件,在它删除之前访问就可以了。也就是条件竞争问题。可以借助burp的暴力破解模块。这里复现失败了=_="。

pass-19

这里同样存在条件竞争问题,不过就是需要换成图片木马。其他和第十八关一样。

pass-20

看源码

这里发现move_uploaded_file()函数中的img_path是由post参数save_name控制的,因此可以在save_name利用00截断绕过,和前面关卡的00截断类似。如下:

上传成功。

pass-21

看源码

说实话,这个代码看的我有点懵。参考网上文章一点点分析吧,首先第五行以白名单的形式检查MIME这个可以直接在数据包中修改,然后向下分析,到第十行,这里的含义是如果POST接收的save_name值为空则赋值给$_FILES'upload_file',否则是本身。接着是用explode() 函数把字符串打散为数组,然后解释一下下面涉及到的函数的含义。

end()函数将 array的内部指针移动到最后一个单元并返回其值 reset()函数将 array 的内部指针倒回到第一个单元并返回第一个数组单元的值 count() 函数计算数组中的单元数目或对象中的属性个数,这里要注意,数组下标从0开始 然后这里用end函数将接收的后缀与白名单比较,如果符合,继续执行,然后数组第一位和file[count( file) - 1]进行拼接,产生保存文件名file_name。 所以这里采用数组绕过,save_name0=pass21.php, save_name2=jpg,ext=jpg过白名单,reset( file)=pass21.php

结语

这篇文章对于upload-labs靶场进行了全通关思路讲解,如有错误请斧正。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-06-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
upload-labs大闯关
解题思路:这里对上传的文件扩展名进行验证,但是只在前端验证,服务端没有进行验证,因此伪造扩展名抓包然后再burp suite中修改扩展名即可绕过前端验证。还可以通过直接F12删除这段JavaScript代码(不刷新)或者在禁用JavaScript来实现前端验证绕过。
Andromeda
2023/10/21
5630
upload-labs大闯关
打靶归来-详解upload-labs靶场(下)
本公众号提供的工具、教程、学习路线、精品文章均为原创或互联网收集,旨在提高网络安全技术水平为目的,只做技术研究,谨遵守国家相关法律法规,请勿用于违法用途,如果您对文章内容有疑问,可以尝试加入交流群讨论或留言私信,如有侵权请联系小编处理。
网络安全自修室
2024/03/06
4360
打靶归来-详解upload-labs靶场(下)
upload-labs上传绕过(下)
trim函数 根据我们的测试,它是将指定的字符串移除,那么在这里我们就可以上传.pphphp即可绕过
字节脉搏实验室
2020/03/19
8900
upload-labs上传绕过(下)
Upload-Labs wp
黑名单验证里的空格绕过 这时候源码里并没有过滤空格 所以在.php后添加空格即可绕过
用户2700375
2022/06/09
1.7K0
Upload-Labs wp
Upload-labs通关笔记(四)
首先在burp中不断发送上传webshell的数据包,然后不断在浏览器中访问,发现通过竞争可以访问到。
网络安全自修室
2020/07/22
8630
Upload-labs通关笔记(四)
Upload-labs通关笔记(三)
Upload-labs是一个帮你总结所有类型的上传漏洞的靶场 项目地址:https://github.com/Tj1ngwe1/upload-labs 环境要求 若要自己亲自搭建环境,请按照以下配置环境,方可正常运行每个Pass。 配置项 配置 描述 操作系统 Window or Linux 推荐使用Windows,除了Pass-19必须在linux下,其余Pass都可以在Windows上运行 PHP版本 推荐5.2.17 其他版本可能会导致部分Pass无法突破 PHP组件 php_gd2,php_exif
网络安全自修室
2020/07/22
8510
upload-labs靶机及过关攻略(一)
根据此关源码可知是用过js来设置文件上传白名单,只需要禁用浏览器的js即可轻松过关
木尤
2020/07/15
1.9K0
upload-labs靶机及过关攻略(一)
实战 | 文件上传漏洞之最全代码检测绕过总结
文件上传漏洞是指攻击者上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务端命令的能力。该漏洞在业务应用系统中出现概率较高,究其原因是业务场景中上传附件、头像等功能非常常见,若在系统设计中忽略了相关的安全检查,则容易导致文件上传漏洞。
HACK学习
2022/02/17
15.1K1
实战 | 文件上传漏洞之最全代码检测绕过总结
upload-labs文件上传漏洞
基于 upload-labs 靶机进行文件上传漏洞学习,网上通关教程很多,这里我只记录下我觉得重要的和容易忘的知识点,感谢 c0ny 大佬
棒棒鸡不棒
2022/09/02
1.2K0
upload-labs文件上传漏洞
Uploads-labs上传绕过(上)
链接:https://pan.baidu.com/s/1lMRBVdQyFuKOgNlWPUoSSQ
字节脉搏实验室
2020/03/08
2.4K0
Uploads-labs上传绕过(上)
Web漏洞 | 文件上传漏洞
文件上传漏洞是指攻击者上传了一个可执行的文件到服务器并执行。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。
谢公子
2022/01/13
1.7K0
Web漏洞 | 文件上传漏洞
Upload-labs通关笔记(一)
Upload-labs是一个帮你总结所有类型的上传漏洞的靶场 项目地址:https://github.com/c0ny1/upload-labs
网络安全自修室
2020/07/22
1.6K0
cisp-pte学习笔记之文件上传
1、利用文件上传功能上传恶意文件:一句话木马文件、反弹shell的exe 2、上传文件的路径可访问 3、上传文件所在的路径具备可执行权限
cultureSun
2023/07/24
3620
文件上传
上传文件的流程: 网页上传 -> 目标服务器的缓存目录 -> 移动到代码规定的目录 -> 重命名(开发) 移动上传文件函数: move_uploaded_file()
kam1
2022/03/08
13.6K0
文件上传
Upload-labs&amp;Upload Bypass Summarize
暑假闲着也是闲着,去年这个时候刷完了 sqli-labs,今年想着来刷一下 upload-labs 而这次重点不在于题解,而在于总结与归纳 首先我们得明确一点,即上传的过程
安恒网络空间安全讲武堂
2018/12/26
1.5K1
upload-labs第2~8关
直接上传一个php文件 用burp suite抓包,然后改包,将文件类型改为image/png。 Content-Type: image/png,然后上传成功
宸寰客
2020/07/28
4590
upload-labs第2~8关
文件上传靶机实验记录
前端JS后缀名校验,通过审查元素发现onsubmit="return checkFile()”校验函数我们将其删除直接上传(浏览器禁用JS脚本也能上传,BURP抓包更改后缀名也能上传)webshell。
菜菜有点菜
2022/03/18
6K0
文件上传靶机实验记录
文件上传漏洞
文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种漏洞是getShell最快最直接的方法之一。
LuckySec
2022/11/02
1.9K0
文件上传漏洞
【PTE-day06 文件上传】
samRsa
2023/11/17
1790
浅谈常见的文件上传的检测方式与绕过方法
文件上传漏洞是我们平时渗透过程中经常利用的漏洞,利用文件上传我们可以直接得到webshell,是非常直接的攻击方式。写这篇文章主要是想对常见的文件上传检测和绕过进行总结,同时练习文件上传php代码的编写。
程序员纬度
2021/03/02
2.2K0
相关推荐
upload-labs大闯关
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档