pass-1:
分析源代码:
lastIndexOf("."):"."最后一次出现的位置
substring:截取传递的参数给定范围的字符串,本题就是"."之后的字符串,即扩展名
indexOf:寻找字符串中是否有符合参数的字符串,本题即后缀名(网页上显示的源代码中indexOf的参数是ext_name+"|",按理说应该gif后缀名也无法通过验证的,查看php文件后发现实际indexOf函数的参数为ext_name,并没有加"|")
故本题只是在前端用js检查了上传文件的后缀名,先将一句话文件后缀名改为jpg,通过前端测试后再用bp抓包修改后缀名即可
上传成功
将图片链接复制再通过蚁剑连接即可
pass-2
分析源码
分析代码发现本题是将$_FILES数组作为判断依据的,查看$_FILES数组的各项内容:
$_FILES['myFile']['name'] 客户端文件的原名称。
$_FILES['myFile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。
$_FILES['myFile']['size'] 已上传文件的大小,单位为字节。
$_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认。
可知本题检查了$_FILES['file']['type']即文件的MIME类型,当文件上传请求发送时网页会将MIME类型写入http头中的content-type项,因此用bp抓包后修改即可
上传成功后用与pass-1相同的步骤获得webshell即可
pass-3:
分析源码
本题设立了黑名单,不允许上传asp、aspx、php、jsp文件
对于黑名单,可以通过将文件后缀名修改成不在黑名单中,却又能被系统执行的后缀名。常见的方法有大小写绕过(文件后缀名大小写不影响系统运行)、末尾加空格、"."绕过(后缀末尾加空格或.windows会自动去除正常解析)、末尾添加::$DATA绕过(在文件末尾加::$DATA,系统会将文件当做文件流处理),
本题将前面所说的所有绕过方法都做了过滤,但是在黑名单的设置上不够完善,将一句话文件后缀改为php3进行尝试,上传成功,再进行蚁剑连接即可
pass-4:
分析源码
可以看到相比较于pass-3,本题已将黑名单扩充
本题就用到了另一个绕过方法:.htaccess重写解析绕过
.htaccess文件是apache独有的配置文件(.htaccess文件没有名字,只有后缀名),可以实现网页重定向、404错误页面自定义、允许/阻止特定的用户或者目录的访问、改变扩展名等功能,如果能够将.htaccess文件上传至服务器,.htaccess文件可以指定目录下某类文件被当做另一类文件解析
<FilesMatch "jpg">
SetHandler application/x-httpd-php
</FilesMatch>
或
AddType application/x-httpd-php .jpg
但是启用htaccess文件需要更改Apache的httpd-conf文件将allowOrride打开并开启rewrite模块
(需要注意的是,以上命令在nts版本的php中是无法执行的,而phpstudy提供的php都是nts的,所以如果是在本地通过phpstudy搭建upload-labs进行测试的话还需要在官网下载一个ts版本的php)
pass-5:
本关和第10关相同
pass-6:
分析源代码
本题没有大小写过滤,因此将后缀名改成大写即可
(但是在本地用phpstudy搭建的upload-labs访问后缀名大写的文件时会500报错,应该是伪静态之类的没有配置好,还有待研究)
pass-7:
分析源码
本题没有空格过滤,抓包后在文件后缀名后加空格即可
pass-8:
分析源代码
本题没有"."过滤,在后缀名后加"."即可
pass-9
分析代码
本题没有::$DATA过滤,在后缀名加::$DATA即可
(要注意的是本题若直接打开图片链接会显示403,因为图片链接上包含了::$DATA,将 :: $DATA删除再访问即可)
pass-10:
分析源码
本题将常见过滤方法都进行了过滤,但是只所有的过滤只是按顺序进行了一次,故
pass-11
本题用str_ireplace()函数,检测后缀名是否是黑名单,若是则用空格代替,由于只进行一次,故将后缀名双写即可