Jay jay
文章28
标签2
分类0
upload-labs学习

upload-labs学习

靶场介绍

upload-labs是一个用php语言编写、专注于文件上传漏洞的闯关式的网络安全靶场,练习该靶场可以有效的了解并掌握文件上传漏洞的原理和利用方法和修复方案。源码地址:https://github.com/c0ny1/upload-labs

文件上传靶场

安装

从官网下载下源码解压到phpstudy的www路径下,访问即可。
安装路径
访问路径
访问地址

文件上传漏洞介绍

文件上传漏洞,顾名思义,就是攻击者通过一些方法绕过了客户端验证(JavaScript前端验证,100%可以用中间人绕过)和服务端验证(如后缀名、mime类型验证)上传了非预期的脚本文件导致服务器被植入了木马获得了服务器的命令执行权限,一般为高位漏洞。

常见的预防方法:

  1. 前端验证(防君子):在前端进行上传文件后缀限制,很容易绕过
  2. 后端文件名验证:在后端对文件名执行白名单校验,不在白名单内的禁止上传
  3. 文件头检验:查看文件头与后缀名是否匹配
  4. 最终要的安全策略:将上传的文件存到另一个专用文件服务器(类似于跨站分离);如果没有专用的文件服务器,就取消上传目录执行权限,将上传的文件进行重命名,必要时不显示上传路径。

万能的webshell

php一句话:<?php @eval($_post(['cmd']));?>

正文开始

pass-01

任务
这一关是前端js验证,对文件上传类型做了限制,我们直接修改前端代码添加php类型进行绕过
修改代码
上传一句话这里抓包绕过
上传成功
访问upload/就可以看到上传的脚本
可以连接

pass-02

任务
查看提示说是后端进行了mime验证,查看代码也只进行了这一项验证
这里依旧抓包伪造mime进行绕过
抓包绕过
出现

pass-03

第三关
上传php提示
提示
查看源码
源码
这里进行了黑名单限制:asp,aspx,php,jsp,这些是不允许上传的
删除文件名首位空格,删除文件名末尾的点,将后缀名转为小写
去除::$data数据流标记,使用随机数重命名文件名。我们可以上传php文件的别名进行黑名单绕过。别名有.phtml .phps .php5 .pht进行绕过,这里直接上传一个.php5文件
上传
访问
没有解析
需要在apache的httpd中配置以下代码

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

不配置无法解析,配置好后重启
配置
然后我们重新上传
重新上传
成功解析
成功

pass-04

这一关查看提示发现禁止上传的类型很多
禁止上传的类型
这种情况我们尝试上传一个.htaccess配置文件,将4.png图片当作php代码执行,创建一个htaccess配置文集其内容为

<FilesMatch "4.png">
SetHandler application/x-httpd-php
</FilesMatch>

意思是如果文件中有4.png就会被解析成.php,我们先上传这个文件然后再上传一个名为4.png的图片马。
这里需要注意文件名必须是.htaccess改为其他加上前缀是无法解析的,实战有可能上传的文件被重命名,被重命名就失效了,还需要去phpstudy中修改httpd配置文件,箭头的位置由none改为all保存重启即可
配置
成功绕过并解析
成功

pass-05

这一关也是禁止了一大堆上传类型.htaccess文件也禁止了
进行了一大堆限制
这里它没有进行循环验证,也就是说首位去空,删除末尾的点,去除字符串::$data,转换为小写这些东西只进行了一次验证,绕过思路就是在数据包中把后缀名改为.php. .验证过程,首先发现一个点这时就会去除,发现有空格就会去掉,这时还有一个点由于只验证一次不会在去除就可以上传成功也可以解析。这里php版本为5.4.45
成功绕过

pass-06

这一关查看源码进行了一大堆过滤但是没有进行大写转小写,我们可以上传纯大写或大小写结合的后缀名,可以加空格绕过
成功

pass-07

源码
看源码发现没有首尾去空,我们上传php抓包加空格绕过
成功绕过

pass-08

源码
发现没有删除文件名末尾的点,和第七关一样,把空格换成点尝试绕过
成功

pass-09

源码
这一关没有去除字符串::$data在php后加上绕过,Windows的特性在磁盘中会忽略::$data并将文件新建。它是一个属性类型代码
成功

pass-10

这一关和第五关一样,第五关如何绕过,第十关就如何绕过
成功

pass-11

本关同样使用了黑名单,意思是上传了规定的文件会把文件后缀去掉如7.php就会把php过滤掉,文件没有了后缀名字然无法解析。但是只过滤了一次,也就是说写两个php就可以绕过了如7.phphpp过滤拼接,也就是双写绕过
源码
抓包修改看路径
上传
可以访问到成功
成功

总结

以上基本都是黑名单绕过,而且只验证了一次,所以这些关都可以用一个思路解出,那就是php. .都是可以这样,但这样就失去了意义。

pass-12

这一关由黑名单变成了白名单,只允许上传几种文件格式,但是这里上传路径是可以控制的,可以使用%00截断。%00只能是用于低于php版本5.3的,这里我们要把php版本切换一下并且把magic_quotes_sgc关闭。
配置
源码
源码
绕过
成功

pass-13

这一关和上一关差不多,只不过提交方式改变了,get会自行解码,post不会,我们要对%00进行url编码即可绕过。
编码
流程
成功绕过

pass-14

这一关是用图片马绕过,图片加php代码制作图片马进行绕过,当然还需要由文件包含漏洞将上传的图片解析成php,制作图片马
图片木马
上传查看路径
上传查看路径
文件包含漏洞
文件包含
包含上传的图片执行
执行
成功解析绕过

pass-15

这一关我们需要了解一个函数
这个函数
其功能是通过调用getimagesize函数获取文件头判断是否为图片,符合要求可以通过。这一关和上一关一样需要上传图片马然后配合文件包含漏洞解析。
成功绕过

pass-16

这一关和14、15思路一样,操作一样,但是要打开php_exif,phpstudy的其他选项菜单打开配置文件php.ini修改配置文件,删除分号是打开扩展
配置
重启exif_imagetype函数读取图像的第一个字节并检查其签名,本函数可以用来避免调用其它exif函数用到了不支持的文件类型上传和$_SERVER[‘HTTP_ACCEPT’] 结合使用来检查浏览器是否可以显示某个指定的图像。
绕过

pass-17

这一关主要是二次渲染绕过,imagecreatefromjpeg函数是由gif文件或url创建一个新图象,成功则返回一个图像标识符,图像资源,失败则返回false,导致图片马的数据丢失,上传图片马失败。
按照原来的方法上传绕过发现可以上传但是二次渲染把里边的php代码删掉了,我们可以把修改过的和没修改过的进行比较把php代码放到没有修改的部分里,可以使用010进行操作,操作完成后在配合包含漏洞进行解析。
对比
在相同的地方插入php代码,这里需要编写python代码来构造绕过渲染函数的图片webshell。

pass-18

这一关主要是对竞争条件的考察,看代码是先将图片上传然后才开始进行判断后缀名、二次渲染,我们在上传的一瞬间访问这个文件,就不能进行删除和二次渲染了,这就相当于我们打开了一个文件在去删除这个文件就会提示已打开无法修改一样。
这里我们直接上传一个php然后抓包一直发送然后访问即可绕过
成功绕过

pass-19

这一关的上传路径有问题不是上传到upload中进入19关修改myupload.php文件
修改文件
重启,这关是检查了后缀名然后上传,然后二次渲染,这时我们只能上传图片马,而且得配合解析漏洞进行通过,和上关一样需要竞争我们访问的地址是加上包含漏洞的
成功
这时逻辑漏洞,二次渲染本身是没有问题的,如果先验证在上传就没办法了。

pass-20

这一关两种方法:
第一种
move_uploaded_file()函数中的img_path是由post参数save_name控制的,可以在save_name利用%00截断(注意php版本低于5.3)如图
成功

第二种
move_uploaded_file函数有一个特性会忽略掉文件末尾的/.所以我们把末尾修改为/.绕过
成功

pass-21

这一关是利用数组绕过验证
成功绕过

本文作者:Jay jay
本文链接:https://yyj-xx.github.io/2023/03/29/upload-labs%E5%AD%A6%E4%B9%A0/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可