下面是网页中的代码
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 "文件类型不匹配";
}
}
$des
在连接的时候最前面连接的是$_GET[‘road‘]
,而$_GET[‘road‘]
这个参数又是我们可以编辑指定的,所以可以构造出00截断,这里涉及到URL编码内容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会被加上一个反斜杠转义掉
原文:https://www.cnblogs.com/carr0t/p/12622236.html