mirror of
https://github.com/killswitch-GUI/CobaltStrike-ToolKit
synced 2026-06-08 15:16:14 +00:00
120 lines
2.3 KiB
Plaintext
120 lines
2.3 KiB
Plaintext
# @Bretiz
|
|
|
|
global('@domain_admins');
|
|
global('$listening');
|
|
@domain_admins = @("administrator", "jay");
|
|
$listening = 1;
|
|
|
|
sub addDA {
|
|
if ($1 !in @domain_admins) {
|
|
add(@domain_admins, $1);
|
|
println("Added $1 to Domain Admins");
|
|
}
|
|
else {
|
|
println("$1 is already in Domain Admins");
|
|
}
|
|
}
|
|
|
|
sub removeDA {
|
|
if ($1 in @domain_admins){
|
|
@rem = @($1);
|
|
@domain_admins = removeAll(@domain_admins, @rem);
|
|
println("Removed $1 from Domain Admins");
|
|
}
|
|
else {
|
|
println("$1 is not in Domain Admins");
|
|
}
|
|
}
|
|
|
|
sub checkDA {
|
|
# strip off " *" if we get a privileged beacon
|
|
$n = replace($user, '\Q *\E', '');
|
|
if ($n in @domain_admins) {
|
|
elog("Beacon with DA $user in PID: $pid");
|
|
}
|
|
}
|
|
|
|
sub parseDA {
|
|
$out = $1;
|
|
@lines = split('\n', $out);
|
|
foreach $line (@lines) {
|
|
$line = replace($line, '[\r\n]', '');
|
|
$line = replace($line, 'received output:', '');
|
|
$line = replace($line, 'Group name\p{Space}*Domain Admins', '');
|
|
$line = replace($line, 'The command completed successfully.', '');
|
|
$line = replace($line, 'Comment\p{Space}.*','');
|
|
$line = replace($line, 'Members.*', '');
|
|
$line = replace($line, '--------.*', '');
|
|
}
|
|
remove(@lines, '');
|
|
@lines = join('', @lines);
|
|
@lines = split('\s+', @lines);
|
|
remove(@lines, '');
|
|
println(@lines);
|
|
foreach $u (@lines) {
|
|
addDA($u);
|
|
}
|
|
}
|
|
|
|
command uaddDA {
|
|
addDA($1);
|
|
}
|
|
|
|
command uremDA {
|
|
removeDA($1);
|
|
}
|
|
command ulistDA {
|
|
printAll(@domain_admins);
|
|
}
|
|
|
|
command uhookStatus {
|
|
hookStatus();
|
|
}
|
|
|
|
sub hookStatus {
|
|
if ($listening) {
|
|
println("Beacon output will be parsed for Domain Admins.");
|
|
} else {
|
|
println("Beacon output will not be parsed.");
|
|
}
|
|
}
|
|
|
|
command uhookOn {
|
|
$listening = 1;
|
|
hookStatus();
|
|
}
|
|
|
|
command uhookOff {
|
|
$listening = 0;
|
|
hookStatus();
|
|
}
|
|
|
|
on beacon_initial {
|
|
$u = beacon_info($1, "user");
|
|
$p = beacon_info($1, "pid");
|
|
checkDA($user => $u, $pid => $p);
|
|
}
|
|
|
|
on credentials {
|
|
@creds = $1;
|
|
@unames = @("");
|
|
foreach $cred (@creds) {
|
|
add(@unames, $cred['user']);
|
|
}
|
|
|
|
foreach $da (@domain_admins) {
|
|
if ($da in @unames) {
|
|
println("Credentials store has DA $da");
|
|
}
|
|
}
|
|
}
|
|
|
|
on beacon_output {
|
|
if ($listening){
|
|
$out = $2;
|
|
if (('Domain Admins' isin $out) && ('The command completed successfully.' isin $out)) {
|
|
parseDA($out);
|
|
}
|
|
}
|
|
}
|