我试图构建一个可以用于任意代码执行的函数列表。其目的不是列出应该列入黑名单或以其他方式禁止的函数。更确切地说,我想有一个grep
-able的红旗关键字列表方便搜索一个受影响的服务器后门。
其思想是,如果您想构建一个多用途的恶意PHP脚本——例如c99或r57这样的“web shell”脚本——您将不得不在文件中的某个位置使用一个或多个相对较小的函数集,以便允许用户执行任意代码。搜索这些函数可以帮助您更快地将数万个PHP文件缩小到需要仔细检查的相对较小的脚本集。
显然,例如,以下任何一种代码都被认为是恶意的(或糟糕的编码):
<? eval($_GET['cmd']); ?>
<? system($_GET['cmd']); ?>
<? preg_replace('/.*/e',$_POST['code']); ?>
等等。
前几天在搜索一个受感染的网站时,我没有注意到一段恶意代码,因为我没有意识到preg_replace
可以通过使用/e
标志(这严重吗?为什么会在那里?)而变得危险。还有其他我错过的吗?
以下是我目前列出的清单:
Shell执行
system
exec
popen
backtick operator
pcntl_exec
PHP执行
eval
preg_replace
(带有/e
修饰符)create_function
include
[_once
] / require
[_once
] (请看马里奥的回答用于漏洞利用细节)有一个能够修改文件的函数列表可能也很有用,但我想99%的情况下,利用代码将至少包含上述函数之一。但是如果你有一个所有能够编辑或输出文件的函数的列表,把它贴出来,我会把它包括在这里。(我没有计算mysql_execute
,因为这是另一类利用的一部分。)