用户国营 发表于 2024-5-3 05:31:20

ARL分析与进阶使用

在使用ARL(Asset Reconnaissance Lighthouse资产侦察灯塔系统,项目地址地址为https://github.com/TophantTechnology/ARL)的时候,有两个问题比较困扰我:
1. ARL使用Fofa导入数据的时候怎么降重?
2. 如何自己手动编写Poc?
在网上查阅了一些相关资料后,我发现并没有有师傅写的很清晰,于是诞生了写这篇文章的想法。
这篇文章不涉及ARL的基础搭建过程和基础使用过程,如果您之前没有使用过ARL,详情可以参考官网教程:https://tophanttechnology.github.io/ARL-doc/system_install/
1.Fofa降重

先说结论,是由于Fofa_api的限制而不是ARL本身的问题
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202402201414662.png
来源于我之前的使用体验,使用同样的Fofa语句,比如能搜到大量地的资产,但是ARL只会跑几千条,然后我们反复运行发现得到的资产结果是一致的,这样就大大地影响了配合Fofa使用好处,只能自己更换不同的Fofa语句来实现降重,非常麻烦。
首先我们先黑盒看看调用fofa的流程:
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202402201414663.png
POST /api/task_fofa/test HTTP/2


{"query":"org=\"China Education and Research Network Center\""}HTTP/2 200 OK

{"message": "success", "code": 200, "data": {"size": 13492282, "query": "org=\"China Education and Research Network Center\""}}可以看见这里返回的结果是13492282条
然后我们直接去项目里面去找:
路径为:ARL-2.6.1\app\routes\taskFofa.py
from flask_restx import Namespace, fieldsfrom app.utils import get_logger, auth, build_ret, conn_dbfrom app.modules import ErrorMsg, CeleryActionfrom app.services.fofaClient import fofa_query, fofa_query_resultfrom app import celerytaskfrom bson import ObjectIdfrom . import ARLResource​​ns = Namespace('task_fofa', description="Fofa 任务下发")​logger = get_logger()​​test_fofa_fields = ns.model('taskFofaTest',{    'query': fields.String(required=True, description="Fofa 查询语句")})​​@ns.route('/test')class TaskFofaTest(ARLResource):​    @auth    @ns.expect(test_fofa_fields)    def post(self):        """      测试Fofa查询连接      """        args = self.parse_args(test_fofa_fields)        query = args.pop('query')        data = fofa_query(query, page_size=1)        if isinstance(data, str):            return build_ret(ErrorMsg.FofaConnectError, {'error': data})​        if data.get("error"):            return build_ret(ErrorMsg.FofaKeyError, {'error': data.get("errmsg")})​        item = {            "size": data["size"],            "query": data["query"]      }​        return build_ret(ErrorMsg.Success, item)​​add_fofa_fields = ns.model('addTaskFofa', {    'query': fields.String(required=True, description="Fofa 查询语句"),    'name': fields.String(required=True, description="任务名"),    'policy_id': fields.String(description="策略 ID")})​​@ns.route('/submit')class AddFofaTask(ARLResource):​    @auth    @ns.expect(add_fofa_fields)    def post(self):        """      提交Fofa查询任务      """        args = self.parse_args(add_fofa_fields)        query = args.pop('query')        name = args.pop('name')        policy_id = args.get('policy_id')​        task_options = {            "port_scan_type": "test",            "port_scan": True,            "service_detection": False,            "service_brute": False,            "os_detection": False,            "site_identify": False,            "file_leak": False,            "ssl_cert": False      }​        data = fofa_query(query, page_size=1)        if isinstance(data, str):            return build_ret(ErrorMsg.FofaConnectError, {'error': data})​        if data.get("error"):            return build_ret(ErrorMsg.FofaKeyError, {'error': data.get("errmsg")})​        if data["size"] ></strong></p>  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: ARL分析与进阶使用