Files
BLEN/docs/CODING.md
openx-org 8a6bd53d07 11
2022-01-04 17:24:54 +08:00

9.2 KiB
Raw Blame History

Blen - POC编写规范及要求说明

概述

本文档为oFx的PoC脚本编写规范及要求说明包含了PoC脚本编写的步骤以及相关的一些说明。一个优秀的 PoC 离不开反复的调试、测试。

目前oFx的POC编写为邀请制仅笔者邀请者提交的POC贡献可被接受其他有兴趣的小伙伴也可以提交代码贡献笔者空闲时会抽时间阅读并测试根据代码质量、漏洞危害程度等综合考量是否使用POC通过者将会列入贡献感谢列表

POC打包后通过邮件发送至笔者的邮箱(ronginus@qq.com)POC包内目录结构见下文POC提交规范

邮件标题为:oFx_POC提交贡献APP_NAME/VULN_NAME

POC编写规范

本工具专注于web安全领域目前以围绕http协议的利用与检测方式为核心的漏洞作为POC编写最佳种类涉及其他领域的漏洞本工具概不接受

自定义检测逻辑

POC作者仅需专注于漏洞逻辑即可修改_verify方法实现对漏洞的检测

漏洞存在与否直接修改vuln值vuln为False即漏洞不存在vuln为True即漏洞存在

if req.status_code == 200 and "自己设计规则":
    vuln = [True,req.text]
else:
    vuln = [False,req.text]

杜绝垃圾规则,人人有责,包括但不限于如下用例的检测规则都属于垃圾规则:

if req.status_code == 200 and "" in req.text:
if req.status_code == 200 and "Administrator" in req.text:
if req.status_code != 500:
if req.status_code == 200 and "fonts" and "extensions" and "mci extensions"in  req.text :

在FoFa、Shodan等工具的帮助下我们能够搜索到大量适合某某POC测试的目标因此上面的逻辑很可能在专项测试的时候可以良好的运行但如果是一个测试文件中包含了大量的完全不受控制的未知的目标(别不信,互联网上什么样的网站都有),那么上面的检测逻辑将会产生大量的误报,俗称白给。

言而总之,检测逻辑越苛刻越好

POC_info信息

每一个POC都必须写好_info属性的值具体细节见注释处内容

_info = {
    "author" : "jijue",                      # POC作者
    "version" : "1",                    # POC版本默认是1  
    "CreateDate" : "2021-06-09",        # POC创建时间
    "UpdateDate" : "2021-06-09",        # POC创建时间
    "PocDesc" : """
    """,                                # POC描述写更新描述没有就不写

    "name" : "Demo",                        # 漏洞名称
    "VulnID" : "Blen-2021-0001",                      # 漏洞编号以CVE为主若无CVE使用CNVD若无CNVD留空即可
    "AppName" : "",                     # 漏洞应用名称
    "AppVersion" : "",                  # 漏洞应用版本
    "VulnDate" : "2021-06-09",                    # 漏洞公开的时间,不知道就写今天格式xxxx-xx-xx
    "VulnDesc" : """
    
    """,                                # 漏洞简要描述

    "fofa-dork":"",                     # fofa搜索语句
    "example" : "",                     # 存在漏洞的演示url写一个就可以了
    "exp_img" : "",                      # 先不管  
}

verify检测逻辑预定义

针对不同的漏洞有不同的利用形式,返回信息也可以截然不同,因此这里做一个规范,针对什么漏洞应该如何利用,当匹配成功就算是漏洞存在?

漏洞类型 检测手段
弱口令 登陆,根据登陆成功/失败的返回信息做判断,存在弱口令则将其返回给vuln[2]
文件下载/读取 默认读/etc/passwdwindows系统则读取/C:/Windows/win.ini
命令/代码执行 执行cat /etc/passwd命令取root那一行中的部分字符root:/root作为识别依据即可
未授权访问
用户创建 新建账户/口令返回给vuln[2]

POC规范说明

POC第三方依赖说明

写POC尽量不要使用第三方模块如果一定要用请在_infoPocDesc中注明

如果经笔者考量该POC不适合oFx则该POC将会被废弃

POC命名规范

POC统一放在poc/目录下,以应用名/漏洞名/poc.py的三段式格式来给oFx统一调度

漏洞名部分格式为:漏洞类型 + _(下划线) + 漏洞编号

漏洞类型写简称,具体见下文漏洞类型命名规范

漏洞编号以CVE为主没有CVE就CNVD或CNNVD或WOOYUN实在没有且不影响分辨的话可以不写编号

举个栗子:

Druid未授权访问

如下:

poc/Alibaba_Druid/UnAuth_Access/poc.py

如果同一个应用存在两个及以上相同类型的漏洞,可以根据存在漏洞的文件或利用链等区分,格式为:漏洞类型 + _(下划线) + 漏洞文件 + _(下划线) + 漏洞编号

漏洞类型命名规范

以下表格尚不完善如果POC作者有新的漏洞种类需求可先自行起名然后提交POC给笔者笔者会酌情修改或接受录入下表

漏洞名 英文名 缩写
Sql注入 SQL Injection Sql_inj
XML注入 XMl Injection XML_inj
命令注入 Command Injection Cmd_inj
模板注入 Server-Side Template Injection Ssti
未授权访问 Unauthorized Access UnAuth_Access
访问控制绕过 Access-Control Bypass ACbypass
权限提升 Privilege escalation Priv_Escalation
命令执行 Command Execution Cmd_Exec
代码执行 Code Execution Code_Exec
远程文件包含 Remote File Inclusion Rfi
本地文件包含 Local File Inclusion Lfi
任意文件创建 Arbitrary File Creation File_Create
任意文件读取 Arbitrary File Read File_Read
任意文件下载 Arbitrary File Download File_Download
任意文件删除 Arbitrary File Deletion File_Delete
目录遍历 Directory Listing Dir_List
目录穿越 Directory Traversal Dir_Traversal
文件上传 File Upload File_Upload
弱密码 Weak Password Weak_Pass
日志泄露 Log Disclosure Log_Disclosure
信息泄露 Information Disclosure Info_Disclosure
账号密码信息泄露 Username and Password Infomation Disclosure UPInfo_DisClosure
认证/凭证hash值 信息泄露 Auth Hash Infomation Disclosure HashInfo_DisClosure
配置信息泄露 Config Information Disclosure Conf_Info_Disclosure
后门 Backdoor Backdoor

POC提交规范

考虑到需要测试用例与success用例oFx并不接受Github提交贡献POC提交打zip包通过邮件发给笔者以下表格中的内容为提交POC时的格式规范缺一不收

文件 要求
POC本身 注意目录结构!
测试用例txt文件 fofa搜索结果不少于一万条的用例中数据至少一万条不足一万条的有多少给多少
测试成功案例txt文件 大于等于30条的至少给到30条不足30条的有多少给多少
reference目录 包含漏洞介绍、利用等相关技术文章的url以及关于利用或检测该漏洞的简要文字描述(写入reference.md)或pdf文件(作为other file存入reference文件夹)

目录结构大致如下:

__________POC提交文件夹必须包含以下文件__________
|__ APP_NAME/
    |__ VULN_NAME/
        |__ poc.py
        |__ reference/
            |__ reference.md
            |__ other file
            |__ test_num_1w.txt
            |__ success_30.txt

考虑到每写一个POC都要手动的创建如上目录有点麻烦因此笔者提供了一个POC目录结构生成器食用方式如下

➜  Blen git:(main) ✗ python3 Blen.py --gen-poc

        _  ______
    ___ |  ___|_  __
    / _ \| |_  \ \/ /
    | (_) |  _|  >  <__ _Author : jijue
    \___/|_| __/_/\_\__ __ __Version : 2.9.1

    #*#*#  https://github.com/openx-org/BLEN.git  #*#*#

       _-___________________________________-_


请输入受漏洞影响的应用名Apache_Example
请输入漏洞名RCE

___________生成POC目录结构如下____________
    |__ Apache_Example/
        |__ RCE/
            |__ poc.py
            |__ reference/
                |__ reference.md
                |__ other file
                |__ test_num_1w.txt
                |__ success_30.txt
_________________________________________
POC路径为/Users/jijue/Documents/GitHub/Blen/poc/Apache_Example/RCE/

POC测试流程

1.单个目标测试,直到检测逻辑正确,具备漏洞检测能力为止,并确保漏报在百分之十以下
2.fofa搜索结果批量测试降低误报
3.用与漏洞不相关的目标进行大量测试比如fofa语句"中国"进一步降低误报公网上鱼龙混杂的web站点在POC误报率测试方面有大浪淘沙的属性