lib/rex/parser/wapiti_nokogiri.rb in librex-0.0.68 vs lib/rex/parser/wapiti_nokogiri.rb in librex-0.0.70
- old
+ new
@@ -1,105 +1,105 @@
# -*- coding: binary -*-
require "rex/parser/nokogiri_doc_mixin"
module Rex
- module Parser
+ module Parser
- load_nokogiri && class WapitiDocument < Nokogiri::XML::SAX::Document
+ load_nokogiri && class WapitiDocument < Nokogiri::XML::SAX::Document
- include NokogiriDocMixin
+ include NokogiriDocMixin
- def start_element(name=nil,attrs=[])
- attrs = normalize_attrs(attrs)
- block = @block
- @state[:current_tag][name] = true
+ def start_element(name=nil,attrs=[])
+ attrs = normalize_attrs(attrs)
+ block = @block
+ @state[:current_tag][name] = true
- case name
- when "timestamp"
- @state[:has_text] = true
- when "url"
- @state[:has_text] = true
- when "addr"
- @state[:has_text] = true
- when "port"
- @state[:has_text] = true
- when "parameter"
- @state[:has_text] = true
- when "info"
- @state[:has_text] = true
- when "description"
- @state[:has_text] = true
- when "solution"
- @state[:has_text] = true
- when "title"
- @state[:has_text] = true
- end
- end
+ case name
+ when "timestamp"
+ @state[:has_text] = true
+ when "url"
+ @state[:has_text] = true
+ when "addr"
+ @state[:has_text] = true
+ when "port"
+ @state[:has_text] = true
+ when "parameter"
+ @state[:has_text] = true
+ when "info"
+ @state[:has_text] = true
+ when "description"
+ @state[:has_text] = true
+ when "solution"
+ @state[:has_text] = true
+ when "title"
+ @state[:has_text] = true
+ end
+ end
- def end_element(name=nil)
- block = @block
- case name
- when "timestamp"
- @state[:timestamp] = @text.strip
- @text = nil
- when "url"
- @state[:url] = @text.strip
- @text = nil
- when "addr"
- @state[:host] = @text.strip
- @text = nil
- when "port"
- @state[:port] = @text.strip
- @text = nil
- when "parameter"
- @state[:parameter] = @text.strip
- @text = nil
- when "info"
- @state[:info] = @text.strip
- @text = nil
- when "bug"
- report_vuln
- end
- end
+ def end_element(name=nil)
+ block = @block
+ case name
+ when "timestamp"
+ @state[:timestamp] = @text.strip
+ @text = nil
+ when "url"
+ @state[:url] = @text.strip
+ @text = nil
+ when "addr"
+ @state[:host] = @text.strip
+ @text = nil
+ when "port"
+ @state[:port] = @text.strip
+ @text = nil
+ when "parameter"
+ @state[:parameter] = @text.strip
+ @text = nil
+ when "info"
+ @state[:info] = @text.strip
+ @text = nil
+ when "bug"
+ report_vuln
+ end
+ end
- def report_vuln(&block)
- proto = @state[:url].split(":")[0]
- path = '/' + (@state[:url].split("/")[3..(@state[:url].split("/").length - 1)].join('/'))
-
- web_vuln_info = {}
- web_vuln_info[:web_site] = proto + "://" + @state[:host] + ":" + @state[:port]
- web_vuln_info[:path] = path
- web_vuln_info[:query] = @state[:url].split("?")[1]
+ def report_vuln(&block)
+ proto = @state[:url].split(":")[0]
+ path = '/' + (@state[:url].split("/")[3..(@state[:url].split("/").length - 1)].join('/'))
- #if the URL contains the parameter found to be vulnerable, it is probably a GET
- #if it does not contains the parameter, it is probably a POST
- if @state[:url].index(@state[:parameter])
- web_vuln_info[:method] = "GET"
- else
- web_vuln_info[:method] = "POST"
- end
+ web_vuln_info = {}
+ web_vuln_info[:web_site] = proto + "://" + @state[:host] + ":" + @state[:port]
+ web_vuln_info[:path] = path
+ web_vuln_info[:query] = @state[:url].split("?")[1]
- @state[:parameter].split("&").each do |param|
- if param.index("%27") #apostrophe
- web_vuln_info[:pname] = param.split('=')[0] #sql injection
- break
- elsif param.index("alert")
- web_vuln_info[:pname] = param.split('=')[0] #xss
- end
- end
+ #if the URL contains the parameter found to be vulnerable, it is probably a GET
+ #if it does not contains the parameter, it is probably a POST
+ if @state[:url].index(@state[:parameter])
+ web_vuln_info[:method] = "GET"
+ else
+ web_vuln_info[:method] = "POST"
+ end
- web_vuln_info[:host] = @state[:host]
- web_vuln_info[:port] = @state[:port]
- web_vuln_info[:ssl] = (proto =~ /https/)
- web_vuln_info[:proof] = ""
- web_vuln_info[:risk] = ""
- web_vuln_info[:params] = @state[:parameter]
- web_vuln_info[:category] = "imported"
- web_vuln_info[:confidence] = 90
- web_vuln_info[:name] = @state[:info]
+ @state[:parameter].split("&").each do |param|
+ if param.index("%27") #apostrophe
+ web_vuln_info[:pname] = param.split('=')[0] #sql injection
+ break
+ elsif param.index("alert")
+ web_vuln_info[:pname] = param.split('=')[0] #xss
+ end
+ end
- db.emit(:web_vuln, web_vuln_info[:name], &block) if block
- vuln = db_report(:web_vuln, web_vuln_info)
- end
- end
+ web_vuln_info[:host] = @state[:host]
+ web_vuln_info[:port] = @state[:port]
+ web_vuln_info[:ssl] = (proto =~ /https/)
+ web_vuln_info[:proof] = ""
+ web_vuln_info[:risk] = ""
+ web_vuln_info[:params] = @state[:parameter]
+ web_vuln_info[:category] = "imported"
+ web_vuln_info[:confidence] = 90
+ web_vuln_info[:name] = @state[:info]
+
+ db.emit(:web_vuln, web_vuln_info[:name], &block) if block
+ vuln = db_report(:web_vuln, web_vuln_info)
+ end
+ end
end
end