opensec-cn / opensec-cn.github.io

https://opensec-cn.github.io
6 stars 4 forks source link

Kunpeng!一款开源的跨语言漏洞POC框架 #1

Open ywolf opened 5 years ago

ywolf commented 5 years ago

团队介绍

先简单介绍一下我们,OpenSec,顾名思义,专注于安全领域的开源组织。

于2019年1月1日成立,成员名单(a-z): FeeiMediceannearglephith0nwolf ,目前成员作为核心开发的开源项目(此前个人或团队的项目)累计超过1.5万star,例如:vulhubVulAppsyulong-hidsxunfengcobra,我们计划将在后续工作之余开发输出一系列的安全开源项目,包括不限于:基础库项目、产品项目、实验性项目。

背景

作为漏洞发现类系统的核心:漏洞库,个人觉得目前存在着以下几个问题

  1. 维护成本高

    一款扫描类的系统完成后,需要持续投入人力去编写最新的漏洞检测POC,其花费的人力成本远高过系统的开发。

  2. 集成成本高

    自行维护成本高,那如果直接集成现用的POC库如何呢。众所周知,目前POC基本上为Python和Ruby语言编写,Ruby主要为msf的项目,其收录的插件质量较高(高危害、高频率),且更新速度快,若要集成是首选的项目,但由于其为ruby语言开发,大部分安全开发更多擅长的是python,以及其插件与框架粘性较高,转换为python插件也需要一定成本(包括完成后的测试),虽然也有一些办法实现直接调用其框架来自动化验证,但由于扫描基本上有分布式需求和其他自定义的功能,或者不需要那么有攻击性仅仅只需要验证是否存在漏洞,强行融合起来效率不高也不是特别优雅。python项目的POC则较为分散,也暂未看到有持续维护最新漏洞POC的项目,基本上所了解到的大部分为老旧的历史漏洞和非常小众的CMS漏洞(十年遇不到一次的那种),高质量(高危害、高频率)POC较少,除了凑数量外集成的价值较低。

  3. 环境和依赖库问题

    部分漏洞插件需要第三方库和环境依赖(例如各类服务协议的认证爆破),环境部署可能遇到下载超时和部分c编写的库编译失败,还有新插件需要新的第三方库更新等问题,对于几乎必备的分布式需求,如果能避免这类问题更好,虽说这些可能不算问题,只是比较琐碎麻烦,也有很多解决的办法,例如:节点打包成docker使用k8s调度启动或者类似bugscan那样所有插件不使用第三方库开发,但更希望有其他更轻的解决办法,也不需要考虑环境和第三方库问题。

基于以上问题,于是有了这个新项目:Kunpeng

它是一个纯粹的POC漏洞库,不需要考虑环境依赖问题,不需要自己维护POC,各种语言均可以调用,单文件更新方便。就像一个黑盒子,你只需要告诉他你要检测的目标和目标名(例如:mysql、ssh、tomcat),它返回检测结果。

下面就是这个项目的正式介绍信息了(目前仅集成几十个样例漏洞POC,后续会持续添加)。

简介

Kunpeng是一个Golang编写的开源POC检测框架,集成了包括数据库、中间件、web组件、cms等等的漏洞POC,可检测弱口令、SQL注入、XSS、RCE等漏洞类型,通过此项目可快速对目标进行安全漏洞检测,比攻击者快一步发现风险漏洞。

这不是一个POC框架轮子,而是为了解决轮子问题而设计的,也不仅仅只是框架,定位是期望成为一个大家共同维护的漏洞POC库,以动态链接库的形式提供调用,安全开发人员只需专注于相关漏洞检测系统的业务逻辑代码实现,而不必各自重复的耗费精力维护漏洞库。

特点

使用场景

渗透测试辅助工具:例如msf,交互控制台 -> Kunpeng

网络资产安全监控:例如巡风,端口扫描 -> 指纹识别 -> kunpeng 或 nmap -> kunpeng

扫描器: 作为扫描器的漏洞库

更多使用场景可自由发挥

下载地址

releases

压缩包内的kunpeng_go.so为GO语言专版,其余语言使用 kunpeng_c.so

使用方法

不管使用哪种语言,加载动态链接库后,参考接口使用格式,传入任务JSON,返回检测结果,也可启动WEB API接口,通过http协议进行调用。

接口调用说明

/*  发起任务,传入任务JSON,格式为:
    {
        "type": "web", //目标类型web或者service
        "netloc": "http://xxx.com", //目标地址,web为URL,service格式为123.123.123.123:22
        "target": "wordpress", //目标名称,决定使用哪些POC进行检测
        'meta':{
            'system': 'windows',  //操作系统,部分漏洞检测方法不同系统存在差异,提供给插件进行判断
            'pathlist':[], //目录路径URL列表,部分插件需要此类信息,例如列目录漏洞插件
            'filelist':[], //文件路径URL列表,部分插件需要此类信息,例如struts2漏洞相关插件
            'passlist':[] //自定义密码字典,留空则使用内置默认字典
        }
    }
    返回是否存在漏洞和漏洞检测结果
*/
Check(taskJSON string) (bool, []map[string]string) 

// 获取插件列表信息
GetPlugins() []map[string]string

/*  配置设置,传入配置JSON,格式为:
    {
        "timeout": 15, // 插件连接超时
        "aider": "http://123.123.123.123:8088", // 漏洞辅助验证接口,部分漏洞无法通过回显判断是否存在漏洞,可通过辅助验证接口进行判断。
        "http_proxy": "http://123.123.123.123:1080", // HTTP代理,所有插件http请求流量将通过代理发送(需使用内置的http请求函数util.RequestDo)
        'pass_list': ['passtest'], // 默认密码字典,不定义则使用硬编码在代码里的小字典
        'extra_plugin_path': '/tmp/plugin/' // 除已编译好的插件(Go、JSON)外,可指定额外插件目录(仅支持JSON插件),指定后程序会周期读取加载插件
    }
*/
SetConfig(configJSON string)

// 开启web接口,如果觉得类型转换麻烦或者想多个系统共用一个实例,可开启后通过web接口进行调用,webapi调用格式请查看例子:/example/call_webapi_test.py
StartWebServer()

调用例子

img

更多细节和介绍请到Github项目主页查看:https://github.com/opensec-cn/kunpeng

坚持不易,你们的转发、Star和反馈是我们最大的动力。

FeeiCN commented 5 years ago

👍支持!

cyjaysun commented 5 years ago

NB 感谢分享

zh0ub0 commented 5 years ago

谢谢分享 👍

EXHades commented 5 years ago

支持!

zjhiphop commented 5 years ago

顶起!!!!

xiaofengtongxue commented 5 years ago

分享是一种美德

w4ctech commented 5 years ago

thanks

lihaoran93 commented 5 years ago

我尝试用python3调用, 但是提示我kunpeng_c.so: cannot read file data , 是我的用法哪里不对么

ywolf commented 5 years ago

@lihaoran93 参考kunpeng项目上的调用例子

aviraonepiece commented 4 years ago

感谢分享!非常好的项目!

wujunze commented 4 years ago

感谢分享! 非常有意思的项目 👍

lily79 commented 4 years ago

赞!学习!

C1anc3y commented 3 years ago

👍

fa1c0n1 commented 3 years ago

和pocsuite3是同类的东东?比pocsuite3好在哪里?