最近终于开始做渗透的项目了,也顺便开始学习一些基础的技巧。这周看到师傅们交了很多短信轰炸的漏洞,就顺便看了一下思路。另外,在爆破密码上屡战屡败,也顺便总结了一下这块的内容。
修改密码
首先,乌云上有人做过一张关于修改密码的脑图,分成了如下几个部分
(1)用户凭证暴力破解。输入要修改密码的手机号,抓包,对验证码进行爆破。如果系统中增加了key来验证,key可能的情况是md5(手机号,16/32)后的前多少位,也可以进行爆破
GET /sms.php?k={{substr(md5('13800138000$num$'),0,10)}}F HTTP/1.1
有些可能对某手机号的请求次数进行了限制,可能在手机号后面添加不为数字的字符可以绕过限制
(2)返回凭证。url返回验证码及token、密码找回凭证在页面中、返回短信验证码
走秀网之前的漏洞是当输入手机号点击获取验证码进行抓包时,验证码本身存在与请求中,直接将验证码输入即可。天天网的案例中,找回密码有三步:输入账户名->邮箱验证身份->重置密码。第一步抓包时会返回一个加密字符串,而第三页的页面url的末尾恰好是该加密字符串。也就是说通过得到第一个的字符串可以直接绕过邮箱身份验证那一步跳转到重置密码页面。
搜狐的找回密码功能中,需要输入密码提示问题的答案才能更改密码。如果点击“网上申诉”功能按钮,其html代码中隐藏了密码提示的答案。
新浪二手房站点中,输入账号时进行抓包就可以看到返回数据中包含了mobile_phone字段,对该字段值进行解密就可以得到手机号,验证码同理。
数据包中返回了短信验证码
(3)时间token。时间戳的md5、用户名、服务器时间。
用户找回密码时,产生一个精确的时间戳,与帐号绑定,记录在某个密码重置库内,但假如这个时间戳是新生成得,在一定时间内进行暴力猜解,可以破解。
当两个账号在相同时间段进行找回密码操作时,发到邮箱的找回密码链接中的验证token是比较接近的,如
http://www.XX.com/reSetPwdCheck.action?email=aa@qq.com&startClickTime=20150106105628
和
http://www.XX.com/reSetPwdCheck.action?email=bb@qq.com&startClickTime=20150106105624
所以可以通过构造类似的链接修改别人的密码。
(4)用户凭证有效性。短信验证码、邮箱token、重置密码token
OPPO手机重置任意账户密码用的思路是,首先用自己的手机号去找回密码得到一个验证码,但不要用此验证码去重置,而是以一个别人的账号选择“手机号找回密码”,在找回时输入自己的手机号和收到的验证码,就可以把别人账号的密码重置了。说白了就是没有校验找回时输入的手机号和账号是否有绑定关系。
(5)重新绑定。手机绑定、邮箱绑定
网易邮箱的案例中,先注册一个邮箱账号,注册成功的页面url上,有个uid,将uid换成别人的账号XXX@163.com,然后绑定手机输入自己的手机,这样就为该账号绑了自己的手机,可以随意更改密码了。
(6)服务器验证。最终提交步骤、服务器验证可控内容、服务器验证逻辑为空
uid用于后面的更改
在修改密码时进行抓包,会有uid字段,而该字段对应了一开始重置密码界面的用户名信息。
(7)用户身份验证。账号与手机好吗绑定、账号与邮箱账号绑定
中国电信的案例中,在输入手机号,点击找回密码后,页面上的hidder form中写着手机号,如果把该值换为别人的手机,即可以改别人的密码。
隐藏的手机号
(8)找回步骤。跳过验证步骤、找回方式、直接到设置新密码页面
(9)本地验证。在本地验证服务器的返回信息,确定是否执行重置密码,但其返回信息可控;发送短信等验证信息在本地进行,可以通过修改返回包进行控制
截断数据包修改返回码
【划重点:修改返回包!】
(10)注入。在找回密码处存在注入
(11)token生成可控。
(12)注册覆盖。注册重复的用户名依然可以提交表单的情况
(13)session覆盖。
短信轰炸
短信轰炸常见的应用场景多用于身份验证,比如注册、登陆、找回密码、反馈等等。
和修改手机号的思路有些类似,一般如果轰炸有次数限制,可以在手机号后面加空格来绕过。对于其他的参数也可以进行修改尝试。比如还有一些是验证ip来控制次数,那么可以对ip进行更改。
有的验证不是通过验证手机号来判断次数,而是验证cookie,
大小写绕过也有师傅提出,例如在邮箱轰炸时,邮箱本来是XXX@qq.com,输入时改成XXX@Qq.com
和修改手机号思路类似的是,可以通过修改response来尝试绕过。比如成功时应该是success,失败是error,那么将error改成success。
网友评论