🛠️自定义插件
您可以通过自定义插件的方式,实现你想要的任何能力。
作用
插件的能力和数量决定了AI安全助手的能力,我们会尽快内置足够多的常用能力插件,但难以覆盖全面,您可以通过自定义插件让AI掌握更多的技能。
例如:
通过插件代码实现自定义的功能
通过插件去调用您的产品或服务的API
插件类型
云插件(推荐):运行在云端,性能、带宽、并发较高,例如可快速检测50个目标是否存在SQL注入漏洞,而您无需支付任何费用。

本地插件:由客户端提供,运行在用户当前的电脑中,性能受到电脑配置和网络速度影响,但代码和运行过程均在本地,且可访问局域网网络,满足不同的场景(例如接入内部产品,代码中存在较为敏感的认证信息)。

环境配置
所有自定义插件只会运行在您独有的运行空间中,可确保你的插件代码不被泄露。
初始化
首次添加插件会弹出运行空间初始化,点击初始化等待1分钟即可。
第三方依赖包配置
插件的开发过程中经常需要使用第三方库,可通过此功能进行安装,每次修改大概1分钟左右。

插件权限
云插件可选择公开或私有,当选择私有时,只有您当前帐户的AI能使用,选择公开时所有人都可以使用,但任何情况都无法看到您的插件代码。
本地插件只会在您的本地存储和生效,所有人(包含我们)都无法查看到您的插件源码。
插件规范
代码结构
插件使用Python代码编写,格式如下:
import re
import json
import socket
#class plugin不可更改
class plugin:
#运行被AI助手使用的需要使用@staticmethod定义为静态函数
@staticmethod
def scan_allport(ipstr, ports_str='1-65535',**kw):
if re.search(r'[a-zA-Z]', ipstr):
ipstr = socket.gethostbyname(ipstr)
result = SDK.run_tools('masscan', ['-p', ports_str, ipstr, '--rate=6000'])
return json.dumps(re.findall('open port (.*?) on', result))除了以上备注里的2处规范外,插件格式没有其他要求,可自由编写。
高级用法
默认情况下插件返回字符串,可以通过定制插件return格式来达到更自定义的效果。
返回表格
return {"__table": [{'domain': 'test.secasst.com', 'ip': '1.1.1.1'},
{'domain': 'test.secasst.com', 'ip': '1.1.1.1'}]}返回原始内容
不希望AI对结果进行解读,期望在对话框中直接显示插件结果,可使用此方式
return {"__native": "AI安全助手测试 secasst.com"}返回文件
当插件的结果较长,超过模型的Token上限或者期望通过文件的方式在对话框中展示。
if len(result) >= 8000:
return {"__file": result}
return result返回图片
在对话框中显示图片
return {"__img": "图片的base64编码数据"}返回原生内容且不传递到云端(客户端特有)
当本地插件返回的数据较为敏感时,使用此格式即不会跟云端交互,但同时会失去上下文。
return {"__local": "敏感内容"}返回表格且不传递到云端(客户端特有)
以表格形式在对话框中展示,当本地插件返回的数据较为敏感时,使用此格式即不会跟云端交互,但同时会失去上下文。
return {"__local_table": [{'domain': 'test.secasst.com', 'ip': '1.1.1.1'},
{'domain': 'test.secasst.com', 'ip': '1.1.1.1'}]}推荐动作
插件执行完毕后,推荐下一步动作,可以跟所有展示格式指令同时生效
return {"result": "端口扫描结果", "__action": ["指纹识别以上web服务",
"使用masscan进行全端口扫描"]}插件调试
仅有简单的验证调试方式,推荐在本地完成测试后再添加到系统里
触发测试
发送 调用 插件名 参数 即可,如图

插件调用详情
自己添加的插件会额外出现 调用详情 信息,可用于判断传入的参数和返回结果是否符合预期。

最后更新于