Приветствую всех! Сегодня с утра пришла идея к написанию данного сценария. Я смог написать его и решил поделиться с вами, возможно он будет вам полезен.
Он будет получать список установленных программ в windows и искать уязвимые версии.
Скрипт сыроват, но я планирую доделать его, добавить полную автоматизацию, чтобы он показывал сразу все уязвимое ПО.
Приступим к написанию.
Вот такие либы я буду юзать:
Тк.к сценарий я пишу для windows, то чтобы был цветной текст в консоле, мы должны дописать:
Добавим свои аргументы:
Введем переменные:
Список установленных программ будем получать через wmic.
Теперь вывод мы будем записывать в .txt файлы:
Добавляем в список имена софта:
Очищаем от
Аналогично и с версиями софта:
Ищем в списке с именами софта, софт который указал пользователь для поиска:
Если найдем искомый софт в списке с именами софта, то ищем в другом списке версию софта:
Теперь будем сравнивать если версия уязвимого ПО равна версии установленного ПО или меньше, то пишем что уязвимо, если нет, то пишем не уязвимо:
Весь скрипт:
На этом все.
Спасибо за внимание!
PS Как я и говорил выше, я планирую усовершенствовать скрипт, исправить баги, добавить полную автоматизацию и т.п.
Он будет получать список установленных программ в windows и искать уязвимые версии.
Скрипт сыроват, но я планирую доделать его, добавить полную автоматизацию, чтобы он показывал сразу все уязвимое ПО.
Приступим к написанию.
Вот такие либы я буду юзать:
Код:
from subprocess import check_output
import argparse
from termcolor import *
import colorama
Тк.к сценарий я пишу для windows, то чтобы был цветной текст в консоле, мы должны дописать:
colorama.init()
Добавим свои аргументы:
Код:
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
Введем переменные:
Код:
count = 0
count2 = 0
s = []
s2 = []
a = check_output(["wmic", "product", "get", "name"]) # Имена софта
b = check_output(["wmic", "product", "get", "version"]) # Версии софта
Список установленных программ будем получать через wmic.
Теперь вывод мы будем записывать в .txt файлы:
Код:
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)
Очищаем от
\n
и ненужных элементов:
Код:
s = map(lambda m: m.strip(), s)
s.pop(0)
s.pop(-1)
Аналогично и с версиями софта:
Код:
handle = open('pen2.txt')
for x in handle:
s2.append(x)
s2 = map(lambda m: m.strip(), s2)
s2.pop(0)
s2.pop(-1)
Ищем в списке с именами софта, софт который указал пользователь для поиска:
Код:
for x in s:
count += 1 # Записуем его номер, чтобы найти его версию в другом списке
if namepo in x:
break
Если найдем искомый софт в списке с именами софта, то ищем в другом списке версию софта:
Код:
vers = 0
for x in s2:
count2 += 1
if count2 == count:
vers = x # После того как найдем версию искомого софта приравниваем vers к версии софта
break
Теперь будем сравнивать если версия уязвимого ПО равна версии установленного ПО или меньше, то пишем что уязвимо, если нет, то пишем не уязвимо:
Код:
if vulnvers <= vers:
cprint (namepo + ' - Vuln!' ,'green')
else:
cprint (namepo + ' - Not Vuln!' ,'red')
Весь скрипт:
Код:
from subprocess import check_output
import argparse
from termcolor import *
import colorama
colorama.init()
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
count = 0
count2 = 0
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)
s2 = map(lambda m: m.strip(), s2)
s2.pop(0)
s2.pop(-1)
for x in s:
count += 1
if namepo in x:
break
vers = 0
for x in s2:
count2 += 1
if count2 == count:
vers = x
break
if vulnvers <= vers:
cprint (namepo + ' - Vuln!' ,'green')
else:
cprint (namepo + ' - Not Vuln!' ,'red')
Спасибо за внимание!
PS Как я и говорил выше, я планирую усовершенствовать скрипт, исправить баги, добавить полную автоматизацию и т.п.
Последнее редактирование: