ARL 灯塔资产管理系统

阅读量    55077 |

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

 

前言

对于开源的资产收集系统,ARL算是佼佼者了。我就不重复造轮子了,想着拿它来二开,从而适应批量化。
开始二开之前,先分析一下ARL的整体架构,理清了思路,更加方便二开。

 

架构分析

根据作者的开发思路,写了个思维导图。
整个程序利用Flask架构编写,通过入口main.py文件,通过入口文件,初始化Flask框架,加载api,然后通过命名空间绑定路由。各个功能模块大多是独立分开的,通过url直接调用。其次,就是异步任务队列和任务调度器两个单独模块。
如下:

 

二开示范

POC模块

灯塔虽然自带了一部分poc,相对来说还是比较少的。我相信各位大佬手里也有自己的poc库。所以,添加poc功能就必不可少了。
灯塔的poc模块,单独开发了一个python第三方库。地址:https://github.com/1c3z/ARL-NPoC

这个库相对简单些,POC在xing\plugins目录下:

再来看看每个poc模块具体怎么写?
xing/plugins/poc/Django_Debug_Info.py来做说明

from xing.core.BasePlugin import BasePlugin
from xing.utils import http_req
from xing.core import PluginType, SchemeType

# 定义Plugin类,继承自BasePlugin类 必须
class Plugin(BasePlugin):
    def __init__(self):
        super(Plugin, self).__init__()
                     # 初始化
                     # 定义插件类型
        self.plugin_type = PluginType.POC
                     # 定义漏洞名字
        self.vul_name = "Django 开启调试模式"
                     # 定义涉及应用
        self.app_name = 'Django'
                     # 定义使用协议
        self.scheme = [SchemeType.HTTPS, SchemeType.HTTP]
            # 验证方法,接收目标作为参数,存在漏洞返回漏洞url即可
    def verify(self, target):
        paths = ["/lljfafd", "/api/lljfafd"]
        for path in paths:
            url = target + path
            conn = http_req(url)
            content = conn.content
            if conn.status_code != 404:
                continue

            if b"Django" not in content or b"DEBUG = True" not in content:
                self.logger.debug("not found Django")
                continue

            if b"<title>Page not found at" in content and b"lljfafd</title>" in content:
                self.logger.success("发现 Django 开启调试模式 {}".format(self.target))
                return url

那么,思路就很清晰了。
编写一个测试solr远程命令执行的poc如下。

将此文件放到项目的ping\plugins\poc\目录下,worker和web都要放。

本地测试一下效果,测试成功:

回到灯塔控制台,更新插件。

成功添加自己的poc模块,其他类型插件按照模板写就可以了。

 

后记

本系列准备对资产管理这块做一个深入分析,参考已有应用,再添加一下自己的实战经验进去。感兴趣的老哥可以和我一起交流,后续文章在路上!

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多