larxius's picture
Deploy SentinelScan WSS to HF Spaces
d543fc1 verified
Raw
History Blame Contribute Delete
2.49 kB
###############################################################################
# SPDX-License-Identifier: GPL-3.0-only
# PURPOSE: Perform CGI tests
###############################################################################
sub nikto_cgi_init {
my $id = { name => "cgi",
full_name => "CGI",
author => "Sullo",
description => "Enumerates possible CGI directories.",
hooks => { recon => { method => \&nikto_cgi, }, },
copyright => "2008 Chris Sullo",
};
return $id;
}
sub nikto_cgi {
my ($mark) = @_;
my $gotvalid = 0;
my @POSSIBLECGI;
my @CFGCGI = split(' ', $VARIABLES{'@CGIDIRS'});
if (defined $CLI{'forcecgi'}) {
if ($CLI{'forcecgi'} eq "all") {
nprint("Using all known CGI directories\n", "d");
}
elsif ($CLI{'forcecgi'} eq "none") {
nprint("- No CGI directories are set\n", "v", "cgi");
$VARIABLES{'@CGIDIRS'} = "";
}
else {
nprint("Using CGI dir '$CLI{'forcecgi'}'\n", "d");
$VARIABLES{'@CGIDIRS'} = $CLI{'forcecgi'};
}
}
else # or normal testing of each dir
{
foreach my $possiblecgidir (@CFGCGI) {
return if $mark->{'terminate'};
my ($res, $content, $error, $request, $response) =
nfetch($mark, $possiblecgidir, "GET", "", "", "", "CGI");
nprint("Checked for CGI dir\t$possiblecgidir\tgot:$res",
"d", ($mark->{'hostname'}, $mark->{'ip'}, $mark->{'displayname'}));
if ($res =~ /^40[135]$/ && !is_404($mark, $possiblecgidir, $response)) {
$gotvalid++;
push @POSSIBLECGI, $possiblecgidir;
}
}
if ($gotvalid == 0) {
nprint(
"+ No CGI Directories found (use '-C all' to force check all possible dirs). CGI tests skipped."
);
$VARIABLES{'@CGIDIRS'} = "";
}
elsif (scalar(@CFGCGI) == scalar(@POSSIBLECGI)) {
nprint("+ All CGI directories 'found', use '-C none' to test none");
$VARIABLES{'@CGIDIRS'} = join(" ", @CFGCGI);
}
else {
$VARIABLES{'@CGIDIRS'} = join(" ", @POSSIBLECGI);
}
}
nprint("- Checking for CGI in: $VARIABLES{'@CGIDIRS'}", "v", "cgi");
}
1;