文章总结: 文章介绍了在VPS上使用Docker部署ARL灯塔资产测绘系统的方法,推荐使用增强版ARL-Plus,详细说明了如何修改配置文件包括禁止项、字典和API密钥,并提供了自定义指纹批量导入的Python脚本,以及将nuclei漏洞扫描改为Vscanplus的方法,为安全研究人员提供了完整的资产测绘系统搭建和定制指南。 综合评分: 89 文章分类: 安全工具,WEB安全,安全建设,漏洞分析,实战经验
vps搭建ARL灯塔
原创
网安热爱者week
week的杂货铺
2025年12月15日 19:48 江苏
ARL灯塔是一个资产测绘系统
基本界面就是这样的
历史记录记得时不时删一下 大资产的话还挺吃的。
建议是放在vps上 虚拟机的话可能性能稳定性都不太好。
使用docker部署就好 这个很方便。
ARL-Puls 是基于灯塔ARL修改后的版本。相比原版,增加了OneForAll、中央
数据库,修改了altDns。
链接如下:感谢大佬~~
https://github.com/ki9mu/ARL-plus-docker
灯塔资产自身是有禁止项的,直接修改config文件就可以了。
先进灯塔的web端docker:
docker exec -it arl_web /bin/bash
运行命令:
cd appvi config.yaml
上文这些都可以修改 尤其是要挖edu的禁止域名一定记得要改。
字典也可以换成自己的 放进docker然后改一下路径就好了。
包括apikey之类的。
更改好之后记得:
docker restart arl_web
指纹我使用的是TscanPlus的官方指纹库
下面是一个上传指纹的脚本:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
ARL 灯塔系统 - 自定义指纹批量导入工具
作者: week
功能: 从本地 finger.json 读取指纹规则,通过 API 批量添加至 ARL 系统
支持字段: body / title / header / icon_hash
"""
import sys
import json
import logging
import requests
# 禁用 SSL 警告
requests.packages.urllib3.disable_warnings()
FINGER_JSON_FILE = './finger.json'
# 配置日志
logging.basicConfig(
level=logging.INFO,
format="[%(levelname)s] %(message)s"
)
logger = logging.getLogger("ARL-Finger-ADD")
def add_finger(name: str, rule: str, url: str, token: str):
"""向 ARL 添加单条指纹规则"""
headers = {
"Accept": "application/json, text/plain, */*",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"Connection": "close",
"Token": token,
"Content-Type": "application/json; charset=UTF-8"
}
api_url = f"{url.rstrip('/')}/api/fingerprint/"
data = {"name": name, "human_rule": rule}
try:
response = requests.post(api_url, json=data, headers=headers, verify=False, timeout=10)
if response.status_code == 200:
logger.info(f"[+] 成功添加指纹: {name} | 规则: {rule}")
else:
logger.error(f"[-] 添加失败 ({response.status_code}): {response.text}")
except Exception as e:
logger.error(f"[-] 请求异常: {e}")
def main(url, token):
try:
with open(FINGER_JSON_FILE, 'r', encoding="utf-8") as f:
load_dict = json.load(f)
except FileNotFoundError:
print("[-] 错误:未找到路径的 finger.json 文件,请确保它在指定目录下 或者更改源码中的路径")
return
except json.JSONDecodeError as e:
print(f"[-] 错误:finger.json 文件格式错误: {e}")
return
body = "body=\"{}\""
title = "title=\"{}\""
header = "header=\"{}\""
icon_hash = "icon_hash=\"{}\""
for i in load_dict.get('fingerprint', []):
try:
finger_json = i # 简化处理,无需重复序列化/反序列化
name = finger_json['cms']
keyword_list = finger_json.get('keyword', [])
if not keyword_list:
print(f"[-] 警告:指纹 '{name}' 没有关键词,跳过")
continue
if finger_json['method'] == "keyword":
if finger_json['location'] == "body":
rule_format = body
elif finger_json['location'] == "title":
rule_format = title
elif finger_json['location'] == "header":
rule_format = header
elif finger_json['location'] == "icon_hash":
rule_format = icon_hash
else:
print(f"[-] 未知位置类型: {finger_json['location']},跳过指纹 '{name}'")
continue
# 只使用第一个关键词(根据原脚本逻辑)
rule = rule_format.format(keyword_list[0])
add_finger(name, rule, url, token)
except Exception as e:
print(e)
print(f"[-] 处理指纹时出错: {e}")
def login_and_get_token(base_url: str, username: str, password: str) -> str:
"""登录 ARL 并获取 Token"""
login_url = f"{base_url.rstrip('/')}/api/user/login"
login_data = {"username": username, "password": password}
headers = {
"Content-Type": "application/json; charset=UTF-8",
"User-Agent": "Mozilla/5.0 (compatible; ARL-Finger-Tool)"
}
try:
res = requests.post(login_url, json=login_data, headers=headers, verify=False, timeout=10)
if res.status_code == 200:
data = res.json().get("data", {})
token = data.get("token")
if token:
logger.info("[+] 登录成功,获取 Token 成功!")
return token
else:
logger.error("[-] 登录响应中未包含有效 token")
else:
logger.error(f"[-] 登录失败: HTTP {res.status_code} - {res.text}")
except Exception as e:
logger.error(f"[-] 登录请求异常: {e}")
return None
def main_entry():
if len(sys.argv) != 4:
print("""
usage:
python3 ARL-Finger-ADD.py <ARL_URL> <username> <password>
example:
python3 ARL-Finger-ADD.py https://192.168.1.1:5003/ admin password
""")
sys.exit(1)
arl_url = sys.argv[1]
username = sys.argv[2]
password = sys.argv[3]
# 获取 Token
token = login_and_get_token(arl_url, username, password)
if not token:
logger.critical("[-] 无法获取 Token,程序退出")
sys.exit(1)
# 执行主任务
main(arl_url, token)
if __name__ == '__main__':
main_entry()
如果想的话 也可以把nuclei的漏洞扫描改成Vscanplus。
相关代码在:
/code/app/servers/nuclei_scan.py
直接修改就好~~
查看原文:《vps搭建ARL灯塔》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论