• Открыта запись на вторую часть курса по анонимности и безопасности в сети интернет "Paranoid II" от команды codeby. Анонимные роутеры, Подъём, настройка и администрирование Tor-ноды, Работа с железом ПК, Удаление аппаратных закладок, Минимизация рисков, Авторские разработки и многое другое. Подробнее ...

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

Tayrus

Tayrus

Grey Team
13.04.2017
360
731
Приветствую всех! Сегодня с утра пришла идея к написанию данного сценария. Я смог написать его и решил поделиться с вами, возможно он будет вам полезен.
Он будет получать список установленных программ в 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 Как я и говорил выше, я планирую усовершенствовать скрипт, исправить баги, добавить полную автоматизацию и т.п.
 
Последнее редактирование:
explorer

explorer

Red Team
05.08.2018
671
1 453
Надо код поправить, он с ошибками. Некоторые параметры заключить в str и т.д.
И ещё после выполнения кода запись идёт в одну строку, конечно это очень не удобно. Нужно записи в столбик делать.
Задумка замечательная, буду ждать исправления и продолжения.

Вот скрин - во всю длину монитора даже 2 записи не вписались.

Пишем сценарий для определения уязвимого ПО на Python
 
Последнее редактирование:
  • Нравится
Реакции: Tihon49 и The Codeby
Tayrus

Tayrus

Grey Team
13.04.2017
360
731
Надо код поправить, он с ошибками. Некоторые параметры заключить в str и т.д.
И ещё после выполнения кода запись идёт в одну строку, конечно это очень не удобно. Нужно записи в столбик делать.
Задумка замечательная, буду ждать исправления и продолжения.

Вот скрин - во всю длину монитора даже 2 записи не вписались.

Посмотреть вложение 22758
Я не отрицаю наличие багов, но по крайней мере мои тесты он прошел.
Вы меня не правильно поняли. Вывод уязвима программа или нет идет в консоль, а запись в .txt идет как костыль(для работы программы).
Мы можем поработать над этим скриптом вместе, если хочешь конечно.
 
  • Нравится
Реакции: Tihon49
explorer

explorer

Red Team
05.08.2018
671
1 453
Я не отрицаю наличие багов, но по крайней мере мои тесты он прошел.
Вы меня не правильно поняли. Вывод уязвима программа или нет идет в консоль, а запись в .txt идет как костыль(для работы программы).
Мы можем поработать над этим скриптом вместе, если хочешь конечно.
И всё же - у меня в отчёте 10853 знака вывалило, строка реально длинная.
Спасибо за предложение, воздержусь. Я сейчас работаю над двумя криптошифрами, скоро статью выложу )
 
  • Нравится
Реакции: Tihon49
Tayrus

Tayrus

Grey Team
13.04.2017
360
731
И всё же - у меня в отчёте 10853 знака вывалило, строка реально длинная.
Спасибо за предложение, воздержусь. Я сейчас работаю над двумя криптошифрами, скоро статью выложу )
Пишем сценарий для определения уязвимого ПО на Python

Вот пример работы программы(Выбрал для примера Python как софт и уязвимую версию 2.5). Те .txt файлы не нужны, когда обнову подкачу, уберу их.
 
  • Нравится
Реакции: Tihon49
Tayrus

Tayrus

Grey Team
13.04.2017
360
731
Обновил скрипт!
Теперь вам не надо указывать через аргументы версию уязвимой программы и имя программы, которую надо искать.
После обновления в коде есть словарь, в него и будут наполняться уязвимые программы и их версии.
Т.е показываться будут сразу все уязвимые программы(если вы их забили в словарь)

Код:
Код:
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\Alex\Desktop>python main.py
Python 2.7.15 Vuln!
VMware Tools Vuln!
 
  • Нравится
Реакции: Tihon49
D

dark2strike

Active member
16.04.2017
37
33
Странный скрипт.
Где функция получения всего установленного в системе ПО?
Где функция скачивания какой-либо базы уязвимостей для сравнения с установленным ПО?

Без этих двух функция это абсолютно бесполезный скрипт.
 
InFace

InFace

New member
22.07.2019
1
1
Здравствуй, вот у меня ошибка, пытался пофиксить, но он находил новые траблы, которые не фиксились, в чём дело?
Пишем сценарий для определения уязвимого ПО на Python


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

FantomDragon

Well-known member
18.12.2017
120
48
А мне интересно может ти попробуеш сделать таблицу. Например:
Возмем базу exploits для метасплойто и он будет автоматично проверять всю систему на откритие порти и т.д.
1. Found - EternalBlue
2. Found - BlueKeep
3. .......
Ну и так дальше
 
Мы в соцсетях:  ТелеграмВконтактеДзенФейсбукТвиттерЮтуб