tu-dong-hoa-bash

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 .

Để lại một bình luận