从0到1CTFer成长之路-第二章-Web文件上传漏洞
发布日期:2021-06-29 11:27:45 浏览次数:2 分类:技术文章

本文共 2354 字,大约阅读时间需要 7 分钟。


Web文件上传漏洞

声明

好好向大佬们学习!!!

攻击

文件上传漏洞

摘自

https://book.nu1l.com/tasks/#/

使用BUUCTF在线环境

https://buuoj.cn/challenges

访问

http://3e8b5e24-d936-4a8f-9d1b-15ee36321db8.node3.buuoj.cn

在这里插入图片描述

在这里插入图片描述

一个上传文件功能,随便点点看,点到了提交查询,发现只能上传zip、jpg、gif、png,看看怎么绕过过滤上传

我的文件上传本来就薄弱,这个题也确实很打击我

上来一看是上传,而且只能图片,什么图片马,各种content-type绕过,十六进制编码绕过,在脑海中闪过,但是唯独这个zip格格不入,这不是明摆了和书中的上传zip,利用zip解压,最后解析有点类似吗,所以果断放弃了前面的想法,但是由于本身也比较菜还是参考了大佬的博客

https://blog.csdn.net/rfrder/article/details/108930033

由于上传功能比较特殊,不是光绕过上传检测就完了,还需要知道上传到哪了,如何解析,还涉及路径穿越解析,所以环境需要我们可操控,我们就自己用docker搭建环境吧,就不用了BUUCTF的环境了

docker搭建

vim docker-compose.yml

内容如下

version: '3.2'services:  upload:    image: registry.cn-hangzhou.aliyuncs.com/n1book/web-upload:latest    ports:      - 80:80

执行

docker-compose up -d

为什么在BUUCTF开的没有源码

访问docker搭建的80端口

http://192.168.137.144

在这里插入图片描述

可以看到,浏览器往下拉是有源码的,先看看源码,反正我比较菜,源码中我把HTML都省略了

listContent() as $value){ $filename = $value["filename"];//一段较为简单的正则,就是匹配每个文件结尾的位置,是否是.php if(preg_match('/\.php$/', $filename)){ exit("压缩包内不允许含有php文件!"); } } if ($archive->extract(PCLZIP_OPT_PATH, $temp_dir, PCLZIP_OPT_REPLACE_NEWER) == 0) { check_dir($dir); exit("解压失败"); } check_dir($dir); exit('上传成功!'); }else{ move_uploaded_file($file['tmp_name'], $temp_dir.'/'.$file['name']); check_dir($dir); exit('上传成功!'); } }else{ exit('仅允许上传zip、jpg、gif、png文件!'); }}

其实看了一下代码,大致是了解了,正如书上所说,需要将php文件达成zip包,然后,绕过路经检测,通过路径穿越将文件放到指定目录,然后访问

由于我们上传的路径目录是upload/随机值/上传的文件,这一点再验证一下,我们随便上传一张图片,进入docker看一下

在这里插入图片描述

所以我们要穿越两层,直到根目录下,一层随机目录,一层upload

所以需要文件名为/…/…/file.php,由于需要构造解析,利用apache的解析漏洞,如果从右开始,直到哪个能识别就解析哪个,构造最终文件名为/…/…/zzz.php.zzz,这个文件名长度为18位

在这里插入图片描述

windows操作系统下,右键创建文件,文件名随便写一个18位的(跟刚刚的文件名位数一样),这里是把后缀涵盖的,例如

123456789012345678

然后我用的WinRar,右键添加到zip

在这里插入图片描述

接下来就开始用010 Editor进行zip文件的编辑

010 Editor软件怎么下载?怎么破解?官网?破解教程?

NONONO,这里疯狂安利乌云安全公众号,感谢大佬的整理,大佬把CTF常用的工具都整到百度网盘了

乌云安全公众号大佬,访问下面这个找下载链接

https://mp.weixin.qq.com/s/WotJoG57CVGQ-mFqn2_cCQ

下载完之后,直接双击打开

在这里插入图片描述

左上角文件,打开刚刚那个zip

在这里插入图片描述

打开后重点关注下方的面板,看值那一列就是我们的文件名123456789012345678,选Start不为0h的那个,我这是30h

在这里插入图片描述

注意deFileName[18],现在的值是123456789012345678

在这里插入图片描述

修改为/…/…/zzz.php.zzz,ctrl+s保存

在这里插入图片描述

上传这个zip

在这里插入图片描述

在这里插入图片描述

docker里面皮一下,看一下,已经上传到根目录了

在这里插入图片描述

利用apache的文件解析漏洞,访问这个php,拿到flag

http://192.168.137.144/zzz.php.zzz
n1book{ThisIsUpLoadToPicfl4g}

在这里插入图片描述

转载地址:https://blog.csdn.net/zy15667076526/article/details/114139749 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:从0到1CTFer成长之路-第三章-Python的安全问题
下一篇:从0到1CTFer成长之路-第二章-XSS的魔力

发表评论

最新留言

很好
[***.229.124.182]2024年04月19日 08时13分16秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章