upload-labs文件上传通关思路总结

发布时间 2023-12-08 22:15:56作者: 橙子全栈测试笔记

一、描述

顾名思义,文件上传就是利用服务器对上传文件时存在的漏洞来实现上传任意文件,通过自己编写的文件内容让服务器执行文件内容达到可控的目的,但文件的上传往往回有各种各样的过滤,以下将演示upload-labs的关卡:

二、关卡

1、pass-01

尝试把webshell传入到服务器,发现服务器对文件后缀名进行过滤。

 查看页面源代码:发现采用前端js过滤,可以直接采用firefox浏览器关闭js绕过js过滤

安装Quick Javascript Switcher插件,关闭前端js

js关闭后直接上传php文件,发现上传成功

 2、Pass-02

尝试上传php文件,发现同样对其进行过滤

 查看页面源代码未发现相关js过滤,尝试把webshell后缀名改为png格式上传,发现可以上传

 尝试通过burp截获数据,将文件名改回PHP文件

 3、Pass-03

尝试第二关的方法,发现存在文件后缀黑名单

修改apache的配置文件。文件位置:phpstudy-->其他菜单选项-->打开配置问价-->httpd.conf。在文件中加入:AddType application/x-httpd-php .php .phtml .phps .php5 .pht .html,如下所示。目的是使浏览器能解析带有以下后缀的文件。保存,重启服务。

 上传webshell.php5文件(直接修改php后缀为php5),因为已经在配置文件加入了.php5后缀的验证,所以.php5既可以绕过黑名单,网站也能解析。

 用用蚁剑连接

 4、Pass-04

1)查看源代码,发现黑名单禁止了很多后缀文件通过,可以用.htaccess进行绕过。简单来说.htaccess文件的作用就是把当前目录的所有文件都当作php解析,无论上传什么文件都当作php执行

2)使用.htaccess的前提是①.mod_rewrite模块开启。(这项不用理会,php是默认开启的)②.AllowOverride All

创建一个.htaccess文件,里面的内容为如下:这个文件的目的是把上传的.jpg文件全部转化成.php文件

AddType application/x-httpd-php .jpg

很多windows操作系统是禁止将文件名设置为空的,但是我们可以用cmd命令来实现。首先新建一个名为1.txt的文件,然后输入上述代码。接着在该文件夹下打开cmd窗口,输入:

ren 1.txt .htaccess

先上传.htaccess,再上传webshell.jpg。上传webshell.jpg的 时候用Bp抓包,可以发送到重发器,在回显包中记住路径

 5、Pass-05

这题连.htaccess也过滤掉了

查看源码:

可以看到这里是先删除文件最后的一个逗号和空格然后再寻找处后的文件名的最后一个逗号,再对该逗号后面(就是文件扩展名)进行变小写再去除::$DATA字符串

发现删除了文件末尾的.且进行了首尾去空,尝试使用burp拦截修改数据为webshell.php. .发现成功绕过

 6、Pass-06

对比前面的源码少大小写检验

直接上传一个jpg木马然后burp抓包,放包

 改成大小不一的php文件,要注意不能是黑名单上的如pHp不行

 7、Pass-07

观察源码发现在处理尾缀的时候少过滤了空格于是可以抓爆修改文件尾缀

加一个空格,在最后与黑名单比对时就不会匹配上从而实现绕过

最后放包访问

8、Pass-08

与上一题差不多,只是少了过滤最后的一点

抓包修改为php. 

9、Pass-09

 对比上一题少了对特殊字符::$DATA的过滤

还是抓包修改文件尾缀

在尾缀后面添加::$DATA

放包,访问

10、Pass-10

 这是一个后端校验的 PHP 代码,从上可知其中定义了文件后缀名黑名单,黑名单里几乎包含了所有可解析的后缀名、.htaccess以及.ini,与此同时脚本还会对上传文件名进行过滤,包括首尾去空、删除文件名末尾的点、将字符转换为小写、去除字符串::$DATA等。但由于只对点进行了单次过滤,因此如果我们上传mac.php. .最终会过滤为mac.php.,这样也就演变成了第八题。虽然以上几题都能通过这种方式绕过限制,但是这并不意味着我们要“一招鲜,吃遍天”,而学习多种绕过姿势才是我们的目的。

文件名加. .

上传 php 文件并在文件后缀名后加上. .,上传后脚本会去除 .,同时系统会自动将.清除以完成正常解析

11、Pass-11

查看源码

这是一个后端校验的 PHP 代码,从上可知其中定义了文件后缀名黑名单,黑名单里几乎包含了所有可解析的后缀名、.htaccess以及.ini,当上传文件的后缀名与黑名单匹配时会自动去除后缀名,没有了后缀名文件自然也无法解析,但由于只过滤单次后缀名,因此我们可以双写后缀名绕过限制

使用双写绕过

12、Pass-12

查看源码

 这是一个后端校验的 PHP 代码,从上可知其中定义了文件后缀名白名单,白名单中包含了jpg、png、gif,直接使用图片码(webshell.png),详情参考第三关

13、Pass-13

与12关类似,采用图片马绕过即可

14、Pass-14

查看源码:

 本题对文件内容的前两个字节进行检测,同时提示其中存在文件包含漏洞

这是一个后端校验的 PHP 代码,从上可知其中定义了文件白名单,白名单中包含了jpg、png、gif,脚本会检查文件开头的两个字节来判断文件是否为白名单。如果判断文件不为白名单则上传失败,因此我们可以伪造图片头并在图片中插入代码,使用图片马上传的方式可绕过限制吗,然后配合文件包含完成脚本解析

文件包含+图片马

windos进入文件目录执行cmd命令:copy 1.png /a + 1.php /b shell.png

 图片马生成后开始上传文件

15、Pass-15

这题与上一题没多大区别就除了运用了一个函数

$info = getimagesize($filename);

大概意思就是利用检测文件头来判断上传的文件是不是图像文件

同样是利用上传图片马和文件包含漏洞

文件包含命令用来测试图片马是否能正常运行

<?php
header("Content-Type:text/html;charset=utf-8");
$file =$_GET['file'];
if(isset($file)){
	include $file;
}else{
	show_source(__file__);
}
?>

http://192.168.1.106/upload-labs/upload/include.php?file=D:/phpStudy/WWW/upload-labs/upload/8220231207143609.png