her şeyden önce meraklı biri olman gerekiyor. gerçekten araştırmayı seven biri olmalısın, bir işlevin ne yaptığını bilmek yetmez, nasıl çalıştığını da bilmelisin. genelde insanlar hazır araçları kullanarak bir tuşa dokunup her şeyi yapabileceğini sanıyor. ama bu mümkün değil. günümüzde çok sayıda program dili ve bunların hizmet sağladığı çeşitli cihazlarda çeşitli programlar var. öncelikle odaklanmak istediğin noktayı belirleyebilirsin, böylece öğrendiğin şeyler seni tatmin eder ve hevesin kaçmaz.
tam bu noktada chatgpt'den yardım alarak şöyle bir soru sordum;
hacklenebilir sistemlerin veya teknoloji türlerinin listesi
- Web Uygulamaları
- Ağ Sistemleri
- Mobil Uygulamalar
- Bulut Sistemleri
- Endüstriyel Kontrol Sistemleri (ICS)
- Veritabanları
- İletişim Sistemleri
- İşletim Sistemleri
- IoT (Nesnelerin İnterneti) Cihazları
- Sosyal Medya ve Hesaplar
- Yapay Zeka ve Makine Öğrenimi Sistemleri
- Fiziksel Güvenlik Sistemleri
- Donanım Tabanlı Saldırılar
bir fikir oluşturması açısından güzel bir başlangıç yaptık diyebiliriz, elimizde yüzeyselde olsa bir liste mevcut artık. peki nereden başlamak gerekir? ben olsam iot ve işletim sistemi gibi "somut" olarak nitelendirebileceğimiz çalışma sistemlerini elerdim. teorik bilgiyi pratikte uygulayabilmek için çalışma ortamına ihtiyacımız var çünkü. bu da maddi zararlar doğurabilir, o yüzden daha soyut bir başlangıç (donanıma zarar verme olasılığı bulunmayan yazılımsal çalışmalar) pratik edinmek için daha iyi bir yöntem olabilir. örneğin 1. maddeyi ele alalım, web uygulamaları. nedir bu web uygulamaları? kategorize ederek ayırmamıza pekte gerek olmayan, genel olarak internet üzerinden erişebileceğimiz hemen hemen her türlü servisi web uygulaması kabul edebiliriz. genel olarak web uygulamalarının çoğunluğunu internet siteleri ve bu internet sitelerinde yer alan bilgilerin depolandığı veritabanları oluşturur. x bir internet sitesini yeteneklerini sınamak amacıyla hacklemek istediğini düşünelim. yine chatgptye bu konuda bana bir liste vermesi için soruyorum;
- SQL Enjeksiyonu
- Cross-Site Scripting (XSS)
- Cross-Site Request Forgery (CSRF)
- Brute Force (Kaba Kuvvet) Saldırıları
- DDoS (Dağıtık Hizmet Reddi) Saldırıları
- Zafiyet Taramaları (Vulnerability Scanning)
- Güvenlik Yapılandırması Hataları
- İzinsiz Erişim (Authorization Flaws)
google'a da sorsan bunlarla ilgili tonla sonuç çıkardı, çoğu klişe ve birbirinin kopyası içerikler ama. elimizde yine 8 maddelik bir liste mevcut. muhtemelen ilk baktığında kafa karıştırıcı veya göz korkutucu geliyor olabilir. ancak hiçte öyle değil. diyelim ki hedef bir internet sitemiz var ve bir şekilde bu siteyi hacklemek istiyoruz. ama buradaki amacımız ne? siteyi ortadan kaldırmak mı, sahip olduğu tüm veriyi elegeçirmek mi yoksa tüm kontrolü elegeçirip istediğimizi yapmak mı? her bir yöntem bize farklı amaçlarda fayda sağlar. örneğin ilk maddeyi ele alalım; sql enjeksiyonu. bu yöntem bize hedef adresin veritabanına erişme hatta bu verileri yönetmeye olanak tanıyabilir. bu yöntemi kullanarak yeteneklerimizi sınamadan önce, bazı program dillerini biliyor olmamız gerekir. her internet sitesi bir sunucuda barınır ve her sunucuyu komutlarımızla kontrol etmek için bir program diline ihtiyaç duyarız (bilgisayarların işletim sistemleri gibi düşünebilirsin), genelde sunucularda en yaygın olan programlama dilleri PHP, ASP ve NodeJs'dir. ama amacımız hedef internet sitesinin veri tabanı olduğundan, daha çok SQL diline hakim olmamız gerekiyor, sunucu dilleri burada bize sistemi anlamamızda veya olası giriş noktalarını tespit etmemizde yardımcı olacak kolaylıklar sağlayabilir.
soru/hacker-olmaya-cok-istekliyim-nasil-olabilirim-69986
yukarıdaki bağlantı, üzerine yanıtlamak için düşündüğüm sorunun adresi. bu bağlantıya baktığımız zaman, bize sunucunun hangi dili kullandığı hakkında açıkça bir bilgi vermiyor. url'lerin sonunda bulunan uzantılar (.php gibi) genelde bize bunu söyler. ancak htacces tarafından bu kaldırılmış. peki sorun değil devam edelim. url'de bulunan parametreleri ele alacağız, genellikle bu uzantıdan sonra "?" ifadesi ile (site.com/anasayfa.php?haber=gundem gibi) belirtilir. burada oda yok, yine htacces tarafından bu durum ortadan kaldırılmış ve url yeniden düzenlenmiş. bu arada bahsi geçen htaccess sunucular için metin tabanlı bir yapılandırma dosyasıdır, farklı sunucularda farklı isimlere sahip olabilir ve sonu .conf şeklinde bitebilir, ama htacces dendiğinde herkes neyi kast ettiğini anlar. url'e dönersek, amacımız parametreleri analiz edip veritabanına istekte bulunmak. url tamamen düzenlendiği için pek bir seçenek yok gibi gözükse de, öyle değil. burada "soru/" kısmını veritabanında bir kolon, ardından gelen metni kolonun içeriği ve sonda bulunan sayıların ise kolondaki yeri olarak düşünebiliriz. o halde bir test yapalım. bağlantı adresini kopaylayıp sonuna +1 eklediğimde farkı bir sayfa ile karşılaşıyorum. şimdilik doğru yoldayız. sınayacağımız adresi tespit ettiğimize göre, artık veritabanına ulaşmayı deneyebiliriz.url'den gelen bu istek ve sonundaki sayılar, sunucuda veritabanına bağlanıyor ve bu içeriği buluyor. bunuda sunucu içerisinde veritabanının dilini kullanarak yapıyor. bu yüzden sql diline hakim olmamız gerekiyor. örneğin böyle bir komutta tek tırnak (') işareti kullanmış olsaydık, bu string bir değerin yazılması için komutu genişletecekti, ancak tamamlamadan bıraktığımızda bize sadece hata verecekti. veritabanına erişip erişmeyeceğimizi anlamanın en basit yolu da, veritabanı tarafından çıktılanmış bir hata bulmak. bu yüzden url'in sonun tek tırnak işareti ekleyerek bunu da sınayabiliriz. evet bir hata aldık, ama bu veritabanından değil sunucu tarafından yanıtlanan bir hataydı. eğer veritabanı tarafından verilmiş bir hata ile karşılaşsaydık, sql bilmemiz gerekecekti, üstelik tekbaşına bu da yeterli değil farklı teknolojileri kullanan çok sayıda veritabanı mevcut, bunların en yaygınlar mysql ve mssql. çoğunlukla sözdizimi (syntax) farkından dolayı dil aynı olmasına rağmen, birinde yazılan komut bir diğerinde çalışmayabilir.
yukarıdaki metine kadar olan kısımda sana sql enjeksiyon nasıl yapılır diye anlatmaya çalışmadım, basit bir örnek üzerinden bu veya benzer süreçlerin nasıl ilerlediğini açıklamaya çalıştım. bir hacker olmanın dedektif olmaktan pek bir farkı yok, her bir detayın ince analizlerini yapman gerekiyor ve bunu yapabilmek içinde sistemin yapısını anlayacak bilgiye sahip olman gerekiyor, bunu karşıladığında da onu manipüle edecek pratik beceriye (programlama dillerine) hakim olman gerekiyor. peki hangi dilleri öğrenmek gerekir diye soracak olursan, ilgini hangisi çekiyorsa. oyunları mı hacklemek istiyorsun? sistem (native) diller öğrenmelisin, bir oyunu hackleyebilmenin en basit yolu ram üzerinde gerçekleşen işlemleri manipüle edebilmekten geçiyor, bunun içinde donanıma erişimi olan native diller kullanman gerekir, web tecrübesi bir oyunu hacklemekte sana pek başarı kazandıramaz. bir mobil uygulama veya internet sitesini mi hacklemek istiyorsun? o zaman web dillerini öğrenmen gerekiyor. neyi tercih edersen et, öğrenmekle yetinme; ne yaptığını değil nasıl yaptığını bil. bu konuda bir örnek verecek olursam, çok çeşitli hack araçları dolanıyor internette, örneğin eposta adresini hackleyen bir aracı ele alalım. bu araçlar smtp veya imap adı verilen bir protokol aracılığı ile brute force yöntemini kullanarak oturum açma isteğinde bulunuyor. bruteforce listelenmiş şifreleri kullanarak oturum açma isteğinde bulunan bir çalışma prensibinin adıdır. diyelim ki kendi epostanı hacklemek istiyorsun ve bir gmail adresi oluşturdun, bu araca tek bir şifre girdin ve oda doğru, ancak araç sana şifrenin hatalı olduğunu söylüyor! bunun sebebi gmail'da smtp protokolü üzerinden erişim varsayılan olarak kapalıdır. outlook gibi eposta programlarında epostalarını almak isteyen kullanıcılar, gmail adreslerine girip 3. taraf uygulamalara izin vermek zorundadır. aracın vardı, doğru şifren vardı ama başarıya ulaşamadın. süreci otomatikleştirmenin hiçbir zararı yok, aksine faydası var. ama bu araçları kendi yapamayacağın şeyler için kullanma. kullandığın aracın nasıl çalıştığını ve ne yaptığını anlamıyor ve ihtiyacın olduğunda o aracın yapması gerekenleri programlayamıyorsan, hackerlığı yapan araçlardır sen değilsindir. ücretsiz eğitim veren ve arkasında güçlü bir topluluk olan TryHackMe platformunu kullanarak temel şeyleri hem teorik hem pratik olarak öğrenebilirsin. daha sonra ilgi alanına göre programlama dillerini de öğrenmeye başlayabilirsin. bana göre javascript (java değil) öğrenmek hem kolay, hemde gerçekten eğlencelidir. kendi kendini geliştirip bir hacker olabilir misin? mümkün. ama profesyonel bir eğitim almanı tavsiye ederim. üniversitede ilgili bölümleri okuyabilirsin. örneğin bir istatistik, matematik veya varyasyon problemi ile karşılaştın, matematikten de çok çok iyi anlıyorsun, ama zaten duruma uygun olan formülleri kullanmak yerine doğru sonuca ulaşmak için kendi çözümlerini üretmen gerekiyor, bazen üretemiyorsun da. uzun uzun yazdım ama, umarım fayda sağlayabilecek bir yazı olmuştur. son olarak yeteneklerini yasadışı şeyler için kullanma,çok ciddi cezalarla karışılabilirsin.
not: MrRobot dizisini izlemeni tavsiye ederim. senaryodaki her şey teorik olarak gerçekleşmesi mümkün şeyler. hacker temalı film ve dizilerde genelde akan yazılar, anakartta donanımlara yapılan efektler ile bu sahneler seyirciye hissettirilir, ama bu dizi de her şey gerçeğe uygun ve pek çok şey öğrenebilirsin.
[1]
Kaynaklar
- TryHackMe. Tryhackme | Cyber Security Training. Alındığı Tarih: 14 Aralık 2024. Alındığı Yer: TryHackMe | Arşiv Bağlantısı