
Плагин Burp Extender, который сделает двоичные SOAP-объекты читаемыми и модифицируемыми.
#WCFDSer-ngng
Плагин-расширение для Burp, который делает бинарные SOAP-объекты читаемыми и изменяемыми. Основано на оригинальной работе Брайана Холифилда, слава Брайану http://blog.gdssecurity.com/labs/2009/11/19/wcf-binary-soap-plug-in-for-burp.html
Почему? Этот релиз исправляет ошибку, из-за которой сериализация выполнялась неправильно. Также добавлена (правильная) возможность использования сканера/интрудера совместно с WCF. Кроме того, он работает с SQLMap, если нажать правой кнопкой мыши -> send deserialized to intruder, затем скопировать/вставить это в файл и запустить sqlmap -r file.txt с опцией --proxy.
По сути, он десериализует, изменяет, ресериализует, отправляет дальше и (только в случае сканера) десериализует любые ответы, похожие на WCF-объекты (чтобы позволить burp помечать строки исключений и т.п.).
Прим.: он использует заголовок "Via", чтобы помечать запросы, требующие сериализации (и чтобы корректно проходить проверки http в sqlmap). Если заголовок via нужен вам для чего-то другого, придётся использовать что-то иное: измените SERIALIZEHEADER в файле utils и перекомпилируйте.
1- Запустите файл NBFSNetService.exe, который по умолчанию слушает порт 7686
2- Добавьте расширение и просматривайте декодированные запросы или ответы в редакторе
<@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>
Пользовательский Java-тег runCommand в 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;
При любых проблемах смотрите в stdout (т.е. запустите java -jar burp.jar и посмотрите в окно консоли).
В комплект включён уязвимый WCF-сервис (и клиент) для практики. Он уязвим к SQL-инъекциям и содержит собственный readme.
Некоторые скриншоты:
Изменение в repeater:
запрос/ответ
отмечено в сканере
Поддержка SQLMap