mitmproxy; HTTP/S trafiğini yakalamak, incelemek, değiştirmek ve yeniden oynatmak için tasarlanmış ücretsiz ve açık kaynaklı bir etkileşimli konsol aracı, web arayüzü ve Python kütüphanesidir. Web uygulamaları, API'ler ve mobil trafikle çalışan geliştiriciler, güvenlik araştırmacıları ve QA mühendisleri için güçlü bir man-in-the-middle proxy'si görevi görür.
mitmproxy'ye genel bakış
mitmproxy, istemci ile hedef sunucu arasında konumlanan bir proxy sunucusu olarak çalışır. Proxy üzerinden geçen tüm HTTP ve HTTPS trafiği gerçek zamanlı olarak görüntülenebilir, filtrelenebilir ve değiştirilebilir. Temel işlevi; istek ve yanıt başlıklarının, gövdelerinin ve diğer özniteliklerin derinlemesine incelenmesini sağlar. Araç seti şunlardan oluşur:
- mitmproxy: gerçek zamanlı trafik analizi için etkileşimli terminal arayüzü.
- mitmweb:
mitmproxyile benzer işlevler sunan, ancak web tarayıcısı üzerinden erişilen tarayıcı tabanlı grafik arayüz. - mitmdump: trafiğin programatik olarak değiştirilmesi ve kaydedilmesi için komut satırı aracı; betik yazımı ve otomasyon için uygundur.
Öne çıkan özellikler
SSL/TLS araya girme
mitmproxy kendi SSL/TLS sertifikalarını anlık olarak üretir; böylece şifreli HTTPS trafiğini çözebilir ve inceleyebilir. Bunun için istemcinin mitmproxy CA sertifikasına güvenmesi gerekir.
Etkileşimli arayüz
Hem mitmproxy hem de mitmweb, trafik akışlarını görüntülemek ve yönetmek için etkileşimli ortamlar sunar. Akışları filtreleyebilir, içerikte arama yapabilir, istek/yanıtları düzenleyebilir ve belirli akışları sonraki analiz için işaretleyebilirsiniz.
Trafiği değiştirme
İstekler ve yanıtlar, etkileşimli arayüz üzerinden veya Python betikleriyle anlık olarak değiştirilebilir. Bu sayede sınır durumlarını test edebilir, başlık ekleyebilir, veriyi değiştirebilir veya farklı sunucu yanıtlarını simüle edebilirsiniz.
Yeniden oynatma (replay)
mitmproxy, kaydedilmiş istemci isteklerini sunucuya veya sunucu yanıtlarını istemciye yeniden göndermeyi destekler. Bu, istemci eylemlerini yeniden yürütmeden belirli senaryoları test etmek ya da sunucu davranışını simüle etmek için kullanışlıdır.
Betik yazımı ve otomasyon
mitmdump, özel betikler geliştirmek için bir Python API'si sunar. Bu betikler, tanımlanan mantığa göre trafiği programatik olarak inceleyebilir, değiştirebilir, yönlendirebilir veya düşürebilir; böylece otomatik testler ve karmaşık trafik manipülasyonları kolaylaşır.
Şeffaf proxy modu
mitmproxy, istemcilerin açık proxy yapılandırmasına ihtiyaç duymadığı şeffaf proxy modunda çalışabilir. Ağ trafiği, genellikle yönlendirici kuralları veya güvenlik duvarı yapılandırmalarıyla ağ katmanında mitmproxy'ye yönlendirilir.
Kurulum
mitmproxy pip ile kurulabilir:
pip install mitmproxy
Belirli işletim sistemleri için önceden derlenmiş ikili dosyalar resmi mitmproxy sitesinde bulunur; ayrıca macOS'ta Homebrew gibi paket yöneticileriyle de kurulabilir.
Temel kullanım
mitmproxy'yi başlatma
Etkileşimli konsol arayüzünü başlatmak için:
mitmproxy
Web arayüzünü başlatmak için:
mitmweb
Varsayılan olarak mitmproxy localhost:8080 adresini dinler.
İstemci yapılandırması
İstemcilerin, HTTP/S proxy'si olarak mitmproxy'yi kullanacak şekilde yapılandırılması gerekir.
Tarayıcı örneği (Firefox):
1. Firefox ayarlarını açın.
2. Ağ Ayarları veya Proxy Ayarları bölümüne gidin.
3. "Elle proxy yapılandırması" seçeneğini işaretleyin.
4. HTTP Proxy alanına 127.0.0.1, Port alanına 8080 yazın.
5. SSL Proxy alanına 127.0.0.1, Port alanına 8080 yazın.
6. "Bu proxy sunucusunu tüm protokoller için kullan" seçeneğinin işaretli olduğundan emin olun veya diğer protokolleri de benzer şekilde yapılandırın.
İşletim sistemi (macOS):
1. Sistem Ayarları > Ağ > Wi-Fi > Ayrıntılar yolunu izleyin.
2. "Proxy'ler" bölümünü seçin.
3. "Web Proxy (HTTP)" ve "Güvenli Web Proxy (HTTPS)" seçeneklerini etkinleştirin.
4. Her ikisi için Sunucu alanına 127.0.0.1, Port alanına 8080 yazın.
SSL/TLS sertifikası kurulumu
HTTPS trafiğini çözmek için istemcilerin mitmproxy CA sertifikasına güvenmesi gerekir.
1. mitmproxy çalışırken, yapılandırılmış bir istemcinin tarayıcısında http://mitm.it adresine gidin.
2. İstemcinin işletim sistemine veya tarayıcısına uygun CA sertifikasını indirip kurun.
3. Android veya iOS gibi sistemlerde, genellikle sertifikayı indirip güvenlik ayarlarından elle güvenilir olarak işaretlemeyi içeren özel kurulum adımları gerekir.
İleri düzey kullanım
İstek ve yanıtları değiştirme
mitmproxy veya mitmweb arayüzünden:
1. Bir akış seçin.
2. İsteği veya yanıtı değiştirmek için e (edit) tuşuna basın.
3. Düzenlenecek bileşeni seçin (örneğin başlıklar, gövde, URL).
4. Değişiklikleri yapın ve kaydedip akışı sürdürmek için q tuşuna basın.
mitmdump ile betik yazımı
Trafik manipülasyonunu otomatikleştirmek için mitmdump'a Python betikleri verilebilir.
Örnek: bir istek başlığını değiştirme
modify_header.py:
from mitmproxy import http
def request(flow: http.HTTPFlow):
if "example.com" in flow.request.pretty_host:
flow.request.headers["X-Modified-By"] = "mitmproxy-script"
print(f"Modified header for {flow.request.url}")
mitmdump ile çalıştırın:
mitmdump -s modify_header.py
Bu betik, example.com adresine giden isteklere X-Modified-By adlı özel bir başlık ekler.
Örnek: bir yanıt gövdesini değiştirme
modify_response.py:
from mitmproxy import http
def response(flow: http.HTTPFlow):
if "api.example.com/data" in flow.request.url and flow.response.content:
# Yanıtın JSON olduğu varsayılıyor
data = flow.response.json()
data["status"] = "modified_by_mitmproxy"
flow.response.set_json(data)
print(f"Modified response body for {flow.request.url}")
mitmdump ile çalıştırın:
mitmdump -s modify_response.py
Bu betik api.example.com/data adresinden gelen yanıtları yakalar, JSON olarak ayrıştırır, bir alanı değiştirir ve değiştirilmiş JSON'u istemciye geri gönderir.
Akışları yeniden oynatma
mitmproxy, yakalanan HTTP akışlarını yeniden oynatmanıza olanak tanır.
İstemci isteğini yeniden oynatma:
1. mitmproxy veya mitmweb içinde bir akış seçin.
2. İstemci isteğini sunucuya yeniden göndermek için r tuşuna basın. Böylece aynı istek, istemci etkileşimi olmadan yeniden gönderilir.
Sunucu yanıtını yeniden oynatma:
1. Bir akış seçin.
2. Sunucu yanıtını istemciye yeniden göndermek için R (shift+r) tuşuna basın. Bu, kaydedilmiş sunucu yanıtını gerçek sunucu etkileşimini atlayarak istemciye gönderir. Belirli sunucu yanıtlarıyla istemci tarafı davranışını test etmek için kullanışlıdır.
Kullanım senaryoları
- API geliştirme ve hata ayıklama: API davranışını anlamak, veri biçimlerini doğrulamak ve entegrasyon sorunlarını ayıklamak için istek ve yanıtları incelemek.
- Güvenlik testleri: istekleri değiştirerek (örneğin SQL veya XSS yükleri enjekte ederek) açıkları tespit etmek, kimlik doğrulama mekanizmalarını test etmek ve şifreli trafiği analiz etmek.
- Mobil uygulama analizi: mobil uygulamaların trafiğini yakalayıp analiz ederek arka uç iletişimini, veri işleme biçimini ve olası güvenlik açıklarını anlamak.
- Tersine mühendislik: ağ iletişimlerini gözlemleyerek özel protokolleri çözümlemek veya uygulamaların uzak sunucularla nasıl etkileştiğini anlamak.
- Otomatik testler: belirli ağ koşullarını simüle etmek, API yanıtlarını taklit etmek veya uygulama davranışını otomatik olarak denetlemek için
mitmdumpbetiklerini kullanmak.
mitmproxy ile diğer proxy araçlarının karşılaştırması
HTTP/S araya girme özelliği sunan birçok araç olsa da mitmproxy, açık kaynak yapısı, güçlü betik yazma imkânı ve esnek arayüzleriyle öne çıkar.
| Özellik | mitmproxy | Burp Suite Community Edition | Fiddler (Windows) |
|---|---|---|---|
| Lisans | Açık kaynak (MIT) | Tescilli (ücretsiz/ücretli katmanlar) | Tescilli (ücretsiz/ücretli katmanlar) |
| Betik yazımı | Python API (mitmdump) |
Sınırlı (Java/Python/Ruby eklentileri) | FiddlerScript (JScript.NET), .NET eklentileri |
| Arayüz | Konsol (mitmproxy), Web UI (mitmweb) |
Masaüstü GUI | Masaüstü GUI |
| SSL/TLS | Tam araya girme | Tam araya girme | Tam araya girme |
| Trafik değişt. | Evet | Evet | Evet |
| Replay | Evet (istemci/sunucu) | Evet (Repeater) | Evet (Composer) |
| Şeffaf proxy | Evet | Evet | Evet |
| Hedef kitle | Geliştiriciler, güvenlik araştırmacıları, otomasyon | Sızma testi uzmanları, web uygulama güvenliği | Geliştiriciler, testçiler, web uygulama güvenliği |
| Platform | Çoklu platform (Linux, macOS, Windows) | Çoklu platform (Java tabanlı) | Windows, macOS (Fiddler Everywhere ile) |
Bu karşılaştırma, mitmproxy'nin otomasyon ve açık kaynak esnekliğindeki güçlü yanlarını ortaya koyar; trafik analizi süreçleri üzerinde derin denetim isteyen teknik kullanıcılar için onu sağlam bir seçenek hâline getirir.
