Security Forum Usenet Archiv Mailing List Archive  
IDS Firewall Honeypot Honeynet Web Security Linux Security Microsoft Security Virus - Wurm Backdoors - Trojaner Links
I-EYE Security Exploits Security Dokumentationen Security Online Scanner Security Scanner Security Tools Trojaner Portliste Impressum

HTTP Banner Sammler







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();