重放攻击(Replay Attacks)属于业务逻辑类漏洞范围内,因用户(攻击者)对目标系统请求过程中进行拦截/截获数据包,并修改其中参数或部分信息进行重放而造成的漏洞。
漏洞概述
重放攻击(Replay Attacks)又称重播攻击、回放攻击,是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。
重放攻击可以由发起者,也可以由拦截并重发该数据的敌方进行。攻击者利用网络监听或者其他方式盗取认证凭据,之后再把它重新发给认证服务器。
漏洞原理
由于服务器端未对用户每次提交数据进行及时认证或销毁,导致攻击者截获数据包后再重新发送恶意数据而造成攻击。
漏洞危害
重放攻击本身只是一种行为和方式,并不会直接造成系统的危害,可能在某些系统中,过多和高频次的重复会对系统造成压力。重放攻击的重要点在于重放的是可以造成目的效果的数据包,从而达到修改和多次执行的效果。
重放攻击主要是针对系统没有效验请求的有效性和时效性,对于多次请求执行,系统将多次响应。在重放攻击利用最多的形式中,短信轰炸算是重放攻击最直接的利用表现。
漏洞分类
1.短信轰炸
短线轰炸是重放攻击中最为直接的利用形式,当系统端没有效验请求的时间差或者只在前端做请求限制的时候,可以无限的请求短信来达到短信轰炸的目的。
例如,如下APP请求注册时可以使用手机号和验证码注册登录,但是没有限制短信请求次数和时间间隔。
2.暴力破解
暴力破解属于重放攻击,典型的非只重放而达到的攻击类型,而是利用重放这个动作来达到暴力破解的目的。当系统端未做请求验证和错误次数限制时,就可以根据字典或者设定的字符串来破解特定的参数。
2.1.密码爆破
当用户登陆时,缺少验证码或者验证码复用,并且账号没有错误的次数限制。可通过暴力破解碰撞密码来登录。
2.2.用户名爆破
系统登陆处开发人员对用户名或密码输入错误未进行报错提示规范处理,导致输入错误账户提示用户名不存在等字符,可能导致攻击者进行用户名遍历并收集成字典后再根据收集到的用户名进行口令爆破行为。
2.3.验证码爆破
短信验证码常被用于网站用户注册、安全登录以及忘记密码、修改绑定手机号码等应用场景,特别是一些涉及到用户个人敏感行为时候,为了确认操作是用户本人执行的通常会使用短信验证码进行二次认证。那么很多网站的短信验证码接口都会或多或少的存在一些逻辑漏洞。
2.4.参数爆破
此情况大都在尝试越权的时候,还有尝试修改某些不可知但是可预测的参数。
3.支付重放
支付到最后一个请求包时,系统收到请求就会确定已支付下单。这时候在系统没有做出准确效验的时候就会根据是否支付成功的验证字段来确定下单,多次重放的时候,系统会根据暂无失效且正常的请求下单。来达到使用同一请求多次获取成功的订单。
4.密码修改
可以参考CSRF漏洞。
如果在最后确认修改的时候抓包多次重放,可以达到免验证来达到修改密码的作用。也就是这里并没有强制效验手机号和验证码。也就存在了任意修改密码的可能,当然要是效验了手机号和验证码的对应关系,也许就不可以了。
当只是简单的重置的时候,先不谈越权问题,这个包都可能造成多次修改多次重置密码。而并不用验证。
1 | POST /userpwd?p=2 HTTP/1.1 |
5.条件竞争
条件竞争是后台对共享数据读写的时候,多线程没有对共享数据执行线程锁,导致在多个线程获取到的值并不是当前线程操作的实时值,典型的例子是,一份钱买多份。
这类漏洞一般测试方式直接高并发进行检测即可;JMeter
漏洞修复
- 添加图片验证码,为了应对偏爆破类的重放攻击,添加验证字段是最简单有效的手段。当然你要保证验证是在一次使用后及时失效。
- 限制请求次数,有些地方并不适用于添加验证码,或者不能添加验证码。这时候针对同一账户的错误次数限制就显得很有必要。例如,当错误次数连续达到五次的时候,暂时十分钟内不能登陆。
- 效验验证码和用户身份,某些重放攻击是利用了手机号和验证码之间的不对应性,特别是在修改密码等处,这时候需要把验证码和请求的用户手机号做联系,当重放或者越权的时候根据验证码次数和对应关系来判断是否允许修改。
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏
扫描二维码,分享此文章