SolarWinds Orion开发指南

0x00 前言
SolarWinds Orion平台是一个统一的网络和系统管理产品套件 , 可用于监控IT基础架构 。我们可以通过SolarWinds Information Service (SWIS)访问Orion平台中的数据 。
在程序实现上 , 我们可以借助SolarWinds Orion API进行开发 , 但是在最近的漏洞利用上 , 我们无法直接使用SolarWinds Orion API 。
本文将要介绍SolarWinds Orion API的用法 , 分析无法直接使用的原因 , 提供一种解决方法 , 开源两个测试代码 。
0x01 简介
本文将要介绍以下内容:
?SolarWinds Orion API的使用
?模拟网页操作的实现
?开发细节
?开源代码
0x02 SolarWinds Orion API的使用
参考资料:
https://github.com/solarwinds/OrionSDK/wiki
Python语言可使用orionsdk库进行开发 , 地址如下:
https://github.com/solarwinds/orionsdk-python
在引入orionsdk库后 , 可以很容易的实现以下功能:
?query
?invoke
?create
【SolarWinds Orion开发指南】?read
?update
?bulkupdate
?delete
?bulkdelete
为了研究SolarWinds Orion API的实现细节 , 决定不借助orionsdk库实现相同的功能 。
语法格式的参考资料:
https://github.com/solarwinds/OrionSDK/wiki/REST
对于SolarWinds Orion API , 需要注意以下细节:
1.接口地址
默认接口地址为https://:17778/SolarWinds/InformationService/v3/Json/
2.用户验证
添加Header: Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
其中 , dXNlcm5hbWU6cGFzc3dvcmQ为username:password作Base64编码后的结果 。
3.数据查询
通过POST发送查询命令 , 格式为application/json类型 。
SolarWinds Orion API使用SolarWinds Query Language (SWQL) , 类似于SQL语法 。
数据库的表项可以通过本地搭建测试环境 , 执行SolarWinds Orion下的DataBase Manager进行查看 。
查询数据库的示例代码:
SolarWinds Orion开发指南
文章图片

文章图片
在Python代码开发上 , 需要考虑以下细节:
1.将字典作为命令行参数传递
可以先通过命令行参数传入字符串 , 再将字符串转义为json字符串 。
固定参数的用法示例:
将字典作为命令行参数传递的用法示例:
SolarWinds Orion开发指南
文章图片

文章图片
2.将列表作为命令行参数传递
可以先通过命令行参数传入字符串 , 再将字符串转为列表 。
将列表作为命令行参数传递的用法示例:
SolarWinds Orion开发指南
文章图片

文章图片
完整的实现代码已上传至Github , 地址如下:
https://github.com/3gstudent/Homework-of-Python/blob/master/SolarWindsOrionAPI_Manage.py
代码支持以下功能:
?query
?invoke
?create
?read
?update
?bulkupdate
?delete
?bulkdelete
为了便于使用 , 省去输入查询语句的过程 , 还支持以下功能:
?GetAccounts
?GetAlertActive
?GetAlertHistory
?GetCredential
?GetNodes
?GetOrionServers
猜测是出于安全考虑 , SolarWinds Orion API的功能有限 , 有些数据库无法进行查询 , 例如VirtualMachines表(存储虚拟机信息)、CredentialProperty表(存储凭据信息)、Accounts表的PasswordHash项和PasswordSalt项 。
已公开的SolarWinds漏洞(CVE-2020-10148、CVE-2020-27870、CVE-2020-27871、CVE-2021-31474)涉及的均为网络协议接口((默认为https://:8787/Orion/) , 同SolarWinds Orion API不同 , 所以无法结合利用
0x03 模拟网页操作的实现
为了结合漏洞利用 , 我们需要网页登录 , 通过抓取数据包的方式实现同SolarWinds Orion的数据交互 , 功能同SolarWinds Orion API的功能保持一致 。