全新的开源漏洞测试框架,实现poc在线编辑、运行、批量测试。使用文档:

pocassist

pocassist是一个 Golang 编写的全新开源漏洞测试框架。

  • 简单易用
    • 只需要在前端编辑,即可生成poc对批量目标进行测试
    • 单二进制文件,无依赖,也无需安装
  • 性能优秀
    • 支持高并发,通过使用 ants实例化协程池,复用 goroutine
    • 多重内存复用,尽可能小的内存占用
  • 规则体系
    • 完全兼容xray,但又不仅仅是xray。除了支持定义目录级漏洞poc,还支持服务器级漏洞、参数级漏洞、url级漏洞以及对页面内容检测,如果以上还不满足你的需求,还支持加载自定义脚本。

使用之前务必先阅读使用文档!

🏠 使用文档 ⬇️ 下载最新版本

快速开始

像数 1, 2, 3 一样容易

# 启动服务
./pocassist

# 浏览器访问 
http://127.0.0.1:1231

建议使用pocassistdb作为漏洞库。 ⬇️ 下载漏洞库最新版本,并在config.yaml sqlite项配置路径。

有想一块维护poc的师傅也可直接向该项目提PR。

微信

如果在部署 / 使用过程中遇到问题,或者有好的想法或建议,欢迎添加进群沟通,或者添加我的微信进行交流。

jweny wechat: bad-lucifer jweny wechat: bad-lucifer

Demo

登录页

登录页

规则首页

规则首页

规则详情

规则详情

单挑规则靶机测试

单条规则靶机测试

漏洞描述首页

漏洞描述首页

漏洞描述详情

漏洞描述详情

新建批量扫描任务

新建扫描任务

任务状态

任务首页

扫描结果

扫描结果

结果首页

结果首页

组件首页

组件首页

常见问题

  1. 自定义配置。pocassist首次运行时将在当前目录生成config.yaml,引擎启动后实时监控配置文件变化,配置文件修改后无需重启,即热加载
  2. 用户名密码错误:检查数据库配置,以及数据库auth表。建议使用pocassistdb作为漏洞库
  3. 支持前后端分离部署。前端源码、nginx配置示例可参考pocassistweb
  4. 其他使用问题请先阅读使用文档

免责声明

未经授权,使用pocassist攻击目标是非法的。pocassist仅用于安全测试目的。为避免被恶意使用,本项目所有收录的poc均为漏洞的理论判断,不存在漏洞利用过程,不会对目标发起真实攻击和漏洞利用。

参考项目

Owner
Qihoo360 CloudSec Team. Security Engineer or Developer
null
Comments
  • 优化建议

    优化建议

    • [x] 移除https://github.com/jweny/pocassist/blob/master/pic.assets/.DS_Store;
    • [x] 添加完整nginx参考配置文件;
    • [x] 优化web使用体验,如登录之后页面空白,需刷新,添加poc和漏洞说明完成后页面自动关闭;
    • [x] 添加docker自动化部署;
    • [x] 添加poc的表达式 expression添加选择功能或添加帮助信息;
    • [x] 数据库密码加密存储;
    • [x] 增加重置管理员密码的功能。
  • 设置代理后,扫描结果不同

    设置代理后,扫描结果不同

    哈喽,我这边在测试sonar-cve-2020-27896漏洞。 不设置代理,返回包有乱码,系统扫描判断为“不存在漏洞”;而设置代理后,返回包数据正常,系统扫描判断为“存在漏洞”。是不是代表可能存在“设置代理会影响扫描结果”的情况?

    PS:直接使用浏览器访问时,返回数据正常,sonar是存在漏洞的。

  • 修复contains与match函数未生效的bug

    修复contains与match函数未生效的bug

    1. contains函数已经在这里声明了。,不需要再次声明。
    2. 并且生命的是 instance function,所以 Operator 应该是 contains_string。

    上面两个问题导致在调用 response.reqRaw.matches("2")的函数实际上调用的是 func stringContains(s String, sub ref.Val) ref.Val, 而不是自己定义的contains函数

    同理 "abcd".matches(response.reqRaw)的函数实际上调用的是 func (s String) Match(pattern ref.Val) ref.Val

    并且 func (s String) Match(pattern ref.Val) ref.Val与长亭poc的matches函数语义不符。

    对于s1.matches(s2)来说,本项目最终调用的是func (s String) Match(pattern ref.Val) ref.Val, s1是字符串,s2是正则,而长亭的matches函数的定义是s1是正则表达式,s2是字符串。这会导致长亭开源poc执行与期望不符

    长亭文档:

    image

  • POST存在换行和发包速率问题

    POST存在换行和发包速率问题

    application/x-www-form-urlencoded格式的POST数据,有换行的情况,需要strings.Replace(postdata, "\n", "\r\n", -1),否则发包不完整。 rate.NewLimiter()函数设置值有问题,第一个值应为MaxQps,第二个为瞬间并发数值。

  • 小部分poc报错no such host问题原因

    小部分poc报错no such host问题原因

    controller.go中DoSingleRuleRequest函数有点问题,fixedFastReq.URI().Update(curPath)这里执行之后应该是丢掉了host头,我这里测试都是丢掉了然后报错no such host,需要手动fixedFastReq.URI().SetHost(curHost),不知道为什么你程序大部分都能正常发包而只有小部分POC才会报错。

  • 对于大量的poc请求导致服务的饱和从而出现timeout的现象

    对于大量的poc请求导致服务的饱和从而出现timeout的现象

    发现一个问题,单个运行POC可以扫出漏洞,如果运行所有的POC,能扫出漏洞的那个poc会出现 {"level":"error","time":"2022-04-20 14:56:28.136","linenum":"/root/croto/poc/rule/controller.go:173","msg":",POC: poc-yaml-Disclosure_dsStore [rule/controller.go: DoSingleRuleRequest error] dialing to the given TCP address timed out"} 猜测是 // Warning: DoTimeout does not terminate the request itself. The request will // continue in the background and the response will be discarded. // If requests take too long and the connection pool gets filled up please // try using a Client and setting a ReadTimeout. 可是设置了ReadTimeout 还是会出现问题 不得其解???