【1】Golismero插件编写-UI插件编写

胡杨林
胡杨林,一直很想去看,一直聊以照片为慰

地址: http://blog.csdn.net/hujkay

作者:Jekkay Hu(34538980@qq.com)

关键词:golismero, web扫描器, 插件编写

时间: 2013/09/18





1.     概述

      Golismero是一款开源的Web扫描器,它不但自带不少的安全测试工具,而且还可导入分析市面流行的扫描工具的结果,比如Openvas,Wfuzz, SQLMap, DNS recon等,并自动分析。Golismero采用插件形式的框架结构,由纯python编写,并集成了许多开源的安全工具,可以运行在Windows,Linux, BSD,OS X等系统上,几乎没有系统依赖性,唯一的要求就是python的版本不低于2.7,其官网是:http://golismero-project.com

       Golismero采用了插件式的框架结构,提供了一系列的接口,用户只要继承并且实现这些接口,就可以自定义自己的插件。根据插件的功能,可分为四类,每个类别的插件的接口都不同,所以在编写自定义插件的时候,注意选择好相应的插件类型。

a. ImportPlugin(导入插件)

     导入插件主要是用来加载其他安全工具的扫描结果

b. TestingPlugin(测试插件) 

    测试插件主要是用来测试或者渗透入侵的插件

c. ReportPlugin(报表插件)

    报表插件主要是对测试结果生成报表。

d. UIPlugin(界面插件)

    界面插件主要是用于和用户交互的,显示当前系统的运行情况。


2. 插件编写

2.1 UIPlugin编写

这是Golismero的界面插件,主要用于展示当前系统的运行详细状态信息,其接口类如下:

接口类

golismero.api.plugin.UIPlugin

基类

+ golismero.api.plugin._InformationPlugin

   + golismero.api.plugin.Plugin

     +Object

接口基类:

接口方法

说明

_init_

x.__init__(...) initializes x; see help(type(x)) for signature

check_params(options, *audits)

Parameters:   

options (OrchestratorConfig) – Orchestrator settings.

audits (AuditConfig) – Audit settings.

Raises:    

AttributeError – A critical configuration option is missing.

ValueError – A configuration option has an incorrect value.

TypeError – A configuration option has a value of a wrong type.

Exception – An error occurred while validating the settings.

recv_info(info)

Callback method to receive data to be processed.

This is the most important method of a plugin. Here’s where most of the logic resides.

[Parameters]: 

info (Data) – Data to be processed.

recv_msg(message)

Callback method to receive control messages to be processed.

Parameters:   

message (Message) – incoming message to process

Returns:  Shared plugin state variables.

state

Return type:    PluginState

update_status(progress=None)

Plugins can call this method to tell the user of the current progress of whatever the plugin is doing.

Warning Do not override this method!

Note This method may not be supported in future versions of GoLismero.

Parameters:   

progress (float | None) – Progress percentage [0, 100] as a float, or None to indicate progress can’t be measured.

下面就以编写一个显示各个插件运行时间logtime插件为例,UI控件必须放置在\plugins\ui目录下,每个插件都需要一个后缀名为.golismero的说明文档,以及相应python脚本文件。定义logtime的配置说明文件plugins\ui\logtime.golismero,代码如下

[Core]

Name = Logtime UI

 

[Documentation]

Description = Show time plugin runs in console.

Author = GoLismero project team

Version = 0.1

Website = http://www.freebuf.com

Copyright = Copyright (C) 2011-2013 GoLismero Project

License = GNU Public License

Python脚本文件plugins\ui\logtime.py,内容如下:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

 

__license__ = """

"""

 

 

from golismero.api.audit import get_audit_count

from golismero.api.config import Config

from golismero.api.data import Data

from golismero.api.plugin import UIPlugin, get_plugin_info

from golismero.main.console import Console, colorize

from golismero.messaging.codes import MessageType, MessageCode, MessagePriority

import time

 

class LogTimePlugin(UIPlugin):

    """

    This demo shows how to write a UI plugin to melismero, it will show how long

    each plugin runs, more infos plz refer to the following links.

    http://www.freebuf.com

    """

   

    #----------------------------------------------------------------------

    def __init__(self):

        """

        we init a dictionary to record the time when plugins start and stop

        {"pluginname1":{'start':12123123,'stop':999999},

         "pluginname2":{'start':12123123,'stop':999999},}

        """

        self._logplugindic={}

   

    #--------------------------------------------------------------------------

    def check_params(self, options, *audits):

        """

        Usually, we just judge the audits whether 'audit' is empty. But you

        have check the input arguments if your plugin requires them.

        """

        if not audits:

            raise ValueError("No targets selected!")   

       

    #--------------------------------------------------------------------------   

    def recv_info(self, info):

        """

        Process the data if you wanna handle them.

        As we just wanna log the time when plugin start/stop, so we don't

        care about the detailed info about the data 'info'

        """

        pass

   

    #--------------------------------------------------------------------------

    def recv_msg(self, message):   

        # Process status messages

        if message.message_type == MessageType.MSG_TYPE_STATUS:

           

            plugin_name = message.plugin_name

            if not plugin_name:

                return

           

            if message.message_code == MessageCode.MSG_STATUS_PLUGIN_BEGIN:

                nowtimesec=time.time()

                self._logplugindic[plugin_name]=dict(start=nowtimesec)

            elif message.message_code == MessageCode.MSG_STATUS_PLUGIN_END:

                nowtimesec=time.time()

                try:

                    self._logplugindic[plugin_name]['stop']=nowtimesec

                           

                    # we do something about 'self._logplugindic'

                    # ....

               

                    # now , i just print how long plugin runs

                    showplugname = get_plugin_info(plugin_name).display_name

                    if not showplugname:

                        showplugname = plugin_name

                    if not self._logplugindic[plugin_name] or not self._logplugindic[plugin_name]['start']:

                        text = "[#] Plugin '%s' runs for ... i don't know " % (showplugname)

                    else:

                        runtime = self._logplugindic[plugin_name]['stop']-self._logplugindic[plugin_name]['start']

                        text = "[#] Plugin '%s' runned for %d seconds" % (showplugname, runtime)

                except:

                    text = "[#] Error occurs"               

                Console.display(text)

           

           

      上面每个函数都给出了注释(因为是我这个编辑器不支持中文,所以只好用中式英文来说明了,大家将就看吧),功能很简单,就是记录在扫描过程中,统计每个插件的运行时间,并显示出来。

      执行python golismero.py –plugin-list,看看我们的插件是否被识别出来,执行结果如下:

 

/----------------------------------------------\

| GoLismero 2.0.0b1 - The Web Knife            |

| Contact: golismero.project<@>gmail.com       |

|                                              |

| Daniel Garcia Garcia a.k.a cr0hn (@ggdaniel) |

| Mario Vilas (@Mario_Vilas)                   |

\----------------------------------------------/

-------------

 Plugin list

-------------

-= Import plugins =-

…………………………………………………….<此处省略N>

-= UI plugins =-

console:

    Console user interface.

disabled:

    Empty user interface.

logtime:

    Show time plugin runs in console

      可以看到我们的插件可以被正确识别,接下来执行时,将UI界面切换到我们刚写的UI界面插件上,执行

 python golismero --ui-mode logtime ww.jike521.com -o result.html

其结果如下

 

/----------------------------------------------\

| GoLismero 2.0.0b1 - The Web Knife            |

| Contact: golismero.project<@>gmail.com       |

|                                              |

| Daniel Garcia Garcia a.k.a cr0hn (@ggdaniel) |

| Mario Vilas (@Mario_Vilas)                   |

\----------------------------------------------/

 

GoLismero started at 2013-09-16 16:41:21.146000

[#] Plugin 'Suspicious URL' runned for 4 seconds

[#] Plugin 'OS fingerprinting plugin' runned for 58 seconds

[#] Plugin 'theHarvester' runned for 61 seconds

[#] Plugin 'Web Spider' runned for 65 seconds

[#] Plugin 'OS fingerprinting plugin' runned for 65 seconds

[#] Plugin 'Robots.txt Analyzer' runned for 65 seconds

[#] Plugin 'Web Server fingerprinting plugin' runned for 67 seconds

[#] Plugin 'DNS zone transfer' runned for 82 seconds

[#] Plugin 'DNS zone transfer' runned for 83 seconds

[#] Plugin 'DNS analyzer' runned for 84 seconds

[#] Plugin 'theHarvester' runned for 85 seconds

[#] Plugin 'DNS analyzer' runned for 85 seconds

[#] Plugin 'DNS subdomain bruteforcer' runned for 473 seconds

[#] Plugin 'DNS subdomain bruteforcer' runned for 503 seconds

[#] Plugin 'Default Error page finder' runned for 2 seconds

[#] Plugin 'Bruteforce permutations discovery' runned for 0 seconds

[#] Plugin 'Bruteforce file extensions discovery' runned for 0 seconds

[#] Plugin 'Bruteforce suffixes discovery' runned for 1 seconds

[#] Plugin 'Bruteforce prefixes discovery' runned for 1 seconds

[#] Plugin 'Bruteforce directories discovery' runned for 2 seconds

[#] Plugin 'Nikto' runned for 2 seconds

[#] Plugin 'OpenVAS' runned for 2 seconds

[#] Plugin 'Bruteforce predictables discovery' runned for 5 seconds

      显然,Golismero只能支持单个UI插件,无法同时支持多个UI插件,导致无法支持多路UI输出。最典型的缺陷就是如果将其改造成分布式的部署结构,我们开发一个向统计服务器推送当前状态显示的UIPlugin,又有个和用户交互的UIPlugin时,那么这两个UI Plugin是无法同时启动的。


胡杨

2013/09/18

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值