[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