0x00 发现漏洞
在使用svnchina的某个功能时,发现了某处用户体验特别好的地方,如下:
这是在创建新项目邀请开发人员的地方提供的一个功能,输入3个字符后即会返回所有包含这三个字符的所有svnchina的用户,在普通人眼里没觉得什么,可能还会觉得体验很不错,但是在白帽子的眼里可不这样认为,很大的安全隐患,本人首先想到的是可以利用这一点跑网站的用户。抓包得到接口地址为:
GET请求,传递参数为"zha"即可返回包含字符串"zha"的所有用户,如下(返回结果颇多):
0x01 挖掘用户
1.生成字典:
首先需要生成参数字典,期初的想法是用aaa,aab,aac,aad,aae,.....的字典去抓取用户,字典生成后又被自己否定,字典太大,请求次数太多,数据重复量会比较大,用户质量也不高。故想到一妙计,用百家姓姓氏去抓取网站的用户,可行之处是svnchina一般为团队协作开发,故账号一般为用户真实姓名,如zhangsan,lisi,wangwu这种的,这样的用户账号质量比较高。在生成百家姓字典时着实费了一番功夫,网上没有现成的,基本上都是中文+拼音音标,在此写第一个php脚本处理百家姓字典,把音标都去掉,只留拼音,如zhang,wang,li,zhao等,每行一个,共生成400多个百家姓字典。
2.执行php脚本抓取svn用户,核心代码示例:
返回结果经过处理后写入文本,每行一个。程序执行结束后返回结果为13多万条,去重后获得3万多个真实用户,去重用工具或脚本都可以。
0x02 猜解用户密码
svnchina用户登录表单没有加验证码,并且没有输入密码错误次数限制,导致可以无限跑字典破解用户密码,这里使用弱口令进行破解,用工具抓包:
1.用用户名和密码一样的字典组合进行跑包,如zhangsan:zhangsan,返回结果为true即为密码正确,利用这种组合获得用户账号密码2375条记录。
2.用弱口令123456和用户名组合进行跑包,如zhangsan:123456,首先对上面用户列表去重,然后进行跑包,减少请求次数,也节省时间,密码为123456的返回结果有1379条,其它的弱口令数量比较少,不计在内,在3万多用户中用如此之多的用户使用了这么简单的密码,也真实佩服这些用户的安全意识了,跑出这么多用户后心哇凉哇凉的,有点同情这些哥们……
0x03 漏洞利用升级
ps:猜解这些用户的账号密码还有下面所提到的攻击手法只是为了演示弱口令的危害性,用数据说话,请不要歪解……
拿到用户的账号密码后可以登录svnchina获取用户更为真实的信息,如真实姓名、邮箱、创建项目、加入项目、项目名称、项目成员、项目路径等等一些列信息,这些用php模拟用户登录都可以抓取到,附部分抓取脚本,正则太烂了,稀里糊涂写出来的,功能都可以实现:
附部分抓取结果:
0x04 尾声
上述事件最大的责任在于网站开发者,其二在于用户的安全意识。网站开发者站在用户的角度考虑是正确的,看似给用户提供了一个体验比较好的功能,但是在白帽子或者黑客的眼里这都是特别危险的。