|
![]() ![]() |
|
Konu Araçları |
açıklar, bulunur, kullanılır, sistemin, üzerindeki |
![]() |
Bir Sistemin Üzerindeki Açıklar Nasıl Bulunur Ve Kullanılır? |
![]() |
![]() |
#1 |
Prof. Dr. Sinsi
|
![]() Bir Sistemin Üzerindeki Açıklar Nasıl Bulunur Ve Kullanılır?Bir sistemin üzerindeki açıklar nasıl bulunur ve kullanılır? Bir sistemin üzerindeki açıklar nasıl bulunur ve kullanılır? Evet uzun zamandır yazmayı düşündüğüm bu dökümanımı bugüne kadar elde ettiğim tecrübelerden birebir aktarıyorum ![]() ![]() Uygulama hatalarını bulmanın en kolay yolları; Mevcut sayfalarla oynamak, Uygulamaya ait formlarla oynamak, Headerlarla oynamak, Çerezlerle oynamak, Uygulamanın kaynak kodlarından yararlanma: (Genel içerik: çapraz site betiklenmesi (XSS) ve SQL enjeksiyonu) En basit ve en yararlı olan yöntemdir ![]() ![]() ![]() Kaynak kodunu ele geçirdiğiniz uygulamayı önce yerel bir sunucudaki kendi sisteminize bu uygulamayı destekleyen bir sunucu kurmalısınız (PHP tabanlı uygulamalar için: PHPTriad,ApacheTriad gibi sunucu paketleri sizin için idealdir, ASP ve FrontPage tabanlı sistemler için PWS sizler için idealdir ve PWS Windows ile gelir) bu sunucuyu kurdukdan sonra uygulamayı sunucunuz üzerinde çalıştırın ![]() Sonra birebir bütün heryerini önce kurcalayın ve bir hata ile karşılaştığınızdaki bu uygulamada var olan açığın ilk adımını bulmuşsunuz demekdir ki, Bu hata mesajı bazen debug output olarak karşınıza çıkarsa ve alttaki örnek gibiyse Kod: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'or' at line 1 1 ![]() ![]() Bazen hata mesajı almasanızda bir tuhaflık gözünüze çarpar örneğin uygulamamıza yerel sunucumuzdan şöyle eriştiğimizi varsayalım; Kod: http://localhost/research/xxxforum/read ![]() Eğer read ![]() ![]() read ![]() ![]() ![]() ![]() Kod: function readip() { @mysql_connect($uo_sqlhost, $uo_sqluser, $uo_sqlpass) or die("Cannot connect to SQL server"); @mysql_select_db($uo_sqlbase) or die("Cannot select database"); $uo_ip = $_GET['SIP']; $uo_query = "SELECT lastvisit FROM users_online WHERE visitor = $uo_ip"; $uo_result = mysql_query($uo_query); echo $uo_result; } gördüğünüz gibi fonksiyonda bir hatamız mevcut ![]() Kod: $uo_query = "SELECT lastvisit FROM users_online WHERE visitor = $uo_ip"; tam olarak düzenli yazılmamış bir SQL sorgusu bu sorguya GET yöntemi ile gelen SIP sorgusundaki bir dikkatsizlik sayesinde çok kolay bir şekilde SQL sorgusu enjekte edebiliriz ![]() Hatta uzaktan kod çalıştırma dahi yapabiliriz ![]() Uygulamaları yazan kişiler genelde print (yazdırma) ve view (görüntüleme) sistemlerine ne yazikki dizayndan başka bir önem vermezler ve genelde bütün açıklar bu sayfalarda çıkar ![]() Eğer uygulamanın kaynak kodlarına erişemezseniz, mevcut uygulamaya ulaştığınız web sunucusundan en yukarda bahsettiğim metodları kullanarak az kafasını kurcalamaya çalışarak bir çok açık bulabilirsiniz ![]() Genelde büyük ve özel sunuculardaki açıklar böyle bulunmuştur ![]() ![]() Çerezlerle oynamak: Çerezler aslında HTTP requestte Cookie: headerıyla sunucuya yolladığımız ve sistemin bizi kolayca hatırlamasını sağlayan değerler ![]() ![]() Referans değişimi (referer spoofing): Aslında buda headerlar ile oynamak kapsamına girer ancak dikkatsiz programcılar halen bu eski sistemi kullanmaktalar ![]() ![]() Burdaki mantık sokete HTTP requesti yollarken sitemizi abudik ![]() Kod: GET admin ![]() ![]() Referer: http://www ![]() ![]() ![]() Şekline ufak bir data değişimi ile sistemin admin paneline girmemizi sağlar ![]() Satır atlattırma CRLF enjeksiyonu Buda headerlarla oynamakdan geçer ![]() karakterleri yazdırılır ve eğer sistem bu ufak oyunumuzu yutar ise istediğimiz headerı yazabilir, SQL enjeksiyondan , uzaktan kod çalıştırılmasına kadar bir çok şeyi yapabiliriz ![]() Bu yöntemlerin hepsi zamanla deneyerek öğrenilecek ve bir süre sonra alışkanlık yapacak yöntemler kendi metodlarınızı kullanarak bu yöntemleri geliştirebilirsiniz ![]() |
![]() |
![]() |
![]() |
Bir Sistemin Üzerindeki Açıklar Nasıl Bulunur Ve Kullanılır? |
![]() |
![]() |
#2 |
Prof. Dr. Sinsi
|
![]() Bir Sistemin Üzerindeki Açıklar Nasıl Bulunur Ve Kullanılır?Web sitenizi ve uygulamalarınızı SQL Enjeksiyon saldırılarından korumak 3 bölümlük bir işlemden oluşur: Sitenizin, SQL Enjeksiyon ve diğer açıklara karşı tam bir güvenlik denetiminin yapılması ile güvenliğinizin mevcut halinin analiz edilmesi ![]() Web uygulamalarının ve BT altyapısının diğer tüm bileşenlerinin steril olması için en uygun kodlama standartlarının / tekniklerinin kullanılması ![]() Web bileşenlerindeki her değişiklik veya eklemeden sonra düzenli web güvenlik denetimi uygulanması ![]() Ek olarak, SQL Enjeksiyon ve diğer tüm hack tekniklerinin kontrolünde aklınızda olması gereken ana ilke şudur: "Web sitesinde güvenli olduğunu düşündüğümüz hangi bölümler hack saldırılarına açık?" ve "Bir uygulamaya hangi veriyi göndererek normalde yapmaması gereken bir şeyi yaptırabiliriz?" ![]() SQL Enjeksiyon açıklarının kontrolü web sitesinin ve web uygulamalarının denetimi ile olur ![]() ![]() ![]() Web uygulamalarını denetlemenin en iyi yolu otomatik ve keşifsel (heuristic) web güvenlik tarayıcısı kullanmaktır ![]() Otomatik web güvenlik tarayıcısı tüm web sitenizi gezer ve SQL enjeksiyon açıklarını test eder ![]() ![]() ![]() ![]() SQL Enjeksiyon için İmza-eşleştirme’ye karşı keşifsel tarama Pek çok firma otomatik ve periyodik web denetimi ihtiyacını anlamış olsa da pek azı hem hazır gelen hem de özel hazırlanan web uygulamalarını taramanın gerekliliğine inanır ![]() ![]() ![]() Bu doküman yazıldığı sırada Google News’te "SQL Injection" kelimeleri için yaptığımız arama 240 sonuç buldu ![]() ![]() ![]() ![]() ![]() Özel yazılmış web uygulamalarının belki de en çok açık içerenler olduğunu anlamak son derece önemlidir ![]() ![]() Özel yazılmış bir web uygulamasını sadece imza-tabanlı bir tarayıcı ile taramak SQL Enjeksiyon veya diğer açıklara karşı tam olarak test yapılmaması anlamına gelir ![]() Bilinen uygulamarın açıklarının bulunduğu bir veritabanı ile test yapmak yeterli değildir ![]() ![]() ![]() ![]() Sonuç olarak öncelikli olarak keşifsel (heuristic) tarama metodu (ek olarak imza eşleştirme de) kullanan web uygulama tarayıcıları kullanılmalı ![]() Kaynak:http://www ![]() ![]() |
![]() |
![]() |
|