upload-labs
title: upload-labs
tags: upload-labs
abbrlink: 80f02bc5
date: 2022-08-14 15:40:44
靶场地址
一句话
WebShell连接工具
中国蚁剑
AntSword 加载器
菜刀
Pass-01
- 写一个一句话文件,后缀改成允许上传的文件类型
- bp抓包,把后缀改成.php
- 蚁剑连接
Pass-02
- 新建后缀.php的文件
- bp抓包
- 将Content-Type修改为允许上传的类型(image/jpeg、image/png、image/gif)三选一
Pass-03
- 黑名单验证
- 如果黑名单定义不完整的话是可以实现绕过的,用.phtml .phps .php5 .pht进行绕过。这里我们直接上传一个.php5文件
- 因为上传上去的文件名会改变,bp抓包数据包中有回显,所以我们还是可以访问的。
注意
- 要在apache的httpd.conf中有如下配置代码:AddType application/x-httpd-php .php .phtml .phps .php5 .pht,如果不配置他是无法解析php5代码的,访问的时候就是一个空白页
Pass-04
- 可以看到禁止上传文件太多了
- 首先创建一个.htaccess文件,里面写上代码
- 这串代码的意思是如果文件中有一个1.png的文件,他就会被解析为.php.
- 再上传一个1.png的文件就能访问了
注意
.htaccess文件不能起名字,他就是.htaccess文件,如果你将他改为1.htaccess或者其他的什么名字是不可以的,无法解析。在实战中有可能上传上去这个文件会被自动重命名,被重命名了就不可以了。Pass-05
- 这一关没有强制将大写转换为小写,所以我们可以上传纯大写或者大小写结合的后缀名
- 直接上传一个后缀名为.PHP的文件,上传后或自动改名字bp抓包可以看见
- 我们可以看到上传成功,访问
Pass-06
注意
- Win下
`xx.jpg空格
和``
xx.jpg.`两种文件是不被允许存在的,要是这样命名文件,windows系统会默认删除
空格``
或者`.
` - 我们用burp抓包将filename=“12345.php"改为filename=“12345.php “(12345.php空格)
Pass-07
- 和第七关思路一样,就是把空格换成点
Pass-08
- Windows本地文件系统中的文件流(File Streams):
当从 Windows shell 命令行指定创建文件时,流的完整名称为 “filename:stream name:stream type”,如示例中所示: “myfile.txt:stream1:$DATA” - 和上一关一样,直接上传,在数据包的php后面直接加上
`::$DATA
`Pass-09
- 这一关的思路是它没有循环验证,也就是说这些收尾去空,删除末尾的点,去除字符串::$DATA,转换为小写这些东西只是验证了一次。
- 所以我们的绕过思路就很简单,在数据包中把后缀名改为
`.php. .
`Pass-10
- 将文件名改为.pphphphpp
Pass-11
Content-Disposition: form-data; name=“upload_file”; filename=“pi .jpg”
$file_name经过reset($file) . '.' . $file[count($file) - 1];处理。
如果上传的是数组的话,会跳过$file = explode('.', strtolower($file));。
并且后缀有白名单过滤:
$ext = end($file); $allow_suffix = array('jpg','png','gif');
而最终的文件名后缀取的是$file[count($file) - 1],因此我们可以让$file为数组。
$file[0]为smi1e.php/,也就是reset($file),然后再令$file[2]为白名单中的jpg。
此时end($file)等于jpg,$file[count($file) - 1]为空。
而 $file_name = reset($file) . '.' . $file[count($file) - 1];,也就是smi1e.php/.,最终move_uploaded_file会忽略掉/.,最终上传smi1e.php。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 putdown.top