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