upload-lab学习笔记和WP
知识点总结
如何判断前后端
在无法阅读源码的情况下,上传文件后,检测快的就是前端,检测慢的就是后端。
前端
前端一般为js函数,f12找到函数判断代码(找return xxx()),找到将函数替换为1。
或者按照前端限制进行上传,在从bp里拦截,修改文件后缀即可。
后端
MINE检测
检测文件类型,抓包后一般修改Content-Type:后面的内容为如下几个
text/html : HTML格式
text/plain :纯文本格式
text/xml : XML格式
image/gif :gif图片格式
image/jpeg :jpg图片格式
image/png:png图片格式
php后缀检查
常见可解析类 .php、.phtml、.php3、.php4、.php5、.inc
大小写绕过,特殊字符绕过.pHp、.pHtml、.pHp3、.pHp4、.pHp5、.iNc,.php%00、.php%20、.php......
特别的
如果apache配置了<FilesMatch "\.php$"> SetHandler application/x-httpd-php </FilesMatch>那么只要文件名中包含.php后缀(不一定是最后一个),Apache就可能将其交给PHP解释器执行。
.htaccess
htaccess文件时Apache服务中的一个配置文件 ,它负责相关目录下的网页配置。通过htaccess文件,可以帮助我们实现:网页301重定向、自定义404错误页面,改变文件扩展名、允许/阻止特定的用户或者目录的访问,禁止目录列表,配置默认文档等功能
<FilesMatch "\.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
代码意思是当前文件夹下所有文件都会被解析成php文件
::data
Windows系统在解析后缀名称的时候,会把::$DATA之后的数据当成文件流处理,而不会检测后缀名
如修改为xxx.php::$data文件 解析后变成xxx.php成功绕过黑名单
%00截断
原理:php部分函数来源自c语言,c语言漏洞之一为碰到00,/0会自动截断,会自动丢失后面的内容,遇到此漏洞,可以将文件修改为xx.php%00.jpg,系统自动识别为xx.php
wp
less 1 js检查
考的是前端js检查,把函数删除返回1即可


第二个解法
也可以先上传图片马再抓包修改后缀再提交,先绕过前端。
less 2 mine绕过
考的是mine绕过,上传php发现,提示类型不正确。

抓包修改Content-Type为image/jpeg即可
less 3 php解析的其他后缀
抓包修改后缀为.php3即可。

less 4 .htaccess

源码在后端限制了各种php解析相关的后缀文件,但是没有限制.htaccess,想到可能是上传.htaccess+图片。
less 5 大小写绕过
第5关.htaccess都不能上传了,需要考虑别的方式如何进行解析。
查看源码,发现没有对大小写进行限制,直接上传.phP
less 6 空格绕过 Windows only
第六关源码有这么一句
$file_ext = strtolower($file_ext); //转换为小写
这样导致无论上传后缀,都会被分配成大小写
而且目前来说.php.jpg也是不可行的,因为后缀前缀会被重新拼接
只能抓包尝试
将后缀后增加一个空格,如果服务器在Windows上,则系统会自动忽略最后一个空格。
less7 后缀·绕过
抓包后修改文件名为.php.即可,后端没有deldot验证。
less 8 ::DATA过滤
使用xxx.php::$data即可。
less 9 单次验证漏洞 Windows下
源码只会对后缀进行一次处理,即为,deldot()删除点,str_ireplace()去除data字符串,trim()去空
所以这题解为,使用后缀为php. .
在Linux下,会被解析成php.,无法正确解析,这题智能在Windows下会解析成php
less 10 双写验证
正常上传php,发现可以正常上传,但是打开图像后,名称后缀删除了php,典型检测到非法后缀后不拼接了。

关键代码str_ireplace($deny_ext,"", $file_name);替换,意义为,如果\(deny_ext匹配到\)file_name,替换为"",即为空。

这题关键就是后缀改成pphphp
less 11 %00截断 get型
$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

源码中有个get=save_path的get传参,随便上传个图片就看到了。
抓包尝试绕过

修改get参数,再修改下方filename为jpg。
为什么这一less可以上传图片马,因为从源码即可看到,上传的文件路径是可以自定义的,我们首先绕过mine,再截断save_path,这样两步,上传路径就被修改成了.php的文件。
less 12 %00截断 post型 (php版本<3.2的漏洞)
源码和上题不一样的点在于这次是post传参。需要进行%00后,url编码,这里ctf2的php版本不满足,此漏洞来源于:
magic_quotes_gpc = Off
php版本小于3.4
学习即可

浙公网安备 33010602011771号