heute ist Offtopic-Sonntag im Hause Tom(2)...
ich habe mir gerade mal die Mühe gemacht, einer Spam-Mail, die sich erfolgreich durch meine diversen Filtern durchgeschmuggelt hat, auf den Grund zu gehen.
Dabei muss ich mich echt vor dem Einfallsreichtum der Urheber verneigen.
Zunächst einmal ist es so, dass ich Mails bei mir auf dem Mac empfange, die Darstellung auf "reine Textdatei" stehen habe, also keine HTML Formatierung sehe, was dieser Mail schon mal direkt einigen Wind aus den Segeln genommen hat.
Aber, hätte ich sie als HTML-Mail empfangen, wie ja die meisten Mailclients standardmässig eingestellt sind, hätte ich so gesehen:
Zunächst wunderte ich mich, wie das Teil an den Spamfiltern vorbei kommen konnte. Sie hat sich erfolgreich an mehreren Filtern vorbei geschlichen; vor allem wundert es mich, dass sie eine Adresse benutzt, die ich komplett direkt auf dem Server trashe, weil ich sowieso nur Spam auf diese Adresse bekomme.
Zusätzlich hat sie sich auch an den GMX-internen Spamfiltern vorbeigemogelt, die auf Blacklists lauschen und typische Header- und Mailbody-Merkmale untersuchen.
Ein Blick in den HTML-Code der Mail verrät zumindestens schon einmal, wie die Urheber die Kernaussage ihrer Mail, die ansonsten mit Sicherheit schon als Spammerkmal erkannt worden wäre, verschleiert haben (tags in eckigen statt spitzen Klammern):
If you are paying more than 3.6% on your m[deprecatory]ortgage,
we can slash your paym[tattle]ent!
(must have owned your home at least 24 months to qualify for this program)
GUA[edgewise]RANTEED LOWEST RA[chanson]TES
ON THE PLANET[BR][BR]APPR[bean]OVAL REGARDLESS OF CR[footwork]EDIT HISTORY!
Dadurch, dass sie sinnlose scheinbare HTML-tags wie "deprecatory", "tattle", "edgewise", "chanson", "bean" und "footwork" in die Wörter, die zb "Guarenteed Lowest Rate" ergeben, setzen, hebeln sie einen Keyword-basierten Spamfilter aus, den dieser sieht für ihn unverständliche Wortbröckchen. Da ein HTML-Browser diese ihm unbekannten Tags einfach ignoriert, werden dem Betrachter der Mail dann die Worte wieder im ursprünglichen Sinne angezeigt.
Nett auch der nächste Satz, wo man ja zum Klick "Show me the lowest Rates" aufgefordert wird. Ein Blick in den Quelltext offenbart hier diesen Link:
[A href="http://rd.yahoo.com/calibrate/fresh/assessor/*http://www.f-r-e-e-d-e-a-l-s.com/jf/index.php"
target=_blank]
Ein Klick darauf führt nicht zu der scheinbar angegebenen yahoo.com Seite (die es in der notierten Form gar nicht gibt, wie man gerne testen kann, wenn man den Teil des Links vor dem "*" im Browser eingibt), sondern man landet auf der Seite, die im hinteren Teil des Links angegeben ist: http://www.f-r-e-e-d-e-a-l-s.com/jf/index.php .
Auf dieser gibt es ein ewig langes Formular:
...
Würde man es ausfüllen und absenden, fütterte man eine Datei, die sich hier verbirgt: http://198.173.248.73/M/submit.php
Interessanter ist der Link "opt-out", der ja die Möglichkeit suggeriert, dass man sich aus der Datenbank austragen kann. Aber der führt zu dieser Seite:
http://www.wegotgooddeals.biz, wo sich wiederum ein Formular anbietet:
Naja. Aber weiter in der E-Mail, auch hier gibt es ja einen Link "to stop receiving offers here". Und eigentlich war es dieser Link, der mich neugierig machte, denn offenbar sollte der im Quelltext nicht gleich erkannt werden:
[A
href="handy@%77w%77.%77%65g%6F%74%61%67o%6F%64%64%65%61%6C%2E%62%69%7A%2F"
target=_blank]
handy@ was bitte? Der Rest des Links ist einfach ASCI-URL encoded, wenn man das wieder decodiert steht da:
handy@www.wegotgooddeals.biz/
Aha! Das kommt mir doch bekannt vor... wieso jetzt aber das "handy@" davor?
Bei manchen Servern bedeutet diese Notation eine Subdomain, die aber eigentlich ein Unterverzeichnis ist, also wegotgooddeals.com/handy.
Wagemutig habe ich den Link händisch im Browser eingetragen. Resultat ist ein Fehlerseite, 404, die Seite gibt es nicht:
Ich wollte schon den Browser wieder zumachen, als mit auffiel, dass ich ja a) garnicht mit dem Internet-Explorer unterwegs bin, und auch nicht am PC - wieso sehe ich also die Standard Internet-Explorer 404 Fehler-Seite?!?
Und hier wird es nun interessant, obwohl ich nicht ganz nachvollziehen kann, was auf dieser Seite passiert. Hier ist der Quelltext dazu (alle Tags wieder in eckigen statt spitzen Klammern):
[!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"]
[html dir=ltr]
[head]
[style]
a:link {font:8pt/11pt verdana; color:FF0000}
a:visited {font:8pt/11pt verdana; color:#4e4e4e}
[/style]
[META NAME="ROBOTS" CONTENT="NOINDEX"]
[title]The page cannot be found[/title]
[META HTTP-EQUIV="Content-Type" Content="text-html; charset=Windows-1252"]
[/head]
[script]
function Homepage(){
[!--
// in real bits, urls get returned to our script like this:
// res://shdocvw.dll/http_404.htm#http://www.DocURL.com/bar.htm
//For testing use DocURL = "res://shdocvw.dll/http_404.htm#https://www.microsoft.com/bar.htm"
DocURL = document.URL;
//this is where the http or https will be, as found by searching for :// but skipping the res://
protocolIndex=DocURL.indexOf("://",4);
//this finds the ending slash for the domain server
serverIndex=DocURL.indexOf("/",protocolIndex + 3);
//for the href, we need a valid URL to the domain. We search for the # symbol to find the begining
//of the true URL, and add 1 to skip it - this is the BeginURL value. We use serverIndex as the end marker.
//urlresult=DocURL.substring(protocolIndex - 4,serverIndex);
BeginURL=DocURL.indexOf("#",1) + 1;
urlresult=DocURL.substring(BeginURL,serverIndex);
//for display, we need to skip after http://, and go to the next slash
displayresult=DocURL.substring(protocolIndex + 3 ,serverIndex);
InsertElementAnchor(urlresult, displayresult);
}
function HtmlEncode(text)
{
return text.replace(/&/g, '&').replace(/'/g, '"').replace(/[/g, '<').replace(/]/g, '>');
}
function TagAttrib(name, value)
{
return ' '+name+'="'+HtmlEncode(value)+'"';
}
function PrintTag(tagName, needCloseTag, attrib, inner){
document.write( '[' + tagName + attrib + ']' + HtmlEncode(inner) );
if (needCloseTag) document.write( '[/' + tagName +']' );
}
function URI(href)
{
IEVer = window.navigator.appVersion;
IEVer = IEVer.substr( IEVer.indexOf('MSIE') + 5, 3 );
return (IEVer.charAt(1)=='.' && IEVer ]= '5.5') ?
encodeURI(href) :
escape(href).replace(/%3A/g, ':').replace(/%3B/g, ';');
}
function InsertElementAnchor(href, text)
{
PrintTag('A', true, TagAttrib('HREF', URI(href)), text);
}
//--]
[/script]
[body bgcolor="FFFFFF"]
[table width="410" cellpadding="3" cellspacing="5"]
[tr]
[td align="left" valign="middle" width="360"]
[h1 style="COLOR:000000; FONT: 13pt/15pt verdana"][!--Problem--]The page cannot be found[/h1]
[/td]
[/tr]
[tr]
[td width="400" colspan="2"]
[font style="COLOR:000000; FONT: 8pt/11pt verdana"]The page you are looking for might have been removed, had its name changed, or is temporarily unavailable.[/font][/td]
[/tr]
[tr]
[td width="400" colspan="2"]
[font style="COLOR:000000; FONT: 8pt/11pt verdana"]
[hr color="#C0C0C0" noshade]
[p]Please try the following:[/p]
[ul]
[li]If you typed the page address in the Address bar, make sure that it is spelled correctly.[br]
[/li]
[li]Open the
[script]
[!--
if (!((window.navigator.userAgent.indexOf("MSIE") ] 0) && (window.navigator.appVersion.charAt(0) == "2")))
{
Homepage();
}
//--]
[/script]
home page, and then look for links to the information you want.[/li]
[li]Click the [a href=" history.back(1)"]Back[/a] button to try another link.[/li]
[/ul]
[h2 style="font:8pt/11pt verdana; color:000000"]HTTP 404 - File not found[br]
Internet Information Services[BR][/h2]
[hr color="#C0C0C0" noshade]
[p]Technical Information (for support personnel)[/p]
[ul]
[li]More information:[br]
[a href="http://www.microsoft.com/ContentRedirect.asp?prd=iis&sbp=&pver=5.0&pid=&ID=404&cat=web&os=&over=&hrd=&Opt1=&Opt2=&Opt3=" target="_blank"]Microsoft Support[/a]
[/li]
[/ul]
[/font][/td]
[/tr]
[/table]
[/body]
[/html]
Ich habe die komplette Seite gespeichert und bei mir lokal aufgerufen, sobald sie auf einem Server liegt, erscheint der server, auf dem die seite aufgerufen wird, als home-page link auf der fehler seite. wenn man sich die kommentare im script im oberen teil des Quelltextes durchliest, dann steckt da noch was anderes dahinter, aber wie gesagt, ich steige da nicht ganz durch...
Viel Spass beim knobeln und gruss aus der HTML-Hütte,
Tom
PS: Der komische kleine schwarze Müll unter der Mail offenbart sich im Quelltext als Ansammlung von allerlei Wörtern:
[font size=1px]
mezzo annalen repudiate bellflower abate thrill freshwater accent conscription matron constrictor modulate platoon frizzle tissue consider landowner brookhaven hypochlorite cathode confront hutch thomson doom reminiscent splay banister avoidance airline gogo schizophrenia ethnic ineffable tabula caterpillar coo accessory brennan admiralty staff breakaway gregg concede tombstone debase bombay anionic beplaster siderite convalesce backyard hoydenish embedder mask quirky custer canton truncate vest affidavit fruition belvidere arnold item cleanup emissivity orphic tappet gymnast bathtub pronounceable seriate elkhart immiscible hyperboloid coast protector vide angles vassal perceptive coherent echoes chip coup echo whereof baleen conduit adject insulate aviary mcconnell playground bandpass egyptian assault myoglobin denton shifty nina deny bourbon vulpine dartmouth florentine data obelisk stray close parsifal allis slew janitor summers leggy ira!
q clean catlike arcadia gangplank neologism nip bizet vertebrate hyperbola invasive elan cryptanalyze feign ineligible ninefold solstice thyronine ally shrilly credent excretion isomer conscription emmanuel ntis timothy bijective gymnast demand crutch dubhe contrariwise bout lsi laos filipino vacuum divestiture glasgow carol boot gloomy pecos iris accentual cajole ceres legislature report daedalus dirge mule capsule compromise beneath ibid you've recompense catharsis asinine camelopard prorate wilkie psychoses royalty type damsel mew dearborn agamemnon collocation carlo sloganeer alberich coalescent gloomy oldenburg chant ingest burl recalcitrant advisee writeup ma harding bundestag patriot hackberry harding erodible photo rancid sibilant bridgeport britten volt abode bang compliment keynesian olden hassle hines markov communique maw rabble bullet cliffhang wednesday women conservative des dark bucketfull gob yardage gar crispin jaguar viewport heath meniscus commentary bric!
klay gallery someone'll accompaniment bertha full sanguineous c!
rochet delicacy churn burglary antler electrolysis scanty cicero caste suspend trio hydraulic thine deacon arrangeable ablaze binuclear weatherproof karamazov derogate fortieth lucrative debris loaves assort stringent bruit handset distributive nutrient dogfish rotogravure debug elm blue distributive maier persian transpacific turret contribute mess vesper crematory verge compression moccasin venezuela apprehend phosphoresce sundry cranium doge duma broadloom chill fallow appalachia chuck disambiguate rotenone workmen hypertensive loudspeaker beam legacy proscribe acrobatic vise aldrin ashland else cypriot decompress dried jacobson byzantium auditory selectman node tom concur uruguay elizabethan accuracy rate rotogravure bateau citron houston doff apollonian deterrent seraphim accusatory earthshaking diocesan analyst dictate translucent haitian mantis cylinder emolument bonnet adposition agglomerate deoxyribose don carrel cull knack deciduous virgin hospice conservative keyh!
ole lodestone onyx dunbar eire wont thereof argot squirt bronchitis moraine catharsis shifty trout jovial fiche pulsate superlunary rapt toefl caputo frenetic donahue dunham deuce locomote dogberry aztecan bodybuilding cashmere depletion clip coquina cutback gripe infix host admiral poinsettia casual lecture ditto history chartres degradation radiometer anchorage repressive hadley leg select delphinium committal housebreak appanage sure eliot licorice passive pillow coronary janet crazy blizzard breathe wightman charity maverick refection whirl psychophysic cheap glassine ami bebop satellite despicable airport clump leeds arbiter craig dogtooth mercantile coachman niobe leatherback boeotia declaratory nov fruition tundra conley facultative dorothea ginger jaguar chop timid contaminate bromfield beech gosh extemporaneous disdain apices mcconnell[/font]