前言
图片验证码是为了防止恶意破解密码、刷票、论坛灌溉等,但你有没有想过你的图形验证码会导致服务器崩溃?
他是怎么造成的?请听我婉婉道。
先看各大平台对这个漏洞的态度:
利用过程
这里以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、 height1000会发生什么?
可以发现验证码的形状发生了变化,证明参数会随着我们的变化而变化,当变成1000时,整个页面的加载速度明显减慢。请想,如果它们都变成1万甚至更高,会发生什么? 服务器会一直处理我们要求的图片吗?
这时我们上神器burp来检验一下
当设置为1000时:
当设置为10000时:
处理时间显著增加。让我们看看这个请求的启动CPU反应:
CPU当我们使用它时,有一个明显的峰值python当你继续要求时会发生什么?这是正常情况下的CPU占用率:
当我们启动python程序的时候CPU的占用率:
可见,我们要求的验证码对服务器有很大影响。
代码分析
我们根据请求包跟进 \api\checkcode.php:
在第12行和第17行可以看到,仅仅将验证码的长宽通过get接受,没有其他过滤,在第13行和第18行只限制最小值,没有***限制值,导致验证码漏洞。
总结这个漏洞的利用点:
解决方案
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。