Bash Script Basics
Estrutura Inicial
A primeira linha sempre deve ser a shebang line:
#!/bin/bashExemplo básico de comandos em um script:
#!/bin/bash
nmap scanme.nmap.org
/PATH/TO/dirsearch.py -u scanme.nmap.org -e phpArgumentos de Código
Para tornar o script dinâmico e escolher qual site escanear, utilizamos argumentos:
- $1, $2, etc.: Representam os argumentos passados na ordem.
- $@: Representa todos os argumentos que foram passados.
- $#: Representa o total de argumentos passados.
Exemplo com argumento:
#!/bin/bash
nmap $1
/PATH/TO/dirsearch.py -u $1 -e phpVariável de Ambiente PATH
- O PATH especifica onde os binários executáveis estão no sistema Unix.
- Para evitar digitar o caminho completo de uma ferramenta, podemos adicioná-la ao PATH:
export PATH="PATH_TO_DIRSEARCH:$PATH" - Persistência: Para não perder a configuração ao reiniciar o terminal, o comando
exportdeve ser colocado no arquivo~/.bash_profile.
Execução e Boas Práticas
- Salve o arquivo com a extensão
.sh(boa prática em terminais Linux). - Forneça permissão de execução:
chmod +x nome_do_script.shouchmod 700 nome_do_script.sh - Execute o script:
./nome_do_script.sh scanme.nmap.org
Variáveis e Condicionais
- É possível definir variáveis como
TODAY=$(date)ouDOMAIN=$1. - O Bash permite o uso de condicionais como if e case para controlar o fluxo do código.
Funções Você pode agrupar comandos em funções para reutilização:
nmap_scan() {
nmap $1 > $DIRECTORY/nmap
echo "The results of nmap scan are stored in $DIRECTORY/nmap."
}
nmap_scan # Chama a funçãoParsing de Dados
- grep: Usado para filtrar informações (ex:
grep 80 TARGET_DIRECTORY/nmap). - Regular Expressions (Regex): Mais flexível para filtragem.
^: Match no começo da string.$: Match no final da string.\S: Qualquer coisa que não seja espaço.\s: Qualquer espaço.- Argumento
-E: Indica o uso de regex estendida.
Agendando Scripts (Crontab)
Para economizar tempo e rodar comandos automaticamente, utiliza-se o Crontab -e.
- Exemplo de agendamento:
12 30 * * * /home/kali/scan.sh(Roda o scriptscan.shtodos os dias às 12:30 PM).
Exemplo de Script Completo (Report)
#!/bin/bash
PATH_TO_DIRSEARCH="gobuster"
DOMAIN=$1
DIRECTORY=${DOMAIN}_recon
echo "Creating directory $DIRECTORY."
mkdir $DIRECTORY
nmap_scan() {
nmap $DOMAIN > $DIRECTORY/nmap
echo "The results of nmap scan are stored in $DIRECTORY/nmap."
}
dirsearch_scan() {
$PATH_TO_DIRSEARCH -v -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -u $DOMAIN dir
echo "The results of dirsearch scan are stored in $DIRECTORY/dirsearch."
}
crt_scan() {
curl "[https://crt.sh/?q=$DOMAIN&output=json](https://crt.sh/?q=$DOMAIN&output=json)" -o $DIRECTORY/crt
echo "The results of cert parsing is stored in $DIRECTORY/crt."
}
case $2 in
nmap-only) nmap_scan ;;
dirsearch-only) dirsearch_scan ;;
crt-only) crt_scan ;;
*) nmap_scan; dirsearch_scan; crt_scan ;;
esac
echo "Generating recon report from output files..."
TODAY=$(date)
echo "This scan was created on $TODAY" > $DIRECTORY/report
echo "Results for Nmap:" >> $DIRECTORY/report
grep -E "^\s*\S+\s+\S+\s+\S+\s*$" $DIRECTORY/nmap >> $DIRECTORY/report
echo "Results for Dirsearch:" >> $DIRECTORY/report
cat $DIRECTORY/dirsearch >> $DIRECTORY/report
echo "Results for crt.sh:" >> $DIRECTORY/report
jq -r ".[] | .name_value" $DIRECTORY/crt >> $DIRECTORY/report.