Skip to main content

TCP POC编写指南


1. 基本结构

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

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未授权检测为例
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未授权检测为例

    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