<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: vuln code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Thu, 24 Jul 2008 17:03:21 GMT</pubDate>
    <description>DZone Snippets: vuln code</description>
    <item>
      <title>bScan - Simple Web Aplications Scanner</title>
      <link>http://snippets.dzone.com/posts/show/5094</link>
      <description>// Web application scanner (ex: phpBB, myCMS, myBlog, mySite etc..) - Only in PHP !&lt;br /&gt;// Find XSS, sql injection, remote file inclusion&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#####################################################################################&lt;br /&gt;#	Black_H  / Nooz -- 30:01:07 &lt;br /&gt;#	Bl4ck.H&lt;&gt;gmail&lt;&gt;com&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;class BScan&lt;br /&gt;&lt;br /&gt;#####################################################################################&lt;br /&gt;#	Regex&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;@@space    = '([[:space:]]*)'&lt;br /&gt;&lt;br /&gt;@@userdat  = '('&lt;br /&gt;@@userdat += '(\$_SERVER\[([\'\"]*)HTTP_)|'&lt;br /&gt;@@userdat += '(\$_GET)|'&lt;br /&gt;@@userdat += '(\$_POST)|'&lt;br /&gt;@@userdat += '(\$_COOKIE)|'&lt;br /&gt;@@userdat += '(\$_REQUEST)|'&lt;br /&gt;@@userdat += '(\$_FILES)|'&lt;br /&gt;@@userdat += '(\$_ENV)|'&lt;br /&gt;@@userdat += '(\$_HTTP_COOKIE_VARS)|'&lt;br /&gt;@@userdat += '(\$_HTTP_ENV_VARS)|'&lt;br /&gt;@@userdat += '(\$_HTTP_GET_VARS)|'&lt;br /&gt;@@userdat += '(\$_HTTP_POST_FILES)|'&lt;br /&gt;@@userdat += '(\$_HTTP_POST_VARS)|'&lt;br /&gt;@@userdat += '(\$_HTTP_SERVER_VARS\[([\'\"]*)HTTP_)'&lt;br /&gt;@@userdat += ')'&lt;br /&gt;&lt;br /&gt;@@regex = Hash.new&lt;br /&gt;@@regex = &lt;br /&gt;	{'TYPE' =&gt; 'vars overwrite','LEVEL' =&gt; '2','REGEX' =&gt; /extract#{@@space}\((.*)#{@@userdat}(.*)\)/i},&lt;br /&gt;	{'TYPE' =&gt; 'vars overwrite','LEVEL' =&gt; '2','REGEX' =&gt; /import_request_variables#{@@space}\((.*)\)/i},&lt;br /&gt;	{'TYPE' =&gt; 'fopen vuln','LEVEL' =&gt; '3','REGEX' =&gt; /fopen#{@@space}\((.*)#{@@userdat}(.*)\)/i},&lt;br /&gt;	{'TYPE' =&gt; 'copy vuln','LEVEL' =&gt; '3','REGEX' =&gt; /copy#{@@space}\((.*)#{@@userdat}(.*)\)/i},&lt;br /&gt;	{'TYPE' =&gt; 'fwrite vuln','LEVEL' =&gt; '3','REGEX' =&gt; /fwrite#{@@space}\((.*)#{@@userdat}(.*)\)/i},&lt;br /&gt;	{'TYPE' =&gt; 'sql injection','LEVEL' =&gt; '2','REGEX' =&gt; /(mysql_query|mssql_query|mysqli_query)#{@@space}\((.*)#{@@userdat}(.*)\)/i},&lt;br /&gt;	{'TYPE' =&gt; 'crlf injection','LEVEL' =&gt; '1','REGEX' =&gt; /mail#{@@space}\((.*)#{@@userdat}(.*)\)/i},&lt;br /&gt;	{'TYPE' =&gt; 'cross site scripting','LEVEL' =&gt; '1','REGEX' =&gt; /\&lt;\?\=#{@@space}(.*)#{@@userdat}/i},&lt;br /&gt;	{'TYPE' =&gt; 'cross site scripting','LEVEL' =&gt; '1','REGEX' =&gt; /(print|echo|print_r|var_dump)#{@@space}(|\(|\")(.*)#{@@userdat}/i},&lt;br /&gt;	{'TYPE' =&gt; 'php code execution','LEVEL' =&gt; '3','REGEX' =&gt; /eval#{@@space}\((.*)#{@@userdat}(.*)\)/i},&lt;br /&gt;	{'TYPE' =&gt; 'php code execution','LEVEL' =&gt; '3','REGEX' =&gt; /file_put_contents#{@@space}\((.*)#{@@userdat}(.*)\)/i},&lt;br /&gt;	{'TYPE' =&gt; 'variable attribution', 'LEVEL' =&gt; '2','REGEX' =&gt; /(.*)\$#{@@userdat}(.*)/i},&lt;br /&gt;	{'TYPE' =&gt; 'chmod affectation','LEVEL' =&gt; '1','REGEX' =&gt; /chmod#{@@space}\((.*)#{@@userdat}(.*)\)/i},&lt;br /&gt;	{'TYPE' =&gt; 'file disclosure','LEVEL' =&gt; '2','REGEX' =&gt; /(readfile|file_get_contents|file)#{@@space}\((.*)#{@@userdat}(.*)\)/i},&lt;br /&gt;	{'TYPE' =&gt; 'file disclosure','LEVEL' =&gt; '2','REGEX' =&gt; /(show_source|highlight_file)#{@@space}\((.*)#{@@userdat}(.*)\)/i},&lt;br /&gt;	{'TYPE' =&gt; 'bzopen vuln','LEVEL' =&gt; '2','REGEX' =&gt; /bzopen#{@@space}\((.*)#{@@userdat}(.*)\)/i},&lt;br /&gt;	{'TYPE' =&gt; 'file deletion','LEVEL' =&gt; '2','REGEX' =&gt; /(rmdir|unlink|delete)#{@@space}\((.*)#{@@userdat}(.*)\)/i},&lt;br /&gt;	{'TYPE' =&gt; 'command execution','LEVEL' =&gt; '3','REGEX' =&gt; /(exec|system|passthru|shell_exec|proc_open|pcntl_exec)#{@@space}\((.*)#{@@userdat}(.*)\)/i},&lt;br /&gt;	{'TYPE' =&gt; 'buffer overflow','LEVEL' =&gt; '3','REGEX' =&gt; /(confirm_phpdoc_compiled|mssql_pconnect|mssql_connect|crack_opendict|snmpget|ibase_connect)#{@@space}\((.*)#{@@userdat}(.*)\)/i},&lt;br /&gt;	{'TYPE' =&gt; 'ip falsification','LEVEL' =&gt; '1','REGEX' =&gt; /(.*)(HTTP_CLIENT_IP|HTTP_X_FORWARDED_FOR|HTTP_PC_REMOTE_ADDR)(.*)/i},&lt;br /&gt;	{'TYPE' =&gt; 'putenv vuln','LEVEL' =&gt; '2','REGEX' =&gt; /putenv#{@@space}\((.*)#{@@userdat}(.*)\)/i},&lt;br /&gt;	{'TYPE' =&gt; 'full path disclosure','LEVEL' =&gt; '1','REGEX' =&gt; /(htmlentities|htmlspecialchars)#{@@space}\((.*)#{@@userdat}(.*)\)/i},&lt;br /&gt;	{'TYPE' =&gt; 'magic_quotes_gpc bypass','LEVEL' =&gt; '1','REGEX' =&gt; /(stripslashes|urldecode)#{@@space}\((.*)#{@@userdat}(.*)\)/i},&lt;br /&gt;	{'TYPE' =&gt; 'file inclusion','LEVEL' =&gt; '3','REGEX' =&gt; /(include|include_once|require|require_once)#{@@space}(|\(|\")(.*)#{@@userdat}/i}&lt;br /&gt;&lt;br /&gt;#####################################################################################&lt;br /&gt;#	Main&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;  def initialize()&lt;br /&gt;&lt;br /&gt;	################&lt;br /&gt;	#	Usage&lt;br /&gt;&lt;br /&gt;if (ARGV.length &lt; 4)&lt;br /&gt;puts  '&lt;br /&gt; ---------------------------------------------------------------------&lt;br /&gt;|             Credits: Black_H &lt;bl4ck.h@gmail.com&gt;                    |&lt;br /&gt;|                 URL: Lemon-Inside.sup.fr                            |&lt;br /&gt;|                Note: Premier code Ruby                              |&lt;br /&gt; ---------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt; ---------------------------------------------------------------------&lt;br /&gt;|   Usage:  scan.rb -d &lt;Dossier&gt; -i &lt;Save.html&gt;                       |&lt;br /&gt;|   Ex:  scan.rb -d ./ -i output.html                                 |&lt;br /&gt; ---------------------------------------------------------------------		&lt;br /&gt; '&lt;br /&gt; end&lt;br /&gt; &lt;br /&gt;	################&lt;br /&gt;	#	Options &amp; Vars&lt;br /&gt;	&lt;br /&gt;	@@scan_alldir =  self.options('d')&lt;br /&gt;	@@out_file =  self.options('i')&lt;br /&gt;	&lt;br /&gt;	@@ban = [".", "..", "scan.rb", @@out_file.to_s]&lt;br /&gt;&lt;br /&gt;	@@scan_buffer = Array.new&lt;br /&gt;	&lt;br /&gt;	################&lt;br /&gt;	#	Options Error ?&lt;br /&gt;	&lt;br /&gt;	if (@@scan_alldir != false and @@scan_alldir.empty? == false)&lt;br /&gt;	self.dscan(@@scan_alldir)&lt;br /&gt;	self.output(@@scan_buffer)&lt;br /&gt;	@@scan_buffer = ''&lt;br /&gt;	end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;	&lt;br /&gt;&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;#####################################################################################&lt;br /&gt;#	Dir Scan &lt;br /&gt;#&lt;br /&gt;  &lt;br /&gt;  def dscan(dir)&lt;br /&gt;      &lt;br /&gt;	d = Dir.open(dir.to_s)&lt;br /&gt;	d = d.sort - @@ban&lt;br /&gt;	&lt;br /&gt;      d.each { |fichier|&lt;br /&gt;&lt;br /&gt;      case File.ftype(dir+fichier)&lt;br /&gt;        when "directory"&lt;br /&gt;          self.dscan(dir + fichier + "/")&lt;br /&gt;        when "file"&lt;br /&gt;		  puts  'Scan =&gt; ' + dir + fichier &lt;br /&gt;          self.fscan(dir + fichier)&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;	  }&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;#####################################################################################&lt;br /&gt;#	File Scan &lt;br /&gt;#&lt;br /&gt;  &lt;br /&gt;  def fscan(file)&lt;br /&gt;&lt;br /&gt;	fichier = File.readlines(file)&lt;br /&gt;	i = 1&lt;br /&gt;&lt;br /&gt;	fichier.each { |line|&lt;br /&gt;						&lt;br /&gt;		@@regex.each  { |info|&lt;br /&gt;			&lt;br /&gt;			test = (line  =~ info['REGEX']) &lt;br /&gt;		&lt;br /&gt;				if (test) &lt;br /&gt;			&lt;br /&gt;				@@scan_buffer += ['FILE' =&gt; file, 'LINE' =&gt; i.to_s, 'MATCH' =&gt; line, 'LEVEL' =&gt; info['LEVEL'], 'TYPE' =&gt; info['TYPE']]&lt;br /&gt;				#	5 , 1 , 3 , 4 , 2&lt;br /&gt;				next @@scan_buffer&lt;br /&gt;				end&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;	i += 1&lt;br /&gt;  	} &lt;br /&gt;	&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;#####################################################################################&lt;br /&gt;#	Output buffer&lt;br /&gt;#&lt;br /&gt;  &lt;br /&gt;  def output(buffer)&lt;br /&gt;  &lt;br /&gt;	@html_hmodel = '&lt;html&gt;'&lt;br /&gt;	@html_hmodel += '&lt;style type="text/css"&gt;'&lt;br /&gt;	@html_hmodel += '&lt;!--'&lt;br /&gt;	@html_hmodel += '.level0 {background-color: #CCCCCC;}'&lt;br /&gt;	@html_hmodel += '.level1 {background-color: #33FF66;}'&lt;br /&gt;	@html_hmodel += '.level2 {background-color: #FFFF33;}'&lt;br /&gt;	@html_hmodel += '.level3 {background-color: #FF0000;}'&lt;br /&gt;	@html_hmodel += '--&gt;&lt;/style&gt;&lt;body&gt;&lt;h1&gt;BScan v1.0&lt;/h1&gt;&lt;pre&gt;'&lt;br /&gt;&lt;br /&gt;	code = @html_hmodel&lt;br /&gt;	&lt;br /&gt;	buffer.each { |infos|&lt;br /&gt;	&lt;br /&gt;	keys = infos.keys&lt;br /&gt;	code += "&lt;span class='level" + infos["LEVEL"] + "'&gt;" + keys[1].to_s + ' : ' + infos["TYPE"] + '&lt;/span&gt;&lt;br /&gt;'&lt;br /&gt;	code += "&lt;span class='" + infos["LEVEL"] + "'&gt;" + keys[3].to_s + ' : ' + infos["LEVEL"] + '&lt;/span&gt;&lt;br /&gt;'&lt;br /&gt;	code += "&lt;span class='" + infos["LEVEL"] + "'&gt;" + keys[4].to_s + ' : ' + infos["FILE"] + '&lt;/span&gt;&lt;br /&gt;'&lt;br /&gt;	code += "&lt;span class='" + infos["LEVEL"] + "'&gt;" + keys[0].to_s + ' : ' + infos["LINE"] + '&lt;/span&gt;&lt;br /&gt;'&lt;br /&gt;	code += "&lt;span class='" + infos["LEVEL"] + "'&gt;" + keys[2].to_s + ' : ' + infos["MATCH"] + '&lt;/span&gt;&lt;br /&gt;'&lt;br /&gt;	&lt;br /&gt;&lt;br /&gt;	}&lt;br /&gt;		code += "&lt;/pre&gt;&lt;/body&gt;&lt;/html&gt;"&lt;br /&gt;		fhtml = File.open(@@out_file.to_s, "w")&lt;br /&gt;		fhtml.write code&lt;br /&gt;		code = ''&lt;br /&gt;&lt;br /&gt;	&lt;br /&gt;  end&lt;br /&gt;#####################################################################################&lt;br /&gt;#	Parse &amp; Get Options&lt;br /&gt;#&lt;br /&gt; &lt;br /&gt;  def options(param)&lt;br /&gt;  &lt;br /&gt;	i = 0&lt;br /&gt;		ARGV.each  { |valeur|&lt;br /&gt;		&lt;br /&gt;    		if (valeur == '-' + param.to_s)&lt;br /&gt;				return ARGV[i+1]&lt;br /&gt;			elseif (valeur != '-' + param.to_s)&lt;br /&gt;				return false&lt;br /&gt;			end&lt;br /&gt;		i += 1&lt;br /&gt;		}&lt;br /&gt;		&lt;br /&gt;	end&lt;br /&gt;  &lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;scan = BScan.new&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 03 Feb 2008 11:51:05 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5094</guid>
      <author>Black_H (Black_H)</author>
    </item>
  </channel>
</rss>
