Arşiv sayfasından bütün yazılarıma ulaşabilirsiniz

PHP uygulamalarındaki XSS ve SQL Injection açıklarını otomatik olarak bulmak

pixyCross Site Scripting (XSS) ve SQL Injection (SQLI) açıkları, şuan ki web uygulamalarının birçoğunda bile mevcut olan açıklardır. Eskinden bu açıkları bulmak için manuel olarak kaynak kodun satır satır denetlenmesi gerekiyordu ve bu türden güvenlik açığı arama işlemi çok yorucuydu. Şimdi ise bu işlemleri bizim yerimize otomatik olarak yapan Pixy var ;)

Pixy Nedir?

Pixy, PHP 4 için yazılmış kaynak kodlarda SQLI ve XSS açıklarını bulmak için otomatik tarama yapan bir Java programıdır. Php dosyanızı veya kaynak kodunuzu Pixy’ye gösterdikten sonra kaynak koddaki muhtemel açıklar taranıyor ve bulunan açıkların listelendiği bir rapor oluşturuluyor. Tespit edilen güvenlik açığını anlayabilmeniz için bu rapora ilâve bilgiler de ekleniyor. Böylece php uygulamanızın hangi satırında XSS veya SQLI açığı olduğunu öğrenebiliyorsunuz.

Pixy ile açık arama işlemini nasıl yapabilirim?

Pixy ile güvenlik açığı aramak için 2. seçeneğiniz var:

1. seçenekte php dosyanızı Pixy’nin Web Interface sayfasından upload ediyorsunuz. Alternatif olarak, analiz etmek istediğiniz php dosyasının kaynak kodunu doğrudan kopyala-yapıştır da yapabilirsiniz. Bundan sonra yapmanız gereken tek şey “Analyze XSS!” butonuna tıklamak. Birkaç dakika içerisinde yapılan analize ait bir raporu yeni bir sayfada görebilirsiniz. Yalnız, bu şekilde yapılan analizde SQLI açığına karşı tarama yapılmadığına dikkat edin!

2. seçenek ise biraz daha sağlam bir çözüm sunuyor. Bu seçenekte Pixy’nin Download sayfasından Pixy’yi bilgisayarınıza indiriyorsunuz. Yazının başlarında Pixy’nin bir Java programı olduğunu söylemiştim hatırlarsanız. Bu yüzden Pixy’nin çalışabilmesi için bilgisayarınızda Java Runtime Environment (JRE) yüklü olmalıdır. Yüklü değilse ilk önce JRE’yi yüklemelisiniz.

Pixy’yi bilgisayarıma indirdim. JRE de yüklü. Ya şimdi?

Meselâ test.php isimli bir dosyayı güvenlik açıklarına karşı taratmak istiyor olalım. Zip olarak sıkıştırılmış haldeki Pixy’yi herhangi bir klasöre açın. Diyelim ki “c:\pixy” klasörüne açtınız. İlk önce test.php dosyasını “c:\pixy” klasörü içerisine kopyalayın. Daha sonra komut istemine giriş yaptıktan sonra “c:\pixy” klasörüne gelin. Ve alttaki komutu yazıp Enter tuşuna basın.

run-all.bat test.php > rapor.txt

Kısa bir sürede analiz işlemi tamamlanacak ve “c:\pixy” klasöründe “rapor.txt” dosyası oluşturulacaktır. Bu dosyadan test.php dosyasının sonuçlarını öğrenebilirsiniz.

Sonuç

Pixy, php ile yazılmış web uygulamalarında bulunabilen XSS ve SQLI açıklarını hızlı bir şekilde tespit edebilmemizi sağlıyor. Gerçekten büyük bir zaman kazancınız oluyor. Kullanması da kolay olduğu için size de tanıtmak istedim. Bitirmeden önce şunu da eklemek istiyorum. Eğer ki bilgisayarınızda PERL yüklüyse Pixy’yi daha geniş bir şekilde kullanabiliyorsunuz. Daha fazla bilgiyi Pixy’nin Documentation sayfasında bulabilirsiniz.

EkleBunu Sosyal Paylaşım Butonu

13 yorum var

  1. güzel yazı eburhan. acaba bu codeigniter, cakephp gibi frameworkler üzerine yazılan kodları da güvenlik açısından analiz eder mi?

  2. PHP 4 ile yazılmışlarsa neden etmesin ?

  3. olabilir de ben şu yönden takıldım mesela o tür frameworklerde verileri url’den alırken direk $_GET ile almıyoruz, framework içinde var olan built-in fonksiyonlar ile alıyoruz. bu durumda servis yalnızca tek bir sayfayı mı kontrol ediyor yoksa onun içine aldığı diğer sayfaları da kontrol ediyor mu?

  4. @grkn
    CakePHP hakkında bilgim yok. CodeIgniter için konuşursak, url’den aldığın veriyi escape etmeden { $this->db->escape($veri) } sql sorgularında kullanırsan SQLI açığı yine oluşabilir. Framework kullansak bile yine dikkat etmemiz gereken noktalar var.

    “İçine aldığı” derken de include’dan bahsediyorsan, evet Pixy ile include edilen dosya da otomatik olarak kontrol ediliyor. Bunun için Pixy’nin bilgisayardan çalışan sürümünü indirmelisin ;)

  5. anladım :) zaten her daim codeigniter’de escape ve escape_str fonksiyonlarını kullanıyorum. zaten güvenlik konusunda başarılı bir framework. içindeki input sınıfında sql inj ve xss için codeigniter haricinde de copy/paste yapılıp kullanılası foksiyonlar var :)

  6. Güzel yazı eburhan teşekkürler…

  7. Selamlar;

    Aslında bu tip çalışmalar öğrenci arkadaşlar için proje konusu olabilecek çalışmalar. Mesela buna benzer bir uygulama asp.net ile hazırlanmış sayfalar için yapılabilir mi diye uğraşmaları iyi olacaktır (olaya biraz da farklı bakalım değil mi?)

    SQL injection gibi bir açık genelde basitçe tasarlanmış uygulamalarda oluyor. Ciddi uygulamalarda katmanlı yapı kullanıldığı için dışarıdan alınan sql sorgusu doğrudan execute edilmiyor ve bu da bu tip bir sql injection oluşumunu engelliyor.

    ASP.NET ile uğraşanlar için faydalı olabilecek bir yazı: http://www.csharpnedir.com/makalegoster.asp?MId=410

    Ellerine sağlık Erhan.
    Selamlar

  8. Dinamik sql sorguları üzerine biraz araştırma yapmam gerekiyor sanırım. Çünkü ben uygulamalarımı pekçok kişi gibi mysql 4′e göre kodluyorum. Bu da mysql 5′deki stored procedure’den yoksun olmak demek.

    Link için de teşekkürler ibrahim.

  9. Güzel bir uygulamaya benziyor Erhan, teşekkürler bilgilendirdiğin için. “Documentation” kısmı da fena değil…

  10. “Eskinden bu açıkları bulmak için manuel olarak kaynak kodun satır satır denetlenmesi gerekiyordu ve bu türden güvenlik açığı arama işlemi çok yorucuydu.”

    Yapay zeka henüz web güvenlikçilerinin işlerini elinden alacak kadar gelişmedi :)

    Bu tip araçlar, herhangi bir geliştirici için iyi fakat şu ana kadar denediğim araçlar olası açıkların yarısından daha azını buluyor.

    Zira, web güvenliği ile normal bir geliştiriciden fazla ilgilendiğim için ara-sıra “audit” yaptığım sistemler oluyor.

    Önce benzer bir araç olan wapiti ile kontrol ettiriyorum, 5 güvenlik sorunu bulduysa benim güvenlik raporumda 20 tane güvenlik sorunu oluyor irili-ufaklı :)

    Yine de geliştiriciler için iyi bu tür yazılımlar.

  11. Bilgiler için teşekkürler; fakat java tabanlı xp/pro da bahsettiğiniz prog(pixy) çalışmıyor. Dosyaya işliyor fakat, Syntax error hatası veriyor.

  12. Teşekkürler Burhan, güzel bir yazı olmuş..

İçinizde kalmasın, siz de yorum yazın.