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

[经验分享] 【技术分享】PHPStress:PHP拒绝服务***(含PoC)

[复制链接]

尚未签到

发表于 2018-12-13 14:24:14 | 显示全部楼层 |阅读模式
DSC0000.png

  前言
  导致这种拒绝服务***的根本原因,在于大多数现代Web服务器的配置漏洞。简而言之,简单而稳定的PHP调用将使Web服务器疲于打开PHP进程,而无力顾及其他。对于个人而言,通过耗尽Web服务器所有可用资源来实现拒绝服务***,是一种非常简单有效的方法。
  使用标准电缆/DSL连接,这种***就可以通过标准的HTTP请求来耗尽Linux Web服务器的CPU和RAM资源。同时,这种***还会影响使用PHP-CGI或PHP-FPM(包括WordPress网站)处理动态PHP内容的Apache或NGINX Web服务器。此外,这些用于***Web服务器配置漏洞的请求,在***结束后将继续占用服务器的资源。
  要想发动这种***,请设置目标URL和时间延迟参数,剩下的事情可以交由脚本来完成。
  ***的对象
  需要注意的是,这种***与Slowloris有同样的前提要求。主要区别在于,Slowloris专注于消耗HTTP(apache)连接,而这种***主要侧重于吞噬PHP-CGI或PHP-FPM连接(在Apache或NGINX中)。
DSC0001.png

  为什么PHPStress***能够得逞
  在大多数环境中,动态(PHP)内容的处理方法有两种:使用PHP-FPM或PHP FastCGI(mod_fcgid)。虽然Plesk、Cpanel、ISPConfig等共享托管上的现代控制面板已经开始使用PHP-FPM作为动态内容处理的标准,但大多数(默认情况下)情况下还是通过FastCGI来处理PHP内容。
  FastCGI/Mod_fcgid
  FastCGI应用程序在Web服务器(Apache或其他智能)之外执行,并使用套接字等待来自Web服务器的请求。如果FastCGI/ PHP-CGI经过了正确的设置,它将忽略请求,而不是继续分配内存。在此期间,客户会超时。当流量高峰过去后,一切会恢复正常。
  需要注意的是:当PHP-CGI耗尽可用进程时,Apache将启动并开始生成其他进程以尝试满足需求。由于这个过程使用了占用大量内存的httpd进程,所以很快就会耗尽服务器(其中包括每个进程中嵌入的完整PHP解释器)的内存资源。生成的Apache进程的最大数量,是由ServerLimit或MaxClients设置中设置的数字(通常为256或512)而定的。启动256个Apache进程的话,将花费Web服务器的很长时间。
  PHP-FPM(FastCGI进程管理)
  FPM(FastCGI进程管理)是PHP FastCGI的一种替代实现,它提供了一些额外的功能来支持高负载的站点。根据我自己的经验,PHP-FPM在处理PHP方面要快得多。
  ***过程
  首先,从GitHub下载PHPStress或通过下列的命令克隆repo:
1git clone https://github.com/nightlionsecurity/phpstress phpstress  要进行***,请设置目标URL和时间延迟参数,然后让脚本执行其余操作。同时,脚本需要严格按照如下所示的参数来使用。
1php phpstress.php www.targeturl.com -d 0 -r 0  ***结果
  在这两种情况下,FPM和/或CGI进程都被请求全部占用;服务器的内存被填满,一切都会停摆。对于运行PHP-FCGI的Apache或NGINX服务器来说,会有一些有趣的事情要注意。
  PHP-FPM
  在PHP-FPM服务器上,生成的最大进程数由配置文件中的相关内容决定。如果你的pm.max_children = 25,那么最多产生的进程数将是25。
  根据超时的设置情况,进程在***后的一段时间内仍保持打开状态(通常最少为两分钟)。
DSC0002.png

  PHP-FCGI
  FastCGI的结果更加有趣。随着FastCGI缓冲区被填满,Apache会将这些请求排队,等待处理。Apache不再继续生成FastCGI进程,而是根据MaxClients指令启动相匹配的进程。结果是生成数百个Apache进程,致使服务器彻底超载,如下所示
DSC0003.png

  缓解措施
  为了防御这种***,您要调整的NGINX和FastCGI的一些标准配置。下面的设置是默认值,但是它们不是最佳的,应该根据自己的情况进行调整。我通常将超时设置为1-2秒。
  FCGID.CONF
  /etc/httpd/conf.d/fcgid.conf
123456# Number of seconds of idle time before a process is terminatedFcgidIOTimeout 1000 # maximum period of time the module will wait while trying to read from or write to a FastCGI applicationFcgidMaxProcessesPerClass 100 #maximum number of processes per class (user)FcgidIdleTimeout 240 # application processes which have not handled a request for this period of time will be terminatedFcgidProcessLifeTime 3600 # maximum lifetime of a single process (seconds)FcgidMaxProcesses 1000 #maximum number of FastCGI application processes which can be active at one time.  Apache – Httpd.Conf
  /etc/httpd/conf/httpd.conf
123456789Timeout 60KeepAliveTimeout 15KeepAlive OffMaxKeepAliveRequests 100StartServers   8MinSpareServers    5MaxSpareServers   20ServerLimit 256MaxClients 256  Php-Fpm.Conf
  /etc/php-fpm.conf
12345; Time limit for child processes to wait for a reaction on signals from master.; Available units: s(econds), m(inutes), h(ours), or d(ays); Default Unit: seconds; Default Value: 0process_control_timeout = 10s  /etc/php-fpm.d/domain.conf
1234; By default use ondemand spawning (this requires php-fpm >= 5.3.9)pm = ondemandpm.max_children = 50pm.process_idle_timeout = 60s  PoC下载地址:https://github.com/nightlionsecurity/phpstress
  本文由 安全客 翻译,作者:shan66
  原文链接:https://n0where.net/phpstress/


运维网声明 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-651024-1-1.html 上篇帖子: PHP比md5更安全的加密方式 下篇帖子: Linux PHP安装遇见的问题及解决方案
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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