#!/local/bin/perl5
##############################################################################
# $Id: hackerlog.txt,v 1.1 2003/03/28 23:48:29 xwolf Exp $ #
# COPYRIGHT NOTICE #
# Copyright 1999-2001 Wolfgang Wiese All Rights Reserved. #
# EMail: xwolf@xwolf.com #
# URL : http://www.xwolf.com #
# #
# This script may be used and modified free of charge by anyone so long as #
# this copyright notice and the comments above remain intact. By using this #
# code you agree to indemnify Wolfgang Wiese from any liability that #
# might arise from it's use. #
# #
# Selling the code for this program without prior written consent is #
# expressly forbidden. In other words, please ask first before you try and #
# make money off of my program. #
# #
# Obtain permission before redistributing this software over the Internet or #
# in any other medium. In all cases copyright and header must remain intact.#
##############################################################################
# Last Modified on: $Date: 2003/03/28 23:48:29 $
# By: $Author: xwolf $
# Version: $Revision: 1.1 $
##############################################################################
$LOGDATEI = "/mnt1/logs/cgi-hack.log";
# In dieser Logdatei werden die Zugriffsversuche gespeichert.
$MESSAGE_FILE = "/mnt2/logs/hackerlog.html";
# in dieser HTML-Datei schreiben wir den Text, den wir fuer den
# Hacker ausgeben wollen :)
@REPORT_ASAP = ("passwd", "phf", "term");
# Kommen diese Strings vor, wird zusaetzlich eine E-Mail an Webmaster gesandt.
$WEBMASTER = "webmaster\@xwolf.com";
# E-Mail fuer den Webmaster
$CCLISTE = "secadm\@xwolf.com";
$SUBJECT = "CGI Sicherheitswarnung";
# Subjekt der Mail
$MAILPROG = "/usr/lib/sendmail";
# Pfad zu sendmail
################################################################################
# Main program after this point. Don't change
################################################################################
&GetZeit;
# Liest die aktuelle Systemzeit ein.
$ARGUMENTE = &ReadArgumente;
# Liest die Aufrufparameter ein
# $ARGUMENTE =~ s/[\"\'\`]//g;
&LogAccess;
# Protokolliert den Zugriff
if ($REDIR_URL) {
&Redirect($REDIR_URL);
} else {
&Printtext;
# Gibt einen netten Text zurueck, der sagt, dass der
# Typ noch etwas frueher aufstehen muss.
}
my $do_mail =0;
for ($i=0; $i<=$#REPORT_ASAP; $i++) {
if ($ARGUMENTE =~ /$REPORT_ASAP[$i]/i) {
$do_mail = 1;
}
}
if ($do_mail) {
&SendMail;
}
exit(0);
##############################################################################
# Subroutinen
##############################################################################
sub SendMail {
open (MAIL, "|$MAILPROG -t");
print MAIL "To: $WEBMASTER\n";
print MAIL "Cc: $CCLISTE\n";
print MAIL "From: $ENV{'SERVER_ADMIN'}\n";
print MAIL "Priority: High\n";
print MAIL "X-Mailer: $0\n";
print MAIL "Subject: $SUBJECT\n\n";
print MAIL "CGI-Sicherheitsmeldung\n\n";
print MAIL "Es kam zu einem verdaechtigen Zugriff auf ein CGI-Skript mit folgenden\n";
print MAIL "Daten:\n\n";
print MAIL "\tZeit : $zeit\n";
print MAIL "\tRemote Host : $ENV{'REMOTE_HOST'}\n";
print MAIL "\tRemote Addr : $ENV{'REMOTE_ADDR'} / $ENV{'HTTP_X_FORWARDED_FROM'}\n";
print MAIL "\tReferer : $ENV{'HTTP_REFERER'}\n";
print MAIL "\tUser Agent : $ENV{'HTTP_USER_AGENT'}\n";
print MAIL "\tScript : $ENV{'SCRIPT_URI'}\n";
print MAIL "\tArgumente : $ARGUMENTE\n";
print MAIL "\n";
print MAIL "Der Zugriff wurde ebenfalls protokolliert in der Datei\n$LOGDATEI und dem Serverlog.\n";
print MAIL "\n---\nDiese Meldung wurde automatisch generiert vom XWolf CGI Security Guard\n\n";
close MAIL;
}
##############################################################################
sub Printtext {
my $refertext;
if ($ENV{'HTTP_REFERER'}) {
$refertext = "Sie kamen von der Seite $ENV{'HTTP_REFERER'}. Enthällt diese\n";
$refertext .= "in der Tat einen Link auf diese URL, ist sie veraltet. Andernfalls ist die Chance, daß\n";
$refertext .= "Sie einer der Wannabe-Hacker sind, die keinen Schimmer vom Internet haben.
\n";
}
print "Content-type: text/html\n\n";
open(f1,"<$MESSAGE_FILE");
while() {
chop($_);
$_ =~ s/#SCRIPTNAME#/$ENV{'SCRIPT_URI'}/gi;
$_ =~ s/#ARGUMENTE#/$ARGUMENTE/gi;
$_ =~ s/#REFERERLINK#/$refertext/gi;
print "$_\n";
}
close f1;
}
##############################################################################
sub LogAccess {
open(f1,">>$LOGDATEI");
print f1 "$zeit\t$ENV{'REMOTE_HOST'}\t$ENV{'REMOTE_ADDR'}\t$ENV{'HTTP_REFERER'}\t$ENV{'HTTP_USER_AGENT'}\n";
print f1 "\tFile: $ENV{'SCRIPT_URI'}\n";
print f1 "\tArgs: $ARGUMENTE\n";
print f1 "--------------------------------------------------------------------------------\n";
close f1;
}
##############################################################################
sub GetZeit {
local ($sek,$minute,$stunde,$tag,$monat,$jahr,$wtag,$ytag,$isdst);
($sek,$minute,$stunde,$tag,$monat,$jahr,$wtag,$ytag,$isdst) = localtime(time);
$monat++;
$jahr +=1900;
if ($stunde < 10) {$stunde='0'.$stunde;}
if ($minute < 10) {$minute='0'.$minute;}
if ($sek < 10) {$sek='0'.$sek;}
$zeit=$tag.'.'.$monat.'.'.$jahr.' - '.$stunde.':'.$minute.':'.$sek;
}
##############################################################################
sub ReadArgumente {
local $buffer;
if ($ENV{'REQUEST_METHOD'} eq "GET") { $buffer = $ENV{'QUERY_STRING'}; }
else { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
if (!($buffer)) {$buffer=substr($ENV{'PATH_INFO'},1,length($ENV{'PATH_INFO'}));}
if (!($buffer)) {$buffer=@ARGV; }
return $buffer;
}
##############################################################################
sub Redirect {
my($url)=@_;
print "Status: 302 Found\n";
print "Location: $url\n";
print "URI: <$url>\n";
print "Content-type: text/html\r\n\r\n";
exit(1);
}
##############################################################################
##############################################################################
# EOF
##############################################################################