poc框架

1、介绍

渗透测试存在几个特征:业务需求庞大,优化实现的需求动力充足,业务需求持续增长。

换句话说,渗透测试很难保持固定的代码,而是需要频繁迭代。

因此,提出poc框架进行开发:

  • ui和业务逻辑分离。ui基本保持不变,相对固定的输入、操作和输出。业务优化和需求实现增加主要依靠业务逻辑代码实现
  • 动态获取模块,调用其模块变量和函数。即框架代码一般保持不变,编写的是作为逻辑业务的功能模块
  • 业务逻辑的规范化编写,模块变量、模块函数名称、模块函数的输入与输出

2、poc框架ui

3、框架代码

4、模块规范化编写

def poc(dict_value: dict = {}):
    # 声明本poc的参数与默认值
    kwargs = {'url': '', 'headers': '', 'https_flag': 'false', 'message': '', 'index': '',
              'html_note_flag': 'false', 'js_note_flag': 'false'}
    kwargs.update(dict_value)
    # 测试级别,0表示不可行,4表示完全可行
    status = 0
    # 输出信息
    info = ''
    # 日志数据
    req_list = list()

    ...
 
    return status, info, req_list

4.1 创建模块

4.2 模块变量

title,str类型,即poc的功能名称

description,str类型,详细描述poc的功能与实现

help_info,str类型,阐述各poc参数的名称、类型、默认值和使用方式

4.3 核心函数poc

(1)函数名称

统一的名称,可以使框架在获取当前模块后,直接调用。

目前,只有poc函数是供予使用,作用是进行漏洞存在测试。可以是单一的指定调用,也可以是批量的自动调用其函数

(可以考虑,再定义exp等函数,但是这些无法被自动调用,而需要右键选择调用具体函数)

(2)参数

参数可以分为两类:一是url、headers、https_flag、message、index等基础参数,二是各poc业务所需的差异性参数

解决办法是,函数直接使用dict类型获取参数,在函数内定义一个dict变量,声明本poc函数所需的全部参数,再根据实参进行更新dict。

x需要注意,参数值全部统一为str类型,方便ui或者命令行设置参数。如果是其它类型,则函数内进行单独处理

(3)返回

status,int类型,0-4。0表示不可能,4表示完全可能,中间是过渡,即有可能,需要手工判断

info,str类型,测试过程与分析结果

req_list,list[Request]类型,本poc测试所产生的所有http日志数据

posted @ 2023-05-18 19:31  挖洞404  阅读(39)  评论(0编辑  收藏  举报