Nmap Sonuçlarının Yorumlanması Nmap normal, xml, script kiddie ve parse edilebilir olmak üzere 4 biçimde rapor üretebilmektedir. Sızma testleri bakış açısından nmap raporlarının yorumlanması oldukça büyük önem taşımaktadır. Parse Edilebilir Biçimde NMAP Raporlarının Yorumlanması 192.168.1.0/24 ağı için aşağıda belirtilen Nmap parametleri ile örnek bir taramanın gerçekleştirilmesi sonucunda çalışma dizininde rapor adında Nmap parse edilebilir biçimde bir dosya oluşmaktadır. # nmap -n -Pn -ss -su --open -T4 --top-ports 10 192.168.1.1-254 -og rapor Oluşan rapor sonucu aşağıda görülebilmektedir. # ls -l rapor Oluşturulan rapor dosyasının içeriği ise belirtildiği şekilde olmaktadır. # cat rapor Host: 192.168.1.1 () Status: Up Host: 192.168.1.1 () Ports: 21/open/tcp//ftp//, 22/open/tcp//ssh//, 80/open/tcp//http//, 443/open/tcp//https//, 53/open filtered/udp//domain//, 67/open filtered/udp//dhcps// Host: 192.168.1.20 () Status: Up Görüldüğü üzere kullanılan ayraçlarla ister herhangi bir yazılım dili ile isterse işletim sistemi komutları ile parse edilmeye uygun bir formata sahip olduğu görülebilmektedir. Aşağıda belirtilen betik yardımı ile -og parametresi ile oluşturulan rapor dosyalarının parse edilmesi kolayca gerçekleştirilebilmektedir. Betiğin güncel haline https://github.com/galkan/others/blob/master/programming/bash/parse_nmap_og.sh adresinden erişim sağlanabilmektedir. 1
Betik çalışma dizininde nmap_raporlayici.sh isimli bir dosyaya kaydedilerek erişim izinlerinin belirtilmesinin ardından çalıştırılarak belirtilen formatda çıktı üretmektedir. #./nmap_raporlayici.sh rapor tcp 192.168.1.1 ------------ 21/ftp 22/ssh 80/http 443/https 192.168.1.23 ------------ 22/ssh Metasploit İle NMAP Sonuçlarının Yorumlanması Tarama sonrası Nmap raporlarının süzülerek yorumlanması oldukça büyük önem arz etmektedir. Çünkü bir sonraki hedefli atakların gerçekleştirilebilmesi için istenen ip adres ve port bilgisinin temin edilmesi gerekmektedir. Örneğin 22/tcp açık durumda olan ip adreslerinin temin edilmesi veya 445/tcp portu açık durumda bulunan ip adreslerinin temin edilmesi durumu sızma testleri esnasından oldukça sık bir biçimde karşılaşılabilecek bir durumdur. Bu amaçla çeşitli araçların kullanımı mümkün olmaktadır. Veya kişisel olarak geliştirilmiş araçların yardımı ilede bu işlem mümkün olmaktadır. Burada ise bu işlemin metasploit ile nasıl yapılabileceğinden bahsedilecektir. Metasploit postgresql veritabanı desteği ile sonuçların aktarılmasına izin vermektedir. Yine kendi bünyesinde bulunan komutlar yardımı ile bu sonuçların süzülmesine ve hatta dışa aktarılmasına olanak sağlamaktadır. Aşağıda bu amaçla öncelikle bir Nmap taraması gerçekleştirilmiş ve rapor formatı XML olarak seçilmiştir. # nmap -n -Pn -ss -su --open -T4 --top-ports 10 192.168.1.1-254 -ox rapor Görüldüğü üzere çalışma dizini içerisinde rapor isimli Nmap XML formatında rapor dosyası oluşmaktadır. Ardından metasploit ile postgresql veritabanı kullanımı için aşağıdaki adımların sırası ile takip edilmesi gerekmektedir. # sudo su postgres postgres@kali:/root$ createuser galkan -P Enter password for new role: Test12345 Enter it again: Test12345 Shall the new role be a superuser? (y/n) n Shall the new role be allowed to create databases? (y/n) n Shall the new role be allowed to create more new roles? (y/n) n 2
$ createdb --owner=galkan pentestdb # su postgres postgres@kali:/root$ psql -U postgres psql (9.1.9) Type "help" for help. postgres=# \l List of databases Name Owner Encoding Collate Ctype Access privileges -----------+----------+-----------+---------+-------+----------------------- pentestdb galkan SQL_ASCII C C postgres postgres SQL_ASCII C C template0 postgres SQL_ASCII C C =c/postgres + postgres=ctc/postgres template1 postgres SQL_ASCII C C =c/postgres + postgres=ctc/postgres (4 rows) PostgreSQL veritabanı için gerekli adımların tamamlanmasından sonra msfconsole başlatılarak veritabanına bağlantı işlemi gerçekleştirilerek aktif bir biçimde sonuçların veritabanına aktarımı ve raporlanması işlemi mümkün olmaktadır. # msfconsole msf > db_connect galkan:test12345@127.0.0.1/pentestdb NOTICE: CREATE TABLE will create implicit sequence "clients_id_seq" for serial column "clients.id" NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "clients_pkey" for table "clients" [*] Rebuilding the module cache in the background pentestdb adında bir veritabanı oluşturuldu ve galkan kullanıcısının Test12345 parola bilgisi ilede bu veritabanına erişimine olanak sağlanmıştır. Ardından oluşturulan xml rapor dosyası db_import komutu yardımı ile veritabanına aktarılmaktadır. msf > db_import /root/rapor [*] Importing host 192.168.1.1 [*] Importing host 192.168.1.21 NMAP raporunun veritabanına aktarılmasının ardından veritabanı komutları yardımı ile istenilen işlemler gerçekleştirilmiştir. Kullanılabilir komutların listesine help komutu yardımı ile ulaşılabilmektedir. 3
4
msf > help hosts services List all hosts in the database List all services in the database hosts komutu ile rapor sonucunda tespit edilen ip adresleri ile ilgili birtakım işlemler gerçekleştirilebilmektedir. msf > hosts address mac name os_name os_flavor os_sp purpose info comme nts ------- --- ---- ------- --------- ----- ------- ---- -------- 192.168.1.1 EC:23:3D:D4:85:51 Unknown device 192.168.1.21 7C:D1:C3:F2:84:89 Unknown device -c parametresi ile rapor sonucunda belirlenen isteğe bağlı kolonlara göre filtreleme işlemi gerçekleştirebilmektedir. Aşağıda işletim sistemi ve ip adres bilgisine göre tüm ip adresleri filtrelenmektedir. Sadece hosts komutu ile tüm ip adresleri listelenebilmektedir. msf > hosts -c address, os_name address os_name ------- ------- 192.168.1.1 Unknown 192.168.1.21 Unknown 192.168.1.22 Unknown Filtreleme sonucunda oluşan raporlar işletim sisteminde bir dosyaya aktarılması mümkün olmaktadır. Bunun için -o parametresi kullanılmaktadır. msf > hosts -c address -o /root/hosts.txt [*] Wrote hosts to /root/hosts.txt Oluşan dosyanın içeriği ise aşağıdaki gibi olmakadır. # cat /root/hosts.txt "192.168.1.1" "192.168.1.21" 5
services komutu yardımı ile msf > services 192.168.1.1 21 tcp ftp open 192.168.1.1 22 tcp ssh open 192.168.1.1 53 udp domain open msf > services -u 192.168.1.1 21 tcp ftp open 192.168.1.1 22 tcp ssh open 192.168.1.1 53 udp domain open msf > services -r tcp -u 192.168.1.1 21 tcp ftp open 192.168.1.1 22 tcp ssh open 192.168.1.1 80 tcp http open msf > services -r udp -u 192.168.1.1 53 udp domain open 192.168.1.1 67 udp dhcps open 192.168.1.21 123 udp ntp open msf > services -S 80 192.168.1.1 80 tcp http open 192.168.1.37 80 tcp http open 6
Örneğin 192.168.1.0/24 ağı için gerçekleştirilen tarama sonucundaki 22/tcp,80/tcp ve 443/tcp portu açık olan ip adreslerinin listelenmesi için aşağıdaki komut girilmelidir. msf > services -u -r tcp -c port host port ---- ---- 192.168.1.1 21 192.168.1.1 22 192.168.1.1 80 msf > services -u -r tcp -c port -o /root/services.txt [*] Wrote services to /root/services.txt # cat services.txt "192.168.1.1","21" "192.168.1.1","22" "192.168.1.1","80" 7