HDWIKI最新版Update注入可修改管理员密码(MYSQL进制技巧)

漏洞概要

缺陷编号:WooYun-2015-098651

漏洞标题:HDWIKI最新版Update注入可修改管理员密码(MYSQL进制技巧)

相关厂商:互动在线(北京)科技有限公司

漏洞作者:小飞

提交时间:2015-02-27 22:45

公开时间:2015-06-02 22:47

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

Tags标签:

漏洞详情

披露状态:

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-editprofilepost

成功修改密码

漏洞证明:

我们延时看看

成功修改密码

修复方案:

set_profile函数里 查询前先addslashes

漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2015-06-0222:47

厂商回复:

最新状态:

暂无

评价

  1. 2010-01-01 00:00 玉林嘎 白帽子 | Rank:757 漏洞数:64)

    is_numeric?

  2. 2010-01-01 00:00 小飞 白帽子 | Rank:38 漏洞数:4)

    @玉林嘎 不是 不过hdwiki is_numeric也有问题

  3. 2010-01-01 00:00 null_z 白帽子 | Rank:879 漏洞数:75)

    技巧不错。感谢。