Доброго времени суток господа не буду разводить воду сразу к делу.
Мне часто как и любому пентестеру приходится прибегать так сказать к автоматизированным средствам проведения пентестов, среди которых можно отметить как и опенсорс так и комерческие продукты. Естественно платить за "более менее" проработанный продукт мне как и всем Вам не особо то хочется(ибо зачастую много фолсов, логов и платить за 1дай уязвимости/сплоеты как то не канает согласитесь), при том как обладая некоторыми знаниями в области реверса и крэкинга в частности я ломаю эти так называемые комерс продукты для личного пользования.
Недавно опять встала задача автоматизации прогона одной сети на метод пробива через 1дай уязвимости при помощи существующих продуктов которые могли бы это сделать. Естественно как и подобается правильному пентестеру были выбраны соотвествующие продукты :
Metasploit Pro 4.8 от Rapid7
Tenable Nessus 5.2.5 от Tenable Network Security
Эти продукты впрочем можно получить в виде триальной серии действующей 7 дней (в обоих случаях). Кстати хоть и триал но все же работают они как полноценные продукты, так что не путаем триал с демо.
Конечно рассматривать 7 дней как принцип одноразовой проверки я не стал поэтому было решено об "продлении срока триала" насколько это возможно и естественно в дело пошел старый добрый битхак скриптхак. Да разработчики таких комерс продуктов ныне кодят свои продукты не на сях и не на прочем добре а на руби.
Поснифав трафик через сслстрип я честно говоря ох*ел от происходящего. После регистрации он выкладывает свои ключики в директорию
dir_metasploit/apps/pro/engine/license.
Для поциента Метасплоет Про 4.8 скриптхак в целом понадобился для облома даты в одном месте. Пропатчив таким образом
PHP код:
[COLOR="#000000"][COLOR="#0000BB"]def expired[/COLOR][COLOR="#007700"]?
@[/COLOR][COLOR="#0000BB"]expiration[/COLOR][COLOR="#007700"][/COLOR][COLOR="#0000BB"]Time[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]now
end[/COLOR][/COLOR]
я получил желаемый результат. На это правда не остановился и переломал все что возможно
PHP код:
[COLOR="#000000"][COLOR="#0000BB"]def seconds_until_expired
[/COLOR][COLOR="#007700"]return[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"]if @[/COLOR][COLOR="#0000BB"]expiration[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]nil[/COLOR][COLOR="#007700"]?
[/COLOR][COLOR="#FF8000"]#return expiration.to_i - Time.now.utc.to_i меняем местами и получаем обратный ход времени, лол.
[/COLOR][COLOR="#007700"]return[/COLOR][COLOR="#0000BB"]Time[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]now[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]utc[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]to_i[/COLOR][COLOR="#007700"]-[/COLOR][COLOR="#0000BB"]expiration[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]to_i
end[/COLOR][/COLOR]
теперь по истечении срока триала срок нашей лицензии не кончается а наоборот увеличивается, например если у вас рега лицензии была 17 марта 2014 как у меня, то 17 марта 2015 года у вас останется до окончания лицензии ~365,5 дней.
Есть правда отдельные скрипты которые не работают без отвязки , там отдельная история но принцип почти тот же. отключаем посредством коментариев места запроса лицензии и все работает без триала.
Кстати функция считывания ключа с триалки находится в классе контроллере лицензий licenses_controller.rb :
PHP код:
[COLOR="#000000"][COLOR="#0000BB"]def offline_activation
temp[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]nil
[/COLOR][COLOR="#007700"]if[/COLOR][COLOR="#0000BB"]params[/COLOR][COLOR="#007700"][:[/COLOR][COLOR="#0000BB"]activation_file[/COLOR][COLOR="#007700"]]
[/COLOR][COLOR="#FF8000"]# Copy the uploaded file to a tempfile
[/COLOR][COLOR="#0000BB"]temp[/COLOR][COLOR="#007700"]= ::[/COLOR][COLOR="#0000BB"]Rex[/COLOR][COLOR="#007700"]::[/COLOR][COLOR="#0000BB"]Quickfile[/COLOR][COLOR="#007700"].new([/COLOR][COLOR="#DD0000"]'activate'[/COLOR][COLOR="#007700"])
[/COLOR][COLOR="#0000BB"]uploaded_io[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]params[/COLOR][COLOR="#007700"][:[/COLOR][COLOR="#0000BB"]activation_file[/COLOR][COLOR="#007700"]]
[/COLOR][COLOR="#0000BB"]begin
[/COLOR][COLOR="#007700"]while ([/COLOR][COLOR="#0000BB"]buff[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]uploaded_io[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]read[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]1024[/COLOR][COLOR="#007700"]*[/COLOR][COLOR="#0000BB"]64[/COLOR][COLOR="#007700"]))
[/COLOR][COLOR="#0000BB"]temp[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]write[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]buff[/COLOR][COLOR="#007700"])
[/COLOR][COLOR="#0000BB"]end
rescue[/COLOR][COLOR="#007700"]::[/COLOR][COLOR="#0000BB"]EOFError
end
temp[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]flush
end
[/COLOR][COLOR="#FF8000"]# Just present the user with the form
[/COLOR][COLOR="#007700"]if[/COLOR][COLOR="#0000BB"]not temp
[/COLOR][COLOR="#007700"]return
[/COLOR][COLOR="#0000BB"]end
begin
[/COLOR][COLOR="#FF8000"]# Explicitly close the file to prevent locking issues
[/COLOR][COLOR="#0000BB"]path[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]temp[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]path
temp[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]close rescue nil
[/COLOR][COLOR="#007700"]@[/COLOR][COLOR="#0000BB"]license[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]activate_offline[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]path[/COLOR][COLOR="#007700"])
if @[/COLOR][COLOR="#0000BB"]license[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]activated[/COLOR][COLOR="#007700"]? and[/COLOR][COLOR="#0000BB"]not[/COLOR][COLOR="#007700"]@[/COLOR][COLOR="#0000BB"]license[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]error
flash[/COLOR][COLOR="#007700"][:[/COLOR][COLOR="#0000BB"]notice[/COLOR][COLOR="#007700"]] =[/COLOR][COLOR="#DD0000"]"Activation Successful"
[/COLOR][COLOR="#0000BB"]redirect_to root_path
[/COLOR][COLOR="#007700"]else
[/COLOR][COLOR="#0000BB"]flash[/COLOR][COLOR="#007700"][:[/COLOR][COLOR="#0000BB"]error[/COLOR][COLOR="#007700"]] =[/COLOR][COLOR="#DD0000"]"Activation Failed: #{@license.error}"
[/COLOR][COLOR="#0000BB"]end
rescue Exception[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]e
flash[/COLOR][COLOR="#007700"][:[/COLOR][COLOR="#0000BB"]error[/COLOR][COLOR="#007700"]] =[/COLOR][COLOR="#DD0000"]"Activation Failed: #{e.message}"
[/COLOR][COLOR="#0000BB"]end
end
Из класса license[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]rb[/COLOR][COLOR="#007700"]:
require[/COLOR][COLOR="#DD0000"]"digest/sha1"
[/COLOR][COLOR="#0000BB"]attr[/COLOR][COLOR="#007700"]:[/COLOR][COLOR="#0000BB"]product_serial
attr[/COLOR][COLOR="#007700"]:[/COLOR][COLOR="#0000BB"]product_key[/COLOR][/COLOR]
Ключ procuduct.lic сгенерен и зашифрован посредством алго sha1. По идее если кому хочется можно разобрать всю тему и генерить ключики lic и продавать хомячкам от имени Rapid7
Окей, поциент #2 Nessus :
Ну чо сказать явно не лучше, разрабы вообще долбоебы объебывается банальной прокруткой времени назад. Вот обычный 7days триал :
https://www.dropbox.com/s/ap83p2qqx6k834u/nessus_trial.png
Окей, крутим время назад : date -s "11 MAR 2014" :
https://www.dropbox.com/s/mrsh0jv0fbsgro7/xpng.png
Что мы видим ? 13 дней, на скрине как видно все функции продолжают работать. Для конкретного обломного пиздеца создал прошку которая посредством LD_PRELOAD меняет env окружение для демона /etc/init.d/nessusd таким образом что получаем фулл анлим лицензию
https://www.dropbox.com/s/ca39wfml701eiwj/untrialed.png
Сообственно Nuff Said ?
Итак цены цены цены : http://www.rapid7.com/store/index.jsp?p=price
максимальная цена на msf экспресс на уникальных 1024 IP: 10,000$
разницы особой не заметите от про версии : https://community.rapid7.com/docs/DOC-2280
Если посмотреть классы лицензий там можно понять что несложно портировать двиг на под другие нужды :
PHP код:
[COLOR="#000000"][COLOR="#0000BB"]def pro[/COLOR][COLOR="#007700"]?
[/COLOR][COLOR="#0000BB"]product_type[/COLOR][COLOR="#007700"]==[/COLOR][COLOR="#DD0000"]"Metasploit Pro"
[/COLOR][COLOR="#0000BB"]end
def express[/COLOR][COLOR="#007700"]?
[/COLOR][COLOR="#0000BB"]product_type[/COLOR][COLOR="#007700"]==[/COLOR][COLOR="#DD0000"]"Metasploit Express"
[/COLOR][COLOR="#0000BB"]end
def community[/COLOR][COLOR="#007700"]?
[/COLOR][COLOR="#0000BB"]product_type[/COLOR][COLOR="#007700"]==[/COLOR][COLOR="#DD0000"]"Metasploit Community"
[/COLOR][COLOR="#0000BB"]end[/COLOR][/COLOR]
Что касается Nessus : 1.500 USD
https://store.tenable.com/index.php?main_page=product_info&cPath=1&products_ id=7
Т.е если рассматривать те же 1024 уник айпи то 1024 x 1,5k $ = 1.536.000 $
мы и так можем ее использовать без всяких ограничений.
Выкладываю архив с патчами, скринами : https://www.dropbox.com/s/n61i9yia4mtm7ip/metasploit_patch.zip
PS.PS.: для метапслойта про можно кстати не замарачиваться с лицензиями и пойти более законным путем был найден путь постоянного слива легальных триальных лицензий по времени истечения триала. Алго такой удаляем все ключи в директории
PHP код:
[COLOR="#000000"][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"])[/COLOR][COLOR="#0000BB"]rm[/COLOR][COLOR="#007700"]-[/COLOR][COLOR="#0000BB"]rf msf_dir[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]apps[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]pro[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]engine[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]license[/COLOR][COLOR="#FF8000"]/*
Далее перезагружаем метасплоент :
2) msf_dir/scripts/stop.sh и start.sh
3) запускаем $ msf_dir/msfpro
[/COLOR][/COLOR]
открывается брауз нажимаем рекуэст имена и данные пользователя можно оставлять теми же. единственное меняем почту, по умолчанию девелоперы не принимают почты типа gmail, mail, rambler, yahoo, etc. регаем быстро новую почту на inbox.uz(обычно tmp1@inbox.uz, tmp2, tmp3, etc) можно написать бота даже потому что триальные ключи с той стороны раздаются посредством такого же бота, который ничего не проверяет кроме почты.