Logo

רד-בורד: ארכיון

ראשי > אבטחת מידע > ghacker.pl

29/04/2008 19:16:57 MasterBlaster
למי שלא מכיר, קצת רקע:

"גוגל האקינג" הוא השם שניתן לתהליך של מציאת, חיפוש ויישום שאילתות חיפוש מורכבות יחסיות במנוע החיפוש גוגל. מה שמייחד את השאילתות הללו הוא שלרוב הם יפנו את הגולש לאתרים שבהם מצויים חורי אבטחה כלשהם. בחלק מהמקרים, באתרים שרמת האבטחה בהם לקויה במיוחד, גוגל מסוגל להגיע אפילו לקבצי הסיסמאות של האתר.

את המונח "גוגל האקינג" הטביע בחור חביב בשם ג’וני לונג, שגם מתחזק כרגע את ה-"גוגל האקינג דאטאבייס", או GHDB בקיצור. כתובת האתר שלו:

http://www.johnny.ihackstuff.com/ghdb.php

הבעיה:

נבירה קצרה בקישור שנתתי למעלה תעלה קרוב ל-14 קטגוריות שונות שביחד מכילות כמה מאות שאילתות שונות. בהנחה שתוקף מסויים ירצה לסרוק אתר ספציפי אחד בעזרת כל השאילתות הללו, חיפוש ידני הוא בטח לא התשובה. בדיוק מהסיבה הזאת כתבתי את ה-Ghacker. מדובר בתוכנית בשפת פרל שבעיקרון כל מה שהיא עושה זה לאחזר את רשימת השאילתות מהמסד ולהריץ אותן, אחת-אחרי-השניה, כנגד אתר מסוים (שם האתר מועבר לתוכנית כפרמטר שורת פקודה).

בלי להתברבר יותר מידי, הנה הקוד:

קוד:#!/usr/bin/env perl

#####

##### [ Required Modules ] #####
use strict;
use warnings;
use diagnostics;
use constant GHDB => ’http://johnny.ihackstuff.com/’;
use Getopt::Long;
use LWP::Simple;
use LWP::UserAgent;
use HTML::TreeBuilder;
use Net::Ping;

##### [ Main Script ] #####

print "Starting Ghacker 1.0 at ", scalar(localtime), "\n";
my %options = ( );
GetOptions("h|help" => \$options{help},
"site=s" => \$options{site},
"logfile=s" => \$options{logfile},
"browser=s" => \$options{browser},
"timeout=i" => \$options{timeout},
);
&show_help if ($options{help} || ! $options{site});
$options{logfile} ||= "ghacker-$options{site}.txt";
$options{browser} ||= "Ghacker/1.0 ($^O)";
$options{timeout} ||= 20;
$| = 1;
open(LOG, ">$options{logfile}");
print LOG "Scan result for target [$options{site}]:\n\n";
my $content1 = get(GHDB . ’/ghdb.php’);
my $parser1 = HTML::TreeBuilder -> new_from_content($content1);
my @categories = $parser1 -> look_down(’_tag’, ’a’,
’href’, qr/function=summary/,
);
foreach ($categories[9]) { # foreach (@categories) { ... }
my $content2 = get(GHDB . $_ -> attr(’href’));
my $parser2 = HTML::TreeBuilder -> new_from_content($content2);
my @links = $parser2 -> look_down(’_tag’, ’a’,
’href’, qr/function=detail/,
);
my @queries = ( );
foreach (@links) {
my $content3 = get(GHDB . $_ -> attr(’href’));
my $parser3 = HTML::TreeBuilder -> new_from_content($content3);
my $query = $parser3 -> look_down(’_tag’, ’a’);
push(@queries, $query -> as_text);
}
&run_queries(@queries);
}
close(LOG);

##### [ Defined Subroutines ] #####
sub show_help {
print <<EOM;
Ghacker 1.0 usage: perl $0 [proxy-file *] --site=[site-url] <Options>
Options are:
-h | --help: show this run manual page
--browser=[user-agent]: identify as browser [user-agent]
--timeout=[timeout-seconds]: set the timeout [timeout-seconds]
* if [proxy-file] not given, read proxy list from STDIN
EOM
exit(0);
}

sub run_queries {
my $browser = LWP::UserAgent -> new(agent => $options{browser},
timeout => $options{timeout},
max_redirect => 0,
);
$browser -> default_headers -> push_header(’Referer’ => ’http://www.google.com/’);
while (my $q = shift) {
$browser -> proxy([’http’, ’https’], &set_proxy);
my $response = $browser -> get(’http://www.google.com/search?btnI=&q=’ . $q . " site:$options{site}");
if (index($response -> status_line, ’302’) != -1) {
print LOG $q, "\n";
}
}
}

sub set_proxy {
my $ping = Net::Ping -> new(’icmp’);
my($ip, $port) = split(’:’, <>);
until ($ping -> ping($ip)) {
printf "Host %-15s is dead. Moving on...\n", $ip;
($ip, $port) = split(’:’, <>);
}
$ping -> close;
chomp($port);
"http://$ip:$port";
}

כמה הבהרות שיש לי בקשר לקוד:

1. מדובר בגרסה ניסיונית. למעשה, רוב הסיכויים שהיא לא תעבוד אם תשימו אותה במבחן אמיתי.
2. יש לה כמה בעיות חמורות מאוד שדורשות פיתרון מיידי. נכון לעכשיו, לתוכנית אין שום דרך לשחזר את רשימת שרתי הפרוקסי לאחר שהיא עברה עליה בפעם הראשונה. חוץ מזה, גוגל מצליח למרות שרתי הפרוקסי לאתר את המקור של הבקשות ולאחר לאחר מספר מסוים של שאילתות התוכנית נחסמת (גוגל מונע ממנה גישה לדף החיפוש).

אז מה אני כן צריך מכם?
במידה ואתם מסוגלים להציע פיתרון לאחת מהבעיות שהצגתי בסעיף הקודם - אני אשמח (ואני אשמח אפילו עוד יותר אם תצליחו לפתור לי את שתיהן).

עוד דבר שאני זקוק לו הוא הערות על סגנון הקידוד, הצעות לפיצ’רים וכדומה. חוץ מזה, אני מתכנן להתחיל בקרוב את הכתיבה של מעטפת גרפית לתוכנית הזאת, ואם יש עוד מתכנת פרל כאן שיודע קצת לעבוד עם המודול Tk אני אשמח לקצת עזרה.

תודה והמשך יום טוב.[ההודעה נערכה על-ידי MasterBlaster ב-29/04/2008 19:21:32]
01/05/2008 19:13:33 cp77fk4r
רעיון מאוד נחמד ומאוד יעיל, אבל הוא בוצע כבר ע"י Oxblood Ruffin, מcDc, מייסד ההאקטיביזמו וMiB, שגם חבר באירגון.

המימוש שלהם קצת שונה משלך אבל הוא מניב את אותן התוצאות פחות או יותר, הם קראו לו "Goolag Scanner", כנס לפה ותבין על מה אני מדבר:

http://www.goolag.org/press.html
01/05/2008 20:58:57 MasterBlaster
איזה חרא... כבר האמנתי שאני הראשון שחשב על הרעיון הזה. תודה בכל אופן.[ההודעה נערכה על-ידי MasterBlaster ב-01/05/2008 20:59:34]
01/05/2008 22:11:50 cp77fk4r
היי היי... עצור רגע, אל תתן לך להרוס לך, נראה לך שכשאני כתבתי איזה פרוייקט, ניקח לדוגמא את TryThis0ne- אז בהתחלה, כשראינו את כל שאר האתרים שהיו פי שבע יותר גדולים מאיתנו זה גרם לנו להתקפל? להפך! זה רק גרם לנו להראות לכולם שגם אנחנו יכולים ליצור משהו ברמה כמוהם ואפילו יותר! לך תסתכל מהתוכנה של ראפין, תלמד תיקח רעיונות, תשכלל ותיצור אחת יותר טובה, אל תתן לזה להרוס לך. בהצלחה.
07/05/2008 09:31:26 TheSlider
אחי, האתר של הבחור שכתבת למעלה לא עובד.
07/05/2008 11:40:20 MasterBlaster
ציטוט:אחי, האתר של הבחור שכתבת למעלה לא עובד.
טעות שלי. הכתובת היא: http://johnny.ihackstuff.com/ghdb.php (בלי ה-www).[ההודעה נערכה על-ידי MasterBlaster ב-07/05/2008 11:40:52]
עמודים: 1