POC测试 pocassist—全新的开源在线poc测试框架

栏目:国际 2021-09-17 08:46:28
分享到:

今年微信官方账号的第四篇分享文章

全文:4236字。预计阅读时间:12分钟

团队:零攻防实验

pocassist

PoCs是Go编写的一个全新的开源漏洞测试框架,实现了对PoCs的在线编辑、管理和测试。

如果不想抹掉代码,实现poc的逻辑,快速在线测试无人机,使用pocassist。

项目地址:https://github.com/jweny/pocassist

0x01特性

规则系统

Pocassist借鉴了xray优秀的规则体系。Poc规则由基于CEL的表达式定义。

完全兼容现有的x射线规则。

不仅仅是x射线。除了用于定义目录级漏洞的poc之外,pocassist还支持服务器级漏洞、参数级漏洞、url级漏洞和页面内容检测。如果以上不能满足您的需求,它还支持加载自定义脚本。

表演

高并发性:poc可以批量运行。通过使用实例化的协调池并重用goroutine,可以节省资源并提高性能。

资源

使用内存重用机制。每个POC/请求/响应都用于缓存对象和减少垃圾收集消耗。

使用方便

Pocasupport是单个二进制文件,是独立的,不需要安装,下载后可以直接使用。

0x02演示

代理: ""

# Read http响应超时,不建议设置太小,否则可能影响盲注判断

http_timeout: 10

#建立tcp连接超时

dail_timeout: 5

# udp超时

udp_timeout: 5

每秒最大请求数

max_qps: 100

#单个请求允许的最大跳数

max _重定向:5

标题:

#默认UA

user _ agent:“Mozilla/5.0 Gecko/20100101 Firefox/78.0”

注意:

使用代理:配置此项后,漏洞扫描将使用代理发送请求。目前pocassist只支持http代理,所以只能在配置代理时提供。

每秒最大请求数:默认值为100,收缩速度有限。通常,为了防止被禁止,这个值被调整得更小。

数据库配置

Pocassist支持sqlite和mysql数据库类型。

dbConfig:

# sqlite配置:sqlite数据库文件的路径

SQLite:“POC assist . db”

# mysql配置

mysql:

主机:“127.0.0.1”

密码: ""

端口:“3306”

用户:“root”

数据库:“pocassist”

#数据库连接超时

超时:“3s”

并发配置

Pocassist是根据Go编写的。通过使用实例化协调池和重用goroutine,节省了资源并提高了性能。因此,这里的并发性基本上是指同时扫描漏洞的Goroutine的数量。

一般来说就是同时运行的插件数量。假设一个请求在整个扫描过程中需要100个插件进行扫描,每个插件的执行时间为1秒。如果我们把并发设置为50,那么所有的插件只需要2秒钟就可以执行;如果设置为并发20,则需要5s来执行所有插件。

插件配置:

#并发性:同时运行的插件数量

平行:8

防连接平台

反向连接平台经常用来解决漏洞检测没有回音的问题,最常见的应该是ssrf和storage xss。

目前pocassist支持的防水准平台是ceye.io,可以配置ceye之和。

#反向平台配置:当前使用ceye.io

反转:

api_key:" "

域: ""

0x05 poc编辑手册

Poc编辑主要分为两部分:

规则内容

熟悉x射线规则的高手,对“规则内容”这部分比较熟悉。参照x射线优秀的规则体系,pocassist将x射线规则中的所有变量和方法注入到cel环境中,这意味着pocassist完全兼容所有的x射线规则。

所以这个模块的编写可以参考x射线规则的编辑手册。

注意:

无论是哪种情况,字段都必须以。

如果定义了多个,您必须在填写请求标题后单击保存请求标题按钮,否则将不会保存请求标题。

规则类型

pocassist poc runtime发起的请求由原始请求+规则内容决定。

这部分的重点是。检测过程中的最终请求uri和参数因规则类型不同而完全不同。

Pocassist定义了以下类型。

1.目录

目录扫描。检测目标是目录,请求头由规则定义。

poc运行时发起的请求路径是。请求头由规则定义。

例如:

输入目标为,规则中定义的路径为,poc运行时的请求路径为

2.文本

页面内容检测。检测目标是原始请求的响应,所以直接使用原始请求的请求头。

poc操作期间发起的请求直接是原始请求。

也就是说,这种类型的poc只需要定义cel表达式。

3.url

Url级漏洞检测。检测路径是原始请求的uri,由路径以外的规则定义。

poc运行时发起的请求路径是原始请求的路径,请求头、请求方法和帖子正文由规则定义。

4.计算机网络服务器

服务器级漏洞检测。检测路径是在原始请求的+规则中定义的路径,所有其他路径都由规则定义。

poc运行时发起的请求路径为+规则路径,请求头、请求方法和帖子正文由规则定义。

例如:

输入目标为,规则中定义的路径为,poc运行时的请求路径为

5.脚本

脚本检测。脚本检测目前只支持开发者模式,也就是说不能直接使用发布二进制加载到引擎中。。

脚本检测到的poc只需要在前端配置即可。如果没有配置,脚本将不会加载到引擎中。

前端配置好基本信息后,可以在脚本目录中编写go脚本。源代码中提供了两个演示,一个是检测未经授权的memcached,另一个是检测tomcat弱密码。

func MemcachedUnauthority {

addr := args。主机+ ":11211 "

有效载荷:=字节

resp,err := util。TcpSend

如果出错!=零

返回零,呃

}

if字节。包含){ 0

返回util。VulnerableTcpOrUdpResult,零

}

返回并使用。刀枪不入结果,零

}

func init {

脚本寄存器

}

描述:

脚本的输入参数必须为,返回值必须为。

必须在脚本中定义一个方法来注册脚本。方法的第一个值是,第二个值是要运行的方法的名称。

脚本编写完成后,再次编译pocassist。

6.附录参数

参数级漏洞检测。

目前,只有和中的参数被解析。

参数级漏洞检测只需要在前端配置负载列表。

Appendparam是依次拼接在每个参数值之后的有效载荷。

例如,在检测sql注入时,可以将负载定义为/,等等。,并且原始请求是,则poc运行时将依次发送两个请求,并且

7.replaceparam

参数级漏洞检测。

目前,只有和中的参数被解析。

参数级漏洞检测只需要在前端配置负载列表。

Replaceparam是依次用有效载荷直接替换原来的参数值。

例如,检测ssrf时,可将有效负载定义为反向平台的域,原始请求为,则poc运行时发起的请求为

0x06常见问题

加载config.yaml失败:config.yaml应该与pocassist二进制文件放在同一目录中。

使用mysql时,数据库初始化失败:如果后端使用mysql数据库,则必须先创建数据库,导入数据,并将数据库信息更新为config.yaml,然后才能运行pocassist。

目前前端有一个小bug。第一次登录成功后,跳转到/vul时会显示空,需要强制刷新。

启用goproxy:

go env-w GOPROXY = https://GOPROXY . cn,direct

go env -w GO111MODULE=on

如果前端和后端分开部署,主人可以自己打包前端。

https://github.com/jweny/pocassistweb

0x07 todo

收集主人在使用过程中遇到的问题

目前cli端的批量扫描功能是临时方案,后续所有的批量扫描功能都将在web端支持。

发现潜在的bug

Json参数解析

修复前端错误

初始加载时强制刷新

参数级扫描:有效负载列表前端不提供在线编辑