设为首页 收藏本站
查看: 1483|回复: 0

[经验分享] PHP拒绝服务***

[复制链接]

尚未签到

发表于 2018-12-17 12:41:16 | 显示全部楼层 |阅读模式
PHP拒绝服务***
  所有主流语言中都存在的重大的复杂***漏洞。PHP在处理表单时有漏洞,但现在每个Web程序都在使用JSON API,仍然很容易受到复杂的***。
  它是怎么起作用的
  在通常的情况下,哈希表被优化的速度非常快。但如果有人将互相冲突的键值插入,性能就会突然变得很糟糕。
DSC0000.jpg

  如果哈希表使用开放的地址来实现,一个冲突的键值会针对链接列表中的所有元素做出检查。如果你插入了n个元素,为了公平性你就得检查 1+2+3+..+(n-1) 个元素(复杂度为O(n2))。
DSC0001.jpg

  如果你想早知道更多关于这个在PHP里是怎么起作用的,你还可以读读这篇信息量比较丰富的文章。
  使用POST数据作为***
  为了方便访问,PHP把所有的POST字段都存放在$POST图里。
  下面的POST请求是针对上卖弄的PHP页面的,会导致5个键值冲。如果你发送了2^16个键值,这时的计算量就相当于要让i7处理器忙上30秒钟。
curl--data"4vq=key1&4wP2=key2&5Uq=key3&5VP=key4&64q=key5"http://localhost:8080/index.php
  尽管在一些语言(比如Python)里哈希函数已经为了防止此类的***而做出了相应的修改,PHP通过在php.ini配置文件里简单地引入了一个max_input_vars指令解决了这个漏洞问题。
  默认情况下,该指令被设置为1000,这意味着你在一个请求中不能发送超过1000个表单字段。1000个冲突不是真正的问题,因为它与正常情况下请求相比速度只慢了1/3.
  使用JSON API作为***
  由于Web已经进化到一个到处都是API的大网,我们可能已经忘记,在用户使用输入和数组的地方PHP仍然存在着哈希冲入漏洞***。
  Web API通常支持JSON,因此使用标准PHP库的json_decode方法。这将默认解析所有在JSON文件里的键值到PHP图中,引起许多冲突。
  下面是一个很简单的返回发送者姓名和邮件地址的API:
$params->{'name'}, 'email' => $params->{'email'});
  
echo json_encode($response);
  
?>
  如果我们把一个修改后的JSON请求发送给这个API,结果和POST参数会有一样的影响。
curl -v -X POST \  
-H "Accept: application/json" \
  
-H "Content-type: application/json" \
  
-d '{"4vq":"key1", "4wP2":"key2", "5Uq":"key3", "5VP":"key4", "64q":"key5" }' \
  
http://example.com/api.php
  测试
  我将json_decode和导致一个可怕的二次函数的时间画了出来。在 2^16个键之后异常值出现了,原因是一个不同的哈希掩码,在当前阵列在数组增长超过 2^16个元素时,我们的冲突预计会引起16位哈希掩码的冲突。
DSC0002.jpg

  如果把上面的JSON API样例托管在一个实际的服务器上,并且做出一些***,我们也会得到同样的结果。函数会达到平衡,因为Apache服务器处理每条请求的时间被限制在30秒以内。
DSC0003.jpg

  我在AWS上跑了一个测试,其中有一个***者(蓝色)和一个受害者(黄色),并且为CPU占用率截了图。你能很容易就看明白,尽管***者除了发送POST请求外其他几乎什么事情都没有做,受害者为网页页面提供提供服务的性能还是会受到影响。
DSC0004.jpg

  其他潜在的***载体
  有趣的是,解析XML并没有使用内部的哈希图。
DSC0005.jpg

  我确定还有很多用户数据和哈希表一起被调用的其他种情况



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-652444-1-1.html 上篇帖子: PHP代码优化的40条建议 下篇帖子: 使用php结合rsync、inotify实现的实时备份脚本!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表