Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12
  1. #1
    Stanley Jobson Avatar von Lidloses_Auge
    Registriert seit
    05.01.2007
    Beiträge
    750

    Standard It’s a spider – Web Crawler als Grundlage für Informationsbeschaffung


    Viele Skripte entstehen, wenn man sich viel mit Webbasierten Skriptsprachen wie PHP und Perl auseinandersetzt,
    insbesondere solche Skripts, die der Informationsbeschaffung dienen.
    Was die Web-Security betrifft können dies beispielsweise Programme sein, die Seiten auf verwundbare Muster
    überprüfen, oder Informationen über das komplette System sammeln.

    Ein nützliches Tool, um einen solchen Vorgang zu beginnen, nennt sich Web Crawler / Spider, also ein Skript,
    welches sich von Seite zu Seite hangelt, und Informationen ausgibt.
    Dies können komplexe Crawler sein, wie der Bot von namenhaften Suchmaschinen, oder kleinere, die lediglich einen
    Internetauftritt analysieren.

    Kürzlich habe ich einen kleinen Crawler geschrieben, der eine Internetseite nach URL’s durchsucht, und diese auflistet.
    Hierbei lassen sich verschiedene Ebenen angeben, sozusagen die Suchtiefe, in die der Crawler vorstoßen soll.
    Als praktisches Gimmick gibt es zusätzlich einen Ebenenabhängigen Filter, der die URL’s durch eine Whitelist, sowie eine Blacklist schickt, um so die Auswahl einzugrenzen.
    Dieser Filter lässt sich nach Ebenen unterscheiden, sodass es zum Beispiel möglich ist, in Ebene 1 zunächst alle aktuellen Links ohne Einschränkung aufzulisten, und diese dann in Ebene 2 nach URL’s mit dem Inhalt “artikel” zu crawlen.

    Hier zunächst der crawler als PHP Quellcode:


    PHP-Code:
    <?php
        
    // Crawler by Lidloses_Auge for http://novusec.com
        
    ini_set("max_execution_time",0);
        
    $urllist[0][0] = $argv[1];
        
    $ebene $argv[2];
        
    $url[] = $urllist[0][0];
        
    $suchmuster "/\"(https?:\/\/.*)\"/U";
        
    $lists load_filter($ebene,"filter.ini");
     
        
    crawl($ebene,$lists[0],$lists[1]);
     
        function 
    crawl($ebene,$white,$black) {
            global 
    $urllist,$url,$suchmuster;
            for (
    $i 0$i $ebene$i++) {
                foreach(
    $urllist[$i] as $urltodo) {
                    
    $src = @file_get_contents($urltodo);
                    
    preg_match_all($suchmuster$src$trefferPREG_SET_ORDER);
                    foreach(
    $treffer as $trefferToDo) {
                        if (!
    in_array($trefferToDo[1],$url) & filter($trefferToDo[1],$i,$white,$black)) {
                            
    $url[] = $trefferToDo[1];
                            
    $urllist[$i+1][] = $trefferToDo[1];
                            echo 
    "[Ebene=".($i+1)."/$ebene] ".$trefferToDo[1]."\r\n";
                        }
                    }        
                }
            }
        }
     
        function 
    load_filter($ebene,$filterfile) {    
            
    $parseebene 0;
            
    $filter file($filterfile);
            foreach(
    $filter as $filtertemp) {
                if (
    preg_match("/\/\*/",$filtertemp)) {
                    
    $comment 1;
                    
    $filtertemp substr($filtertemp,0,strpos($filtertemp,"/*"));
                }
                if (
    preg_match("/\*\//",$filtertemp)) {
                    
    $comment 0;
                    
    $filtertemp substr($filtertemp,strpos($filtertemp,"*/")+2);
                }
                if (
    $comment 2) {
                    if (
    preg_match("/\#\#/",$filtertemp)) $filtertemp substr($filtertemp,0,strpos($filtertemp,"##"));
                    if (
    preg_match("/\[(.*)\]/",$filtertemp)) preg_match("/\[(.*)\]/",$filtertemp,$type);
                    if (
    preg_match("/\{/",$filtertemp)) $parseebene++;
                    if (
    preg_match("/\}/",$filtertemp)) {
                        
    $parseebene--;
                        if (!
    is_array(${strtolower($type[1])}[${parseebene}-0])) ${strtolower($type[1])}[${parseebene}-0][] = "";
                    }
                    if (
    $parseebene 0) {
                        if (
    preg_match("/name\(\"(.*)\"\)/U",$filtertemp,$str)) ${strtolower($type[1])}[${parseebene}-1][] = $str[1];
                        
    preg_match("/inherit\(\"(.*)\"\)/",$filtertemp,$inherit);
                        if (
    strtolower($inherit[1]) == "all"$inherit[1] = $ebene-$parseebene;
                        for (
    $i $parseebene$i < ($parseebene $inherit[1]); $i++) {
                            ${
    strtolower($type[1])}[$i][] = $str[1];
                        }
                    }
                }
                if (
    $comment == 1$comment 2;
            }
            return array(
    $whitelist,$blacklist);
        }
     
        function 
    filter($check,$tempebene,$white,$black) {
            
    $var true;
            if (!
    is_array($white[$tempebene])) $white[$tempebene][] = "";
            if (!
    is_array($black[$tempebene])) $black[$tempebene][] = "";
            foreach(
    $white[$tempebene] as $wch) {
                foreach(
    $black[$tempebene] as $bch) {
                    if (!empty(
    $bch)) $var $var & (strpos(" ".$check,$bch) == 0);
                }
                if (!empty(
    $wch)) $var $var & (strpos(" ".$check,$wch) != 0);
            }
            return 
    $var;
        }
    ?>
    Die Version ist in dieser Version auf den Konsolenbetrieb ausgelegt.
    Um ihn für den Betrieb im Browser anzupassen, müssten lediglich die Zeilen:


    Code:
    $urllist[0][0] = $argv[1];
    $ebene = $argv[2];
    mit
    Code:
    $urllist[0][0] = $_GET['url'];
    $ebene = $_GET['ebene'];
    ersetzt werden.

    Der Aufruf des Programms im Konsolenbetrieb lautet: php crawler.php
    Also zum Beispiel:
    Code:
     php crawler.php http://novusec.com 2
    Analog zum Konsolenbetrieb müssten dementsprechend die GET Werte gesetzt werden.

    Der Crawler nutzt einen filter, der aus einer Datei eingelesen, und geparsed wird.
    Dieser könnte wie folgt aussehen:


    Code:
    [Whitelist]
    {
        name("http://novusec.com") inherit("all")
        ##name("tutorials")
        {
            name("injection")
            /*
            {
                name("regex")
            }
            */
        }
    }
    [Blacklist]
    {
        name("page")
        {
            name("category")
            name("sql")
        }
    }
    Wie leicht zu erkennen ist, beginnt die Whitelist mit [Whitelist] und die Blacklist mit [Blacklist].
    Durch Klammerung unterscheiden sich die verschiedenen Ebenen, und mit dem Attribut “name”
    lassen sich die Suchbegriffe festlegen.

    In diesem Falle wird in der Whitelist auf Ebene 1 nach “http://novusec.com” gesucht, und in Ebene 2 nach “injection”.
    Ursprünglich wurde noch eine dritte Ebene festgelegt, die sich jedoch mit der gewohnten Notation für mehrzeilige
    Kommentare nicht mehr beim Suchvorgang auswirkt.
    Einzeilige Kommentare habe ich mit zwei Rauten “##” realisiert, wie in diesem Beispiel in der ersten Ebene.

    Suchbegriffe lassen sich auf untere Ebenen hin vererben, dies geschieht mit dem Attribut “inherit”.
    Dadurch spart man sich Schreibarbeit, wenn man einen Suchbegriff in weiteren Ebenen verwenden möchte.
    In diesem Fall wurde der Begriff “http://novusec.com” mit inherit(“all”) auf alle weiteren darunterliegenden Ebenen (sofern diese existieren) vererbt, und muss nicht extra aufgeführt werden. Ebenso ist es möglich eine Zahl anzugeben, sofern man den Begriff nur etwa auf eine weitere Ebene vererben will. Dies geschieht auch in Anführungsstrichen, also zum Beispiel inherit(“1″).

    Analog zu der Whitelist gestaltet sich natürlich ebenso die Blacklist, bei der alle Begriffe aufgeführt werden, die NICHT in de Ergebnissen vorkommen sollen.

    In diesem Falle möchte ich den Aufruf mit novusec.com auf 2 Suchebenen mit dem oben angegebenen Filter darstellen:

    Code:
    php crawler.php http://novusec.com 2
     
    X-Powered-By: PHP/4.4.9
    Content-type: text/html
     
    [Ebene=1/2] http://novusec.com/feed/
    [Ebene=1/2] http://novusec.com/comments/feed/
    [Ebene=1/2] http://novusec.com/xmlrpc.php
    [Ebene=1/2] http://novusec.com/wp-content/themes/inove/ie6.css
    [Ebene=1/2] http://novusec.com/wp-content/themes/inove/js/util.js
    [Ebene=1/2] http://novusec.com/wp-content/themes/inove/js/menu.js
    [Ebene=1/2] http://novusec.com/xmlrpc.php?rsd
    [Ebene=1/2] http://novusec.com/wp-includes/wlwmanifest.xml
    [Ebene=1/2] http://novusec.com/wp-content/plugins/dmsguestbook/dmsguestbook.css
    [Ebene=1/2] http://novusec.com/wp-content/themes/inove/wp-syntax.css
    [Ebene=1/2] http://novusec.com/
    [Ebene=1/2] http://novusec.com/links/
    [Ebene=1/2] http://novusec.com/shoutbox/
    [Ebene=1/2] http://novusec.com/about/
    [Ebene=1/2] http://novusec.com/partner/
    [Ebene=1/2] http://novusec.com/kontakt/
    [Ebene=1/2] http://novusec.com/tools/
    [Ebene=1/2] http://novusec.com/sqli-maxdome-de/
    [Ebene=1/2] http://novusec.com/wp-content/themes/inove/img/hr.jpg
    [Ebene=1/2] http://novusec.com/sqli-maxdome-de/#respond
    [Ebene=1/2] http://novusec.com/author/player/
    [Ebene=1/2] http://novusec.com/category/sql-injections/
    [Ebene=1/2] http://novusec.com/sqli-bild-de-tarifvergleich/
    [Ebene=1/2] http://novusec.com/sqli-bild-de-tarifvergleich/#respond
    [Ebene=1/2] http://novusec.com/register_globals-ein-sicherheitsrisiko-auf-dem-weg-ins-exil/
    [Ebene=1/2] http://novusec.com/register_globals-ein-sicherheitsrisiko-auf-dem-weg-ins-exil/#comments
    [Ebene=1/2] http://novusec.com/author/lidloses_auge/
    [Ebene=1/2] http://novusec.com/category/php/
    [Ebene=1/2] http://novusec.com/xpath-injection-es-geht-auch-ohne-datenbank/
    [Ebene=1/2] http://novusec.com/xpath-injection-es-geht-auch-ohne-datenbank/#respond
    [Ebene=1/2] http://novusec.com/category/sonstiges/
    [Ebene=1/2] http://novusec.com/php-honeypot-script/
    [Ebene=1/2] http://novusec.com/php-honeypot-script/#comments
    [Ebene=1/2] http://novusec.com/hp/
    [Ebene=1/2] http://novusec.com/download/PHP_HoneyPot.rar
    [Ebene=1/2] http://novusec.com/wp-content/winrar.png
    [Ebene=1/2] http://novusec.com/greasemonkey-oneclickhoster-wait-bypass-script/
    [Ebene=1/2] http://novusec.com/greasemonkey-oneclickhoster-wait-bypass-script/#comments
    [Ebene=1/2] http://novusec.com/gm/oneclickhoster_wait.user.js
    [Ebene=1/2] http://novusec.com/wp-content/greasemonkey.jpg
    [Ebene=1/2] http://novusec.com/category/greasemonkey/
    [Ebene=1/2] http://novusec.com/adblock-detection-without-javascript/
    [Ebene=1/2] http://novusec.com/adblock-detection-without-javascript/#comments
    [Ebene=1/2] http://novusec.com/http-response-splitting-crlf-oder-header-injection/
    [Ebene=1/2] http://novusec.com/http-response-splitting-crlf-oder-header-injection/#comments
    [Ebene=1/2] http://novusec.com/oneclickhoster-wait-bypass/
    [Ebene=1/2] http://novusec.com/oneclickhoster-wait-bypass/#comments
    [Ebene=1/2] http://novusec.com/category/javascript/
    [Ebene=1/2] http://novusec.com/novusec-wieder-online/
    [Ebene=1/2] http://novusec.com/novusec-wieder-online/#comments
    [Ebene=1/2] http://novusec.com/category/exploits/
    [Ebene=1/2] http://novusec.com/category/rfi-lfi/
    [Ebene=1/2] http://novusec.com/category/text-tutorials/
    [Ebene=1/2] http://novusec.com/category/video-tutorials/
    [Ebene=1/2] http://novusec.com/category/xss/
    [Ebene=1/2] http://novusec.com/banner/querverweis_88x31o.gif
    [Ebene=1/2] http://novusec.com/wp-login.php
    [Ebene=1/2] http://novusec.com/wp-content/plugins/wp-useronline/wp-useronline.php
    [Ebene=2/2] http://novusec.com/xpath-injection-es-geht-auch-ohne-datenbank/feed/
    [Ebene=2/2] http://novusec.com/exploiten-von-preg_replace-regex-injectionremote-code-execution/
    [Ebene=2/2] http://novusec.com/exploiten-von-preg_replace-regex-injectionremote-code-execution/#comments
    [Ebene=2/2] http://novusec.com/http-response-splitting-crlf-oder-header-injection/feed/
    Wie deutlich zu erkennen ist, sind auf Ebene 1 sehr viel mehr URL’s aufgelistet, als bei Ebene 2.
    Dies liegt an den strikten Filtereinstellungen für Ebene 2.
    Es wurden auf Ebene 2 sämtliche URL’s mit dem Inhalt “injection” aufgelistet, und Begriffe wie “category” und “sql” ausgeschlossen.

    In diesem crawler habe ich mich noch nicht besonders um eine ausführliche Fehlerbehandlung bemüht, daher können je nach Filtereinstellung eventuell ein paar Unstimmigkeiten auftreten.
    Er soll eher als Beispiel dienen, wie ein crawler arbeiten könnte, mit nützliches Features, wie
    dem ebenenabhängigen Filter.

    Lidloses_Auge
    Quelle: http://www.novusec.com

  2. #2
    Bad Times Virus Avatar von Chiqsaw
    Registriert seit
    24.04.2009
    Beiträge
    559

    Standard

    muss ich das verstehen??was genau ist damit jetzzt möglich?


  3. #3
    -=Cookies=- Avatar von moppelito
    Registriert seit
    17.07.2009
    Beiträge
    347

    Standard

    Postest du jetzt alles von Novusec hier?
    Und alles was du bei F-H postest und ein Tut ist bei NovuSec?
    Finde ixh eine gute Idee!

    MFG Moppelito
    Mit dem Wissen steigt die Verantwortung

    [spoiler]
    <?php echo $ip; ?> Das ist wie wenn du am Frühstuckstisch sagen würdest Mama gib mir mal die X rüber!

  4. #4
    Bugbear Wurm Avatar von Palme
    Registriert seit
    17.01.2008
    Beiträge
    239

    Standard

    Soweit ich das verstanden habe ist das ein Tool, mit dem man URL´s nach x-beliebigen Wörtern durchsuchen kann?

    Versteh ich das richtig Auge?

  5. #5
    W32.Lovgate Avatar von HawK
    Registriert seit
    24.04.2009
    Beiträge
    363

    Standard

    Das ist ein Crawler-Script, ein Crawler ist das was der Selbstmordende Hacker von SchülerVz benutzt hat um die ganzen Profile zu kopieren und sie zu dumpen usw.

    Crawler, kopiert in den meisten fällen → fügt ein → hinterlegt (auf r00t, oder hdd) → schwups hat man ein Dump wie zB. von SocialNetworks usw.

  6. #6
    -=Cookies=- Avatar von moppelito
    Registriert seit
    17.07.2009
    Beiträge
    347

    Standard

    @Palme
    Es durchsucht die Dateien auf verschiedenen (Ordner)Ebenen einer Webeite, nach Wörtern die nicht Vorhanden seien dürfen, und nach wörtern die vorhanden seien müssen, um angezeigt zu werden!
    Mit dem Wissen steigt die Verantwortung

    [spoiler]
    <?php echo $ip; ?> Das ist wie wenn du am Frühstuckstisch sagen würdest Mama gib mir mal die X rüber!

  7. #7
    Bad Times Virus Avatar von Rapter
    Registriert seit
    15.07.2008
    Beiträge
    567

    Standard

    Kürzlich habe ich einen kleinen Crawler geschrieben, der eine Internetseite nach URL’s durchsucht, und diese auflistet.
    Hierbei lassen sich verschiedene Ebenen angeben, sozusagen die Suchtiefe, in die der Crawler vorstoßen soll.
    Ist ja nicht so schwer zu verstehen.
    Als es "damals" auf Novusec gepostet wurde, hab ichs gleich ausprobiert.
    Hat sehr gut und schnell funktioniert.


  8. #8
    Bad Times Virus Avatar von Chiqsaw
    Registriert seit
    24.04.2009
    Beiträge
    559

    Standard

    mhm @moppelito

    nein ich fersuche einfach alles neue aus und schau alle neue an

    ok das habe ich verstanden
    sollte man dazu ein proxy verwenden?bzw wie setzt man es ein ?


  9. #9
    Bad Times Virus Avatar von Rapter
    Registriert seit
    15.07.2008
    Beiträge
    567

    Standard

    Du musst PHP installieren.
    Dann den Code in ein Textdokument schreiben und als Crawler.php speichern.
    Es ist für den Konsolenbetrieb ausgelegt, also CMD starten.
    Ausführen -> cmd
    Dann eben in den Ordner wechseln, wo das Script liegt.
    Also z.B. "cd desktop" - "cd" zum Wechseln des Ordners.

    Ausführen tut man's dann z.B. so

    Code:
    php crawler.php http://novusec.com 2
    Was die Zahlen bedeuten, steht ja oben, je nach dem eben anpassen.

    - Ein Proxy ist immer sinnvoll. Solltest du in diesem Fall schon benutzen.

    Ich hoffe das war verständlich, sollte ja nicht so schwer sein.


  10. #10
    -=Cookies=- Avatar von moppelito
    Registriert seit
    17.07.2009
    Beiträge
    347

    Standard

    @Chiqsaw sry^^ mein Post ging eigentlich an Lidloses_Auge^^
    Mit dem Wissen steigt die Verantwortung

    [spoiler]
    <?php echo $ip; ?> Das ist wie wenn du am Frühstuckstisch sagen würdest Mama gib mir mal die X rüber!

Seite 1 von 2 12 LetzteLetzte

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •