Пишем сценарий для определения уязвимого ПО на Python

Пишем сценарий для определения уязвимого ПО на Python

Life-Hack [Жизнь-Взлом]/Хакинг

#Обучение

Он будет получать список установленных программ в 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 Как я и говорил выше, я планирую усовершенствовать скрипт, исправить баги, добавить полную автоматизацию и т.п.​

Источник


Report Page