文件上传漏洞--Upload-labs--Pass09(在某些版本的靶场里是Pass10)--点+空格+点 绕过

一、什么是 点+空格+点 绕过

顾名思义,将 test.php 改为 test.php. . ,观察到后缀名php后多出了 点+空格+点。那么 点+空格+点 是如何进行绕过的,在什么情况下可以使用,让我们结合题目讲解。


二、代码审计

1、查看题目源代码上半部分,题目采取黑名单,并且对 Pass05 - Pass07 的题目中所出现的漏洞进行了有效修复,意味着我们不再能够使用 点绕过/空格绕过/大小写绕过了。

文件上传漏洞--Upload-labs--Pass09(在某些版本的靶场里是Pass10)--点+空格+点 绕过_第1张图片

2、接着查看源代码下半部分,看起来和前面关卡并无不同,但其实题目源代码做了一个细小的修改,如图。题目将 $img_path中的 $file_ext 换成了 $file_name,就是这个细节,构成了 点+空格+点 漏洞。

文件上传漏洞--Upload-labs--Pass09(在某些版本的靶场里是Pass10)--点+空格+点 绕过_第2张图片

文件上传漏洞--Upload-labs--Pass09(在某些版本的靶场里是Pass10)--点+空格+点 绕过_第3张图片


三、点 + 空格 + 点 绕过原理

1、上传 test.php. . 文件,源代码的诸条指令开始对其进行操作。

2、首先 deldot() 函数将文件名的最后一个点删除,变为: test.php._ 。 _在这里表示空格。

3、strche() 函数提取最后一个点到字符串末尾的位置,即提取文件后缀名,并赋值给 $file_ext。但是文件最后一个点到末尾的字符串是 空字符,故提取的文件后缀名 $file_ext 也是空字符,这就可以对黑名单进行绕过了。

4、接着解释 $image_path 中的 $file_name 的问题,经过一系列操作后,$file_name 为 test.php,而 $file_ext 为空字符,如果这里写的是 $file_name,最终的 $image_path 应该形如:https://upload-labs/upload/test.php,反之,若写的是 file_ext,最终的 $image_path 应该形如:https://upload-labs/upload/ ,这会导致Apache什么都解析不出来,因为没有文件可以解析,upload 目录下为空。这就是 点+空格+点 绕过的局限性所在。


四、通关操作

1、首先上传 test.php 文件,利用 Burpsuite 进行抓包,在 filename 中添加 点+空格+点 进行黑名单绕过。

文件上传漏洞--Upload-labs--Pass09(在某些版本的靶场里是Pass10)--点+空格+点 绕过_第4张图片

2、放包,文件上传成功,在新标签页中打开,将url后多出的 点和空格 删掉,发现代码执行成功。

文件上传漏洞--Upload-labs--Pass09(在某些版本的靶场里是Pass10)--点+空格+点 绕过_第5张图片

---通关。

你可能感兴趣的:(Web安全--文件上传漏洞,文件上传漏洞,web安全)