我越来越秃顶,因为我把头发弄出来应该是一件简单的事情。我在一些PHP文件(100s)中留下了一个黑客攻击的片段。
字符串是:
<?*god_mode_on*/eval(base64_decode("")); /*god_mode_off*/ ?>
我认为使用perl命令行如:
perl -pn -i.bak -e "s{<\?\*god_mode_on\*/eval\(base64_decode\(""\)\); /\*god_mode_off\*/ \?>}{}g;" `find . -name '*.php'`
整齐地生成备份并删除字符串,但似乎小心避免这样做。我想我现在可能已经失明了,因为我已经看了很长时间,所以希望有人可以直接看到问题,让我知道我有多慢; - )
谢谢!
答案 0 :(得分:1)
跟踪需要转义的所有内容并不简单。例如,看起来您没有在双引号字符串中转义双引号。 Perl具有quotemeta
功能,可以帮助您解决这个问题:
print quotemeta '<?*god_mode_on*/eval(base64_decode("")); /*god_mode_off*/ ?>';
===> \<\?\*god_mode_on\*\/eval\(base64_decode\(\"\"\)\)\;\ \/\*god_mode_off\*\/\ \?\>
在正则表达式中,\Q
转义符将在下一个quotemeta
转义的所有内容上调用\E
,因此您可以说:
perl -p -i.bak -e \
's{\Q<?*god_mode_on*/eval(base64_decode("")); /*god_mode_off*/ ?>\E}{}g' \
`find . -name '*.php'`
请注意,我使用单引号而不是双引号作为-e
命令行开关的参数。否则,您还必须担心shell插入输入并打开另外一堆蠕虫。
(另外,-pn
开关是多余的 - 只需使用-p
)
答案 1 :(得分:0)
你使用的shell是否有可能解释反斜杠?您可能需要转义它们(使用另一个反斜杠),因此它们实际上会以反斜杠的形式传递给perl。