80后用菜刀,90后用蚁剑,95后用冰蝎和哥斯拉,以phpshell连接为例,本文主要是对这四款经典的webshell管理工具进行流量分析和检测。

什么是一句话木马?

1、定义
顾名思义就是执行恶意指令的木马,通过技术手段上传到指定服务器并可以正常访问,将我们需要服务器执行的命令上传并执行
2、特点
短小精悍,功能强大,隐蔽性非常好
3、举例
php一句话木马用php语言编写的,运行在php环境中的php文件,例:<?php @eval($_POST['pass']);?>
4、原理
以最为常见的php一句话木马为例,"<?php ?>"为php固定规范写法,"@"在php中含义为后面如果执行错误不会报错,"eval()"函数表示括号里的语句全做代码执行,"$_POST['pass']"表示从页面中以post方式获取变量pass的值

四、哥斯拉(Godzilla v3.0)

①全部类型的shell能绕过市面大部分的静态查杀

②流量加密能绕过过市面绝大部分的流量Waf

③Godzilla自带的插件是冰蝎、蚁剑不能比拟的

1、主要功能

它能实现的功能除了传统的命令执行、文件管理、数据库管理之外,根据shell类型的不同还包括了:

(1)MSF联动

(2)绕过OpenBasedir

(3)ZIP压缩 ZIP解压

(4)代码执行

(5)绕过 DisableFunctions

(6)Mimikatz

(7)读取服务器 FileZilla Navicat Sqlyog Winscp XMangager 的配置信息以及密码

(8)虚拟终端 可以用netcat连接

(9)Windows权限提升 (2012-2019烂土豆)

(10)读取服务器 谷歌 IE 火狐 浏览器保存的账号密码

(11)Windows权限提升烂土豆的C#版本 甜土豆

(12)支持 哥斯拉 冰蝎 菜刀 ReGeorg 的内存shell 并且支持卸载

(13)屏幕截图

(14)Servlet管理 Servlet卸载

(15)内存加载Jar 将Jar加载到 SystemClassLoader

2、基础配置

首先从使用最多的PHP_XOR_BASE64类型的加密shell说起,所用的shell主要配置如下:

①URL:http://172.16.159.129/godzilla_shell.php

②密码:pass

③密钥:key

④有效载荷:PhpDynamicPayload

⑤加密器:PHP_XOR_BASE64

⑥哥斯拉的Shell配置包括基本配置和请求配置,其中基本配置主要设置shell地址、密码、密钥、加密器等信息

这里要注意密码和密钥的不同:

①密码:和蚁剑、菜刀一样,密码就是POST请求中的参数名称,本例中哥斯拉提交的每个请求都是pass=xxxxxxxx这种形式

②密钥:用于对请求数据进行加密,不过加密过程中并非直接使用密钥明文,而是计算密钥的md5值,然后取其16位用于加密过程

③哥斯拉shell的请求配置主要用于自定义HTTP请求头,以及在最终的请求数据左右再追加一些扰乱数据,进一步降低流量的特征

3、PHP_XOR_BASE64加密器

哥斯拉内置了3种Payload以及6种加密器,6种支持脚本后缀,20个内置插件,以下主要以PHP_XOR_BASE64为例进行分析。

(1)加密原理

XOR运算

在逻辑运算之中,除了 ANDOR,还有一种 XOR运算,中文称为"异或运算"。
它的定义是:两个值相同时,返回false,否则返回true。也就是说,XOR可以用来判断两个值是否不同。

JavaScript
语言的二进制运算,有一个专门的 XOR 运算符,写作^。

上面代码中,如果两个二进制位相同,就返回0,表示false;否则返回1,表示true。

XOR加密

XOR运算有一个很奇妙的特点:如果对一个值连续做两次 XOR,会返回这个值本身。

①上面代码中,原始信息是message,密钥是key,第一次 XOR会得到加密文本cipherText。对方拿到以后,再用key做一次XOR 运算,就会还原得到message。
②如果每次的key都是随机的,那么产生的CipherText具有所有可能的值,而且是均匀分布,无法从CipherText看出message的任何特征。它具有最大的"信息熵",这被称为XOR 的"完美保密性"(perfect secrecy)。
③XOR 的这个特点,使得它可以被用于信息的加密。

(2)客户端加密模块分析

哥斯拉的源码是通过反编译Godzilla.jar得到的,作者并未做代码混淆。

从代码中可以分析出,发送的payload内容先经过XOR加密后,再将密文进行base64编码,最后进行URL编码。

XOR加密的密钥来自用户提供的密钥经过MD5的32位摘要后,取前16位的值。

(3)Shell服务器端代码分析

PHP_XOR_BASE64类型的加密shell的服务器端代码如下,其中定义了encode函数,用于加密或解密请求数据。由于是通过按位异或实现的加密,所以encode函数即可用于加密,同时也可用于解密。

整个shell的基本执行流程是:服务器接收到哥斯拉发送的第一个请求后,由于此时尚未建立session,所以将POST请求数据解密后(得到的内容为shell操作中所需要用到的相关php函数定义代码)存入session中,后续哥斯拉只会提交相关操作对应的函数名称(如获取目录中的文件列表对应的函数为getFile)和相关参数,这样哥斯拉的相关操作就不需要发送大量的请求数据。

(4)数据包分析

这里从Shell Setting对话框中的测试连接操作开始分析,在Shell Setting对话框中,一共会产生3个POST数据包,POST请求报文中参数名都是pass(即shell的连接密码),参数值都是加密数据。

①第一个Request请求数据包

简单分析了一下payload的内容,包含run、bypass_open_basedir、formatParameter、evalFunc等二十多个功能函数,具备代码执行、文件操作、数据库操作等诸多功能。

②第一个Response响应数据包

该请求不含有任何Cookie信息,服务器响应报文不含任何数据,但是会设置PHPSESSID,后续请求都会自动带上该Cookie。

③第二个Request请求数据包

第二个请求报文发送很少数据(实际内容为测试连接命令test),返回少量数据(即ok)

④第二个Response响应数据包

服务器响应数据解密过程并不复杂,先调用findStr函数删除服务器响应数据左右附加的混淆字符串(对于PHP_XOR_BASE64加密方式来说,前后各附加了16位的混淆字符),然后将得到的数据进行base64解码,最后再和shell连接密钥md5值的前16位按位异或,即完成响应数据的解密。

⑤第三个Request请求数据包

运行哥斯拉命令执行代码中的getBasicsInfo函数得到的系统基本信息。

⑥第三个Response响应数据包

4、PHP_EVAL_XOR_BASE64加密器

哥斯拉不同的加密器发送请求的过程都是一样的,不同之处在于加密/解密的实现方式不同。
PHP_EVAL_XOR_BASE64加密shell的特点如下:
Ø请求数据加密得到的密文形式:pass=evalContent&key=XXXXXXXX,其中pass是shell密码,key是shell密钥
Ø每个请求中的pass=evalContent都是相同的,evalContent是将shells/cryptions/phpXor/template/base64.bin文件内容经过编码得到的(先删除第1行的<?php,再将其中的{pass}替换为shell密码,将{secretKey}替换为shell密钥)
Ø每个请求中的key=XXXXXXXX才是实际执行的shell操作,加密方法和PHP_XOR_BASE64加密shell的方式相同
evalContent的加密过程如下:
①提取src/shells/cryptions/phpXor/template/base64.bin文件内容
②将base64.bin文件内容进行base64编码
③将第2步中编码得到的字符串逆序排列
④将第3步中得到的字符串进行URL编码
⑤将第4步中得到的字符串拼接到eval(base64_decode(strrev(urldecode('第4步中得到的字符串'))));中,即为最终的evalContent

5、PHP_XOR_RAW加密器

PHP_XOR_RAW加密shell的加解过程只是将原始数据与shell密钥(本例中为key)md5值的前16位按位异或,然后将得到的二进制字节码直接发送给服务器;服务器返回的响应数据也是二进制字节码,左右不再追加任何数据。

6、规则落地

alert http any any -> any any (msg:"哥斯拉/Godzilla PHP Base64 连接成功";
flow:established,from_server;
flowbits:txisset,Godzilla_webshell_request_match;
http.server;
content:"Rising", negate;
http.response_body;
bsize:36;
pcre:"/^([0-9A-F]{16}|[0-9a-f]{16})/";
pcre:"/([0-9A-F]{16}|[0-9a-f]{16})$/";
pcre:"/^[\s\S]{16}(.*)[\s\S]{16}$/";
pcrexform:"^[\s\S]{16}(.*)[\s\S]{16}$";
pcre:"/[\s\S]/";
base64;
flowbits:unset,Godzilla_webshell_request_match;
)
  • alert http any any -> any any 表示对任何源IP和目的IP之间的HTTP流量生成告警。
  • msg:"哥斯拉/Godzilla PHP Base64 连接成功" 是告警的描述信息。
  • flow:from server,established 表示只对来自服务器端的已建立连接的流量进行检测。
  • flowbits:isset,Godzilla webshell request match 检查名为"Godzilla webshell request match"的流状态位是否已被设置。(注意这里使用了isset而不是txisset)
  • http.server 表示只对HTTP服务器响应进行检测。
  • content:!"Rising" 表示检测HTTP响应正文中不包含字符串"Rising"。
  • http.response body 表示对HTTP响应的正文部分进行检测。
  • bsize:36 指定只检测响应正文的前36个字节。
  • pcre:"/^([0-9A-F]{16}|[0-9a-f]{16})/"和pcre:"/([0-9A-F]{16}|[0-9a-f]{16})$/" 使用Perl兼容正则表达式(PCRE)检测响应正文是否以16个十六进制字符开头和结尾。
  • pcre:"/^[\s\S]{16}(.*)[\s\S]{16}$/"和pcrexform:"^[\s\S]{16}(.*)[\s\S]{16}$" 使用PCRE检测响应正文是否符合特定的模式,即以16个任意字符开头,任意字符串为中间部分,再以16个任意字符结尾。
  • pcre:"/[\s\S]/" 匹配响应正文中的单个被方括号包围的任意字符。
  • isbase64:3 表示对匹配到的内容进行Base64解码,并检查解码后的字节数是否是3的倍数。
  • flowbits: unset,Godzilla webshell request match 清除名为"Godzilla webshell request match"的流状态位。

WebShell流量特征检测_哥斯拉篇的更多相关文章

  1. 无线安全专题_攻击篇--MAC泛洪攻击

    上一篇讲解了无线安全专题_攻击篇--干扰通信,没在首页待多长时间就被拿下了,看来之后不能只是讲解攻击实战,还要进行技术原理和防御方法的讲解.本篇讲解的是局域网内的MAC泛洪攻击,这种攻击方式主要目的是 ...

  2. # Do—Now——团队冲刺博客_总结篇

    Do-Now--团队冲刺博客_总结篇 目录 博客链接 作者 1. 第一篇(领航篇) @仇夏 2. 第二篇 @侯泽洋 3. 第三篇 @仇夏 4. 第四篇 @周亚杰 5. 第五篇 @唐才铭 6. 第六篇 ...

  3. SAP翔子_增强篇索引

    序号 描述 SAP翔子_增强篇0 增强篇0 SAP的多种增强方式 SAP翔子_增强篇1 增强篇1 PO保存增强 SAP翔子_增强篇2 增强篇2 生产订单屏幕增强 SAP翔子_增强篇3 增强篇3 SAP ...

  4. pytho简单爬虫_模拟登陆西电流量查询_实现一键查询自己的校园网流量

    闲来无事,由于校园内网络是限流量的,查询流量很是频繁,于是萌生了写一个本地脚本进行一键查询自己的剩余流量. 整个部分可以分为三个过程进行: 对登陆时http协议进行分析 利用python进行相关的模拟 ...

  5. Verilog HDL那些事_建模篇笔记(实验七:数码管电路驱动)

    1.同步动态扫描 多个数码管的显示采用的是同步动态扫描方法,同步动态扫描指的是:行信号和列信号同步扫描,是一种并行操作. 2.数码管驱动电路实现思路      如果要求数码管显示我们想要的数字,首先需 ...

  6. 无线安全专题_破解篇02--kali破解pin码

    最近项目有点紧,所以本应该上周发的文章,拖到了本周三,在此说声抱歉.无线安全专题,我打算系统地写六个部分,分别为破解篇,攻击篇,欺骗篇,路由篇,移动篇和蓝牙篇,当然在发布的过程中,可能还会掺杂着发布f ...

  7. 运行ORB-SLAM笔记_编译篇(一)

    1.下载代码   https://github.com/raulmur/ORB_SLAM/    (同时也可以看看作者的牛叉论文,我是打算先用代码,再回头看论文) 2.打开后如下 就好像是用一件新产品 ...

  8. 在.Net中将RocketMQ跑起来_入门篇【2】

    上一篇讲了如何再控制台将RocketMQ跑起来,本篇讲解,在asp.net mvc种跑起来,含(发布.订阅). 本次将不挨个贴源码,直接展示目录,根据上一篇文章,进行相应的调整即可. 1.新建一个类库 ...

  9. 学习python之路_入门篇A

    偶尔经同事的介绍进入了金角大王的博客里,看到大王编写的文章都是关于python编程的,由于自己一直也是做软件测试方面的工作,也一直想往自动化测试方面发展,了解到利用python可以进行自动化测试操作, ...

  10. Python3实现ICMP远控后门(上)_补充篇

    ICMP后门(上)补充篇 前言 在上一篇文章Python3实现ICMP远控后门(上)中,我简要讲解了ICMP协议,以及实现了一个简单的ping功能,在文章发表之后,后台很多朋友留言,说对校验和的计算不 ...

随机推荐

  1. MYSQL DQL in 到底会不会走索引&in 范围查询引发的思考。

    前情引子 in 会不会走索引?很多人肯定会回答.废话.如果命中了索引.那肯定会走. 其实我和大多数人一样.一开始也是这么想的.直至有一个血淋淋的案子让我有所改观.有所思考. 背景介绍 业务的工单表.我 ...

  2. browsermob-proxy-2.1.4启动失败,报错ProxyServerError: The Browsermob-Proxy server process failed to start

    报错信息:ProxyServerError: The Browsermob-Proxy server process failed to start. Check <_io.TextIOWrap ...

  3. Python常见错误及处理

    1.ValueError 值错误,传递给函数的变量不符合函数预期类型.如下'python'是非数字无法转换为整数类型,故会报错ValueError 将a改为数字就不会报错了 2.NameError 变 ...

  4. 3、Git之常用命令

    3.1.速查表 命令 作用 git config --global user.name 用户名 设置用户签名(昵称) git config --global user.email 邮箱 设置用户签名( ...

  5. 【H5】11 表格

    概述: 在HTML中一个很普通的任务是构建表格数据,有大量的元素和属性是来满足这种需求的. 只需要一点儿的CSS来设定风格,HTML让在web上显示表格数据变的很容易,例如你的学校的教学计划,你当地的 ...

  6. 【Vue】02 Component 组件 & Axios

    Vue自定义组件: 不论任何注册组件的方式:template属性有且仅有一个根节点标签 就是说模版属性的标签只能有一个在最外面 <div id="container-element&q ...

  7. 进程的CPU绑定是否有意义 —— 进程的 CPU 亲和性

    好多年前就学习过 进程的 CPU 亲和性这个概念,说直白些就是CPU的进程绑定,也就是指定某个进程绑定到某个CPU核心上,以此提高进程切换时缓存的命中率,加快进程的运算速度. 虽然在编程的时候中会遇到 ...

  8. IPython notebook(Jupyter notebook) 设置密码

    本文共给出两种密码设置方法,一种为直接设置密码法(较为便捷),另一种为hash密码设置法   =================================== 第一种: 直接设置密码 注意: i ...

  9. condition字符串匹配问题

    概述 freeswitch是一款简单好用的VOIP开源软交换平台. fs使用dialplan配置文件执行业务流程,condition条件变量的配置是必然会使用的,这里记录一次配置过程中的错误示范. 环 ...

  10. [rCore学习笔记 024]多道程序与协作式调度

    写在前面 本随笔是非常菜的菜鸡写的.如有问题请及时提出. 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil (目前啥也没有 本节重 ...