Upload-labs 1-21关 靶场通关笔记(含代码审计)_addhandler sethandler upload 19关-CSDN博客
.php文件
<?php
phpinfo();
?>
Pass-06
大小写绕过
打开环境,查看源码与提示
没有禁止phP 、Php,尝试将文件后缀大小写绕过限制
phpinfo.Php
<?php
phpinfo();
?>
上传成功后,右键点击图片
复制链接并打开
成功访问
Pass-07
空格绕过
查看源码与提示
阅读代码发现 缺少了首尾去除空格的代码过滤
由于windows特性,文件名后空格会被直接删除,不能直接上传.php后加空格,所以我们要用burp抓包然后再添加空格。
利用PHP 和 Windows环境的叠加特性 ,windows系统自动删除文件名后缀的空格 ,绕过黑名单
尝试上传.php文件,并使用bp抓包并在.php后面加上空格。不需要发送到重放器,直接修改后放行
成功访问到文件路径
Pass-08
点绕过
查看源码与后缀
缺少了deldot函数。删除文件名最后一个点(如果有多个连续的.... 会全部删除)
获取的最终文件后缀为“.” 不在黑名单里面
Windows系统保存文件的特性 :会删除文件后缀名的xxx.php. 最后上传的文件还是xxx.php
上传.php文件,使用bp进行抓包修改
在.php后加上“.”,成功修改后放行
新建标签页打开图像,即可成功访问
Pass-09
(::$DATA绕过黑名单)
查看源码与提示
查找资料可知
这一关黑名单,没有对::$DATA 进 行 处 理 使用::$DATA 进行处理,可以使用::$DATA绕过黑名单
php在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持"::$DATA"之前的文件名
上传.php文件,bp进行抓包
修改后放行
打开修改后的图像链接
发现无法访问
注意访问路径中不含::$DATA
即可成功访问
Pass-10
点空格点绕过
查看源码与提示
用.php. .绕过
代码运行最后得到的后缀为"." 不在黑名单中 然而又用原来的10.php. .来保存文件 由于windows在
文件命名中会自动删除.和空格 所以最终得到的是10.php 因此绕过了黑名单限制
上传.php文件,bp抓包
在.php后加上“. .”(点空格点)
修改后放行
成功访问
Pass-11
双写php绕过
查看源码与提示
发现依旧是用上传的文件名来拼接路径并保存文件 没有对文件重命名
只是用了str_ireplace()函数来检测(此函数无视大小写) 如果文件名含有黑名单里面的字符串 就替换为空
但是只替换一次 并没有进行正则匹配或者是循环匹配敏感字符 因此只要双写php即可 因为是从左往右读的 所以替换为空后 还是php。pphphp、phphpp都可以尝试
不可以将两个php重复写在一起,不然都会被消除
直接上传.pphphp文件
<?php
phpinfo();
?>
访问图像链接
成功访问
Pass-12
%00截断白名单
代码漏洞点就在于:用$_GET['save_path']来组成上传的文件路径,而这个get传参是我们可以控制的地方
因此我们考虑用是否能进行截断:例如形成../upload/phpinfo.php/截断后面的(xxx.jpg)
这样就通过了白名单校验 并且保存成了php文件
%00截断知识点:
url中的%00(只要是这种%xx)的形式,webserver会把它当作十六进制处理,
然后把16进制的hex自动翻译成ascii码值“NULL”,实现了截断burpsuite中16进制编辑器将空格20改成了00。
本质上来说,都是利用0x00是字符串的结束标识符,进行截断处理。
只不过GET传参需要url编码成%00而已
原理:php的一些函数的底层是C语言,而move_uploaded_file就是其中之一,遇到0x00会截断,0x表示16进制,URL中%00解码成16进制就是0x00。
注意:
%00截断
%00的使用是在路径上!
若上传不成功,可检查下php版本是否为5.3以下,或者尝试对%00进行url编码
查看源码与提示
后台采用了白名单的方式对文件后缀名进行了过滤,并且对文件名采用了随机数加时间的方式进行了重命名。但是,根据提示,我们可以通过GET的方式上传save_path参数,该参数可以控制文件上传的路径。我们借助该参数,可以采取%00截断的方式,将上传文件的文件名和路径写到save_path参数中,然后加上一个%00的符号,来实现对上传文件文件名和后缀名的控制。
上传.php文件,使用bp抓包
进行修改,使用%00截断,并将filename后的.php后缀修改为.jpg
修改完成后放行,文件上传出错!
查阅资料得知
00截断的条件:
php版本小于5.3.29
magic_quotes_gpc = Off
查看phpiinfo(),发现magic_quotes_gpc处于打开状态
到php的根目录找到php.ini文件, 接着打开并修改为Off
再次进行尝试
上传成功
访问图像链接时却出错了
将链接修改后成功访问。
Pass-13
0x00截断白名单
查看源码
提示与12关一样。同第12关做法相同
只不过上传路径在$_POST数据中 不需要url编码
上传.php文件
使用bp抓包
修改数据
将%00解码,取消url编码
放行后发现上传成功
但和12关一样,具体问题还未知
修改链接,即可成功访问
上传成功后,直接访问成功的url就行