NỘI DUNG
Tiếp theo nội dung Bash Script – Demo tìm và “diệt” Subdomains với các combo grep/awk/cut, Regular Expression và For loop, kỳ này tôi lại tiếp tục dựa hơi ông Offensive Security để triển một phần demo với Bash Script. Nội dung kỳ này sẽ tập trung vào việc sử dụng cơ sở dữ liệu Exploit Database (một lần nữa lại phải đội ơn ông Offensive Security) trong quá trình Penetration Testing (gọi tắt là Pentest cho đỡ mỏi tay/ mỏi mồm).
Để xử lý mục tiêu nói trên, ngoài một đối tượng tương đối mới là SearchSploit utility, bạn sẽ gặp lại các người quen piping, grep, cut, sed, wget và For loop trong Bash Script.
Ngoài ra, để hình dung được “hoàn cảnh lịch sử” của nội dung demo, tôi cũng sẽ có phần giới thiệu tóm lược về Exploit Database. Dù Exploit Database có vẻ là “kép phụ” trong nội dung demo này, tuy nhiên, nếu ngồi lại tĩnh tâm chiêm nghiệm, bạn sẽ thấy nó thật sự là “vai chính” trong quá trình chế tác các script để nâng cấp kho vũ khí của Pentester (tức là mấy ông theo nghiệp Pentest).
#1 Câu chuyện “bên lề” về Exploit Database
#1.1 Exploit Database vs Common Vulnerabilities and Exposures – CVE
Exploit Database là Repository (kho chứa) các Exploit (tôi tạm dịch là mã khai thác) hay Proof-Of-Concepts – POC tương ứng với các Vulnerability (lỗ hổng bảo mật) để hỗ trợ mấy ông làm Pentest hoặc nghiên cứu bảo mật.
Lưu ý: Proof-Of-Concepts – POC: hiểu đơn giản thì thằng này là một báo cáo ngắn gọn mô tả về Vulnerability (kèm theo kịch bản và khả năng tác động) và phương pháp khai thác (hiển nhiên có kèm theo các bằng chứng – Proof đã thực hiện chứ không phải chỉ chém gió cho sướng mồm).
Exploit Database sẽ có liên hệ chặt chẽ với Common Vulnerabilities and Exposures – CVE – “bộ sưu tập” các lỗ hổng bảo mật đã được xác định và công bố rộng rãi. Cụ thể, bạn có thể xem mối liên hệ này tại trang CVE – CVE Reference Map for Source EXPLOIT-DB (mitre.org) như sau.

Từ đây, bạn có thể đọc mã của Exploit Database và CVE tương ứng (ví dụ như cái CVE-2009-4186).

Bàn chi tiết về đám CVE là một công việc “fulltime” nên tôi xin phép cắt cái mạch câu chuyện ở đây để quay lại thằng Exploit Database.
#1.2 Exploit Database vs Google Hacking Database
Google Hacking (hay còn gọi là Google Dorking) là kỹ thuật thu thập thông tin bằng các sử dụng các chức năng nâng cao khi search với Google. Bí thuật này cho phép bạn “vô tình” lượm được các thông tin hoặc dữ liệu nhạy cảm dựa trên lỗ hổng bảo mật của các ứng dụng (phổ biến là ứng dụng web). Bạn có thể thử tìm các SQL files trên các trang web đã kích hoạt directory listing (liệt kê thư mục) với “intitle:"index of" filetype:sql
” như sau.

Lưu ý quan trọng: Bạn (và Google?) không hề có lỗi gì trong việc chạy và đọc kết quả các search query từ Google Hacking (lỗi là do định mệnh). Nhưng nếu bạn nảy ra “tối kiến” khai thác lỗ hổng dựa các kết quả của Google Hacking khi chưa được cho phép (bởi ông quản lý mục tiêu mà bạn khai thác) thì lúc này bao nhiêu tội lỗi sẽ đổ hết lên đầu bạn. Do vậy, hãy biết kềm chế, đừng vì một phút bốc đồng mà cả đời bốc sh*t nhé!
Ủa, mà vậy Google Hacking Database liên quan cái vẹo gì với Exploit Database? Xin thưa với bạn, 2 thằng này chẳng những liên quan và còn có mối “quan hệ hữu cơ biện chứng”.
Google Hacking Database được cho là sản phẩm của đại hiệp Johnny Long (và các thành viên tâm huyết trong cộng đồng) sau quá trình miệt mài thử nghiệm và phân loại các search query thành một cơ sở dữ liệu bài bản. Tác phẩm này sau đó đã được chuyển thể, à không, chuyển giao cho Offensive Security và được quản lý như extension của Exploit Database – Google Hacking Database (GHDB) – Google Dorks, OSINT, Recon (exploit-db.com).

Lưu ý: Hiện Google Hacking Database bao gồm dữ liệu từ các search engine khác như Bing và các online repository như GitHub chứ không phải mỗi Google.
Phù, đến đây tôi xin dừng câu chuyện về Exploit Database (chuyện bên lề, nhưng hình như hơi dài) để quay về với phần demo.
#2 Demo search và download từ Exploit Database với Bash Script
#2.1 Bối cảnh lịch sử
Trong “vụ án” được dàn cảnh này, bạn sẽ đóng vai một ông Pentester “nửa mùa” đang mần việc trên một mục tiêu chạy Windows và phát hiện ra một lỗ hổng có thể khai thác để thực hiện privilege escalation (tôi tạm dịch là leo thang đặc quyền – kiểu như user thường nhảy một phát lên làm admin ấy) trên hệ thống. Vì là “nửa mùa” nên bạn chỉ nhớ mang máng có một exploit liên quan bắt đầu với “afd” có thể xài được được trong tình huống này.
Cách thông thường, bạn sẽ bay vào https://www.exploit-db.com search ngay từ khóa “afd windows” và download exploit cần tìm. Nhìn chung, cách này gần như là “bản năng” và cũng tương đối nhanh. Tuy nhiên, với “nghiệp” Pentest, cái kịch bản tìm kiếm các exploit theo nhu cầu thực tế có khả năng sẽ lập lại nhiều lần. Do vậy, chỗ này nếu bạn đầu tư ít thời gian để soạn một cái Bash Script có chức năng search và download các exploit cần thiết một cách tự động từ Exploit Database cũng sẽ đáng đồng tiền bát gạo.
#2.2 Ngâm cứu thông tin để dựng Bash Script
Trên con Kali Linux, bạn đã có sẵn SearchSploit utility – tiện ích dạng command line để tìm tool trên Exploit Database (có cho phép bạn hốt về để làm offline). Cú pháp sử dụng cụ thể như sau:
searchsploit afd windows -w -t
Như vậy, ngoài từ khóa “afd windows” giống như search online, bạn sẽ cần thêm 2 option:
-w
: trả về URL tương ứng trên https://www.exploit-db.com thay vì local path;-t:
tìm theo exploit title.

Kết quả trả về cũng khá ngon, nhưng cũng như nội dung kỳ trước, bạn có thể tận dụng grep/cut để mông má lại kết quả đầu ra cho ngon hơn như sau:
searchsploit afd windows -w -t | grep http | cut -f 2 -d "|"

Lưu ý: Từ nội dung này trở về sau, tôi không trình bày lại các nội dung liên quan đến piping/grep/cut/sed/wget hoặc For loop nữa. Nếu chưa rõ, bạn có thể xem thêm ở các nội dung Bash Script – Demo tìm và “diệt” Subdomains với các combo grep/awk/cut, Regular Expression và For loop và Bash Script – Đánh tan lờ đờ, mệt mỏi của repetitive tasks với Loops và Function.
Bằng cách grep với “http” sau đó cut với delimiter “|”, sau đó hốt về cái field thứ 2, bạn sẽ có đúng cái URL cần thiết tương ứng với các exploit.
Nếu vô tia thử một cái exploit, ví dụ cái đầu tiên (40564), bạn sẽ thấy nó có tùy chọn dạng Raw (chỗ dấu “{}”).

Chui vô đó thử bạn sẽ thấy nó dẫn đến URL “https://www.exploit-db.com/raw/40564” với nội dung kiểu như sau:

Như vậy, chỗ này bạn có thể sử dụng Wget để nhanh chóng xúc nó về.
#2.3 Hiện thực hóa Bash Script search và download từ Exploit Database
Với các thông tin đã xác định trên, bạn có thể chạy Bash one-liner với For loop để hốt về đám Raw code của các exploit như sau:
for e in $(searchsploit afd windows -w -t | grep http | cut -f 2 -d "|"); do exp_name=$(echo $e | cut -d "/" -f 5) && url=$(echo $e | sed 's/exploits/raw/') && wget -q --no-check-certificate $url -O $exp_name; done
Sau đó kiểm tra xem “hàng” đã về chưa với:
ls -l

Như vậy đến đây bạn đã hốt sạch các exploit liên quan như yêu cầu. Nhìn chung, thì bạn có thể lưu cái Bash one-liner trên lại và hiệu chỉnh, sử dụng cho các nhu cầu tương tự sau này. Tuy nhiên, phương án đó có vẻ hơi “thô bỉ” với người “có biết” về Bash Script. Bạn có thể dùng một phiên bản ít “thô” (và thân thiện với người đọc hơn) như file ví dụ get_exploits.sh sau đây.
#!/bin/bash
# Search and download relatings exploits from Exploit Database.
for e in $(searchsploit afd windows -w -t | grep http | cut -f 2 -d "|")
do
exp_name=$(echo $e | cut -d "/" -f 5)
url=$(echo $e | sed 's/exploits/raw/')
wget -q --no-check-certificate $url -O $exp_name
done

Như vậy, ứng với mỗi cái e (tương ứng URL) trong cái list đã qua xử lý hốt về từ searchsploit, bạn sẽ:
- Thiết lập biến exp_name tương ứng tên của exploit ID (ví dụ như cái ID 40564 ở trên) nhờ vào cut;
- Thiết lập biến url dựa trên e, sử dụng sed để thay thế string “exploits” bằng string “raw” (bạn xem hình minh họa ngay bên dưới cho dễ hình dung);
- Đẩy cái url đã chế biến vô wget để hốt hàng về;
- Option
-q
của wget tương ứng với quiet mode – nghĩa là cứ im lặng mà làm, không nói năng hay hiển thị cái gì cả; - Phần “
--no-check-certificate
” nhằm thiết lập cho wget bỏ qua kiểm tra server certificate trong quá trình SSL/TLS handshake (Tôi có đề cập vấn đề này trong nội dung Giải ngố WWW – Phần 3: HTTPS có gì ngon hơn HTTP). Thiết lập này là nhằm để hỗ trợ việc demo nhanh gọn, thực tế, nếu có thể, bạn nên tránh dùng tùy chọn này; - Option
-O
của wget sẽ cho phép bạn lưu file với tên tương ứng với cái exp_name (exploit name) đã thiết lập trước đó.


Lưu ý:
- Trong ví dụ này, ngay sau dòng “#!/bin/bash”, bạn nên có một dòng mô tả tóm lược về script. Dòng mô tả này (và tên của script, ví dụ cáish ở trên) nên ngắn gọn và rõ ràng để giúp bạn nhanh chóng biết công dụng của script mà “bốc thuốc” cho đúng tình huống.
- Bạn có thể nâng cấp cái Bash Script nói trên bằng cách sử dụng Argument thay cho việc thiết lập “cứng” từ khóa “afd windows”. Nội dung sử dụng Argument cho Bash Script, sử dụng text editor để tạo file, phân quyền thực thi và chạy script tôi có trình bày ở nội dung Bash Script – La liếm với bộ 3 Variable, Argument & User Input. Khi đó bạn sẽ có 1 script linh hoạt sẵn sàng chinh chiến cho các exploit khác nhau phát sinh trong quá trìn Pentest;
Quay trở lại với kịch bản dàn cảnh ban đầu, với đám raw exploit đã hốt về, nhiệm vụ của bạn bây giờ là soi kèo nội dung của exploit và thử nghiệm để tìm đúng giải pháp cho đối tượng thực tế (Bạn có thể kiểm tra thử nội dung của 1 exploit với ví dụ như cat 40564).

Last but not least: Dù đây là bài demo hạng ruồi nhưng tôi thấy cũng cần nói rõ cụm từ “thử nghiệm” ở trên có nghĩa là bạn sẽ chạy thử exploit trên một môi trường nào đó khác với mục tiêu thật (ví dụ dựng con máy ảo tương tự mục tiêu). Chỉ sử dụng exploit trên mục tiêu thật khi bạn đã có cơ sở vững chắc để tin rằng đó nó sẽ hoạt động như bạn mong đợi chứ không tạo ra tình huống “chơi ngu lấy tiếng”.
1 thought on “Bash Script – Tăng cường hỏa lực Pentest với script search và download từ Exploit Database”