Nmap Scripting Engine (NSE) Nmap yazılımının en önemli ve güçlü özellikleri olarak göze çarpmaktadır. NSE ile birlikte Nmap port tarama yazılımı olmasının ötesinde bir kullanıma sahip olmuştur. Hem sızma testi uzmanları için hem de sistem yöneticileri için vazgeçilmez öneme sahip bir yazılım haline gelmektedir.
Nmap betikleri LUA dili kullanılarak geliştirilseler de, Nmap tarafından sunulan API'lerin yardımı ile birlikte oldukça hızlı ve efektif şekilde geliştirmeler gerçekleştirilebilmektedir. Ağ kesif çalışmalarından zafiyet taramasına, kaba kuvvet saldırılarından versiyon bilgisi tespit etmeye kadar çeşitli alanlardan kullanımı mevcut bulunmaktadır.
Nmap betikleri genel olarak 3 kısımdan oluşmaktadır. Kural kısmında betiğin çalışmasından önce gerekli adımları belirlenmektedir. Bu bölüm portrule, hostrule, prerule ve postrule kısımlarından en az bir tanesini içermelidir. portrule kısmı ile port ve host bazlı olarak ele almaktadır. action = function(host, port) ifadesi ile betiğe ait çalışması gereken kısımlar ele alınmaktadır.
Aşağıda örnek olarak geliştirilmiş bir Nmap betiği bulunmaktadır. Yaptığı iş basit olarak hedef IP adres ya da blokları içerisindeki web sunucular üzerinde Admin, admin, Administrator veya administrator url'lerinden mevcut olanlarını ortaya çıkartmaktadır. Bu şekilde hedef sunucu üzerinde koşan bir portal uygulamasının yönetim ara yüzü keşfedilebilir.

local http = require "http"
local shortport = require "shortport"
local stdnse = require "stdnse"
description = [[
        Test function in order to discover which url is alive or not
]]
author = "jarvinen"
license = "GPL 2.0"
categories = {"default","discovery"}
portrule = shortport.port_or_service( {80, 443}, {"http", "https"}, "tcp", "open")
-- The Action Section --
action = function(host, port)
    local options = {header={}}
    options['header']['User-Agent'] = "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
    local url_table = {"/Admin","/admin","/administrator","/Administrator"}
    local result = {}
    for uri in pairs(url_table) do
        local response = http.get(host, port, url_table[uri], options)
        if ( response.status == 200 ) then
                table.insert(result,url_table[uri])
        end
    end
    return stdnse.format_output(true, (result))
end


local http = require "http"
  local shortport = require "shortport"
  local stdnse = require "stdnse"

Satırları ile gerekli Nmap API'lerinin kullanımı sağlanmıştır.

- description = [[
Test function in order to discover which url is alive or not
]]
author = "jarvinen"
license = "GPL 2.0"
categories = {"default","discovery"}

Satırları ile açıklama bölümü için gerekli satırların kullanımı sağlanmıştır.

- portrule = shortport.port_or_service( {80, 443}, {"http", "https"}, "tcp", "open")

Satırı ile hedef sunucu üzerinde çalışan 80 veya 443/tcp portu açık servislerin kullanımı sağlanmaktadır.
Ana fonksiyon olarak action = function(host, port) kullanılmaktadır. Bu fonksiyon sunucu IP adresi ve port numarası olarak 2 değer almaktadır.

- options['header']['User-Agent'] = "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"

Satırı ile user agent parametresi belirlenerek olası sahte istemci tespitinin önüne geçilmeye çalışılmıştır. Tarama sonrası hedef web sunucusu loglarına bakıldığında istemci agent bilgisi olarak görünecek değer belirlenmiştir.

- if ( response.status == 200 )

Satırı ile hedef web sunucusu cevaplarından 200 olarak donen değerler bir tabloya atılarak sonuç olarak işlenmesi sağlanmıştır.
Betiğin çalıştırılması için aşağıdaki şekilde çalıştırılmalıdır. --script parametresi ile betiğe ait tam yol verilmelidir.

# nmap -Pn -sS -p 80 --script=/root/galkan.nse localhost
Starting Nmap 6.25 ( http://nmap.org ) at 2013-05-28 16:25 EDT
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000060s latency).
Other addresses for localhost (not scanned): 127.0.0.1
PORT   STATE SERVICE
80/tcp open  http
| galkan:
|   /admin
|_  /Administrator
Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds

Eğer betiğin çalıştırılmasına dair hata ayıklama işlemi için --script-trace ve -d parametreleri kullanılabilir. Bu şekilde betiğin çalışmazlığına dair veya hatalı çalışmasına dair durumlar düzeltilebilir.

Kaynaklar

http://nmap.org/book/nse.html

Yazar: Gökhan ALKAN, twitter: @cigalkan

0 comments:

Post a Comment

 
Top