
Um plugin Burp Extender, que tornará objetos soap binários legíveis e modificáveis.
#WCFDSer-ngng
Um plugin do Burp Extender que torna objetos SOAP binários legíveis e modificáveis. Baseado no trabalho original de Brian Holyfield, salve Brian http://blog.gdssecurity.com/labs/2009/11/19/wcf-binary-soap-plug-in-for-burp.html
Por quê? Esta versão corrige um bug em que a serialização não estava sendo realizada corretamente. Ela também adiciona a capacidade (adequada) de usar o scanner/intruder em conjunto com WCF. Também funciona com SQLMap se você clicar com o botão direito -> enviar desserializado para o intruder, copiar/colar em um arquivo e executar sqlmap -r arquivo.txt com a opção --proxy.
Basicamente, ele desserializa, modifica, ressSerializa, envia adiante e (apenas no caso do scanner) desserializa qualquer resposta que pareça ser um objeto WCF (para permitir que o Burp sinalize strings de exceção, etc.).
obs. ele faz uso do cabeçalho "Via" para permitir marcar requisições que precisam de serialização (e permitir que ele passe corretamente pelas verificações de HTTP formatado no sqlmap). Se você precisar do cabeçalho Via para algo, você terá que usar outra coisa, alterar o SERIALIZEHEADER no arquivo utils e recompilar.
1- Execute o arquivo NBFSNetService.exe, que escuta na porta 7686 por padrão
2- Adicione a extensão e visualize requisições ou respostas decodificadas no editor
<@d_base64><@_runCommand('valid_token_from_HV_extension')>NBFS.exe base64 encode "<@replace('\r\n','')><@replace('"','\\"')>
SOAP XML Message which will be converted to binary (application/soap+msbin1)
<@/replace><@/replace>"<@/_runCommand><@/d_base64>
A tag Java customizada runCommand no HackVertor é:
var result = "";
Runtime rt = Runtime.getRuntime();
String[] commands = input.split(" ");
Process proc = rt.exec(input);
BufferedReader stdInput = new BufferedReader(new
InputStreamReader(proc.getInputStream()));
BufferedReader stdError = new BufferedReader(new
InputStreamReader(proc.getErrorStream()));
// Read the output from the command
String s = null;
while ((s = stdInput.readLine()) != null) {
if(result.equals("")){
result = s;
}else{
result += "\r\n" + s;
}
}
// Read any errors from the attempted command
System.out.println("Here is the standard error of the command (if any):\n");
while ((s = stdError.readLine()) != null) {
System.out.println(s);
}
output = result;
Para qualquer problema, verifique o stdout (ex.: execute java -jar burp.jar e observe a janela do console)
Um serviço WCF vulnerável (e cliente) foi incluído para prática. Ele é vulnerável a injeção de SQL e tem seu próprio README.
Algumas capturas de tela:
Alteração no repeater:
requisição/resposta
sinalizado no scanner
Suporte ao SQLMap