vps搭建ARL灯塔

admin 2025-12-22 04:19:08 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文章介绍了在VPS上使用Docker部署ARL灯塔资产测绘系统的方法,推荐使用增强版ARL-Plus,详细说明了如何修改配置文件包括禁止项、字典和API密钥,并提供了自定义指纹批量导入的Python脚本,以及将nuclei漏洞扫描改为Vscanplus的方法,为安全研究人员提供了完整的资产测绘系统搭建和定制指南。 综合评分: 89 文章分类: 安全工具,WEB安全,安全建设,漏洞分析,实战经验


cover_image

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:
&nbsp; &nbsp; python3 ARL-Finger-ADD.py <ARL_URL> <username> <password>

example:
&nbsp; &nbsp; python3 ARL-Finger-ADD.py https://192.168.1.1:5003/ admin password
&nbsp; &nbsp; &nbsp; &nbsp; """)
&nbsp; &nbsp; &nbsp; &nbsp; sys.exit(1)

&nbsp; &nbsp; arl_url = sys.argv[1]
&nbsp; &nbsp; username = sys.argv[2]
&nbsp; &nbsp; password = sys.argv[3]

#&nbsp;获取&nbsp;Token
token = login_and_get_token(arl_url, username, password)
if not&nbsp;token:
&nbsp; &nbsp; &nbsp; &nbsp; logger.critical("[-]&nbsp;无法获取&nbsp;Token,程序退出")
&nbsp; &nbsp; &nbsp; &nbsp; sys.exit(1)

#&nbsp;执行主任务
main(arl_url, token)

if&nbsp;__name__ ==&nbsp;'__main__':
&nbsp; &nbsp; main_entry()

如果想的话 也可以把nuclei的漏洞扫描改成Vscanplus。

相关代码在:

/code/app/servers/nuclei_scan.py

直接修改就好~~


查看原文:《vps搭建ARL灯塔》

评论:0   参与:  3