Использование ChatGPT для создания простого инструмента хакерской разведки

В главе 5 Bug Bounty Bootcamp я рассказал о том, как вы можете написать простой bash-скрипт для автоматизации задач разведки перед взломом и поиском ошибок. Затем, всего через год, появился ChatGPT.

Я по-прежнему являюсь большим сторонником изучения сценариев, чтобы вы могли понять, как работают инструменты, и настроить инструменты с открытым исходным кодом для себя. Но когда дело доходит до воплощения ваших идей в области инструментов в код, вы, вероятно, могли бы позволить ChatGPT сделать всю тяжелую работу. Итак, на этот раз я попытался воспроизвести инструмент разведки, который я написал в книге, с помощью ChatGPT.

Посмотрим, что получится! :)

v1: базовая функциональность

Я начал с описания простого инструмента, который мы создали в главе 5 Bug Bounty Bootcamp для ChatGPT:

Please write a bash script that will: 
— Look for open ports 
— Look for subdomains 
— Look for file paths 
On a target domain, and store the scan results to file. 
The script should be able to scan multiple domains at once, 
and produce human-readable report files.

Похоже на довольно простую подсказку, вот что ответил ChatGPT:

#!/bin/bash

# Set the target domains as an array
domains=("example.com" "test.com")

# Define the output directory
output_dir="./scan_results"

# Loop through the target domains
for domain in "${domains[@]}"
do
    # Create a directory for the current domain's results
    mkdir -p "$output_dir/$domain"

    # Run the nmap command to scan for open ports
    nmap -v -oN "$output_dir/$domain/open_ports.txt" "$domain"

    # Run the sublist3r command to scan for subdomains
    sublist3r -d "$domain" -o "$output_dir/$domain/subdomains.txt"

    # Use Gobuster to scan for file paths
    gobuster dir -u "https://$domain" -w /usr/share/wordlists/dirb/common.txt -o "$output_dir/$domain/file_paths.txt" -k
done

Этот сгенерированный скрипт сканирует целевые домены на наличие открытых портов, субдоменов и путей к файлам. Результаты для каждого домена хранятся в отдельном каталоге в папке scan_results. Здесь ChatGPT предположил, что я использую Kali Linux, поскольку /usr/share/wordlists/dirb/common.txt — это список слов, включенный в Kali по умолчанию.

ChatGPT рекомендует использовать Nmap, Sublist3r и Gobuster для сканирования. Также были даны инструкции по использованию инструмента:

To use this script, save it to a file (e.g., scan_domains.sh), 
make it executable (chmod +x scan_domains.sh), and run it (./scan_domains.sh). 
Make sure to install the required tools (nmap, sublist3r, and gobuster) 
before running the script.

v2: сделать его интерактивным

Я хотел, чтобы инструмент был интерактивным, поэтому поручил ChatGPT изменить скрипт:

Please make the tool interactive, and make each scan type optional.

Этот недавно сгенерированный сценарий запрашивает у пользователя целевые домены и типы сканирования. Пользователь может выбрать, какие типы сканирования запускать, введя «y» или «n» для каждого из них.

#!/bin/bash

# Define the output directory
output_dir="./scan_results"

# Prompt the user for the target domain(s)
read -p "Enter the target domain(s) (comma-separated): " domain_list

# Convert the comma-separated list to an array
IFS=',' read -ra domains <<< "$domain_list"

# Prompt the user for the scan type(s)
read -p "Do you want to scan for open ports? [y/n]: " scan_ports
read -p "Do you want to scan for subdomains? [y/n]: " scan_subdomains
read -p "Do you want to scan for file paths? [y/n]: " scan_paths

# Loop through the target domains
for domain in "${domains[@]}"
do
    # Create a directory for the current domain's results
    mkdir -p "$output_dir/$domain"

    # Scan for open ports if requested
    if [[ $scan_ports == "y" ]]
    then
        nmap -v -oN "$output_dir/$domain/open_ports.txt" "$domain"
    fi

    # Scan for subdomains if requested
    if [[ $scan_subdomains == "y" ]]
    then
        sublist3r -d "$domain" -o "$output_dir/$domain/subdomains.txt"
    fi

    # Scan for file paths if requested
    if [[ $scan_paths == "y" ]]
    then
        gobuster dir -u "https://$domain" -w /usr/share/wordlists/dirb/common.txt -o "$output_dir/$domain/file_paths.txt" -k
    fi
done

v3: добавить функцию уведомлений

Наконец, я попросил ChatGPT изменить инструмент, чтобы он автоматически запускался каждую ночь и уведомлял меня о новых находках.

Schedule the script to run everyday at midnight, 
and notify me if it found anything different from the previous scan.

Вот окончательная версия инструмента. Скрипт сравнивает новые результаты сканирования с предыдущими с помощью Git и отправляет электронное письмо на ваш адрес электронной почты, если есть какие-либо различия.

#!/bin/bash

# Define the output directory
output_dir="./scan_results"

# Prompt the user for the target domain(s)
read -p "Enter the target domain(s) (comma-separated): " domain_list

# Convert the comma-separated list to an array
IFS=',' read -ra domains <<< "$domain_list"

# Loop through the target domains
for domain in "${domains[@]}"
do
    # Create a directory for the current domain's results
    mkdir -p "$output_dir/$domain"

    # Scan for open ports
    nmap -v -oN "$output_dir/$domain/open_ports.txt" "$domain"

    # Scan for subdomains
    sublist3r -d "$domain" -o "$output_dir/$domain/subdomains.txt"

    # Scan for file paths
    gobuster dir -u "https://$domain" -w /usr/share/wordlists/dirb/common.txt -o "$output_dir/$domain/file_paths.txt" -k
done

# Compare the new scan results with the previous ones and send an email if there are any differences
changes=$(git --git-dir="$output_dir/.git" --work-tree="$output_dir" diff HEAD~1 HEAD)

if [[ -n $changes ]]
then
    echo "$changes" | mail -s "Scan results for $domain have changed" [email protected]
fi

ChatGPT также создал строку, которую вы можете поместить в свой crontab, чтобы запланировать ночное сканирование:

0 0 * * * /path/to/script.sh >> /path/to/logfile.log 2>&1

Однако этот скрипт на самом деле непригоден для использования, поскольку он должен работать без вмешательства человека. Хотя ChatGPT удалил подсказки пользователю для выбора типа сканирования, он по-прежнему предлагает пользователю указать целевые домены. После того, как я указал на это, ChatGPT исправил скрипт:

#!/bin/bash

# Define the target domains
domains=("example.com" "test.com" "example.org")

# Define the output directory
output_dir="./scan_results"

# Loop through the target domains
for domain in "${domains[@]}"
do
    # Create a directory for the current domain's results
    mkdir -p "$output_dir/$domain"

    # Scan for open ports
    nmap -v -oN "$output_dir/$domain/open_ports.txt" "$domain"

    # Scan for subdomains
    sublist3r -d "$domain" -o "$output_dir/$domain/subdomains.txt"

    # Scan for file paths
    gobuster dir -u "https://$domain" -w /usr/share/wordlists/dirb/common.txt -o "$output_dir/$domain/file_paths.txt" -k
done

# Compare the new scan results with the previous ones and send an email if there are any differences
changes=$(git --git-dir="$output_dir/.git" --work-tree="$output_dir" diff HEAD~1 HEAD)

if [[ -n $changes ]]
then
    echo "$changes" | mail -s "Scan results have changed" [email protected]
fi

Это инструмент, который мы создали в главе 5, и ChatGPT потребовалось в общей сложности 3 минуты, чтобы воспроизвести его функциональность. Я полагаю, что было бы легко создать и более сложные инструменты.

Было довольно удивительно видеть ChatGPT в действии. Он сделал несколько неверных предположений и не сразу создал пригодный для использования инструмент. Но если вы понимаете, как программировать, вам будет очень легко добавлять новые функции к вашим инструментам или начинать все, что вы создаете.

Понимание того, как писать точные и эффективные подсказки ChatGPT, вероятно, является следующим важным навыком безопасности.

Хотите подключиться? Какие еще концепции безопасности вы хотели бы узнать? Я хотел бы знать. Не стесняйтесь общаться в Твиттере @vickieli7.