前三篇文章中创建了PSNet程序集,其中包含了对指定IP进行端口扫描,收发TCP消息包和收发UDP消息包的相关功能,作为这是最基本的对网络情况的最基本检测,后续的文章将会对此程序集进行不断的扩充使其包含更全面的功能。但是光有这些简单网络探测的功能还远远不够,为了能更全面的使用PowerShell针对网络安全进行检测,在本文中将会创建PSSecurity程序集用于存放相关通过PowerShell的脚本。参照前几篇文章中创建PSNet程序集的方法和目录结构创建PSSecurity程序集目录,便于后续对程序集的扩展。
具体详细的步骤请参见前几篇文章,创建PSSecurity程序集之后的目录结构和文件如下所示:
+D:\MY DOCUMENTS\WINDOWSPOWERSHELL\MODULES └─PSSecurity │ PSSecurity.psm1 │ └─SQLServer Get-SqlSysLogin.ps1
在$Profile中添加:
Import-Module $env:PSSpace\PSSecurity #用于在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:\Users\fuhj> Get-SqlSysLogin -ComputerName **.**.**.** -UserName sa -Password *********** Name : saCreated : 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 : **.**.**.**
后续思路:这里是对单台SQLServer服务器的登录尝试,如果通过对指定范围的IP进行端口的扫描发现相关的SQLServer服务器,而且能够有比较齐全的字典,对这个函数进行改造就可以字典模式暴力破解SQLServer的用户名、密码(注意:本文只提供安全攻防的思路,请勿对他人系统进行暴力尝试,否则后果由攻击者个人自行承担)。
本文创建了PSSecurity工具集,介绍了通过PowerShell尝试登录SQLServer的方法,此种方法可以用于暴力破解和穷举账户密码,穷举就需要依靠比较全面的字典的支持了。后续的文章中将会分别对PSNet和PSSecurity两个工具集进行扩充和升级,使其能适应真实环境的需求。
本文向大家介绍PowerShell脚本开发之尝试登录ftp,包括了PowerShell脚本开发之尝试登录ftp的使用技巧和注意事项,需要的朋友参考一下 上一篇文章介绍了通过PowerShell批量扫描IP段和端口,在PSNet程序集中添加了Invoke-ScanIPPort函数,这里尽管扫描到了指定IP端中监听的端口,但是未对端口和相应的程序进行对应,正如我们所知一些常用的应用程序使用的默认端口是
我正在使用selenium打开并登录google帐户,这是我的第一步。我已成功打开并填写了电子邮件回复,但在提交后,我收到了以下错误 “此浏览器或应用程序可能不安全。了解更多尝试使用不同的浏览器。如果您已经在使用受支持的浏览器,您可以刷新屏幕并重试登录。”来自谷歌。 有什么办法可以绕过这个问题吗?下面是我的代码。
本文向大家介绍PowerShell小技巧之尝试ssh登录,包括了PowerShell小技巧之尝试ssh登录的使用技巧和注意事项,需要的朋友参考一下 在PSNet程序集中继续进行扩展,在$env:PSSpace/PSNet/TCPOp/下创建Invoke-SSHLogin.ps1脚本用于在传入指定ssh地址、用户名和密码后返回是否登录成功。 在$env:PSSpace/PSNet/下创建Lib目录用
我有一个基本的Groovy脚本,我希望尽可能简单地创建日志。我希望消息转到标准输出,以及一个日志文件,日志文件中的每个条目都有一个时间戳。 我不能使用@Log符号,因为它是一个脚本,我没有要注入的类。否则我认为这将是理想的。
本文向大家介绍PowerShell脚本开发之收发TCP消息包,包括了PowerShell脚本开发之收发TCP消息包的使用技巧和注意事项,需要的朋友参考一下 在上篇文章中,我们在PSNet包中创建了Test-TCPPort函数用于探测指定IP的指定端口是否开放,检测端口之后大多数人想到的可能就是需要通过PowerShell收发TCP消息包了,这篇文章里将会描述如何在PSNet包中创建针对TCP消息包
本文向大家介绍PowerShell脚本开发之收发UDP消息包,包括了PowerShell脚本开发之收发UDP消息包的使用技巧和注意事项,需要的朋友参考一下 在上篇文章中,在PSNet工具集中创建了Send-TCPMessage和Receive-TCPMessage两个函数实现了通过PowerShell收发TCP消息包的功能,有了TCP包的发送和接收,自然少不了UDP消息包的发送和接收,本文将会介绍