Trojaner in Website
lima-city → Forum → Die eigene Homepage → Sicherheit im Internet
angreifer
beispiel
code
datei
email
fehler
frage
header
http
idee
inhalt
jemand
nachricht
problem
server
string
system
teil
url
wissen
-
Hallo Community,
vor einigen Tagen hatte ich das Problem, dass sich ein (laut avast!) Trojaner in einem JS-File (genau gesagt, in der jQuery.js) auf einer von mir betreuten Website eingenistet hatte. Daraufhin habe ich die Seite einige Tage offline genommen und versucht das Problem zu finden, jedoch leider ohne Erfolg. Mir bleib also nichts anderes übrig, als die jQuery.js zu ersetzen und die Seite wieder hochzuladen: http://www.metal-outbreak.at
Heute sehe ich, dass auf der Website einer Bar in meiner Nähe die selbe Avast!-Meldung kommt. Hier hat sich Javascript-Code direkt in den head des Templates gesetzt. http://www.tanzcafeschindler.at/
Der Schadcode sieht so aus:
/* Schadcode aus Sicherheitsgründen entfernt */
Alles darunter ist wie gewohnt.
Meine Fragen:
1) Hat jemand eine Ahnung, was dieses Stück JS genau tut?
2) Hat jemand eine Idee, wie jemand JS-Code in Template oder Javascript-Dateien einschleuse kann?
Grüße,
Freezinger
edit: Fehler ausgebessert
Beitrag zuletzt geändert: 28.11.2013 16:12:31 von cbhp -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
software-brosch schrieb:
Was für ein System verwendest du um die Website zu verwalten (TYPO3, Wordpress, Joomla, ...).
Keines, das System ist selbst programmiert, jedoch habe ich keine Sicherheitslücke gefunden, über die Dateien manipuliert werden könnten. -
Schick das Teil an Avast. Kann ohne weiters sein, dass der zu Unrecht ein Problem meldet.
-
workhappy schrieb:
Schick das Teil an Avast. Kann ohne weiters sein, dass der zu Unrecht ein Problem meldet.
Da aufeinmal etwas in der jQuery.js war, das garantiert nicht dort hingehörte, bin ich mir 100%ig sicher, dass es keine Fehlmeldung von Avast war!
Das selbe bei Tanzcafe Schindler, kann ich auch zu 100% sagen, dass der JS Code den ich gespotet habe NICHT dorthin gehört, da die Seite ein Freund von mir erstellt hat. -
workhappy schrieb:
Ja nee, is klar. Wer keine Ahnung hat, einfach mal.. du weißt schon.
Schick das Teil an Avast. Kann ohne weiters sein, dass der zu Unrecht ein Problem meldet.
freezinger schrieb:
Zu Recht. ^^
workhappy schrieb:
Schick das Teil an Avast. Kann ohne weiters sein, dass der zu Unrecht ein Problem meldet.
Da aufeinmal etwas in der jQuery.js war, das garantiert nicht dort hingehörte, bin ich mir 100%ig sicher, dass es keine Fehlmeldung von Avast war!
Hier ist der Quelltext des ersten Scripts:
/* Schadcode aus Sicherheitsgründen entfernt */
Soetwas ^^ hatten wir vor kurzem schon mal.
Dort wird erklärt, was es macht:
https://www.lima-city.de/thread/viruswarnung-js-exp-redir-el-7/page%3A0/perpage%3A20#1114977
Beitrag zuletzt geändert: 28.11.2013 16:13:01 von cbhp -
Zeig uns doch mal deinen Code, vielleicht entdeckt ja einer hier die Sicherheitslücke. Ansonsten kann man nur rumraten, wie der Code zu dir kam.
Auch würde ich dir empfehlen, sämtliche Seiten mit dem Fehler erstmal abzuhärten und ggf. erstmal als Version ohne JS zur Verfügung zu stellen.
Ansonsten könntest du auch mal versuchen, jQuery nicht zu bundeln sondern von den offiziellen Quellen einzubinden. (Das lässt sich googlen, also stell hier keine Frage zu!) -
menschle schrieb:
Soetwas ^^ hatten wir vor kurzem schon mal.
Dort wird erklärt, was es macht:
https://www.lima-city.de/thread/viruswarnung-js-exp-redir-el-7/page%3A0/perpage%3A20#1114977
Okay, jetzt bin ich schon mal um einiges schlauer.
Vielen Dank für die hervorragende Erklärung.
Jetzt gilt es nur noch herauszufinden, wie der Angreifer es geschafft hat, den Schadcode einzuschläusen.
Falls jemand Ideen hat, darf er diese gerne auf http://www.metal-outbreak.at/ ausprobieren und mir Bescheid geben.
edit:
tchab schrieb:
Zeig uns doch mal deinen Code, vielleicht entdeckt ja einer hier die Sicherheitslücke. Ansonsten kann man nur rumraten, wie der Code zu dir kam.
Die Seite besteht mittlerweile aus mehreren Tausend Zeilen Code. Ich kann aber mal alle relevanten Stellen raussuchen und posten.
tchab schrieb:
Auch würde ich dir empfehlen, sämtliche Seiten mit dem Fehler erstmal abzuhärten und ggf. erstmal als Version ohne JS zur Verfügung zu stellen.
Die Seite ist bereits kontrolliert und wieder Trojaner-frei. Es wurde der Webspace komplett vom Serveradmin gelöscht, das FTP Passwort geändert und ein älteres Backup wieder raufgespielt.
Weiters denke ich, dass eine Version ohne JS in diesem Fall nicht viel bringen wird, denn der Angreifer hat es ja irgendwie geschafft, seinen eigenen Javascriptcode direkt in eine Javascript Datei zu schreiben, die auf dem Server liegt.
Beitrag zuletzt geändert: 21.8.2013 12:33:57 von freezinger -
freezinger schrieb:
Falls jemand Ideen hat, darf er diese gerne auf http://www.metal-outbreak.at/ ausprobieren und mir Bescheid geben.
Es wäre wirklich sehr viel einfacher, wenn du uns einfach den Code der Seite zur Verfügung stellst … Wir wissen ja nicht, was da serverseitig passiert. -
freezinger schrieb:
Alle Eingabemöglichkeiten testen, z.B. Dein Gästebuch. Werden mögliche Injectionversuche ausreichend abgefangen?
Jetzt gilt es nur noch herauszufinden, wie der Angreifer es geschafft hat, den Schadcode einzuschläusen. -
menschle schrieb:
freezinger schrieb:
Alle Eingabemöglichkeiten testen, z.B. Dein Gästebuch. Werden mögliche Injectionversuche ausreichend abgefangen?
Jetzt gilt es nur noch herauszufinden, wie der Angreifer es geschafft hat, den Schadcode einzuschläusen.
Gästebucheinträge werden so verarbeitet:
require_once('system/akismet.class.php'); $Name = trim($_POST['Name']); $EMail = trim($_POST['EMail']); $Nachricht = trim($_POST['Nachricht']); if(empty($Name) || empty($EMail) || empty($Nachricht)){ $MetalOutbreak->setMessage("Du musst alle Felder ausfüllen!",WARNING); header("Location: ".$MetalOutbreak->create_link('Gaestebuch')); die(); } if(strpos($EMail,'@') === false){ $MetalOutbreak->setMessage("Deine E-Mail Adresse schein ungültig zu sein!",WARNING); header("Location: ".$MetalOutbreak->create_link('Gaestebuch')); die(); } $akismet = new Akismet('http://www.metal-outbreak.at/Gaestebuch', 'meineAkismetId'); $akismet->setCommentType('comment'); $akismet->setCommentAuthor($Name); $akismet->setCommentAuthorEmail($EMail); $akismet->setCommentContent($Nachricht); $Name = $MetalOutbreak->cleanUserInput($Name); $EMail = $MetalOutbreak->cleanUserInput($EMail); $Nachricht = $MetalOutbreak->cleanUserInput($Nachricht,true); if($akismet->isCommentSpam()){ mysql_query("INSERT INTO gaestebuch__spam (Name, eMail, Nachricht, Datum, IP, Header) VALUES ('".mysql_real_escape_string($Name)."','".mysql_real_escape_string($EMail)."','".mysql_real_escape_string($Nachricht)."','".time()."','".$MetalOutbreak->getIP()."','".mysql_real_escape_string($_SERVER['HTTP_USER_AGENT'])."')"); $MetalOutbreak->setMessage("Unser Server sagt, dass dein Kommentar SPAM ist.<br/>Wir werden das schnellstmöglich überprüfen. Sollte dies ein Missverständniss sein, bitten wir um Entschuldigung - wir werden dein Kommentar selbstverständlich freischalten!",WARNING); header("Location: ".$MetalOutbreak->create_link('Gaestebuch')); die(); }else{ mysql_query("INSERT INTO gaestebuch__comments (Name, eMail, Nachricht, Datum, IP, Header) VALUES ('".mysql_real_escape_string($Name)."','".mysql_real_escape_string($EMail)."','".mysql_real_escape_string($Nachricht)."','".time()."','".$MetalOutbreak->getIP()."','".mysql_real_escape_string($_SERVER['HTTP_USER_AGENT'])."')"); $MetalOutbreak->setMessage("Dein Kommentar wurde erfolgreich eingetragen.",SUCCESS); header("Location: ".$MetalOutbreak->create_link('Gaestebuch')); die(); }
Die cleanUserInput Funktion sieht so aus:
function cleanUserInput( $String, $Breaks = false, $URLs = false ){ $String = htmlspecialchars(trim($String),ENT_QUOTES,'UTF-8',false); if( $Breaks == true ){ //Zeilenumbrüche umwandeln $String = nl2br($String); } if( $URLs == true ){ //Links erzeugen $String = str_replace("http://www.","www.",$String); $String = str_replace("www.","http://www.",$String); $String = preg_replace("/([\w]+:\/\/[\w-?&;#~=\.\/\@\+\_%()]+[\w-?&;#~=\.\/\@\+\_%()])/i","<a href=\"$1\" rel=\"nofollow\">$1</a>", $String); } return $String; }
Generell werden alle Usereingaben so geprüft (bis auf den Akismet ( http://akismet.com/ ) Teil).
Ich sehe hier aber keine Sicherheitslücke, die einem Angreifer Schreibrechte auf eine Datei gibt. -
freezinger schrieb:
Deinen Quelltext überfliegend fällt mir auch nüx auf, was vulnerable sein könnte.
Generell werden alle Usereingaben so geprüft (bis auf den Akismet ( http://akismet.com/ ) Teil).
Ich sehe hier aber keine Sicherheitslücke, die einem Angreifer Schreibrechte auf eine Datei gibt.
Den Akismet-Kram kenne ich nicht, da ich ihn nicht nutze.
Allerdings gab Google mit der Anfrage "akismet+exploit" einige Antworten, wenngleich sich die meisten auf Wordpress beziehen.
Einiger Lesestoff ist mir jedoch dort aufgefallen:
http://exploitsdownload.com/search/akismet/
Vielleicht hilfts Dir ja weiter.
Beitrag zuletzt geändert: 21.8.2013 15:12:30 von menschle -
menschle schrieb:.
Den Akismet-Kram kenne ich nicht, da ich ihn nicht nutze.
Akismet ist ein Dienst, der Benutzereinträge auf Spam überprüft und das ziemlich gut.
Hatte seit ich Akismet verwende keinen einzigen Spam-Eintrag oder fälschicherweiße als Spam erkannten Eintrag in meinen Projekten.
menschle schrieb:
Einiger Lesestoff ist mir jedoch dort aufgefallen:
http://exploitsdownload.com/search/akismet/
Vielleicht hilfts Dir ja weiter.
Werd mich demnächst mal durchlesen, vielen Dank. -
Soll ich deine ganzen Lücken mal auflisten?
XSS:
1:
/* URL aus Sicherheitsgründen entfernt */
2:
/* URL aus Sicherheitsgründen entfernt */
(Bei Photos, media, system, gästebuch, tickets, js geht das auch)
Außerdem hast du eine Blind SQLi:
1:
/* URL aus Sicherheitsgründen entfernt */
Das sollte reichen oder?
Beitrag zuletzt geändert: 28.11.2013 16:13:55 von cbhp -
tecfreak schrieb:
Soll ich deine ganzen Lücken mal auflisten?
Nein!
Das sollte reichen oder?
Nö, das reicht nicht!
Wenn es Sicherheitslücken gibt, ist es nicht sonderlich nett und in keinster Weise produktiv, diese öffentlich vorzuführen.
Du hältst dich für schlauer, als der Webmaster? Wenn dem so ist, sollte dir klar sein, daß Du sein Risiko mit deinen Beispielen nicht verringerst, sondern, zumindest für die Zeit, die er braucht, deinen Beitrag zu verstehen und darauf zu reagieren, vergrößerst.
Ergo gehören solche Beispiele, wenn Du wirklich gut bist, immer mit Lösungsvorschlägen, in eine PN und nicht ins Forum.
Unabhängig führen alle deine Beispiellinks zu einem 404er. Anscheinend sind die Lücken bereits behoben, ober Du hängst dich mit deinem Hackerwissen seeeehr weit aus dem Fenster.
Beitrag zuletzt geändert: 16.11.2013 2:32:00 von fatfreddy -
fatfreddy schrieb:
tecfreak schrieb:
Soll ich deine ganzen Lücken mal auflisten?
Nein!
Das sollte reichen oder?
Nö, das reicht nicht!
Wenn es Sicherheitslücken gibt, ist es nicht sonderlich nett und in keinster Weise produktiv, diese öffentlich vorzuführen.
Du hältst dich für schlauer, als der Webmaster? Wenn dem so ist, sollte dir klar sein, daß Du sein Risiko mit deinen Beispielen nicht verringerst, sondern, zumindest für die Zeit, die er braucht, deinen Beitrag zu verstehen und darauf zu reagieren, vergrößerst.
Ergo gehören solche Beispiele, wenn Du wirklich gut bist, immer mit Lösungsvorschlägen, in eine PN und nicht ins Forum.
Unabhängig führen alle deine Beispiellinks zu einem 404er. Anscheinend sind die Lücken bereits behoben, ober Du hängst dich mit deinem Hackerwissen seeeehr weit aus dem Fenster.
Ich wollte ihn nicht schlecht machen.
Kannst du mir mal erklären wo du siehst das die behoben sind :D? -
tecfreak schrieb:
Kannst du mir mal erklären wo du siehst das die behoben sind :D?
Habe ich gesagt, daß ich es sehe? Liest Du, was man geschrieben hat?
Ich schrieb und meinte, begründet mit den 404ern, die deine Links produzieren, daß ich die Behebung vermute (!). Sehen und wissen kann ich nichts, da ich keinen Zugriff auf die Logs der betreffenden Website habe.
Es wäre übrigens auch nett, wenn Du auch auf den Rest meines Kommentares, den Du ja großzügigerdings gleich komplett zitiert hast, antworten würdest. -
Die Lücken in Bildern damit du siehst das Sie da sind.
http://www.youscreen.de/xujsovpx85.jpg
http://www.youscreen.de/qsijxzci81.jpg
Eine Frage endet mit einem ? und jeden Satz mit einem ? habe ich beantwortet.
Und was soll das mit "Liest Du, was man geschrieben hat"? Schmecken kannst du die Lücken jedenfalls nicht. -
fatfreddy schrieb:
Hm … möglicherweise ist aber dein Browser auch nur intelligent genug, um entsprechende Anfragen zu erkennen und diese zu blocken, so wie mein Chrome:
Unabhängig führen alle deine Beispiellinks zu einem 404er. Anscheinend sind die Lücken bereits behoben, ober Du hängst dich mit deinem Hackerwissen seeeehr weit aus dem Fenster.The XSS Auditor refused to execute a script in /* URL aus Sicherheitsgründen entfernt */ because its source code was found within the request. The auditor was enabled as the server sent neither an 'X-XSS-Protection' nor 'Content-Security-Policy' header.
Beitrag zuletzt geändert: 28.11.2013 16:14:21 von cbhp -
Das könnte Möglich sein. Dafür habe ich aber No-Script. Ausjedenfall sind Sie da und das sollte behoben werden :D
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage