|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T r
Length: 2768 (0xad0) Types: TextFile Names: »rules.pl«
└─⟦4f9d7c866⟧ Bits:30007245 EUUGD6: Sikkerheds distributionen └─⟦3da311d67⟧ »./cops/1.04/cops_104.tar.Z« └─⟦6a2577110⟧ └─⟦4f9d7c866⟧ Bits:30007245 EUUGD6: Sikkerheds distributionen └─⟦6a2577110⟧ »./cops/1.04/cops_104.tar« └─⟦this⟧ »cops_104/perl/rules.pl«
sub apply_rules { local($op, $value, @plan) = @_; printf("eval($op $value): %s\n", &ascii_plan(@plan)) if $opt_d; # # apply UID attack rules... # if ($op eq "u") { # # If we can replace /etc/passwd or /usr/lib/aliases, we can grant # any uid. # &addto("r", "/etc/passwd", @plan); &addto("r", "/usr/lib/aliases", @plan); &addto("r", "/etc/aliases", @plan); # # Check CF's for all usernames with this uid. # uname_loop: foreach $uname (split(/ /, $uid2names{$value})) { $home = $uname2dir{$uname}; next uname_loop unless $home; if ($home eq "/") { $home = ""; } &addto("r", "$home/.rhosts", @plan); &addto("r", "$home/.login", @plan); &addto("r", "$home/.logout", @plan); &addto("r", "$home/.cshrc", @plan); &addto("r", "$home/.profile", @plan); } # # Controlling files for root... # @rootlist = ( "/etc/rc", "/etc/rc.boot", "/etc/rc.single", "/etc/rc.config", "/etc/rc.local", "/usr/lib/crontab", "/usr/spool/cron/crontabs", ); if ($value eq "0") { foreach $file (@rootlist) { &addto("r", $file, @plan); } # Experimental! # you can remove this if desired - tjt #do "rc.prog"; } # # Other CFs for non-root folks... # if ($value ne "0") { &addto("r", "/etc/hosts.equiv", @plan); if (-s "/etc/hosts.equiv") { &addto("r", "/etc/hosts", @plan); } } # # Plans for attacking GIDs... # } elsif ($op eq "g") { # apply gid attack rules # # If we can replace /etc/group we can become any group # &addto("r", "/etc/group", @plan); # # If we can grant any member of a group we can grant that group # member_loop: foreach $uname (split(/ /, $gid2members{$value})) { if (! defined($uname2uid{$uname})) { printf(stderr "group '%s' member '%s' doesn't exist.\n", $value, $uname); next member_loop; } &addto("u", $uname2uid{$uname}, @plan); } # # Plans for attacking files... # } elsif ($op eq "r" || $op eq "w") { ($owner, $group, $other) = &filewriters($value); &addto("u", $owner, @plan) if ($owner ne ""); &addto("g", $group, @plan) if ($group ne ""); &addto("u", "-1", @plan) if ($other); # # If the goal is to replace the file, check the parent directory... # if ($op eq "r") { $parent = $value; $parent =~ s#/[^/]*$##; # strip last / and remaining stuff if ($parent eq "") { $parent = "/"; } if ($parent ne $value) { &addto("r", $parent, @plan); } } } else { # wow, bad $type of object! printf(stderr "kuang: bad op in apply_rules!\n"); printf(stderr "op '%s' value '%s' plan '%s'\n", $op, $value, &ascii_plan(@plan)); exit(1); } } 1;