0%

strcmp fonksiyonu iki değer eşit olması durumunda 0 (false) döndürür

strcmp("5", 5) => 0
strcmp("15", 0xf) => 0
strcmp(61529519452809720693702583126814, 61529519452809720000000000000000) => 0
strcmp(NULL, false) => 0
strcmp(NULL, "") => 0
strcmp(NULL, 0) => -1
strcmp(false, -1) => -2
strcmp("15", NULL) => 2
strcmp(NULL, "foo") => -3
strcmp("foo", NULL) => 3
strcmp("foo", false) => 3
strcmp("foo", 0) => 1
strcmp("foo", 5) => 1
strcmp("foo", array()) => NULL + PHP Warning
strcmp("foo", new stdClass) => NULL + PHP Warning
strcmp(function(){}, "") => NULL + PHP Warning

Eğer sitenizde şöyle bir kullanım yaptıysanız.

if(!strcmp($_GET["ad"], "admin"))
 echo "hg";
else
 echo "dg";

bu admin ile kıyaslama, GET-ad değişkeni array,null,class veya fonksiyon olduğu zamanda TRUE değer döndürür ve hg(hoşgeldin) mesajı basar.

Şu şekilde bir kullanım ile get metodu üzerinde array gönderilebilirsiniz.

http://localhost/strcmp.php?ad[0]=omer

Eğer şifre ve kullanıcı adınızı bu şekilde doğruluyorsanız, birinin array göndererek admin panelinize erişmesi mümkündür.

Onun için == ile kıyaslama yapınki sistem dg (defol git) değeri döndürsün.

 

CSRF : Cross Site Request Forgory

Siteler arası istek gönderebilme açığıdır.

A sitesinde, /paroladeğiş?yeniparola=xxx diğer bir istek ile şifre değiştirildiğini fark edelim.

B sitesinde <img src=”A/paroladeğiş?yeniparola=12345”/> şeklinde bir kullanımla, A sitesindeki kullanıcının parolasını değiştirebiliriz.

Dikkat edelim ki, A sitesinde kullanıcı oturum açmış olmalıdır. Bu işlem B’ye giren her ayrı kullanıcı için gerçtir.

Ancak isteklerin GET metodu dahilinde de olması gerekmez. Bir Ajax formu ile B sitesi, POST metodu da kullanılabilir.

Çözüm Yolu

Access-Control-Allow-Origin headeri kesinlikle gönderilmemelidir. Modern tarayıcılar bu headeri gördüğü müddetçe güvenliği sağlarlar. Ardından aşağıdaki iki yöntemden birini kullanmalısınız.

CSRF - Token

Form gönderilmeden önce rastgele bilet oluşturulur. Formun alıcı sayfası, bu biletin aynısını bekleyerek çalışır

Captcha

Form ve Form alıcı sayfaya bir captcha sistemi kurulur.

IDOR : insecure direct object reference.

Yazılımcının , bir sayfa üzerinden , başka kullanıcıların erişmemesi gereken bilgilere, yetki vermemeyi unutması ile oluşan açıktır.

Mesela kullanıcının, yapacaklarım listesi olsun. X’nin yapacaklarından biri /yapacaklar?id=65445 sayfası üzerinde olsun. Eğer A, kullanıcısı /yapacaklar?id=61445 sayfası üzerinden B’nın verilerine erişebilmesi bu açığa örnektir.

Payload : XSS açığını kullanan koddur.

Reflected XSS : URL’ya gidilmesi üzerine çalışan XSS’dir. Kalıcı değildir

Stored XSS : Veritabanında kalıcı olarak saklanabilen XSS payloadıdır.

Bir web sitenin <script> ( ) ‘ “ işaretlerinin kullanıma izin vermesiyle oluşan açıktır.

document.cookie ile cookiler çalınabilmektedir. Fakat browserlar artık bunları filtreleyip gönderebilmektedir.

Flash ve Java üzerinden bilgisayar ele geçirebilmektedir. Plugin yükleterek, tarayıcı elegeçilebilir.

HTML Context : <p>Ahmet</p>

Attribute Context : <input value=”Ahmet” onChange=”jsfunc();”>

Script Context : <script> var name=’Ahmet’; </script>

Style Context : css kodları arasını XSS enjekte etmektir.

URI Context : <a href=”javascript:alert(1)”> …

  • XSS’te doğru sintaks oluşturma derdi yoktur.

BeEF

XSS sploitidir.

GMail XSS saldırısı

<img src#@blla.com gibi bir email mümkündür.

DropBox/FB XSS & Linuxda Dosya İsimleri

Linuxda / dışında her karakter dosya isminde kullanılır. Bu sebeple böyle bir dosyayı DropBox'a yükleyip tarayıcı script çalıştırılmaktadır.

 

Hackenen firmalar incelendiğinde, daha çok farkındanlık eksikliğinden kaynaklı olarak hacklendiği ortaya çıkmıştır.

Sosyal Mühendisliğin ilk aşaması, bilgi toplamadır.
Ö: Bankalarda, IT elamanı gibi gözüküp, onların emaili adreslerine ve bilgilerine erişmektir

theharvester

Bilgi toplama uygulaması.(bknz: kali linux) Sitenin emaileri, subdomainleri ve diğer virtual hostları bulabilmektedir.
theharvester -d farukcan.net -l 500 -b all

Google Hacking

Google arama motoru hedefe yönelik optimize aramalar yapabilir.
site:twitter.com
filetype:pdf
intitle:Başlıkta Var
"Beni Bir Bütün Halde Ara"
intext:Dosyanın içinde
inurl : url içinde
ömer -"faruk can" (içinde farukcan geçmeyen ömerler)
tc kimlik hack
site:*.gov.tr filetype:xlsx numrange:10000000000-99999999999

“sifre” filetype:sql

emkei.cz - Sahte mail gönderme

Bu site başkası adına email göndermeyi sağlamaktadır. Fakat spama düşme ihtimalı yüksektir. (eğer hotmail veya gmail kullanıyorsanız)

Bana gönderilen emailin gerçek olduğunu nasıl anlarım?

Gelen emailin kaynak koduna bakalım.

Received: from emkei.cz ([46.167.245.116]) by natrohost.com with MailEnable ESMTP; Thu, 13 Aug 2015 11:38:45 +0300
Received: by emkei.cz (Postfix, from userid 33)
    id DD39C6F95C; Thu, 13 Aug 2015 10:33:22 +0200 (CEST)
To: [email protected]
Subject: dsadas
From: "dadsInce" <[email protected]>
X-Priority: 3 (Normal)
Importance: Normal
Errors-To: [email protected]
Reply-To: [email protected]
Content-Type: text/plain; charset=utf-8
Message-Id: <[email protected]>
Date: Thu, 13 Aug 2015 10:33:22 +0200 (CEST)
Received-SPF: none (natrohost.com: dsa.net does not designate permitted sender hosts)
X-Envelope-Sender: [email protected]
Return-Path: <[email protected]>

Dikkat ederseniz. Gönderen sunucu emkei.cz’dir. Email adresi ve gönderen sunucunun farklı olma durumu bu emailin sahte olduğunu gösterir.

http://mxtoolbox.com/ sitesine bakıp farukcan.net ‘ üzerinden eposta göndermeye yetkili sunucu adreslerini görebilirsiniz.

Sahte email gelen kutusu

https://mailinator.com/inbox.jsp?to=sahteemail

Bu adresinde gelen kutusuna, gizli bir adresten email gönderip. Girş yapmadan yine [email protected]‘un gelen kutusunu okuyabilirsiniz.

email sunucusun anti virüs varlığının tespiti

o sunucu üzerinde olmayan bir email adresine mail gönderir. Sunucu bize olmadığına dair email gönderir. Bizde bu emailin kaynağının header bilgisine bakarız. SMTP-Filter veya Antivirüs kısımlarına bakarak varlığını tespit edebiliriz.

setoolkit

Sosyal Mühendislik için bir araçtır. (kali linux)

Sayfa Kolonlama 1,2,3,2

Benzer gözüken bir domain/dns elde etme

freedns.afraid.org : Burdan www.facebook.com.blabla.dasdsad.net/index.html?dasdas&dasdas tarzı anlaşılmayacak bir url oluşturabiliyorsun.

inial paypal kart

Hackerlar ,isimsiz alınan bu karta para yükleyerek, rusya ve çin gibi uzak ülkelerden sunucu kiralayıp kimliklerini gizlemektedir. (bknz: migros)

 

Suriyeli Hackerların Başbakanlık ve içişleri emaillerini yaptığı Sosyal Mühendislik Saldırısı

Site kolonlama ile suriyeli hackerlar yüzlerce başbakanlık ve içişleri email adreslerinin şifrelerini öğrenmişlerdir.

2 aşamalı doğrulama

facebook ve google, şifrenin yanında sms doğrulama kodu isteyerek, giriş isteyebilmektedir. Bunların güvenliği çok yüksektir.

USB HID (USB Rubber ducky)

Takıldığında, bilgisayarla otomatik tuşlar gönderen klavyedir. Taktığınız zaman tuşlar ile gizli bir şekilde bilgisayara komutlara girer. Doğrudan bu yolla casus yazılım yüklenebilir. Hiç bir antivirüs bu aygıtı tanımaz. Kullanıcı oluşturabilir, casus yazılım indirip yükleyebilir. DNS ayarlarını değiştirebilir. Micro USB ile mobil cihazlara takılabilir.

fimap

sunucunun dosya erişim açığı var mı kontrol eder

Kriptoloji (Şifreleme Bilimi)

  1. Kriptografi : Şifreleyerek bilgilerimizi gizlemektir.
  2. Kriptoanaliz : Başkaların şifreli metinlerini inceleyerek, metni elde etmektir
Encode : Farklı formata dönüştürme. Utf8 -> Base64,Hex

Plaintext P: Metin

Ciphertext C: Şifrelenmiş Metin

Key K: Şifreleyen anahtar. Şifre

Cipher : Şifreyici

Encrypt : Metni şifreleme fiili

Decrypt : Şifrelenmiş metni çözme fiili ( - deşifre )

Base64 : Verilerin 2^6 lik, 64 karakterle ifadesini sağlar. Bu biçimi binaryler ve ASCIIler çevrilebilmektedir. Genelde sonlarında = veya == bulunur. Herkes tarafından bilinir ve encoding/decoding yapılabilir.

Kerckhoff Prensibi

Bir kripto sisteminin güvenliği algoritmayı gizli tutmaya bağlı olmamalıdır. Sadece Key'in gizliliğini bağlı olmalı. Çünkü algoritmayı değiştirmek zordur.

XOR

Farklı olma durumu arayan kapıdır. 00=0 , 01=1 , 10=1 , 11=0
A xor B = A
A xor A = 0
A xor B xor A = B
Son kısma dikkat ; P xor K xor K = P oluyor. Yani XOR ile şifrelemede Key iki defa kullanılamaz.
P1 xor K = C1
P2 xor K = C2
olsun. O zaman
C1 xor C2 = P1 xor P2
Yani Şifrelenmiş iki metni'nin xor, Şifrelenmemiş hallerinin iç içe geçmiş hali olacaktır. Eğer bunu bir resimde yapsaydık, iki resmi içi içe görürdük.

OTP (Vernam)

One-time pad (Tek kullanımlık Şerit): P xor K = C 'nin tektek her bit için kullanıldığı. P ve K şeritlerini alıp C şeridi veren şifreleme türüdür. Sadece bir defa kullanılmalıdır. Kırılmasının imkansız olduğu kanıtlanmıştır. Anahtar üretme ve dağıtma zorluğu vardır.

Rastgelelilik

Rastgelelilik bir teoridir. Birşeyin rastgele olmasının sebebi, onu hesaplayamamız veya nasıl hesaplanacağını bilmemizdir.

Pseudo Random Number Generator :

Bu algoritma mod fonksiyonun geri döndürülemezlik özelliğini kullanır.

Xi+1 = (a.Xi+c)modM;

Bu C’dilin random sayı üretme algoritmasıdır. a ve c sabit değerdir. (asal sayı olması önerilir) Xi önceki random üretilen sayıdır. M ise aralık boyutudur.

Sezar Şifreleme

@monoalphabetic chiper family
P : abcd
C : bcda
K : 1
Karakterleri alfabede K sonraki harfe kaydırarak şifrelemedir.
Cn = (Pn+K)mod(HarfSayısı)
  • Harfleri frekansı(sıklığı) ölçülerek kolayca çözülebilir. Ö : Türkçede en fazla A harfi kullanılır. İngilizcede ise E harfi kullanılır. Bu bilgi dilin son yayılanan makalelerindeki harfler sayılarak elde edilebilir. Metin ne kadar uzunsa , bu yöntemle çözülmesi o kadar kolaydır.
  • Kaba Kuvvet ile Harf Sayısı kadar şifre olasılığı (ö : 29) deneyerekte çözülebilir.

Simetrik Şifreleme

Tek bir anahtar ile , hem şifreleme hemde deşifreleme işlemi yapmaktır.

DES (Veri şifreleme standartı)

Herkesin bilebildiği, şifrenin gizliliğine dayalı , IBM tarafından üretilenen bir standart simetrik algoritmadır. Key 56 bit sabittir.
  • Permutasyon fonksiyonu ile yer değiştirme yapılır. Bu yüzden metinden bir bit bile değişirse, şifreli metnin neredeyse tamamı değişir.
  • Metin ikiye bölünür.(sol,sağ) Keyden subkeyler üretilir. Sağ taraf, subkey ile F fonksiyonuna yönlendirilir. F fonksiyonu, sol taraf ile xor'lanır. Sonraki aşamada XOR'lanmış değer sağ taraf, F fonksiyonun sol taraf olur. Bu işlem 16 defa yapılır.
  • Rivayet: Artık kullanımı iptal edilmiştir. Güvensizdir. Çünkü : Deşifrelemede, key'e bir bit yaklaşılırsa. Metinin yarısı çözülür.
  • 99da 22 saat 15 dakikada kırılabilmiştir. (Metin : Romada görüşürüz. Herkes AES kullansın.)
  • DES'in açığı bilerek bırakılmamıştır. O dönemde güçlü olduğu düşünülüyordu. (1977)

AES (Gelişmiş şifreleme standartı)

Joan Daemen ve Vincent Rijmen adlı 2 belçikalı bulmuştur. Romadaki AES yarışmasında birinci olmuştur. (15 algoritmadan) Asıl adı : RIJNDAE
  • AES, 2000 yılında çıktı. Keyler 128,196 ve 256 bittir. Blok boyutu 128 bittir.

RC4

40-2048 bit key sahibi, 256 roundlik bir şifreleme biçimidir.

Asimetrik Şifreleme

Şifrelemek için ayrı şifre, şifrelemiş metini çözmek için ayrı şifre gerek şifreleme biçimidir.

RSA

Asal sayıların kullanıldığı asimetrik şifreleme algoritmasıdır.

CBC modu

iv (initialization vector) : başlangıç vektörü. şifreleme algoritması için gerekli olan başlangıç bilgisidir.(gizlenmelidir) 0. bloktan sonrakiler için gerekmemekte.

CFB modu

Kendini feedbackleyen moddur.

Hash

Veriyi özetlemek, doğruluğunu kontrol etmek için kullanılan fonksiyondur. Geri döndürülemez olmamalıdır. Adli işlerde , kanıtların doğruluğunu ve değiştirilmedini kanıtlamak için kullanılır. Hep sabit uzunlukla çıktı verir.

md5

popüler ve hızlı hash algoritmasıdır. Sözlük saldırısı ile geri döndürebilme ihtimalı vardır. md5("dsadas".text) ile tuzlama yapılarak bundan korunulabilmektedir.

Bir çok programlama dilinde var olan, String Replace fonksiyonları, bir kelimenin kullanmasını engellemede çözüm yolu olduğu düşünülse bile bu fonksiyonun bir zayıflığı vardır.

 

herhangi bir dilde stringi replace etmeyi deneyelim. (ö: php)

$id = str_replace('union', '', strtolower($_GET['id']));

Bu fonksiyon dışardan aldığı bütün union kelimeleri yok edecektir.

"union-union"  : "-"

fakat biz yinede union kelimesi gönderebiliriz.

ununionion şeklindeki bir kullanımda fonksiyon, unionu yok edip yerine yine union bırakacaktır.

"ununionion" : "union"

 

Bu zayıflığı kapatmak için algoritma

while(kelime.deVarMı(silinecek)){
kelime = kelime.replace(silinecek,"");
}

SQL injection açığı bulunan bir sitede , union komutu kullanılarak, diğer tablolardanda bilgi alma biçimidir.

sunucu tarafından şöyle bir açık olduğu varsayılsın

$getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";

bu durumda

' OR true #

ile sql injection olduğundan emin olunur.

' UNION SELECT * FROM diger_tablo #

ile diğer tablolara erişibilir.

Fakat şöyle bir sorun çıkabilir : Tabloların kolon sayıların eşit olmaması.

' OR true UNION SELECT 1,2,3 #

Biçiminde tek tek deneyerek, mevcut tablonun kolon sayısını elde edebilirsiniz.

Not

Eğer tablo isimlerini ve kolonlarını öğrenmek isterseniz. Aşağıdaki sorgularla aynı yöntemi deneyebilirsiniz
select * from information_schema.`TABLES`
select TABLE_NAME from information_schema.`TABLES` 
select TABLE_NAME,COLUMN_NAME from information_schema.`COLUMNS`

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php

//fonksiyonumuzu deneyelim : mesala 20'nin asal çarpanları
var_dump(asalcarpanbul(20));


// Bu fonksiyon sana bir sayının asal çarpanlarını array halinde döndürür
function asalcarpanbul($x){
## asalcarpanbul() : asal carpan bulma fonksiyonu by faruk can /farukcan.net
$x_guncel = $x;
$asalsayilar = Array();
$carpanlar = Array();
for($i=2;$i<=$x;$i++){
$bolenadet = 0;
for($m=1;$m<=$i;$m++){
if($i%$m==0) $bolenadet++;
}
if($bolenadet == 2){
array_push($asalsayilar, $i);
}
}
foreach ($asalsayilar as $asal) {
while($x_guncel%$asal==0){
array_push($carpanlar, $asal);
$x_guncel= $x_guncel/ $asal;
}
}

return $carpanlar;
} // fonksiyon sonu

?>