使用ARL灯塔API编写Py脚本,实现快速便捷信息搜集+资产管理!

您所在的位置:网站首页 灯塔的定义 使用ARL灯塔API编写Py脚本,实现快速便捷信息搜集+资产管理!

使用ARL灯塔API编写Py脚本,实现快速便捷信息搜集+资产管理!

2024-07-16 12:55| 来源: 网络整理| 查看: 265

前言

MD!写的时候忘记记录了...现在你们看到的是我根据我的记忆来写的文章...

因为最近项目有点多,信息搜集耗时有点慢,所以想到之前用到一个工具 “ARL灯塔”!但是每次都要登陆WEB端点点点就很费时间,所以

开发

代码语言:javascript复制from re import S from cryptography.hazmat.primitives.asymmetric.ec import BrainpoolP256R1 import requests import readline import json from prettytable import PrettyTable import urllib3 from os import system, name import urllib.request

json库就是拿来解析返回结果的,prettytable是拿来美观输出结果的,urllib3和requests就是拿来做请求的。

其他的我也忘记都是干啥的了~

代码语言:javascript复制apikey = "ff44256c-fa2b-483f-9956-b0a84e153ade"

灯塔的API请求需要一个key,这个key是在 “config-docker.yaml” 文件内配置的,然后我们把我们配置的key赋值给一个变量就好了。

代码语言:javascript复制def task(): table = PrettyTable(['任务名称', '目标地址', '当前状态', '开始时间', '结束时间', '任务ID']) headers = { 'accept': 'application/json', 'Token': apikey } ceshi = requests.get("https://IP:5003/api/task/", headers=headers, verify=False) good = ceshi.text res = json.loads(good.encode('latin-1').decode('unicode_escape')) for i in res['items']: table.add_row([i['name'],i['target'],i['status'],i['start_time'],i['end_time'],i['_id']]) else: print(table) table.clear_rows()

key配置好之后我们定义一个任务列表获取功能,这里可以看到我们的任务列表,效果就是下图这样子

代码语言:javascript复制def add(name, target): headers = { 'Content-type': 'application/json', 'Token': apikey, "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36" } data = { "name": name, "task_tag": "task", "target": target, "policy_id": "策略ID", "result_set_id": "策略ID"} jsondata = json.dumps(data, separators=(',', ':'), ensure_ascii=False) ceshi = requests.post("https://IP:5003/api/task/policy/", headers=headers, data=jsondata, verify=False) good = ceshi.text res = json.loads(good.encode('latin-1').decode('unicode_escape')) if res['message'] == 'success': print(res['message'] + ' \033[1;31m下发任务成功!\033[0m') else: print('\033[1;32m下发任务失败!\033[0m')

灯塔的任务下发接口我感觉不如用策略下发功能,所以我这里用的是策略下发功能,策略下发需要获取策略ID!

首先我们需要新建策略:

然后我们访问:https://IP:5003/api/doc

点击右侧绿色按钮填入自己的KEY值后点击绿色按钮即可

然后拉到最下面可以点开“策略信息“一栏,然后选择“策略信息查询“一栏,最后点击右侧灰色按钮

不需要填写任何信息,直接点击蓝色按钮

往下拉可以看到返回结果,"_id"参数为我们要获取的策略ID

整体功能其实就是这样完成的,其他功能自行摸索吧,剩下的就是把调用函数实现功能就好了,自行看下面的代码吧..

代码语言:javascript复制xunhuan = 1 while xunhuan == 1: a = input("\033[1;31m>> \033[0m") if a == 'ls': task() if a == 'addfile': name = input('\033[1;34m[+] >> 任务名称:\033[0m') file = input('\033[1;34m[+] >> 目标文件:\033[0m') with open(file, 'r', encoding='utf-8') as file1: for readFile in file1: #逐行读取 add(name.encode("utf-8","ignore").decode("latin-1"), readFile) if a == 'add': print('\033[1;31m[+] 任务目标英文逗号分割!例:1.2.3.4,4.3.2.1\033[0m') print('\033[1;32m--------------------------------------------------\033[0m') name = input('\033[1;34m[+] >> 任务名称:\033[0m') target = input('\033[1;34m[+] >> 任务目标:\033[0m') add(name.encode("utf-8","ignore").decode("latin-1"), target) if a == 'c': clear() if a == 'e': break

结尾

本来想做成类似MSF那样子的等待命令输入的交互式,但是没有找到相关库,也不知道怎么写,所以就写了个死循环然后输入的内容判断来实现的那种效果。

替换脚本内url地址的时候要像下图这样替换掉IP,否则可能会报错!

addfile其实就是通过读取指定文件然后逐行读取循环下发任务给add函数。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3