
Un plugin Burp Extender, che renderà leggibili e modificabili gli oggetti SOAP binari.
#WCFDSer-ngng
Un plugin Burp Extender che rende leggibili e modificabili gli oggetti SOAP binari. Basato sul lavoro originale di Brian Holyfield, tutti ringraziano Brian http://blog.gdssecurity.com/labs/2009/11/19/wcf-binary-soap-plug-in-for-burp.html
Perché? Questa versione corregge un bug per cui la serializzazione non veniva eseguita correttamente. Aggiunge inoltre la corretta possibilità di usare lo scanner/Intruder in combinazione con WCF. Funziona anche con SQLMap se fai clic destro -> invii il deserializzato a Intruder, poi lo copi/incolli in un file e infine esegui sqlmap -r file.txt con l'opzione --proxy.
In pratica, deserializza, modifica, riserializza, invia e (solo nel caso dello scanner) deserializza qualsiasi risposta che assomigli a oggetti WCF (per consentire a Burp di segnalare eventuali stringhe di eccezione, ecc.).
N.B. fa uso dell'header "Via" per poter marcare le richieste che necessitano di serializzazione (e per superare correttamente i controlli HTTP formattati in sqlmap). Se ti serve l'header Via per qualcos'altro, dovrai usare qualcos'altro: modifica SERIALIZEHEADER nel file utils e ricompila.
1- Eseguire il file NBFSNetService.exe che ascolta sulla porta 7686 di default
2- Aggiungere l'estensione e visualizzare le richieste o risposte decodificate nell'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>
Il tag Java personalizzato runCommand in 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;
Per qualsiasi problema, controlla stdout (ad es. esegui java -jar burp.jar e guarda la finestra della console).
È stato incluso un servizio WCF vulnerabile (e un client) per fare pratica. È vulnerabile all'iniezione SQL e ha un proprio readme.
Alcuni screenshot: