文件上传漏洞_00截断
key:PHP的%00截断
①原题界面如下👇
直接上传.php文件显然不行,再尝试上传图片马还是不行
②burpsuite抓包,放到repeater中👇
go一下在回应报文里找到源码👇
-
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
"文件类型不匹配";
-
}
我们上传的图片马格式是在白名单里的gif,显然格式没有错误
注意这一行代码👇
$des = $_GET['road'] . "/" . rand(10, 99) . date("YmdHis") . "." . $ext;
rand()函数显然是生成了随机数,对文件上传的路径进行了拼接
所以我们在成功上传后还是找不到文件路径,依旧无法连接
③思路就是用一个截断字符把随机数给截断掉,那就是00截断
简单来说就是php版本<5.3.4的网页,在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束
④明白了原理,那就开始操作,尝试修改请求头里的文件上传路径👇
这样一来,文件上传路径就可以被我们人为地确定了
⑤蚁剑连接上URL+文件上传路径(也就是/upload/1.php)
在html目录下找到flag文件
转载:https://blog.csdn.net/Mitchell_Donovan/article/details/115918878
查看评论