Python 侵入テスト: SQL と破棄
Pythonスキャンの利点は何ですか
「Nmap でスキャンできるのに、なぜ Python でスキャンする必要があるのですか?」さて、SQL データベースをスキャンするための簡単な Python スクリプトを作成することには、いくつかの利点があります。
- 横方向の移動: すでにネットワークの内側にいて、横方向の移動を試みている場合は、システムに Nmap をインストールしたくない場合があります。この場合の Python は、はるかに静かです。
- 精度: サーバーが SQL Server を実行しているかどうかを確認し、pyodbc を使用してデータベースのリストを取得するスクリプトを作成する精度は、より的を絞ったアプローチです。Nmap スキャンは、特定のポート番号が開いていることに依存しているため、精度が低くなることがあります。これは、ファイアウォールによって誤って構成されたり、難読化されたり、ブロックされたりする可能性があります。
- 速度: Python スキャンの速度は、nmap を使用してサーバーで開いているすべてのポートをスキャンするよりも効率的なアプローチである SQL Server インスタンスのみをチェックするため、はるかに高速になる可能性があります。
- 柔軟性: Python スクリプトは、見つかったデータベースのリストに基づいて必要なアクションを実行するように簡単に変更できますが、Nmap スキャンは開いているポートのリストのみを提供します。
最初にモジュールをインストールしましょう。socket モジュールは、ネットワーク接続に関する情報を取得するために使用される BSD ソケット インターフェイスへのアクセスを提供します。pyodbc は、ODBC (Open Database Connectivity) へのアクセスを提供する Python モジュールです。ODBC データベースは、ODBC 標準を使用してアクセスできるデータベースです。ODBC は、クライアント アプリケーションが Microsoft SQL Server、Oracle、MySQL、PostgreSQL などのデータベース管理システム (DBMS) にアクセスできるようにするプログラミング インターフェイスです。
import socket
import pyodbc
# set up the connection string template
connection_string = 'Driver=ODBC Driver 17 for SQL Server;Server=%s;Database=master;Trusted_Connection=yes;'
# define a function to check if a server is running SQL Server
def is_sql_server(server):
try:
socket.gethostbyname_ex(server)
conn = pyodbc.connect(connection_string % server)
cursor = conn.cursor()
cursor.execute('SELECT name FROM sys.databases')
databases = [database[0] for database in cursor.fetchall()]
conn.close()
return True, databases
except:
return False, []
次に、サーバーのリスト内の各サーバーをループして、is_sql_server関数を呼び出すことができます。サーバーが SQL Server を実行している場合は、サーバー名とデータベースのリストをデータベース ディクショナリに追加します。それ以外の場合は、SQL サーバーが見つからないことを画面に出力します
最後に、データベースのリストを出力します
# search for SQL databases on the network
servers = ['server1', 'server2', 'server3'] # replace with the names of the servers you want to search
databases = {}
for server in servers:
print(f'Searching {server}...')
is_running, database_list = is_sql_server(server)
if is_running:
print(f'{server} is running SQL Server with the following databases:')
print(database_list)
databases[server] = database_list
else:
print(f'{server} is not running SQL Server.')
# Print the list of databases
print('Found the following databases:')
print(databases)
このスクリプトを使用すると、ネットワーク上の SQL データベースを検索するプロセスをすばやく自動化できます。これは、レポート用にどのサーバーでどのデータベースが実行されているかを追跡する必要があるペネトレーション テスト担当者に役立ちます。この記事が気に入ったら、フォロー、拍手、返信をお願いします。ハッピーハンティング!
- GitHub ダイレクト リンク:
https://github.com/R-Eric-Kiser/python-pentesting/blob/main/SQL_Scan.py - Twitterで私が今何をしているかを見てください:https://twitter.com/R_Eric_Kiser

![とにかく、リンクリストとは何ですか?[パート1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































