mirror of
https://github.com/cisagov/snafflepy
synced 2026-09-24 18:22:23 +00:00
Merge pull request #4 from robert-todora/dev
added testing and more parsing functionality
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
from ldap3 import *
|
||||
from time import sleep
|
||||
import sys
|
||||
|
||||
def begin_snaffle(options):
|
||||
print("Beginning the snaffle...")
|
||||
sleep(0.2)
|
||||
print(options)
|
||||
|
||||
# TESTING
|
||||
if options.test:
|
||||
server = Server('testing server', get_info=ALL)
|
||||
conn = Connection(server, user='cn=user0,ou=test,o=lab', password='test0000', client_strategy=MOCK_SYNC)
|
||||
|
||||
conn.strategy.add_entry('cn=user0,ou=test,o=lab', {'userPassword': 'test0000', 'sn': 'user0_sn', 'revision': 0})
|
||||
conn.strategy.add_entry('cn=user1,ou=test,o=lab', {'userPassword': 'test1111', 'sn': 'user1_sn', 'revision': 0})
|
||||
conn.strategy.add_entry('cn=user2,ou=test,o=lab', {'userPassword': 'test2222', 'sn': 'user2_sn', 'revision': 0})
|
||||
|
||||
if conn.bind():
|
||||
print(server.info)
|
||||
else:
|
||||
print("Error connecting to domain")
|
||||
print(conn.result)
|
||||
sys.exit(2)
|
||||
|
||||
else :
|
||||
server = Server(options.dcip, get_info=ALL)
|
||||
conn = Connection(server)
|
||||
|
||||
if conn.bind():
|
||||
print(server.info)
|
||||
else:
|
||||
print("Error connecting to domain")
|
||||
print(conn.result)
|
||||
sys.exit(2)
|
||||
+35
-9
@@ -1,20 +1,44 @@
|
||||
import argparse
|
||||
import sys
|
||||
import ldap3
|
||||
import logging
|
||||
from snaffcore.begin import *
|
||||
|
||||
log = logging.getLogger('manspider')
|
||||
log.setLevel(logging.INFO)
|
||||
|
||||
def parse_arguments():
|
||||
syntax_error = False
|
||||
print("SnafflePy: A Port by @robert-todora")
|
||||
|
||||
parser = argparse.ArgumentParser(add_help=True, prog='snafflepy', description='A "port" of Snaffler in python')
|
||||
parser.add_argument("-u","--username", metavar='username',type=str, nargs=1, help="domain username")
|
||||
parser.add_argument("-p","--password", metavar='password',type=str, nargs=1, help="password for domain user")
|
||||
parser.add_argument('--dc-ip', metavar='[IP addr]', required=True, nargs=1, help="IP address of domain controller")
|
||||
parser.add_argument("-u","--username", metavar='username',type=str, help="domain username")
|
||||
parser.add_argument("-p","--password", metavar='password',type=str, help="password for domain user")
|
||||
parser.add_argument('--dcip', metavar='[IP addr]', required=True, help="IP address of domain controller")
|
||||
parser.add_argument("-d", "--domain", metavar='domain', default="", help="FQDN domain to authenticate to")
|
||||
parser.add_argument("-t", "--test", metavar='test', type=bool, default="False", help="switch to testing mode")
|
||||
|
||||
if len(sys.argv) == 1:
|
||||
parser.print_help()
|
||||
sys.exit(1)
|
||||
options = parser.parse_args()
|
||||
|
||||
try:
|
||||
if len(sys.argv) == 1:
|
||||
parser.print_help()
|
||||
sys.exit(1)
|
||||
|
||||
print(options.username, options.password, options.dcip, options.domain)
|
||||
print(type(options.username), type(options.password), type(options.dcip), type(options.domain))
|
||||
|
||||
except argparse.ArgumentError as e:
|
||||
syntax_error = True
|
||||
log.error(e)
|
||||
log.error('Check your syntax')
|
||||
sys.exit(2)
|
||||
|
||||
finally:
|
||||
if syntax_error:
|
||||
parser.print_help()
|
||||
sys.exit(2)
|
||||
else:
|
||||
return options
|
||||
|
||||
|
||||
def print_banner():
|
||||
@@ -33,10 +57,12 @@ O~~ O~~ O~~ O~~O~~ O~~ O~~ O~~ O~~O~ O~~ O~~
|
||||
|
||||
def main():
|
||||
print_banner()
|
||||
parse_arguments()
|
||||
snaffle_options = parse_arguments()
|
||||
begin_snaffle(snaffle_options)
|
||||
|
||||
|
||||
print("I snaffled 'til the snafflin was done")
|
||||
|
||||
|
||||
# TODO: Create SnaffleRunner class with equivalent functions and call the Run() method here.
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user