如果你没有在 cnblog 作者为 carr0t2 中看到此文章,建议访问 原网页以获取更好的排版,图片体验
题目
下面是网页中的代码
if (!empty($_POST['submit'])) {
$name = basename($_FILES['file']['name']);
$info = pathinfo($name);
$ext = $info['extension'];
$whitelist = array("jpg", "png", "gif");
if (in_array($ext, $whitelist)) {
$des = $_GET['road'] . "/" . rand(10, 99) . date("YmdHis") . "." . $ext;
if (move_uploaded_file($_FILES['file']['tmp_name'], $des)) {
echo "<script>alert('上传成功')</script>";
} else {
echo "<script>alert('上传失败')</script>";
}
} else {
echo "文件类型不匹配";
}
}
思路
- 搜索00截断内容
- C语言中学过字符串的结尾会有00作为字符串结束的标志,这里同理,
$des
在连接的时候最前面连接的是$_GET['road']
,而$_GET['road']
这个参数又是我们可以编辑指定的,所以可以构造出00截断,这里涉及到URL编码内容 - 推荐阅读
https://zhuanlan.zhihu.com/p/27739315
https://www.seebug.org/vuldb/ssvid-89630
工具
1.中国蚁剑
2.bp
解法
1、bp开代理,上传图片马并截获
2、构造00截断上传
3.中国蚁剑连接,获得flag
后记
自己目前还不太会php代码,所以就自己调试,发现这几个变量上传之后的情况
自己用电脑调试时候发现%00会被解析成\0,后来在上面知乎文中得到了解释
我们现在已经知道使用%00截断有两个条件php版本小于5.3.4和magic_quotes_gpc为off状态。 如果这时我们将magic_quotes_gpc改为on那么就不能截断了,因为开启magic_quotes_gpc后%00会被加上一个反斜杠转义掉