Czasami sposób, w jaki "usunięte" zostają zgłoszone błędy jest, łagodnie mówiąc, kreatywny. Historia z dawnych czasów:
- Gruby klient korzysta z HTTPS, brak jest jakiejkolwiek weryfikacji certyfikatu serwera;
- W nowej wersji błąd zostaje usunięty, certyfikat jest weryfikowany, ale, uwaga, tylko przy pierwszym połączeniu.
Po dokładniejszym sprawdzeniu okazało się, że w tym połączeniu nie są wymieniane żadne dane(!) Klient łączył się z serwerem tylko po to, by sprawdzić, czy certyfikat jest prawidłowy (włącznie z pewną formą certificate pinning). Jeśli nie - dalsze połączenia nie były nawiązywane.
Obejście takiego "zabezpieczenia" jest trywialne - puścić bez modyfikacji pierwsze połączenie, normalnie robić mitm na kolejnych. W Fiddlerze można to zrobić bez większych problemów tworząc prosty skrypt, który na pierwszym połączeniu (tunel CONNECT) ustawi flagę:
oSession["x-no-decrypt"] = "yes";
Tak przy okazji - można też zrobić taką konfigurację:
Przeglądarka -> Fiddler -> Burp -> Serwer
Następnie można korzystać z flagi x-overrideGateway do tego, by konkretne requesty były wysyłane bezpośrednio do serwera z pominięciem Burp:
oSession["x-overrideGateway"] = "DIRECT";
Dlaczego? Burp również ma opcję SSL pass through, ale np. automatyczne przepuszczanie tylko pierwszego połączenia do określonego serwera zdecydowanie łatwiej jest zrobić w Fiddlerze (i kilka innych rzeczy w oparciu o skrypty - również).
P.S: Tak, wiem - Burp też ma skrypty. Nie zmienia to faktu, że w Fiddlerze pewne rzeczy jest po prostu łatwiej / szybciej zrobić. To z kolei nie zmienia faktu, że inne rzeczy zdecydowanie łatwiej jest zrobić w Burpie :P