[Postfixbuch-users] abuse.net VERDAMMT!
Daniel Sepeur
mlists at eomis.de
Mo Sep 27 08:52:51 CEST 2004
> > domain.de:200.162.72.131 - - [27/Sep/2004:06:11:18 +0200] "POST
> > /mailforms/../cgi-bin/mailer.cgi HTTP/1.0" 404 282
> > "http://www.domain.de/" "-"
>
> Was ist das fuer ein Script?
> Zeigen.
Ein Kundenprogramm mit dem er sich ein Feedback von seiner Webseite
schicken lässt:
#!/usr/bin/perl
################################## SETTINGS
######################################
$mailprog= "/usr/sbin/sendmail" ;
$recipient= "email\@domain.de" ;
#$recipient= "TONI\@tester.de"; <- von Daniel, für Testzwecke zu
@DOMAINS und @recipients
$fehlerseite= "http://www.domain.de/mailforms/feedback-fehler.shtml";
$dankeseite= "http://www.domain.de/mailforms/feedback-danke.shtml";
# Zugelassene Domains (Bitte ggf. erweitern)
@DOMAINS = ("domain.de","www.domain.de");
@recipients = &allowed_recipients(@DOMAINS);
########################################################################
##########
# Prüfen der Recipients in @recipients.
# Es darf nur an eMail-Adressen gesendet werden, die in @recipients
angegeben sind.
# Wenn keine Adressen angegeben sind, darf nur an user at DOMAINS geschickt
werden.
sub allowed_recipients {
local(@domains) = @_;
local($domain, at return_recips);
foreach $domain (@domains) {
if ($domain =~ /^\d+\.\d+\.\d+\.\d+$/) {
$domain =~ s/\./\\\./g;
push(@return_recips,'^[\w\-\.]+\@\[' . $domain . '\]');
}
else {
$domain =~ s/\./\\\./g;
$domain =~ s/\-/\\\-/g;
push(@return_recips,'^[\w\-\.]+\@' . $domain);
}
}
return @return_recips;
}
$valid_recipient = 0;
foreach $send_to (split(/,/,$recipient)) {
foreach $possible_recipient (@recipients) {
if ($send_to =~ /$possible_recipient$/i) {
push(@send_to,$send_to); last;
}
}
}
if ($#send_to < 0) {
print "Content-type: text/html\n\n";
print "Kein passender Empfänger
spezifiziert<br><br>Breche ab!!";
exit;
}
$recipient = join(',', at send_to); # <- Unsere fertigen Recipients
für Sendmail
# Prüfen der zugelassenen Hosts
# Lokalisieren des check_referer - Flags welches festlegt, ob der
Benutzer mailen darf oder nicht
local($check_referer) = 0;
# Wenn ein referring URL spezifiziert ist werden wir für jede
eingetragene Domain in @DOMAINS checken
# ob der Referer durch darf.
if ($ENV{'HTTP_REFERER'}) {
foreach $referer (@DOMAINS) {
if ($ENV{'HTTP_REFERER'} =~ m|https?://([^/]*)$referer|i) {
$check_referer = 1;
last;
}
}
}
else {
$check_referer = 0;
}
# Wenn der HTTP_REFERER nicht gültig ist, bekommen wir einen Fehler
if ($check_referer != 1) {
print "Content-typt: text/html\n\n";
print "Benutzung untersagt!!!";
exit;
}
&parse;
if ( ($FORM{'vorname'} eq "") || ($FORM{'nachname'} eq "") ||
($FORM{'email'} eq "") || ($FORM{'aktion'} eq "") )
{ print "Location: $fehlerseite\n\n"; }
elsif ($FORM{'email'} !~ /^.+\@.+\..+/)
{ print "Location: $fehlerseite\n\n"; }
else { &send_mail; };
sub send_mail {
#open(MAIL, "|$mailprog $recipient") || &HTMLdie("Couldn't send the mail
(couldn't run $mailprog).") ;
open(MAIL, "|$mailprog -t");
print MAIL "To: $recipient\n";
print MAIL "From: $FORM{'email'}\n";
print MAIL "X-Which-Script: 1\n";
print MAIL "Subject: Feedback von T4T\n\n",
print MAIL "Die folgenden Daten wurden übermittelt \n\n" ;
print MAIL "Name:\t $FORM{'vorname'} $FORM{'nachname'}\n";
print MAIL "eMail:\t $FORM{'email'}\n";
print MAIL "Homepage:\t $FORM{'url'}\n\n";
print MAIL "Mein Feedback:\n $FORM{'aktion'}\n\n";
print MAIL "Dieses Formular wird bearbeitet von /cgi-bin/mailer.cgi\n";
close(MAIL) ;
print "Location: $dankeseite\n\n";
}
sub parse {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/~!/ ~!/g;
$FORM{$name} = $value;
}
}
Der Untere Teil ist nur noch um X-Wich-Script erweitert worden.
Ansonsten habe ich letzte Nacht den oberen Teil nachgearbeitet bis
&parse.
Daniel
Mehr Informationen über die Mailingliste Postfixbuch-users