首页 未命名正文

你知道吗?图形验证码可能导致服务器崩溃

前言

图片验证码是为了防止恶意破解密码、刷票、论坛灌溉等,但你有没有想过你的图形验证码会导致服务器崩溃?

他是怎么造成的?请听我婉婉道。

先看各大平台对这个漏洞的态度:

利用过程

这里以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行只限制最小值,没有***限制值,导致验证码漏洞。

总结这个漏洞的利用点:

               
  • 图片长宽等可控
  •                
  • 后端没有图片***限制大小
  • 解决方案

                   
  • 接受参数***值控制,或固定值处理
  •                
  • 使用固定大小的验证码
  •    
    版权声明

    本文仅代表作者观点,不代表本站立场。
    本文系作者授权发表,未经许可,不得转载。