如何在我自己的本地 PHP 服务器上造成拒绝服务?

Posted

技术标签:

【中文标题】如何在我自己的本地 PHP 服务器上造成拒绝服务?【英文标题】:How to cause a denial of service on my own local PHP server? 【发布时间】:2019-05-07 06:51:49 【问题描述】:

前言:我是一名即将毕业的计算机科学本科生,但我在 Web 开发尤其是 php 方面几乎没有经验。对不熟悉表示歉意。

背景:我希望在我自己的本地 PHP 服务器上创建一个简单的 DoS 漏洞,该服务器在 Linux (18.04) 64 位虚拟机上运行 XAMPP。为了确保我不只是通过本地活动提高虚拟机上的 CPU 使用率,我正在运行另一个虚拟机,在该虚拟机中我使用 Python 脚本和“请求”库在循环中请求易受攻击的页面 10,000 次。截至目前,易受攻击的页面 (dos.php) 运行一个循环,它将一个随机数附加到一个列表中,然后回显一个通用文本行的哈希值,除了据称是 CPU 密集型之外完全不相关。

问题:我了解到我可以将内存和 CPU 使用情况输出到浏览器(通过https://devdojo.com/tutorials/how-to-get-memory-and-cpu-usage-in-php)。问题是我无法将服务器上的 CPU 使用率提高到 4% 以上……内存大约是 30%。但是,我知道我在做一些正确的事情,因为我看到从 0-1% 增加到 4%,但除此之外没有任何变化。

最终目标是演示一个概念验证,我证明如果指向 PHP 文档,模糊器 (SlowFuzz) 可以找到此漏洞。一旦我有一个 DoS 漏洞,我计划编写一个非常简单且故意破坏的函数。类似于用户定义上限的循环。

这是dos.php上的PHP图片: PHP Code

提前感谢您的帮助!希望这不是一个太愚蠢的问题。

【问题讨论】:

【参考方案1】:

通过使用读取速度慢的客户端填充它的请求队列,Apache 可以很容易地被 DoS 攻击。 Apache 配置了最大同时连接的客户端,并且默认情况下不会对客户端强制执行最低读取速度,因此以 1 字节/秒的速度读取响应将使连接保持打开很长时间并减少 DoS 工具所需的重新连接数量同时也减少了普通客户通过的机会。

现代 Apache 设置会丢弃读取速度过慢的客户端或拒绝来自同一地址的过多连接,以防止此类攻击。我不确定默认的 XAMPP 安装是否包含这个。

【讨论】:

感谢您的意见。我真的很感激帮助。但是,我不确定这是否是一个足够的解决方案,因为该项目的本质是 CPU 耗尽拒绝服务。所以我不知道这是否真的会作用于 CPU。 CPU 绑定的 DoS 攻击变得越来越困难,因为硬件和软件随着时间的推移变得越来越高效。您将很难让它与您的 O(n) PHP 脚本配合使用。如果您并行发送垃圾请求(如果您还没有),也许您会遇到更高的拥塞。 这正是我的想法。但这种攻击的本质是只需要一个数据包。这就是为什么诸如上限之类的参数将是预期目标的类型。但我终其一生都无法找到一种增加复杂性的方法,而这种方法实际上会影响使用。也许是具有大量输入的哈希函数?还是一系列嵌套循环?对于哪个功能对 CPU 的影响最大,我有点困惑。如果 PHP 中有分叉,它会是一个分叉炸弹吗?任何建议表示赞赏。 PHP 的 posix_fork() 和 pthread 在从 Apache 调用时存在令人难以置信的错误,您必须先启动 PHP-CLI 脚本。

以上是关于如何在我自己的本地 PHP 服务器上造成拒绝服务?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP 从本地 wamp 服务器发送电子邮件?

我的 css 在我的本地 xampp 服务器上工作,而不是在我的网站上

如何让这个 CI php 应用程序在我的本地机器上运行

静态方法在 PHP 中的 Web 服务器上不起作用

php定时任务,只执行一次,不要死循环

Drupal:PDOException:SQLSTATE [HY000] [2002]连接在lock_may_be_available()中被拒绝