我正在尝试构建一个可用于任意代码执行的函数列表.目的不是列出应列入黑名单或以其他方式禁止的功能.相反,我希望在搜索受感染的后台服务器时,有一个grep
可用的红旗关键字列表.
这个想法是,如果你想构建一个多用途的恶意PHP脚本 - 比如像c99或r57这样的"web shell"脚本 - 你将不得不使用一组或多组相对较小的函数文件中的某个位置,以便允许用户执行任意代码.搜索这些功能可以帮助您更快地将数万个PHP文件的大海捞变到相对较小的脚本集中,这些脚本需要仔细检查.
显然,例如,以下任何一种都会被视为恶意(或可怕的编码):
<? eval($_GET['cmd']); ?>
<? system($_GET['cmd']); ?>
<? preg_replace('/.*/e',$_POST['code']); ?>
Run Code Online (Sandbox Code Playgroud)
等等.
前几天通过一个被入侵的网站进行搜索,我没有注意到一段恶意代码,因为我没有意识到preg_replace
使用该/e
标志可能会造成危险(严重的是,为什么即使那样?).还有其他我错过的吗?
到目前为止,这是我的清单:
Shell执行
system
exec
popen
backtick operator
pcntl_exec
PHP执行
eval
preg_replace
(带/e
修饰符)create_function
include
[ _once
]/require
[ _once
](有关漏洞利用详情,请参阅mario的回答)拥有一个能够修改文件的函数列表可能也很有用,但我想99%的时间漏洞利用代码至少包含一个上述函数.但是如果你有一个能够编辑或输出文件的所有功能的列表,请发布它,我会在这里包含它.(而且我不算数mysql_execute
,因为那是另一类漏洞利用的一部分.)
我的图库脚本为我提供了通过zip文件上传一堆图像的选项.当我尝试这样做时,我收到错误行:致命错误:调用未定义的函数:zip_open()in ..
下面是phpinfo的摘录:
ZLib支持:已启用编译版本:1.1.4链接版本:1.1.4
zlib.output_compression:关闭zlib.output_compression_level:-1 zlib.output_handler:没有值
Zlib已启用..那么为什么我会收到该错误消息?感谢你们对我的帮助.
我想解压导演.
这意味着我有一个压缩的目录名xxx.zip
.在手册册我对上压缩目录中点击并做解压的文件夹,然后我买了名的解压缩dirtectory xxx
并在此目录中有一个相同的目录xxx
.在子文件夹将包含的文件.
这意味着,xxx-> xxx->文件这是解压缩文件夹的heirarchi.
因此,在我的网站中,我想使用PHP代码解压缩目录.
我怎样才能做到这一点?我只需要xxx->files
不是xxx->xxx->files
结构.
我怎样才能做到这一点?
我使用了这段代码{来自:用 php 解压文件}
$zip = new ZipArchive;
$res = $zip->open('file.zip');
if ($res === TRUE) {
$zip->extractTo('/myzips/extract_path/');
$zip->close();
echo 'woot!';
} else {
echo 'doh!';
}
Run Code Online (Sandbox Code Playgroud)
但它不适用于多部分 zip 文件。我的文件的名称是
file.zip
file.z01
file.z02
This's for example :)
Run Code Online (Sandbox Code Playgroud)
*注意:我无法运行 shell 命令,因为我使用共享托管 {替代 PHP exec() 函数}
我在服务器上有一个 zip 文件。它是由数千个小文件组成的 1.1GB。我没有对服务器的 shell 或 root 访问权限,只能使用 ftp 和创建 php 文件.. 到目前为止,我已经尝试过 exec 和 shell exec 但都没有工作。服务器正在运行免费的 bsd。如何将文件解压缩到它所在的目录中?
我正在尝试使用 PHP ZipArchive类解压缩文件,但是当我尝试时:
$file = '/path/to/zip/file.zip';
$zip = new ZipArchive();
$res = $zip->open($file, ZipArchive::CHECKCONS);
Run Code Online (Sandbox Code Playgroud)
结果是ZipArchive::ER_INCONS
(Zip存档不一致)
现在,我已经能够在桌面 (Windows 7) 上打开 zip 文件,并在运行 PHP 应用程序的同一机器 (Ubuntu 12.04) 上使用bash
命令行工具。unzip
我什至可以使用 PHP 解压缩文件exec('unzip', $file);
。
我已经检查了缓存文件夹和 zip 文件的权限,并且网络服务器具有读取和写入权限。我可以使用 PHP 的 ZipArchive 类打开同一目录中的其他 zip 文件。
我不确定它是否相关,但我尝试打开的 zip 文件包含两个 zip 文件。
关于为什么会发生这种情况有什么想法吗?