我是bash的新手,我正在尝试创建一个检查恶意文件的脚本。特别是那些使用全局PHP变量隐藏内容的人。以下是此类文件的示例行:
$GLOBALS['qahtm46']($zadoh31) < 12) { $GLOBALS['wlcrh95']($i34, $gxfej87);
我需要远程检查并获取结果,以下是我当前连接和获取其他信息的方式:
eval=$(ssh -q -t -o GSSAPIAuthentication=yes user@$webs "/usr/bin/ssuu $domain" << EOF
grep -l -r --include=*.php -PHn "(eval\(.*\);)" .
exit
EOF
)
当我echo $eval
时,它会打印任何匹配的文件名。太好了!
每当我直接在服务器上运行以下命令时:
for x in $(find public_html -type f -name '*.php' | xargs grep -ol 'GLOBALS'); do grep -o 'GLOBALS' $x | wc -l | tr '\n' ' ' ; echo $x; printf "\n"; sleep 1; done
exit
EOF
)
我得到了正确的输出:
1 public_html/update.php
363 public_html/sites/all/themes/corporate_blue/images/proxy2.php
363 public_html/sites/all/themes/corporate_blue/images/proxy.php
2 public_html/sites/all/modules/views/views.api.php
2 public_html/sites/all/modules/imce/tpl/imce-page.tpl.php
1 public_html/sites/all/modules/ckeditor/includes/filemanager.config.php
4 public_html/modules/simpletest/drupal_web_test_case.php
然而,当我使用我通常的方法运行它时,我没有得到任何输出,如果我输出到文件,文件被创建但没有写入任何内容:
globals=$(ssh -q -t -o GSSAPIAuthentication=yes user@$webs "/usr/bin/ssuu $domain" << EOF
for x in $(find public_html -type f -name '*.php' | xargs grep -ol 'GLOBALS'); do grep -o 'GLOBALS' $x | wc -l | tr '\n' ' ' ; echo $x; printf "\n"; sleep 1; done
exit
EOF
)
有人能看到问题吗?
答案 0 :(得分:0)
运行时:
ssh server << EOF
for x in $(find ...); ...
EOF
在将脚本传递给服务器之前,本地文档的内容将由本地shell进行评估。
要在服务器上对其进行评估,请双击开头EOF
:
ssh server << "EOF"
for x in $(find ...); ...
EOF