Skip to content

TCP POC编写指南


1. 基本结构

与http的poc类似,只是多了一个protocol来声明该插件是tcp还是http

yaml
name: poc-yaml-this-is-pocname
level: 2
protocol: tcp
finger: finger.name.lcontains("TcpPocFinger")
rules:
	- method: tcp
	  body: "\r\n"
	  expression: response.body.bcontains("Tcp Poc Response")
  • body为要发送的内容

  • expression与http的poc一样,有一个response对象,目前response对象仅有一个body(返回数据)

2. 进阶使用

  • 如果希望每个请求都是单独的一个tcp(包括三次握手都是单独的),可以使用以下格式的语法,以redis未授权检测为例
yaml
name: poc-yaml-redis-unauth
level: 2
protocol: tcp
finger: finger.name.lcontains("redis")
rules:
  - method: tcp
    body: "*1\r\n$4\r\nping\r\n"
    expression:
      response.body.bcontains(b"PONG")
  - method: tcp
    body: "*1\r\n$4\r\ninfo\r\n"
    expression:
      response.body.bcontains(b"redis_version")
detail:
  author: ezez
  • 如果是希望tcp的链接保持为同一个,不需要每个请求都是新的tcp连接,可以通过以下语法格式实现,以redis未授权检测为例

    yaml
    name: poc-yaml-redis-unauth
    level: 2
    protocol: tcp
    finger: finger.name.lcontains("redis")
    groups:
      tcpPoc:
        - method: tcp
          body: "*1\r\n$4\r\nping\r\n"
          expression:
            response.body.bcontains(b"PONG")
        - method: tcp
          body: "*1\r\n$4\r\ninfo\r\n"
          expression:
            response.body.bcontains(b"redis_version")
    detail:
      author: ezez

Powered by EZ