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

前言

图片验证码是为了防止恶意破解密码、刷票、论坛灌水等才出现的,但是你有没有想过,你的图形验证码竟然可能导致服务器的崩溃?

那他是如何导致的呢?请听我婉婉道来。

先看看各大平台对待此漏洞的态度:

TIM 截图 20180818092202.pngTIM 截图 20180818092213.pngTIM 截图 20180818092417.pngTIM 截图 20180818092548.png

利用过程

这里以 phpcms 为例,首先需要找一个图形验证码

TIM 截图 20180818093124.png将图片拖动到浏览器中将得到该图形验证码的链接:

TIM 截图 20180818093459.png将链接拖出来咱们分析一下:

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 将会出现什么情况呢?

TIM 截图 20180818094003.png

可以发现验证码的形状已经改变,证明这个参数是会随着我们的更改而更改的,而且在改成 1000 时,整个页面的加载速度明显变慢,大家请想,如果都改为 10000 甚至更高会发生什么事情? 服务器会不会一直在处理我们所请求的图片?

此时我们上神器burp来检验一下

当设置为 1000 时:

TIM 截图 20180818094642.png

当设置为 10000 时:

TIM 截图 20180818094814.png处理所用的时间明显增长,我们再看看在发起这个请求时 CPU 有什么反应:

Clipboard Image.pngCPU 有一个明显的峰值,那当我们使用 python 去不断进行请求的时候又会发生什么?这个是正常情况下的 CPU 占用率:

TIM 截图 20180818100719.png

当我们启动 python 程序的时候 CPU 的占用率:

TIM 截图 20180818102204.png

可见,我们请求的验证码对服务器产生了重大的影响。

代码分析

根据请求包我们跟进到 \api\checkcode.php:

TIM 截图 20180818101750.png

在第 12 行和第 17 行可以看到,仅仅将验证码的长宽通过 get 方式接受,没有任何其他的过滤,在第 13 行和第 18 行也仅仅只对最小值进行了限制,并没有对最大值进行限制,所以就造成了这个验证码的漏洞。

总结一下这个漏洞的利用点:

1.图片长宽等可控

2.后端没有对图片的最大大小进行限制

解决方案

1.对接受的参数进行最大值的控制,或者固定值处理

2.使用固定大小的验证码


Summer Blog , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:你知道吗?图形验证码可能导致服务器崩溃
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址