Netcat ile Ag Oyunlari

maymuncuk.jpgNetcat, basit ama oldukca islevsel bir network aracidir. Bilimse olarak tanımlayacak olursak “TCP/IP üzerinden veri yazmak ve okumak için kullanılan Linux/UNIX/Windows sistemlerde çalışan ağ uygulamasıdır” denilebilir:)

Bu tip araçlar için genelde Isviçre çakısı tanımı kullanılır ben de benzer ama biraz daha yerli bir tanım kullanıyorum: TCP/IP aglarda kullanılan bir “maymuncuk” diyebiliriz. Bir çilingir için Maymuncuk ne ise Ağ yöneticisi için de netcat benzer manaya gelecektir.

Windows için Netcat

Linux dağıtımlarının çoğunda ve *BSD’lerde Netcat öntanımlı olarak kurulu gelmektedir. Windows sistemler için http://www.vulnwatch.org/netcat/ adresinden edineceğiniz nc.exe dosyasını uygun bir dizine atarak komut satırından kullanabilirsiniz.

Temel kullanimi…

Nc, hem istemci hem de sunucu olarak kullanılabilir. Herhangi bir portu(tcp/udp) dinleyerek sunucu olarak calistirilabilir ya da istedigimiz bir porta rastgele paketler gönderebiliriz. Bunun da ötesinde bir sistemden komut gönderip diğerinde bu komutların çalışması sağlanabilir(basit telnet aracı).

İstemci-sunucu yapısında calısmasına örnek

iki farklı sunucumuz olsun, birinde Netcat sunucu olarak calisacak ve 5000/TCP portunu dinleyecek, diger makineden sunucu belirledigimiz bu makinenin TCP/5000 portuna nc ile baglanacagız.

A sistemi (172.16.10.1)

#nc -l -n 172.16.10.1 5555

B sistemi (172.16.10.2)

$ nc 172.16.10.1 5555

B sisteminden A sistemine baglandıktan sonra terminallerin birine yazacağınız herhangi bir şey aynen diğer terminale aktarıalcaktır.

Burada denediğimiz örneği UDP protokolü ile deneyebilirdik. Kullanımda tek farkeden –u parametresinin eklenmesidir.

#nc -l –u -n 172.16.10.1 5555 gibi

-l ile dinleme modunda çalışacağı,
-u ile udp protokolü üzerinden çalışacağı
-n ile de dns ya da servis ismi çözümleme yapmamasını istediğimizi belirtiyoruz.

Netcat’i port tarama aracı olarak kullanma

Netcat’I basit bir port tarama aracı olarak kullanabiliriz. Aslında port tarama dedğimiz hedef sisteme üzerindeki portlara TCP/UDP protokollerinden biri ile bağlanarak portun açık olup olmadığının kontrolüdür.

#nc -z 172.16.10.2 21-80
Connection to 172.16.10.2 21 port [tcp/ftp] succeeded!
Connection to 172.16.10.2 22 port [tcp/ssh] succeeded!
Connection to 172.16.10.2 23 port [tcp/telnet] succeeded!
Connection to 172.16.10.2 25 port [tcp/smtp] succeeded!
Connection to 172.16.10.2 80 port [tcp/www] succeeded!

istenirse –w(timeout) ile baglantılarda ne kadar sure bekleyeceği belirlenebilir.

Netcat’i Sistem shell’i olarak kullandırtma

NC’in sağladığı özelliklerden biri de –e parametresi ile dinleme modundaki sisteme gönderilen komutları istenilen bir shell’e yönlendirebilmesidir. Bu bize ne sağlar?

İki system arasında telnet/ssh vs gereksinimi olmadan komut çalıştırabiliriz daha da ötesi Firewall /IPS sistemlere yakalanmadan evini/işyerinizdeki makinenize ulaşarak komut çalıştırabilirsiniz.

Örnek,

A Sistemi

$nc -l -p 4000 -e /bin/bash

B Sistemi

$nc ip_Adresi 4000
ls
nc_win1.PNG
Not: udp de -e calismiyor, bunun yerine nc –u –l ip_Adresi|/bin/bash
Ile de benzer bir system elde edilebilir.

Netcat ile Dosya Transferi

Alıcı taraf

#nc -l 172.16.10.1 3344 > b.sh

Gönderici taraf

$ cat a.sh |nc 172.16.10.1 3344
^C punt!
Dosyaların imzalarını karşılaştırarak transferin gerçekten sağlıklı yapıldığını test edebilirsiniz.

$ md5 a.sh
MD5 (a.sh) = ef65bdbb88fa94a88cf8450fc8f9ed57

#md5 b.sh
MD5 (b.sh) = ef65bdbb88fa94a88cf8450fc8f9ed57
Güvenli Dosya Transferi

Nc kullanarak yaptığımız dosya transferleri herkese açık ağlar üzerinden geçiyorsa içeriğinin okunması mümkündür. Dosya transferini gerçekleştirirken içeriği şifrelersek aradaki meraklı okuyucuların içeriğimizi görmeleri engellenebilir.

Alıcı taraf
#nc -l 172.16.10.1 3344 |openssl aes-256-cbc -salt -d > openvpn_yedek.pdf
enter aes-256-cbc decryption password:

#md5 openvpn_yedek.pdf
MD5 (openvpn_yedek.pdf) = 1b165229967c14e3e1026cded3f024d6
#file openvpn_yedek.pdf
openvpn_yedek.pdf: PDF document, version 1.3

Gönderici Taraf

$ md5 openvpn.pdf
MD5 (openvpn.pdf) = 1b165229967c14e3e1026cded3f024d6

$ openssl aes-256-cbc -salt -e < openvpn.pdf | nc 172.16.10.1 3344
enter aes-256-cbc encryption password:
Verifying – enter aes-256-cbc encryption password:

Disk imajlarını yerel ağda Yedekleme

Hepimiz Norton Ghost tarzı yerel ağdaki makinelerin imajlarını merkezi bir yere yedekleyen ve istenildiğinde bu imajlardan geri dönen sistemleri kullanmışızdır. NC ile de buna benzer bir yapı kurabiliriz, biraz daha az işlevsel ama kullanışlı….

Alıcı taraf

#nc –l ip_Adresi 1234| dd of=/yedek/ipnumber.imaj

Gönderici taraf

#dd if=/dev/hda | nc merkezi_yedek_ip 1234

Çeşitli ek komutlarla daha esnek bir yapı kurulabilir. IStenildigi zaman benzer şekilde yedek sistemlerin imajindan dönülebilir.

Proxy uzerinden SSH Kullanimi

Bulunduğunuz ağda internete çıkışlar Proxy üzerinden ise dışarıya normal telnet, ssh bağlantısı kuramazsınız. Bunun için Proxy’nin dilineden anlayan bir istemci geerkir. Nc bu özelliği de bize sunar.

Proxy kullanmasını istediğiniz kullanıcının ssh_config dosyasına aşağıdaki satırı ekleyerek SSH bağlantılarının belirtilen proxy üzerinden yapılacağını belirtebiliriz.

ProxyCommand /usr/bin/nc -X connect -x 172.16.10.2:8080 %h %p

%h ve %p gireceğiniz host ismi ve port değişkenlerini tutacaktır.

NOT: Bu tip bir bağlantıyı Proxy üzerinden yapabilmeniz için Proxy’de connect methodu aktif olmalı(hemen her prozy de aktif olmak zorunda, ssl bağlantıları vs için) ve ssh yapmaya çalıştığınız portlar izinli olmalı.

Squid için Örnek,

acl CONNECT method CONNECT
acl SSL_ports port 443
http_access deny CONNECT !SSL_ports

Bu demektir ki Squid üzerinden sadece 443. porta Connect methodu izni verilmiştir, bu da karşı tarafta 22. portta dinlemede olan SSH sunucunuza bağlanamayacağınız anlamına gelir. Ya SSH’I 443. portta çalıştıracalsınız ya da belirli iplerden 443. porta gelen istekleri SSH portuna yönlendireceksiniz.

Telnet istemcisi olarak Netcat

Netcat’i gerçek bir telnet istemcisi olarak kullanmak isterseniz –t parametresi hemen yardımımıza lkoşacaktır. Nasıl mı?

Önce -t parametresi kullanmadan telnet sunucuya yapılan bağlantıyı inceleyelim…

#nc 172.16.10.2 23
ÿý%login gelmiyor
^C

bir de -t parametresi kullanılarak telnet sunucuya yapılan bağlantıya bakalım

[email protected]#nc -t 172.16.10.2 23
ÿý%ÿû&ÿýÿý ÿý#ÿý’ÿý$ÿûÿýÿý”ÿýÿûÿý!ÿûÿû
FreeBSD/i386 (home-labs.open.edu.tr) (ttyp1)

login: huzeyfe
Password:deneme

Login incorrect
login: huzeyfe
Password:gercek_parolam

Last login: Thu Jun 28 22:12:01 from 88.235.46.58
Copyright (c) 1992-2004 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.

FreeBSD 5.3-RELEASE (GENERIC) #0: Fri Nov 5 04:19:18 UTC 2004

Welcome to FreeBSD!
-bash-2.05b$ls

Kaynaklar:

[1] http://bsdsupport.org/
[2] OpenBSD NC Man sayfasi
[3] http://netcat.sourceforge.net/netcat
Bu yazı ilginizi çektiyse Kıvılcım Hindistan’in yazdığı Netcat belgesine de gözatmak isteyeceğinizi düşünüyorum (http://www.fazlamesai.net/index.php?a=article&sid=1360

This entry was posted in Network Security, Network Tools. Bookmark the permalink.

1 Response to Netcat ile Ag Oyunlari

  1. alper says:

    tesekkurler güzel yazi

Leave a Reply

Your email address will not be published. Required fields are marked *

twelve + sixteen =