Bash Script – Tăng cường hỏa lực Pentest với script search và download từ Exploit Database

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, wgetFor 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 DatabaseRepository (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.

CVE-EXPLOIT-DB Reference Map
CVE-EXPLOIT-DB Reference Map

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

CVE Example
CVE Example

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.

Google Hacking example
Google Hacking example

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 DatabaseGoogle Hacking Database (GHDB) – Google Dorks, OSINT, Recon (exploit-db.com).

Google Hacking Database
Google Hacking Database

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ệpPentest, 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:

searchsploit command
searchsploit command

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 "|"

searchsploit command result
searchsploit command result

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 loopBash 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 “{}”).

ExploitDB raw link
ExploitDB raw link

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

ExploitDB raw example
ExploitDB raw example

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

script result
script result

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

get exploits script
get_exploits_script

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 đó.
test sed command
test sed command
get exploits script result
get exploits script result

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 exploitthử 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).

check exploit content
check exploit content

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”

Leave a Reply

Your email address will not be published. Required fields are marked *