Skip to content

Commit 6c80cf1

Browse files
authored
Merge pull request #24 from jabra-/sa-added-more-cmds
added more sa cmds
2 parents 10cdfd1 + 592fa10 commit 6c80cf1

File tree

1 file changed

+107
-6
lines changed

1 file changed

+107
-6
lines changed

SituationalAwareness/SituationalAwareness.py

+107-6
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,73 @@ def uptime( demonID, *param ):
9393
demon : Demon = None
9494

9595
demon = Demon( demonID )
96-
TaskID = demon.ConsoleWrite( demon.CONSOLE_TASK, "Tasked demon to lists system boot time" )
96+
TaskID = demon.ConsoleWrite( demon.CONSOLE_TASK, "Tasked demon to list system boot time" )
9797

9898
demon.InlineExecute( TaskID, "go", f"ObjectFiles/uptime.{demon.ProcessArch}.o", b'', False )
9999

100100
return TaskID
101101

102+
def listmods( demonID, *params ):
103+
TaskID : str = None
104+
demon : Demon = None
105+
106+
demon = Demon( demonID )
107+
108+
TaskID = demon.ConsoleWrite( demon.CONSOLE_TASK, "Tasked demon to list modules" )
109+
110+
demon.InlineExecute( TaskID, "go", f"ObjectFiles/listmods.{demon.ProcessArch}.o", b'', False )
111+
112+
return TaskID
113+
114+
115+
def probe_parse_params( demon, params ):
116+
packer = Packer()
117+
118+
num_params = len(params)
119+
server = ''
120+
121+
if num_params == 2:
122+
server = params[ 0 ]
123+
port = int( params[ 1 ] )
124+
elif num_params < 2:
125+
demon.ConsoleWrite( demon.CONSOLE_ERROR, "Not enough parameters" )
126+
return None
127+
elif num_params > 2:
128+
demon.ConsoleWrite( demon.CONSOLE_ERROR, "Too many parameters" )
129+
return None
130+
131+
packer.addstr(server)
132+
packer.adduint32(port)
133+
134+
return packer.getbuffer()
135+
136+
def probe( demonID, *params ):
137+
TaskID : str = None
138+
demon : Demon = None
139+
demon = Demon( demonID )
140+
141+
packed_params = probe_parse_params( demon, params )
142+
if packed_params is None:
143+
return False
144+
145+
TaskID = demon.ConsoleWrite( demon.CONSOLE_TASK, "Tasked demon to probe remote host" )
146+
147+
demon.InlineExecute( TaskID, "go", f"ObjectFiles/probe.{demon.ProcessArch}.o", packed_params, False )
148+
149+
return TaskID
150+
151+
def adv_audit_policies( demonID, *param ):
152+
TaskID : str = None
153+
demon : Demon = None
154+
155+
demon = Demon( demonID )
156+
TaskID = demon.ConsoleWrite( demon.CONSOLE_TASK, "Tasked demon to retrieve the advanced security audit policies" )
157+
158+
demon.InlineExecute( TaskID, "go", f"ObjectFiles/adv_audit_policies.{demon.ProcessArch}.o", b'', False )
159+
160+
return TaskID
161+
162+
102163
def whoami( demonID, *param ):
103164
TaskID : str = None
104165
demon : Demon = None
@@ -433,7 +494,7 @@ def list_firewall_rules( demonID, *params ):
433494

434495
TaskID = demon.ConsoleWrite( demon.CONSOLE_TASK, "Tasked demon to list all firewall rules" )
435496

436-
demon.InlineExecute( TaskID, "go", f"ObjectFiles/get_password_policy.{demon.ProcessArch}.o", b'', False )
497+
demon.InlineExecute( TaskID, "go", f"ObjectFiles/list_firewall_rules.{demon.ProcessArch}.o", b'', False )
437498

438499
return TaskID
439500

@@ -879,7 +940,7 @@ def ldapsearch_parse_params( demon, params ):
879940
attributes = params[ 1 ]
880941

881942
if num_params >= 3:
882-
result_limit = params[ 2 ]
943+
result_limit = int( params[ 2 ] )
883944

884945
if num_params >= 4:
885946
hostname = params[ 3 ]
@@ -911,6 +972,42 @@ def ldapsearch( demonID, *params ):
911972

912973
return TaskID
913974

975+
976+
def netloggedon_parse_params( demon, params ):
977+
packer = Packer()
978+
979+
num_params = len(params)
980+
computer = ''
981+
982+
if num_params == 0:
983+
demon.ConsoleWrite( demon.CONSOLE_ERROR, "Not enough parameters" )
984+
return None
985+
elif num_params == 1:
986+
computer = params[ 0 ]
987+
elif num_params > 1:
988+
demon.ConsoleWrite( demon.CONSOLE_ERROR, "Too many parameters" )
989+
return None
990+
991+
packer.addWstr(computer)
992+
packer.adduint32(1)
993+
994+
return packer.getbuffer()
995+
996+
def netloggedon( demonID, *params ):
997+
TaskID : str = None
998+
demon : Demon = None
999+
demon = Demon( demonID )
1000+
1001+
packed_params = netloggedon_parse_params( demon, params )
1002+
if packed_params is None:
1003+
return False
1004+
1005+
TaskID = demon.ConsoleWrite( demon.CONSOLE_TASK, "Tasked demon to enumerate logged in user" )
1006+
1007+
demon.InlineExecute( TaskID, "go", f"ObjectFiles/netloggedon.{demon.ProcessArch}.o", packed_params, False )
1008+
1009+
return TaskID
1010+
9141011
def netsession_parse_params( demon, params ):
9151012
packer = Packer()
9161013

@@ -1446,6 +1543,9 @@ def sa_tasklist( demonID, *params ):
14461543

14471544
return TaskID
14481545

1546+
RegisterCommand( adv_audit_policies, "", "adv_audit_policies", "Retrieve advanced security audit policies", 0, "", "" )
1547+
RegisterCommand( listmods, "", "listmods", "List process modules (DLL).", 0, "", "" )
1548+
RegisterCommand( probe, "", "probe", "Check if a specific port is open", 0, "", "" )
14491549
RegisterCommand( arp, "", "arp", "Lists out ARP table", 0, "", "" )
14501550
RegisterCommand( driversigs, "", "driversigs", "checks drivers for known edr vendor names", 0, "", "" )
14511551
RegisterCommand( ipconfig, "", "ipconfig", "Lists out adapters, system hostname and configured dns serve", 0, "", "" )
@@ -1463,7 +1563,7 @@ def sa_tasklist( demonID, *params ):
14631563
RegisterCommand( nslookup, "", "nslookup", "Make a DNS query. DNS server is the server you want to query (do not specify or 0 for default). Record type is something like A, AAAA, or ANY", 0, "hostname [opt:dns server] [opt: record type]", "dc01" )
14641564
RegisterCommand( env, "", "env", "Print environment variables.", 0, "", "" )
14651565
RegisterCommand( get_password_policy, "", "get_password_policy", "Gets a server or DC's configured password policy", 0, "[hostname]", "" )
1466-
#RegisterCommand( list_firewall_rules, "", "list_firewall_rules", "List Windows firewall rules", 0, "", "" )
1566+
RegisterCommand( list_firewall_rules, "", "list_firewall_rules", "List Windows firewall rules", 0, "", "" )
14671567
RegisterCommand( cacls, "", "cacls", "List user permissions for the specified file, wildcards supported", 0, "[filepath]", "C:\\Windows\\Temp\\test.txt" )
14681568
RegisterCommand( schtasksenum, "", "schtasksenum", "Enumerate scheduled tasks on the local or remote computer", 0, "[opt: server]", "" )
14691569
RegisterCommand( schtasksquery, "", "schtasksquery", "Query the given task on the local or remote computer", 0, "[opt: server] [taskpath]", "" )
@@ -1476,8 +1576,9 @@ def sa_tasklist( demonID, *params ):
14761576
RegisterCommand( adcs_enum, "", "adcs_enum", "Enumerate CAs and templates in the AD using Win32 functions", 0, "[opt: domain]", "" )
14771577
RegisterCommand( enumlocalsessions, "", "enumlocalsessions", "Enumerate currently attached user sessions both local and over RDP", 0, "", "" )
14781578
RegisterCommand( enum_filter_driver, "", "enum_filter_driver", "Enumerate filter drivers", 0, "[opt: system]", "" )
1479-
RegisterCommand( ldapsearch, "", "ldapsearch", "Execute LDAP searches (NOTE: specify *,ntsecuritydescriptor as attribute parameter if you want all attributes + base64 encoded ACL of the objects, this can then be resolved using BOFHound. Could possibly break pagination, although everything seemed fine during testing.)", 0, "query [opt: attribute] [opt: results_limit] [opt: DC hostname or IP] [opt: Distinguished Name]", "\"(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=4194304))\"" )
1480-
RegisterCommand( netsession, "", "get-netsession", "Enumerate sessions on the local or specified computer", 0, "[opt:computer]", "" )
1579+
RegisterCommand( ldapsearch, "", "ldapsearch", "Execute LDAP searches (NOTE: specify *,ntsecuritydescriptor as attribute parameter if you want all attributes + base64 encoded ACL of the objects, this can then be resolved using BOFHound. Could possibly break pagination, although everything seemed fine during testing.)", 0, "query [opt: attribute] [opt: results_limit] [opt: DC hostname or IP] [opt: Distingished Name]", "\"(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=4194304))\"" )
1580+
RegisterCommand( netloggedon, "", "netloggedon", "Enumerate users on the local or specified computer", 0, "[hostname]", "" )
1581+
RegisterCommand( netsession, "", "netsession", "Enumerate sessions on the local or specified computer", 0, "[opt:computer]", "" )
14811582
RegisterCommand( netGroupList, "", "netGroupList", "List groups from the default or specified domain", 0, "[opt: domain]", "" )
14821583
RegisterCommand( netGroupListMembers, "", "netGroupListMembers", "List group members from the default or specified domain", 0, "groupname [opt: domain]", "" )
14831584
RegisterCommand( netLocalGroupList, "", "netLocalGroupList", "List local groups from the local or specified computer", 0, "[opt: server]", "" )

0 commit comments

Comments
 (0)