
RevSuit é uma plataforma de conexão reversa flexível e poderosa projetada para receber conexão do host alvo em penetração.
Inglês |简体中文
RevSuit é uma plataforma de conexão reversa flexível e poderosa projetada para receber conexões do host alvo durante testes de penetração. Atualmente suporta os protocolos HTTP, DNS, RMI, LDAP, MySQL e FTP.
Flexível:
Poderoso:
Baixe a versão mais recente diretamente ou construa seguindo os passos:
git clone https://github.com/Li4n0/revsuit.git
cd revsuit/frontend && yarn install && yarn build
cd ../ && go build ./cmd/revsuit/revsuit.go
RevSuit irá gerar um arquivo de configuração padrão na primeira execução. Modifique o arquivo de configuração de acordo com suas necessidades e execute novamente. Uma descrição detalhada do arquivo de configuração pode ser encontrada em: Notas de Configuração
Para confirmar a localização do IP, é necessário usar o banco de dados de localização de IP. QQwry é usado como fonte de dados padrão, você também pode modificar a configuração para usar GeoIP. Se o banco de dados selecionado não estiver disponível no diretório atual ou se o banco de dados estiver desatualizado por mais de uma semana, o RevSuit baixará automaticamente o banco de dados mais recente. Se o download falhar, o campo IpArea será sempre nulo.
$ ./revsuit
2021/05/16 22:55:10 [ INFO] Downloading qqwry.dat...
____ _____ _ __
/ __ \___ _ __/ ___/__ __(_) /_
/ /_/ / _ \ | / /\__ \/ / / / / __/
/ _, _/ __/ |/ /___/ / /_/ / / /_
/_/ |_|\___/|___//____/\__,_/_/\__/
vBeta0.1
https://revsuit.pro
2021/05/16 22:55:22 [ INFO] Starting HTTP Server at :80, token:your_token
2021/05/16 22:55:22 [ INFO] Start to listen FTP PASV port at :2020, PasvIP is 10.9.8.7
2021/05/16 22:55:22 [ INFO] Starting FTP Server at :21
2021/05/16 22:55:22 [ INFO] Starting MySQL Server at :3306
2021/05/16 22:55:22 [ INFO] Starting RMI Server at :1099
2021/05/16 22:55:22 [ INFO] Starting DNS Server at :53
Após a execução, você pode visitar o caminho /revsuit/admin/ do Servidor HTTP e inserir o token para acessar o painel de controle.
Tome a criação de regras HTTP como exemplo:
Algumas notas são as seguintes:
name e flagFormat da regra são únicos.FlagFormat usa sintaxe de expressão regular, e para diferentes protocolos, os campos correspondidos pelo flagFormat são diferentes; você pode verificar as dicas correspondentes para obter detalhes ao criar regras.flagFormat, e o resultado do agrupamento correspondente também será usado como uma variável de modelo.Conforme mostrado abaixo, criamos uma regra que usa as variáveis de modelo embutidas e variáveis de modelo personalizadas do protocolo http, e a nomeamos test_create_rule:

Em seguida, faça uma solicitação que satisfaça a regra e visualize a resposta.

A solicitação será registrada na plataforma ao mesmo tempo.

Se você deseja ser notificado sobre novas conexões em seu software de escritório, pode configurar o endereço do webhook do software relevante no arquivo de configuração e ativar a chave Notice para a regra correspondente. Atualmente, suporta apenas quatro tipos de software: dingtalk,wechat,lark,slack. (Suporte para Discord e telegram está planejado.)
Se você está migrando plataformas ou limpando dados, pode ser um incômodo recriar regras. É por isso que a plataforma suporta importação e exportação de regras.
O ponto de entrada para esta função está localizado em Settings>RULES.
As regras são armazenadas em formato yaml para importação e exportação, como a seguir:
http:
- name: test_create_rule
flag_format: (?P<what>\w+)\?
rank: 0
push_to_client: false
notice: false
response_status_code: "302"
response_headers:
Location: ${query.url}
response_body: ${header.say} ${what}
- name: other_rule
flag_format: other
rank: 1
push_to_client: false
notice: true
response_status_code: "200"
response_headers: { }
response_body: Hello Revsuit!
dns:
... ...
RevSuit foi separado do meu projeto de scanner, portanto seu suporte nativo funciona com scanners.
Da perspectiva do RevSuit, chamamos um scanner de cliente.
RevSuit usa Eventos enviados pelo servidor HTTP (SSE) para estabelecer um canal de comunicação unidirecional com o cliente.
A API para o canal é: /revsuit/api/events?message. O cliente primeiro precisa adicionar o cabeçalho Token: your token ao Header, e então acessar a API para estabelecer o canal. Quando a plataforma recebe uma nova conexão, o flag capturado pela regra será passado ao cliente através deste canal.

Aqui está uma demo simples usando a biblioteca sse do Golang como exemplo.
Conforme mostrado acima, o RevSuit suporta vários clientes, e cada cliente no estado conectado recebe um push de flag, portanto a varredura distribuída pode ser suportada.
Se você não quer que todos os clientes recebam todos os pushes de flag, pode usar o cabeçalho de solicitação Flag-Filter ao criar uma conexão sse para definir o formato (expressões regulares) do flag que você deseja que aquele cliente receba:

RevSuit armazenará flag temporariamente na fila quando não houver conexão de cliente e o enviará quando o cliente conectar, para que você não precise se preocupar em perder a vulnerabilidade devido à desconexão do cliente. (Isso é especialmente útil para descobrir vulnerabilidades acionadas por atraso.)
Em um cenário real de varredura de vulnerabilidades, você pode enviar um grande número de payloads diferentes para um único ponto de vulnerabilidade, e todos podem ser válidos, o que pode resultar na plataforma de backlink recebendo muitas solicitações, mas todas causadas pela mesma vulnerabilidade. Se você não quer que o cliente receba tantos flags para a mesma vulnerabilidade, você pode aproveitar o recurso flagGroup do flagFormat da regra.
FlagGroup é o conteúdo correspondido pelo grupo anônimo no campo flagFormat da regra. A plataforma verificará o conteúdo correspondido no agrupamento, e o flag só é enviado ao cliente quando o conteúdo (flagGroup) é capturado pela primeira vez.
Por exemplo, varredura SSRF.
Primeiramente crie uma regra como a seguinte:
http:
- name: ssrf
flag_format: (ssrf[a-z0-9]{6})[0-9]{1,3}
rank: 0
push_to_client: false
notice: false
response_status_code: "200"
response_headers: { }
response_body: "Here is a SSRF!"
Suponha que nosso alvo seja https://www.testvuln.com?url=api.com&p=useless, e para SSRF temos 5 payloads. A requisição final enviada pelo scanner pode ser ['https://www.testvuln.com?url=http://revsuit.com/ssrfa98oni1&p=useless','https://www.testvuln.com?url=http://revsuit.com/ssrfa98oni2&p=useless', ... ,'https://www.testvuln.com?url=//revsuit.com/ssrfa98oni5&p=useless'] . Todas podem atacar com sucesso.
No entanto, como o agrupamento anônimo é usado no flagFormat da regra, a plataforma consultará o flagGroup conectado, neste caso ssrfa98oni, e enviará o flag ao cliente apenas em sua primeira aparição, então o cliente receberá apenas um flag: ssrfa98oni1. Isso já prova que o parâmetro url do alvo é vulnerável.
Em cenários reais de teste de penetração, certas tarefas podem ser feitas de forma fácil e rápida combinando e combinando vários módulos do RevSuit. O seguinte é um exemplo de um XXE cego em Java Web, mostrando como usar os módulos HTTP e FTP do RevSuit, combinados com variáveis de modelo, para completar rapidamente uma varredura de portas.
Primeiro crie uma regra HTTP para retornar evil.dtd, personalize a resposta para o conteúdo do dtd para que ele se conecte ao serviço FTP do RevSuit, e use variáveis de modelo para passar o Host e a Porta a serem escaneados para o FTP através do usuário e senha do FTP.

Em seguida, crie uma regra FTP que recebe o Host e a Porta a serem escaneados das variáveis de modelo do usuário e senha, definida como Pasv Address.

Em seguida, use o BurpSuit para lançar a varredura, definindo os parâmetros host e port na URL evil.dtd para definir o alvo da varredura de porta.

O efeito da execução é o seguinte:

Isso ocorre porque a conexão FTP será interrompida se o Passive Address não estiver acessível; podemos determinar se a porta está aberta ou não com base em se a conexão sai normalmente. Para este exemplo, detectamos com sucesso que as portas 8005 e 8080 estão abertas.
Um wiki mais detalhado está sendo preparado; você pode explorar por conta própria até lá.
Envie um issue ou entre em contato pelo Weixin: TGk0bjA2Cg==
Este projeto utiliza código dos seguintes projetos notáveis:
Agradeço ao meu amigo @E99p1ant por toda a ajuda e conselhos que recebi durante o desenvolvimento deste projeto.
@Apache License 2.0