前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用ARL灯塔API编写Py脚本,实现快速便捷信息搜集+资产管理!

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

作者头像
天钧
发布2021-07-22 15:22:32
2.4K0
发布2021-07-22 15:22:32
举报
文章被收录于专栏:渗透云笔记

前言

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函数


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 渗透云笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档