PHPDisk E-Core 补丁过滤不严继续重装

2014-04-28T00:00:00
ID SSV:95389
Type seebug
Reporter Root
Modified 2014-04-28T00:00:00

Description

简要描述:

过滤不严。

详细说明:

WooYun: PHPDisk E-Core 漏洞 可注入 可重装 鸡肋可getshell 上个地址。 今天看到发布补丁了 去下载来看看。 在phpdisk_del_process.php中

parse_str(pd_encode($str,'DECODE')); $pp = iconv('utf-8','gbk',$pp); $arr = explode('.',$pp); $file_id = (int)$file_id; $file_name = $db->escape($file_name); $src_file = $arr[0].get_real_ext($arr[1]);

这里官方的修复方式是

$file_id = (int)$file_id; $file_name = $db->escape($file_name);

对一个转整 对一个转义。 这样解决了注入。 但是却没有解决重装。 $pp = iconv('utf-8','gbk',$pp); $arr = explode('.',$pp); 这里切割 第一个用来做文件名 第二个用来做后缀。 这函数get_real_ext对后缀有一些过滤 如果检测到含其中的后缀就重新定义为txt 但是里面没有lock 所以我们可以用来删除lock。

``` $rs = $db->fetch_one_array("select file_real_name,file_extension,file_store_path from {$tpf}files where file_id='$file_id' limit 1"); if($rs){ $num = @$db->result_first("select count(*) from {$tpf}files where file_real_name='{$rs[file_real_name]}' and file_extension='{$rs[file_extension]}' and file_name='{$file_name}' and file_store_path='{$rs[file_store_path]}'"); } if($safe){ if($num==1){

        if(@unlink(PHPDISK_ROOT.$src_file)){

```

由于注入被修复了 不能向之前那样直接通过注入来让$num为1了 这里只需要系统上存在一个文件就好。不管是谁传的。

<img src="https://images.seebug.org/upload/201404/261740490e6a002cf110e2203adcf4a32014c571.jpg" alt="c1.jpg" width="600" onerror="javascript:errimg(this);">

成功删除。

漏洞证明:

<img src="https://images.seebug.org/upload/201404/261742154118bc0ff3566815d22e0bab44373192.jpg" alt="p2.jpg" width="600" onerror="javascript:errimg(this);">

成功重装。