我正在尝试构建一个可用于任意代码执行的函数列表.目的不是列出应列入黑名单或以其他方式禁止的功能.相反,我希望在搜索受感染的后台服务器时,有一个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执行
systemexecpopenbacktick operatorpcntl_execPHP执行
evalpreg_replace(带/e修饰符)create_functioninclude[ _once]/require[ _once](有关漏洞利用详情,请参阅mario的回答)拥有一个能够修改文件的函数列表可能也很有用,但我想99%的时间漏洞利用代码至少包含一个上述函数.但是如果你有一个能够编辑或输出文件的所有功能的列表,请发布它,我会在这里包含它.(而且我不算数mysql_execute,因为那是另一类漏洞利用的一部分.)
如何禁用危险的评估功能?可以使用ini_set函数完成吗?
另外如何禁用以下功能?我们可以使用ini_set函数禁用它们吗?
allow_url_fopen
allow_url_include
exec
shell_exec
system
passthru
popen
stream_select
Run Code Online (Sandbox Code Playgroud)
eval是坏人可以用来利用这些东西的最危险的功能之一.应该有一种机制来禁用它而不诉诸php.ini文件; 但是应该以编程方式完成.
嗯,伙计们,我正在寻找一个答案,建议禁用这些危险的可爱的伙伴,而不去php.ini文件; 我是指如何在运行时或以编程方式禁用它们?
提前致谢....
更新
有没有人听说过PHP Shell Offender Script?它主要使用eval函数进行利用.黑客能够在您的网站上运行他们的PHP代码.
我的问题是我不想完全禁用php.ini文件中的eval函数.例如,我开发了自己的MVC框架.现在框架用户可以从框架配置文件中指定是否应禁用eval(和其他)功能.所以这留给了框架用户的选择.一旦他们指定禁用它; 我应该能够以编程方式禁用eval函数.
这就是场景.寻找有用的答案/解决方案.
再次感谢.