Kiểm tra thâm nhập Python: SQL và Phá hủy
Lợi thế của quét Python là gì
Tôi biết, bạn hỏi “tại sao tôi cần quét bằng Python trong khi tôi có thể quét bằng Nmap?” Chà, có một số lợi thế khi tạo tập lệnh Python nhanh để quét cơ sở dữ liệu SQL:
- Chuyển động ngang: Nếu bạn đã ở bên trong mạng và đang thử chuyển động ngang, bạn có thể không muốn cài đặt Nmap trên hệ thống. Python trong trường hợp này sẽ yên tĩnh hơn nhiều.
- Độ chính xác: Độ chính xác của việc tạo tập lệnh kiểm tra xem máy chủ có đang chạy Máy chủ SQL hay không và sau đó truy xuất danh sách cơ sở dữ liệu bằng pyodbc, là một cách tiếp cận có mục tiêu hơn. Quét Nmap đôi khi có thể kém chính xác hơn vì chúng dựa vào một số cổng nhất định được mở, có thể bị cấu hình sai, bị xáo trộn hoặc bị chặn bởi tường lửa.
- Tốc độ: Tốc độ quét Python có thể tốt hơn nhiều do nó chỉ kiểm tra các phiên bản SQL Server, đây là cách tiếp cận hiệu quả hơn so với quét tất cả các cổng đang mở trên máy chủ bằng nmap.
- Tính linh hoạt: Tập lệnh Python có thể dễ dàng sửa đổi để thực hiện bất kỳ hành động mong muốn nào dựa trên danh sách cơ sở dữ liệu được tìm thấy, trong khi quá trình quét Nmap chỉ cung cấp danh sách các cổng đang mở.
Trước tiên hãy cài đặt các mô-đun. Mô-đun ổ cắm cung cấp quyền truy cập vào giao diện ổ cắm BSD, được sử dụng để lấy thông tin về các kết nối mạng. Pyodbc là một mô-đun Python cung cấp quyền truy cập vào ODBC (Kết nối cơ sở dữ liệu mở). Cơ sở dữ liệu ODBC là cơ sở dữ liệu có thể được truy cập bằng tiêu chuẩn ODBC. ODBC là một giao diện lập trình cho phép các ứng dụng khách truy cập các hệ thống quản lý cơ sở dữ liệu (DBMS), chẳng hạn như Microsoft SQL Server, Oracle, MySQL và PostgreSQL, v.v.
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, []
Sau đó, chúng ta có thể lặp qua từng máy chủ trong danh sách máy chủ và gọi hàm is_sql_server. Nếu máy chủ đang chạy Máy chủ SQL, chúng tôi sẽ thêm tên máy chủ và danh sách cơ sở dữ liệu vào từ điển cơ sở dữ liệu. Nếu không, chúng tôi in ra màn hình rằng chúng tôi không tìm thấy máy chủ SQL nào
Cuối cùng, chúng tôi in danh sách các cơ sở dữ liệu
# 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)
Tập lệnh này có thể được sử dụng để nhanh chóng tự động hóa quá trình tìm kiếm cơ sở dữ liệu SQL trên mạng, điều này có thể hữu ích cho những người kiểm tra thâm nhập, những người cần theo dõi cơ sở dữ liệu nào đang chạy trên máy chủ nào cho báo cáo của họ. Nếu bạn thích bài viết này, hãy theo dõi, vỗ tay và phản hồi. Đi săn vui nhé!
- Liên kết trực tiếp GitHub:
https://github.com/R-Eric-Kiser/python-pentesting/blob/main/SQL_Scan.py - Xem những gì tôi đang làm trên Twitter:https://twitter.com/R_Eric_Kiser

![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































