2016-04-02 10 views
0

Ich schreibe ein Programm, das nach anfälligen Websites sucht, ich weiß zufällig, dass es einige Websites gibt, die Sicherheitslücken haben, und einen SQL-Syntaxfehler zurückgeben, aber wenn ich das Programm ausführe, überspringt es Diese Websites und gibt nicht aus, dass sie gefunden oder ausgegeben wurden, dass sie in einer Datei gespeichert wurden. Dieses Programm wird für PenTesting verwendet und alle Besitzer von Websites werden auf die Sicherheitsanfälligkeit aufmerksam gemacht.Webcrawler überspringen URLs

Quelle:

def get_urls 
    info("Searching for possible SQL vulnerable sites.") 
    @agent = Mechanize.new 
    page = @agent.get('http://www.google.com/') 
    google_form = page.form('f') 
    google_form.q = "#{SEARCH}" 
    url = @agent.submit(google_form, google_form.buttons.first) 
    url.links.each do |link| 
    if link.href.to_s =~ /url.q/ 
     str = link.href.to_s 
     str_list = str.split(%r{=|&}) 
     urls = str_list[1] 
     next if str_list[1].split('/')[2] == "webcache.googleusercontent.com" 
     urls_to_log = urls.gsub("%3F", '?').gsub("%3D", '=') 
     success("Site found: #{urls_to_log}") 
     File.open("#{PATH}/temp/SQL_sites_to_check.txt", "a+") {|s| s.puts("#{urls_to_log}'")} 
    end 
    end 
    info("Possible vulnerable sites dumped into #{PATH}/temp/SQL_sites_to_check.txt") 
end 

def check_if_vulnerable 
    info("Checking if sites are vulnerable.") 
    IO.read("#{PATH}/temp/SQL_sites_to_check.txt").each_line do |parse| 
    begin 
     Timeout::timeout(5) do 
     parsing = Nokogiri::HTML(RestClient.get("#{parse.chomp}")) 
     end 
    rescue Timeout::Error, RestClient::ResourceNotFound, RestClient::SSLCertificateNotVerified, Errno::ECONNABORTED, Mechanize::ResponseCodeError, RestClient::InternalServerError => e 
     if e 
     warn("URL: #{parse.chomp} failed with error: [#{e}] dumped to non_exploitable.txt") 
     File.open("#{PATH}/lib/non_exploitable.txt", "a+"){|s| s.puts(parse)} 
     else 
     success("SQL syntax error discovered in URL: #{parse.chomp} dumped to SQL_VULN.txt") 
     File.open("#{PATH}/lib/SQL_VULN.txt", "a+"){|vuln| vuln.puts(parse)} 
     end 
    end 
    end 
end 

Anwendungsbeispiel:

[22:49:29 INFO]Checking if sites are vulnerable. 
[22:49:53 WARNING]URL: http://www.police.bd/content.php?id=275' failed with error: [execution expired] dumped to non_exploitable.txt 

Datei mit den URLs:

http://www.bible.com/subcat.php?id=2' 
http://www.cidko.com/pro_con.php?id=3' 
http://www.slavsandtat.com/about.php?id=25' 
http://www.police.bd/content.php?id=275' 
http://www.icdcprage.org/index.php?id=10' 
http://huawei.com/en/plugin.php?id=hwdownload' 
https://huawei.com/en/plugin.php?id=unlock' 
https://facebook.com/profile.php?id' 
http://www.footballclub.com.au/index.php?id=43' 
http://www.mesrs.qc.ca/index.php?id=1525' 

Wie Sie springt das Programm über drei URLs sehen und geht direkt auf der vierte, warum?

Mache ich etwas falsch, wo das passieren wird?

+0

Willkommen bei Stack Overflow. Bitte lesen Sie "[mcve]". Ihr Code wird nicht so ausgeführt, wie er ist. Es ist wichtig für die Konsistenz, dass es funktioniert, ohne dass wir es ändern müssen, um es auszuführen. Sie haben Konstanten, die nicht definiert sind, und zwei Methoden, die nie aufgerufen werden. –

Antwort

1

Ich bin mir nicht sicher, ob das rescue Block ist, wo es sein sollte. Sie tun nichts mit dem Inhalt, den Sie in parsing = Nokogiri::HTML(RestClient.get("#{parse.chomp}")) holen, und für die ersten drei funktioniert es vielleicht nur deshalb keine Ausnahme und keine Fehlerausgabe. Fügen Sie einige Ausgaben nach dieser Zeile hinzu, um zu sehen, dass sie abgerufen werden.

+0

Also sollte ich ein paar 'puts' hinzufügen, um den HTML-Code anzuzeigen, der gerade geholt wird, ist das, was du sagst? – 13aal

+0

Das und darüber nachdenken, was mit dem geparsten Inhalt zu tun ist, der überhaupt keine Ausnahme auslöst. –

+0

Hat das für dich bei 13aal funktioniert? –