Chúng ta có thể sử dụng Python để tự động hóa các tác vụ khi thực hiện pentest. Các đoạn script có thể được biên dịch thành file executable cho Windows thông qua PyInstaller hoặc py2exe.
Scapy - gửi, lắng nghe, phân tích và làm giả các gói tin network.
Pwntools - một thư viện dành cho CTF và phát triển exploit.
Subdomain Enumeration
Cách hoạt động: sử dụng một danh sách các subdomain có sẵn và gắn vào trước URL rồi thử mở kết nối HTTP đến các subdomain đó.
Ví dụ:
Mảng sys.argv chứa các CLI argument.
Ngoài HTTP thì ta cũng có thể dùng giao thức DNS để tìm subdomain. Cụ thể, chúng ta có thể gửi DNS query đến DNS server nhằm tìm ra tất cả các subdomain có thể có của một domain nào đó.
Directory Enumeration
Đoạn script sau sẽ bruteforce directory trên trang web:
Có thể thấy, đoạn script trên bỏ qua các endpoint có status code là 404.
Chạy đoạn script trên với IP là 10.10.188.58:
Output:
Network Scanner
Có thể dùng Python để xây dựng một ICMP scanner nhằm tìm ra các host trong một network. Tuy nhiên, các gói tin ICMP có thể bị theo dõi hoặc bị chặn bởi hệ thống vì người dùng thường không thực hiện việc ping đến server. Ngoài ra, có một số hệ thống được cấu hình để không phản hồi lại các gói tin ICMP. Vì các lý do này, việc sử dụng ARP để tìm ra các host trong local network sẽ hiệu quả hơn.
Script sau sử dụng thư viện Scapy:
Port Scanner
Xét đoạn script quét port như sau:
Giải thích đoạn script trên:
Target IP là 10.10.188.58.
Khoảng port sẽ quét là 1 đến 65535 (lưu trong biến ports)
Hàm probe_port sẽ mở socket đến port. Nếu mở thành công thì return 0, ngược lại return 0.
Vòng lặp trên ports sẽ thêm các port đang mở vào mảng open_ports.
File Downloader
Có thể dùng Python để download file tương tự như tool wget.
Đoạn script dùng để download file:
Hash Cracker
Module hashlib trong Python hỗ trợ rất nhiều thuật toán băm mã hóa và có thể hỗ trợ chúng ta crack các giá trị hash.
Ví dụ sau crack MD5 hash:
Keyloggers
Module keyboard cho phép chúng ta tương tác với bàn phím.
Đoạn script sau sẽ ghi lại và lặp lại các phím (kể cả backspace) đã được nhấn:
Có thể thử bằng cách gõ vào một file text rồi nhấn enter.
SSH Brute Forcing
Module Paramiko giúp chúng ta xây dựng các SSH client và server.
Đoạn script bên dưới thực hiện bruteforce password của SSH:
Phân tích đoạn script trên:
Hàm paramiko.SSHClient() giúp tạo ra một SSH client.
Hàm ssh.connect() giúp mở kết nối SSH đến SSH server.
Nếu có exception paramiko.AuthenticationException thì tức là sai mật khẩu. Khi đó, ta dùng hàm ssh.close() để đóng kết nối SSH.
Đoạn script trên chạy khá chậm, sử dụng đa luồng để tối ưu:
Trong đoạn script trên, chúng ta phân hoạch danh sách mật khẩu cho n thread truyền vào.
Nếu số thread quá cao (chẳng hạn lớn hơn 4) thì sẽ xảy ra lỗi khi mở kết nối SSH. Lý do là vì nhiều cấu hình SSH giới hạn số kết nối đồng thời.
Câu lệnh sử dụng:
Với wordlist.txt là wordlist của room.
Tìm ra password của tiffany là trustno1. Truy cập vào và đọc được flag:
Success
THM-737390028
Extra Challenges
Một số ý tưởng xây dựng script:
Dùng DNS để tìm subdomain.
Xây dựng keylogger để gửi các phím đã nhấn về server.