最近越来越感觉菜了,又把各种漏洞基础原理深入理解玩了玩,巩固一下。然后找到一个不错的上传漏洞汇总的靶场,记录一下。
靶场源码地址:/c0ny1/upload-labs
我这里为了方便,就下载了靶主已经集成配置好的环境进行本地搭建。地址:/c0ny1/upload-labs/releases
本地搭建好是下面这个页面:
考察点:
直接开始
第一关
查看提示
直接利用Burp Suite代理改后缀 ,或者利用插件禁用js。
成功上传
第二关
查看提示
利用Burp Suite修改Content-Type类型为 image/jpeg
成功上传
第三关
查看提示
修改后缀为php3依然会被解析
成功上传
第四关
查看提示
是基于黑名单的方式,这一关利用重写文件解析规则绕过 上传.htaccess文件(基于黑名单)
大概原理:
Apache中当上传到文件全部被解析为.jpg的后缀时。可以尝试一下后缀为.htaccess的文件。
<FilesMatch "4.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
代码的含义 是 将上传的文件后缀名为.jpg
格式的文件以 php格式来解析文件成功绕过
上传
菜刀连接一下
可以直接用菜刀连接http://127.0.0.1/upload/4.jpg
第五关
查看提示
这里无法使用.htaccess文件绕过
利用PHP 和 Windows环境的叠加特性,以下符号在正则匹配时的相等性:
双引号"= 点号.大于符号> = 问号?小于符号< = 星号*
然后使用:截断上传, :截断上传会使文件为空,可以利用上述特性再次上传 5.< 覆盖写入shell。
成功上传,但是大小为0KB。
再次上传
成功写入
参考链接: /php-windows-upload.html
第六关
查看提示
依旧是黑名单过滤,查看源代码
还是利用Windows系统的文件名特性,文件名中不能出现点,冒号,空格等符号的特性,会直接消除
会被windows系统自动去掉不符合规则符号后面的内容
在Burp Suite中修改其上传名加上 空格 绕过代码。
成功上传
第七关
查看提示
查看源代码
与上一关相比,并没有删除点 可以最后加点绕过
成功
第八关
查看提示
查看源代码
这里没有过滤::$DATA 利用Windows文件流特性绕过 构造8.php::$DATA 会被保存为8.php
当然我们也可以通过构造8.php. . 点空格点 绕过函数校验。
这里就演示构造8.php::$DATA
第九关
查看提示
查看源代码
依然是黑名单校验加文件名处理
这里就利用上一关的第二种方式绕过
成功
第十关
查看提示
会去除脚本后缀,可以通过双写绕过
可以看到保存为10.php
第十一关
查看提示
抓包
补充点知识:
截断条件: php版本小于5.3.4大于此版本的修复了
php的magic_quotes_gpc为OFF状态这函数是魔术引号,会对敏感的字符转义的 空就会被转义加个反斜杠
因为我们是集成包,所以环境一切都是完美的~~~
利用截断,构造路径 文件名就会被截断啦。
成功
第十二关
查看提示
老样子,抓包修改
提交方式不一样而已 构造0x00截断 这里在16进制改加个分号方便查找进行修改
成功
第十三关
只需将图片马上传即可,后期可以利用文件包含漏洞实现getshell
查看提示
这里进行了上传文件头检测
我们在我们的上传文件 加入jpg,png,gif的文件头
这里是16进制 可以用winhex进行查看修改或者直接构造图片马(下一题)
提交
等效16进制
成功,文件已经重命名
- - 偷偷懒就不写jpg和png了
第十四关
查看提示
getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息,我们在图片中插入一句话并且可以正常显示图片绕过此函数。
构造图片马
准备一张正常的图,和一句话木马 在命令行
copy 1.jpg /b + 1.php 14.jpg
参数/b指定以二进制格式复制、合并文件; 用于图像类/声音类文件
意思是将1.jpg以二进制与1.php合并成14.jpg 14.jpg就是图片马 记事本方式打开一句话木马被插在最后
上传
- - 然后就失败了,我试了试正常的jpg图片也不行。png和gif的通过
第十五关
查看提示
这一关拿上一次生成的jpg马就可以上传~
第十六关
查看提示
查看源代码
-
二次渲染- -
根据用户上传的图片,生成一个新的图片,然后删除用户上传的原始图片,将新图片存储到数据库中。
从其他writeup找的过渲染的图片马(强)
和这个损坏的jpg警告提示报错,但是依旧成功上传,并且没有重命名。
- - 自己想了不少姿势,想打组合拳,都没有bypass。
第十七关
查看提示
上传php文件会被删除 利用条件竞争漏洞,不断请求资源,在删除文件之间请求该文件。
<?php fputs(fopen('../shell.php','w'),'<?php @eval($_POST[aaa]) ?>'); ?>
本地没有复现成功- - , 然后用第五关的姿势也是得到了getshell
第十八关
代码审计
参考别人的writeup(待补充原理~) 利用上传重命名竞争+Apache解析漏洞 不断发包
可用菜刀直接连接
第十九关
查看提示
CVE--2348
move_uploaded_file() 00截断,上传webshell,同时自定义保存名称,直接保存为php是不行的
发现move_uploaded_file()函数中的img_path是由post参数save_name控制的,因此可以在save_name利用00截断绕过:
构造
或者
均可绕过
复现了听过没实际操作过或者没了解过的姿势。同一关卡可以有不同姿势,也是有待研究和补充的。
参考链接:/LandGrey/upload-labs-writeup