forked from quentinhardy/odat
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Passwords.py
131 lines (120 loc) · 4.38 KB
/
Passwords.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/usr/bin/python
# -*- coding: utf-8 -*-
from OracleDatabase import OracleDatabase
import logging
from Constants import *
from Info import Info
from Utils import checkOptionsGivenByTheUser
class Passwords (OracleDatabase):
'''
Password guesser
'''
def __init__(self,args):
'''
Constructor
'''
logging.debug("Passwords object created")
OracleDatabase.__init__(self,args)
self.passwords = []
def __resetPasswordList__(self):
'''
reset self.passwords
'''
self.passwords = []
def __tryToGetHashedPasswords__(self):
'''
Try to get hashed password
In Oracle 11g-12g: select name, password, spare4 from sys.user$
In Oracle 9-10: SELECT username, password FROM DBA_USERS;
'''
self.__resetPasswordList__()
if self.args['info'].isVersion('11.') or self.args['info'].isVersion('12.'):
req = "SELECT name, password, spare4 FROM sys.user$"
results = self.__execQuery__(query=req,ld=['name', 'password','spare4'])
else :
req = "SELECT username, password FROM DBA_USERS"
results = self.__execQuery__(query=req,ld=['username', 'password'])
if isinstance(results,Exception):
logging.info("Impossible to get hashed passwords: {0}".format(results))
return results
else :
logging.info("Get hashed passwords")
for l in results:
self.passwords = results
return True
def __tryToGetHashedPasswordsfromHistory__(self):
'''
Try to get hashed password from select * from sys.user_history$;
PASSWORD_REUSE_TIME or/and PASSWORD_REUSE_MAX must be used to have passwords in this table
'''
self.__resetPasswordList__()
req = "SELECT user#, password, password_date FROM sys.user_history$"
results = self.__execQuery__(query=req,ld=['user#', 'password','password_date'])
if isinstance(results,Exception):
logging.info("Impossible to get hashed passwords from the sys.user_history$ table: {0}".format(results))
return results
else :
logging.info("Get hashed passwords from the sys.user_history$ table")
for l in results:
self.passwords = results
return True
def printPasswords (self):
'''
print passwords
'''
for l in self.passwords:
if len(l)==3 and l.has_key('name') and l.has_key('spare4'):
if l['password']!=None and l['spare4']!=None: print "{0}; {1}; {2}".format(l['name'], l['password'],l['spare4'])
elif l.has_key('username'):
if l['password']!=None: print "{0}:{1}".format(l['username'], l['password'])
elif l.has_key('user#'):
if l['password']!=None: print "{0}; {1}; {2}".format(l['user#'], l['password'], l['password_date'])
def testAll (self):
'''
Test all functions
'''
self.args['print'].subtitle("Hashed Oracle passwords ?")
logging.info("Try to get Oracle hashed passwords")
status = self.__tryToGetHashedPasswords__()
if status == True :
self.args['print'].goodNews("OK")
else :
self.args['print'].badNews("KO")
self.args['print'].subtitle("Hashed Oracle passwords from history?")
logging.info("Try to get Oracle hashed passwords from the history table")
status = self.__tryToGetHashedPasswordsfromHistory__()
if status == True :
self.args['print'].goodNews("OK")
else :
self.args['print'].badNews("KO")
def runPasswordsModule(args):
'''
Run the Passwords module
'''
status = True
if checkOptionsGivenByTheUser(args,["test-module","get-passwords","get-passwords-from-history"]) == False : return EXIT_MISS_ARGUMENT
passwords = Passwords(args)
status = passwords.connection(stopIfError=True)
if args.has_key('info')==False:
info = Info(args)
info.loadInformationRemoteDatabase()
args['info'] = info
if args['test-module'] == True :
args['print'].title("Test if hashed passwords can be got")
status = passwords.testAll()
if args['get-passwords'] == True :
args['print'].title("Try to get Oracle hashed passwords")
status = passwords.__tryToGetHashedPasswords__()
if status == True :
args['print'].goodNews("Here are Oracle hashed passwords:")
passwords.printPasswords()
else :
args['print'].badNews("Impossible to get hashed passwords: {0}".format(status))
if args['get-passwords-from-history'] == True :
args['print'].title("Try to get Oracle hashed passwords from history")
status = passwords.__tryToGetHashedPasswordsfromHistory__()
if status == True :
args['print'].goodNews("Here are Oracle hashed passwords:")
passwords.printPasswords()
else :
args['print'].badNews("Impossible to get hashed passwords from history: {0}".format(status))