Скрипты nmap

Discussion in 'Песочница' started by PabloPicasso, 2 Feb 2010.

  1. PabloPicasso

    PabloPicasso Banned

    Joined:
    2 Jan 2010
    Messages:
    88
    Likes Received:
    32
    Reputations:
    16
    Вот почему большинство обитателей форумов по сет. безопасности не используют функционал nmap скриптов?
     
  2. drim

    drim Member

    Joined:
    27 Aug 2009
    Messages:
    347
    Likes Received:
    33
    Reputations:
    4
    а вы их используете? если да, то интересно послушать какие...
     
    1 person likes this.
  3. PabloPicasso

    PabloPicasso Banned

    Joined:
    2 Jan 2010
    Messages:
    88
    Likes Received:
    32
    Reputations:
    16
    в данный момент smb-enum-users.nse, дописав пару строчек кода он создает файлы вида [user].txt и складывает в них хосты с обнаруженным T:3389 предварительно определив имена пользователей 2-мя способами.

    для брута дедиков просто сказка )
     
  4. PabloPicasso

    PabloPicasso Banned

    Joined:
    2 Jan 2010
    Messages:
    88
    Likes Received:
    32
    Reputations:
    16
    например задались вопросом отпарсить IP-шки с вывода сканирования 3389 порта RDP в 1 файл...
    легко, пишем:

    ips.nse
    Code:
    -- напишем описание
    description = [[
    Создает список IP в файл исходя из параметров порта 3389.
    ]]
    
    -- укажем автора
    author = "ROleg aka PabloPicasso"
    
    -- укажем условия использования =)
    license = "Same as Nmap--See http://nmap.org/book/man-legal.html"
    
    -- категории к которым относится скрипт
    categories = {"discovery"}
    
    -- укажем необходимые либы для роботы с портами
    require "shortport"
    
    -- оброботка action начнется если portrule будет правдой
    -- т.е. если порт_или_сервис будут 3389, ms-term-serv
    portrule = shortport.port_or_service(3389, "ms-term-serv")
    
    -- выполняем основные действия
    -- примем на входе хост и порт
    action = function(host, port)
                -- откроем файл ip.txt для записи с добавлением (а+)
    	file = io.open ("ip.txt","a+")
                -- добавим в очередь записи айпишку
    	file:write (host.ip.."\n")
                -- запишем в файл
    	file:flash()
                -- закроем файл
    	file:close()
    
    end
    
    нечего сложного, единственная проблема что для сканера есть рус. документация http://nmap.org/man/ru/ а для скриптового движка только на англ. http://nmap.org/book/nse.html

    запускаем: nmap -iR 0 -n -PS 3389 -p T:3389 --script=ips.nse
    и получили шустрый многопоточный сканер RDP по всему инету с кучей опций сканирования.
     
    2 people like this.
  5. PabloPicasso

    PabloPicasso Banned

    Joined:
    2 Jan 2010
    Messages:
    88
    Likes Received:
    32
    Reputations:
    16
    продолжим дальше, хотим создать списки для брута RDP используя реальные имена пользователей на атакуемой системе, в этом нам помогут SMB и RPC библиотеки NMAP:

    rdp-to-users.nse
    Code:
    description = [[
    1. Резолвим пользователей 2-мя способами через lsa и samr
     средствами SMB сервиса проверяемой системы.
    2. При доступности открытого 3389 порта создаем файлы вида 
     [username].txt и записываем туда айпишки серверов имеющих такой аккаунт.
    ]]
    
    
    author = "ROleg aka PabloPicasso"
    license = "Same as Nmap--See http://nmap.org/book/man-legal.html"
    categories = {"discovery"}
    
    require 'msrpc'
    require 'smb'
    require 'stdnse'
    require 'comm'
    require 'shortport'
    
    
    -- укажем условие хоста, функция smb.get_port() 
    -- ищет комбинацию открытых портов
    -- для доступа к SMB сервису обычно 139 либо поверх 445 порта
    -- если найдены порты, открыты, делаем action
    hostrule = function(host)
    	return smb.get_port(host) ~= nil
    end
    
    
    -- примем на входе хост
    action = function(host)
    
    	-- об'явим необходимые переменные
    	-- i и j пригодятся для циклов for
    	local i, j
    	-- определим статусные переменные
    	local samr_status = false
    	local lsa_status  = false
    	-- и для результата
    	local samr_result = ""
    	local lsa_result  = ""
    	-- массивы имен пользователей
    	local names = {}
    	local names_lookup = {}
    	-- массив для сообщений на экран
    	local response = {}
    
    	-- т.к. нам важно чтобы был открыт 3389 порт,
    	-- будем проверять чтобы лишний раз не выполнять основное тело скрипта
    	if (shortport.port_or_service(3389, "ms-term-serv")) then
    
    	-- Пробуем получить информацию при помощи SAMR.
    	samr_status, samr_result = msrpc.samr_enum_users(host)
    
    	-- если получилось
    	if(samr_status) then
    		-- от 1 до #samr_result по одному =)
    		for i = 1, #samr_result, 1 do
    			-- заносим в массив names[] полученные результаты
    			table.insert(names, samr_result[i])
    			-- будем избавляется от дубликатов
    			names_lookup[samr_result[i]['name']] = true
    		end
    	end
    
    	-- Пробуем получить информацию через LSA. 
    	lsa_status, lsa_result  = msrpc.lsa_enum_users(host)
    		
    	if(lsa_status) then
    		for i = 1, #lsa_result, 1 do
    			if(lsa_result[i]['name'] ~= nil) then
    				-- проверим нет ли уже у нас такого имени
    				if(not(names_lookup[lsa_result[i]['name']])) then
    					-- заносим в массив names[] полученные результаты
    					table.insert(names, lsa_result[i])
    				end
    			end
    		end
    	end
    
    	-- Если все способы не сработали
    	if(samr_status == false and lsa_status == false) then
    		-- и если ответом было ACCESS_DENIED
    		if(string.find(lsa_result, 'ACCESS_DENIED')) then
    			return stdnse.format_output(false, "Доступ ограничен настройками политик")
    		end
    		
    		return stdnse.format_output(false, {"Невозможно определить имена пользователей", "SAMR вернул " .. samr_result, "LSA вернул " .. lsa_result})
    	end
    
    	-- Делаем сортировку
    	table.sort(names, function (a, b) return string.lower(a.name) < string.lower(b.name) end)
    
    	-- Проверим есть ли имена в массиве
    	if(#names == 0) then
    		table.insert(response, "Скрипт не получил имен, извините!")
    	else
    
    		-- Запишем айпишки серверов в файлы, для каждого пользователя в свой
    		local names = {}
    		for _, info in ipairs(domain_users) do
    		
    			file = io.open (info['name']..".txt","a+")
    			file:write (host.ip.."\n")
    			file:flush()
    			file:close()
    			
    			table.insert(names, info['name'])
    		end
    
    		-- Выводим на стандартный выход результаты работы
    		table.insert(response, string.format("Users: %s", stdnse.strjoin(", ", names)))
    	end
    	
    	end
    	
    	return stdnse.format_output(true, response)
    end
    
    брутить по спискам Administrator.txt, Admin.txt, root.txt или Вася.txt намного проще чем перебирать все возможные логины брутом =)
    но есть свои минусы, не везде включены SMB службы (

    заходим например в диррикторию users_ip_to_brute: cd users_ip_to_brute
    выполняем: nmap -iR 0 -n -sU -sS -PS137,139,445,3389 -p U:137,T:139,445,3389 --script=rdp-to-users.nse
    ждем, брутим...
     
    #5 PabloPicasso, 3 Feb 2010
    Last edited: 3 Feb 2010
    7 people like this.
  6. k0xy

    k0xy Member

    Joined:
    4 Feb 2010
    Messages:
    18
    Likes Received:
    14
    Reputations:
    0
    Немного не по теме, но хотелось бы узнать, в nmap есть возможность массового сканирования хостов? То бишь конкретнее у меня есть список хостов, к примеру и мне нужно просканировать сервисы, которые там установлены. Так-то юзаю XSpider, но nmap серьезнее все таки.
     
  7. InFlame

    InFlame Banned

    Joined:
    27 Oct 2008
    Messages:
    207
    Likes Received:
    31
    Reputations:
    0
    Щас всё и вся с Питоном скрещивают. Было б неплохо, если nmap поддерживал скрипты на Python. =)
     
  8. PabloPicasso

    PabloPicasso Banned

    Joined:
    2 Jan 2010
    Messages:
    88
    Likes Received:
    32
    Reputations:
    16
    to k0xy, конечно nmap -iL <имя_входного_файла> -sV
     
    1 person likes this.
  9. Lucius85

    Lucius85 New Member

    Joined:
    7 Sep 2010
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    У меня вопрос по решению задачи, проводится ping-сканирование оборудования по IP
    Хотелось бы чтобы nmap выводил не только активное оборудование, но и не активные
    А так же добавить в вывод описания

    Host *.*.*.* is up (0.0023s latency). "описание"

    спасибо
     
  10. Rubaka

    Rubaka Elder - Старейшина

    Joined:
    2 Sep 2007
    Messages:
    263
    Likes Received:
    150
    Reputations:
    28
    насчет питона! вот случайно наткнулся! как нить попробую!
    http://pypi.python.org/pypi/python-nmap/0.1.1
     
  11. Han1

    Han1 New Member

    Joined:
    3 Feb 2010
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Скрипт rdp-to-users.nse не работает, тестил на локалке, nmap показывает что все нужные порты открыты но не создает никаких выходных файлов. Тестил на 3500 rdp из интернета - ни одного созданого файла.
     
Loading...