PowerShell脚本开发尝试登录SQL Server
PowerShell脚本开发尝试登录SQL Server
发布时间:2016-12-28 来源:查字典编辑
摘要:前三篇文章中创建了PSNet程序集,其中包含了对指定IP进行端口扫描,收发TCP消息包和收发UDP消息包的相关功能,作为这是最基本的对网络情...

前三篇文章中创建了PSNet程序集,其中包含了对指定IP进行端口扫描,收发TCP消息包和收发UDP消息包的相关功能,作为这是最基本的对网络情况的最基本检测,后续的文章将会对此程序集进行不断的扩充使其包含更全面的功能。但是光有这些简单网络探测的功能还远远不够,为了能更全面的使用PowerShell针对网络安全进行检测,在本文中将会创建PSSecurity程序集用于存放相关通过PowerShell的脚本。参照前几篇文章中创建PSNet程序集的方法和目录结构创建PSSecurity程序集目录,便于后续对程序集的扩展。

具体详细的步骤请参见前几篇文章,创建PSSecurity程序集之后的目录结构和文件如下所示:

复制代码 代码如下:

+D:MY DOCUMENTSWINDOWSPOWERSHELLMODULES

└─PSSecurity

│ PSSecurity.psm1

└─SQLServer

Get-SqlSysLogin.ps1

在$Profile中添加:

复制代码 代码如下:

Import-Module $env:PSSpacePSSecurity #用于在PowerShell启动时自动加载PSSecurity程序集

其中PSSecurity.psm1中的内容如下:

复制代码 代码如下:

. $env:PSSpace/PSSecurity/SQLServer/Get-SqlSysLogin.ps1 #导入Get-SqlSysLogin函数

Write-Host "PSSecurity Module Added" -BackgroundColor green -ForegroundColor blue #用于提示此模块已加载

Export-ModuleMember -Function * #用于将函数导出为模块成员

接下来就是Get-SqlSysLogin.ps1的内容了

复制代码 代码如下:

=====文件名:Get-SqlSysLogin.ps1=====

function Get-SqlSysLogin {

Param(

[Parameter(Mandatory = $true,

Position = 0,

ValueFromPipeLine= $true)]

[Alias("PSComputerName","CN","MachineName","IP","IPAddress")]

[string]$ComputerName,

[parameter(Position = 1)]

[string]$UserName,

[parameter(Position = 2)]

[string]$Password

)

Process {

$Connection = New-Object System.Data.SQLClient.SQLConnection

if($userName) {

$Connection.ConnectionString = "Data Source=$ComputerName;Initial Catalog=Master;User Id=$userName;Password=$password;"

} else {

$Connection.ConnectionString = "server=$computerName;Initial Catalog=Master;trusted_connection=true;"

}

Try {

$Connection.Open()

$Command = New-Object System.Data.SQLClient.SQLCommand #创建SQLClient对象

$Command.Connection = $Connection

$Command.CommandText = "SELECT * FROM master.SYS.syslogins" #从syslogin表读取SQLServer登录账户

$Reader = $Command.ExecuteReader()

$Counter = $Reader.FieldCount

while ($Reader.Read()) {

$SQLObject = @{}

for ($i = 0; $i -lt $Counter; $i++) {

$SQLObject.Add(

$Reader.GetName($i),

$Reader.GetValue($i)

);

}

# 获取登录类型

$type =

if($sqlObject.isntname -eq 1) {

if($sqlObject.isntgroup -eq 1) {

"NT Group"

} else {

"NT User"

}

} else {

"SQL Server"

}

New-Object PSObject -Property @{

Name = $sqlObject.loginname;

Created = $sqlObject.createdate;

DenyLogin = [bool]$sqlObject.denylogin;

HasAccess = [bool]$sqlObject.hasaccess;

Type = $type;

SysAdmin = [bool]$sqlObject.sysadmin;

SecurityAdmin = [bool]$sqlObject.securityadmin;

ServerAdmin = [bool][bool]$sqlObject.serveradmin;

SetupAdmin = [bool]$sqlObject.setupadmin;

ProcessAdmin = [bool]$sqlObject.processadmin;

DiskAdmin = [bool]$sqlObject.diskadmin;

DBCreator = [bool]$sqlObject.dbcreator;

NTUser = [bool]$sqlObject.isNTUser;

ComputerName = $ComputerName

} | Select-Object Name, Created, Type, DenyLogin, HasAccess, SysAdmin, SecurityAdmin, ServerAdmin, SetupAdmin, ProcessAdmin, DiskAdmin, DBCreator, NTUser, ComputerName

}

$Connection.Close()

}

Catch {

$error[0]

}

}

}

启动PowerShell进程,可以用下面的两种方式调用

复制代码 代码如下:

Get-SqlSysLogin -ComputerName SRV01 -UserName sa -Password sa #单台主机登录尝试

"SQL01","SQL02","SQL03" | Get-SqlSysLogin -UserName sa -Password sa #多台主机登录尝试

其中ComputerName代表sqlserver的主机名或者IP;UserName是用户名,如果不填,则使用默认的windows身份认证,如果使用windows身份认证则需要确保当前登录允许可以通过windows身份认证登录;Password不用说就是密码了。

复制代码 代码如下:

PS C:Usersfuhj> Get-SqlSysLogin -ComputerName **.**.**.** -UserName sa -Password ***********

Name : sa

Created : 2003/4/8 9:10:35

Type : SQL Server

DenyLogin : False

HasAccess : True

SysAdmin : True

SecurityAdmin : False

ServerAdmin : False

SetupAdmin : False

ProcessAdmin : False

DiskAdmin : False

DBCreator : False

NTUser : False

ComputerName : **.**.**.**

Name : *****

Created : 2011/3/14 8:31:44

Type : SQL Server

DenyLogin : False

HasAccess : True

SysAdmin : False

SecurityAdmin : False

ServerAdmin : False

SetupAdmin : False

ProcessAdmin : False

DiskAdmin : False

DBCreator : False

NTUser : False

ComputerName : **.**.**.**

PowerShell脚本开发尝试登录SQL Server1

后续思路:这里是对单台SQLServer服务器的登录尝试,如果通过对指定范围的IP进行端口的扫描发现相关的SQLServer服务器,而且能够有比较齐全的字典,对这个函数进行改造就可以字典模式暴力破解SQLServer的用户名、密码(注意:本文只提供安全攻防的思路,请勿对他人系统进行暴力尝试,否则后果由攻击者个人自行承担)。

本文创建了PSSecurity工具集,介绍了通过PowerShell尝试登录SQLServer的方法,此种方法可以用于暴力破解和穷举账户密码,穷举就需要依靠比较全面的字典的支持了。后续的文章中将会分别对PSNet和PSSecurity两个工具集进行扩充和升级,使其能适应真实环境的需求。

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新PowerShell学习
热门PowerShell学习
脚本专栏子分类