2010 Kocaeli Linux Günleri - Linux Güvenlik UygulamalarıLinux
Nmap sonuclarinin yorumlanmasi
1. 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
2. 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.
2
# ./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
3. 3
$ 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.
5. 5
msf > help
...
hosts List all hosts in the database
services 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"
...
6. 6
services komutu yardımı ile
msf > services
host port proto name state info
---- ---- ----- ---- ----- ----
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
host port proto name state info
---- ---- ----- ---- ----- ----
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
host port proto name state info
---- ---- ----- ---- ----- ----
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
host port proto name state info
---- ---- ----- ---- ----- ----
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
host port proto name state info
---- ---- ----- ---- ----- ----
192.168.1.1 80 tcp http open
192.168.1.37 80 tcp http open
7. 7
Ö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"
...