#!/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 ##############################################################################