Пишем скрипт для определения уязвимого ПО

barboskin

Выдающийся
ДРУЗЬЯ ФОРУМА
ЮБИЛЕЙНАЯ ЛЕНТА

barboskin

Выдающийся
ДРУЗЬЯ ФОРУМА
ЮБИЛЕЙНАЯ ЛЕНТА
Регистрация
3 Июл 2018
Сообщения
1,127
Реакции
1,041
Репутация
0
Привет начинающим кодерам! Сегодня мы запилим простенький скрипт на Python, который будет выявлять дыры в нашей системе.

Приступим к написанию. Использовать будем следующие библиотеки

Python:
from subprocess import check_output
import argparse
from termcolor import *
import colorama

Для того, чтобы в консоли получить цветной текст, дописшем: colorama.init()


Добавим аргументы:
Python:
parser = argparse.ArgumentParser(description='Find vuln PO')
parser.add_argument('-vs', help ='Vuln version PO')
parser.add_argument('-nm', help ='PO Name')
args = parser.parse_args()
vulnvers = args.vs
namepo = args.nm
Введем переменные:
Python:
count = 0
count2 = 0
s = []
s2 = []
a = check_output(["wmic", "product", "get", "name"]) # Имена софта
b = check_output(["wmic", "product", "get", "version"]) # Версии софта
Список установленных программ будем получать через wmic.
Ввывод будем записывать в .txt файлы:


Python:
handle = open('pen.txt','w')
handle.write(a)
handle.close()

handle = open('pen2.txt','w')
handle.write(b)
handle.close()
Добавляем в список имена софта:
Python:
handle = open('pen.txt')
for x in handle:
    s.append(x)
Очищаем от \n и ненужных элементов:
Python:
s = map(lambda m: m.strip(), s)
s.pop(0)
s.pop(-1)

Аналогично и с версиями софта:

Python:
handle = open('pen2.txt')
for x in handle:
    s2.append(x)

s2 = map(lambda m: m.strip(), s2)
s2.pop(0)
s2.pop(-1)
Ищем в списке с именами софта, софт который указал пользователь для поиска:
Python:
for x in s:
    count += 1 # Записуем его номер, чтобы найти его версию в другом списке
    if namepo in x:
        break
Если найдем искомый софт в списке с именами софта, то ищем в другом списке версию софта:
Python:
for x in s2:
    count2 += 1
    if count2 == count:
        vers = x # После того как найдем версию искомого софта приравниваем vers к версии софта
        break
Теперь будем сравнивать если версия уязвимого ПО равна версии установленного ПО или меньше, то пишем что уязвимо, если нет, то пишем не уязвимо:
Python:
if vulnvers <= vers:
    cprint (namepo + ' - Vuln!' ,'green')
else:
    cprint (namepo + ' - Not Vuln!' ,'red')
Весь скрипт:

Python:
from subprocess import check_output
from termcolor import *
import colorama
import os

colorama.init()

vuln = {'Python 2.7.15':'2.9','VMware Tools':'11'} # Тут дополнейте уязвимые программы и их версии
# Эти две программы добавлены для примера/теста

s = []
s2 = []
a = check_output(["wmic", "product", "get", "name"])
b = check_output(["wmic", "product", "get", "version"])
handle = open('pen.txt','w')
handle.write(a)
handle.close()

handle = open('pen2.txt','w')
handle.write(b)
handle.close()

handle = open('pen.txt')
for x in handle:
    s.append(x)

s = map(lambda m: m.strip(), s)
s.pop(0)
s.pop(-1)

handle = open('pen2.txt')
for x in handle:
    s2.append(x)
handle.close()
s2 = map(lambda m: m.strip(), s2)
s2.pop(0)
s2.pop(-1)

os.unlink('pen.txt')
os.unlink('pen2.txt')

dct = dict(zip(s,s2))


for x in dct.keys():
    for j in vuln.keys():
        if x == j:
            if dct[x] <= vuln[j]:
                cprint (x + ' ' + 'Vuln!','green')
Пример вывода программы:

Код:
C:\Users\!!!!\Desktop>python main.py
Python 2.7.15 Vuln!
VMware Tools Vuln!
 

haleluja

Постоянный участник
PREMIUM USER
ЮБИЛЕЙНАЯ ЛЕНТА

haleluja

Постоянный участник
PREMIUM USER
ЮБИЛЕЙНАЯ ЛЕНТА
Регистрация
23 Авг 2018
Сообщения
154
Реакции
82
Репутация
0
Имхо, без прикрученной БД типа метасплоита, довольно бесполезно. Тогда и чекалка не нужна, если я руками буду список уязвимого ПО собирать.
 

barboskin

Выдающийся
ДРУЗЬЯ ФОРУМА
ЮБИЛЕЙНАЯ ЛЕНТА

barboskin

Выдающийся
ДРУЗЬЯ ФОРУМА
ЮБИЛЕЙНАЯ ЛЕНТА
Регистрация
3 Июл 2018
Сообщения
1,127
Реакции
1,041
Репутация
0
Имхо, без прикрученной БД типа метасплоита, довольно бесполезно. Тогда и чекалка не нужна, если я руками буду список уязвимого ПО собирать.
Бро - это скорее мануал для новичков, начинающих кодить на пайтон, а далеко не инструмент для серьезного пентестинга
 

haleluja

Постоянный участник
PREMIUM USER
ЮБИЛЕЙНАЯ ЛЕНТА

haleluja

Постоянный участник
PREMIUM USER
ЮБИЛЕЙНАЯ ЛЕНТА
Регистрация
23 Авг 2018
Сообщения
154
Реакции
82
Репутация
0
Бро - это скорее мануал для новичков, начинающих кодить на пайтон, а далеко не инструмент для серьезного пентестинга
ну если рассматривать это как лабу первокурснику, то соглашусь :)
 
Сверху