当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2016-0183430

漏洞标题:PageAdmin CMS最新版二次注入

相关厂商:pageadmin.net

漏洞作者: JutaZ

提交时间:2016-03-14 10:44

修复时间:2016-06-12 14:30

公开时间:2016-06-12 14:30

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2016-03-14: 细节已通知厂商并且等待厂商处理中
2016-03-14: 厂商已经确认,细节仅向厂商公开
2016-03-17: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2016-05-08: 细节向核心白帽子及相关领域专家公开
2016-05-18: 细节向普通白帽子公开
2016-05-28: 细节向实习白帽子公开
2016-06-12: 细节向公众公开

简要描述:

发现PageAdmin官网更新了版本,就去复查了一下,然后发现厂商的修复手段等于没修复!
http://www.pageadmin.net/soft/ 选择本地下载最新版,PageAdmin V3.0.20151204(最后更新时间:2016-03-11)
Demo站换了后台地址,这次仅在本地复现。

详细说明:

#0 之前的漏洞是这个 http://**.**.**.**/bugs/wooyun-2016-0177673
#1 依旧是/e/master/build_static.aspx 这个页面
原来的代码是这样的:

if(IsNum(Ids)){
sql="select id,site_dir,static_dir,static_file,lanmu_id,sublanmu_id from "+Table+" where html=2 and id="+Ids;
}
else
{
sql="select id,site_dir,static_dir,static_file,lanmu_id,sublanmu_id from "+Table+" where html=2 and id in("+Ids+")";
}


而在最新的版本中被修复为了:

if(IsNum(Ids))
{
sql="select id,site_dir,static_dir,static_file,lanmu_id,sublanmu_id from "+Sql_Format(Table)+" where html=2 and id="+Ids;
}
else
{
sql="select id,site_dir,static_dir,static_file,lanmu_id,sublanmu_id from "+Sql_Format(Table)+" where html=2 and id in("+Ids+")";
}


#2 审计Sql_Format()函数

private string Sql_Format(string str)
{
if(str=="" || str==null)
{
return "";
}
str=str.Replace("'","''");
str=str.Replace("\"","\"");
return str;
}


发现仅仅将'替换为了'' 而"还是替换成立"
然而我上个漏洞中的POC中的注入代码中一个单引号都没有,而且页面的越权也没有被修复。本地复现成功

poc.png

漏洞证明:

#0 之前的漏洞是这个 http://**.**.**.**/bugs/wooyun-2016-0177673
#1 依旧是/e/master/build_static.aspx 这个页面
原来的代码是这样的:

if(IsNum(Ids)){
sql="select id,site_dir,static_dir,static_file,lanmu_id,sublanmu_id from "+Table+" where html=2 and id="+Ids;
}
else
{
sql="select id,site_dir,static_dir,static_file,lanmu_id,sublanmu_id from "+Table+" where html=2 and id in("+Ids+")";
}


而在最新的版本中被修复为了:

if(IsNum(Ids))
{
sql="select id,site_dir,static_dir,static_file,lanmu_id,sublanmu_id from "+Sql_Format(Table)+" where html=2 and id="+Ids;
}
else
{
sql="select id,site_dir,static_dir,static_file,lanmu_id,sublanmu_id from "+Sql_Format(Table)+" where html=2 and id in("+Ids+")";
}


#2 审计Sql_Format()函数

private string Sql_Format(string str)
{
if(str=="" || str==null)
{
return "";
}
str=str.Replace("'","''");
str=str.Replace("\"","\"");
return str;
}


发现仅仅将'替换为了'' 而"还是替换成立"
然而我上个漏洞中的POC中的注入代码中一个单引号都没有,而且页面的越权也没有被修复。本地复现成功

poc.png

修复方案:

#1 重写Sql_Format()函数
#2 加上权限控制,用ISSTR()判定Table参数是否合法

版权声明:转载请注明来源 JutaZ@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2016-03-14 14:23

厂商回复:

技术人员的失职,已经增加了权限验证,谢谢!

最新状态:

暂无