漏洞概要 关注数(47) 关注此漏洞
缺陷编号: WooYun-2015-98651
漏洞标题: HDWIKI最新版Update注入可修改管理员密码(MYSQL进制技巧)
相关厂商: 互动在线(北京)科技有限公司
漏洞作者: 小飞
提交时间: 2015-02-27 22:45
公开时间: 2015-06-02 22:47
漏洞类型: SQL注射漏洞
危害等级: 高
自评Rank: 20
漏洞状态: 漏洞已经通知厂商但是厂商忽略漏洞
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 help@wooyun.org
Tags标签: php源码审核 sql注射漏洞利用技巧
漏洞详情
披露状态:
2015-02-27: 细节已通知厂商并且等待厂商处理中
2015-03-04: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放(绿盟科技、唐朝安全巡航、无声信息)
2015-04-28: 细节向核心白帽子及相关领域专家公开
2015-05-08: 细节向普通白帽子公开
2015-05-18: 细节向实习白帽子公开
2015-06-02: 细节向公众公开
简要描述:
最新版HDWIKI 5.1 GBK
无视GPC
上首页吧!
详细说明:
问题出在\hdwiki\control\user.php下
最新版HDWIKI 5.1 GBK版本
HDWIKI全局过滤,但是面对宽字节注入,就容易出问题了
关键代码是
HDWIKI在大部分编码转换之后的地方都会addslashes
这里我们跟进这个函数set_profile()
进入mysql前并没有进行addslashes
而且我们有$location,$signature
思路是让location引入\注释后面的单引号 由signature来注入
由于没有开display_error ,我们延时看看
我们就能盲注查询管理员密码
但是有时候密码是破不出来的,怎么办呢
我们其实可以替换管理员密码
先说说HDWKI的表构造
由于管理员和普通的账号都存储在wiki_user下,所以这里由于是update的是这个表
但是问题来了
我们引入password的时候 格式一般都是
但是这里是无法引入单引号的(会被addslashes),而不打单引号又会被当成表名,不被识别为value。
这里用要一个小技巧
MYSQL对十六进制是能够自动识别 转换的。
比如
这样我们就能绕过单引号而update管理员密码了
我们先本地用脚本转换ascii为hex
然后向http://localhost/hdwiki/index.php?user-editprofile
post
成功修改密码
漏洞证明:
修复方案:
set_profile函数里 查询前先addslashes
版权声明:转载请注明来源 小飞@乌云
漏洞回应
厂商回应:
危害等级:无影响厂商忽略
忽略时间:2015-06-02 22:47
厂商回复:
最新状态:
暂无
漏洞评价:
对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值