Tự động hóa đã là một từ buzz từ khá lâu nay, nhưng các nguyên tắc đằng sau nó vẫn mạnh mẽ hơn bao giờ hết. Đối với một hacker hoặc pentester, Bash script là một hình thức tự động hóa không thể bỏ qua. Hầu như bất kỳ lệnh nào có thể được chạy từ thiết bị đầu cuối đều có thể được viết kịch bản – và trong nhiều trường hợp – để tiết kiệm thời gian và công sức quý giá. Và một kịch bản Bash chỉ xảy ra là tuyệt vời để điều chỉnh.
Bước 1 Bắt đầu tập lệnh
Để bắt đầu, hãy tạo một tập lệnh Bash và đặt tên cho nó bất cứ thứ gì bạn thích. Tôi sẽ gọi tôi là recon.sh . Sử dụng trình soạn thảo văn bản yêu thích của bạn , làm cho dòng đầu tiên trông như thế này:
#!/bin/bash
Tiếp theo, chúng tôi sẽ đảm bảo người dùng cung cấp đầu vào cho tập lệnh và nếu không, sẽ in một ví dụ sử dụng và thoát. Sử dụng khối if-then có điều kiện:
if [ -z "$1" ]
then
echo "Usage: ./recon.sh <IP>"
exit 1
fi
Các $1 là lập luận chúng tôi sẽ vượt qua kịch bản, và -z tùy chọn trả về true nếu chuỗi là null. Về cơ bản, điều này nói nếu không có đối số nào được thông qua, hãy in ví dụ sử dụng và thoát. Đối số chúng tôi sẽ sử dụng là một địa chỉ IP.
Bước 2 Quét máy chủ
Phần tiếp theo sẽ chạy quét Nmap trên địa chỉ IP máy chủ cung cấp. Đầu tiên, sẽ in một tiêu đề cho Nmap chỉ để giữ cho mọi thứ đẹp và có tổ chức:
printf "\n----- NMAP -----\n\n" > results
Chúng tôi sử dụng printf ở đây vì nó xử lý các dòng mới (\ n) đáng tin cậy hơn echo. Điều này đang được ghi vào một tệp văn bản gọi là results – trước tiên nó sẽ tạo tệp vì nó chưa tồn tại và nó sẽ ghi đè lên tệp trong tương lai với các lần quét tiếp theo.
Tiếp theo, sẽ in một tin nhắn và thực sự chạy lệnh:
echo "Running Nmap..."
nmap $1 | tail -n +5 | head -n -3 >> results
Lệnh nmap lấy đối số chúng tôi đã cung cấp tập lệnh, địa chỉ IP và nối các kết quả vào tệp đầu ra . Các lệnh tail và head loại bỏ một số dòng từ đầu và cuối của đầu ra Nmap – đây chỉ là sở thích cá nhân của tôi và làm cho nó trông gọn gàng hơn theo quan điểm của tôi.
Bước 3 Liệt kê HTTP
Phần tiếp theo sẽ lấy kết quả quét Nmap và cố gắng liệt kê HTTP nếu đáp ứng một số tiêu chí nhất định. chạy Gobuster để quét các thư mục và WhatWeb để có được một số thông tin về máy chủ web.
Sẽ sử dụng một vòng lặp while để đọc từng dòng từ tệp kết quả nếu nó tìm thấy một cổng mở chạy HTTP, nó sẽ khởi động Gobuster và WhatWeb:
while read line
do
if [[ $line == *open* ]] && [[ $line == *http* ]]
then
echo "Running Gobuster..."
gobuster dir -u $1 -w /usr/share/wordlists/dirb/common.txt -qz > temp1
echo "Running WhatWeb..."
whatweb $1 -v > temp2
fi
done < results
Nếu tìm thấy cổng HTTP mở, mã trong khối if-then sẽ chạy. Gobuster lấy địa chỉ IP mà chúng tôi cung cấp làm tùy chọn -u và sử dụng danh sách từ được chỉ định bởi tùy chọn -w . Chúng tôi cũng sẽ sử dụng các tùy chọn -q và -z ở đây để vô hiệu hóa biểu ngữ và ẩn tiến trình – một lần nữa, chỉ để giữ đầu ra gọn gàng. Điều này sẽ ghi vào một tệp tạm thời sẽ được sử dụng sau này trong tập lệnh.
WhatWeb chỉ cần lấy địa chỉ IP mà chúng tôi đã cung cấp và ghi đầu ra vào một tệp tạm thời thứ hai. Các -v tùy chọn ở đây cho chúng ta tiết kết quả. Khi vòng lặp while làm cạn kiệt tất cả các dòng của tệp kết quả, nó sẽ hoàn thành và tập lệnh chuyển sang phần tiếp theo.
Bước 4 Hiển thị kết quả
Khối mã tiếp theo sẽ xác định xem các tệp tạm thời từ trước đó có tồn tại không và nếu có, sẽ nối thêm đầu ra vào tệp kết quả chính:
if [ -e temp1 ]
then
printf "\n----- DIRS -----\n\n" >> results
cat temp1 >> results
rm temp1
fi
if [ -e temp2 ]
then
printf "\n----- WEB -----\n\n" >> results
cat temp2 >> results
rm temp2
fi
Các -e tùy chọn kiểm tra nếu tập tin tồn tại – nếu có, mã sau rồi chạy. Nó in một tiêu đề khác, ghi nội dung của tệp tạm thời vào kết quả của chúng tôi và xóa tệp tạm thời.
Cuối cùng, dòng cuối cùng của tập lệnh của chúng tôi sẽ chỉ hiển thị kết quả trên màn hình của chúng tôi:
cat results
Bước 5 Xem lại tập lệnh
Toàn bộ kịch bản bây giờ trông như thế này:
#!/bin/bash
if [ -z "$1" ]
then
echo "Usage: ./recon.sh <IP>"
exit 1
fi
printf "\n----- NMAP -----\n\n" > results
echo "Running Nmap..."
nmap $1 | tail -n +5 | head -n -3 >> results
while read line
do
if [[ $line == *open* ]] && [[ $line == *http* ]]
then
echo "Running Gobuster..."
gobuster dir -u $1 -w /usr/share/wordlists/dirb/common.txt -qz > temp1
echo "Running WhatWeb..."
whatweb $1 -v > temp2
fi
done < results
if [ -e temp1 ]
then
printf "\n----- DIRS -----\n\n" >> results
cat temp1 >> results
rm temp1
fi
if [ -e temp2 ]
then
printf "\n----- WEB -----\n\n" >> results
cat temp2 >> results
rm temp2
fi
cat results
Bước 6 Chạy tập lệnh
Bây giờ chúng ta nên sẵn sàng để chạy kịch bản trinh thám của chúng tôi. Trong ví dụ của tôi, tôi đang sử dụng Metasploitable 2 làm mục tiêu.
Đầu tiên, làm cho tập lệnh thực thi:
~# chmod +x recon.sh
Nếu chúng ta cố gắng chạy nó mà không có đối số, nó sẽ cho chúng ta ví dụ sử dụng:
~# ./recon.sh
Usage: ./recon.sh <IP>
Chỉ cần cung cấp địa chỉ IP và chạy lại:
~# ./recon.sh 10.10.0.50
Running Nmap...
Running Gobuster...
Running WhatWeb...
/usr/lib/ruby/vendor_ruby/target.rb:188: warning: URI.escape is obsolete
----- NMAP -----
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
23/tcp open telnet
25/tcp open smtp
53/tcp open domain
80/tcp open http
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
512/tcp open exec
513/tcp open login
514/tcp open shell
1099/tcp open rmiregistry
1524/tcp open ingreslock
2049/tcp open nfs
2121/tcp open ccproxy-ftp
3306/tcp open mysql
5432/tcp open postgresql
5900/tcp open vnc
6000/tcp open X11
6667/tcp open irc
8009/tcp open ajp13
8180/tcp open unknown
----- DIRS -----
/.hta (Status: 403)
/.htaccess (Status: 403)
/.htpasswd (Status: 403)
/.bash_history (Status: 200)
/cgi-bin/ (Status: 403)
/dav (Status: 301)
/phpMyAdmin (Status: 301)
/index (Status: 200)
/index.php (Status: 200)
/test (Status: 301)
/twiki (Status: 301)
/phpinfo (Status: 200)
/phpinfo.php (Status: 200)
----- WEB -----
WhatWeb report for http://10.10.0.50
Status : 200 OK
Title : Metasploitable2 - Linux
IP : 10.10.0.50
Country : RESERVED, ZZ
Summary : WebDAV[2], X-Powered-By[PHP/5.2.4-2ubuntu5.24], Apache[2.2.8], PHP[5.2.4-2ubuntu5.24], HTTPServer[Ubuntu Linux][Apache/2.2.8 (Ubuntu) DAV/2]
Detected Plugins:
[ Apache ]
The Apache HTTP Server Project is an effort to develop and
maintain an open-source HTTP server for modern operating
systems including UNIX and Windows NT. The goal of this
project is to provide a secure, efficient and extensible
server that provides HTTP services in sync with the current
HTTP standards.
Version : 2.2.8 (from HTTP Server Header)
Google Dorks: (3)
Website : http://httpd.apache.org/
[ HTTPServer ]
HTTP server header string. This plugin also attempts to
identify the operating system from the server header.
OS : Ubuntu Linux
String : Apache/2.2.8 (Ubuntu) DAV/2 (from server string)
[ PHP ]
PHP is a widely-used general-purpose scripting language
that is especially suited for Web development and can be
embedded into HTML. This plugin identifies PHP errors,
modules and versions and extracts the local file path and
username if present.
Version : 5.2.4-2ubuntu5.24
Google Dorks: (2)
Website : http://www.php.net/
[ WebDAV ]
Web-based Distributed Authoring and Versioning (WebDAV) is
a set of methods based on the Hypertext Transfer Protocol
(HTTP) that facilitates collaboration between users in
editing and managing documents and files stored on World
Wide Web servers. - More Info:
http://en.wikipedia.org/wiki/WebDAV
Version : 2
[ X-Powered-By ]
X-Powered-By HTTP header
String : PHP/5.2.4-2ubuntu5.24 (from x-powered-by string)
HTTP Headers:
HTTP/1.1 200 OK
Date: Wed, 19 Jun 2019 18:03:39 GMT
Server: Apache/2.2.8 (Ubuntu) DAV/2
X-Powered-By: PHP/5.2.4-2ubuntu5.24
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html
Nó cho chúng ta biết những gì đang chạy (bỏ qua lỗi ruby cho WhatWeb) và in ra một màn hình hiển thị kết quả khi hoàn thành.
Mở rộng tập lệnh
Ở trạng thái hiện tại, tập lệnh Bash này không phức tạp. Nó chạy quét Nmap và nếu tìm thấy một cổng HTTP mở, nó sẽ khởi động Gobuster và WhatWeb. Mặc dù hữu ích, điều này có thể được mở rộng theo nhiều cách.
Trước hết, chạy quét Nmap cơ bản. có thể quét các cổng bổ sung, chạy các tập lệnh mặc định , cho phép phát hiện hệ điều hành và hơn thế nữa. Về cơ bản, bất cứ điều gì bạn có thể làm từ dòng lệnh bạn có thể đặt vào tập lệnh. Điều tương tự cũng xảy ra với Gobuster và WhatWeb.
Có thể mở rộng tập lệnh để liệt kê các dịch vụ khác ngoài HTTP. Những thứ như SMB , SSH và FTP đều có thể là ứng cử viên tốt để thêm vào đó. Một lần nữa, Bash scripting rất mạnh bởi vì có thể tự động hóa nhiều hàm thường được sử dụng ở dạng dòng lệnh.
Kết thúc
Trong hướng dẫn này, đã tạo một tập lệnh Bash để tự động hóa một số hoạt động được sử dụng trong giai đoạn trinh sát của một bài kiểm tra thâm nhập. Kịch bản đã lấy một địa chỉ IP làm đối số, thực hiện quét Nmap trên mục tiêu và nếu tìm thấy một cổng HTTP mở, hãy khởi động Gobuster và WhatWeb. Bash Scripting cực kỳ mạnh mẽ và ngay cả kịch bản đơn giản này cũng giúp tiết kiệm rất nhiều thời gian .