先来说一下插件

首先介绍一下可供用户编程扩展的exp插件模块。

Luna的架构图:

Exp插件模块位于上图的最右侧,由'lunaexploit.py' 决定是否加载新的用户插件并扫描。在当前版本中,用户需要手动修改'lunaexploit.py'中的adjust函数来启用新的插件。

self.exp_list = ['ref_xss','sqli']

在exp_list中添加插件名称,例如新插件位于'exp/new_plugin.py',则修改为:

self.exp_list = ['ref_xss','sqli','new_plugin']

启用后的插件会对每个http请求进行扫描。

在luna中,每个插件都是一个类,一般继承与exp基类'lunaexp.py',特殊情况下也可以不继承。Luna作者希望最大限度地开放自定义插件可把控的范围,同时尽可能让用户需要编写的代码最小化(样例:'exp/xss/utf7_xss.py'展示了编写一个插件是一件特别容易的事情),插件主要有两部分构成:插件配置判断逻辑

插件配置:

options详细说明:

上图中参数从高位到低位排列 0b00000000 ~ 0b11111111 共同组成了 0xFF 个不同的选项。

例如: 我们可以通过设置:

self.options = 0xF1

来表达:

self.unurl_encode = 1
self.url_encode   = 1
self.replace_scan = 1
self.add_scan     = 1
self.raw_scan     = 0
self.key_empty    = 0
self.value_empty  = 0
self.do_scan      = 1

下一节会继续介绍 插件的判断逻辑和内置函数。