Die Besten zuerst
Ein typisches Plugin zeigt Listing 2 mit dem Modul »ClickAllLinks«. Wenn das Hauptskript das Plugin lädt, ruft es dessen »register()«-Methode auf, die den Namen der implementierten Taktik und eine Prioritätszahl zurückliefert. Das Hauptskript sortiert die Plugins numerisch nach den von ihnen mitgeteilten Prioritätszahlen, ruft also Plugins mit niedrigen Werten zuerst auf. So können die Plugins untereinander auskarteln, wer wann an die Reihe kommt. Üblicherweise sollte das mit den besten Erfolgsaussichten den Anfang machen, das verkürzt den Skriptlauf. Die beiden hier vorgestellten Plugins definieren die Prioritäten 10 beziehungsweise 50, sodass das Skript immer zuerst »ClickAllLinks« versucht, bevor das weiter unten gezeigte »CheckBoxFill«-Verfahren zum Zug kommt.
|
Listing 2: |
|---|
01 ###########################################
02 package
03 SplashJumper::Plugin::ClickAllLinks;
04 ###########################################
05 use Log::Log4perl qw(:easy);
06
07 ###########################################
08 sub register {
09 ###########################################
10 return "click-all-links", 10;
11 }
12
13 ###########################################
14 sub process {
15 ###########################################
16 my($self, $mech) = @_;
17
18 for my $link ( $mech->links() ) {
19
20 INFO "Clicking on ", $link->url();
21 my $resp = $mech->get( $link );
22
23 INFO "Got ",
24 length( $resp->content() ),
25 " bytes back";
26
27 $mech->back();
28 }
29 }
30
31 1;
|
Kommt ein Plugin zum Überwinden der Splash-Page zum Einsatz, ruft das Skript dessen »process()«-Methode auf und übergibt ihr den Browser-Simulator »$mech«, ein Objekt der Klasse WWW::Mechanize. Dieses CPAN-Modul eignet sich hervorragend dazu, Webseiten einzuholen, deren Inhalt zu analysieren und zu tiefer liegenden Links vorzudringen. Es kommt häufig bei der Implementierung von Screenscrapern zum Einsatz, da es beinahe alle Browser-Funktionen beherrscht (abgesehen von Javascript-Code oder Flash-Plugins) und Cookies automatisch empfängt und korrekt wieder an den Server zurückschickt.
Im Plugin »ClickAllLinks« findet zunächst die Methode »links()« alle auf der eingeholten Splash-Seite vorhandenen Links in Form von WWW::Mechanize::Link-Objekten und iteriert über die Liste mittels einer For-Schleife. Die Funktion »INFO()« aus dem Log4perl-Fundus zeigt dann dem neugierigen User an, welchen Link das Plugin gerade anklickt. Die Methode »get()« des Browser-Simulators führt den Webrequest anschließend durch.
Mechanize mit Autocheck
Eine explizite Fehlerprüfung findet dabei nicht statt, da WWW::Mechanize sich standardmäßig im »autocheck«-Modus befindet, in dem es sowieso bei jedem auftretenden Fehler eine Exception wirft, die ein im Hauptskript um den Plugin-Aufruf gewickelter Eval-Block abfängt. Anschließend behandelt das Hauptprogramm den Fehler.
In Zeile 23 zeigt das Plugin dann mit einer weiteren Info-Anweisung an, wie viele Bytes über den geklickten Link zurückkamen, und die Methode »back()« in Zeile 27 drückt den Back-Button des virtuellen Browsers, damit dieser wieder zur Splash-Page zurück rudert.
Eine weitere Taktik zeigt das Plugin »CheckBoxFill« in Listing 3. Es sucht im HTML der Splash-Seite das erste Webformular und setzt dieses mit der Anweisung »form_number(1)« als »current_form«. Die Methode »find_input()« extrahiert daraus alle Eingabefelder vom Typ »checkbox« und die For-Schleife ab Zeile 22 klickt sie alle an, indem sie deren »check()«-Methode aufruft.
|
Listing 3: |
|---|
01 ###########################################
02 package SplashJumper::Plugin::CheckBoxFill;
03 ###########################################
04 use Log::Log4perl qw(:easy);
05
06 ###########################################
07 sub register {
08 ###########################################
09 return "checkbox-fill", 50;
10 }
11
12 ###########################################
13 sub process {
14 ###########################################
15 my($self, $mech) = @_;
16
17 $mech->form_number(1);
18
19 my @inputs = $mech->current_form->
20 find_input( undef, "checkbox" );
21
22 for my $input ( @inputs ) {
23 $input->check();
24 }
25
26 INFO "Submitting form 1";
27 $mech->submit_form( form_number => 1 );
28 $mech->back();
29 }
30
31 1;
|
Zeile 27 schickt das Webformular dann mit »submit_form()« an den Server zurück, bevor Zeile 28 wieder auf die Splash-Seite zurückkehrt, damit das eventuell gleich folgende Plugin wieder normale Ausgangsbedingungen vorfindet. Mit dieser Methode lassen sich Splash-Pages wie in den Abbildungen 5 und 6 knacken, die beide dem User abverlangen, eine Checkbox zu aktivieren und dann den Submit-Button anzuklicken.
Abbildung 5: Das kostenlose Wifi am Flughafen von San Diego verlangt eine Checkbox anzuklicken und das Webformular abzuschicken.
Diesen Artikel als PDF kaufen
Als digitales Abo
Weitere Produkte im Medialinx Shop »
Versandartikel
Onlineartikel
Alle Rezensionen aus dem Linux-Magazin
- Buecher/07 Bücher über 3-D-Programmierung sowie die Sprache Dart
- Buecher/06 Bücher über Map-Reduce und über die Sprache Erlang
- Buecher/05 Bücher über Scala und über Suchmaschinen-Optimierung
- Buecher/04 Bücher über Metasploit sowie über Erlang/OTP
- Buecher/03 Bücher über die LPI-Level-2-Zertifizierung
- Buecher/02 Bücher über Node.js und über nebenläufige Programmierung
- Buecher/01 Bücher über Linux-HA sowie über PHP-Webprogrammierung
- Buecher/12 Bücher über HTML-5-Apps sowie Computer Vision mit Python
- Buecher/11 Bücher über Statistik sowie über C++-Metaprogrammierung
- Buecher/10 Bücher zu PHP-Webbots sowie zur Emacs-Programmierung
Insecurity Bulletin
Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...





