netcat kullanımı ile “cool” hareketler (basit netcat kullanımı örnekleri)

Netcat TCP , UDP portlarını okuyabilen ve yazabilen çok yönlü bir araçtır. Netcat ile port dinleme, port tarama ,port dinleme, bağlantı oluşturma gibi birçok şey yapabilirsiniz. Kendi başına kullanılabileceği gibi başka bir uygulamanın arkaplanında da çalışabilir.

“nc -h” komutuyla yardım görüntülenebileceğini belirttikten sonra birkaç basit uygulama yapalım.

Port tarama
TCP port taramasının ardındaki fikir three way handshake (3’lü el sıkışma)dir. RFC ye göre açık bir TCP portuna bir SYN paketi gönderildiğinde ACK ile cevap verilmelidir. Kapalı portta ise
RST paketi gönderilir. Biz örnek olarak TCP 139 nolu Netbios-ssn servisi portunu tarayacağız.. “nc -v hedef_IP 139” komutunu veriyoruz. Netcat bağlantıyı kurup bize portun açık olduğu bilgisini veriyor ve sonraki komutlarımızı bekliyor.
nc port tarama
Eğer bu komut esnasında Wireshark kullanarak gidip gelen paketleri dinlersek three way handshake ‘i görebiliriz.
Aşağıdaki görüntüde 3 numaralı paket SYN paketi tarafımızdan gönderiliyor. Ardından karşı sistem bu paketi port açık olduğu için 4 te görülen SYN,ACK paketi ile cevaplıyor. Bizde 5 teki gibi ACK paketi ile onu cevaplayıp el sıkışmayı tamamlıyoruz.
three way hanshake
Eğer port kapalı olsaydı biz SYN  paketini gönderdiğimizde karşıdan RST (reset) paketi ile cevaplandırılacaktık ve bağlantı sonlanacaktı.
Bir UDP portu tarayacak olursak burada biraz farklı bir mantığın olduğunu görürüz. Çünkü UDP stateless bir protokoldür ve three way hanshake kullanmaz.
“nc -vvnzu -w 1 192.168.72.133 160-163” ile ( -vv : extra verbosity, n: no name resolution, w: wait 1 second timeout, z: port; u:udp tarama modu) ile 160 163 arasındaki portları tarıyoruz. UDP port taraması yapılırken boş bir UDP paketi yollanır port açıksa cevap gelmez, kapalıysa bağlantı (ICMP unreachable mesajı ile) reddedilir. Ancak cevap gelmemesi hedefin ayakta olmamasından ya da firewall un bu hedefe ICMP mesajlarını engellemesinden kaynaklanıyor olabilir. Dolayısıyla bizde false-positive dediğimiz aslında doğru olmayan bir sonuç alırız. Ayrıca port taramasının yoğunluğu IDS veya IPS ‘in dikkatini çekebilir ve mesajlar düşürülebilir.

  • Banner yakalama (Banner Grabbing)
    “nc -v localhost 80” (-v verbosity) komutunu vererek kendi makinemde çalışan http (port 80) servisine bağlanıyorum. Bağlantı sağlandıktan sonra “HEAD / HTTP/1.1” komutunu veriyorum ve sunucu bana banner bilgisini dönderiyor.
    nc1Böylece apache 2.2.22 versiyonu kullanıldığını vs. görmüş oluyorum. Bu yöntem kullanılırken servis bannerlarının değiştirilmiş veya spoof edilmiş olabileceği unutulmamalıdır.
  • Basit Chat Sistemi
    İki bir Linux ile bir xp makine arasında basit bir chat hizmeti oluşturacağız. Bunun için xp makinanın C:WINDOWS klasörüne nc.exe dosyasını atıyoruz. cd komutunu kullanarak gerekli konuma geçiş yapıp        (yine xp de) netcat ‘i port 4444 ü dinleyecek şekilde “nc -lvp 4444” (-l : listen, v : verbosely, p : port 4444 ) komutuyla ayarlıyoruz. Bu işlem “netstat -an :FIND “4444”  ile ( : nin altgr ve z nin solundaki tuşla yapıldığına dikkat) doğrulanabilir.
    Şimdi linux üzerinden “nc -v xp_nin_IP_adresi 4444”  ile bağlanabiliriz. Artık komut satırına yazdıklarımız xp nin komut satırında görüntülenecektir.
    wake up neo
  •  Dosya Transferi
    “nc -lvp port_numarası” komutunu kullanarak istediğimiz bir portu dinlemeye alabiliriz. Bunu kullanarak netcat aracılığıyla Linux makinemizden Xp makinemize dosya transferi yapalım.
    Xp makinemizde “nc -lvp 4444 > gelenmesaj.txt” (l:listen , v:verbosily p:port ) komutuyla 4444 portu dinlemeye alıyoruz ve gelen veriyi gelenmesaj.txt dosyasına yönlendiriyoruz. Linux makinemizde ise “nc -v xp_nin_ip_adresi 4444 < gidenmesaj.txt”  komutuyla  gidenmesaj.txt dosyasını karşıya aktarıyoruz.

    • Uzak Yönetim (Remote Administration)
      Netcat basit konsol programları için network wrapper olarak görev yapabilir. Standart girdi ve çıktıyı (input ve outputu) ağa yönlendirerek cmd.exe gibi bir konsol programı local bir porta (bind) bağlayabilir. Bu işlem bind shell olarak bilinir. Bu porta bağlanan herkese komut satırı sunulmuş olur. Burada karşımıza iki senaryo çıkar:
      Bind Shell
      Elimizde router arkasında (NAT ‘lanarak internete çıkan, private IP kullanan) Ali ve public IP ile doğrudan internete çıkan Bahri ‘nin olduğu bir senaryo olsun. Bahri, Ali ‘nin yardımını istiyor.
      Bahri “nc -lvp 4444 -e cmd.exe” (e : execute) komutunu vererek 4444 numaralı porta gelen verileri execute ederek cmd.exe nin standart input outputlarını bu porta yönlendiriyor.
      Artık Ali “nc -v bahrinin_IPsi 4444” komutunu kullanarak bağlandıktan sonra komut satırına ulaşabilir. Ali’nin sahip olduğu haklar Bahri’nin sahip olduğu haklara bağlıdır.
      Reverse Shell (Tersine kabuk bağlantısı)
      Elimizde router arkasındaki (NAT ‘lanarak internete çıkan, private IP kullanan) Ali ve public IP ile doğrudan internete çıkan Bahri ‘nin olduğu bir senaryo olsun. Ali, Bahri’den yardım istesin.
      Ali router arkasında olduğu için (private IP kullandığı için) Ali ‘nin reverse shell oluşturması gerekiyor. Bahri “nc -lvp 4444” ile gelen istekleri dinliyor. Ali ise “nc -nv bahrinin_IPsi 4444 -e cmd.exe” (linux için /bin/bash) ile Bahri’ye reverse shell bağlantısı açıyor.

Linux üzerinde bir servis başlatma ya da durdurma durumunu sorgulama

Servis scriptleri “/etc/init.d/” konumu altındadır. Sözgelimi Apache sunucu servisini başlatmak için  ” sudo /etc/init.d/apache2 start ” komutu kullanılır. durdurmak için  benzer şekilde  start yerine “stop”, durumunu sorgulamak için “status” kullanılabilir. Servis başlatıp durdurmanın bir diğer yolu ise ” sudo service apache start” komutudur. Servisin dinlemede olup olmadığını görmek için “netstat -antp” (UDP üzerinden verilen servisler için -anup) komutu kullanılabilir. Apache sunucusu default olarak 80 numaralı portta dinlemede olacaktır.

Linux manuel network arayüzü yapılandırması nasıl yapılır?

Ag arayüzünü manuel olarak yapılandırma :
“ifconfig eth0 192.168.1.2/24”  : elle IP / subnetmask atama (farklı subnet mask için netmask kullanabilirsiniz)
“route add default gw 192.168.1.1” : default gateway  ayarlama
“sudo echo nameserver 4.4.4.4 > /etc/resolve.conf” :  dns sunucusunu ayarlama

Backtrack ‘i otomatik IP almak üzere ayarlamak

Backtrack footprint oluşturmamak için default olarak otomatik IP almaya ayarlanmamıştır. DHCP ‘den otomatik IP almayı sağlamak için “dhclient eth0” ( eth0 otomatik IP alınacak arayüz) komutu verilir.
Dhclient ı durdurmak için “killall dhclient” komutu verilir. “ps  –ef | grep dhclient ” komutuyla işlem doğrulanabilir. (ps -ef o anda sistemde çalışan processlerin listesini görüntüler)

apt-get install ile Herhangi birşey yükleyemiyorum

Ne yüklemeye çalışırsam çalışayım aynı hatayı alıyorum. “Unable to locate package … ”

Bu sorun çoğu zaman yazılım depolarının listesini tutan dosyanızda bir sorun olmasından kaynaklanır. Bu dosyaya

sudo kate /etc/apt/sources.list

ile ulaşıp yüklemek istediğiniz paketleri bulunduran adresleri içerecek şekilde düzenleyebilirsiniz.

Klavye Yerleşimini (layout ) nasıl değiştiririm?

Bazen klavye ayarımız kullandığımızdan farklı bir düzende olabilir. Bu durum, ubuntu desktop gibi GUI yüklenmemiş bir sistemdeyseniz gayet can sıkıcı olabilir. Hatta farkında olmazsanız şifresini bildiğiniz halde bastığınız karakter aynen çıkmadığı için bilgisayarınızı açamazsınız. Ancak durumu düzeltmek gayet basit. Terminalden

sudo setxbmap -layout tr

komutunu vererek Türkçe/Q klavye düzenine geçebilirsiniz.

Linux ortamında bir disk bölümü kalıcı olarak nasıl bağlanır?

Linux dağıtımları sistemin yüklü olduğu bölümü otomatik olarak bağlar ancak diğer bölümler otomatik olarak bağlanmaz. Bazen elle bağlamanız veya tetiklemeniz gerekebilir. Bölüme erişmek istediğinizde (örn: simgesine tıklamak) linux kendisi bağlar. Fakat bu durumda bağlanana kadar kısayollarınız çalışmaz, dosyalara erişilemez vs. Bu sebeplerden kalıcı olarak bağlamanızda fayda vardır.

Terminali açıyoruz ve

sudo fdisk -l
komutuyla disk bilgilerimizi görüyoruz.Bağlamak istediğimiz bölüme karar veriyoruz.

fdisk

Ben /dev/sda3 bölümünü masaüstümde depo klasörüne bağlayacağım yani /cyber/home/Desktop/depo konumuna. depo kalsörünü oluşturmak için aşagıdaki komutu yazıyorum.
sudo mkdir /cyber/home/Desktop/depo

sudo blkid
komutuyla bağlamak istediğimiz bölümün UUID değerini görüyoruz.Bu değeri bir yere kopyalayalım.Benim UUID değerim 4025E39A25449DF9 dosta tipim ntfs.

blkid

sudo kate /etc/fstab
diyerek fstab dosyasını düzenlemek için açıyoruz. Bu bağlama bilgisinin tutulduğu dosya.Eğer kate yüklü değilse başka bir metin editörünü (gedit,gvim,leafpad,nano,vi gibi) kullanabilirsiniz. kate yerine ismini yazmanız yeterli.
Dosyayı açtıktan sonra yeni bir satır gireceğiz. Gireceğimiz satırın formatı
UUID=”kopyaladığımız_uuid _değeri” baglanacak_konum dosyatipi defaults 0 0
şeklinde olmalı.Örneğin ben:
UUID=4025E39A25449DF9 /cyber/home/Desktop/depo ntfs defaults 0 0
şeklinde bir satır giriyorum.

fstab

Dosyayı kaydedip kapattıktan sonra

sudo mount -a

diyorum ve işlem tamamlanıyor.

EDİT:

Eğer dosyalarınızı daha önceden windowsla oluşturmuşsanız ve Türkçe karakter kullanmışsanız windows ve linux un dosya isimlerinde farklı kodlamalar kullanması sebebiyle karakterle yanlış görülebilir ve başınızı ağrıtabilir. Bu durumda bağlamayı şu şekilde yapın: (anahtar seçenek windows_names)

UUID=<uuid değeri>    <bağlama noktası>        ntfs-3g defaults,windows_names          0    0

Son olarak değinmek istediğim bir nokta var ki o da Windows ve linux u bir arada kullananları ilgilendiriyor. Windows 8 sürümleri Fastboot olarak isimlendirilen bir hızlı açılış özelliği kullanıyor. Bu özellik disk bölümünün linux tarafından normal bir şekilde read-write modunda bağlanmasını engelliyor.

Failed to mount '/dev/sda3': Operation not permitted
The NTFS partition is in an unsafe state. Please resume and shutdown
Windows fully (no hibernation or fast restarting), or mount the volume
read-only with the 'ro' mount option.

” Şeklinde bir hata alırsınız.

Bu noktada çift sistem kullananların karşısında birkaç seçenek var.

  • Disk bölümünü read write modu yerine read only modda bağlamak;
    Yukarıdaki işlemleri bir farkla uyguluyoruz: fstab daki satırda seçenekler arasına defaults yerine ro yazıyoruz. Yani şu şekilde
    UUID=<uuid değeri>    <baglama noktası>        ntfs-3g ro                0    0
  • Windowsu kapat komutunu verirken shift tuşuna basılı tutarak o seferlik Fastboot özelliğini devre dışı bırakmak.
  • Fastboot u tamamen devredışı bırakmak.
    Nasıl yapılacağına şurdan bakabilirsiniz. Bu yöntem sistem açılışı hızını düşürecektir.
  • fastboot dosyasını silmek;
    UUID=<uuid değeri>    <baglama noktası>        ntfs-3g remove_hiberfile              0    0şeklinde bağlayarak bunu yapabilirsiniz. Ancak bu yöntemin sağlıklı olmadığını, windows oturumunun kaybedilmesiyle sonuçlanacağını söylemek gerek. Bu yüzden sıradan durumlarda en mantıksız seçenek bu olacaktır. Ek olarak bu yöntem sistem açılışı hızını düşürecektir.

Yeni linux’cular için bazı Bash shell komutları

Linux kullanımı kabiliyeti bilgisayar bilimlerinin birçok alt dalında tabiri caizse kolunuzdaki altın bilezik gibi görülebilir. Linux kullanırken de bilinmesinde fayda olan hatta bazen zorunlu olan bazı komutlar vardır. Özgür yazılım dünyasına yeni girmiş ve ilk adımlarını atan biri olarak çok kullandığım, zaman zaman kritik durumlarda işimi kolaylaştıran komutları benim gibi bu dünyaya yeni yeni merhaba diyenler için paylaşmak istedim. Elimden geldiğince kullanımlarını açıklamaya çalıştım.

whoami // ile o an kimin kimliğinde olduğumuzu görebiliriz.

fdisl -l // Disk bilgisini görüntüler(sudo ile çalıştırmanız gerekebilir).

df // Komutu ile de yine disk bölümleri (kullanılan ,alan bağlama noktası vs) hakkında bilgi alabiliriz.

/proc/cpuinfo // Dosyasında cpu ile ilgili bilgiler depolanır. Cat ile bilgi edinebiliriz.
free // İle kullanılan bellek (Ram ve swap alanı) miktarını görebiliriz.

finger // ile(eğer sisteminizde yüklü değilse apt-get install finger) sistemdeki kullanıcılara ait bilgileri görüntüleyebiliriz.

userdel // ile bir kullanıcıyı sistemden silebiliriz ama dosyaları saklanır. «userdel -r » ile hem kullanıcı hem de o kullanıcının dosyalarını silebiliriz.

last // sisteme ne zaman girilmiş, ne zaman reboot edilmiş gibi bilgileri görebiliriz.

uptime //Sistemin açık kalma süresini öğrenmek için komutunu kullanabiliriz.

top //ile sistemde çalışan süreçleri canlı olarak görebiliriz

grep aranacak_kelime //komutu ile bir dosya içinde bir kelime arayabiliriz.

ln -s // ile Windows sistemlerdeki kısayol oluşturma işlemini gerçekleştirebiliriz.

alias takma_ad=’komut’‘ // komutuyla sık kullandığımız komutlara takma adlar atayabiliriz. örn: alias guncelle=’sudo apt-get update’ komutu ile guncelle yazarak paket listenizi güncelleyebilirsiniz.

alias // Sistemde tanımlı takma adları görmek için yalın halde kullanabiliriz.

unalias takma_ad// Sistemde tanımlı olan takma adları kaldırmak için kullanabiliriz.

vi // metin dosyası düzenleme.
vi komutları
aşağıdaki komutları yazmak için Esc ye ardından : ne basmanız gerekli.
q //çık
q! //kaydetmeden çık
r fileName //filename adlı dosyadan okuma
wq //kaydet ve çık
w fileName //filename dosyasına kaydet (farklı kaydet)
w! fileName //filename adlı dosyanın üzerine yaz

vi kullanmak biraz zor gelebilir. Eğer görsel arayüz halihazırda kulanılabiliyorsa vi , cat , nano yerine görsel arayüze sahip bir metin editörünü root yetkisiyle açarak root yetkisine ihtiyaç halinde bile işleminizi halledebilirsiniz. örn: “su – ” ardından “sudo kate /etc/apt/sources.list “ile (kate veya sistemde yüklü başka bir metin düzenleyici) paket kaynaklarınızı tutan dosyayı düzenleyebilirsiniz. Benzer şekilde teminalden root yetkisi veya dosya sahipliği söz konusu olduğunda cp komutuyla birşeyleri kopyalamaya çalışmak yerine” su – ” ardından “sudo nautilus” (nautilus veya kubuntu için dolphin gibi başka bir dosya yöneticisi ) ile ubuntu üzerinde root izni gerektiren konumlara görsel arayüz kullanarak kopyalama silme vs yapabilirsiniz. Hatta kendi oturumunuz açıkken root haricindeki bir kullanıcı dosyasına müdahale etmek içinde aynı yöntem kullanılabilir. Sadece “su -” komutu yerine “su – o_kullanıcı” kullanmanız yeterli.

setxkbmap -layout tr // klavye ayarını türkçe yapmak için kullanılabilir.(evet o baş ağrıtan karakter sorununun çözümü bu kadar kolay 🙂 )

lspci // PCI aygıtlarını listeler.

lsusb // USB aygıtlarını listeler.

lsscsi // SCSI aygıtlarını listeler

dmidecode //Donanım hakkında çok daha detaylı bilgi verir,seri numaraları gibi

cat /proc/cpuinfo //CPU Bilgilerini görebiliriz

cat /proc/meminfo //Memory bilgilerini görebiliriz

lshw //Centos ya da bazı linux dağıtımlarda donanımı listeler.

Komutların bir kısmını slaytından (ç)aldığım Mert Can Alıcı’nın ismini anmayı ve teşekkür etmeyi borç bilirim 🙂