WEB安全

逻辑漏洞之验证码功能缺陷

1.介绍

验证码就是每次访问页面时随机生成的图片,内容一般是数字和字母(更BT点的有中文,现在已经升级到图片,动画等验证码),需要访问者把图中的数字字母填到表单中提交,这样就有效地防止了暴力破解。验证码也用于防止恶意灌水、广告帖等。在登陆的地方访问一个脚本文件,该文件生成含验证码的图片并将值写入到session里,提交的时候验证登陆的脚本就会判断提交的验证码是否与session里的一致。目前常常会出现验证码失效或者被绕过的可能,也成为了当前产生web漏洞的一个问题。

2.测试方法

(1)登陆页面是否存在验证码,不存在说明存在漏洞,完成检测
(2)验证码和用户名、密码是否一次性、同时提交给服务器验证,如果是分开提交、分开验证,则存在漏洞
(3)在服务器端,是否只有在验证码检验通过后才进行用户名和密码的检验,如果不是说明存在漏洞。(检测方法:输入错误的用户名或密码、错误的验证码。观察返回信息,是否只提示验证码错误,也就是说当验证码错误时,禁止再判断用户名和密码。)
(4)验证码是否为图片形式且在一张图片中,不为图片形式或不在一张图片中,说明存在漏洞,完成检测
(5)生成的验证码是否可以通过html源代码查看到,如果可以说明存在漏洞,完成检测
(6)生成验证码的模块是否根据提供的参数生成验证码,如果是说明存在漏洞,完成检测
(7)请求10次观察验证码是否随机生成,如果存在一定的规律(例如5次后出现同一验证码)说明存在漏洞,完成检测
(8)观察验证码图片中背景是否存在无规律的点或线条,如果背景为纯色(例如只有白色)说明存在漏洞,完成检测
(9)验证码在认证一次后是否立即失效

3.加固建议

(1)系统在开发时注意验证识别后销毁session中的验证码。
(2)限制用户提交的验证码不能为空
(3)判断提交的验证码与服务器上存储的是否一致
(4)无论是否一致,都将服务器上存储的验证码清空
逻辑漏洞之并发漏洞

1.介绍

并发漏洞,常属于逻辑业务中的漏洞类型,例如攻击者通过并发http/tcp请求而达到次获奖、多次收获、多次获赠等非正常逻辑所能触发的效果。下面以简化的例子说明在交易的Web应用程序中潜在的并行问题,并涉及联合储蓄帐户中的两个用户(线程)都登录到同一帐户试图转账的情况:
帐户A有100存款,帐户B有100存款。用户1和用户2都希望从帐户A转10分到帐户B.
如果是正确的交易的结果应该是:帐户A 80分,帐户B 120分。
然而由于并发性的问题,可以得到下面的结果:
用户1检查帐户A ( = 1000 分)
用户2检查帐户A ( = 1000 分)
用户2需要从帐户A 拿取10 分( = 900 分) ,并把它放在帐户B ( = 1100分)
用户1需要从帐户A 拿取10分(仍然认为含有1000 个分)( = 900 分) ,并把它放到B( = 1200 分)
结果:帐户A 900 分,帐户B 1200 分。

2.测试方法

(1)发送并发http/tcp请求,查看并发前后CGI 功能是否正常。例如:并发前先统计好数据,并发后再统计数据,检查2次数据是否合理.
3.加固建议
(1)对数据库操作加锁
逻辑漏洞之Slow Http attack、慢速攻击

1.介绍

慢速攻击基于HTTP协议,通过精心的设计和构造,这种特殊的请求包会造成服务器延时,而当服务器负载能力消耗过大即会导致拒绝服务。HTTP协议规定,HTTP Request以\r\n\r\n(0d0a0d0a)结尾表示客户端发送结束,服务端开始处理。那么,如果永远不发送\r\n\r\n就会产生慢速攻击的漏洞,常见的Slowloris就是利用这一点来做DDoS攻击的。攻击者在HTTP请求头中将Connection设置为Keep-Alive,要求Web Server保持TCP连接不要断开,随后缓慢地每隔几分钟发送一个key-value格式的数据到服务端,如a:b\r\n,导致服务端认为HTTP头部没有接收完成而一直等待。如果攻击者使用多线程或者傀儡机来做同样的操作,服务器的Web容器很快就被攻击者占满了TCP连接而不再接受新的请求\r\n\r\n, 每隔几分钟写入一些无意义的数据流, 拖死机器

2.测试方法

(1)通过web扫描工具,可发现该类漏洞,但不一定准确。
加固建议
(1)目前在应用层没有特别好的修复方式,但可以通过部署web防火墙或者入侵防御检测系统来降低该风险。
(2)如果是同一IP,在防火墙策略中把IP封掉。
(3)加长连接超时时间、出错时重新连接、等手法
逻辑漏洞之短信轰炸

1.介绍

短信轰炸攻击时常见的一种攻击,攻击者通过网站页面中所提供的发送短信验证码的功能处,通过对其发送数据包的获取后,进行重放,如果服务器短信平台未做校验的情况时,系统会一直去发送短信,这样就造成了短信轰炸的漏洞。

2.测试方法

(1)手工找到有关网站注册页面,认证页面,是否具有短信发送页面,如果有,则进行下一步。
(2)通过利用burp或者其它抓包截断工具,抓取发送验证码的数据包,并且进行重放攻击,查看手机是否在短时间内连续收到10条以上短信,如果收到大量短信,则说明存在该漏洞。

3.加固建议

(1)合理配置后台短信服务器的功能,对于同一手机号码,发送次数不超过3-5次,并且可对发送的时间间隔做限制。
(2)页面前台代码编写时,加入禁止针对同一手机号进行的次数大于N次的发送,或者在页面中加入验证码功能,并且做时间间隔发送限制。

(3)

本文由来源 AIT实验室,由 SecJack 整理编辑!

关键词:

热评文章

发表评论