一、搭建环境:
下载upload-labs源代码
下载链接:https://codeload.github.com/c0ny1/upload-labs/zip/refs/heads/master
将压缩包解压后的文件名改为upload-labs,然后放入phpstudy\www目录下
二、关卡通关:
1、pass-01(前端绕过):
本关我们需要上传一个webshell到服务器,首先我们先上传一个php文件尝试一下:
上传以后,我们发现此关不允许上传php相关类型的文件:
我们查看源码后:
此关检验功能在于前端代码,JavaScript进行白名单验证,我们利用浏览器内置的功能禁止JavaScript的运行(我是用的是google浏览器)
随后上传文件:
可以看出来,上传成功。
同时,我们查看后端源代码中的upload中也看到了web.php被上传进去了。
2、pass-02(对数据包的MIME进行绕过)
第二关,我们继续使用第一关的同款方法,随后我们查看界面:
此关提醒文件类型不正确,让我们继续上传文件,所以我们由此猜测,此关的名单验证应该在后端代码中,我们查看源码进行:
分析代码,我们发现此关只允许我们上传代码有关的类型,所以我们使用Burpsuite完成下列关卡,将代理设置为8080端口:
随后我们上传我们的php文件进行抓包处理,
抓包处理后将其设置到repeter模块(以下为代码演示),我们将其类型设置为image/jpeg格式:
send过后我们查看burpsuit中的第二关:
已经上传成功,同时我们在vscode中查看upload文件夹,同样也被上传成功。
3、pass-03(黑名单禁止):
第三关我们首先查看提示,发现禁止我们上传php,jsp等文件:
但通过查询资料我们可以了解,php的扩展名还有.php3和.php5以及.phtml的形式,我们上传web.php3后:
上传成功。
4、pass-04(.hataccess绕过):
首先查看提示,本关继续使用黑名单,禁止下列文件格式:
限制特别多,但是我们可以想到一种更奇特的方法(即.htaccss文件):
通过查询文件上传漏洞之.htaccess文件解析漏洞_.htaccess 漏洞-CSDN博客 的博主资料,我们找到了一句话:
Sethandler application/x-httpd-php
查看作用后,发现这句话的作用是将该目录所有文件均映射为php文件类型,所以我们先上传.htaccess文件,随后再上传我们的jpg文件(jpg文件要和.hataccess文件在同一个目录下),查看后我们发现uploads已经被传上去。
5、pass-05(大小写绕过)
首先查看提示,很明显绕过了上一关我们所用的.hataccess文件。
我们查看源码,发现尽管本关有许多限制,但他忘记绕过大小写:
我们上传.PHP形式的代码:
成功绕过。
6、pass-06(空格绕过):
第六关我们分析代码后,发现此关只有三处限制,相对于第五关来说, 没有限制空格
我们抓包进行处理,随后将web.php文件加空格:
此时,绕过成功。
7、pass-07(.绕过):
将第六关和第七关源码进行对比,我们看到第六关将.绕过,第七关并没有绕过,所以我们是否可以猜测,"."起的作用是否和第六关" "起的作用一样。
我们继续抓包进行尝试:
8、Pass-08(::$DATA字符绕过)
继续对比,我们发现,相比于第六七关,此关没有进行data字符的绕过,所以我们继续抓包
成功。
9、pass-09:
这关我们结合五六七八关,几乎过滤了所以的条件绕过,所以我们考虑可以使用逻辑绕过,先绕过.再绕过空格。
web.php. .(文件格式) #先跳过".",再跳过" ",最后剩一个".",与第七关类似,绕过本关。
10、pass-10(双写绕过):
继续分析代码,我们可以看出,此关有一个替换代码,可以将php等关键字符用" " 替换。所以我们可以考虑使用之前在xss关卡中使用的双写方法:
修改文件类型为以下格式:
web.pphphp
随后,我们检查:
绕过成功。
后续关卡会尽快补充。