验证码大小可控导致的拒绝服务攻击漏洞

验证码大小可控导致的拒绝服务攻击漏洞 黑家小无常 诚殷网络黑无常是也,专业反诈,信安培训!

前言


这个漏洞是我在挖掘某工信部下面的某个众测平台,发现他们的验证码参数大小可控,在那一晚突然而来的灵感,目前大多数CMS的漏洞和SRC,都已经刷完了才公开的,所以不会对市面上大型企业造成影响,针对大型企业比较好的服务器,还是需要上千个才能解决。


1. 这个漏洞不能帮你获取到敏感信息

2.这个漏洞不能帮你获取到shell

3.这个漏洞没有啥利用条件


利用过程


今天这里以PHPcms为例子,讲解一下。

首先我们来到PHPCMS的

第一步


会员登录页面:http://192.168.1.101:81/index.ph ... /index.php?m=member

然后验证码处单击右键


验证码大小可控导致的拒绝服务攻击漏洞



获取该链接。或者将网址替换到下面链接地址。

http://192.168.1.101:81/api.php?op=checkcode&code_len=5&font_size=14&width=120&height=26&font_color=&background=

第二步


在得到了上面的链接地址之后呢 我们进行如下修改


http://192.168.1.101:81/api.php?op=checkcode&code_len=5&font_size=14&width=120&height=26&font_color=&background=


将其中的参数:

font_size

width

height

改为:

font_size:1000

width:1000

height:1000

然后得到链接地址


http://192.168.1.101:81/api.php?op=checkcode&code_len=5&font_size=1000&width=1000&height=1000&font_color=&background=



第三步:返回值大小判断是否存在


Burp开起来,访问上面的链接


http://192.168.1.101:81/api.php?op=checkcode&code_len=5&font_size=1000&width=1000&height=1000&font_color=&background=


抓取数据包


Ctrl+R 将数据包放到重放功能,以方便做测试



验证码大小可控导致的拒绝服务攻击漏洞




当我们点击了Go之后看红色圈中处会有一个数字。

8112 bytes

这个可以代表我们当前从服务端返回到客户端的数据包大小,这样理解即可。

然后我们在请求包中修改一下参数



验证码大小可控导致的拒绝服务攻击漏洞




看图改数据


接着继续。我们看一下返回的数据包大小是否与 1000 有差距



验证码大小可控导致的拒绝服务攻击漏洞




可以看到我们的返回包的数据大小已经变为了:

23759 bytes

与上次的结果相差了万多。


那么证明其存在漏洞


在这里给各位说一下注意的要点:

1. 其中返回的数值 与我这里不一定相等,也就是你测试其他网站的数据返回值与我的估计不是一样的,我们主要测试 1000 与 10000 返回的数据包大小是否有相差值,如果你的相差值只有几百,那么不代表就存在。如果存在的话,他们的相差值是非常巨大的。


第四步:怎么造成DDOS攻击?


通过上面的测试我们知道了漏洞存在,如果我们发送一个10000的数据包到服务器,服务器需要 10s 时间来处理,那么我们如果发送 10 个 10000的数据包呢?

10x10 = 100s

也就是服务器需要花费100s时间去处理,当我们发送 100 个这样的数据包(当然你千万不要用100个数据包扔过去,一般来说经过测试结果 20-50个就能导致网站瘫痪。)


第五步:看一下服务器CPU有何变化?


服务器当前Apache进程Httpd的进程CPU情况如下



验证码大小可控导致的拒绝服务攻击漏洞




为 0 状态,现在我们开始发送数据,先发一个 10000 的数据包我们看看。



验证码大小可控导致的拒绝服务攻击漏洞




可以看到 CPU 损耗 50 % ,我当前配置为 2核3G


如果 发送 10个 10000的数据包呢?


最后发送 10 个,发现还是在 50%左右,于是我加了一个 0 。发送了大概 5 , 6条 100000 的数据包,达到了预期效果



验证码大小可控导致的拒绝服务攻击漏洞




可以看到服务器 CPU 已经 100%了。成功达到了攻击的目的性。


结后语


如果一个 0 不能解决,那么就再加一个 0 ,直到问题解决,如果一个包没效果,那么就来两个 ,或者 20个,200个。

上一篇:Numeral.js v. 2.0.6


下一篇:web应用测试MyOffice功能测试