前言
对于开源的资产收集系统,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模块,其他类型插件按照模板写就可以了。
后记
本系列准备对资产管理这块做一个深入分析,参考已有应用,再添加一下自己的实战经验进去。感兴趣的老哥可以和我一起交流,后续文章在路上!
发表评论
您还未登录,请先登录。
登录