freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

调用Python脚本进行漏洞测试的PythonCall
2021-07-30 20:12:08

前言

站在红队的角度,Goby 是一款优秀的渗透测试工具,特点十分鲜明。在漏洞扫描上,一是设备规则集丰富,目前已支持超过 10 万种设备和业务系统,二是部署方便,可部署在任意单机,无需进行复杂的配置。在漏洞录入上,Goby 自研的漏洞扫描框架由 Golang 语言编写,目前的漏洞录入有两种形式,一是通过 JSON 格式录入漏洞发包和判断的逻辑,二是使用 Golang 代码编写发包和判断逻辑。在漏洞开发上,如果能够引入 Python 环境支持运行 Python 脚本,不仅可以提高开发效率,支持更多通信协议,而且能够以此种方式为模板,同其他工具进行联动,实现漏洞的更有效利用。

0×01 插件使用

1.1 插件效果

1.2 使用方法

1.下载插件 PythonCall

在 Goby 的扩展程序页面,找到 PythonCall,点击下载按钮

2. 配置 Python 安装路径和存储 Python 脚本的文件夹路径

在 Goby 的扩展程序页面中,在“已下载”标签中找到 PythonCall,点击配置按钮,填入配置信息

注:Windows系统下,在填写配置信息时,由于转义字符,文件路径需要使用两个反斜

示例:Python安装路径为C:\Python3\Python.exe,存储Python脚本的文件夹路径为C:\exp

对应的配置信息为:

pythonInstallationPath:C:\\Python3\\Python.exe

pythonScriptFolder: C:\\exp

3.将你的 Python 脚本统一放置在存储Python脚本的文件夹中

每个 Python 脚本的名称需要同漏洞名称保持一致

示例:针对漏洞 CVE-2019-0708 BlueKeep Microsoft Remote Desktop RCE,你需要将Python 脚本保存至c:\exp\CVE-2019-0708 BlueKeep Microsoft Remote Desktop RCE.py

Python 脚本的启动方式:将目标的 url 作为启动参数

注:poctest1.py的内容为:

import os

import sys

if __name__ == "__main__":

print(sys.argv[1])

a = input("wait")

4.单击漏洞相关页面上的 pyexp 按钮

0×02 插件开发

2.1 开发思路

参考了插件示例中的漏洞列表页 - vulList,点击按钮可以一键调用本地 Metasploit 框架,对漏洞进行检测。

结合实际应用场景,简化用户操作,我对代码结构重新进行了设计。

2.1.1漏洞匹配逻辑

最简单的漏洞匹配方式是建立一个映射,每个漏洞对应一个 Python 脚本。但对于用户来说,如果有多个 Python 脚本,需要逐一建立映射。

为了简化用户操作,使用漏洞名称作为映射规则,每个 Python 脚本使用 Goby 定义的漏洞名称作为命名规则。这样一来,用户只需要设置存储 Python 脚本的文件夹即可。

实现代码:

goby.registerCommand('pyexp', function (content) {
let config = goby.getConfiguration();
let pythonInstallationPath = config.pythonInstallationPath.default; 
let pythonScriptFolder = config.pythonScriptFolder.default;              
let ip = content.hostinfo;
if (!pythonInstallationPath) return goby.showInformationMessage('Please set the python installation path');
if (!pythonScriptFolder) return goby.showInformationMessage('Please set the path of the folder where the python scripts are stored');
let cmd = `${pythonInstallationPath} "${pythonScriptFolder}${content.name}.py" ${ip}`;
if (os.type() == 'Windows_NT') {
//windows        
cp.exec(`start ${cmd}`);
} else if (os.type() == 'Darwin') {
//mac           
cp.exec(`osascript -e 'tell application "Terminal" to do script "${cmd}"'`);
} else if (os.type() == 'Linux') {
//Linux
cp.exec(`bash -c "${cmd}"`);
}
});

2.1.2 按钮显示逻辑

实现效果:只在有对应 Python 脚本的漏洞页面显示执行按钮

实现流程:

将按钮属性定义为变量 pyexp_visi

在启动插件时,通过 content.name读出漏洞名称

拼接出 Python 脚本的绝对路径

调用 fs.statSync 判断 Python 脚本是否存在,如果存在,返回 true,显示按钮

注:判断 Python 脚本是否存在时需要使用同步方法 fs.statSync,获得正确的返回结果。如果使用异步方法 fs.stat,将无法返回正确结果。

实现代码:

goby.registerCommand('pyexp_visi', function (content) {

let config = goby.getConfiguration();

let pythonScriptFolder = config.pythonScriptFolder.default;

let sub_str = pythonScriptFolder.substr(pythonScriptFolder.length - 1. 1);

if (sub_str != '\\') {

pythonScriptFolder = pythonScriptFolder + "\\";

}

let scriptPath = `${pythonScriptFolder}${content.name}.py`;

stats = fs.statSync(scriptPath);

if (stats.isFile() == true) {

return true;

}

});

2.2 开发技巧

因为是第一次开发 Goby 插件,记录一下开发过程中需要注意的地方:

extension.js 的语法格式参考 Node.js

windows 系统由于转义字符,反斜杠需要使用两个反斜杠表示

图标文件需要使用 png 格式,确保背景透明,否则无法适配不同主题

操作演示的 gif 文件需要图床地址,可以选择 ImgURL免费图床

做好版本控制,每次更新插件时,package.json 中的 version 需要递增

默认文档使用英文编写,还需要添加中文翻译文件

上传插件需要使用 Goby 客户端,登录后进入个人插件管理,选择【新建插件】;若是需要更新插件版本,选择对应插件的【更新插件】即可。

0×03 小结

结合开发文档和插件示例,我们可以很容易的实现自己的想法,扩展Goby的能力。后续我会结合实战经验,继续开发一些后渗透插件,分享到社区。

插件开发文档及Goby开发版下载:

[Goby - Attack surface mapping](https://gobies.org/docs.html)

关于插件开发在B站都有详细的教学,欢迎大家到弹幕区合影~

https://www.bilibili.com/video/BV1u54y147PF/

文章来自Goby社区成员:Eyes,转载请注明出处。

# 工具 # 网络安全 # 插件
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录