Application Profiling
Uygulamayı derinlemesine araştırmanın amaçları:- Uygulamanın içerik, komponent ve fonksiyonlarının bütününün resmini oluşturmak;
- Açıklıkların nerelerde yattığı hakkında ipuçları elde edebilmek için sitenin akışını çıkarmak.
Manual Inspection
Documenting the Application
Web uygulamaları karışıktır, bu nedenle manuel teftiş sırasında uygulama yapısını disiplinli şekilde dokümante etmek gereklidir. Şu kolonları içeren bir excel sheet hazırlanabilir:- Sayfa adı
- Sayfanın full path'i
- Sayfa authentication gerektiriyor mu? (Evet yada hayır)
- Sayfa SSL gerektiriyor mu?
- GET/POST argümanları
- Kişisel yorumlar: sayfa "güvenli" hissettiriyor mu; yardım yada admin sayfası mı; gizli bilgi içeriyor mu vs.
Page | Path | Auth? | SSL? | GET/POST | Comments |
İndex.html | / | N | N | ||
Login.asp | /login/ | N | Y | POST password | Main auth page |
Company.html | /about/ | N | N | Company info |
Statically and Dynamically Generated Pages
Statik sayfalar .html sayfaları, genelde SSS yada info sayfalarıdır. Saldırmak için pek birşey çıkmaz ama kaynak kodları comment ve bilgi taşıyor olabilir.Dinamik sayfalar (.asp, .jsp, .php vs) daha ilginçtir.
Uygulamaların profilini çıkarma işini bir miktar otomatikleştirmek adına için linux tabanlı makinelerde kullanılabilecek 2 adet shell script hazırlayacağız. Konu devam ettikçe bunların kullanımı örneklendirilecek. "getit.sh" http protokolü için; "sgetit.sh" ise SSL gerektiren https protokollü sayfalar için:
|
|
Not: Denemelerimde sürekli "Connection refused" aldım; dolayısıyla bu scriptleri deneyemedim.
Directory Structure
Web sitesinin görülebilir kısımlarını tamamlayınca durmamalı: web sunucu adminler için dizinler içerebilir, yada eski versiyon sayfalar, yedekleme dizinleri, veri dizinleri, yada bir HTML kodu içinden refere edilmeyen başka sayfalar. Geliştiricinin bakış akıçısını ve dolayısıyla dosya ve dizin isimlerini tahmin etmeye çalışın.Varlığı araştırılabilecek birkaç dizin örneği:
- Eğer statik içerikler /html dizini altındaysa, /cgi yada /jsp dizinleri denenebilir.
- Gizlilik gerektiren dizinler: /admin/ /secure/ /adm/ gibi.
- Kişisel Apache dizinleri: /~root/ /~bob/ /~cthulhu/
- Yedek yada log dosyası içerebilecek dizinler: /.bak/ /backup/ /back/ /log/ /logs/ /archive/ /old/
- "Include" dosyaları için dizinler: /include/ /js/ /global/ /local/
- i18n için kullanılabilecek dizinler: /en/ /tr/ /fr/ /1033/
Java Classes and Applets
Eğer java sınıflarını yada derlenmiş servletleri indirebiliyorsak, o zaman uygulamayı içten tarayabiliriz. Decompile edebiliriz bunları; en iyi araç Java Disassembler, yada jad. Kullanımı son derece basit:[root@meddle]#jad SnoopServlet.class
Parsing SnoopServlet.class... Generating SnoopServlet.jad
[root@meddle]# nano SnoopServlet.jad
Forms
Web uygulamasının omurgalarıdır.Manuel teftiş sırasında içinde input alanı bulunan tüm sayfalar not edilmelidir:
[root@meddle]# getit.sh www.victim.com /index.html | grep -i "input type"
www.victim.com [192.168.238.26] 80 (http) open
<input type="text" name="name" size="10" maxlength="15">
<input type="password" name="passwd" size="10" maxlength="15">
<input type=hidden name=vote value="websites">
<input type="submit" name="Submit" value="Login">
Bir sayfanın form'u üzerinde araştırma yaparken, tüm şu yönlerini not etmemiz gerekir:
- Method. GET mi POST mu kullanıyor veriyi submit için? GET taleplerini menipüle etmek daha kolaydır.
- Action. Form'u çağıran script ne? Hangi script dili kullanılmış (.pl, .sh, .asp)? Eğer .sh varsa hemen not edin, shell scriptler web uygulamaları için güvensizdir.
- MaxLength. ByPass etmesi çok basit.
- Hidden. Alan hidden ise içindeki veri dikkatle incelenmeli.
- Autocomplete. Bu aktifse alanda hassas veri sorulup sorulmadığına bakmak gerekir.
- Password.
Query Strings and Parameters
Yaygın query string yapıları:Query String | Çıkarılacak Sonuç |
/file.xxx?paramname=paramvalue | Standart URL parametre yapısı |
/folder/filename/paramname=paramvalue | Burada filename bir dizin gibi görünüyor. |
/folder/file/paramname¶mvalue | "=" işareti burada "&" ile temsil edilmiş. |
/folder/(SessionState)/file/paramvalue | Session state URL'de tutulmuş – bir dosyanın, klasörün yada parametrenin nerede başlayıp bittiğine karar vermek zor. |
Common Cookies
Yazılım | Cookie yapısı |
IIS 5/6 | ASPSESSIONID=[string] |
ColdFussion | cfid=[number] cftoken=[number] |
J2EE uygulamaları | jsessionid=[string] |
Hiç yorum yok:
Yorum Gönder