
Um scanner rápido de contrabando de downgrade HTTP escrito em Go.
SmuggleFuzz, um scanner de contrabando de downgrade HTTP configurável e rápido. Capacita os utilizadores com listas de gadgets personalizáveis, oferecendo perceções mais profundas sobre as razões das falhas em ataques de contrabando. Estou confiante de que inúmeras vulnerabilidades de contrabando baseadas em downgrade HTTP permanecem por descobrir. Infelizmente, muitos indivíduos cessam a sua exploração após uma varredura superficial. Ao usar o SmuggleFuzz, pode descobrir vulnerabilidades de contrabando que outros podem ignorar.
Para mais informações, consulte https://moopinger.github.io/blog/smugglefuzz/fuzzing/smuggling/2024/01/31/SmuggleFuzz.html
Descarregue uma cópia a partir da página de versões: https://github.com/Moopinger/smugglefuzz/releases
go install github.com/moopinger/smugglefuzz@latest
Outra forma:
git clone https://github.com/moopinger/smugglefuzz.git
cd smugglefuzz
go build .
./smugglefuzz
Existem três comandos para o SmuggleFuzz:
Usage:
smugglefuzz scan [flags]
Examples:
smugglefuzz scan -u https://example.com/ --confirm
smugglefuzz scan -u https://example.com/ --filter TIMEOUT --confirm
smugglefuzz scan -u https://example.com/ -w wordlist.txt -t 10 --confirm --filter TIMEOUT
smugglefuzz scan --dc -u https://example.com/ -w wordlist.txt -x PUT --confirm
//Múltiplos alvos? Basta usar -f em vez de -u e fornecer um ficheiro com os alvos:
smugglefuzz scan -f multiple_targets.txt --confirm -t 10
smugglefuzz scan -f multiple_targets.txt -w wordlist.txt --confirm -s ./save-success.txt --filter TIMEOUT
smugglefuzz scan -f multiple_targets.txt -w wordlist.txt -H "Cookie: date=...; session=...;" -s ./save-success.txt -x PUT --filter TIMEOUT
Flags:
-c, --confirm Ative esta flag para enviar uma confirmação ao alvo quando ocorrer um timeout. Ajuda a confirmar se o alvo é vulnerável.
-d, --data string Quadro de dados HTTP/2 a enviar. Ex: 99\r\n (padrão "99\r\n")
--dc Desative a cor na saída. Útil quando pretende guardar a saída num ficheiro.
-f, --file string Um ficheiro contendo múltiplos alvos em formato de URL. Um alvo por linha.
--filter string Filtrar respostas por string ou tipo de quadro, etc. Por exemplo: 405, 200, 502, TIMEOUT, RST, GOAWAY, etc.
-H, --header string Inserir um cabeçalho personalizado. Deve ser fornecido no formato de cabeçalho normal: "Cookie: date=...; session=...;"
-h, --help help for scan
-i, --interval int O intervalo de timeout em segundos. (padrão 5)
-x, --method string O método de pedido HTTP a ser usado. (padrão "POST")
-s, --save-success string Se um pedido for confirmado como bem-sucedido (através da flag --confirm), será guardado num ficheiro. Útil quando se lida com muitos alvos.
-t, --threads int O número de threads a executar. Smugglefuzz pode ser rápido, por isso defina o número desejado. No entanto, muitas threads podem incomodar algum WAF. (padrão 4)
-u, --url string O URL alvo a ser escaneado.
-w, --wordlist string Fornecer uma lista personalizada de gadgets a usar. Se não for fornecida, será usada a lista predefinida.
Usage:
smugglefuzz request [flags]
Examples:
smugglefuzz request -u https://www.example.com/ -a "content-length\t; 13"
smugglefuzz request -u https://www.example.com/ -a "content-length\t; 13" -x PUT
smugglefuzz request -u https://www.example.com/ -a "content-length\t; 13" -H "Cookie: date=...; session=...;" --data "223\r\n"
Flags:
-a, --attack string Cabeçalho de ataque, separado por (; ) como a wordlist no modo 'scan'.
-d, --data string Conteúdo do quadro de dados HTTP/2 a enviar. (padrão "99\r\n")
--dc Desative a cor na saída.
-H, --header string Inserir cabeçalho personalizado. Ex: "Cookie: values"
-h, --help help for request
-i, --interval int Intervalo de timeout de deteção em segundos. (padrão 5)
-x, --method string O método a usar. (padrão "POST")
-u, --url string O URL alvo para submeter o pedido.
Isto irá apenas exibir os gadgets de contrabando predefinidos. Atualmente, a confirmação incorporada funciona apenas para H2.CL e H2.TE. Mas ainda é possível detetar ataques H2.0 através de timeouts (--filter TIMEOUT) ou OAST num domínio seu. (Consulte a secção sobre pseudo cabeçalhos abaixo)
O SmuggleFuzz permite aos utilizadores controlo total sobre os pedidos através de wordlists personalizadas. Estas listas têm uma estrutura básica, que deve ser seguida para um tratamento ideal dos pedidos. Por exemplo, os cabeçalhos e os seus valores são divididos usando um ponto e vírgula e um espaço (; ) em vez do usual dois pontos, facilitando a inclusão de valores com dois pontos em pedidos de contrabando. Isto também abre possibilidades para várias mutações e abordagens criativas. Para orientação detalhada sobre como criar os seus próprios payloads, consulte: Pesquisa HTTP/2 de James Kettle.
A ferramenta inclui uma lista pronta a usar de 125 gadgets de contrabando, embora haja sempre espaço para expansão. Estes gadgets podem ser exibidos usando o comando 'output', fornecendo insights sobre como estruturar consultas. Os utilizadores podem executar varreduras com wordlists personalizadas usando a flag 'w'. A lista suporta codificação URL (%00) para valores de byte não imprimíveis, como retorno de carro e nova linha representados como '%0d%0a' ou '\r\n'. Embora a lista fornecida seja abrangente, criar os seus próprios gadgets pode aumentar significativamente as taxas de sucesso.
Precisa de suporte h2c? Consulte o branch "experimental-h2c" do SmuggleFuzz.
Os pseudo cabeçalhos são totalmente suportados e podem ser personalizados usando a sintaxe ":name":
:authority:scheme:methodEstes cabeçalhos são particularmente úteis quando se testam vetores de ataque H2.0. Por exemplo, ao testar contrabando H2.0 usando métodos baseados em OAST, entradas de wordlist como as seguintes podem ser eficazes:
A partir da v0.1.8, [HOSTNAME] pode ser usado como espaço reservado. O SmuggleFuzz substituirá isto pelo hostname em tempo de execução.
:authority; [HOSTNAME]\r\n\r\nGET / HTTP/1.1\r\nHost: uniqid.oastify.com\r\nX-HEADER:%20ou
:authority; [HOSTNAME]\r\n\r\nGET https://uniqid.oastify.com/ HTTP/1.1\r\nHost: [HOSTNAME]\r\nX-HEADER:%20O método de deteção empregue no SmuggleFuzz é semelhante aos usados por Albinowax na sua pesquisa de contrabando HTTP/1 e defparam's Smuggler, embora com adaptações para HTTP/2. Felizmente, como estes ataques envolvem downgrades, o mesmo corpo de pedido/payload DATA pode ser utilizado para a deteção de H2.CL e H2.TE.
Uma diretriz crucial para wordlists é que os cabeçalhos contrabandeados com sucesso devem incluir os seguintes valores para um ataque confirmatório:
CL: 13
TE: chunked
Cada pedido incorpora um "Body"/DATA-Frame com o valor "99\r\n". Se um cabeçalho TE for contrabandeado, é interpretado como um comprimento de conteúdo chunked de 153 (0x99) pelo servidor se for contrabandeado com sucesso, levando a um timeout. Da mesma forma, contrabandear um cabeçalho CL com um comprimento de conteúdo de 13 também resulta num timeout devido ao comprimento não cumprido.
O pedido confirmatório re-submete a mesma consulta que levou ao timeout, mas com Data: "3\r\nABC\r\n0\r\n\r\n". Isto satisfaz tanto um TE chunked como um CL de 13, obtendo uma resposta bem-sucedida e potencialmente indicando uma vulnerabilidade de contrabando.