#禁止右键复制模块,去掉下面的/*注释可使用#

upload-labs靶场修炼手册

upload-labs靶场攻略

upload-labs靶场的安装搭建(windows10)

第一步先下载phpstudy,和靶场:GitHub - c0ny1/upload-labs: 一个想帮你总结所有类型的上传漏洞的靶场。下载后解压放到phpstudy的www文件夹就行了

 

upload-labs靶场的安装搭建(linux,看你喜欢啥)

docker pull c0ny1/upload-labs

docker run -d -p 80:80 c0ny1/upload-labs

可以正常启动

但是,当上传文件时,会出现下图所示的报错,即使上传合法的文件也是报错

解决:

① 进入upload-labs容器

docker exec -it [CONTAINER ID] bin/bash #查看CONTAINER ID命令docker ps

② 创建upload文件夹:mkdir upload

③ 给upload赋权限:chmod 777 upload

此时,一切正常。靶场搭建完毕!

 

 

 

 

即linux的靶场搭建成功

写好一句话木马,保存为1.php

 

Pass-01

 

查看源码,发现只能上传jpg,png,gif后缀名文件,有三思路

首先第一种,F12找到验证部分的代码,然后删除,就可以上传。

第二种方法是增加要上传的文件类型,跟第一种方法一样,也是找到代码所在位置进行修改即可。

第三种方法是我们先将要上传的文件后缀名修改成页面允许上传的类型,这样在点击上传后就可以通过前端的验证,用burp工具进行抓包,在burp中将文件后缀名改回原本想要上传的格式,再进行上传,这样就可以上传我们想要的类型文件而不会被前端的验证拦截。

 

上传成功,浏览器输入也会有该地址,后面便可以使用蚁剑,菜刀等工具连接,获取shell。

Pass-02

 

由源代码这一题是常见验证中的文件类型验证,也就是验证MIME信息

 

可以抓包,将Content-Type修改为允许上传的类型(image/jpeg、image/png、image/gif)

三选一

 

 

 

成功后hackbar查看上传的1.php就会这样,后面就只展示burp上传成功图片了。

 

Pass-03

 

可以发现是一个黑名单验证

 

黑名单是规定不允许上传的文件,但是如果黑名单定义不完整的话是可以实现绕过的,用.phtml .phps .php5 .pht进行绕过,老规矩抓包改包

 

Pass-04

试试第三关的绕过,发现不行,查看源码发现这一关禁止了更多的上传文件,这种情况,我们可以尝试上传一个.htaccess配置文件,将上传的图片当作php代码进行解析,首先创建一个.htaccess文件。

 

.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置.通过htaccess文件,可以实现:网页301重定向、自定义404页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能

.htaccess文件如下:

<FilesMatch "4.png">

SetHandler application/x-httpd-php

 

#这串代码的意思是如果文件中有一个4.png的文件,他就会被解析为.php,把这个文件上传上去

 

我发现不知道为啥,.htaccess文件一放到Kali里面就隐藏起来了,根本不在你放的目录,也打不开。于是我换了win10。

 

上传上去之后

再写一个4.png文件,里面写上要执行的php代码,上传

 

 

Pass-05

 

这一关源码中没有强制将大写转换为小写,所以我们可以上传纯大写或者大小写结合(注意不能与禁用的重复)的后缀名。

 

Pass-06

 

本关加了上一关的绕过限制,相比较前两关少了一步首尾去空的步骤,这样的话我们可以采取6.Php 空格绕过.

 

 

Pass-07

 

查看源码相比前几关,本关没有删除文件名末尾的点,可以利用这点上传文件,即7.php.

 

Pass-08

 

查看源码,发现之前的方法全都设置了限制。

在php+windows的情况下:如果文件名+::$DATA会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持::$DATA之前的文件名。利用windows特性,可在后缀名中加 ::$DATA绕过

 

小思考:如果是Linux的咋解决呢?

Pass-09

 

源代码较上关,加了去除字符串::$DATA的代码。

解题思路,先收尾去空,删除末尾的点,去除字符串::$DATA,转换为小写,但是这些东西只是验证了一次。所以我们的绕过思路就很简单,在数据包中把后缀名改为.php.  .,这样它的验证过程就是,首先他发现有一个点,这时会把它去掉,又发现有一个空格,也会把它去掉,我们这时还有一个点,也就是.php. 由于他只是验证一次,所以不会在去掉我们的点,这时就可以上传成功,也可以解析成功

Pass-10

尝试之前的方法上传,均失败抓包分析,发现本关也是黑名单的绕过,它的意思是如果你上传了上面规定的文件,他就会把你的后缀名去掉,比如你上传了10.php,那么他就会把你的php过滤掉。文件没有了后缀名,自然也就无法解析了。但是它只过滤了一次,也就是说我们写两个php就可以了:10.pphphp,他过滤掉一个,拼接后正好剩下了10.php

 

 

 

 

Pass-11

 

源代码分析发现是白名单判断,上传路径是可以控制的,$img_path这个变量拼得到的,所以我们可以使用%00截断绕过

 00截断是操作系统层的漏洞,由于操作系统是C语言或汇编语言编写的,这两种语言在定义字符串时,都是以\0(即0x00)作为字符串的结尾。操作系统在识别字符串时,当读取到\0字符时,就认为读取到了一个字符串的结束符号。因此,我们可以通过修改数据包,插入\0字符的方式,达到字符串截断的目的。00截断通常用来绕过web软waf的白名单限制。

 

截断原理就是%00置空,将后面的内容忽略,所以原来的:

$img_path='…/upload//9520220401035448.jpg’在加了截断之后就可以变成:

$img_path='…/upload//11.php

此时直接连接就行

 

 

%00截断条件:php版本要小于5.3.4 修改php.ini的magic_quotes_gpc为OFF状态。

 

 

 

修改save_path 路径,最后使用 %00 截断

 

Pass-12

 

跟less-11是差不多的,只不过是接受值变成了post,它两的差别就是get会自行解码,post不会自行解码,我们需要对%00进行编码

选中%00右键编码

 

 

 

 

Pass-13

 

$bin = fread($file, 2); //只读2字节

通过读取两个字节来确定文件类型,所以直接制作图片马即可。

 

图片马:将下面代码新建文本文档,重命名为13.jpg

GIF89a

<?php @eval($_POST['dreamer']);?>

 

然后上传,但是直接访问并不能将gif当作php来解析,因此还需要利用文件包含漏洞

写一个13.php传入,再利用它来解析图片

 

 

##include.php

<?php

/*

本页面存在文件包含漏洞,用于测试图片马是否能正常运行!

*/

header("Content-Type:text/html;charset=utf-8");

$file = $_GET['file'];

if(isset($file))&#123;

    include $file;

&#125;else&#123;

    show_source(__file__);

&#125;

?>

 

cmd命令生成图片马,命名为webshell.jpg,然后上传该图片马(记得关杀软等)。

 

/b,即二进制,该命令表示以二进制格式合并,webshell.jpg为生成的图片一句话木马

 

 

 

还有一种方法就是选择你喜欢且较小的图片用notepad++等打开,在文件末尾输入一句话木马,制作图片马,上传。

Pass-14

查看php手册函数

getimagesize函数: 会对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求的

getimagesize() 函数将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型及图片高度与宽度。如果不是真实的图像,则会获取信息失败,所以要绕过该检测方式也需要用到图片一句话木马。

所以这关还是用和less-13一样的方法,生成带有php代码的图片马上传,配合包含漏洞上传成功

 

 

 

Pass-15

题目还是上传图片马.

需要开启phpstudy 的php_exif拓展(顺便把phpstudy版本换回5.4.45),否则上传会出错

 

 

 

exif_imagetype(): 读取一个图像的第一个字节并检查其签名

本函数可用来避免调用其它 exif 函数用到了不支持的文件类型上或和 $_SERVER[‘HTTP_ACCEPT’] 结合使用来检查浏览器是否可以显示某个指定的图像.

尝试上一种13题的图片马方法绕过,成功

 

 

Pass-16(难)

先试试图片马,虽然能上传成功,但将上传的图片使用nodepad++打开后,发现一句话木马被删掉了。

 

前:

 

后:

 

查看源代码,代码很长就不贴了,看提示他主要是对二次渲染绕过
imagecreatefromjpeg() 函数
本关中采取了如下几种限制:
1.文件后缀名
2.Content-Type
3.使用函数imagecreatefromgif、imagecreatefromjpeg、imagecreatefrompng来判断是否为gif、jpg、png图片
4.对于判断是图片的文件进行二次渲染

 

关于绕过gif的二次渲染,我们只需要找到渲染前后没有变化的位置,然后将php代码写进去,就可以成功上传带有php代码的图片了.

这不一样的也太难找了吧。

 

Pass-17

 

 

这一关主要是对条件竞争的考察,我们看代码他是先将图片上传上去,才开始进行判断后缀名、二次渲染。如果我们在上传上去的一瞬间访问这个文件,那他就不能对这个文件删除、二次渲染。这就相当于我们打开了一个文件,然后再去删除这个文件,就会提示这个文件在另一程序中打开无法删除。

 

条件竞争:条件竞争漏洞是一种服务器端的漏洞,由于服务器在处理不同请求时时并发进行的,因此处理不当会或者相关操作顺序设计的不合理时,将导致漏洞产生。

 

操作:直接上传一个17.php文件,然后进行抓包,将数据包发送至intruder下,如图操作

 

 

 

修改一下线程

 

回到目录发现上传成功

 

蚁剑也能连接成功。

 

Pass-18

这关也存在条件竞争的问题,只不过这题的代码对文件后缀名做了白名单判断,然后会一步一步检查文件大小、文件是否存在等等,因此可以通过不断上传图片马,由于条件竞争可能来不及重命名,从而上传成功。

 

 

上传图片马虽然成功了,但回到上传目录发现没有该shell,应该是被查杀了,考虑到他题目是条件竞争,故我们可以像17题一般,不断上传18.jpg图片马,从而达到目的。

 

如果不停止的话,就会出现大量该上传的图片马,导致服务器爆炸,可以修改相对爆破上传次数来控制。

总之上传一个成功即可。

Pass-19

 

 

 

观察源代码和总结之前的函数利用漏洞,可以发现有两种做法:

第一种:

move_uploaded_file()函数中的img_path是由post参数save_name控制的,可以在save_name利用%00截断(注意php版本低于5.3,和前面截断的要求差不多)这种情况遇到的基本不多。

前:

后:

 

 

 

第二种:move_uploaded_file()有一个特性,会忽略掉文件末尾的 /. 如图。

 

 

 

 

 

总结:

最强的总结图片:

 

 

posted @ 2022-09-07 16:51  Hndreamer  阅读(648)  评论(0编辑  收藏  举报
#百度统计#