การทดสอบการเจาะของ Python: SQL และการทำลาย
ข้อดีของการสแกน Python คืออะไร
ฉันรู้ คุณถามว่า “ทำไมฉันต้องสแกนด้วย Python ในเมื่อฉันสามารถสแกนด้วย Nmap ได้” มีข้อดีหลายประการในการสร้างสคริปต์ Python อย่างรวดเร็วเพื่อสแกนหาฐานข้อมูล SQL:
- การเคลื่อนไหวด้านข้าง: หากคุณอยู่ภายในเครือข่ายแล้วและกำลังพยายามเคลื่อนไหวด้านข้าง คุณอาจไม่ต้องการติดตั้ง Nmap บนระบบ Python ในกรณีนี้จะเงียบกว่ามาก
- ความแม่นยำ: ความแม่นยำของการสร้างสคริปต์ที่ตรวจสอบว่าเซิร์ฟเวอร์กำลังเรียกใช้ SQL Server หรือไม่ จากนั้นดึงรายการฐานข้อมูลโดยใช้ pyodbc ซึ่งเป็นวิธีที่ตรงเป้าหมายมากกว่า บางครั้งการสแกน Nmap อาจมีความแม่นยำน้อยกว่าเนื่องจากต้องพึ่งพาหมายเลขพอร์ตบางอย่างในการเปิด ซึ่งอาจกำหนดค่าผิด ทำให้สับสน หรือถูกบล็อกโดยไฟร์วอลล์
- ความเร็ว: ความเร็วในการสแกนของ Python นั้นดีกว่ามากเนื่องจากจะตรวจสอบเฉพาะอินสแตนซ์ของ SQL Server ซึ่งเป็นแนวทางที่มีประสิทธิภาพมากกว่าการสแกนพอร์ตที่เปิดอยู่ทั้งหมดบนเซิร์ฟเวอร์โดยใช้ nmap
- ความยืดหยุ่น: สคริปต์ Python สามารถแก้ไขได้อย่างง่ายดายเพื่อดำเนินการตามที่ต้องการตามรายการฐานข้อมูลที่พบ ในขณะที่การสแกน Nmap ให้เฉพาะรายการพอร์ตที่เปิดอยู่เท่านั้น
ก่อนอื่นมาติดตั้งโมดูลกันก่อน โมดูลซ็อกเก็ตให้การเข้าถึงอินเทอร์เฟซซ็อกเก็ต BSD ซึ่งใช้เพื่อรับข้อมูลเกี่ยวกับการเชื่อมต่อเครือข่าย pyodbc เป็นโมดูล Python ที่ให้การเข้าถึง ODBC (การเชื่อมต่อฐานข้อมูลแบบเปิด) ฐานข้อมูล ODBC เป็นฐานข้อมูลที่สามารถเข้าถึงได้โดยใช้มาตรฐาน ODBC ODBC เป็นอินเทอร์เฟซการเขียนโปรแกรมที่อนุญาตให้แอปพลิเคชันไคลเอ็นต์เข้าถึงระบบจัดการฐานข้อมูล (DBMS) เช่น Microsoft SQL Server, Oracle, MySQL และ PostgreSQL และอื่นๆ
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)