
Un plugin de Burp Extender que hará que los objetos soap binarios sean legibles y modificables.
#WCFDSer-ngng
Un plugin de Burp Extender que hará legibles y modificables los objetos SOAP binarios. Basado en el trabajo original de Brian Holyfield, alabado sea Brian http://blog.gdssecurity.com/labs/2009/11/19/wcf-binary-soap-plug-in-for-burp.html
¿Por qué? Esta versión corrige un error por el cual la serialización no se realizaba correctamente. También añade la capacidad (adecuada) de usar el escáner/intrude junto con WCF. También funciona con SQLMap si haces clic derecho -> envías el deserializado a intruder, y luego lo copias/pegas en un archivo, y ejecutas sqlmap -r file.txt con la opción --proxy.
Básicamente, deserializará, modificará, reserializará, enviará y (solo en el caso del escáner) deserializará cualquier respuesta que parezca un objeto WCF (para permitir que burp marque cualquier cadena de excepción, etc.).
Nótese que hace uso de la cabecera "Via" para poder marcar las peticiones que necesitan serialización (y permitir que pase correctamente las comprobaciones http en sqlmap). Si necesitas la cabecera via para algo, tendrás que usar otra cosa, cambiar SERIALIZEHEADER en el archivo utils y recompilar.
1- Ejecuta el archivo NBFSNetService.exe, que escucha en el puerto 7686 por defecto
2- Añade la extensión y visualiza las peticiones o respuestas decodificadas en el 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>
La etiqueta Java personalizada runCommand en HackVertor es:
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 cualquier problema, mira en stdout (es decir, ejecuta java -jar burp.jar y mira en la ventana de consola)
Se ha incluido un servicio WCF vulnerable (y su cliente) para practicar. Es vulnerable a la inyección SQL y tiene su propio readme.
Algunas capturas de pantalla:
Cambiando en repeater:
petición/respuesta
marcado en el escáner
SQLMap compatible