Использование 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.