Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions internal/functions/Get-DecryptedObject.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ function Get-DecryptedObject {
# Query Service Master Key from the database - remove padding from the key
# key_id 102 eq service master key, thumbprint 3 means encrypted with machinekey
Write-Message -Level Verbose -Message "Querying service master key"
$sql = "SELECT substring(crypt_property,9,len(crypt_property)-8) as smk FROM sys.key_encryptions WHERE key_id=102 and (thumbprint=0x03 or thumbprint=0x0300000001)"
$sql = "SELECT substring(crypt_property,9,datalength(crypt_property)-8) as smk FROM sys.key_encryptions WHERE key_id=102 and (thumbprint=0x03 or thumbprint=0x0300000001)"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What purpose does this change serve?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LEN returns the number of characters in the string, DATALENGTH returns the number of bytes.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i just see it here and did a test on my env and it works:
bugal/Powershell-Modules@606153b

there are other fix to workground for SQL cluster too ,you may need this NetSPI/Powershell-Modules#9

try {
$smkbytes = $server.Query($sql).smk
} catch {
Expand Down Expand Up @@ -115,14 +115,14 @@ function Get-DecryptedObject {
syslnklgns.name,
substring(syslnklgns.pwdhash,5,$ivlen) iv,
substring(syslnklgns.pwdhash,$($ivlen + 5),
len(syslnklgns.pwdhash)-$($ivlen + 4)) pass
datalength(syslnklgns.pwdhash)-$($ivlen + 4)) pass
FROM master.sys.syslnklgns
inner join master.sys.sysservers
on syslnklgns.srvid=sysservers.srvid
WHERE len(pwdhash) > 0"
WHERE datalength(pwdhash) > 0"
}
"Credential" {
"SELECT QUOTENAME(name) AS name,credential_identity,substring(imageval,5,$ivlen) iv, substring(imageval,$($ivlen + 5),len(imageval)-$($ivlen + 4)) pass from sys.credentials cred inner join sys.sysobjvalues obj on cred.credential_id = obj.objid where valclass=28 and valnum=2"
"SELECT QUOTENAME(name) AS name,credential_identity,substring(imageval,5,$ivlen) iv, substring(imageval,$($ivlen + 5),datalength(imageval)-$($ivlen + 4)) pass from sys.credentials cred inner join sys.sysobjvalues obj on cred.credential_id = obj.objid where valclass=28 and valnum=2"
}
}

Expand Down Expand Up @@ -199,4 +199,4 @@ function Get-DecryptedObject {
Password = $encode.GetString($decrypted)
}
}
}
}
14 changes: 11 additions & 3 deletions internal/functions/Resolve-IpAddress.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,17 @@ function Resolve-IpAddress {
)
$ping = New-Object System.Net.NetworkInformation.Ping
$timeout = 1000 #milliseconds
$destComputer=$null
if ($Server.GetType() -eq [Microsoft.SqlServer.Management.Smo.Server]) {
return $ping.Send($Server.ComputerName, $timeout).Address.IPAddressToString
if($server.computername){
$destComputer=$server.Computername
}elseif($server.ComputerNamePhysicalNetBIOS){
$destComputer=$server.ComputerNamePhysicalNetBIOS
}elseif($server.name){
$destComputer=$server.name
}
} else {
return $ping.Send($server.Split('\')[0], $timeout).Address.IPAddressToString
$destComputer=$server.Split('\')[0]
}
}
return $ping.Send($destComputer, $timeout).Address.IPAddressToString
}
10 changes: 8 additions & 2 deletions internal/functions/Resolve-NetBiosName.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,11 @@ Internal function. Takes a best guess at the NetBIOS name of a server.
[PSCredential]$SqlCredential
)
$server = Connect-SqlInstance -SqlInstance $SqlInstance -SqlCredential $SqlCredential
$server.ComputerName
}
if($server.ComputerName){
return $server.ComputerName
}elseif($server.ComputerNamePhysicalNetBIOS){
return $server.ComputerNamePhysicalNetBIOS
}else{
return $server.name
}
}