19 Ekim 2010 Salı

HE:WA-C2 Application Profiling





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.
PagePathAuth?SSL?GET/POSTComments
İndex.html/NN
Login.asp/login/NYPOST passwordMain auth page
Company.html/about/NNCompany 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:

#!/bin/sh
# mike's getit.sh script
if [ -z $1 ]; then
    echo -e "\n\tUsage: $0 <host> <URL>"
    exit
fi
echo -e "GET $2 HTTP/1.0\n\n" | \
nc -vv $1 80


#!/bin/sh
# mike's sgetit.sh script
if [ -z $1 ]; then
    echo -e "\n\tUsage: $0 <SSL host> <URL>"
    exit
fi
echo -e "GET $2 HTTP/1.0\n\n" | \
openssl s_client -quiet -connect $1:443 2>/dev/null
Not: Scriptlerin kabiliyetleri 2 parametreli olacak şekilde sınırlı değil. Kabiliyetlerine "echo –e" satırı ile oynayarak script'in yeteneklerini cookieleri, user-agent stringlerini yada bir http header'ı ekleyebiliriz.

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/
Test ettiğimiz dizin 404 harici bir kod dönüyorsa bir dizin bulduk demektir.

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=paramvalueStandart URL parametre yapısı
/folder/filename/paramname=paramvalueBurada filename bir dizin gibi görünüyor.
/folder/file/paramname&paramvalue"=" 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ımCookie yapısı
IIS 5/6ASPSESSIONID=[string]
ColdFussioncfid=[number] cftoken=[number]
J2EE uygulamalarıjsessionid=[string]

Hiç yorum yok:

Yorum Gönder

Web Uygulama Sızma Testleri İçin Kontrol Listeleri - V

Checklist for Web App Pentesting - V 6. Veri Denetimi (Data Validation) Testleri 6.1 Girdi Denetimi Bütün girdiler denetlenmelidir....