前言图文验证码是为了防止恶意密码破解、刷票、论坛泛滥等,但是你有没有想过你的图文验证码可能会导致服务器崩溃?那他是怎么造成的呢?请听我说。看看各大平台对这个漏洞的态度:以phpcms为例,利用过程首先需要找到图形验证码。将图片拖到浏览器中获取图形验证码链接:把链接拖出来我们分析一下:http://127.0.0.1/phpcms/api.php?op=checkcode&code_len=4&font_size=20&width=130&height=50&font_color=&background=code_len=4是验证码的字符数font_size=20是验证码的大小width=130是验证码的宽度height=50是验证码的高度如果参数font_size,width和height都设置为1000会怎样?可以发现验证码的形状发生了变化,证明这个参数会随着我们的改变而改变,当改为1000时,整个页面的加载速度会明显变慢。请想一想,如果改成10000甚至更高会怎样?服务器会继续处理我们请求的图片吗?这个时候我们去神器burp里面看看,当设置为1000的时候:当设置为10000的时候:处理使用的时间明显增加了。我们看看发起这个请求时CPU是如何响应的:CPU有一个明显的峰值,那么我们用python不断请求会发生什么情况呢?ThisisnormalcircumstancesCPUusage:我们启动python程序时的CPU占用率:可以看出,我们请求的验证码对服务器的影响比较大。代码分析根据请求包,我们跟进\api\checkcode.php:可以看到第12行和第17行通过get只接受了验证码的长宽,没有做任何其他过滤,在行13而第18行只限制了最小值,没有限制最大值,所以这个验证码是有漏洞的。总结一下该漏洞的利用点:图片长宽可控。后台不限制图片的最大尺寸。解决方法是控制接受参数的最大值,或者处理固定值。使用固定大小的验证码
