Als erstes möchte ich erklären was ein Banner ist. Das ist ganz einfach, immer wenn eine Software eine Verbindung zur einer Serversoftware herstellt (z.B. Browser zur einem Webserver) sendet die Serversoftware eine kurze. Ein Beispiel. HTTP/1.1 200 OK Server: Microsoft-IIS/5.0 Date: Thu, 17 Jul 2003 10:59:57 GMT Connection: Keep-Alive Content-Length: 13577 Content-Type: text/html Set-Cookie: ASPSESSIONIDQCBDBRTC=LGEIIJMALANBPDJCHHFLAMKM; path=/ Cache-control: private Unter „Server:“ sieht man was das für ein Webserver ist und auf welchem Betriebssystem es läuft (Windows 2000 und IIS Version 5.0). Noch ein Beispiel. HTTP/1.1 200 OK Date: Thu, 17 Jul 2003 10:59:09 GMT Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) mod_gzip/1.3.19.1a mod_jk/1.2.0 mod_perl/1.26 PHP/4.2.2 FrontPage/5.0.2 mod_ssl/2.8.12 OpenSSL/0.9.6b Connection: close Content-Type: text/html Hier sehen wir einen Apachen Webserver der auf RedHat Linux läuft. Außerdem können wir die Module sehen, die an den Apache angebunden sind (z.B. OpenSSL/0.9.6b den Modul sollte der Admin updaten im Internet gibt es ein böses Exploit da kann man ruckzuck einbrechen). Da man an den Banner nicht nur die eingesetzte Software herausfinden kann sondern auch ob es Sicherheitslöcher auf dem Server gibt, kann man mit der erstellten Datenbank eine schöne Statistik anfertigen an der man sieht wie faul Admins sind (ich liebe Statistiken). Hier ist ein Beispiel wie so ein Script (Perl) aussehen kann. Da wir ja eine Datenbank mit den Servernamen haben in der ein paar hunderttausend Einträge (Domains) gespeichert sind, können wir ein Script schreiben welches jedes mal ein Servernamen oder IP herausholt, ein Banner generiert und dann diesen auch in die Datenbank speichert und zwar neben den passenden Servernamen. #!/usr/bin/perl -w use strict; use DBI; use IO::Socket; my ($sql_string,$servername,@text,$client,$ins,$count); my $bannerdat = "DBI:mysql:database=banner;host=localhost"; my $banner = DBI->connect($bannerdat ,"","",{'RaiseError' => 1}); do { $sql_string = "SELECT servername FROM banner WHERE http_banner = '' LIMIT 0,1"; $servername = $banner->selectrow_array($sql_string); $banner->do("UPDATE banner SET http_banner = 'wird gesucht' WHERE servername = '$servername'"); $client = new IO::Socket::INET (PeerAddr => $servername,PeerPort => 80,Proto => 'tcp'); if($client) { print $client "HEAD / HTTP/1.0\r\n\r\n"; @text = <$client>; $ins = ""; foreach (@text) { $ins .= $_; } $ins = $banner->quote($ins); $banner->do("UPDATE banner SET http_banner = $ins WHERE servername = '$servername'"); $client->close(); } $count = $banner->selectrow_array("SELECT COUNT(id) FROM banner WHERE http_banner = ''"); }while($count != 0); $banner->disconnect();
|