【发布时间】:2011-08-12 06:20:59
【问题描述】:
我正试图追踪一个 Wordpress 网站是如何不断被黑客入侵的,我试图追踪的其中一件事是“触摸”命令正在命中哪些文件以伪造 last_modified 日期(许多黑客都会这样做)隐藏自己并在这种情况下发生)。我创建了一个名为 newtouch 的脚本,它简单地用时间戳记录发送给它的所有参数,然后将 touch 别名为 newtouch。这在我 ssh 时工作正常,但是当我尝试从 php 调用它时,它无法识别别名。我做了一些研究,发现这是因为 php 在不同的 shell 下运行:
$ php -r 'echo shell_exec("echo $0");' 嘘
主目录中没有 .profile,所以我创建了一个,但无论我在其中放入什么,由于某种原因我无法让 shell 识别它。为了测试,我尝试了一个名为 touch2 的简单别名,它简单地呼应了单词 test,并在 .profile 中尝试了以下所有内容,但都没有奏效:
alias touch2='echo test'
alias touch2 'echo test'
touch2 () {
echo test
}
无论我尝试哪种方法,我都会得到相同的结果:
$ sh
$ alias
$ touch2
sh: touch2: command not found
$ php -r 'echo shell_exec("alias");'
$ php -r 'echo shell_exec("touch2");'
sh: touch2: command not found
感谢您的帮助,谢谢。
【问题讨论】:
-
您的个人别名对新用户的系统没有任何意义(特别是如果他们已经获得 root 权限)或碰巧以 /path/to/touch/exec 执行 touch
-
如果你为 shell 用户设置了一个别名命令,它不会阻止直接调用
/usr/bin/touch(绕过别名)和 php-internaltouch()函数(这更有可能是反正用过)。 -
你们回答的很快,帖子只写了一半,但我在添加标签时不小心提交了,对此感到抱歉。此外,这肯定是通过 php 完成的,而不是通过另一个 shell。
-
@mvandemar:如果不是交互式 shell,则不会读取
.profile和.bashrc。您需要设置BASH_ENV=来强制执行脚本。在系统范围内设置它以产生任何效果。还要确保它实际上是bash而不是dash或其他最小化的 shell。 -
好吧,
SetEnv在您的.htaccess中也可能有用。