另外欢迎加入404星链计划社群,请在文末识别运营同学二维码,添加时备注“星链计划”。
项目名称:pocassist
项目作者:jweny
项目地址:
https://github.com/jweny/pocassist
pocassist是一个 Golang 编写的开源可视化漏洞测试框架,实现poc的可视化编辑、集中管理、精准测试。
ants
实例化协程池,复用 goroutine使用之前务必先阅读使用文档!
🏠使用文档 :
https://pocassist.jweny.top/
⬇️下载最新版本:
https://github.com/jweny/pocassist/releases
0x01 快速开始
# 启动服务
./pocassist
# 浏览器访问
http://127.0.0.1:1231
建议使用pocassistdb (https://github.com/jweny/pocassistdb) 作为漏洞库。⬇️下载漏洞库最新版本 (https://github.com/jweny/pocassistdb/releases/),并在config.yaml
的sqlite
项配置路径,有想一块维护poc的师傅也可直接向该项目提PR。
pocassistdb (https://github.com/jweny/pocassistdb) 中默认账户密码为 admin / admin2。如果自行维护漏洞漏洞库,可在当前目录生成的pocassist.db的auth表创建用户名和密码。
0x02 项目框架
整体框架图:
poc测试
poc 测试是 pocassist 框架的核心。根据 poc 规则对原始请求变形,然后获取变形后的响应,再检查响应是否匹配规则中定义的表达式
poc管理
任务管理
并发引擎
并发引擎是批量目标扫描检测的核心。
任务管理
在 xray yaml 规则的基础上,pocassist 定义了一个变量,叫规则类型
。规则类型将直接决定 rule 如何对原始请求变形。
pocassist 的规则体系中,内置了以下几种规则类型。接下来我们看下同一条规则在不同类型下,是如何对原始请求进行变形的。
为了观察 pocassist 的发包情况,可在config.yaml
中设置burpsuite代理:
proxy: "127.0.0.1:8080"
目录级扫描。pocassist 将认为检测目标为目录,即使是普通 url 也认为是目录。
变形后的请求路径:原始请求路径 + "/" + 规则中定义的path
。
变形后的请求头:使用规则定义。
举例:
发出的请求:
由于响应中有"not found"字样,所以命中了规则
内容检测。pocassist 将认为检测目标为原始请求的响应,所以将直接发起原始请求。该类型的poc只需要定义cel表达式。(其他字段即使填写也会被忽略)
发出的请求为:
url级漏洞检测。pocassist 将认为检测目标为原始请求的uri。因此变形后的请求路径为原始请求的uri,除了路径外,均使用规则定义。该类型的path指定为"/"即可,即使输出"/anything",后面的也会被忽略。
发出的请求为:
服务级漏洞检测。pocassist 将认为检测目标运行在一级目录下,也就是host:port/
。因此变形后的请求路径为host:port/
+规则定义的path,请求头、请求body均使用规则定义。
例如:目标url为https://jweny.top/aaa/bbb.cc.php
,规则中定义的path为 /user/zs.php?do=save
规则运行时变形的请求为https://jweny.top/user/zs.php?do=save
。
发出的请求将直接忽略域名后的子目录:
参数级漏洞检测。pocassist 将认为检测目标为原始请求中的参数。
pocassist 目前仅支持解析query string
和post body
中的form data
(json
解析已在计划中)。参数级漏洞检测只需要在前端配置payload
列表,pocassist 将依次将每个参数根据payload
列表进行变形。
参数变形目前内置了两种类型
appendparam
在原参数值后面拼接payload
,例如检测带回显的sql报错注入。replaceparam
将原参数直接替换为payload
例如:原始请求为?aaa=bbb&ccc=ddd
,payload为'
/ %2527
。appendparam
将那么poc运行时会依次发四个请求:
?aaa=bbb'&ccc=ddd
?aaa=bbb%2327&ccc=ddd
?aaa=bbb?ccc=ddd'
?aaa=bbb?ccc=ddd%2327
原始请求为?aaa=bbb&ccc=ddd
。
如果以上所有模式都满足不了需求,比如你要进行tcp发包,那么可以了解一下写go脚本。脚本检测目前只支持开发者模式,也就是说直接使用release二进制状态下不支持动态加载go脚本到引擎中的,该缺陷正在通过内置go解释器修复。
先在前端配置基础信息,规则内容只填名称即可。
然后在scripts目录下编写go脚本。源码中已提供两个demo,一个是检测memcached未授权,一个是检测tomcat弱口令。
// tomcat 弱口令
func TomcatWeakPass(args *ScriptScanArgs) (*util.ScanResult, error) {
// 定义报文列表
var respList []*proto.Response
fastReq := fasthttp.AcquireRequest()
defer fasthttp.ReleaseRequest(fastReq)
var rawurl = ConstructUrl(args, "/")
var fl = []string{"Application Manager", "Welcome to Tomcat"}
var wl = []string{"admin:admin", "tomcat:tomcat", "admin:123456", "admin:", "root:root",
"root:", "tomcat:", "tomcat:s3cret"}
var buf bytes.Buffer
buf.WriteString(rawurl)
buf.WriteString("/manager/html")
loginurl := buf.String()
fastReq.SetRequestURI(loginurl)
fastReq.Header.SetMethod(fasthttp.MethodGet)
for _, value := range wl {
authValue := "Basic " + base64.StdEncoding.EncodeToString([]byte(value))
fastReq.Header.Set("Authorization", authValue)
resp, err := util.DoFasthttpRequest(fastReq, true)
if err != nil {
return nil, err
}
if resp.Status == 401 || resp.Status == 403 {
util.ResponsePut(resp)
continue
}
if resp.Status == 404 {
util.ResponsePut(resp)
return &util.InVulnerableResult, nil
}
for _, flag := range fl {
if bytes.Contains(resp.Body, []byte(flag)) {
respList = append(respList, resp)
return util.VulnerableHttpResult(loginurl,"user:pass is"+value, respList), nil
}
}
util.ResponsePut(resp)
}
return &util.InVulnerableResult, nil
}
func init() {
ScriptRegister("poc-go-tomcat-weak-pass", TomcatWeakPass)
}
说明:
*ScriptScanArgs
,返回值必须为(*util.ScanResult, error)
。init
方法用来注册脚本,ScriptRegister
方法的第一个参数为规则名称,第二个参数为方法名。go build -o pocassist
。点击上传,选择yaml文件后,yaml内容将自动刷新到规则内容
。
:::tip
:::
点击下载yaml规则,即可下载当前页面编辑好的规则。值得注意的是:pocassist 完全兼容 xray ,但是部分细节还是有差异,例如 params
等差。因此下载后需人工检查后,方可通过xray运行。
常见问题
1. 自定义配置。pocassist首次运行时将在当前目录生成config.yaml
,引擎启动后实时监控配置文件变化,配置文件修改后无需重启,即热加载
2. 用户名密码错误:检查数据库配置,以及数据库auth表。建议使用pocassistdb (https://github.com/jweny/pocassistdb) 作为漏洞库
3. 支持前后端分离部署。前端源码、nginx配置示例可参考pocassistweb (https://github.com/jweny/pocassistweb)
4. 其他使用问题请先阅读使用文档 (https://pocassist.jweny.top/)