
SQLReconをベースにした、Python製の攻撃用MSSQLツールキット
PySQLRecon
PySQLRecon は、@sanjivkawa 氏による素晴らしい SQLRecon プロジェクトの Python 移植版です。機能一覧は commands セクションを参照してください。
PySQLRecon を使用した SCCM TAKEOVER-1 のデモンストレーション 記事 もご覧ください。
PySQLRecon は pip3 install pysqlrecon でインストールするか、このリポジトリをクローンして pip3 install . を実行することでインストールできます。
SQLRecon の主要モジュールはすべて同等のコマンドを備えています。[PRIV] と記載されたコマンドは、昇格された権限または sysadmin 権限が必要です。一方、[NORM] とマークされたコマンドは、通常のユーザーでも実行できる可能性が高く、昇格された権限は必要ありません。
権限借用 ([I]) またはリンクサーバー上での実行 ([L]) のサポートは、コマンド説明の末尾に示されています。
adsi [PRIV] Obtain ADSI creds from ADSI linked server [I,L]
agentcmd [PRIV] Execute a system command using agent jobs [I,L]
agentstatus [PRIV] Enumerate SQL agent status and jobs [I,L]
checkrpc [NORM] Enumerate RPC status of linked servers [I,L]
clr [PRIV] Load and execute .NET assembly in a stored procedure [I,L]
columns [NORM] Enumerate columns within a table [I,L]
databases [NORM] Enumerate databases on a server [I,L]
disableclr [PRIV] Disable CLR integration [I,L]
disableole [PRIV] Disable OLE automation procedures [I,L]
disablerpc [PRIV] Disable RPC and RPC Out on linked server [I]
disablexp [PRIV] Disable xp_cmdshell [I,L]
enableclr [PRIV] Enable CLR integration [I,L]
enableole [PRIV] Enable OLE automation procedures [I,L]
enablerpc [PRIV] Enable RPC and RPC Out on linked server [I]
enablexp [PRIV] Enable xp_cmdshell [I,L]
impersonate [NORM] Enumerate users that can be impersonated
info [NORM] Gather information about the SQL server
links [NORM] Enumerate linked servers [I,L]
olecmd [PRIV] Execute a system command using OLE automation procedures [I,L]
query [NORM] Execute a custom SQL query [I,L]
rows [NORM] Get the count of rows in a table [I,L]
sample [NORM] Query a sample of table data [I,L]
sccm [SUBM] Submodule for SCCM specific commands
search [NORM] Search a table for a column name [I,L]
smb [NORM] Coerce NetNTLM auth via xp_dirtree [I,L]
tables [NORM] Enumerate tables within a database [I,L]
users [NORM] Enumerate users with database access [I,L]
whoami [NORM] Gather logged in user, mapped user and roles [I,L]
xpcmd [PRIV] Execute a system command using xp_cmdshell [I,L]
SCCM コマンドは pysqlrecon [OPTIONS] sccm -h で確認できます(これにはグローバルフラグの指定が必要です。usage を参照)。
addadmin [PRIV] Elevate an account to Full Administrator [I]
credentials [NORM] Display encrypted credentials [I]
logons [NORM] Display SCCM clients and last logged on user [I]
removeadmin [PRIV] Remove elevated account or elevated privileges [I]
sites [NORM] Gather SCCM site info [I]
taskdata [NORM] Decrypt task sequences [I]
tasklist [NORM] Display task sequences [I]
users [NORM] Enumerate SCCM users [I]
PySQLRecon にはグローバルオプション(任意のコマンドで利用可能)があり、一部のコマンドでは追加のフラグが導入されます。すべてのグローバルオプションはコマンド名 より前に 指定する必要があります:
pysqlrecon [GLOBAL_OPTS] COMMAND [COMMAND_OPTS]
グローバルオプションの表示:
pysqlrecon --help
コマンド固有のオプションの表示:
pysqlrecon [GLOBAL_OPTS] COMMAND --help
認証先データベース、または特定の PySQLRecon コマンド(query、tables、columns、rows)で使用するデータベースを変更するには、--database フラグを使用します。
PySQLRecon コマンドの実行対象を(認証先の SQL サーバーではなく)リンクサーバーにするには、--link フラグを使用します。
PySQLRecon コマンド実行時にユーザーアカウントを権限借用するには、--impersonate フラグを使用します。
--link と --impersonate は互換性がありません。
ntlmrelayxPySQLRecon は proxychains と組み合わせて、mssql:// サービスを対象としたリレー認証を利用できます。ntlmrelayx セッションの動作上、PySQLRecon 実行時に --database パラメータは尊重されません(リレーセッションは常に master データベースに接続されます)。これは特に SCCM モジュールを使用する際に問題となる可能性があります。SCCM モジュールではサイトデータベースの指定が必要です。これを修正するには、最初に query モジュールを使用してデータベースコンテキストを変更します(これにより、同じリレーセッション内での後続の PySQLRecon 使用全体にわたって変更が保持されます)。例:
proxychains4 pysqlrecon -t <target> -d <DOMAIN> -u <username> -p FAKE query --query 'use new_db_name'
これで、同じ ntlmrelayx セッションから、--database を指定しなくても、その特定のデータベース内のリソースを対象としたモジュール/クエリを実行できます。
pysqlrecon は依存関係の管理に uv を使用しています。ソースからインストールし、開発用にセットアップするには:
# Install uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# Install pysqlrecon
git clone https://github.com/tw1sm/pysqlrecon
cd pysqlrecon
uv sync
uv run pysqlrecon --help
PySQLRecon は簡単に拡張可能です。resources 内のテンプレートと手順を参照してください。