<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: Black_h's Code Snippets</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Thu, 07 Aug 2008 07:45:56 GMT</pubDate>
    <description>DZone Snippets: Black_h's Code Snippets</description>
    <item>
      <title>Image Base64_Encode</title>
      <link>http://snippets.dzone.com/posts/show/5274</link>
      <description>// Encode pics in base64&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;&lt;br /&gt;## Config&lt;br /&gt;$imgDir = './img/';&lt;br /&gt;$banDir = array ('.','..');&lt;br /&gt;$goodExt = array ('png','jpg','jpeg','gif'); -- A venir&lt;br /&gt;## End Config&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;$img = '';&lt;br /&gt;$case = '';&lt;br /&gt;$handle = opendir($imgDir);&lt;br /&gt;&lt;br /&gt;while ($file = readdir($handle)) &lt;br /&gt;{&lt;br /&gt;	$ext = array_pop(explode('.', $file));&lt;br /&gt;&lt;br /&gt;	if(!is_dir($file) &amp;&amp; !in_array($file, $banDir) &amp;&amp; in_array($ext, $goodExt)){&lt;br /&gt;	&lt;br /&gt;		$path = $imgDir.$file;&lt;br /&gt;		$name = strrev(substr(strrev($file), 4));&lt;br /&gt;		&lt;br /&gt;		$img .= '$img_'.$name.' = &lt;&lt;&lt; EOFILE'."&lt;br /&gt;";&lt;br /&gt;		$img .= base64_encode(file_get_contents($path))."&lt;br /&gt;";&lt;br /&gt;		$img .= 'EOFILE;'."&lt;br /&gt;";&lt;br /&gt;				&lt;br /&gt;		$case .= 'case \'img_'.$name.'\' :'."&lt;br /&gt;";&lt;br /&gt;		$case .= 'header("Content-type: image/'.$ext.'");'."&lt;br /&gt;";       &lt;br /&gt;		$case .= 'echo base64_decode($img_'.$name.');'."&lt;br /&gt;";       &lt;br /&gt;		$case .= 'exit();'."&lt;br /&gt;";   &lt;br /&gt;		&lt;br /&gt;		&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;			print $img;		&lt;br /&gt;				print "&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;";&lt;br /&gt;			print $case;&lt;br /&gt;			&lt;br /&gt;&lt;br /&gt;?&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 23 Mar 2008 19:46:13 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5274</guid>
      <author>Black_H (Black_H)</author>
    </item>
    <item>
      <title>ARGV Parser</title>
      <link>http://snippets.dzone.com/posts/show/5099</link>
      <description>This function parse ARGV and return a string.&lt;br /&gt;See exemples for more informations :&lt;br /&gt;&lt;br /&gt;// Go : http://blackh.badfile.net/wordz/&lt;br /&gt;&lt;br /&gt;Function :&lt;br /&gt;&lt;br /&gt;&lt;code&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;/code&gt;&lt;br /&gt;&lt;br /&gt;Usage :&lt;br /&gt;&lt;br /&gt;// cmd&gt; ruby test.rb -o foo&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;	out =  self.options('o')&lt;br /&gt;&lt;br /&gt;	if (out != false and out.empty? == false)&lt;br /&gt;                   puts out # print -&gt; foo&lt;br /&gt;	end&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 03 Feb 2008 20:24:59 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5099</guid>
      <author>Black_H (Black_H)</author>
    </item>
    <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>
