"Mein" Formmailer von nsm-cgi.sourceforge.net habe ich so konfiguriert, dass die Mails die ich über ein Kontaktformular erhalte wie folgt aussehen:
Hier die Auswertung des XYZ-Formulars, gesendet von
Name (E-Mail) am Datum um Uhrzeit
---------------------------------------------------
Mitteilung: Text text text text
---------------------------------------------------
IP-Adresse: 255.255.255.255
Referrer: http://www.atomic-eggs.com/formulardatei.blubb
Ich habe zusätzlich einige Sperren eingebaut, bei einigen sendet das Script einen 403. Sieht in etwa so aus:
if ($duverhälstdichwieicheswill) {
&darfstedeinemitteilungsenden;
} else {
print header(-Status => 403); exit;
}
Soweit so schlecht. Heute habe ich eine E-Mail erhalten, die insofern seltsam ist, dass sie so aussah:
Hier die Auswertung des XYZ-Formulars, gesendet von
bdcerdr (bdcerdr@bdcerdr.com) am 10. Juni 2007 um 11:59:42 Uhr
---------------------------------------------------
Jede Menge JavaScript-Code (dessen Anfang fehlt)
und HTML-Quelltext
Mitteilung: Haufen
Links
auf
Pornoseiten
Irgendwann mitten drin ageschnitten
---------------------------------------------------
IP-Adresse: 58.67.60.200
Referrer: http://www.atomic-eggs.com/impressum.html
Abgesehen vom Code zwischen der ersten Dash-Linie und "Mitteilung:", von dem ich mir nicht erklären kann, wie er da rein kommt - aber dazu komme ich später - haben mich folgende Sachen stutzig gemacht:
- gefakte Uhrzeit (laut Mail-Client-Zeile steht bei "Erhalten:" 12:10 Uhr, im Mail-Header steht's noch genauer: Date: Sun, 10 Jun 207 12:10:47 +0200)
- ein Referrer atomic-eggs.com/impressum.html kann es nicht geben. Zwar habe ich eine Umleitung der URI http://www.atomic-eggs.com/impressum.html zu http://www.atomic-eggs.com/formulardatei.blubb, aber bei alle Tests, die ich eben machte, erhalte ich in den E-Mails den richigen Referrer: http://www.atomic-eggs.com/formulardatei.blubb
Also Logs studieren, das gefunden:
58.67.60.200 - - [10/Jun/2007:11:59:30 +0200] "GET /impressum.html HTTP/1.1" 301 258 www.atomic-eggs.com "-" "UA" "-"
58.67.60.200 - - [10/Jun/2007:11:59:32 +0200] "GET /formulardatei.blubb HTTP/1.1" 200 20039 www.atomic-eggs.com "-" "UA" "-"
58.67.60.200 - - [10/Jun/2007:12:10:41 +0200] "POST /ordner/script.cgi HTTP/1.1" 403 5 www.atomic-eggs.com "http://www.atomic-eggs.com/impressum.html" "UA" "-"
58.67.60.200 - - [10/Jun/2007:12:10:47 +0200] "POST /ordner/script.cgi HTTP/1.1" 200 18562 www.atomic-eggs.com "http://www.atomic-eggs.com/impressum.html" "UA" "-"
58.67.60.200 - - [10/Jun/2007:12:18:34 +0200] "POST /ordner/script.cgi HTTP/1.1" 403 5 www.atomic-eggs.com "http://www.atomic-eggs.com/impressum.html" "UA" "-"
UA = Mozilla/5.0 (Windows; U; Windows NT 5.2; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7
2 Mal hat der Spammer einen 403 erhalten, einmal (12:10:47 Uhr) einen 200er (was zwar noch lange nicht bedeuten muss, dass die Mail durch ist, in dem Fall war es aber so, sonst hätte ich sie nicht erhalten, s.o.: Das Script zeigt "normalen" Usern bei manchen Fehleingaben auch mal eine Fehlermeldung, deswegen kann 200 als Antwort durchaus OK sein).
Solche Log-Einträgen wie im obigen Ausschnitt habe ich in der heutigen access_log (tägliche Logs) mehrere. Nur zum Glück sind alle weiteren POST-Aufrufe des Scripts mit einem 403 quittiert worden, ein Blick in die mail.log zeigte ebenfalls, dass es dem Spammer nur einmal gelungen ist, diese eine Mail an mich (vielleicht ging sie auch an andere) zu schicken.
Das alles hat dazu geführt, dass ich eine böse Sicherheitslücke im Script endeckt habe (eine ältere, dumme Änderung von mir), die ist jetzt wieder geschlossen.
Meine Frage - abgesehen natürlich davon, ob andere so was in der Form erlebt haben - ist: wie kommt dieser Quelltext in der E-Mail zustanden:
[...]
} else {
document.emailForm.action = "http://www.example.com/index.php?option=etwas&Itemid=siebenstelligezahl"
mehr JavaScript-,
mehr HTML-Code
[...]
Mitteilug: Linkliste
Die URL habe ich aufgerufen und festgestellt, dass dieser Quellcode in der von mir erhaltenen E-Mail eben ein Teil des Quelltexts dieser Seite ist (sie bietet ebenfalls ein Kontaktformular an). Wie kommt der Code in die Mail rein, wie kommt er außerhalb von "Mitteilung"? Gefakte Formseite mit gefaktem Referrer abgeschickt?
Viele Grüße aus Frankfurt/Main,
Patrick
_ - jenseits vom delirium - _
<hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash>
Nichts ist unmöglich? Doch!