<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.owasp.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Yiannis</id>
		<title>OWASP - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.owasp.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Yiannis"/>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php/Special:Contributions/Yiannis"/>
		<updated>2026-05-03T14:42:12Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.27.2</generator>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_Code_Review_V2_Table_of_Contents&amp;diff=196641</id>
		<title>OWASP Code Review V2 Table of Contents</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_Code_Review_V2_Table_of_Contents&amp;diff=196641"/>
				<updated>2015-06-28T18:48:13Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: Added the section entitled 'Code Review for Backdoors'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= '''OWASP Code Review Guide v2.0:''' =&lt;br /&gt;
&lt;br /&gt;
==Forward==&lt;br /&gt;
# Author - Eoin Keary&lt;br /&gt;
# Previous version to be updated:[[https://www.owasp.org/index.php/Code_Review_Guide_History]]&lt;br /&gt;
'''[[CRV2_Forward|Content here]]'''&lt;br /&gt;
&lt;br /&gt;
== Code Review Guide Introduction==&lt;br /&gt;
# Author - Eoin Keary&lt;br /&gt;
# Previous version to be updated:[[https://www.owasp.org/index.php/Code_Review_Introduction]]&lt;br /&gt;
'''[[CRV2_Introduction|Content here]]'''&lt;br /&gt;
&lt;br /&gt;
=== What is source code review and Static Analysis ===&lt;br /&gt;
=== What is Code Review ===&lt;br /&gt;
# Author - Zyad Mghazli, Eoin Keary&lt;br /&gt;
# New Section&lt;br /&gt;
''' [[CRV2_WhatIsCodeReview|Content here]]'''&lt;br /&gt;
&lt;br /&gt;
=== Manual Review - Pros and Cons ===&lt;br /&gt;
# Author - Zyad Mghazli, Eoin Keary,Gary David Robinson&lt;br /&gt;
# New Section&lt;br /&gt;
# Suggestion: Benchmark of different Stataic Analysis Tools  Zyad Mghazli&lt;br /&gt;
# [[CRV2_ManualReviewProsCons|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=== Advantages of Code Review to Development Practices ===&lt;br /&gt;
# Author - Gary David Robinson&lt;br /&gt;
# New Section&lt;br /&gt;
# [[CRV2_AdvantagesToDevPractices|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=== Why code review ===&lt;br /&gt;
==== Scope and Objective of secure code review ====&lt;br /&gt;
# Author - Ashish Rao&lt;br /&gt;
# [[CRV2_WhyCodeReview|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=== We can't hack ourselves secure ===&lt;br /&gt;
# Author - Eoin Keary&lt;br /&gt;
# New Section&lt;br /&gt;
# [[CRV2_CantHackSecure|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=== 360 Review: Coupling source code review and Testing / Hybrid Reviews===&lt;br /&gt;
# Author - eoin Keary&lt;br /&gt;
# New Section&lt;br /&gt;
# [[CRV2_360Review|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=== Can static code analyzers do it all? ===&lt;br /&gt;
# Author - Ashish Rao&lt;br /&gt;
# New Section&lt;br /&gt;
# [[CRV2_CanStaticAnalyzersDoAll|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=Methodology=&lt;br /&gt;
===The code review approach===&lt;br /&gt;
#Author -  Johanna Curiel&lt;br /&gt;
# [[CRV2_CodeReviewApproach|Put content here]]&lt;br /&gt;
&lt;br /&gt;
==== Preparation and context ====&lt;br /&gt;
# Author - Gary David Robinson&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Code_Review_Preparation]]&lt;br /&gt;
# [[CRV2_PrepContext|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Application Threat Modeling====&lt;br /&gt;
#Author - Larry Conklin&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/OCRG1.1:Application_Threat_Modeling]]&lt;br /&gt;
# [[CRV2_AppThreatModeling|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Understanding Code layout/Design/Architecture====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_CodeLayoutDesignArch|Put content here]]&lt;br /&gt;
====Understanding Business Logic====&lt;br /&gt;
#[[CRV2_BusinessLogic|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===SDLC Integration===&lt;br /&gt;
#Author - Larry Conklin&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Security_Code_Review_in_the_SDLC]]&lt;br /&gt;
# [[CRV2_SDLCInt|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Deployment Models====&lt;br /&gt;
=====Secure deployment configurations=====&lt;br /&gt;
#Author - &lt;br /&gt;
# [[CRV2_SecDepConfig|Put content here]]&lt;br /&gt;
&lt;br /&gt;
# New Section&lt;br /&gt;
=====Metrics and code review=====&lt;br /&gt;
#Author -Anthony.Scotka@tea.state.tx.us&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Code_Review_Metrics]]&lt;br /&gt;
# [[CRV2_MetricsCodeRev|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Source and sink reviews=====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# New Section&lt;br /&gt;
# [[CRV2_SourceSinkRev|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Code review Coverage=====&lt;br /&gt;
#Author - Open&lt;br /&gt;
#Previous version to be updated: [[https://www.owasp.org/index.php/Code_Review_Coverage]]&lt;br /&gt;
# [[CRV2_CodeRevCoverage|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Design Reviews=====&lt;br /&gt;
#Author - Ashish Rao&lt;br /&gt;
*Why to review design?&lt;br /&gt;
**Building security in design - secure by design principle&lt;br /&gt;
**Design Areas to be reviewed&lt;br /&gt;
**Common Design Flaws&lt;br /&gt;
# [[CRV2_DesignRev|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====A Risk based approach to code review=====&lt;br /&gt;
#Author - Gary David Robinson&lt;br /&gt;
#New Section&lt;br /&gt;
*&amp;quot;Doing things right or doing the right things...&amp;quot;&lt;br /&gt;
**&amp;quot;Not all bugs are equal&lt;br /&gt;
# [[CRV2_RiskBasedApproach|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Crawling code====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Crawling_Code]]&lt;br /&gt;
*API of Interest:&lt;br /&gt;
**Java&lt;br /&gt;
**.NET&lt;br /&gt;
**PHP&lt;br /&gt;
**RUBY&lt;br /&gt;
*Frameworks:&lt;br /&gt;
**Spring&lt;br /&gt;
**.NET MVC&lt;br /&gt;
**Struts&lt;br /&gt;
**Zend&lt;br /&gt;
#New Section&lt;br /&gt;
*Searching for code in C/C++&lt;br /&gt;
#Author - Gary David Robinson&lt;br /&gt;
&lt;br /&gt;
# [[CRV2_CrawlingCode|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Code reviews and Compliance====&lt;br /&gt;
#Author -Open&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Code_Reviews_and_Compliance]]&lt;br /&gt;
# [[CRV2_CodeRevCompliance|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=Reviewing by Technical Control=&lt;br /&gt;
===Reviewing code for Authentication controls===&lt;br /&gt;
#Author - Gary Robinson&lt;br /&gt;
# [[CRV2_AuthControls|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Forgot password====&lt;br /&gt;
#Author Abbas Naderi, Larry Conklin&lt;br /&gt;
# [[CRV2_ForgotPassword|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====CAPTCHA====&lt;br /&gt;
#Author Larry Conklin, Joan Renchie&lt;br /&gt;
'''[[CRV2_CAPTCHA|Content here]]'''&lt;br /&gt;
&lt;br /&gt;
====Out of Band considerations====&lt;br /&gt;
#Author - Gary Robinson&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Codereview-Authentication]]&lt;br /&gt;
# [[CRV2_OutofBand|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===Reviewing code Authorization weakness===&lt;br /&gt;
#Author Eoin Keary .NET MVC added&lt;br /&gt;
# [[CRV2_AuthorizationWeaknesses|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Checking authz upon every request====&lt;br /&gt;
#Author - Abbas Naderi&lt;br /&gt;
# [[CRV2_CheckAuthzEachRequest|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Reducing the attack surface====&lt;br /&gt;
#Author Gary Robinson&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Codereview-Authorization]]&lt;br /&gt;
# [[CRV2_ReducingAttSurf|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====SSL/TLS Implementations====&lt;br /&gt;
#Author - Eoin Keary&lt;br /&gt;
# [[CRV2_SSL-TLS|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Reviewing code for Session handling====&lt;br /&gt;
#Author - Abbas Naderi&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Codereview-Session-Management]]&lt;br /&gt;
# [[CRV2_SessionHandling|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Reviewing client side code====&lt;br /&gt;
#New Section&lt;br /&gt;
# [[CRV2_ClientSideCodeIntro|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Javascript=====&lt;br /&gt;
#Author - Abbas Naderi&lt;br /&gt;
# [[CRV2_ClientSideCodeJScript|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====JSON=====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_ClientSideCodeJSon|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Content Security Policy=====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_ClientSideCodeContSecPolicy|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====&amp;quot;Jacking&amp;quot;/Framing=====&lt;br /&gt;
#Author - Eoin  Keary&lt;br /&gt;
# [[CRV2_ClientSideCodeJackingFraming|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====HTML 5?=====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_ClientSideCodeHTML5|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Browser Defenses=====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_ClientSideCodeBrowserDefPol|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====etc...=====&lt;br /&gt;
&lt;br /&gt;
====Review code for input validation====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_InputValIntro|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Regex Gotchas=====&lt;br /&gt;
#Author - Open&lt;br /&gt;
#New Section&lt;br /&gt;
# [[CRV2_InputValRegexGotchas|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====ESAPI=====&lt;br /&gt;
#Author - Open&lt;br /&gt;
#New Section&lt;br /&gt;
# Internal Link: [[https://www.owasp.org/index.php/Codereview-Input_Validation]]&lt;br /&gt;
# [[CRV2_InputValESAPI|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Microsoft Web Protection Library=====&lt;br /&gt;
#Author - Michael Hidalgo&lt;br /&gt;
#New Section&lt;br /&gt;
# Internal Link: [[https://www.owasp.org/index.php/Codereview-Input_Validation]]&lt;br /&gt;
# [[CRV2_InputValMicrosoftWebProtectionLibrary|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Reviewing code for contextual encoding====&lt;br /&gt;
[[Overall approach to content encoding and anti XSS]]&lt;br /&gt;
=====HTML Attribute=====&lt;br /&gt;
#Author - Eoin Keary&lt;br /&gt;
# [[CRV2_ContextEncHTMLAttribute|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====HTML Entity=====&lt;br /&gt;
#Author - Eoin Keary&lt;br /&gt;
# [[CRV2_ContextEncHTMLEntity|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Javascript Parameters=====&lt;br /&gt;
#Author - Eoin Keary&lt;br /&gt;
# [[CRV2_ContextEncJscriptParams|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====JQuery=====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_ContextEncJQuery|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Reviewing file and resource handling code====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_FileResourceHandling|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Resource Exhaustion - error handling====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_ResourceExhaustionErrHandling|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====native calls=====&lt;br /&gt;
#Author Open&lt;br /&gt;
# [[CRV2_ResourceExhaustionNativeCalls|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Reviewing Logging code - Detective Security====&lt;br /&gt;
#Author - Gary Robinson&lt;br /&gt;
* Where to Log&lt;br /&gt;
* What to log&lt;br /&gt;
* What not to log&lt;br /&gt;
* How to log&lt;br /&gt;
# Internal link: [[https://www.owasp.org/index.php/Logging_Cheat_Sheet]]&lt;br /&gt;
# [[CRV2_LoggingCode|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Reviewing Error handling and Error messages====&lt;br /&gt;
#Author - Gary David Robinson&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Codereview-Error-Handling]]&lt;br /&gt;
# [[CRV2_ErrorHandlingMessages|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Reviewing Security alerts====&lt;br /&gt;
#Author - Gary Robinson&lt;br /&gt;
# [[CRV2_SecurityAlerts|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Review for active defense====&lt;br /&gt;
#Author - Colin Watson&lt;br /&gt;
# [[CRV2_ActiveDefense|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Reviewing Secure Storage====&lt;br /&gt;
#Author - Open source&lt;br /&gt;
# New Section&lt;br /&gt;
# [[CRV2_SecureStorage|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Hashing &amp;amp; Salting - When, How and Where====&lt;br /&gt;
=====Encryption=====&lt;br /&gt;
======.NET======&lt;br /&gt;
#Author Larry Conklin, Joan Renchie&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Codereview-Cryptographic_Controls]]&lt;br /&gt;
*''Can we talk about key storage as well i.e. key management for encryption techniques used in the application? - Ashish Rao''&lt;br /&gt;
'''[[CRV2_HashingandSaltingdotNet|Content here]]'''&lt;br /&gt;
&lt;br /&gt;
=Reviewing by Vulnerability=&lt;br /&gt;
===Review Code for XSS===&lt;br /&gt;
#Author Examples added by Eoin Keary&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Reviewing_Code_for_Cross-Site_Scripting]]&lt;br /&gt;
# In reviewing code for XSS - we can give more patterns on &amp;quot;source to sink&amp;quot; patterns for ASP.NET wrf to difference versions and mechanisms to display data in a page - Ashish Rao&lt;br /&gt;
# [[CRV2_RevCodeXSS|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===Persistent - The Anti pattern===&lt;br /&gt;
#Author &lt;br /&gt;
# [[CRV2_RevCodePersistentAntiPatternIntro|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====.NET====&lt;br /&gt;
#Author Johanna Curiel, Eoin Keary&lt;br /&gt;
# [[CRV2_RevCodePersistentAntiPatterndotNet|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====.Java====&lt;br /&gt;
#Author Johanna Curiel&lt;br /&gt;
# [[CRV2_RevCodePersistentAntiPatternJava|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====PHP====&lt;br /&gt;
#Author Abbas Naderi&lt;br /&gt;
# [[CRV2_RevCodePersistentAntiPatternPHP|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Ruby====&lt;br /&gt;
#Author Open&lt;br /&gt;
# [[CRV2_RevCodePersistentAntiPatternRuby|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===Reflected - The Anti pattern===&lt;br /&gt;
# [[CRV2_RevCodeReflectedAntiPatternIntro|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====.NET====&lt;br /&gt;
#Author Johanna Curiel&lt;br /&gt;
# [[CRV2_RevCodeReflectedAntiPatterndotNet|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====.Java====&lt;br /&gt;
#Author Johanna Curiel&lt;br /&gt;
# [[CRV2_RevCodeReflectedAntiPatternJava|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====PHP====&lt;br /&gt;
#Author Abbas Naderi&lt;br /&gt;
# [[CRV2_RevCodeReflectedAntiPatternPHP|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Ruby====&lt;br /&gt;
# Author - Open&lt;br /&gt;
# [[CRV2_RevCodeReflectedAntiPatternIRuby|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===Stored - The Anti pattern===&lt;br /&gt;
# Author - Johanna Curiel&lt;br /&gt;
# [[CRV2_RevCodeStoredAntiPatternIntro|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====.NET====&lt;br /&gt;
#Author Johanna Curiel&lt;br /&gt;
# [[CRV2_RevCodeStoredAntiPatterndotNET|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====.Java====&lt;br /&gt;
#Author Johanna Curiel&lt;br /&gt;
# [[CRV2_RevCodeStoredAntiPatternJava|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====PHP====&lt;br /&gt;
#Author Johanna Curiel &lt;br /&gt;
# [[CRV2_RevCodeStoredAntiPatternPHP|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Ruby====&lt;br /&gt;
#Author - Johanna Curiel&lt;br /&gt;
# [[CRV2_RevCodeStoredAntiPatternRuby|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===DOM XSS ===&lt;br /&gt;
#Author Larry Conklin&lt;br /&gt;
# [[CRV2_DOMXSS|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===JQuery mistakes===&lt;br /&gt;
#Author &lt;br /&gt;
# [[CRV2_JQueryMistakes|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===Reviewing code for SQL Injection===&lt;br /&gt;
#Author Gary Robinson&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Reviewing_Code_for_SQL_Injection]]&lt;br /&gt;
# [[CRV2_RevCodeSQLInjection|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====PHP====&lt;br /&gt;
#Author - Mennouchi Islam Azeddine&lt;br /&gt;
# [[CRV2_SQLInjPHP|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Java====&lt;br /&gt;
#Author - Johanna Curiel&lt;br /&gt;
# [[CRV2_SQLInjJava|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====.NET====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_SQLInjdotNET|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====HQL====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_SQLInjHQL|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===The Anti pattern===&lt;br /&gt;
#Author Larry Conklin&lt;br /&gt;
#[[CRV2_AntiPattern| Content here]]&lt;br /&gt;
https://www.owasp.org/index.php/CRV2_AntiPattern&lt;br /&gt;
====PHP====&lt;br /&gt;
#Author - &lt;br /&gt;
# [[CRV2_AntiPatternPHP|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Java====&lt;br /&gt;
#Author - &lt;br /&gt;
#=&amp;gt; Searching for traditional SQL,JPA,JPSQL,Criteria,...&lt;br /&gt;
# [[CRV2_AntiPatternJava|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====.NET====&lt;br /&gt;
#Author Open&lt;br /&gt;
# [[CRV2_AntiPatterndotNet|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Ruby====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_AntiPatternRuby|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Cold Fusion====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_AntiPatternColdFusion|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===Reviewing code for CSRF Issues===&lt;br /&gt;
#Author Abbas Naderi&lt;br /&gt;
# Previous version to be updated: [[https://www.owasp.org/index.php/Reviewing_Code_for_Cross-Site_Request_Forgery]]&lt;br /&gt;
# This page needs to be deleted. [[CRV2_CSRFIssues|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===(This task has been deleted) Transactional logic / Non idempotent functions / State Changing Functions===&lt;br /&gt;
# [[CRV2_TransLogic|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===Reviewing code for poor logic /Business logic/Complex authorization===&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_PoorLogic|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===Reviewing Secure Communications===&lt;br /&gt;
====.NET Config====&lt;br /&gt;
#Author Johanna Curiel, Renchie Joan&lt;br /&gt;
# [[CRV2_SecCommsdotNet|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Spring Config====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_SecCommsSpringConfig|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====HTTP Headers====&lt;br /&gt;
#Author Gary Robinson&lt;br /&gt;
# [[CRV2_SecCommsHTTPHdrs|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===Tech-Stack pitfalls===&lt;br /&gt;
#Author Open&lt;br /&gt;
# [[CRV2_TechStackPitfalls|Put content here]]&lt;br /&gt;
&lt;br /&gt;
===Framework specific Issues===&lt;br /&gt;
====Spring====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesSpring|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Struts====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesStruts|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Drupal====&lt;br /&gt;
#Author Open&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesDrupal|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Ruby on Rails====&lt;br /&gt;
#Author - Open&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesROR|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Django====&lt;br /&gt;
#Author Open&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesDjango|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====.NET Security / MVC====&lt;br /&gt;
#Author Johanna Curiel, Eoin Keary&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesdotNetMVC|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Security in ASP.NET applications====&lt;br /&gt;
#Author Johanna Curiel&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesASPNet|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Strongly Named Assemblies=====&lt;br /&gt;
#Author Johanna Curiel, Larry Conklin&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesASPNetStrongAssembiles|Put content here]]&lt;br /&gt;
&lt;br /&gt;
======Round Tripping======&lt;br /&gt;
# Author - Open&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesASPNetRT|Put content here]]&lt;br /&gt;
&lt;br /&gt;
======How to prevent Round tripping======&lt;br /&gt;
# Author - Open&lt;br /&gt;
#Author Johanna Curiel&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesASPNetRTPrevention|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Setting the right Configurations=====&lt;br /&gt;
#Author Johanna Curiel&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesASPNetConfigs|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Authentication Options=====&lt;br /&gt;
#Author Johanna Curiel&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesASPNetAuth|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Code Review for Managed Code - .Net 1.0 and up=====&lt;br /&gt;
#Author Johanna Curiel&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesASPNetManagedCode|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Using OWASP Top 10 as your guideline=====&lt;br /&gt;
#Author Johanna Curiel&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesASPTop10|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=====Code review for Unsafe Code (C#)=====&lt;br /&gt;
#Author Johanna Curiel&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesASPNetUnsafeCode|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====PHP Specific Issues====&lt;br /&gt;
#Author Open&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesPHP|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Classic ASP====&lt;br /&gt;
#Author Johanna Curiel&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesASPClassic|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====C#====&lt;br /&gt;
#Author Open&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesCsharp|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====C/C++====&lt;br /&gt;
#Author Open&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesCplusplus|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Objective C====&lt;br /&gt;
#Author Open&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesObectiveC|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Java====&lt;br /&gt;
#Author Open&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesJava|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Android====&lt;br /&gt;
#Author Open&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesAndroid|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====Coldfusion====&lt;br /&gt;
#Author Open&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesColdfusion|Put content here]]&lt;br /&gt;
&lt;br /&gt;
====CodeIgniter====&lt;br /&gt;
&lt;br /&gt;
# Author Open&lt;br /&gt;
# [[CRV2_FrameworkSpecIssuesCodeIgniter|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=Security code review for Agile development=&lt;br /&gt;
#Author Carlos Pantelides&lt;br /&gt;
# [[CRV2_CodeReviewAgile|Put content here]]&lt;br /&gt;
&lt;br /&gt;
=Code Review for Backdoors=&lt;br /&gt;
#Author Yiannis Pavlosoglou&lt;br /&gt;
The review of a piece of source code for backdoors has one excruciating difference to a traditional source code review: The fact that someone with 'commit' or 'write' access to the source code repository has malicious intentions spanning well beyond their current developer remit. Because of this difference, a code review for backdoors is often seen as a very specialised review and can sometimes be considered not a code review per say. &lt;br /&gt;
&lt;br /&gt;
A traditional code review has the objective of determining if a vulnerability is present within the code, further to this if the vulnerability is exploitable and under what conditions. A code review for backdoors has the objective to determine if a certain portion of the codebase is carrying code that is unnecessary for the logic and implementation of the use cases it serves.&lt;br /&gt;
&lt;br /&gt;
Further to this, the reviewer, looks for the trigger points of that logic. Typical examples include a branch statement going off to a part of assembly or obfuscated code. The reviewer is looking for patterns of abnormality in terms of code segments that would not be expected to be present under normal conditions. &lt;br /&gt;
&lt;br /&gt;
An excellent introduction into how to look for rootkits in the Java programming language can be found [https://www.blackhat.com/presentations/bh-usa-09/WILLIAMS/BHUSA09-Williams-EnterpriseJavaRootkits-PAPER.pdf  here]. In this paper J. Williams covers a variety of backdoor examples including file system access through a web server, as well as time based attacks involving a key aspect of malicious functionality been made available after a certain amount of time. Such examples form the foundation of what any reviewer for back doors should try to automate, regardless of the language in which the review is taking place. &lt;br /&gt;
 &lt;br /&gt;
=Code Review Tools=&lt;br /&gt;
https://www.owasp.org/index.php/CRV2_CodeReviewTools&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User:Yiannis&amp;diff=187360</id>
		<title>User:Yiannis</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User:Yiannis&amp;diff=187360"/>
				<updated>2014-12-28T17:04:55Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: Some 2014 risk engineering references&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There is a world of numbers, hiding behind letters, inside computers, this is what stimulates my work. I am currently employed in IT risk management within the financial industry, running a team of technical risk assessors. Prior to this, I spent 5 years in the world of professional penetration testing. I focused my career evolution on assisting large scale projects actually implement secure development practices. This included teaching developers how to write secure code. For OWASP, I was the project leader for JBroFuzz and used to chair the Global Industry Committee. I am on the Application Security Advisory Board of the (ISC)2. My academic qualifications include a [http://wrap.warwick.ac.uk/1193/ PhD in information security], designing routing protocols for ad-hoc networks. I am a certified scrum master and hold the CISSP certification.&lt;br /&gt;
&lt;br /&gt;
'''Information Assurance: Risk Management &amp;amp; Risk Control''' &lt;br /&gt;
&lt;br /&gt;
*2014 - ISC2 EMEA Congress [http://emeacongress.isc2.org/events/-isc-security-congress-emea-2014/custom-36-fab6fa4c21114b97b700ecf2b6b9bf01.aspx Risk Engineering]&lt;br /&gt;
*2014 - ISC2 Security Congress Atlanta [https://congress.isc2.org/session/session-3248-building-agile-risk-assessment-program-keeping-pace-hackers Building an Agile Risk Assessment Program - Keeping Up with the Pace of Hackers]&lt;br /&gt;
&lt;br /&gt;
'''Application Security''' &lt;br /&gt;
&lt;br /&gt;
*2011 - Web-Spa [http://code.google.com/p/web-spa/ Single Request Authorisation Web Knocking]&lt;br /&gt;
*2011 - Port Knocking Web Implementations [http://www.portknocking.org/view/implementations Ideas for more ports]&lt;br /&gt;
*2011 - Swiss Cyber Storm [https://www.swisscyberstorm.com/speakers/pavlosoglou.html Protecting Web Applications through Port Knocking]&lt;br /&gt;
*2009 - WebGoat Off-By-One Lesson [http://webgoat.googlecode.com/svn-history/r436/trunk/webgoat/src/main/java/org/owasp/webgoat/lessons/OffByOne.java WebGoat Off-By-One Lesson Remains to be Published]&lt;br /&gt;
&lt;br /&gt;
'''OWASP Life in Bullets:''' &lt;br /&gt;
&lt;br /&gt;
*2010 - Bletchley Park ISSA UK [http://www.issa-uk.org/newsletters/ISSANewsletterApril2010.pdf Hacking for Queen and Country]&lt;br /&gt;
*2010 - OWASP GitHub [http://www.owasp.org/index.php/Category:OWASP_GitHub http://www.owasp.org/index.php/Category:OWASP_GitHub] &lt;br /&gt;
*2010 - OWASP London [http://www.owasp.org/index.php/London#Thursday.2C_January_14th_2010 http://www.owasp.org/index.php/London#Thursday.2C_January_14th_2010] &lt;br /&gt;
**Penetration Testing with Selenium&lt;br /&gt;
*2009 - OWASP Global Industry Committee [http://www.owasp.org/index.php/Global_Industry_Committee http://www.owasp.org/index.php/Global_Industry_Committee]&lt;br /&gt;
*2008 - OWASP NYC Conference [http://video.google.com/videoplay?docid=-1551704659206071145# http://video.google.com/videoplay?docid=-1551704659206071145#]&lt;br /&gt;
**JBroFuzz - Building a Java Fuzzer&lt;br /&gt;
*2008 - Deepsec Vienna [http://2008.deepsec.net/ http://2008.deepsec.net/]&lt;br /&gt;
**Hybrid Code Auditing: A Dataflow Source Code Review Methodology&lt;br /&gt;
*2007 - OWASP New York/New Jersey [http://www.owasp.org/images/4/4e/OWASP_NY_07-Financial-Real-Time-Threats_Pavlosoglou.ppt http://www.owasp.org/images/4/4e/OWASP_NY_07-Financial-Real-Time-Threats_Pavlosoglou.ppt]&lt;br /&gt;
**Financial Real-Time Threats: Impacting Trading Floor Operations&lt;br /&gt;
*2006 - JBroFuzz Project Leader [http://lists.owasp.org/mailman/listinfo/owasp-jbrofuzz http://lists.owasp.org/mailman/listinfo/owasp-jbrofuzz]&lt;br /&gt;
** JBroFuzz Mailing List&lt;br /&gt;
&lt;br /&gt;
'''Project Involvement'''&lt;br /&gt;
&lt;br /&gt;
*DirBuster - [http://www.owasp.org/index.php/Category:OWASP_DirBuster_Project http://www.owasp.org/index.php/Category:OWASP_DirBuster_Project]&lt;br /&gt;
*JBroFuzz - [http://www.owasp.org/index.php/JBroFuzz http://www.owasp.org/index.php/JBroFuzz]&lt;br /&gt;
&lt;br /&gt;
'''Contact''' &lt;br /&gt;
&lt;br /&gt;
Yiannis Pavlosoglou&amp;lt;br&amp;gt; yiannis@owasp.org&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=JBroFuzz&amp;diff=184996</id>
		<title>JBroFuzz</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=JBroFuzz&amp;diff=184996"/>
				<updated>2014-11-09T09:45:56Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: /* Source Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;700&amp;quot; align=&amp;quot;center&amp;quot; | &amp;lt;br&amp;gt; &lt;br /&gt;
! width=&amp;quot;500&amp;quot; align=&amp;quot;center&amp;quot; | &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | [[Image:OWASP Inactive Banner.jpg|800px| link=https://www.owasp.org/index.php/OWASP_Project_Stages#tab=Inactive_Projects]] &lt;br /&gt;
| align=&amp;quot;right&amp;quot; | &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
==== Main ====&lt;br /&gt;
&lt;br /&gt;
This project is currently inactive. If you would like more information on the OWASP JBroFuzz Project, please [http://owasp4.owasp.org/contactus.html Contact Us].&lt;br /&gt;
&lt;br /&gt;
[[Image:JBroFuzz-ScreenShot.png|thumb|300px|right|JBroFuzz Screen Shot]][[Image:JBroFuzz-SplashScreen.jpg|thumb|300px|right|JBroFuzz Splash Screen]][[Image:Jbrofuzz-fuzz-header.png|thumb|300px|right|Default Fuzzing Header]][[Image:Jbrofuzz-results.png|thumb|300px|right|Results Screenshot]]&lt;br /&gt;
'''JBroFuzz''' is a web application fuzzer for requests being made over [http://en.wikipedia.org/wiki/HTTP HTTP] or [http://en.wikipedia.org/wiki/Https HTTPS]. Its purpose is to provide a single, portable application that offers stable web protocol fuzzing capabilities.&lt;br /&gt;
&lt;br /&gt;
'''Current version is 2.4'''. Get it from the [http://sourceforge.net/projects/jbrofuzz/ SourceForge Download Section].&lt;br /&gt;
&lt;br /&gt;
[[Image:JBroFuzzDownload.png |&lt;br /&gt;
link=http://sourceforge.net/project/platformdownload.php?group_id=180679]]&lt;br /&gt;
&lt;br /&gt;
'''Release Notes (2.4):'''&lt;br /&gt;
&lt;br /&gt;
* Commandline support - main class analyzing and executing the commandline options&lt;br /&gt;
* Added --no-execute option to command line support &lt;br /&gt;
* Added &amp;quot;Connection: close&amp;quot; preference option to be added to the headers automatically&lt;br /&gt;
* Massive UI revamp for Fuzzing Tab: Contains 3 Sub-Tabs: Input, Output, On the wire&lt;br /&gt;
* Introduction of Fuzzing Transforms for those double-URL, triple-Base64 encodings&lt;br /&gt;
* Added HTTP proxy support &amp;amp; authentication for checking updates&lt;br /&gt;
* EncoderHashWindow improvements in keeping history within different row selections&lt;br /&gt;
* Fixed ZBase32 Encoding/Decoding to work as Phil wants it to&lt;br /&gt;
* Prefix/Suffix in Fuzzer Transforms: http://www.owasp.org/index.php/OWASP_JBroFuzz_Tutorial#Added_Fuzzer_Transformations&lt;br /&gt;
* Added a plain-text encoder, similar to Zero-Fuzzer for theoretical completeness &lt;br /&gt;
* Fixed a bunch of supposed &amp;quot;security holes&amp;quot; reported by static analyzers&lt;br /&gt;
* Small Oracle payloads update&lt;br /&gt;
&lt;br /&gt;
==Vulnerability Identification==&lt;br /&gt;
&lt;br /&gt;
JBroFuzz generates requests, puts them on the wire and records the corresponding responses received back. It does not attempt to identify if a particular site is vulnerable or not; this requires further human analysis. &lt;br /&gt;
&lt;br /&gt;
However, certain payloads included in fuzzers that can be used to generate requests (e.g. XSS) are crafted to attempt to successfully exploit flaws. Such flaws represent previously known vulnerabilities for web applications. JBroFuzz groups fuzzers with their corresponding payloads into a number of categories, depending on previously known vulnerabilities. &lt;br /&gt;
&lt;br /&gt;
Thus, the human analyst would have to select the fuzzers to use in order to test against a particular set of vulnerabilities and review the results in order to recognize if exploitation succeeded or not. &lt;br /&gt;
&lt;br /&gt;
==JBroFuzz Documentation==&lt;br /&gt;
&lt;br /&gt;
===Online Documentation===&lt;br /&gt;
&lt;br /&gt;
[[OWASP JBroFuzz Tutorial|JBroFuzz Tutorial]]&lt;br /&gt;
&lt;br /&gt;
[[OWASP JBroFuzz FAQ|Frequently Asked Questions (FAQs)]]&lt;br /&gt;
&lt;br /&gt;
[[OWASP JBroFuzz Install Guide|JBroFuzz Install Guide]]&lt;br /&gt;
&lt;br /&gt;
[[OWASP JBroFuzz Payloads and Fuzzers|JBroFuzz Payloads and Fuzzers]]&lt;br /&gt;
&lt;br /&gt;
===Built-in Documentation===&lt;br /&gt;
&lt;br /&gt;
Frequently Asked Questions: &amp;lt;code&amp;gt;Help -&amp;gt; FAQ&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Help Topics: &amp;lt;code&amp;gt;Help -&amp;gt; Topics&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Application Overview==&lt;br /&gt;
&lt;br /&gt;
The components of JBroFuzz are presented into tabs, with more options (encodings, hash calculator, headers from popular browsers) available under the &amp;lt;code&amp;gt;Tools&amp;lt;/code&amp;gt; option. The basic components are:&lt;br /&gt;
&lt;br /&gt;
'''Fuzzing''' The fuzzing tab is the main tab of JBroFuzz, responsible for all fuzzing operations performed over the network. Depending on the fuzzer payloads selected, it creates the malformed data for each request, puts it on the wire and writes the response to a file.&lt;br /&gt;
&lt;br /&gt;
'''Graphing''' The graphing tab is responsible for graphing (in a variety of forms) the responses received while fuzzing. This tab can offer a clear indication of a response that is different then the rest received, an indication of further examination being required.&lt;br /&gt;
&lt;br /&gt;
'''Payloads''' The payloads tab is a collection of fuzzers with their corresponding payloads that can be used while fuzzing. Payloads are added to the request in the fuzzing tab; a more clear view of what payloads are available, how they are grouped and what properties each fuzzer has can be seen in this tab.&lt;br /&gt;
&lt;br /&gt;
'''Headers''' The headers window is a collection of browser headers that can be used while fuzzing. Headers are obtained from different browsers on different platforms and operating systems. This tab is provided, as many web applications respond differently to different browser impersonation attacks.&lt;br /&gt;
&lt;br /&gt;
'''System''' The system tab represents the logging console of JBroFuzz at runtime. Here you can access java runtime information, see any errors that might occur and also track operation in terms of events being logged.&lt;br /&gt;
&lt;br /&gt;
==Roadmap==&lt;br /&gt;
&lt;br /&gt;
Building a web application fuzzer that sits at the rim of breaking known protocol specifications, can be a very time consuming exercise. Thus, JBroFuzz has a roadmap, based on how much time it would take to achieve each task.&lt;br /&gt;
&lt;br /&gt;
You can find the [http://www.owasp.org/index.php/Category:OWASP_JBroFuzz_Project_-_Roadmap project roadmap here].&lt;br /&gt;
&lt;br /&gt;
==Source Code==&lt;br /&gt;
&lt;br /&gt;
JBroFuzz is written in Java and requires a [http://www.java.com 1.6 JRE/JDK] (or higher) installed, to run. It is constituted of more or less 70 classes, using, in total, 10 external libraries. It builds under [http://ant.apache.org/ Apache Ant].&lt;br /&gt;
&lt;br /&gt;
'''[http://sourceforge.net/svn/?group_id=180679 SVN (Subversion)]''' is a tool used by many software developers to manage changes within their source code tree. This project's SourceForge.net Subversion repository can be checked out through SVN with the following instruction set:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
svn co https://svn.code.sf.net/p/jbrofuzz/code/ jbrofuzz &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the above sounds a bit greek, you can also browse through the complete source code at: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[http://jbrofuzz.svn.sourceforge.net/viewvc/jbrofuzz/ http://jbrofuzz.svn.sourceforge.net/viewvc/jbrofuzz/]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Feedback and Participation==&lt;br /&gt;
&lt;br /&gt;
We hope you find the OWASP JBroFuzz Project useful. Please contribute to the project by volunteering for one of the tasks on the roadmap, sending your comments, questions, and suggestions to &amp;lt;code&amp;gt;subere@uncon.org&amp;lt;/code&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
To join the OWASP JBroFuzz Project mailing list or view the archives, please visit the [http://lists.owasp.org/mailman/listinfo/owasp-jbrofuzz subscription page.]&lt;br /&gt;
&lt;br /&gt;
[[OWASP JBroFuzz Hashes|Release SHA1SUM]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ==== Project Identification ====&lt;br /&gt;
{{:Project Information:template JBroFuzz}}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ==== Project Identification ====&lt;br /&gt;
{{Template:OWASP JBroFuzz Project}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!---- ==== Project Details ====&lt;br /&gt;
{{:GPC_Project_Details/OWASP_JBroFuzz | OWASP Project Identification Tab}} ---&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Project About ====&lt;br /&gt;
{{:Projects/OWASP JBroFuzz Project | Project About}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&amp;lt;headertabs/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project|JBroFuzz]]&lt;br /&gt;
[[Category:OWASP Tool]]&lt;br /&gt;
[[Category:OWASP Download]]&lt;br /&gt;
[[Category:OWASP Release Quality Tool]]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=183238</id>
		<title>OWASP WebSpa Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=183238"/>
				<updated>2014-10-02T22:05:14Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: /* Roadmap */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Main=&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;padding: 0;margin:0;margin-top:10px;text-align:left;&amp;quot; |-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
==OWASP WebSpa Project==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is a Java web knocking tool for sending a single HTTP/S request to your web server in order to authorize the execution of a premeditated Operating System (O/S) command. &lt;br /&gt;
It provides a cryptographically protected &amp;quot;open sesame&amp;quot; mechanism on the web application layer, comparable to well-known port-knocking techniques.&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
This project implements the concept of web knocking by offering a jar file that 'tails' the access log of an existing web server. A user submits a specially crafted URL, therefore executing a predefined O/S command. No new ports or services are created.&lt;br /&gt;
&lt;br /&gt;
Similarly to traditional network port-knocking schemes, the OWASP WebSpa Project aims to create a covert channel of communication for O/S commands over the web application layer. This channel is by no means bi-directional: It is only the client that can issue commands to the server. The inverse, i.e. the server issuing commands to the client, is not an option within the current version.&lt;br /&gt;
&lt;br /&gt;
If port knocking is defined as &amp;quot;a form of host-to-host communication in which information flows across closed ports&amp;quot; then we define web knocking as &amp;quot;a form of host-to-host communication in which information flows across erroneous URLs&amp;quot;. Finally, in an attempt to mirror the operation of Single Packet Authorisation (SPA), the entirety of a user's action is submitted through a single GET request.&lt;br /&gt;
&lt;br /&gt;
==Licensing==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is free to use. It is licensed under the http://creativecommons.org/licenses/by-sa/3.0/ Creative Commons Attribution-ShareAlike 3.0 license], so you can copy, distribute and transmit the work, and you can adapt it, and use it commercially, but all provided that you attribute the work and if you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.&lt;br /&gt;
&lt;br /&gt;
The source code that comes with the OWASP WebSpa Project in the form of the tool named WebSpa is released as open source software under the terms of the [http://www.gnu.org/licenses/quick-guide-gplv3.html GNU Public License (GPL) version 3]. For reference, the full text of the GPL_v3 can be downloaded from the [http://www.fsf.org/ Free Software Foundation]. There are no plans to change the license; WebSpa will always remain an open source project free for use by anyone subject to the terms of the license. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== What is WebSpa? ==&lt;br /&gt;
&lt;br /&gt;
OWASP WebSpa provides:&lt;br /&gt;
&lt;br /&gt;
* A secure channel for executing premeditated O/S commands on your web server&lt;br /&gt;
* A resource-efficient single jar-file that can either be run as server, or client application, depending on the command line parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Presentation ==&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/webspa/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;&amp;quot; | &lt;br /&gt;
&lt;br /&gt;
== Quick Download ==&lt;br /&gt;
&lt;br /&gt;
[http://sourceforge.net/projects/webspa/files/webspa-07.zip/download WebSpa v0.7]&lt;br /&gt;
&lt;br /&gt;
==Classifications==&lt;br /&gt;
&lt;br /&gt;
   {| width=&amp;quot;200&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot;| [[File:Owasp-incubator-trans-85.png|link=https://www.owasp.org/index.php/OWASP_Project_Stages#tab=Incubator_Projects]]&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-builders-small.png|link=]]  &lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-defenders-small.png|link=]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Cc-button-y-sa-small.png|link=http://creativecommons.org/licenses/by-sa/3.0/]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Project_Type_Files_CODE.jpg|link=]]&lt;br /&gt;
   |}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Videos =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|S386azVcj-c|300|right|Linux Poweroff on Apache via Web Knocking with Web-Spa (_v0.7) }} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|eHlYnWyf35E|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.5) }} &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|_VU26ZGG7D8|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4 )}} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|pKF_NxHnoyA|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4) }} &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Tutorial =&lt;br /&gt;
&lt;br /&gt;
== Supporting Documentation ==&lt;br /&gt;
&lt;br /&gt;
The discrepant event discussed herein is web knocking. Within the latest [http://sourceforge.net/projects/webspa/files/latest/download?source=directory download] you can find three documents with the purpose of describing how WebSpa can be used. The three documents are:&lt;br /&gt;
&lt;br /&gt;
* ''''WebSpa Administration Guide''' This document describes how to setup and use the server component. It details how to create new users and add new action numbers with respective O/S commands assigned to them&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa Specification Guide''' This document describes the actual design detailing the use case, specification, requirements and actual attacks, which this tool has been engineered to withstand&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa User Guide''' This document describes how to use the client for issuing commands through a URL request to a web server&lt;br /&gt;
&lt;br /&gt;
The administration guide aims to enable anyone who would be interested in using WebSpa to be able to setup the server side component of it. After configuring the server component of WebSpa, you'll be ready to use the corresponding client for issuing direct actions as O/S commands to it.&lt;br /&gt;
&lt;br /&gt;
If this is your first time using WebSpa, please note that the server operations described in this document, will not work if a WebSpa client does not submit a web-knock to your web server in a timely manner.&lt;br /&gt;
&lt;br /&gt;
Thus, knowing a client implementation goes hand-in-hand with a server instance for it, please also have a look at the WebSpa user guide document to see how the two can be used in tandem. &lt;br /&gt;
&lt;br /&gt;
The user guide aims to enable anyone who would be interested in using WebSpa to do so. As soon as you install the server side component and decide what actions to allow, you'll be ready to use the corresponding client for issuing direct actions that work for you.&lt;br /&gt;
&lt;br /&gt;
Finally, the specification guide aims to enable anyone who would be interested in implementing their own version of WebSpa to do so.&lt;br /&gt;
&lt;br /&gt;
== HelloWorld! Enabling SSH via Web Knocking with WebSpa ==&lt;br /&gt;
&lt;br /&gt;
In this section we describe the setup you should follow in order to get to the stage of being able to execute the video entitled: [https://www.youtube.com/watch?v=eHlYnWyf35E Enabling SSH via Web Knocking with WebSpa (_v0.5)] on your server.&lt;br /&gt;
&lt;br /&gt;
We assume you can SSH into your web server using the user 'web-spa'. We also assume that the user 'web-spa' has permissions to run the necessary service start and stop commands for this service. So, let's login to the box and get the latest WebSpa download:&lt;br /&gt;
&lt;br /&gt;
 ssh web-spa@web.spa.seleucus.net&lt;br /&gt;
 web-spa@web:~$ cd /tmp&lt;br /&gt;
 web-spa@web:/tmp$ wget https://downloads.sourceforge.net/project/webspa/webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
It would be wise at this stage to check the SHA1 digest of what we just downloaded. Sourceforge publishes the SHA1 of all files available for download; copying the value into our command prompt yields:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ echo &amp;quot;a630f23f88c49d02b5895a3d7e16aad245c387f3 *webspa-06.zip&amp;quot; | sha1sum -c -&lt;br /&gt;
 webspa-06.zip: OK&lt;br /&gt;
 web-spa@web:/tmp$ &lt;br /&gt;
&lt;br /&gt;
Ok, so we have downloaded something that we can vouch for-ish. Let's extract and setup.&lt;br /&gt;
&lt;br /&gt;
 unzip webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
A lot of noise comes back from this command. Apologies, different groups have clearly stated they have wanted the source code as well the documentation to be included within the download. Let's have a look at the install file:&lt;br /&gt;
&lt;br /&gt;
 =================================================&lt;br /&gt;
 - Prerequisites for WebSpa&lt;br /&gt;
 =================================================&lt;br /&gt;
&lt;br /&gt;
 The following programs must be installed in order&lt;br /&gt;
 for WebSpa to run:&lt;br /&gt;
&lt;br /&gt;
 - Java 1.6 or later&lt;br /&gt;
&lt;br /&gt;
If you don't have java installed, consider using the following command: &lt;br /&gt;
&lt;br /&gt;
 sudo aptitude install openjdk-7-jre&lt;br /&gt;
&lt;br /&gt;
This will meet the one prerequisite for using WebSpa. As this is a production server, docs and src folders will not be missed. Also, we like to store things in /opt, ergo:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/src/&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/docs/&lt;br /&gt;
 web-spa@web:/tmp$ sudo mv -v /tmp/web-spa-0.6/ /opt&lt;br /&gt;
&lt;br /&gt;
We now have WebSpa in /opt, let's run the server and create some users. &lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ cd /opt/web-spa-0.6/&lt;br /&gt;
 web-spa@web:/opt/web-spa-0.6$ java -jar web-spa-0.6.jar -server&lt;br /&gt;
&lt;br /&gt;
 Web-Spa - Single HTTP/S Request Authorisation&lt;br /&gt;
 version 0.6 (web-spa@seleucus.net)&lt;br /&gt;
&lt;br /&gt;
 This is a holding prompt, type &amp;quot;exit&amp;quot; or &amp;quot;x&amp;quot; to quit&lt;br /&gt;
&lt;br /&gt;
 - type &amp;quot;service start&amp;quot; to start the web-spa server&lt;br /&gt;
 - type &amp;quot;help&amp;quot; or &amp;quot;?&amp;quot; for more options&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last line above is the server's holding prompt; all commands are issued via this prompt. In order to exit this prompt, type 'exit' or 'quit'. In the next step we will add 3 users and assign a unique pass-phrase to each one of them. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Yiannis Pavlosoglou&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: yiannis@xxxxxx.com&lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note that only a user's full name and pass-phrase are required to be entered. Let's create another user:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Oliver Merki&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that we did not specify a user's e-mail address nor a phone number, as both these fields were optional. Finally, adding a third user: &lt;br /&gt;
&lt;br /&gt;
  web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Patryk&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Patryk we only specified his first name and a unique pass-phrase. You get the picture. Now that we have created our users, let's add some actions to each user. We would like to give Patryk the ability to bounce the SSH service; ergo, let's add two actions:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh start &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 1&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh start' to action number 1 for user Patryk. Let's also add the stop command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 1  sudo service ssh start          has never been executed&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh stop &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 0&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh stop' to action number 0 for user Patryk. Two very important steps we must not forget is to enable the user Patryk and start the web-spa listening service. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user activate&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 User with ID: 13 is in-active&lt;br /&gt;
 -[Optional] Toggle user activation [Y/n]: &lt;br /&gt;
 User with ID: 13 is active&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 And finally issue the service start command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;service start&lt;br /&gt;
 [2014-02-23 12-36-07] Attempting to start web-spa...&lt;br /&gt;
 [2014-02-23 12-36-07] Found access log file: /...cus.net/logs/access.log&lt;br /&gt;
 [2014-02-23 12-36-07] Creating tail listener...&lt;br /&gt;
 [2014-02-23 12-36-07] Web-spa server started!&lt;br /&gt;
 [2014-02-23 12-36-07] Please make sure your web server is also up&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= News =&lt;br /&gt;
&lt;br /&gt;
* [19 Aug 2014] Our project was featured in the OWASP Connector newsletter. [http://hosted-p0.vresp.com/1479611/4d8d3315c2/ARCHIVE (link)]&lt;br /&gt;
* [07 May 2014] Added four video links in the respective &amp;quot;Video&amp;quot; tab, referencing YouTube&lt;br /&gt;
* [24 Apr 2014] Version 0.7 has been release and can now be found in the download section. Also, we welcome Paweł and Joël to the team.&lt;br /&gt;
* [20 Mar 2014] [http://www.eventbrite.co.uk/e/owasp-london-chapter-meeting-march-2014-tickets-10063386861 WebSpa has been presented during OWASP London Chapter Meeting]&lt;br /&gt;
* [16 Mar 2014] WebSpa has a new contributor – Paweł Goleń. Paweł welcome in the team!&lt;br /&gt;
* [14 Mar 2014] [https://code.google.com/p/web-spa/ Scheduled the deletion of the Google code project, given that downloads require a new account]&lt;br /&gt;
* [04 Mar 2014] [https://soundcloud.com/#owasp-podcast/the-owasp-webspa-project-with The WebSpa podcast has now been available!] &lt;br /&gt;
* [22 Feb 2014] Created the WebSpa project on sourceforge, started the import from Google code&lt;br /&gt;
* [22 Dec 2013] Version 0.6 has been released and can now be found in the download section&lt;br /&gt;
* [08 Nov 2013] The OWASP Web Knocking Project is created&lt;br /&gt;
&lt;br /&gt;
=FAQs=&lt;br /&gt;
&lt;br /&gt;
; What does the ASCII-Art for WebSpa look like?&lt;br /&gt;
                    __                                           &lt;br /&gt;
                   /\ \                                          &lt;br /&gt;
   __  __  __     __\ \ \____             ____  _____      __     &lt;br /&gt;
 /\ \/\ \/\ \  /'__`\ \ '__`\  _______  /',__\/\ '__`\  /'__`\   &lt;br /&gt;
 \ \ \_/ \_/ \/\  __/\ \ \L\ \/\______\/\__, `\ \ \L\ \/\ \L\.\_ &lt;br /&gt;
  \ \___x___/'\ \____\\ \_,__/\/______/\/\____/\ \ ,__/\ \__/.\_\&lt;br /&gt;
   \/__//__/   \/____/ \/___/           \/___/  \ \ \/  \/__/\/_/&lt;br /&gt;
                                                 \ \_\           &lt;br /&gt;
                                                  \/_/           &lt;br /&gt;
&lt;br /&gt;
The font is Larry 3D generated [http://patorjk.com/software/taag/#p=display&amp;amp;f=Larry%203D&amp;amp;t=web-spa here].&lt;br /&gt;
&lt;br /&gt;
; Who are the actors required in order to use the WebSpa tool?&lt;br /&gt;
&lt;br /&gt;
There are two actors, the WebSpa administrator and the WebSpa user. Ultimately, they could be the same person. The administrator agrees with each user what each of their allowed O/S commands are, while the user, well, executes these commands on the server by using the client. &lt;br /&gt;
&lt;br /&gt;
; How does the crypto of WebSpa work?&lt;br /&gt;
: From the perspective of cryptographic engineering, WebSpa uses a hash [http://en.wikipedia.org/wiki/Commitment_scheme commitment scheme], where the commit phase during which a value is chosen is done using an out of band channel. WebSpa focuses on receiving a value specified through a single request from the client and processing it on the server. &lt;br /&gt;
&lt;br /&gt;
; Can one deploy WebSpa over HTTP? &lt;br /&gt;
: Yes, WebSpa can be deployed over HTTP, however for security reasons it is highly recommended to utilize HTTPS.&lt;br /&gt;
&lt;br /&gt;
; How to report a WebSpa bug?&lt;br /&gt;
:To report a WebSpa bug please feel free to create a ticket on the [http://sourceforge.net/p/webspa/tickets/?source=navbar sourceforge.net]. A sourceforge account is necessary. If you don’t own a sourceforge account you may send an e-mail to one of the contributors.&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is developed by a worldwide team of volunteers. Below is a list of all people that have contributed to the project so far.&lt;br /&gt;
&lt;br /&gt;
Active contributors:&lt;br /&gt;
* [[User:Yiannis|Yiannis Pavlosoglou]] - Inception &amp;amp; Development &lt;br /&gt;
* Patryk Arciszewski - Theoretician &amp;amp; Documentation&lt;br /&gt;
* Paweł Goleń - Breaking &amp;amp; Infrastructure &lt;br /&gt;
* Joël Rouiller - Development &amp;amp; Optimisation&lt;br /&gt;
* [[User:Oliver_M.|Oliver Merki]] - Leader &amp;amp; Operations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retired contributors:&lt;br /&gt;
* [[User:Dr. Markus Maria Miedaner|Markus Maria Miedaner]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
&lt;br /&gt;
== Release 0.9 (Q3/2015) == &lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.9 will be major release and include a comprehensive redesign of the WebKnock format in order to improve overall security and robustness of the request. The tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 44	New WebKnock request format should be defined&lt;br /&gt;
 42	Do not limit the web knock to 100 characters, instead use SHA-512 lengths	 &lt;br /&gt;
 35	A threat model for WebSpa should be created and reviewed	 &lt;br /&gt;
 33	Apache should be replaced by nginx	 &lt;br /&gt;
&lt;br /&gt;
== Release 0.85 (Q1/2015) ==&lt;br /&gt;
WebSpa_v0.85 will offer improved usability features, which will simplify installing, configuring and running WebSpa. The tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 40	Log to /​var/​log instead of a log.txt file	&lt;br /&gt;
 15	Add easy way to run the server as a background daemon	  &lt;br /&gt;
&lt;br /&gt;
== Release 0.8 (Q4/2014) ==&lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.8 will be sort of a proof-of-concept of WebSpa. A stable version to demonstrate the concept of WebKnocking, however, with some limitations with regards to usability/configuration and modularity (e.g. changing the hashing algorithm). The tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 43	Change SSL configuration to allow wget&lt;br /&gt;
 41	WebSpa administrator to WebSpa user output	 &lt;br /&gt;
 38	umask 077 should be added to webspa.sh	 &lt;br /&gt;
 32	A known_hosts file should be used to maintain the list of successfully verified keys	 &lt;br /&gt;
 31	Verification of server's public key fingerprint should be possible	 &lt;br /&gt;
 30	Help Files Update (0.8)	 &lt;br /&gt;
 - FIXED: Modified the checking of 2 arrays being equal to be constant in time (Ticket #27)&lt;br /&gt;
 2	Create maven build task for release	 &lt;br /&gt;
&lt;br /&gt;
== [http://sourceforge.net/projects/webspa/files/webspa-07.zip/download Release 0.7 (24/Apr/2014)] ==&lt;br /&gt;
&lt;br /&gt;
This is the current release of WebSpa. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.7 offers enhanced user administration functionality. The WebSpa client now offers the possibility for a user to connect to a web server with an untrusted/self-signed certificate.&lt;br /&gt;
&lt;br /&gt;
 - NEW: The WebSpa client asks the user if they want to connect web servers with untrusted certificates. (Ticket #28) &lt;br /&gt;
 - NEW: Introduced ‘passwd’ command, which allows the WebSpa administrator to modify a user’s password.&lt;br /&gt;
 - NEW: Introduced ‘pass-phrase show’ command, which allows the WebSpa administrator to print a user’s pass-phrase to the screen.&lt;br /&gt;
 - FIXED: Array is no longer sorted, which reduced the entropy of the web-knock. (Ticket #24)&lt;br /&gt;
 - FIXED: Reworked and added test cases.&lt;br /&gt;
 - FIXED: Removed dependency on Spring security. (Ticket #18)&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-06.zip Release 0.6 (21/Dec/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.6 offers enhanced logging functionality, fixing a bug that caused the server to become unresponsive upon starting and stopping. The client now offers to transmit a web knock request, thus not requiring for a user to copy-paste the URL into their browser. &lt;br /&gt;
&lt;br /&gt;
Additional test cases have been added, the option &amp;quot;?&amp;quot; is now available to offer &amp;quot;help&amp;quot; and the log functionality tracks via means of a timestamp all events logged&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-05.zip Release 0.5 (21/Oct/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.5 shortens the number of inputs required from a legitimate user of web-spa to only two: A valid pass-phrase, unique for each user and a single digit in the range of [0-9]. We refer to the latter as an action number and it represents a premeditated Operating System (O/S) command.&lt;br /&gt;
&lt;br /&gt;
All the functionality (for both the client and the server) is now within a single jar file, accompanied by detailed documentation:&lt;br /&gt;
&lt;br /&gt;
 - 00-web-spa-administration-guide.pdf	&lt;br /&gt;
 - 00-web-spa-specification-guide.pdf	&lt;br /&gt;
 - 00-web-spa-user-guide.pdf&lt;br /&gt;
&lt;br /&gt;
The server side functionality has been re-designed to operate with a single configuration file (created at first run) as well as a HyperSQL embedded file database (also created at first run).&lt;br /&gt;
&lt;br /&gt;
Finally, no files are created or are required when web-spa runs in client mode, with the '-client' option.&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-04.zip Release 0.4 (27/Aug/2011)] == &lt;br /&gt;
&lt;br /&gt;
A number of updates and bug fixes have been included within this version. Also, an update on the actual message format to further protect from replay attacks has been included. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.4 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-04.jar&lt;br /&gt;
 * webspa-elements-04.jar&lt;br /&gt;
 * webspa-server-04.jar&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-03.zip Release 0.3 (11/Jul/2011)] ==&lt;br /&gt;
&lt;br /&gt;
In its first usable release, WebSpa _v0.3 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-03.jar&lt;br /&gt;
 * webspa-elements-03.jar&lt;br /&gt;
 * webspa-server-03.jar&lt;br /&gt;
&lt;br /&gt;
== Contribution ==&lt;br /&gt;
&lt;br /&gt;
Involvement in the development and promotion of the OWASP WebSpa Project is actively encouraged!&lt;br /&gt;
You do not have to be a security expert in order to contribute.&lt;br /&gt;
Some of the ways you can help:&lt;br /&gt;
* Quality assurance of resolved defects&lt;br /&gt;
* Java development (good knowledge of Java desirable)&lt;br /&gt;
&lt;br /&gt;
=Project About=&lt;br /&gt;
{{:Projects/OWASP_WebSpa_Project}}  &lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]  [[Category:OWASP_Builders]] [[Category:OWASP_Defenders]]  [[Category:OWASP_Document]]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=183237</id>
		<title>OWASP WebSpa Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=183237"/>
				<updated>2014-10-02T22:00:29Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: /* Roadmap */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Main=&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;padding: 0;margin:0;margin-top:10px;text-align:left;&amp;quot; |-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
==OWASP WebSpa Project==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is a Java web knocking tool for sending a single HTTP/S request to your web server in order to authorize the execution of a premeditated Operating System (O/S) command. &lt;br /&gt;
It provides a cryptographically protected &amp;quot;open sesame&amp;quot; mechanism on the web application layer, comparable to well-known port-knocking techniques.&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
This project implements the concept of web knocking by offering a jar file that 'tails' the access log of an existing web server. A user submits a specially crafted URL, therefore executing a predefined O/S command. No new ports or services are created.&lt;br /&gt;
&lt;br /&gt;
Similarly to traditional network port-knocking schemes, the OWASP WebSpa Project aims to create a covert channel of communication for O/S commands over the web application layer. This channel is by no means bi-directional: It is only the client that can issue commands to the server. The inverse, i.e. the server issuing commands to the client, is not an option within the current version.&lt;br /&gt;
&lt;br /&gt;
If port knocking is defined as &amp;quot;a form of host-to-host communication in which information flows across closed ports&amp;quot; then we define web knocking as &amp;quot;a form of host-to-host communication in which information flows across erroneous URLs&amp;quot;. Finally, in an attempt to mirror the operation of Single Packet Authorisation (SPA), the entirety of a user's action is submitted through a single GET request.&lt;br /&gt;
&lt;br /&gt;
==Licensing==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is free to use. It is licensed under the http://creativecommons.org/licenses/by-sa/3.0/ Creative Commons Attribution-ShareAlike 3.0 license], so you can copy, distribute and transmit the work, and you can adapt it, and use it commercially, but all provided that you attribute the work and if you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.&lt;br /&gt;
&lt;br /&gt;
The source code that comes with the OWASP WebSpa Project in the form of the tool named WebSpa is released as open source software under the terms of the [http://www.gnu.org/licenses/quick-guide-gplv3.html GNU Public License (GPL) version 3]. For reference, the full text of the GPL_v3 can be downloaded from the [http://www.fsf.org/ Free Software Foundation]. There are no plans to change the license; WebSpa will always remain an open source project free for use by anyone subject to the terms of the license. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== What is WebSpa? ==&lt;br /&gt;
&lt;br /&gt;
OWASP WebSpa provides:&lt;br /&gt;
&lt;br /&gt;
* A secure channel for executing premeditated O/S commands on your web server&lt;br /&gt;
* A resource-efficient single jar-file that can either be run as server, or client application, depending on the command line parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Presentation ==&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/webspa/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;&amp;quot; | &lt;br /&gt;
&lt;br /&gt;
== Quick Download ==&lt;br /&gt;
&lt;br /&gt;
[http://sourceforge.net/projects/webspa/files/webspa-07.zip/download WebSpa v0.7]&lt;br /&gt;
&lt;br /&gt;
==Classifications==&lt;br /&gt;
&lt;br /&gt;
   {| width=&amp;quot;200&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot;| [[File:Owasp-incubator-trans-85.png|link=https://www.owasp.org/index.php/OWASP_Project_Stages#tab=Incubator_Projects]]&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-builders-small.png|link=]]  &lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-defenders-small.png|link=]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Cc-button-y-sa-small.png|link=http://creativecommons.org/licenses/by-sa/3.0/]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Project_Type_Files_CODE.jpg|link=]]&lt;br /&gt;
   |}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Videos =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|S386azVcj-c|300|right|Linux Poweroff on Apache via Web Knocking with Web-Spa (_v0.7) }} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|eHlYnWyf35E|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.5) }} &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|_VU26ZGG7D8|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4 )}} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|pKF_NxHnoyA|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4) }} &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Tutorial =&lt;br /&gt;
&lt;br /&gt;
== Supporting Documentation ==&lt;br /&gt;
&lt;br /&gt;
The discrepant event discussed herein is web knocking. Within the latest [http://sourceforge.net/projects/webspa/files/latest/download?source=directory download] you can find three documents with the purpose of describing how WebSpa can be used. The three documents are:&lt;br /&gt;
&lt;br /&gt;
* ''''WebSpa Administration Guide''' This document describes how to setup and use the server component. It details how to create new users and add new action numbers with respective O/S commands assigned to them&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa Specification Guide''' This document describes the actual design detailing the use case, specification, requirements and actual attacks, which this tool has been engineered to withstand&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa User Guide''' This document describes how to use the client for issuing commands through a URL request to a web server&lt;br /&gt;
&lt;br /&gt;
The administration guide aims to enable anyone who would be interested in using WebSpa to be able to setup the server side component of it. After configuring the server component of WebSpa, you'll be ready to use the corresponding client for issuing direct actions as O/S commands to it.&lt;br /&gt;
&lt;br /&gt;
If this is your first time using WebSpa, please note that the server operations described in this document, will not work if a WebSpa client does not submit a web-knock to your web server in a timely manner.&lt;br /&gt;
&lt;br /&gt;
Thus, knowing a client implementation goes hand-in-hand with a server instance for it, please also have a look at the WebSpa user guide document to see how the two can be used in tandem. &lt;br /&gt;
&lt;br /&gt;
The user guide aims to enable anyone who would be interested in using WebSpa to do so. As soon as you install the server side component and decide what actions to allow, you'll be ready to use the corresponding client for issuing direct actions that work for you.&lt;br /&gt;
&lt;br /&gt;
Finally, the specification guide aims to enable anyone who would be interested in implementing their own version of WebSpa to do so.&lt;br /&gt;
&lt;br /&gt;
== HelloWorld! Enabling SSH via Web Knocking with WebSpa ==&lt;br /&gt;
&lt;br /&gt;
In this section we describe the setup you should follow in order to get to the stage of being able to execute the video entitled: [https://www.youtube.com/watch?v=eHlYnWyf35E Enabling SSH via Web Knocking with WebSpa (_v0.5)] on your server.&lt;br /&gt;
&lt;br /&gt;
We assume you can SSH into your web server using the user 'web-spa'. We also assume that the user 'web-spa' has permissions to run the necessary service start and stop commands for this service. So, let's login to the box and get the latest WebSpa download:&lt;br /&gt;
&lt;br /&gt;
 ssh web-spa@web.spa.seleucus.net&lt;br /&gt;
 web-spa@web:~$ cd /tmp&lt;br /&gt;
 web-spa@web:/tmp$ wget https://downloads.sourceforge.net/project/webspa/webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
It would be wise at this stage to check the SHA1 digest of what we just downloaded. Sourceforge publishes the SHA1 of all files available for download; copying the value into our command prompt yields:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ echo &amp;quot;a630f23f88c49d02b5895a3d7e16aad245c387f3 *webspa-06.zip&amp;quot; | sha1sum -c -&lt;br /&gt;
 webspa-06.zip: OK&lt;br /&gt;
 web-spa@web:/tmp$ &lt;br /&gt;
&lt;br /&gt;
Ok, so we have downloaded something that we can vouch for-ish. Let's extract and setup.&lt;br /&gt;
&lt;br /&gt;
 unzip webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
A lot of noise comes back from this command. Apologies, different groups have clearly stated they have wanted the source code as well the documentation to be included within the download. Let's have a look at the install file:&lt;br /&gt;
&lt;br /&gt;
 =================================================&lt;br /&gt;
 - Prerequisites for WebSpa&lt;br /&gt;
 =================================================&lt;br /&gt;
&lt;br /&gt;
 The following programs must be installed in order&lt;br /&gt;
 for WebSpa to run:&lt;br /&gt;
&lt;br /&gt;
 - Java 1.6 or later&lt;br /&gt;
&lt;br /&gt;
If you don't have java installed, consider using the following command: &lt;br /&gt;
&lt;br /&gt;
 sudo aptitude install openjdk-7-jre&lt;br /&gt;
&lt;br /&gt;
This will meet the one prerequisite for using WebSpa. As this is a production server, docs and src folders will not be missed. Also, we like to store things in /opt, ergo:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/src/&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/docs/&lt;br /&gt;
 web-spa@web:/tmp$ sudo mv -v /tmp/web-spa-0.6/ /opt&lt;br /&gt;
&lt;br /&gt;
We now have WebSpa in /opt, let's run the server and create some users. &lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ cd /opt/web-spa-0.6/&lt;br /&gt;
 web-spa@web:/opt/web-spa-0.6$ java -jar web-spa-0.6.jar -server&lt;br /&gt;
&lt;br /&gt;
 Web-Spa - Single HTTP/S Request Authorisation&lt;br /&gt;
 version 0.6 (web-spa@seleucus.net)&lt;br /&gt;
&lt;br /&gt;
 This is a holding prompt, type &amp;quot;exit&amp;quot; or &amp;quot;x&amp;quot; to quit&lt;br /&gt;
&lt;br /&gt;
 - type &amp;quot;service start&amp;quot; to start the web-spa server&lt;br /&gt;
 - type &amp;quot;help&amp;quot; or &amp;quot;?&amp;quot; for more options&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last line above is the server's holding prompt; all commands are issued via this prompt. In order to exit this prompt, type 'exit' or 'quit'. In the next step we will add 3 users and assign a unique pass-phrase to each one of them. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Yiannis Pavlosoglou&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: yiannis@xxxxxx.com&lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note that only a user's full name and pass-phrase are required to be entered. Let's create another user:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Oliver Merki&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that we did not specify a user's e-mail address nor a phone number, as both these fields were optional. Finally, adding a third user: &lt;br /&gt;
&lt;br /&gt;
  web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Patryk&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Patryk we only specified his first name and a unique pass-phrase. You get the picture. Now that we have created our users, let's add some actions to each user. We would like to give Patryk the ability to bounce the SSH service; ergo, let's add two actions:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh start &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 1&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh start' to action number 1 for user Patryk. Let's also add the stop command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 1  sudo service ssh start          has never been executed&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh stop &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 0&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh stop' to action number 0 for user Patryk. Two very important steps we must not forget is to enable the user Patryk and start the web-spa listening service. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user activate&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 User with ID: 13 is in-active&lt;br /&gt;
 -[Optional] Toggle user activation [Y/n]: &lt;br /&gt;
 User with ID: 13 is active&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 And finally issue the service start command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;service start&lt;br /&gt;
 [2014-02-23 12-36-07] Attempting to start web-spa...&lt;br /&gt;
 [2014-02-23 12-36-07] Found access log file: /...cus.net/logs/access.log&lt;br /&gt;
 [2014-02-23 12-36-07] Creating tail listener...&lt;br /&gt;
 [2014-02-23 12-36-07] Web-spa server started!&lt;br /&gt;
 [2014-02-23 12-36-07] Please make sure your web server is also up&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= News =&lt;br /&gt;
&lt;br /&gt;
* [19 Aug 2014] Our project was featured in the OWASP Connector newsletter. [http://hosted-p0.vresp.com/1479611/4d8d3315c2/ARCHIVE (link)]&lt;br /&gt;
* [07 May 2014] Added four video links in the respective &amp;quot;Video&amp;quot; tab, referencing YouTube&lt;br /&gt;
* [24 Apr 2014] Version 0.7 has been release and can now be found in the download section. Also, we welcome Paweł and Joël to the team.&lt;br /&gt;
* [20 Mar 2014] [http://www.eventbrite.co.uk/e/owasp-london-chapter-meeting-march-2014-tickets-10063386861 WebSpa has been presented during OWASP London Chapter Meeting]&lt;br /&gt;
* [16 Mar 2014] WebSpa has a new contributor – Paweł Goleń. Paweł welcome in the team!&lt;br /&gt;
* [14 Mar 2014] [https://code.google.com/p/web-spa/ Scheduled the deletion of the Google code project, given that downloads require a new account]&lt;br /&gt;
* [04 Mar 2014] [https://soundcloud.com/#owasp-podcast/the-owasp-webspa-project-with The WebSpa podcast has now been available!] &lt;br /&gt;
* [22 Feb 2014] Created the WebSpa project on sourceforge, started the import from Google code&lt;br /&gt;
* [22 Dec 2013] Version 0.6 has been released and can now be found in the download section&lt;br /&gt;
* [08 Nov 2013] The OWASP Web Knocking Project is created&lt;br /&gt;
&lt;br /&gt;
=FAQs=&lt;br /&gt;
&lt;br /&gt;
; What does the ASCII-Art for WebSpa look like?&lt;br /&gt;
                    __                                           &lt;br /&gt;
                   /\ \                                          &lt;br /&gt;
   __  __  __     __\ \ \____             ____  _____      __     &lt;br /&gt;
 /\ \/\ \/\ \  /'__`\ \ '__`\  _______  /',__\/\ '__`\  /'__`\   &lt;br /&gt;
 \ \ \_/ \_/ \/\  __/\ \ \L\ \/\______\/\__, `\ \ \L\ \/\ \L\.\_ &lt;br /&gt;
  \ \___x___/'\ \____\\ \_,__/\/______/\/\____/\ \ ,__/\ \__/.\_\&lt;br /&gt;
   \/__//__/   \/____/ \/___/           \/___/  \ \ \/  \/__/\/_/&lt;br /&gt;
                                                 \ \_\           &lt;br /&gt;
                                                  \/_/           &lt;br /&gt;
&lt;br /&gt;
The font is Larry 3D generated [http://patorjk.com/software/taag/#p=display&amp;amp;f=Larry%203D&amp;amp;t=web-spa here].&lt;br /&gt;
&lt;br /&gt;
; Who are the actors required in order to use the WebSpa tool?&lt;br /&gt;
&lt;br /&gt;
There are two actors, the WebSpa administrator and the WebSpa user. Ultimately, they could be the same person. The administrator agrees with each user what each of their allowed O/S commands are, while the user, well, executes these commands on the server by using the client. &lt;br /&gt;
&lt;br /&gt;
; How does the crypto of WebSpa work?&lt;br /&gt;
: From the perspective of cryptographic engineering, WebSpa uses a hash [http://en.wikipedia.org/wiki/Commitment_scheme commitment scheme], where the commit phase during which a value is chosen is done using an out of band channel. WebSpa focuses on receiving a value specified through a single request from the client and processing it on the server. &lt;br /&gt;
&lt;br /&gt;
; Can one deploy WebSpa over HTTP? &lt;br /&gt;
: Yes, WebSpa can be deployed over HTTP, however for security reasons it is highly recommended to utilize HTTPS.&lt;br /&gt;
&lt;br /&gt;
; How to report a WebSpa bug?&lt;br /&gt;
:To report a WebSpa bug please feel free to create a ticket on the [http://sourceforge.net/p/webspa/tickets/?source=navbar sourceforge.net]. A sourceforge account is necessary. If you don’t own a sourceforge account you may send an e-mail to one of the contributors.&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is developed by a worldwide team of volunteers. Below is a list of all people that have contributed to the project so far.&lt;br /&gt;
&lt;br /&gt;
Active contributors:&lt;br /&gt;
* [[User:Yiannis|Yiannis Pavlosoglou]] - Inception &amp;amp; Development &lt;br /&gt;
* Patryk Arciszewski - Theoretician &amp;amp; Documentation&lt;br /&gt;
* Paweł Goleń - Breaking &amp;amp; Infrastructure &lt;br /&gt;
* Joël Rouiller - Development &amp;amp; Optimisation&lt;br /&gt;
* [[User:Oliver_M.|Oliver Merki]] - Leader &amp;amp; Operations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retired contributors:&lt;br /&gt;
* [[User:Dr. Markus Maria Miedaner|Markus Maria Miedaner]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
&lt;br /&gt;
== Release 0.9 (Q3/2015) == &lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.9 will be major release and include a comprehensive redesign of the WebKnock format in order to improve overall security and robustness of the request. The tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 44	New WebKnock request format should be defined&lt;br /&gt;
 42	Do not limit the web knock to 100 characters, instead use SHA-512 lengths	 &lt;br /&gt;
 35	A threat model for WebSpa should be created and reviewed	 &lt;br /&gt;
 33	Apache should be replaced by nginx	 &lt;br /&gt;
&lt;br /&gt;
== Release 0.85 (Q1/2015) ==&lt;br /&gt;
WebSpa_v0.85 will offer improved usability features, which will simplify installing, configuring and running WebSpa. The tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 40	Log to /​var/​log instead of a log.txt file	&lt;br /&gt;
 15	Add easy way to run the server as a background daemon	  &lt;br /&gt;
&lt;br /&gt;
== Release 0.8 (Q4/2014) ==&lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.8 will be sort of a proof-of-concept of WebSpa. A stable version to demonstrate the concept of WebKnocking, however, with some limitations with regards to usability/configuration and modularity (e.g. changing the hashing algorithm). The tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 43	Change SSL configuration to allow wget&lt;br /&gt;
 41	WebSpa administrator to WebSpa user output	 &lt;br /&gt;
 38	umask 077 should be added to webspa.sh	 &lt;br /&gt;
 32	A known_hosts file should be used to maintain the list of successfully verified keys	 &lt;br /&gt;
 31	Verification of server's public key fingerprint should be possible	 &lt;br /&gt;
 30	Help Files Update (0.8)	 &lt;br /&gt;
 27	Arrays.equals is not a constant time function	 &lt;br /&gt;
 2	Create maven build task for release	 &lt;br /&gt;
&lt;br /&gt;
== [http://sourceforge.net/projects/webspa/files/webspa-07.zip/download Release 0.7 (24/Apr/2014)] ==&lt;br /&gt;
&lt;br /&gt;
This is the current release of WebSpa. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.7 offers enhanced user administration functionality. The WebSpa client now offers the possibility for a user to connect to a web server with an untrusted/self-signed certificate.&lt;br /&gt;
&lt;br /&gt;
 - NEW: The WebSpa client asks the user if they want to connect web servers with untrusted certificates. (Ticket #28) &lt;br /&gt;
 - NEW: Introduced ‘passwd’ command, which allows the WebSpa administrator to modify a user’s password.&lt;br /&gt;
 - NEW: Introduced ‘pass-phrase show’ command, which allows the WebSpa administrator to print a user’s pass-phrase to the screen.&lt;br /&gt;
 - FIXED: Array is no longer sorted, which reduced the entropy of the web-knock. (Ticket #24)&lt;br /&gt;
 - FIXED: Reworked and added test cases.&lt;br /&gt;
 - FIXED: Removed dependency on Spring security. (Ticket #18)&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-06.zip Release 0.6 (21/Dec/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.6 offers enhanced logging functionality, fixing a bug that caused the server to become unresponsive upon starting and stopping. The client now offers to transmit a web knock request, thus not requiring for a user to copy-paste the URL into their browser. &lt;br /&gt;
&lt;br /&gt;
Additional test cases have been added, the option &amp;quot;?&amp;quot; is now available to offer &amp;quot;help&amp;quot; and the log functionality tracks via means of a timestamp all events logged&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-05.zip Release 0.5 (21/Oct/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.5 shortens the number of inputs required from a legitimate user of web-spa to only two: A valid pass-phrase, unique for each user and a single digit in the range of [0-9]. We refer to the latter as an action number and it represents a premeditated Operating System (O/S) command.&lt;br /&gt;
&lt;br /&gt;
All the functionality (for both the client and the server) is now within a single jar file, accompanied by detailed documentation:&lt;br /&gt;
&lt;br /&gt;
 - 00-web-spa-administration-guide.pdf	&lt;br /&gt;
 - 00-web-spa-specification-guide.pdf	&lt;br /&gt;
 - 00-web-spa-user-guide.pdf&lt;br /&gt;
&lt;br /&gt;
The server side functionality has been re-designed to operate with a single configuration file (created at first run) as well as a HyperSQL embedded file database (also created at first run).&lt;br /&gt;
&lt;br /&gt;
Finally, no files are created or are required when web-spa runs in client mode, with the '-client' option.&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-04.zip Release 0.4 (27/Aug/2011)] == &lt;br /&gt;
&lt;br /&gt;
A number of updates and bug fixes have been included within this version. Also, an update on the actual message format to further protect from replay attacks has been included. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.4 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-04.jar&lt;br /&gt;
 * webspa-elements-04.jar&lt;br /&gt;
 * webspa-server-04.jar&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-03.zip Release 0.3 (11/Jul/2011)] ==&lt;br /&gt;
&lt;br /&gt;
In its first usable release, WebSpa _v0.3 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-03.jar&lt;br /&gt;
 * webspa-elements-03.jar&lt;br /&gt;
 * webspa-server-03.jar&lt;br /&gt;
&lt;br /&gt;
== Contribution ==&lt;br /&gt;
&lt;br /&gt;
Involvement in the development and promotion of the OWASP WebSpa Project is actively encouraged!&lt;br /&gt;
You do not have to be a security expert in order to contribute.&lt;br /&gt;
Some of the ways you can help:&lt;br /&gt;
* Quality assurance of resolved defects&lt;br /&gt;
* Java development (good knowledge of Java desirable)&lt;br /&gt;
&lt;br /&gt;
=Project About=&lt;br /&gt;
{{:Projects/OWASP_WebSpa_Project}}  &lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]  [[Category:OWASP_Builders]] [[Category:OWASP_Defenders]]  [[Category:OWASP_Document]]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=183216</id>
		<title>OWASP WebSpa Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=183216"/>
				<updated>2014-10-02T11:48:37Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: /* FAQs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Main=&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;padding: 0;margin:0;margin-top:10px;text-align:left;&amp;quot; |-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
==OWASP WebSpa Project==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is a Java web knocking tool for sending a single HTTP/S request to your web server in order to authorize the execution of a premeditated Operating System (O/S) command. &lt;br /&gt;
It provides a cryptographically protected &amp;quot;open sesame&amp;quot; mechanism on the web application layer, comparable to well-known port-knocking techniques.&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
This project implements the concept of web knocking by offering a jar file that 'tails' the access log of an existing web server. A user submits a specially crafted URL, therefore executing a predefined O/S command. No new ports or services are created.&lt;br /&gt;
&lt;br /&gt;
Similarly to traditional network port-knocking schemes, the OWASP WebSpa Project aims to create a covert channel of communication for O/S commands over the web application layer. This channel is by no means bi-directional: It is only the client that can issue commands to the server. The inverse, i.e. the server issuing commands to the client, is not an option within the current version.&lt;br /&gt;
&lt;br /&gt;
If port knocking is defined as &amp;quot;a form of host-to-host communication in which information flows across closed ports&amp;quot; then we define web knocking as &amp;quot;a form of host-to-host communication in which information flows across erroneous URLs&amp;quot;. Finally, in an attempt to mirror the operation of Single Packet Authorisation (SPA), the entirety of a user's action is submitted through a single GET request.&lt;br /&gt;
&lt;br /&gt;
==Licensing==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is free to use. It is licensed under the http://creativecommons.org/licenses/by-sa/3.0/ Creative Commons Attribution-ShareAlike 3.0 license], so you can copy, distribute and transmit the work, and you can adapt it, and use it commercially, but all provided that you attribute the work and if you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.&lt;br /&gt;
&lt;br /&gt;
The source code that comes with the OWASP WebSpa Project in the form of the tool named WebSpa is released as open source software under the terms of the [http://www.gnu.org/licenses/quick-guide-gplv3.html GNU Public License (GPL) version 3]. For reference, the full text of the GPL_v3 can be downloaded from the [http://www.fsf.org/ Free Software Foundation]. There are no plans to change the license; WebSpa will always remain an open source project free for use by anyone subject to the terms of the license. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== What is WebSpa? ==&lt;br /&gt;
&lt;br /&gt;
OWASP WebSpa provides:&lt;br /&gt;
&lt;br /&gt;
* A secure channel for executing premeditated O/S commands on your web server&lt;br /&gt;
* A resource-efficient single jar-file that can either be run as server, or client application, depending on the command line parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Presentation ==&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/webspa/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;&amp;quot; | &lt;br /&gt;
&lt;br /&gt;
== Quick Download ==&lt;br /&gt;
&lt;br /&gt;
[http://sourceforge.net/projects/webspa/files/webspa-07.zip/download WebSpa v0.7]&lt;br /&gt;
&lt;br /&gt;
==Classifications==&lt;br /&gt;
&lt;br /&gt;
   {| width=&amp;quot;200&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot;| [[File:Owasp-incubator-trans-85.png|link=https://www.owasp.org/index.php/OWASP_Project_Stages#tab=Incubator_Projects]]&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-builders-small.png|link=]]  &lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-defenders-small.png|link=]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Cc-button-y-sa-small.png|link=http://creativecommons.org/licenses/by-sa/3.0/]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Project_Type_Files_CODE.jpg|link=]]&lt;br /&gt;
   |}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Videos =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|S386azVcj-c|300|right|Linux Poweroff on Apache via Web Knocking with Web-Spa (_v0.7) }} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|eHlYnWyf35E|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.5) }} &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|_VU26ZGG7D8|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4 )}} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|pKF_NxHnoyA|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4) }} &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Tutorial =&lt;br /&gt;
&lt;br /&gt;
== Supporting Documentation ==&lt;br /&gt;
&lt;br /&gt;
The discrepant event discussed herein is web knocking. Within the latest [http://sourceforge.net/projects/webspa/files/latest/download?source=directory download] you can find three documents with the purpose of describing how WebSpa can be used. The three documents are:&lt;br /&gt;
&lt;br /&gt;
* ''''WebSpa Administration Guide''' This document describes how to setup and use the server component. It details how to create new users and add new action numbers with respective O/S commands assigned to them&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa Specification Guide''' This document describes the actual design detailing the use case, specification, requirements and actual attacks, which this tool has been engineered to withstand&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa User Guide''' This document describes how to use the client for issuing commands through a URL request to a web server&lt;br /&gt;
&lt;br /&gt;
The administration guide aims to enable anyone who would be interested in using WebSpa to be able to setup the server side component of it. After configuring the server component of WebSpa, you'll be ready to use the corresponding client for issuing direct actions as O/S commands to it.&lt;br /&gt;
&lt;br /&gt;
If this is your first time using WebSpa, please note that the server operations described in this document, will not work if a WebSpa client does not submit a web-knock to your web server in a timely manner.&lt;br /&gt;
&lt;br /&gt;
Thus, knowing a client implementation goes hand-in-hand with a server instance for it, please also have a look at the WebSpa user guide document to see how the two can be used in tandem. &lt;br /&gt;
&lt;br /&gt;
The user guide aims to enable anyone who would be interested in using WebSpa to do so. As soon as you install the server side component and decide what actions to allow, you'll be ready to use the corresponding client for issuing direct actions that work for you.&lt;br /&gt;
&lt;br /&gt;
Finally, the specification guide aims to enable anyone who would be interested in implementing their own version of WebSpa to do so.&lt;br /&gt;
&lt;br /&gt;
== HelloWorld! Enabling SSH via Web Knocking with WebSpa ==&lt;br /&gt;
&lt;br /&gt;
In this section we describe the setup you should follow in order to get to the stage of being able to execute the video entitled: [https://www.youtube.com/watch?v=eHlYnWyf35E Enabling SSH via Web Knocking with WebSpa (_v0.5)] on your server.&lt;br /&gt;
&lt;br /&gt;
We assume you can SSH into your web server using the user 'web-spa'. We also assume that the user 'web-spa' has permissions to run the necessary service start and stop commands for this service. So, let's login to the box and get the latest WebSpa download:&lt;br /&gt;
&lt;br /&gt;
 ssh web-spa@web.spa.seleucus.net&lt;br /&gt;
 web-spa@web:~$ cd /tmp&lt;br /&gt;
 web-spa@web:/tmp$ wget https://downloads.sourceforge.net/project/webspa/webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
It would be wise at this stage to check the SHA1 digest of what we just downloaded. Sourceforge publishes the SHA1 of all files available for download; copying the value into our command prompt yields:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ echo &amp;quot;a630f23f88c49d02b5895a3d7e16aad245c387f3 *webspa-06.zip&amp;quot; | sha1sum -c -&lt;br /&gt;
 webspa-06.zip: OK&lt;br /&gt;
 web-spa@web:/tmp$ &lt;br /&gt;
&lt;br /&gt;
Ok, so we have downloaded something that we can vouch for-ish. Let's extract and setup.&lt;br /&gt;
&lt;br /&gt;
 unzip webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
A lot of noise comes back from this command. Apologies, different groups have clearly stated they have wanted the source code as well the documentation to be included within the download. Let's have a look at the install file:&lt;br /&gt;
&lt;br /&gt;
 =================================================&lt;br /&gt;
 - Prerequisites for WebSpa&lt;br /&gt;
 =================================================&lt;br /&gt;
&lt;br /&gt;
 The following programs must be installed in order&lt;br /&gt;
 for WebSpa to run:&lt;br /&gt;
&lt;br /&gt;
 - Java 1.6 or later&lt;br /&gt;
&lt;br /&gt;
If you don't have java installed, consider using the following command: &lt;br /&gt;
&lt;br /&gt;
 sudo aptitude install openjdk-7-jre&lt;br /&gt;
&lt;br /&gt;
This will meet the one prerequisite for using WebSpa. As this is a production server, docs and src folders will not be missed. Also, we like to store things in /opt, ergo:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/src/&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/docs/&lt;br /&gt;
 web-spa@web:/tmp$ sudo mv -v /tmp/web-spa-0.6/ /opt&lt;br /&gt;
&lt;br /&gt;
We now have WebSpa in /opt, let's run the server and create some users. &lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ cd /opt/web-spa-0.6/&lt;br /&gt;
 web-spa@web:/opt/web-spa-0.6$ java -jar web-spa-0.6.jar -server&lt;br /&gt;
&lt;br /&gt;
 Web-Spa - Single HTTP/S Request Authorisation&lt;br /&gt;
 version 0.6 (web-spa@seleucus.net)&lt;br /&gt;
&lt;br /&gt;
 This is a holding prompt, type &amp;quot;exit&amp;quot; or &amp;quot;x&amp;quot; to quit&lt;br /&gt;
&lt;br /&gt;
 - type &amp;quot;service start&amp;quot; to start the web-spa server&lt;br /&gt;
 - type &amp;quot;help&amp;quot; or &amp;quot;?&amp;quot; for more options&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last line above is the server's holding prompt; all commands are issued via this prompt. In order to exit this prompt, type 'exit' or 'quit'. In the next step we will add 3 users and assign a unique pass-phrase to each one of them. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Yiannis Pavlosoglou&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: yiannis@xxxxxx.com&lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note that only a user's full name and pass-phrase are required to be entered. Let's create another user:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Oliver Merki&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that we did not specify a user's e-mail address nor a phone number, as both these fields were optional. Finally, adding a third user: &lt;br /&gt;
&lt;br /&gt;
  web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Patryk&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Patryk we only specified his first name and a unique pass-phrase. You get the picture. Now that we have created our users, let's add some actions to each user. We would like to give Patryk the ability to bounce the SSH service; ergo, let's add two actions:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh start &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 1&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh start' to action number 1 for user Patryk. Let's also add the stop command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 1  sudo service ssh start          has never been executed&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh stop &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 0&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh stop' to action number 0 for user Patryk. Two very important steps we must not forget is to enable the user Patryk and start the web-spa listening service. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user activate&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 User with ID: 13 is in-active&lt;br /&gt;
 -[Optional] Toggle user activation [Y/n]: &lt;br /&gt;
 User with ID: 13 is active&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 And finally issue the service start command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;service start&lt;br /&gt;
 [2014-02-23 12-36-07] Attempting to start web-spa...&lt;br /&gt;
 [2014-02-23 12-36-07] Found access log file: /...cus.net/logs/access.log&lt;br /&gt;
 [2014-02-23 12-36-07] Creating tail listener...&lt;br /&gt;
 [2014-02-23 12-36-07] Web-spa server started!&lt;br /&gt;
 [2014-02-23 12-36-07] Please make sure your web server is also up&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= News =&lt;br /&gt;
&lt;br /&gt;
* [19 Aug 2014] Our project was featured in the OWASP Connector newsletter. [http://hosted-p0.vresp.com/1479611/4d8d3315c2/ARCHIVE (link)]&lt;br /&gt;
* [07 May 2014] Added four video links in the respective &amp;quot;Video&amp;quot; tab, referencing YouTube&lt;br /&gt;
* [24 Apr 2014] Version 0.7 has been release and can now be found in the download section. Also, we welcome Paweł and Joël to the team.&lt;br /&gt;
* [20 Mar 2014] [http://www.eventbrite.co.uk/e/owasp-london-chapter-meeting-march-2014-tickets-10063386861 WebSpa has been presented during OWASP London Chapter Meeting]&lt;br /&gt;
* [16 Mar 2014] WebSpa has a new contributor – Paweł Goleń. Paweł welcome in the team!&lt;br /&gt;
* [14 Mar 2014] [https://code.google.com/p/web-spa/ Scheduled the deletion of the Google code project, given that downloads require a new account]&lt;br /&gt;
* [04 Mar 2014] [https://soundcloud.com/#owasp-podcast/the-owasp-webspa-project-with The WebSpa podcast has now been available!] &lt;br /&gt;
* [22 Feb 2014] Created the WebSpa project on sourceforge, started the import from Google code&lt;br /&gt;
* [22 Dec 2013] Version 0.6 has been released and can now be found in the download section&lt;br /&gt;
* [08 Nov 2013] The OWASP Web Knocking Project is created&lt;br /&gt;
&lt;br /&gt;
=FAQs=&lt;br /&gt;
&lt;br /&gt;
; What does the ASCII-Art for WebSpa look like?&lt;br /&gt;
                    __                                           &lt;br /&gt;
                   /\ \                                          &lt;br /&gt;
   __  __  __     __\ \ \____             ____  _____      __     &lt;br /&gt;
 /\ \/\ \/\ \  /'__`\ \ '__`\  _______  /',__\/\ '__`\  /'__`\   &lt;br /&gt;
 \ \ \_/ \_/ \/\  __/\ \ \L\ \/\______\/\__, `\ \ \L\ \/\ \L\.\_ &lt;br /&gt;
  \ \___x___/'\ \____\\ \_,__/\/______/\/\____/\ \ ,__/\ \__/.\_\&lt;br /&gt;
   \/__//__/   \/____/ \/___/           \/___/  \ \ \/  \/__/\/_/&lt;br /&gt;
                                                 \ \_\           &lt;br /&gt;
                                                  \/_/           &lt;br /&gt;
&lt;br /&gt;
The font is Larry 3D generated [http://patorjk.com/software/taag/#p=display&amp;amp;f=Larry%203D&amp;amp;t=web-spa here].&lt;br /&gt;
&lt;br /&gt;
; Who are the actors required in order to use the WebSpa tool?&lt;br /&gt;
&lt;br /&gt;
There are two actors, the WebSpa administrator and the WebSpa user. Ultimately, they could be the same person. The administrator agrees with each user what each of their allowed O/S commands are, while the user, well, executes these commands on the server by using the client. &lt;br /&gt;
&lt;br /&gt;
; How does the crypto of WebSpa work?&lt;br /&gt;
: From the perspective of cryptographic engineering, WebSpa uses a hash [http://en.wikipedia.org/wiki/Commitment_scheme commitment scheme], where the commit phase during which a value is chosen is done using an out of band channel. WebSpa focuses on receiving a value specified through a single request from the client and processing it on the server. &lt;br /&gt;
&lt;br /&gt;
; Can one deploy WebSpa over HTTP? &lt;br /&gt;
: Yes, WebSpa can be deployed over HTTP, however for security reasons it is highly recommended to utilize HTTPS.&lt;br /&gt;
&lt;br /&gt;
; How to report a WebSpa bug?&lt;br /&gt;
:To report a WebSpa bug please feel free to create a ticket on the [http://sourceforge.net/p/webspa/tickets/?source=navbar sourceforge.net]. A sourceforge account is necessary. If you don’t own a sourceforge account you may send an e-mail to one of the contributors.&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is developed by a worldwide team of volunteers. Below is a list of all people that have contributed to the project so far.&lt;br /&gt;
&lt;br /&gt;
Active contributors:&lt;br /&gt;
* [[User:Yiannis|Yiannis Pavlosoglou]] - Inception &amp;amp; Development &lt;br /&gt;
* Patryk Arciszewski - Theoretician &amp;amp; Documentation&lt;br /&gt;
* Paweł Goleń - Breaking &amp;amp; Infrastructure &lt;br /&gt;
* Joël Rouiller - Development &amp;amp; Optimisation&lt;br /&gt;
* [[User:Oliver_M.|Oliver Merki]] - Leader &amp;amp; Operations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retired contributors:&lt;br /&gt;
* [[User:Dr. Markus Maria Miedaner|Markus Maria Miedaner]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
&lt;br /&gt;
== Release 0.9 (Q3/2015) == &lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.9 will be major release and include a comprehensive redesign of the WebKnock format in order to improve overall security and robustness of the request. The tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 44	New WebKnock request format should be defined&lt;br /&gt;
 42	Do not limit the web knock to 100 characters, instead use SHA-512 lengths	 &lt;br /&gt;
 35	A threat model for WebSpa should be created and reviewed	 &lt;br /&gt;
 33	Apache should be replaced by nginx	 &lt;br /&gt;
&lt;br /&gt;
== Release 0.85 (Q1/2015) ==&lt;br /&gt;
WebSpa_v0.85 will offer improved usability features, which will simplify installing, configuring and running WebSpa. The tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 40	Log to /​var/​log instead of a log.txt file	&lt;br /&gt;
 15	Add easy way to run the server as a background daemon	  &lt;br /&gt;
&lt;br /&gt;
== Release 0.8 (Q4/2014) ==&lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.8 will be sort of a proof-of-concept of WebSpa. A stable version to demonstrate the concept of WebKnocking, however, with some limitations with regards to usability/configuration and modularity (e.g. changing the hashing algorithm). The tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 43	Change SSL configuration to allow wget&lt;br /&gt;
 41	WebSpa administrator to WebSpa user output	 &lt;br /&gt;
 38	umask 077 should be added to webspa.sh	 &lt;br /&gt;
 32	A known_hosts file should be used to maintain the list of successfully verified keys	 &lt;br /&gt;
 31	Verification of server's public key fingerprint should be possible	 &lt;br /&gt;
 30	Help Files Update (0.8)	 &lt;br /&gt;
 27	Arrays.equals is not a constant time function	 &lt;br /&gt;
 2	Create maven build task for release	 &lt;br /&gt;
&lt;br /&gt;
== [http://sourceforge.net/projects/webspa/files/webspa-07.zip/download Release 0.7 (24/Apr/2014)] ==&lt;br /&gt;
&lt;br /&gt;
This is the current release of WebSpa. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.7 offers enhanced user administration functionality. The WebSpa client now offers the possibility for a user to connect to a web server with an untrusted/self-signed certificate.&lt;br /&gt;
&lt;br /&gt;
 - NEW: The WebSpa client asks the user if he wants to connect web servers with unknown/untrusted/self-signed certificates. (Ticket #28) &lt;br /&gt;
 - NEW: Introduced ‘passwd’ command, which allows the WebSpa administrator to modify a user’s password.&lt;br /&gt;
 - NEW: Introduced ‘pass-phrase show’ command, which allows the WebSpa administrator to print a user’s pass-phrase to the screen.&lt;br /&gt;
 - FIXED: Array is no longer sorted, which reduced the entropy of the web-knock. (Ticket #24)&lt;br /&gt;
 - FIXED: Reworked and added test cases.&lt;br /&gt;
 - FIXED: Removed dependency on Spring security. (Ticket #18)&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-06.zip Release 0.6 (21/Dec/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.6 offers enhanced logging functionality, fixing a bug that caused the server to become unresponsive upon starting and stopping. The client now offers to transmit a web knock request, thus not requiring for a user to copy-paste the URL into their browser. &lt;br /&gt;
&lt;br /&gt;
Additional test cases have been added, the option &amp;quot;?&amp;quot; is now available to offer &amp;quot;help&amp;quot; and the log functionality tracks via means of a timestamp all events logged&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-05.zip Release 0.5 (21/Oct/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.5 shortens the number of inputs required from a legitimate user of web-spa to only two: A valid pass-phrase, unique for each user and a single digit in the range of [0-9]. We refer to the latter as an action number and it represents a premeditated Operating System (O/S) command.&lt;br /&gt;
&lt;br /&gt;
All the functionality (for both the client and the server) is now within a single jar file, accompanied by detailed documentation:&lt;br /&gt;
&lt;br /&gt;
 - 00-web-spa-administration-guide.pdf	&lt;br /&gt;
 - 00-web-spa-specification-guide.pdf	&lt;br /&gt;
 - 00-web-spa-user-guide.pdf&lt;br /&gt;
&lt;br /&gt;
The server side functionality has been re-designed to operate with a single configuration file (created at first run) as well as a HyperSQL embedded file database (also created at first run).&lt;br /&gt;
&lt;br /&gt;
Finally, no files are created or are required when web-spa runs in client mode, with the '-client' option.&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-04.zip Release 0.4 (27/Aug/2011)] == &lt;br /&gt;
&lt;br /&gt;
A number of updates and bug fixes have been included within this version. Also, an update on the actual message format to further protect from replay attacks has been included. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.4 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-04.jar&lt;br /&gt;
 * webspa-elements-04.jar&lt;br /&gt;
 * webspa-server-04.jar&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-03.zip Release 0.3 (11/Jul/2011)] ==&lt;br /&gt;
&lt;br /&gt;
In its first usable release, WebSpa _v0.3 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-03.jar&lt;br /&gt;
 * webspa-elements-03.jar&lt;br /&gt;
 * webspa-server-03.jar&lt;br /&gt;
&lt;br /&gt;
== Contribution ==&lt;br /&gt;
&lt;br /&gt;
Involvement in the development and promotion of the OWASP WebSpa Project is actively encouraged!&lt;br /&gt;
You do not have to be a security expert in order to contribute.&lt;br /&gt;
Some of the ways you can help:&lt;br /&gt;
* Quality assurance of resolved defects&lt;br /&gt;
* Java development (good knowledge of Java desirable)&lt;br /&gt;
&lt;br /&gt;
=Project About=&lt;br /&gt;
{{:Projects/OWASP_WebSpa_Project}}  &lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]  [[Category:OWASP_Builders]] [[Category:OWASP_Defenders]]  [[Category:OWASP_Document]]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=183089</id>
		<title>OWASP WebSpa Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=183089"/>
				<updated>2014-09-30T12:08:05Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: /* People */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Main=&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;padding: 0;margin:0;margin-top:10px;text-align:left;&amp;quot; |-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
==OWASP WebSpa Project==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is a Java web knocking tool for sending a single HTTP/S request to your web server in order to authorize the execution of a premeditated Operating System (O/S) command. &lt;br /&gt;
It provides a cryptographically protected &amp;quot;open sesame&amp;quot; mechanism on the web application layer, comparable to well-known port-knocking techniques.&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
This project implements the concept of web knocking by offering a jar file that 'tails' the access log of an existing web server. A user submits a specially crafted URL, therefore executing a predefined O/S command. No new ports or services are created.&lt;br /&gt;
&lt;br /&gt;
Similarly to traditional network port-knocking schemes, the OWASP WebSpa Project aims to create a covert channel of communication for O/S commands over the web application layer. This channel is by no means bi-directional: It is only the client that can issue commands to the server. The inverse, i.e. the server issuing commands to the client, is not an option within the current version.&lt;br /&gt;
&lt;br /&gt;
If port knocking is defined as &amp;quot;a form of host-to-host communication in which information flows across closed ports&amp;quot; then we define web knocking as &amp;quot;a form of host-to-host communication in which information flows across erroneous URLs&amp;quot;. Finally, in an attempt to mirror the operation of Single Packet Authorisation (SPA), the entirety of a user's action is submitted through a single GET request.&lt;br /&gt;
&lt;br /&gt;
==Licensing==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is free to use. It is licensed under the http://creativecommons.org/licenses/by-sa/3.0/ Creative Commons Attribution-ShareAlike 3.0 license], so you can copy, distribute and transmit the work, and you can adapt it, and use it commercially, but all provided that you attribute the work and if you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.&lt;br /&gt;
&lt;br /&gt;
The source code that comes with the OWASP WebSpa Project in the form of the tool named WebSpa is released as open source software under the terms of the [http://www.gnu.org/licenses/quick-guide-gplv3.html GNU Public License (GPL) version 3]. For reference, the full text of the GPL_v3 can be downloaded from the [http://www.fsf.org/ Free Software Foundation]. There are no plans to change the license; WebSpa will always remain an open source project free for use by anyone subject to the terms of the license. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== What is WebSpa? ==&lt;br /&gt;
&lt;br /&gt;
OWASP WebSpa provides:&lt;br /&gt;
&lt;br /&gt;
* A secure channel for executing premeditated O/S commands on your web server&lt;br /&gt;
* A resource-efficient single jar-file that can either be run as server, or client application, depending on the command line parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Presentation ==&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/webspa/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;&amp;quot; | &lt;br /&gt;
&lt;br /&gt;
== Quick Download ==&lt;br /&gt;
&lt;br /&gt;
[http://sourceforge.net/projects/webspa/files/webspa-07.zip/download WebSpa v0.7]&lt;br /&gt;
&lt;br /&gt;
==Classifications==&lt;br /&gt;
&lt;br /&gt;
   {| width=&amp;quot;200&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot;| [[File:Owasp-incubator-trans-85.png|link=https://www.owasp.org/index.php/OWASP_Project_Stages#tab=Incubator_Projects]]&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-builders-small.png|link=]]  &lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-defenders-small.png|link=]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Cc-button-y-sa-small.png|link=http://creativecommons.org/licenses/by-sa/3.0/]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Project_Type_Files_CODE.jpg|link=]]&lt;br /&gt;
   |}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Videos =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|S386azVcj-c|300|right|Linux Poweroff on Apache via Web Knocking with Web-Spa (_v0.7) }} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|eHlYnWyf35E|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.5) }} &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|_VU26ZGG7D8|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4 )}} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|pKF_NxHnoyA|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4) }} &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Tutorial =&lt;br /&gt;
&lt;br /&gt;
== Supporting Documentation ==&lt;br /&gt;
&lt;br /&gt;
The discrepant event discussed herein is web knocking. Within the latest [http://sourceforge.net/projects/webspa/files/latest/download?source=directory download] you can find three documents with the purpose of describing how WebSpa can be used. The three documents are:&lt;br /&gt;
&lt;br /&gt;
* ''''WebSpa Administration Guide''' This document describes how to setup and use the server component. It details how to create new users and add new action numbers with respective O/S commands assigned to them&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa Specification Guide''' This document describes the actual design detailing the use case, specification, requirements and actual attacks, which this tool has been engineered to withstand&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa User Guide''' This document describes how to use the client for issuing commands through a URL request to a web server&lt;br /&gt;
&lt;br /&gt;
The administration guide aims to enable anyone who would be interested in using WebSpa to be able to setup the server side component of it. After configuring the server component of WebSpa, you'll be ready to use the corresponding client for issuing direct actions as O/S commands to it.&lt;br /&gt;
&lt;br /&gt;
If this is your first time using WebSpa, please note that the server operations described in this document, will not work if a WebSpa client does not submit a web-knock to your web server in a timely manner.&lt;br /&gt;
&lt;br /&gt;
Thus, knowing a client implementation goes hand-in-hand with a server instance for it, please also have a look at the WebSpa user guide document to see how the two can be used in tandem. &lt;br /&gt;
&lt;br /&gt;
The user guide aims to enable anyone who would be interested in using WebSpa to do so. As soon as you install the server side component and decide what actions to allow, you'll be ready to use the corresponding client for issuing direct actions that work for you.&lt;br /&gt;
&lt;br /&gt;
Finally, the specification guide aims to enable anyone who would be interested in implementing their own version of WebSpa to do so.&lt;br /&gt;
&lt;br /&gt;
== HelloWorld! Enabling SSH via Web Knocking with WebSpa ==&lt;br /&gt;
&lt;br /&gt;
In this section we describe the setup you should follow in order to get to the stage of being able to execute the video entitled: [https://www.youtube.com/watch?v=eHlYnWyf35E Enabling SSH via Web Knocking with WebSpa (_v0.5)] on your server.&lt;br /&gt;
&lt;br /&gt;
We assume you can SSH into your web server using the user 'web-spa'. We also assume that the user 'web-spa' has permissions to run the necessary service start and stop commands for this service. So, let's login to the box and get the latest WebSpa download:&lt;br /&gt;
&lt;br /&gt;
 ssh web-spa@web.spa.seleucus.net&lt;br /&gt;
 web-spa@web:~$ cd /tmp&lt;br /&gt;
 web-spa@web:/tmp$ wget https://downloads.sourceforge.net/project/webspa/webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
It would be wise at this stage to check the SHA1 digest of what we just downloaded. Sourceforge publishes the SHA1 of all files available for download; copying the value into our command prompt yields:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ echo &amp;quot;a630f23f88c49d02b5895a3d7e16aad245c387f3 *webspa-06.zip&amp;quot; | sha1sum -c -&lt;br /&gt;
 webspa-06.zip: OK&lt;br /&gt;
 web-spa@web:/tmp$ &lt;br /&gt;
&lt;br /&gt;
Ok, so we have downloaded something that we can vouch for-ish. Let's extract and setup.&lt;br /&gt;
&lt;br /&gt;
 unzip webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
A lot of noise comes back from this command. Apologies, different groups have clearly stated they have wanted the source code as well the documentation to be included within the download. Let's have a look at the install file:&lt;br /&gt;
&lt;br /&gt;
 =================================================&lt;br /&gt;
 - Prerequisites for WebSpa&lt;br /&gt;
 =================================================&lt;br /&gt;
&lt;br /&gt;
 The following programs must be installed in order&lt;br /&gt;
 for WebSpa to run:&lt;br /&gt;
&lt;br /&gt;
 - Java 1.6 or later&lt;br /&gt;
&lt;br /&gt;
If you don't have java installed, consider using the following command: &lt;br /&gt;
&lt;br /&gt;
 sudo aptitude install openjdk-7-jre&lt;br /&gt;
&lt;br /&gt;
This will meet the one prerequisite for using WebSpa. As this is a production server, docs and src folders will not be missed. Also, we like to store things in /opt, ergo:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/src/&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/docs/&lt;br /&gt;
 web-spa@web:/tmp$ sudo mv -v /tmp/web-spa-0.6/ /opt&lt;br /&gt;
&lt;br /&gt;
We now have WebSpa in /opt, let's run the server and create some users. &lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ cd /opt/web-spa-0.6/&lt;br /&gt;
 web-spa@web:/opt/web-spa-0.6$ java -jar web-spa-0.6.jar -server&lt;br /&gt;
&lt;br /&gt;
 Web-Spa - Single HTTP/S Request Authorisation&lt;br /&gt;
 version 0.6 (web-spa@seleucus.net)&lt;br /&gt;
&lt;br /&gt;
 This is a holding prompt, type &amp;quot;exit&amp;quot; or &amp;quot;x&amp;quot; to quit&lt;br /&gt;
&lt;br /&gt;
 - type &amp;quot;service start&amp;quot; to start the web-spa server&lt;br /&gt;
 - type &amp;quot;help&amp;quot; or &amp;quot;?&amp;quot; for more options&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last line above is the server's holding prompt; all commands are issued via this prompt. In order to exit this prompt, type 'exit' or 'quit'. In the next step we will add 3 users and assign a unique pass-phrase to each one of them. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Yiannis Pavlosoglou&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: yiannis@xxxxxx.com&lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note that only a user's full name and pass-phrase are required to be entered. Let's create another user:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Oliver Merki&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that we did not specify a user's e-mail address nor a phone number, as both these fields were optional. Finally, adding a third user: &lt;br /&gt;
&lt;br /&gt;
  web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Patryk&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Patryk we only specified his first name and a unique pass-phrase. You get the picture. Now that we have created our users, let's add some actions to each user. We would like to give Patryk the ability to bounce the SSH service; ergo, let's add two actions:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh start &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 1&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh start' to action number 1 for user Patryk. Let's also add the stop command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 1  sudo service ssh start          has never been executed&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh stop &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 0&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh stop' to action number 0 for user Patryk. Two very important steps we must not forget is to enable the user Patryk and start the web-spa listening service. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user activate&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 User with ID: 13 is in-active&lt;br /&gt;
 -[Optional] Toggle user activation [Y/n]: &lt;br /&gt;
 User with ID: 13 is active&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 And finally issue the service start command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;service start&lt;br /&gt;
 [2014-02-23 12-36-07] Attempting to start web-spa...&lt;br /&gt;
 [2014-02-23 12-36-07] Found access log file: /...cus.net/logs/access.log&lt;br /&gt;
 [2014-02-23 12-36-07] Creating tail listener...&lt;br /&gt;
 [2014-02-23 12-36-07] Web-spa server started!&lt;br /&gt;
 [2014-02-23 12-36-07] Please make sure your web server is also up&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= News =&lt;br /&gt;
&lt;br /&gt;
* [19 Aug 2014] Our project was featured in the OWASP Connector newsletter. [http://hosted-p0.vresp.com/1479611/4d8d3315c2/ARCHIVE (link)]&lt;br /&gt;
* [07 May 2014] Added four video links in the respective &amp;quot;Video&amp;quot; tab, referencing YouTube&lt;br /&gt;
* [24 Apr 2014] Version 0.7 has been release and can now be found in the download section. Also, we welcome Paweł and Joël to the team.&lt;br /&gt;
* [20 Mar 2014] [http://www.eventbrite.co.uk/e/owasp-london-chapter-meeting-march-2014-tickets-10063386861 WebSpa has been presented during OWASP London Chapter Meeting]&lt;br /&gt;
* [16 Mar 2014] WebSpa has a new contributor – Paweł Goleń. Paweł welcome in the team!&lt;br /&gt;
* [14 Mar 2014] [https://code.google.com/p/web-spa/ Scheduled the deletion of the Google code project, given that downloads require a new account]&lt;br /&gt;
* [04 Mar 2014] [https://soundcloud.com/#owasp-podcast/the-owasp-webspa-project-with The WebSpa podcast has now been available!] &lt;br /&gt;
* [22 Feb 2014] Created the WebSpa project on sourceforge, started the import from Google code&lt;br /&gt;
* [22 Dec 2013] Version 0.6 has been released and can now be found in the download section&lt;br /&gt;
* [08 Nov 2013] The OWASP Web Knocking Project is created&lt;br /&gt;
&lt;br /&gt;
=FAQs=&lt;br /&gt;
&lt;br /&gt;
; Who are the actors required in order to use the WebSpa tool?&lt;br /&gt;
&lt;br /&gt;
There are two actors, the WebSpa administrator and the WebSpa user. Ultimately, they could be the same person. The administrator agrees with each user what each of their allowed O/S commands are, while the user, well, executes these commands on the server by using the client. &lt;br /&gt;
&lt;br /&gt;
; How does the crypto of WebSpa work?&lt;br /&gt;
: From the perspective of cryptographic engineering, WebSpa uses a hash [http://en.wikipedia.org/wiki/Commitment_scheme commitment scheme], where the commit phase during which a value is chosen is done using an out of band channel. WebSpa focuses on receiving a value specified through a single request from the client and processing it on the server. &lt;br /&gt;
&lt;br /&gt;
; Can one deploy WebSpa over HTTP? &lt;br /&gt;
: Yes, WebSpa can be deployed over HTTP, however for security reasons it is highly recommended to utilize HTTPS.&lt;br /&gt;
&lt;br /&gt;
; How to report a WebSpa bug?&lt;br /&gt;
:To report a WebSpa bug please feel free to create a ticket on the [http://sourceforge.net/p/webspa/tickets/?source=navbar sourceforge.net]. A sourceforge account is necessary. If you don’t own a sourceforge account you may send an e-mail to one of the contributors.&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is developed by a worldwide team of volunteers. Below is a list of all people that have contributed to the project so far.&lt;br /&gt;
&lt;br /&gt;
Active contributors:&lt;br /&gt;
* [[User:Yiannis|Yiannis Pavlosoglou]] - Inception &amp;amp; Development &lt;br /&gt;
* Patryk Arciszewski - Theoretician &amp;amp; Documentation&lt;br /&gt;
* Paweł Goleń - Breaking &amp;amp; Infrastructure &lt;br /&gt;
* Joël Rouiller - Development &amp;amp; Optimisation&lt;br /&gt;
* [[User:Oliver_M.|Oliver Merki]] - Leader &amp;amp; Operations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retired contributors:&lt;br /&gt;
* [[User:Dr. Markus Maria Miedaner|Markus Maria Miedaner]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
&lt;br /&gt;
== Release 0.9 (Q3/2015) == &lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.9 will be major release and include a comprehensive redesign of the WebKnock format in order to improve overall security and robustness of the request. The tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 44	New WebKnock request format should be defined&lt;br /&gt;
 42	Do not limit the web knock to 100 characters, instead use SHA-512 lengths	 &lt;br /&gt;
 35	A threat model for WebSpa should be created and reviewed	 &lt;br /&gt;
 33	Apache should be replaced by nginx	 &lt;br /&gt;
&lt;br /&gt;
== Release 0.85 (Q1/2015) ==&lt;br /&gt;
WebSpa_v0.85 will offer improved usability features, which will simplify installing, configuring and running WebSpa. The tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 40	Log to /​var/​log instead of a log.txt file	&lt;br /&gt;
 15	Add easy way to run the server as a background daemon	  &lt;br /&gt;
&lt;br /&gt;
== Release 0.8 (Q4/2014) ==&lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.8 will be sort of a proof-of-concept of WebSpa. A stable version to demonstrate the concept of WebKnocking, however, with some limitations with regards to usability/configuration and modularity (e.g. changing the hashing algorithm). The tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 43	Change SSL configuration to allow wget&lt;br /&gt;
 41	WebSpa administrator to WebSpa user output	 &lt;br /&gt;
 38	umask 077 should be added to webspa.sh	 &lt;br /&gt;
 32	A known_hosts file should be used to maintain the list of successfully verified keys	 &lt;br /&gt;
 31	Verification of server's public key fingerprint should be possible	 &lt;br /&gt;
 30	Help Files Update (0.8)	 &lt;br /&gt;
 27	Arrays.equals is not a constant time function	 &lt;br /&gt;
 2	Create maven build task for release	 &lt;br /&gt;
&lt;br /&gt;
== [http://sourceforge.net/projects/webspa/files/webspa-07.zip/download Release 0.7 (24/Apr/2014)] ==&lt;br /&gt;
&lt;br /&gt;
This is the current release of WebSpa. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.7 offers enhanced user administration functionality. The WebSpa client now offers the possibility for a user to connect to a web server with an untrusted/self-signed certificate.&lt;br /&gt;
&lt;br /&gt;
 - NEW: The WebSpa client asks the user if he wants to connect web servers with unknown/untrusted/self-signed certificates. (Ticket #28) &lt;br /&gt;
 - NEW: Introduced ‘passwd’ command, which allows the WebSpa administrator to modify a user’s password.&lt;br /&gt;
 - NEW: Introduced ‘pass-phrase show’ command, which allows the WebSpa administrator to print a user’s pass-phrase to the screen.&lt;br /&gt;
 - FIXED: Array is no longer sorted, which reduced the entropy of the web-knock. (Ticket #24)&lt;br /&gt;
 - FIXED: Reworked and added test cases.&lt;br /&gt;
 - FIXED: Removed dependency on Spring security. (Ticket #18)&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-06.zip Release 0.6 (21/Dec/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.6 offers enhanced logging functionality, fixing a bug that caused the server to become unresponsive upon starting and stopping. The client now offers to transmit a web knock request, thus not requiring for a user to copy-paste the URL into their browser. &lt;br /&gt;
&lt;br /&gt;
Additional test cases have been added, the option &amp;quot;?&amp;quot; is now available to offer &amp;quot;help&amp;quot; and the log functionality tracks via means of a timestamp all events logged&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-05.zip Release 0.5 (21/Oct/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.5 shortens the number of inputs required from a legitimate user of web-spa to only two: A valid pass-phrase, unique for each user and a single digit in the range of [0-9]. We refer to the latter as an action number and it represents a premeditated Operating System (O/S) command.&lt;br /&gt;
&lt;br /&gt;
All the functionality (for both the client and the server) is now within a single jar file, accompanied by detailed documentation:&lt;br /&gt;
&lt;br /&gt;
 - 00-web-spa-administration-guide.pdf	&lt;br /&gt;
 - 00-web-spa-specification-guide.pdf	&lt;br /&gt;
 - 00-web-spa-user-guide.pdf&lt;br /&gt;
&lt;br /&gt;
The server side functionality has been re-designed to operate with a single configuration file (created at first run) as well as a HyperSQL embedded file database (also created at first run).&lt;br /&gt;
&lt;br /&gt;
Finally, no files are created or are required when web-spa runs in client mode, with the '-client' option.&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-04.zip Release 0.4 (27/Aug/2011)] == &lt;br /&gt;
&lt;br /&gt;
A number of updates and bug fixes have been included within this version. Also, an update on the actual message format to further protect from replay attacks has been included. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.4 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-04.jar&lt;br /&gt;
 * webspa-elements-04.jar&lt;br /&gt;
 * webspa-server-04.jar&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-03.zip Release 0.3 (11/Jul/2011)] ==&lt;br /&gt;
&lt;br /&gt;
In its first usable release, WebSpa _v0.3 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-03.jar&lt;br /&gt;
 * webspa-elements-03.jar&lt;br /&gt;
 * webspa-server-03.jar&lt;br /&gt;
&lt;br /&gt;
== Contribution ==&lt;br /&gt;
&lt;br /&gt;
Involvement in the development and promotion of the OWASP WebSpa Project is actively encouraged!&lt;br /&gt;
You do not have to be a security expert in order to contribute.&lt;br /&gt;
Some of the ways you can help:&lt;br /&gt;
* Quality assurance of resolved defects&lt;br /&gt;
* Java development (good knowledge of Java desirable)&lt;br /&gt;
&lt;br /&gt;
=Project About=&lt;br /&gt;
{{:Projects/OWASP_WebSpa_Project}}  &lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]  [[Category:OWASP_Builders]] [[Category:OWASP_Defenders]]  [[Category:OWASP_Document]]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=183088</id>
		<title>OWASP WebSpa Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=183088"/>
				<updated>2014-09-30T12:07:26Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: /* People */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Main=&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;padding: 0;margin:0;margin-top:10px;text-align:left;&amp;quot; |-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
==OWASP WebSpa Project==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is a Java web knocking tool for sending a single HTTP/S request to your web server in order to authorize the execution of a premeditated Operating System (O/S) command. &lt;br /&gt;
It provides a cryptographically protected &amp;quot;open sesame&amp;quot; mechanism on the web application layer, comparable to well-known port-knocking techniques.&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
This project implements the concept of web knocking by offering a jar file that 'tails' the access log of an existing web server. A user submits a specially crafted URL, therefore executing a predefined O/S command. No new ports or services are created.&lt;br /&gt;
&lt;br /&gt;
Similarly to traditional network port-knocking schemes, the OWASP WebSpa Project aims to create a covert channel of communication for O/S commands over the web application layer. This channel is by no means bi-directional: It is only the client that can issue commands to the server. The inverse, i.e. the server issuing commands to the client, is not an option within the current version.&lt;br /&gt;
&lt;br /&gt;
If port knocking is defined as &amp;quot;a form of host-to-host communication in which information flows across closed ports&amp;quot; then we define web knocking as &amp;quot;a form of host-to-host communication in which information flows across erroneous URLs&amp;quot;. Finally, in an attempt to mirror the operation of Single Packet Authorisation (SPA), the entirety of a user's action is submitted through a single GET request.&lt;br /&gt;
&lt;br /&gt;
==Licensing==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is free to use. It is licensed under the http://creativecommons.org/licenses/by-sa/3.0/ Creative Commons Attribution-ShareAlike 3.0 license], so you can copy, distribute and transmit the work, and you can adapt it, and use it commercially, but all provided that you attribute the work and if you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.&lt;br /&gt;
&lt;br /&gt;
The source code that comes with the OWASP WebSpa Project in the form of the tool named WebSpa is released as open source software under the terms of the [http://www.gnu.org/licenses/quick-guide-gplv3.html GNU Public License (GPL) version 3]. For reference, the full text of the GPL_v3 can be downloaded from the [http://www.fsf.org/ Free Software Foundation]. There are no plans to change the license; WebSpa will always remain an open source project free for use by anyone subject to the terms of the license. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== What is WebSpa? ==&lt;br /&gt;
&lt;br /&gt;
OWASP WebSpa provides:&lt;br /&gt;
&lt;br /&gt;
* A secure channel for executing premeditated O/S commands on your web server&lt;br /&gt;
* A resource-efficient single jar-file that can either be run as server, or client application, depending on the command line parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Presentation ==&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/webspa/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;&amp;quot; | &lt;br /&gt;
&lt;br /&gt;
== Quick Download ==&lt;br /&gt;
&lt;br /&gt;
[http://sourceforge.net/projects/webspa/files/webspa-07.zip/download WebSpa v0.7]&lt;br /&gt;
&lt;br /&gt;
==Classifications==&lt;br /&gt;
&lt;br /&gt;
   {| width=&amp;quot;200&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot;| [[File:Owasp-incubator-trans-85.png|link=https://www.owasp.org/index.php/OWASP_Project_Stages#tab=Incubator_Projects]]&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-builders-small.png|link=]]  &lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-defenders-small.png|link=]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Cc-button-y-sa-small.png|link=http://creativecommons.org/licenses/by-sa/3.0/]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Project_Type_Files_CODE.jpg|link=]]&lt;br /&gt;
   |}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Videos =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|S386azVcj-c|300|right|Linux Poweroff on Apache via Web Knocking with Web-Spa (_v0.7) }} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|eHlYnWyf35E|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.5) }} &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|_VU26ZGG7D8|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4 )}} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|pKF_NxHnoyA|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4) }} &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Tutorial =&lt;br /&gt;
&lt;br /&gt;
== Supporting Documentation ==&lt;br /&gt;
&lt;br /&gt;
The discrepant event discussed herein is web knocking. Within the latest [http://sourceforge.net/projects/webspa/files/latest/download?source=directory download] you can find three documents with the purpose of describing how WebSpa can be used. The three documents are:&lt;br /&gt;
&lt;br /&gt;
* ''''WebSpa Administration Guide''' This document describes how to setup and use the server component. It details how to create new users and add new action numbers with respective O/S commands assigned to them&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa Specification Guide''' This document describes the actual design detailing the use case, specification, requirements and actual attacks, which this tool has been engineered to withstand&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa User Guide''' This document describes how to use the client for issuing commands through a URL request to a web server&lt;br /&gt;
&lt;br /&gt;
The administration guide aims to enable anyone who would be interested in using WebSpa to be able to setup the server side component of it. After configuring the server component of WebSpa, you'll be ready to use the corresponding client for issuing direct actions as O/S commands to it.&lt;br /&gt;
&lt;br /&gt;
If this is your first time using WebSpa, please note that the server operations described in this document, will not work if a WebSpa client does not submit a web-knock to your web server in a timely manner.&lt;br /&gt;
&lt;br /&gt;
Thus, knowing a client implementation goes hand-in-hand with a server instance for it, please also have a look at the WebSpa user guide document to see how the two can be used in tandem. &lt;br /&gt;
&lt;br /&gt;
The user guide aims to enable anyone who would be interested in using WebSpa to do so. As soon as you install the server side component and decide what actions to allow, you'll be ready to use the corresponding client for issuing direct actions that work for you.&lt;br /&gt;
&lt;br /&gt;
Finally, the specification guide aims to enable anyone who would be interested in implementing their own version of WebSpa to do so.&lt;br /&gt;
&lt;br /&gt;
== HelloWorld! Enabling SSH via Web Knocking with WebSpa ==&lt;br /&gt;
&lt;br /&gt;
In this section we describe the setup you should follow in order to get to the stage of being able to execute the video entitled: [https://www.youtube.com/watch?v=eHlYnWyf35E Enabling SSH via Web Knocking with WebSpa (_v0.5)] on your server.&lt;br /&gt;
&lt;br /&gt;
We assume you can SSH into your web server using the user 'web-spa'. We also assume that the user 'web-spa' has permissions to run the necessary service start and stop commands for this service. So, let's login to the box and get the latest WebSpa download:&lt;br /&gt;
&lt;br /&gt;
 ssh web-spa@web.spa.seleucus.net&lt;br /&gt;
 web-spa@web:~$ cd /tmp&lt;br /&gt;
 web-spa@web:/tmp$ wget https://downloads.sourceforge.net/project/webspa/webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
It would be wise at this stage to check the SHA1 digest of what we just downloaded. Sourceforge publishes the SHA1 of all files available for download; copying the value into our command prompt yields:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ echo &amp;quot;a630f23f88c49d02b5895a3d7e16aad245c387f3 *webspa-06.zip&amp;quot; | sha1sum -c -&lt;br /&gt;
 webspa-06.zip: OK&lt;br /&gt;
 web-spa@web:/tmp$ &lt;br /&gt;
&lt;br /&gt;
Ok, so we have downloaded something that we can vouch for-ish. Let's extract and setup.&lt;br /&gt;
&lt;br /&gt;
 unzip webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
A lot of noise comes back from this command. Apologies, different groups have clearly stated they have wanted the source code as well the documentation to be included within the download. Let's have a look at the install file:&lt;br /&gt;
&lt;br /&gt;
 =================================================&lt;br /&gt;
 - Prerequisites for WebSpa&lt;br /&gt;
 =================================================&lt;br /&gt;
&lt;br /&gt;
 The following programs must be installed in order&lt;br /&gt;
 for WebSpa to run:&lt;br /&gt;
&lt;br /&gt;
 - Java 1.6 or later&lt;br /&gt;
&lt;br /&gt;
If you don't have java installed, consider using the following command: &lt;br /&gt;
&lt;br /&gt;
 sudo aptitude install openjdk-7-jre&lt;br /&gt;
&lt;br /&gt;
This will meet the one prerequisite for using WebSpa. As this is a production server, docs and src folders will not be missed. Also, we like to store things in /opt, ergo:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/src/&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/docs/&lt;br /&gt;
 web-spa@web:/tmp$ sudo mv -v /tmp/web-spa-0.6/ /opt&lt;br /&gt;
&lt;br /&gt;
We now have WebSpa in /opt, let's run the server and create some users. &lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ cd /opt/web-spa-0.6/&lt;br /&gt;
 web-spa@web:/opt/web-spa-0.6$ java -jar web-spa-0.6.jar -server&lt;br /&gt;
&lt;br /&gt;
 Web-Spa - Single HTTP/S Request Authorisation&lt;br /&gt;
 version 0.6 (web-spa@seleucus.net)&lt;br /&gt;
&lt;br /&gt;
 This is a holding prompt, type &amp;quot;exit&amp;quot; or &amp;quot;x&amp;quot; to quit&lt;br /&gt;
&lt;br /&gt;
 - type &amp;quot;service start&amp;quot; to start the web-spa server&lt;br /&gt;
 - type &amp;quot;help&amp;quot; or &amp;quot;?&amp;quot; for more options&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last line above is the server's holding prompt; all commands are issued via this prompt. In order to exit this prompt, type 'exit' or 'quit'. In the next step we will add 3 users and assign a unique pass-phrase to each one of them. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Yiannis Pavlosoglou&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: yiannis@xxxxxx.com&lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note that only a user's full name and pass-phrase are required to be entered. Let's create another user:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Oliver Merki&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that we did not specify a user's e-mail address nor a phone number, as both these fields were optional. Finally, adding a third user: &lt;br /&gt;
&lt;br /&gt;
  web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Patryk&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Patryk we only specified his first name and a unique pass-phrase. You get the picture. Now that we have created our users, let's add some actions to each user. We would like to give Patryk the ability to bounce the SSH service; ergo, let's add two actions:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh start &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 1&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh start' to action number 1 for user Patryk. Let's also add the stop command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 1  sudo service ssh start          has never been executed&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh stop &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 0&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh stop' to action number 0 for user Patryk. Two very important steps we must not forget is to enable the user Patryk and start the web-spa listening service. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user activate&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 User with ID: 13 is in-active&lt;br /&gt;
 -[Optional] Toggle user activation [Y/n]: &lt;br /&gt;
 User with ID: 13 is active&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 And finally issue the service start command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;service start&lt;br /&gt;
 [2014-02-23 12-36-07] Attempting to start web-spa...&lt;br /&gt;
 [2014-02-23 12-36-07] Found access log file: /...cus.net/logs/access.log&lt;br /&gt;
 [2014-02-23 12-36-07] Creating tail listener...&lt;br /&gt;
 [2014-02-23 12-36-07] Web-spa server started!&lt;br /&gt;
 [2014-02-23 12-36-07] Please make sure your web server is also up&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= News =&lt;br /&gt;
&lt;br /&gt;
* [19 Aug 2014] Our project was featured in the OWASP Connector newsletter. [http://hosted-p0.vresp.com/1479611/4d8d3315c2/ARCHIVE (link)]&lt;br /&gt;
* [07 May 2014] Added four video links in the respective &amp;quot;Video&amp;quot; tab, referencing YouTube&lt;br /&gt;
* [24 Apr 2014] Version 0.7 has been release and can now be found in the download section. Also, we welcome Paweł and Joël to the team.&lt;br /&gt;
* [20 Mar 2014] [http://www.eventbrite.co.uk/e/owasp-london-chapter-meeting-march-2014-tickets-10063386861 WebSpa has been presented during OWASP London Chapter Meeting]&lt;br /&gt;
* [16 Mar 2014] WebSpa has a new contributor – Paweł Goleń. Paweł welcome in the team!&lt;br /&gt;
* [14 Mar 2014] [https://code.google.com/p/web-spa/ Scheduled the deletion of the Google code project, given that downloads require a new account]&lt;br /&gt;
* [04 Mar 2014] [https://soundcloud.com/#owasp-podcast/the-owasp-webspa-project-with The WebSpa podcast has now been available!] &lt;br /&gt;
* [22 Feb 2014] Created the WebSpa project on sourceforge, started the import from Google code&lt;br /&gt;
* [22 Dec 2013] Version 0.6 has been released and can now be found in the download section&lt;br /&gt;
* [08 Nov 2013] The OWASP Web Knocking Project is created&lt;br /&gt;
&lt;br /&gt;
=FAQs=&lt;br /&gt;
&lt;br /&gt;
; Who are the actors required in order to use the WebSpa tool?&lt;br /&gt;
&lt;br /&gt;
There are two actors, the WebSpa administrator and the WebSpa user. Ultimately, they could be the same person. The administrator agrees with each user what each of their allowed O/S commands are, while the user, well, executes these commands on the server by using the client. &lt;br /&gt;
&lt;br /&gt;
; How does the crypto of WebSpa work?&lt;br /&gt;
: From the perspective of cryptographic engineering, WebSpa uses a hash [http://en.wikipedia.org/wiki/Commitment_scheme commitment scheme], where the commit phase during which a value is chosen is done using an out of band channel. WebSpa focuses on receiving a value specified through a single request from the client and processing it on the server. &lt;br /&gt;
&lt;br /&gt;
; Can one deploy WebSpa over HTTP? &lt;br /&gt;
: Yes, WebSpa can be deployed over HTTP, however for security reasons it is highly recommended to utilize HTTPS.&lt;br /&gt;
&lt;br /&gt;
; How to report a WebSpa bug?&lt;br /&gt;
:To report a WebSpa bug please feel free to create a ticket on the [http://sourceforge.net/p/webspa/tickets/?source=navbar sourceforge.net]. A sourceforge account is necessary. If you don’t own a sourceforge account you may send an e-mail to one of the contributors.&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is developed by a worldwide team of volunteers. Below is a list of all people that have contributed to the project so far.&lt;br /&gt;
&lt;br /&gt;
Active contributors:&lt;br /&gt;
* [[User:Yiannis|Yiannis Pavlosoglou]] - Inception &amp;amp; Development &lt;br /&gt;
* Patryk Arciszewski - Theoretician &amp;amp; Documentation&lt;br /&gt;
* Paweł Goleń - Breaking &amp;amp; Infrastructure &lt;br /&gt;
* Joël Rouiller - Development &amp;amp; Optimisation&lt;br /&gt;
* [[User:Oliver_M|Oliver Merki]] - Leader &amp;amp; Operations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retired contributors:&lt;br /&gt;
* [[User:Dr. Markus Maria Miedaner|Markus Maria Miedaner]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
&lt;br /&gt;
== Release 0.9 (Q3/2015) == &lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.9 will be major release and include a comprehensive redesign of the WebKnock format in order to improve overall security and robustness of the request. The tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 44	New WebKnock request format should be defined&lt;br /&gt;
 42	Do not limit the web knock to 100 characters, instead use SHA-512 lengths	 &lt;br /&gt;
 35	A threat model for WebSpa should be created and reviewed	 &lt;br /&gt;
 33	Apache should be replaced by nginx	 &lt;br /&gt;
&lt;br /&gt;
== Release 0.85 (Q1/2015) ==&lt;br /&gt;
WebSpa_v0.85 will offer improved usability features, which will simplify installing, configuring and running WebSpa. The tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 40	Log to /​var/​log instead of a log.txt file	&lt;br /&gt;
 15	Add easy way to run the server as a background daemon	  &lt;br /&gt;
&lt;br /&gt;
== Release 0.8 (Q4/2014) ==&lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.8 will be sort of a proof-of-concept of WebSpa. A stable version to demonstrate the concept of WebKnocking, however, with some limitations with regards to usability/configuration and modularity (e.g. changing the hashing algorithm). The tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 43	Change SSL configuration to allow wget&lt;br /&gt;
 41	WebSpa administrator to WebSpa user output	 &lt;br /&gt;
 38	umask 077 should be added to webspa.sh	 &lt;br /&gt;
 32	A known_hosts file should be used to maintain the list of successfully verified keys	 &lt;br /&gt;
 31	Verification of server's public key fingerprint should be possible	 &lt;br /&gt;
 30	Help Files Update (0.8)	 &lt;br /&gt;
 27	Arrays.equals is not a constant time function	 &lt;br /&gt;
 2	Create maven build task for release	 &lt;br /&gt;
&lt;br /&gt;
== [http://sourceforge.net/projects/webspa/files/webspa-07.zip/download Release 0.7 (24/Apr/2014)] ==&lt;br /&gt;
&lt;br /&gt;
This is the current release of WebSpa. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.7 offers enhanced user administration functionality. The WebSpa client now offers the possibility for a user to connect to a web server with an untrusted/self-signed certificate.&lt;br /&gt;
&lt;br /&gt;
 - NEW: The WebSpa client asks the user if he wants to connect web servers with unknown/untrusted/self-signed certificates. (Ticket #28) &lt;br /&gt;
 - NEW: Introduced ‘passwd’ command, which allows the WebSpa administrator to modify a user’s password.&lt;br /&gt;
 - NEW: Introduced ‘pass-phrase show’ command, which allows the WebSpa administrator to print a user’s pass-phrase to the screen.&lt;br /&gt;
 - FIXED: Array is no longer sorted, which reduced the entropy of the web-knock. (Ticket #24)&lt;br /&gt;
 - FIXED: Reworked and added test cases.&lt;br /&gt;
 - FIXED: Removed dependency on Spring security. (Ticket #18)&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-06.zip Release 0.6 (21/Dec/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.6 offers enhanced logging functionality, fixing a bug that caused the server to become unresponsive upon starting and stopping. The client now offers to transmit a web knock request, thus not requiring for a user to copy-paste the URL into their browser. &lt;br /&gt;
&lt;br /&gt;
Additional test cases have been added, the option &amp;quot;?&amp;quot; is now available to offer &amp;quot;help&amp;quot; and the log functionality tracks via means of a timestamp all events logged&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-05.zip Release 0.5 (21/Oct/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.5 shortens the number of inputs required from a legitimate user of web-spa to only two: A valid pass-phrase, unique for each user and a single digit in the range of [0-9]. We refer to the latter as an action number and it represents a premeditated Operating System (O/S) command.&lt;br /&gt;
&lt;br /&gt;
All the functionality (for both the client and the server) is now within a single jar file, accompanied by detailed documentation:&lt;br /&gt;
&lt;br /&gt;
 - 00-web-spa-administration-guide.pdf	&lt;br /&gt;
 - 00-web-spa-specification-guide.pdf	&lt;br /&gt;
 - 00-web-spa-user-guide.pdf&lt;br /&gt;
&lt;br /&gt;
The server side functionality has been re-designed to operate with a single configuration file (created at first run) as well as a HyperSQL embedded file database (also created at first run).&lt;br /&gt;
&lt;br /&gt;
Finally, no files are created or are required when web-spa runs in client mode, with the '-client' option.&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-04.zip Release 0.4 (27/Aug/2011)] == &lt;br /&gt;
&lt;br /&gt;
A number of updates and bug fixes have been included within this version. Also, an update on the actual message format to further protect from replay attacks has been included. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.4 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-04.jar&lt;br /&gt;
 * webspa-elements-04.jar&lt;br /&gt;
 * webspa-server-04.jar&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-03.zip Release 0.3 (11/Jul/2011)] ==&lt;br /&gt;
&lt;br /&gt;
In its first usable release, WebSpa _v0.3 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-03.jar&lt;br /&gt;
 * webspa-elements-03.jar&lt;br /&gt;
 * webspa-server-03.jar&lt;br /&gt;
&lt;br /&gt;
== Contribution ==&lt;br /&gt;
&lt;br /&gt;
Involvement in the development and promotion of the OWASP WebSpa Project is actively encouraged!&lt;br /&gt;
You do not have to be a security expert in order to contribute.&lt;br /&gt;
Some of the ways you can help:&lt;br /&gt;
* Quality assurance of resolved defects&lt;br /&gt;
* Java development (good knowledge of Java desirable)&lt;br /&gt;
&lt;br /&gt;
=Project About=&lt;br /&gt;
{{:Projects/OWASP_WebSpa_Project}}  &lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]  [[Category:OWASP_Builders]] [[Category:OWASP_Defenders]]  [[Category:OWASP_Document]]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=183087</id>
		<title>OWASP WebSpa Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=183087"/>
				<updated>2014-09-30T12:02:08Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: /* People */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Main=&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;padding: 0;margin:0;margin-top:10px;text-align:left;&amp;quot; |-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
==OWASP WebSpa Project==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is a Java web knocking tool for sending a single HTTP/S request to your web server in order to authorize the execution of a premeditated Operating System (O/S) command. &lt;br /&gt;
It provides a cryptographically protected &amp;quot;open sesame&amp;quot; mechanism on the web application layer, comparable to well-known port-knocking techniques.&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
This project implements the concept of web knocking by offering a jar file that 'tails' the access log of an existing web server. A user submits a specially crafted URL, therefore executing a predefined O/S command. No new ports or services are created.&lt;br /&gt;
&lt;br /&gt;
Similarly to traditional network port-knocking schemes, the OWASP WebSpa Project aims to create a covert channel of communication for O/S commands over the web application layer. This channel is by no means bi-directional: It is only the client that can issue commands to the server. The inverse, i.e. the server issuing commands to the client, is not an option within the current version.&lt;br /&gt;
&lt;br /&gt;
If port knocking is defined as &amp;quot;a form of host-to-host communication in which information flows across closed ports&amp;quot; then we define web knocking as &amp;quot;a form of host-to-host communication in which information flows across erroneous URLs&amp;quot;. Finally, in an attempt to mirror the operation of Single Packet Authorisation (SPA), the entirety of a user's action is submitted through a single GET request.&lt;br /&gt;
&lt;br /&gt;
==Licensing==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is free to use. It is licensed under the http://creativecommons.org/licenses/by-sa/3.0/ Creative Commons Attribution-ShareAlike 3.0 license], so you can copy, distribute and transmit the work, and you can adapt it, and use it commercially, but all provided that you attribute the work and if you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.&lt;br /&gt;
&lt;br /&gt;
The source code that comes with the OWASP WebSpa Project in the form of the tool named WebSpa is released as open source software under the terms of the [http://www.gnu.org/licenses/quick-guide-gplv3.html GNU Public License (GPL) version 3]. For reference, the full text of the GPL_v3 can be downloaded from the [http://www.fsf.org/ Free Software Foundation]. There are no plans to change the license; WebSpa will always remain an open source project free for use by anyone subject to the terms of the license. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== What is WebSpa? ==&lt;br /&gt;
&lt;br /&gt;
OWASP WebSpa provides:&lt;br /&gt;
&lt;br /&gt;
* A secure channel for executing premeditated O/S commands on your web server&lt;br /&gt;
* A resource-efficient single jar-file that can either be run as server, or client application, depending on the command line parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Presentation ==&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/webspa/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;&amp;quot; | &lt;br /&gt;
&lt;br /&gt;
== Quick Download ==&lt;br /&gt;
&lt;br /&gt;
[http://sourceforge.net/projects/webspa/files/webspa-07.zip/download WebSpa v0.7]&lt;br /&gt;
&lt;br /&gt;
==Classifications==&lt;br /&gt;
&lt;br /&gt;
   {| width=&amp;quot;200&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot;| [[File:Owasp-incubator-trans-85.png|link=https://www.owasp.org/index.php/OWASP_Project_Stages#tab=Incubator_Projects]]&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-builders-small.png|link=]]  &lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-defenders-small.png|link=]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Cc-button-y-sa-small.png|link=http://creativecommons.org/licenses/by-sa/3.0/]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Project_Type_Files_CODE.jpg|link=]]&lt;br /&gt;
   |}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Videos =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|S386azVcj-c|300|right|Linux Poweroff on Apache via Web Knocking with Web-Spa (_v0.7) }} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|eHlYnWyf35E|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.5) }} &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|_VU26ZGG7D8|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4 )}} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|pKF_NxHnoyA|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4) }} &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Tutorial =&lt;br /&gt;
&lt;br /&gt;
== Supporting Documentation ==&lt;br /&gt;
&lt;br /&gt;
The discrepant event discussed herein is web knocking. Within the latest [http://sourceforge.net/projects/webspa/files/latest/download?source=directory download] you can find three documents with the purpose of describing how WebSpa can be used. The three documents are:&lt;br /&gt;
&lt;br /&gt;
* ''''WebSpa Administration Guide''' This document describes how to setup and use the server component. It details how to create new users and add new action numbers with respective O/S commands assigned to them&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa Specification Guide''' This document describes the actual design detailing the use case, specification, requirements and actual attacks, which this tool has been engineered to withstand&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa User Guide''' This document describes how to use the client for issuing commands through a URL request to a web server&lt;br /&gt;
&lt;br /&gt;
The administration guide aims to enable anyone who would be interested in using WebSpa to be able to setup the server side component of it. After configuring the server component of WebSpa, you'll be ready to use the corresponding client for issuing direct actions as O/S commands to it.&lt;br /&gt;
&lt;br /&gt;
If this is your first time using WebSpa, please note that the server operations described in this document, will not work if a WebSpa client does not submit a web-knock to your web server in a timely manner.&lt;br /&gt;
&lt;br /&gt;
Thus, knowing a client implementation goes hand-in-hand with a server instance for it, please also have a look at the WebSpa user guide document to see how the two can be used in tandem. &lt;br /&gt;
&lt;br /&gt;
The user guide aims to enable anyone who would be interested in using WebSpa to do so. As soon as you install the server side component and decide what actions to allow, you'll be ready to use the corresponding client for issuing direct actions that work for you.&lt;br /&gt;
&lt;br /&gt;
Finally, the specification guide aims to enable anyone who would be interested in implementing their own version of WebSpa to do so.&lt;br /&gt;
&lt;br /&gt;
== HelloWorld! Enabling SSH via Web Knocking with WebSpa ==&lt;br /&gt;
&lt;br /&gt;
In this section we describe the setup you should follow in order to get to the stage of being able to execute the video entitled: [https://www.youtube.com/watch?v=eHlYnWyf35E Enabling SSH via Web Knocking with WebSpa (_v0.5)] on your server.&lt;br /&gt;
&lt;br /&gt;
We assume you can SSH into your web server using the user 'web-spa'. We also assume that the user 'web-spa' has permissions to run the necessary service start and stop commands for this service. So, let's login to the box and get the latest WebSpa download:&lt;br /&gt;
&lt;br /&gt;
 ssh web-spa@web.spa.seleucus.net&lt;br /&gt;
 web-spa@web:~$ cd /tmp&lt;br /&gt;
 web-spa@web:/tmp$ wget https://downloads.sourceforge.net/project/webspa/webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
It would be wise at this stage to check the SHA1 digest of what we just downloaded. Sourceforge publishes the SHA1 of all files available for download; copying the value into our command prompt yields:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ echo &amp;quot;a630f23f88c49d02b5895a3d7e16aad245c387f3 *webspa-06.zip&amp;quot; | sha1sum -c -&lt;br /&gt;
 webspa-06.zip: OK&lt;br /&gt;
 web-spa@web:/tmp$ &lt;br /&gt;
&lt;br /&gt;
Ok, so we have downloaded something that we can vouch for-ish. Let's extract and setup.&lt;br /&gt;
&lt;br /&gt;
 unzip webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
A lot of noise comes back from this command. Apologies, different groups have clearly stated they have wanted the source code as well the documentation to be included within the download. Let's have a look at the install file:&lt;br /&gt;
&lt;br /&gt;
 =================================================&lt;br /&gt;
 - Prerequisites for WebSpa&lt;br /&gt;
 =================================================&lt;br /&gt;
&lt;br /&gt;
 The following programs must be installed in order&lt;br /&gt;
 for WebSpa to run:&lt;br /&gt;
&lt;br /&gt;
 - Java 1.6 or later&lt;br /&gt;
&lt;br /&gt;
If you don't have java installed, consider using the following command: &lt;br /&gt;
&lt;br /&gt;
 sudo aptitude install openjdk-7-jre&lt;br /&gt;
&lt;br /&gt;
This will meet the one prerequisite for using WebSpa. As this is a production server, docs and src folders will not be missed. Also, we like to store things in /opt, ergo:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/src/&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/docs/&lt;br /&gt;
 web-spa@web:/tmp$ sudo mv -v /tmp/web-spa-0.6/ /opt&lt;br /&gt;
&lt;br /&gt;
We now have WebSpa in /opt, let's run the server and create some users. &lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ cd /opt/web-spa-0.6/&lt;br /&gt;
 web-spa@web:/opt/web-spa-0.6$ java -jar web-spa-0.6.jar -server&lt;br /&gt;
&lt;br /&gt;
 Web-Spa - Single HTTP/S Request Authorisation&lt;br /&gt;
 version 0.6 (web-spa@seleucus.net)&lt;br /&gt;
&lt;br /&gt;
 This is a holding prompt, type &amp;quot;exit&amp;quot; or &amp;quot;x&amp;quot; to quit&lt;br /&gt;
&lt;br /&gt;
 - type &amp;quot;service start&amp;quot; to start the web-spa server&lt;br /&gt;
 - type &amp;quot;help&amp;quot; or &amp;quot;?&amp;quot; for more options&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last line above is the server's holding prompt; all commands are issued via this prompt. In order to exit this prompt, type 'exit' or 'quit'. In the next step we will add 3 users and assign a unique pass-phrase to each one of them. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Yiannis Pavlosoglou&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: yiannis@xxxxxx.com&lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note that only a user's full name and pass-phrase are required to be entered. Let's create another user:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Oliver Merki&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that we did not specify a user's e-mail address nor a phone number, as both these fields were optional. Finally, adding a third user: &lt;br /&gt;
&lt;br /&gt;
  web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Patryk&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Patryk we only specified his first name and a unique pass-phrase. You get the picture. Now that we have created our users, let's add some actions to each user. We would like to give Patryk the ability to bounce the SSH service; ergo, let's add two actions:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh start &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 1&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh start' to action number 1 for user Patryk. Let's also add the stop command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 1  sudo service ssh start          has never been executed&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh stop &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 0&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh stop' to action number 0 for user Patryk. Two very important steps we must not forget is to enable the user Patryk and start the web-spa listening service. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user activate&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 User with ID: 13 is in-active&lt;br /&gt;
 -[Optional] Toggle user activation [Y/n]: &lt;br /&gt;
 User with ID: 13 is active&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 And finally issue the service start command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;service start&lt;br /&gt;
 [2014-02-23 12-36-07] Attempting to start web-spa...&lt;br /&gt;
 [2014-02-23 12-36-07] Found access log file: /...cus.net/logs/access.log&lt;br /&gt;
 [2014-02-23 12-36-07] Creating tail listener...&lt;br /&gt;
 [2014-02-23 12-36-07] Web-spa server started!&lt;br /&gt;
 [2014-02-23 12-36-07] Please make sure your web server is also up&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= News =&lt;br /&gt;
&lt;br /&gt;
* [19 Aug 2014] Our project was featured in the OWASP Connector newsletter. [http://hosted-p0.vresp.com/1479611/4d8d3315c2/ARCHIVE (link)]&lt;br /&gt;
* [07 May 2014] Added four video links in the respective &amp;quot;Video&amp;quot; tab, referencing YouTube&lt;br /&gt;
* [24 Apr 2014] Version 0.7 has been release and can now be found in the download section. Also, we welcome Paweł and Joël to the team.&lt;br /&gt;
* [20 Mar 2014] [http://www.eventbrite.co.uk/e/owasp-london-chapter-meeting-march-2014-tickets-10063386861 WebSpa has been presented during OWASP London Chapter Meeting]&lt;br /&gt;
* [16 Mar 2014] WebSpa has a new contributor – Paweł Goleń. Paweł welcome in the team!&lt;br /&gt;
* [14 Mar 2014] [https://code.google.com/p/web-spa/ Scheduled the deletion of the Google code project, given that downloads require a new account]&lt;br /&gt;
* [04 Mar 2014] [https://soundcloud.com/#owasp-podcast/the-owasp-webspa-project-with The WebSpa podcast has now been available!] &lt;br /&gt;
* [22 Feb 2014] Created the WebSpa project on sourceforge, started the import from Google code&lt;br /&gt;
* [22 Dec 2013] Version 0.6 has been released and can now be found in the download section&lt;br /&gt;
* [08 Nov 2013] The OWASP Web Knocking Project is created&lt;br /&gt;
&lt;br /&gt;
=FAQs=&lt;br /&gt;
&lt;br /&gt;
; Who are the actors required in order to use the WebSpa tool?&lt;br /&gt;
&lt;br /&gt;
There are two actors, the WebSpa administrator and the WebSpa user. Ultimately, they could be the same person. The administrator agrees with each user what each of their allowed O/S commands are, while the user, well, executes these commands on the server by using the client. &lt;br /&gt;
&lt;br /&gt;
; How does the crypto of WebSpa work?&lt;br /&gt;
: From the perspective of cryptographic engineering, WebSpa uses a hash [http://en.wikipedia.org/wiki/Commitment_scheme commitment scheme], where the commit phase during which a value is chosen is done using an out of band channel. WebSpa focuses on receiving a value specified through a single request from the client and processing it on the server. &lt;br /&gt;
&lt;br /&gt;
; Can one deploy WebSpa over HTTP? &lt;br /&gt;
: Yes, WebSpa can be deployed over HTTP, however for security reasons it is highly recommended to utilize HTTPS.&lt;br /&gt;
&lt;br /&gt;
; How to report a WebSpa bug?&lt;br /&gt;
:To report a WebSpa bug please feel free to create a ticket on the [http://sourceforge.net/p/webspa/tickets/?source=navbar sourceforge.net]. A sourceforge account is necessary. If you don’t own a sourceforge account you may send an e-mail to one of the contributors.&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is developed by a worldwide team of volunteers. Below is a list of all people that have contributed to the project so far.&lt;br /&gt;
&lt;br /&gt;
Active contributors:&lt;br /&gt;
* [[User:Yiannis|Yiannis Pavlosoglou]] - Inception &amp;amp; Development &lt;br /&gt;
* Patryk Arciszewski - Theoretician &amp;amp; Documentation&lt;br /&gt;
* Paweł Goleń - Breaking &amp;amp; Infrastructure &lt;br /&gt;
* Joël Rouiller - Development &amp;amp; Optimisation&lt;br /&gt;
* Oliver Merki - Leader &amp;amp; Operations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retired contributors:&lt;br /&gt;
* [[User:Dr. Markus Maria Miedaner|Markus Maria Miedaner]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
&lt;br /&gt;
== Release 0.9 (Q3/2015) == &lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.9 will be major release and include a comprehensive redesign of the WebKnock format in order to improve overall security and robustness of the request. The tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 44	New WebKnock request format should be defined&lt;br /&gt;
 42	Do not limit the web knock to 100 characters, instead use SHA-512 lengths	 &lt;br /&gt;
 35	A threat model for WebSpa should be created and reviewed	 &lt;br /&gt;
 33	Apache should be replaced by nginx	 &lt;br /&gt;
&lt;br /&gt;
== Release 0.85 (Q1/2015) ==&lt;br /&gt;
WebSpa_v0.85 will offer improved usability features, which will simplify installing, configuring and running WebSpa. The tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 40	Log to /​var/​log instead of a log.txt file	&lt;br /&gt;
 15	Add easy way to run the server as a background daemon	  &lt;br /&gt;
&lt;br /&gt;
== Release 0.8 (Q4/2014) ==&lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.8 will be sort of a proof-of-concept of WebSpa. A stable version to demonstrate the concept of WebKnocking, however, with some limitations with regards to usability/configuration and modularity (e.g. changing the hashing algorithm). The tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 43	Change SSL configuration to allow wget&lt;br /&gt;
 41	WebSpa administrator to WebSpa user output	 &lt;br /&gt;
 38	umask 077 should be added to webspa.sh	 &lt;br /&gt;
 32	A known_hosts file should be used to maintain the list of successfully verified keys	 &lt;br /&gt;
 31	Verification of server's public key fingerprint should be possible	 &lt;br /&gt;
 30	Help Files Update (0.8)	 &lt;br /&gt;
 27	Arrays.equals is not a constant time function	 &lt;br /&gt;
 2	Create maven build task for release	 &lt;br /&gt;
&lt;br /&gt;
== [http://sourceforge.net/projects/webspa/files/webspa-07.zip/download Release 0.7 (24/Apr/2014)] ==&lt;br /&gt;
&lt;br /&gt;
This is the current release of WebSpa. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.7 offers enhanced user administration functionality. The WebSpa client now offers the possibility for a user to connect to a web server with an untrusted/self-signed certificate.&lt;br /&gt;
&lt;br /&gt;
 - NEW: The WebSpa client asks the user if he wants to connect web servers with unknown/untrusted/self-signed certificates. (Ticket #28) &lt;br /&gt;
 - NEW: Introduced ‘passwd’ command, which allows the WebSpa administrator to modify a user’s password.&lt;br /&gt;
 - NEW: Introduced ‘pass-phrase show’ command, which allows the WebSpa administrator to print a user’s pass-phrase to the screen.&lt;br /&gt;
 - FIXED: Array is no longer sorted, which reduced the entropy of the web-knock. (Ticket #24)&lt;br /&gt;
 - FIXED: Reworked and added test cases.&lt;br /&gt;
 - FIXED: Removed dependency on Spring security. (Ticket #18)&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-06.zip Release 0.6 (21/Dec/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.6 offers enhanced logging functionality, fixing a bug that caused the server to become unresponsive upon starting and stopping. The client now offers to transmit a web knock request, thus not requiring for a user to copy-paste the URL into their browser. &lt;br /&gt;
&lt;br /&gt;
Additional test cases have been added, the option &amp;quot;?&amp;quot; is now available to offer &amp;quot;help&amp;quot; and the log functionality tracks via means of a timestamp all events logged&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-05.zip Release 0.5 (21/Oct/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.5 shortens the number of inputs required from a legitimate user of web-spa to only two: A valid pass-phrase, unique for each user and a single digit in the range of [0-9]. We refer to the latter as an action number and it represents a premeditated Operating System (O/S) command.&lt;br /&gt;
&lt;br /&gt;
All the functionality (for both the client and the server) is now within a single jar file, accompanied by detailed documentation:&lt;br /&gt;
&lt;br /&gt;
 - 00-web-spa-administration-guide.pdf	&lt;br /&gt;
 - 00-web-spa-specification-guide.pdf	&lt;br /&gt;
 - 00-web-spa-user-guide.pdf&lt;br /&gt;
&lt;br /&gt;
The server side functionality has been re-designed to operate with a single configuration file (created at first run) as well as a HyperSQL embedded file database (also created at first run).&lt;br /&gt;
&lt;br /&gt;
Finally, no files are created or are required when web-spa runs in client mode, with the '-client' option.&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-04.zip Release 0.4 (27/Aug/2011)] == &lt;br /&gt;
&lt;br /&gt;
A number of updates and bug fixes have been included within this version. Also, an update on the actual message format to further protect from replay attacks has been included. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.4 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-04.jar&lt;br /&gt;
 * webspa-elements-04.jar&lt;br /&gt;
 * webspa-server-04.jar&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-03.zip Release 0.3 (11/Jul/2011)] ==&lt;br /&gt;
&lt;br /&gt;
In its first usable release, WebSpa _v0.3 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-03.jar&lt;br /&gt;
 * webspa-elements-03.jar&lt;br /&gt;
 * webspa-server-03.jar&lt;br /&gt;
&lt;br /&gt;
== Contribution ==&lt;br /&gt;
&lt;br /&gt;
Involvement in the development and promotion of the OWASP WebSpa Project is actively encouraged!&lt;br /&gt;
You do not have to be a security expert in order to contribute.&lt;br /&gt;
Some of the ways you can help:&lt;br /&gt;
* Quality assurance of resolved defects&lt;br /&gt;
* Java development (good knowledge of Java desirable)&lt;br /&gt;
&lt;br /&gt;
=Project About=&lt;br /&gt;
{{:Projects/OWASP_WebSpa_Project}}  &lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]  [[Category:OWASP_Builders]] [[Category:OWASP_Defenders]]  [[Category:OWASP_Document]]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=182992</id>
		<title>OWASP WebSpa Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=182992"/>
				<updated>2014-09-28T09:36:36Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: /* FAQs */ Added 2 questions in the FAQ section of WebSpa&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Main=&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;padding: 0;margin:0;margin-top:10px;text-align:left;&amp;quot; |-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
==OWASP WebSpa Project==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is a Java web knocking tool for sending a single HTTP/S request to your web server in order to authorize the execution of a premeditated Operating System (O/S) command. &lt;br /&gt;
It provides a cryptographically protected &amp;quot;open sesame&amp;quot; mechanism on the web application layer, comparable to well-known port-knocking techniques.&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
This project implements the concept of web knocking by offering a jar file that 'tails' the access log of an existing web server. A user submits a specially crafted URL, therefore executing a predefined O/S command. No new ports or services are created.&lt;br /&gt;
&lt;br /&gt;
Similarly to traditional network port-knocking schemes, the OWASP WebSpa Project aims to create a covert channel of communication for O/S commands over the web application layer. This channel is by no means bi-directional: It is only the client that can issue commands to the server. The inverse, i.e. the server issuing commands to the client, is not an option within the current version.&lt;br /&gt;
&lt;br /&gt;
If port knocking is defined as &amp;quot;a form of host-to-host communication in which information flows across closed ports&amp;quot; then we define web knocking as &amp;quot;a form of host-to-host communication in which information flows across erroneous URLs&amp;quot;. Finally, in an attempt to mirror the operation of Single Packet Authorisation (SPA), the entirety of a user's action is submitted through a single GET request.&lt;br /&gt;
&lt;br /&gt;
==Licensing==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is free to use. It is licensed under the http://creativecommons.org/licenses/by-sa/3.0/ Creative Commons Attribution-ShareAlike 3.0 license], so you can copy, distribute and transmit the work, and you can adapt it, and use it commercially, but all provided that you attribute the work and if you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.&lt;br /&gt;
&lt;br /&gt;
The source code that comes with the OWASP WebSpa Project in the form of the tool named WebSpa is released as open source software under the terms of the [http://www.gnu.org/licenses/quick-guide-gplv3.html GNU Public License (GPL) version 3]. For reference, the full text of the GPL_v3 can be downloaded from the [http://www.fsf.org/ Free Software Foundation]. There are no plans to change the license; WebSpa will always remain an open source project free for use by anyone subject to the terms of the license. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== What is WebSpa? ==&lt;br /&gt;
&lt;br /&gt;
OWASP WebSpa provides:&lt;br /&gt;
&lt;br /&gt;
* A secure channel for executing premeditated O/S commands on your web server&lt;br /&gt;
* A resource-efficient single jar-file that can either be run as server, or client application, depending on the command line parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Presentation ==&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/webspa/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;&amp;quot; | &lt;br /&gt;
&lt;br /&gt;
== Quick Download ==&lt;br /&gt;
&lt;br /&gt;
[http://sourceforge.net/projects/webspa/files/webspa-07.zip/download WebSpa v0.7]&lt;br /&gt;
&lt;br /&gt;
==Classifications==&lt;br /&gt;
&lt;br /&gt;
   {| width=&amp;quot;200&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot;| [[File:Owasp-incubator-trans-85.png|link=https://www.owasp.org/index.php/OWASP_Project_Stages#tab=Incubator_Projects]]&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-builders-small.png|link=]]  &lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-defenders-small.png|link=]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Cc-button-y-sa-small.png|link=http://creativecommons.org/licenses/by-sa/3.0/]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Project_Type_Files_CODE.jpg|link=]]&lt;br /&gt;
   |}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Videos =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|S386azVcj-c|300|right|Linux Poweroff on Apache via Web Knocking with Web-Spa (_v0.7) }} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|eHlYnWyf35E|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.5) }} &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|_VU26ZGG7D8|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4 )}} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|pKF_NxHnoyA|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4) }} &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Tutorial =&lt;br /&gt;
&lt;br /&gt;
== Supporting Documentation ==&lt;br /&gt;
&lt;br /&gt;
The discrepant event discussed herein is web knocking. Within the latest [http://sourceforge.net/projects/webspa/files/latest/download?source=directory download] you can find three documents with the purpose of describing how WebSpa can be used. The three documents are:&lt;br /&gt;
&lt;br /&gt;
* ''''WebSpa Administration Guide''' This document describes how to setup and use the server component. It details how to create new users and add new action numbers with respective O/S commands assigned to them&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa Specification Guide''' This document describes the actual design detailing the use case, specification, requirements and actual attacks, which this tool has been engineered to withstand&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa User Guide''' This document describes how to use the client for issuing commands through a URL request to a web server&lt;br /&gt;
&lt;br /&gt;
The administration guide aims to enable anyone who would be interested in using WebSpa to be able to setup the server side component of it. After configuring the server component of WebSpa, you'll be ready to use the corresponding client for issuing direct actions as O/S commands to it.&lt;br /&gt;
&lt;br /&gt;
If this is your first time using WebSpa, please note that the server operations described in this document, will not work if a WebSpa client does not submit a web-knock to your web server in a timely manner.&lt;br /&gt;
&lt;br /&gt;
Thus, knowing a client implementation goes hand-in-hand with a server instance for it, please also have a look at the WebSpa user guide document to see how the two can be used in tandem. &lt;br /&gt;
&lt;br /&gt;
The user guide aims to enable anyone who would be interested in using WebSpa to do so. As soon as you install the server side component and decide what actions to allow, you'll be ready to use the corresponding client for issuing direct actions that work for you.&lt;br /&gt;
&lt;br /&gt;
Finally, the specification guide aims to enable anyone who would be interested in implementing their own version of WebSpa to do so.&lt;br /&gt;
&lt;br /&gt;
== HelloWorld! Enabling SSH via Web Knocking with WebSpa ==&lt;br /&gt;
&lt;br /&gt;
In this section we describe the setup you should follow in order to get to the stage of being able to execute the video entitled: [https://www.youtube.com/watch?v=eHlYnWyf35E Enabling SSH via Web Knocking with WebSpa (_v0.5)] on your server.&lt;br /&gt;
&lt;br /&gt;
We assume you can SSH into your web server using the user 'web-spa'. We also assume that the user 'web-spa' has permissions to run the necessary service start and stop commands for this service. So, let's login to the box and get the latest WebSpa download:&lt;br /&gt;
&lt;br /&gt;
 ssh web-spa@web.spa.seleucus.net&lt;br /&gt;
 web-spa@web:~$ cd /tmp&lt;br /&gt;
 web-spa@web:/tmp$ wget https://downloads.sourceforge.net/project/webspa/webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
It would be wise at this stage to check the SHA1 digest of what we just downloaded. Sourceforge publishes the SHA1 of all files available for download; copying the value into our command prompt yields:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ echo &amp;quot;a630f23f88c49d02b5895a3d7e16aad245c387f3 *webspa-06.zip&amp;quot; | sha1sum -c -&lt;br /&gt;
 webspa-06.zip: OK&lt;br /&gt;
 web-spa@web:/tmp$ &lt;br /&gt;
&lt;br /&gt;
Ok, so we have downloaded something that we can vouch for-ish. Let's extract and setup.&lt;br /&gt;
&lt;br /&gt;
 unzip webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
A lot of noise comes back from this command. Apologies, different groups have clearly stated they have wanted the source code as well the documentation to be included within the download. Let's have a look at the install file:&lt;br /&gt;
&lt;br /&gt;
 =================================================&lt;br /&gt;
 - Prerequisites for WebSpa&lt;br /&gt;
 =================================================&lt;br /&gt;
&lt;br /&gt;
 The following programs must be installed in order&lt;br /&gt;
 for WebSpa to run:&lt;br /&gt;
&lt;br /&gt;
 - Java 1.6 or later&lt;br /&gt;
&lt;br /&gt;
If you don't have java installed, consider using the following command: &lt;br /&gt;
&lt;br /&gt;
 sudo aptitude install openjdk-7-jre&lt;br /&gt;
&lt;br /&gt;
This will meet the one prerequisite for using WebSpa. As this is a production server, docs and src folders will not be missed. Also, we like to store things in /opt, ergo:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/src/&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/docs/&lt;br /&gt;
 web-spa@web:/tmp$ sudo mv -v /tmp/web-spa-0.6/ /opt&lt;br /&gt;
&lt;br /&gt;
We now have WebSpa in /opt, let's run the server and create some users. &lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ cd /opt/web-spa-0.6/&lt;br /&gt;
 web-spa@web:/opt/web-spa-0.6$ java -jar web-spa-0.6.jar -server&lt;br /&gt;
&lt;br /&gt;
 Web-Spa - Single HTTP/S Request Authorisation&lt;br /&gt;
 version 0.6 (web-spa@seleucus.net)&lt;br /&gt;
&lt;br /&gt;
 This is a holding prompt, type &amp;quot;exit&amp;quot; or &amp;quot;x&amp;quot; to quit&lt;br /&gt;
&lt;br /&gt;
 - type &amp;quot;service start&amp;quot; to start the web-spa server&lt;br /&gt;
 - type &amp;quot;help&amp;quot; or &amp;quot;?&amp;quot; for more options&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last line above is the server's holding prompt; all commands are issued via this prompt. In order to exit this prompt, type 'exit' or 'quit'. In the next step we will add 3 users and assign a unique pass-phrase to each one of them. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Yiannis Pavlosoglou&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: yiannis@xxxxxx.com&lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note that only a user's full name and pass-phrase are required to be entered. Let's create another user:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Oliver Merki&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that we did not specify a user's e-mail address nor a phone number, as both these fields were optional. Finally, adding a third user: &lt;br /&gt;
&lt;br /&gt;
  web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Patryk&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Patryk we only specified his first name and a unique pass-phrase. You get the picture. Now that we have created our users, let's add some actions to each user. We would like to give Patryk the ability to bounce the SSH service; ergo, let's add two actions:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh start &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 1&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh start' to action number 1 for user Patryk. Let's also add the stop command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 1  sudo service ssh start          has never been executed&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh stop &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 0&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh stop' to action number 0 for user Patryk. Two very important steps we must not forget is to enable the user Patryk and start the web-spa listening service. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user activate&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 User with ID: 13 is in-active&lt;br /&gt;
 -[Optional] Toggle user activation [Y/n]: &lt;br /&gt;
 User with ID: 13 is active&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 And finally issue the service start command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;service start&lt;br /&gt;
 [2014-02-23 12-36-07] Attempting to start web-spa...&lt;br /&gt;
 [2014-02-23 12-36-07] Found access log file: /...cus.net/logs/access.log&lt;br /&gt;
 [2014-02-23 12-36-07] Creating tail listener...&lt;br /&gt;
 [2014-02-23 12-36-07] Web-spa server started!&lt;br /&gt;
 [2014-02-23 12-36-07] Please make sure your web server is also up&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= News =&lt;br /&gt;
&lt;br /&gt;
* [19 Aug 2014] Our project was featured in the OWASP Connector newsletter. [http://hosted-p0.vresp.com/1479611/4d8d3315c2/ARCHIVE (link)]&lt;br /&gt;
* [07 May 2014] Added four video links in the respective &amp;quot;Video&amp;quot; tab, referencing YouTube&lt;br /&gt;
* [24 Apr 2014] Version 0.7 has been release and can now be found in the download section. Also, we welcome Paweł and Joël to the team.&lt;br /&gt;
* [20 Mar 2014] [http://www.eventbrite.co.uk/e/owasp-london-chapter-meeting-march-2014-tickets-10063386861 WebSpa has been presented during OWASP London Chapter Meeting]&lt;br /&gt;
* [16 Mar 2014] WebSpa has a new contributor – Paweł Goleń. Paweł welcome in the team!&lt;br /&gt;
* [14 Mar 2014] [https://code.google.com/p/web-spa/ Scheduled the deletion of the Google code project, given that downloads require a new account]&lt;br /&gt;
* [04 Mar 2014] [https://soundcloud.com/#owasp-podcast/the-owasp-webspa-project-with The WebSpa podcast has now been available!] &lt;br /&gt;
* [22 Feb 2014] Created the WebSpa project on sourceforge, started the import from Google code&lt;br /&gt;
* [22 Dec 2013] Version 0.6 has been released and can now be found in the download section&lt;br /&gt;
* [08 Nov 2013] The OWASP Web Knocking Project is created&lt;br /&gt;
&lt;br /&gt;
=FAQs=&lt;br /&gt;
&lt;br /&gt;
; Who are the actors required in order to use the WebSpa tool?&lt;br /&gt;
&lt;br /&gt;
There are two actors, the WebSpa administrator and the WebSpa user. Ultimately, they could be the same person. The administrator agrees with each user what each of their allowed O/S commands are, while the user, well, executes these commands on the server by using the client. &lt;br /&gt;
&lt;br /&gt;
; How does the crypto of WebSpa work?&lt;br /&gt;
: From the perspective of cryptographic engineering, WebSpa uses a hash [http://en.wikipedia.org/wiki/Commitment_scheme commitment scheme], where the commit phase during which a value is chosen is done using an out of band channel. WebSpa focuses on receiving a value specified through a single request from the client and processing it on the server. &lt;br /&gt;
&lt;br /&gt;
; Can one deploy WebSpa over HTTP? &lt;br /&gt;
: Yes, WebSpa can be deployed over HTTP, however for security reasons it is highly recommended to utilize HTTPS.&lt;br /&gt;
&lt;br /&gt;
; How to report a WebSpa bug?&lt;br /&gt;
:To report a WebSpa bug please feel free to create a ticket on the [http://sourceforge.net/p/webspa/tickets/?source=navbar sourceforge.net]. A sourceforge account is necessary. If you don’t own a sourceforge account you may send an e-mail to one of the contributors.&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is developed by a worldwide team of volunteers. Below is a list of all people that have contributed to the project so far.&lt;br /&gt;
&lt;br /&gt;
Active contributors:&lt;br /&gt;
* Yiannis Pavlosoglou - Inception &amp;amp; Development &lt;br /&gt;
* Patryk Arciszewski - Theoretician &amp;amp; Documentation&lt;br /&gt;
* Paweł Goleń - Breaking &amp;amp; Infrastructure &lt;br /&gt;
* Joël Rouiller - Development &amp;amp; Optimisation&lt;br /&gt;
* Oliver Merki - Leader &amp;amp; Operations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retired contributors:&lt;br /&gt;
* [[User:Dr. Markus Maria Miedaner|Markus Maria Miedaner]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
&lt;br /&gt;
== Release 0.9 (Q3/2015) == &lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.9 will be major release and include a comprehensive redesign of the WebKnock format in order to improve overall security and robustness of the request. The tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 44	New WebKnock request format should be defined&lt;br /&gt;
 42	Do not limit the web knock to 100 characters, instead use SHA-512 lengths	 &lt;br /&gt;
 35	A threat model for WebSpa should be created and reviewed	 &lt;br /&gt;
 33	Apache should be replaced by nginx	 &lt;br /&gt;
&lt;br /&gt;
== Release 0.85 (Q1/2015) ==&lt;br /&gt;
WebSpa_v0.85 will offer improved usability features, which will simplify installing, configuring and running WebSpa. The tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 40	Log to /​var/​log instead of a log.txt file	&lt;br /&gt;
 15	Add easy way to run the server as a background daemon	  &lt;br /&gt;
&lt;br /&gt;
== Release 0.8 (Q4/2014) ==&lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.8 will be sort of a proof-of-concept of WebSpa. A stable version to demonstrate the concept of WebKnocking, however, with some limitations with regards to usability/configuration and modularity (e.g. changing the hashing algorithm). The tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 43	Change SSL configuration to allow wget&lt;br /&gt;
 41	WebSpa administrator to WebSpa user output	 &lt;br /&gt;
 38	umask 077 should be added to webspa.sh	 &lt;br /&gt;
 32	A known_hosts file should be used to maintain the list of successfully verified keys	 &lt;br /&gt;
 31	Verification of server's public key fingerprint should be possible	 &lt;br /&gt;
 30	Help Files Update (0.8)	 &lt;br /&gt;
 27	Arrays.equals is not a constant time function	 &lt;br /&gt;
 2	Create maven build task for release	 &lt;br /&gt;
&lt;br /&gt;
== [http://sourceforge.net/projects/webspa/files/webspa-07.zip/download Release 0.7 (24/Apr/2014)] ==&lt;br /&gt;
&lt;br /&gt;
This is the current release of WebSpa. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.7 offers enhanced user administration functionality. The WebSpa client now offers the possibility for a user to connect to a web server with an untrusted/self-signed certificate.&lt;br /&gt;
&lt;br /&gt;
 - NEW: The WebSpa client asks the user if he wants to connect web servers with unknown/untrusted/self-signed certificates. (Ticket #28) &lt;br /&gt;
 - NEW: Introduced ‘passwd’ command, which allows the WebSpa administrator to modify a user’s password.&lt;br /&gt;
 - NEW: Introduced ‘pass-phrase show’ command, which allows the WebSpa administrator to print a user’s pass-phrase to the screen.&lt;br /&gt;
 - FIXED: Array is no longer sorted, which reduced the entropy of the web-knock. (Ticket #24)&lt;br /&gt;
 - FIXED: Reworked and added test cases.&lt;br /&gt;
 - FIXED: Removed dependency on Spring security. (Ticket #18)&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-06.zip Release 0.6 (21/Dec/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.6 offers enhanced logging functionality, fixing a bug that caused the server to become unresponsive upon starting and stopping. The client now offers to transmit a web knock request, thus not requiring for a user to copy-paste the URL into their browser. &lt;br /&gt;
&lt;br /&gt;
Additional test cases have been added, the option &amp;quot;?&amp;quot; is now available to offer &amp;quot;help&amp;quot; and the log functionality tracks via means of a timestamp all events logged&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-05.zip Release 0.5 (21/Oct/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.5 shortens the number of inputs required from a legitimate user of web-spa to only two: A valid pass-phrase, unique for each user and a single digit in the range of [0-9]. We refer to the latter as an action number and it represents a premeditated Operating System (O/S) command.&lt;br /&gt;
&lt;br /&gt;
All the functionality (for both the client and the server) is now within a single jar file, accompanied by detailed documentation:&lt;br /&gt;
&lt;br /&gt;
 - 00-web-spa-administration-guide.pdf	&lt;br /&gt;
 - 00-web-spa-specification-guide.pdf	&lt;br /&gt;
 - 00-web-spa-user-guide.pdf&lt;br /&gt;
&lt;br /&gt;
The server side functionality has been re-designed to operate with a single configuration file (created at first run) as well as a HyperSQL embedded file database (also created at first run).&lt;br /&gt;
&lt;br /&gt;
Finally, no files are created or are required when web-spa runs in client mode, with the '-client' option.&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-04.zip Release 0.4 (27/Aug/2011)] == &lt;br /&gt;
&lt;br /&gt;
A number of updates and bug fixes have been included within this version. Also, an update on the actual message format to further protect from replay attacks has been included. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.4 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-04.jar&lt;br /&gt;
 * webspa-elements-04.jar&lt;br /&gt;
 * webspa-server-04.jar&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-03.zip Release 0.3 (11/Jul/2011)] ==&lt;br /&gt;
&lt;br /&gt;
In its first usable release, WebSpa _v0.3 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-03.jar&lt;br /&gt;
 * webspa-elements-03.jar&lt;br /&gt;
 * webspa-server-03.jar&lt;br /&gt;
&lt;br /&gt;
== Contribution ==&lt;br /&gt;
&lt;br /&gt;
Involvement in the development and promotion of the OWASP WebSpa Project is actively encouraged!&lt;br /&gt;
You do not have to be a security expert in order to contribute.&lt;br /&gt;
Some of the ways you can help:&lt;br /&gt;
* Quality assurance of resolved defects&lt;br /&gt;
* Java development (good knowledge of Java desirable)&lt;br /&gt;
&lt;br /&gt;
=Project About=&lt;br /&gt;
{{:Projects/OWASP_WebSpa_Project}}  &lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]  [[Category:OWASP_Builders]] [[Category:OWASP_Defenders]]  [[Category:OWASP_Document]]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=181985</id>
		<title>OWASP WebSpa Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=181985"/>
				<updated>2014-09-08T21:15:23Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: Replaced web-spa with WebSpa in a few places to show consistency of terminology&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Main=&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;padding: 0;margin:0;margin-top:10px;text-align:left;&amp;quot; |-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
==OWASP WebSpa Project==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is a Java web knocking tool for sending a single HTTP/S request to your web server in order to authorize the execution of a premeditated Operating System (O/S) command. &lt;br /&gt;
It provides a cryptographically protected &amp;quot;open sesame&amp;quot; mechanism on the web application layer, comparable to well-known port-knocking techniques.&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
This project implements the concept of web knocking by offering a jar file that 'tails' the access log of an existing web server. A user submits a specially crafted URL, therefore executing a predefined O/S command. No new ports or services are created.&lt;br /&gt;
&lt;br /&gt;
Similarly to traditional network port-knocking schemes, the OWASP WebSpa Project aims to create a covert channel of communication for O/S commands over the web application layer. This channel is by no means bi-directional: It is only the client that can issue commands to the server. The inverse, i.e. the server issuing commands to the client, is not an option within the current version.&lt;br /&gt;
&lt;br /&gt;
If port knocking is defined as &amp;quot;a form of host-to-host communication in which information flows across closed ports&amp;quot; then we define web knocking as &amp;quot;a form of host-to-host communication in which information flows across erroneous URLs&amp;quot;. Finally, in an attempt to mirror the operation of Single Packet Authorisation (SPA), the entirety of a user's action is submitted through a single GET request.&lt;br /&gt;
&lt;br /&gt;
==Licensing==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is free to use. It is licensed under the http://creativecommons.org/licenses/by-sa/3.0/ Creative Commons Attribution-ShareAlike 3.0 license], so you can copy, distribute and transmit the work, and you can adapt it, and use it commercially, but all provided that you attribute the work and if you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.&lt;br /&gt;
&lt;br /&gt;
The source code that comes with the OWASP WebSpa Project in the form of the tool named WebSpa is released as open source software under the terms of the [http://www.gnu.org/licenses/quick-guide-gplv3.html GNU Public License (GPL) version 3]. For reference, the full text of the GPL_v3 can be downloaded from the [http://www.fsf.org/ Free Software Foundation]. There are no plans to change the license; WebSpa will always remain an open source project free for use by anyone subject to the terms of the license. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== What is WebSpa? ==&lt;br /&gt;
&lt;br /&gt;
OWASP WebSpa provides:&lt;br /&gt;
&lt;br /&gt;
* A secure channel for executing premeditated O/S commands on your web server&lt;br /&gt;
* A resource-efficient single jar-file that can either be run as server, or client application, depending on the command line parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Presentation ==&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/webspa/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;&amp;quot; | &lt;br /&gt;
&lt;br /&gt;
== Quick Download ==&lt;br /&gt;
&lt;br /&gt;
[http://sourceforge.net/projects/webspa/files/webspa-07.zip/download WebSpa v0.7]&lt;br /&gt;
&lt;br /&gt;
==Classifications==&lt;br /&gt;
&lt;br /&gt;
   {| width=&amp;quot;200&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot;| [[File:Owasp-incubator-trans-85.png|link=https://www.owasp.org/index.php/OWASP_Project_Stages#tab=Incubator_Projects]]&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-builders-small.png|link=]]  &lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-defenders-small.png|link=]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Cc-button-y-sa-small.png|link=http://creativecommons.org/licenses/by-sa/3.0/]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Project_Type_Files_CODE.jpg|link=]]&lt;br /&gt;
   |}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Videos =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|S386azVcj-c|300|right|Linux Poweroff on Apache via Web Knocking with Web-Spa (_v0.7) }} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|eHlYnWyf35E|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.5) }} &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|_VU26ZGG7D8|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4 )}} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|pKF_NxHnoyA|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4) }} &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Tutorial =&lt;br /&gt;
&lt;br /&gt;
== Supporting Documentation ==&lt;br /&gt;
&lt;br /&gt;
The discrepant event discussed herein is web knocking. Within the latest [http://sourceforge.net/projects/webspa/files/latest/download?source=directory download] you can find three documents with the purpose of describing how WebSpa can be used. The three documents are:&lt;br /&gt;
&lt;br /&gt;
* ''''WebSpa Administration Guide''' This document describes how to setup and use the server component. It details how to create new users and add new action numbers with respective O/S commands assigned to them&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa Specification Guide''' This document describes the actual design detailing the use case, specification, requirements and actual attacks, which this tool has been engineered to withstand&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa User Guide''' This document describes how to use the client for issuing commands through a URL request to a web server&lt;br /&gt;
&lt;br /&gt;
The administration guide aims to enable anyone who would be interested in using WebSpa to be able to setup the server side component of it. After configuring the server component of WebSpa, you'll be ready to use the corresponding client for issuing direct actions as O/S commands to it.&lt;br /&gt;
&lt;br /&gt;
If this is your first time using WebSpa, please note that the server operations described in this document, will not work if a WebSpa client does not submit a web-knock to your web server in a timely manner.&lt;br /&gt;
&lt;br /&gt;
Thus, knowing a client implementation goes hand-in-hand with a server instance for it, please also have a look at the WebSpa user guide document to see how the two can be used in tandem. &lt;br /&gt;
&lt;br /&gt;
The user guide aims to enable anyone who would be interested in using WebSpa to do so. As soon as you install the server side component and decide what actions to allow, you'll be ready to use the corresponding client for issuing direct actions that work for you.&lt;br /&gt;
&lt;br /&gt;
Finally, the specification guide aims to enable anyone who would be interested in implementing their own version of WebSpa to do so.&lt;br /&gt;
&lt;br /&gt;
== HelloWorld! Enabling SSH via Web Knocking with WebSpa ==&lt;br /&gt;
&lt;br /&gt;
In this section we describe the setup you should follow in order to get to the stage of being able to execute the video entitled: [https://www.youtube.com/watch?v=eHlYnWyf35E Enabling SSH via Web Knocking with WebSpa (_v0.5)] on your server.&lt;br /&gt;
&lt;br /&gt;
We assume you can SSH into your web server using the user 'web-spa'. We also assume that the user 'web-spa' has permissions to run the necessary service start and stop commands for this service. So, let's login to the box and get the latest WebSpa download:&lt;br /&gt;
&lt;br /&gt;
 ssh web-spa@web.spa.seleucus.net&lt;br /&gt;
 web-spa@web:~$ cd /tmp&lt;br /&gt;
 web-spa@web:/tmp$ wget https://downloads.sourceforge.net/project/webspa/webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
It would be wise at this stage to check the SHA1 digest of what we just downloaded. Sourceforge publishes the SHA1 of all files available for download; copying the value into our command prompt yields:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ echo &amp;quot;a630f23f88c49d02b5895a3d7e16aad245c387f3 *webspa-06.zip&amp;quot; | sha1sum -c -&lt;br /&gt;
 webspa-06.zip: OK&lt;br /&gt;
 web-spa@web:/tmp$ &lt;br /&gt;
&lt;br /&gt;
Ok, so we have downloaded something that we can vouch for-ish. Let's extract and setup.&lt;br /&gt;
&lt;br /&gt;
 unzip webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
A lot of noise comes back from this command. Apologies, different groups have clearly stated they have wanted the source code as well the documentation to be included within the download. Let's have a look at the install file:&lt;br /&gt;
&lt;br /&gt;
 =================================================&lt;br /&gt;
 - Prerequisites for WebSpa&lt;br /&gt;
 =================================================&lt;br /&gt;
&lt;br /&gt;
 The following programs must be installed in order&lt;br /&gt;
 for WebSpa to run:&lt;br /&gt;
&lt;br /&gt;
 - Java 1.6 or later&lt;br /&gt;
&lt;br /&gt;
If you don't have java installed, consider using the following command: &lt;br /&gt;
&lt;br /&gt;
 sudo aptitude install openjdk-7-jre&lt;br /&gt;
&lt;br /&gt;
This will meet the one prerequisite for using WebSpa. As this is a production server, docs and src folders will not be missed. Also, we like to store things in /opt, ergo:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/src/&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/docs/&lt;br /&gt;
 web-spa@web:/tmp$ sudo mv -v /tmp/web-spa-0.6/ /opt&lt;br /&gt;
&lt;br /&gt;
We now have WebSpa in /opt, let's run the server and create some users. &lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ cd /opt/web-spa-0.6/&lt;br /&gt;
 web-spa@web:/opt/web-spa-0.6$ java -jar web-spa-0.6.jar -server&lt;br /&gt;
&lt;br /&gt;
 Web-Spa - Single HTTP/S Request Authorisation&lt;br /&gt;
 version 0.6 (web-spa@seleucus.net)&lt;br /&gt;
&lt;br /&gt;
 This is a holding prompt, type &amp;quot;exit&amp;quot; or &amp;quot;x&amp;quot; to quit&lt;br /&gt;
&lt;br /&gt;
 - type &amp;quot;service start&amp;quot; to start the web-spa server&lt;br /&gt;
 - type &amp;quot;help&amp;quot; or &amp;quot;?&amp;quot; for more options&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last line above is the server's holding prompt; all commands are issued via this prompt. In order to exit this prompt, type 'exit' or 'quit'. In the next step we will add 3 users and assign a unique pass-phrase to each one of them. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Yiannis Pavlosoglou&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: yiannis@xxxxxx.com&lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note that only a user's full name and pass-phrase are required to be entered. Let's create another user:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Oliver Merki&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that we did not specify a user's e-mail address nor a phone number, as both these fields were optional. Finally, adding a third user: &lt;br /&gt;
&lt;br /&gt;
  web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Patryk&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Patryk we only specified his first name and a unique pass-phrase. You get the picture. Now that we have created our users, let's add some actions to each user. We would like to give Patryk the ability to bounce the SSH service; ergo, let's add two actions:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh start &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 1&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh start' to action number 1 for user Patryk. Let's also add the stop command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 1  sudo service ssh start          has never been executed&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh stop &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 0&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh stop' to action number 0 for user Patryk. Two very important steps we must not forget is to enable the user Patryk and start the web-spa listening service. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user activate&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 User with ID: 13 is in-active&lt;br /&gt;
 -[Optional] Toggle user activation [Y/n]: &lt;br /&gt;
 User with ID: 13 is active&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 And finally issue the service start command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;service start&lt;br /&gt;
 [2014-02-23 12-36-07] Attempting to start web-spa...&lt;br /&gt;
 [2014-02-23 12-36-07] Found access log file: /...cus.net/logs/access.log&lt;br /&gt;
 [2014-02-23 12-36-07] Creating tail listener...&lt;br /&gt;
 [2014-02-23 12-36-07] Web-spa server started!&lt;br /&gt;
 [2014-02-23 12-36-07] Please make sure your web server is also up&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= News =&lt;br /&gt;
&lt;br /&gt;
* [07 May 2014] Added four video links in the respective &amp;quot;Video&amp;quot; tab, referencing YouTube&lt;br /&gt;
* [24 Apr 2014] Version 0.7 has been release and can now be found in the download section. Also, we welcome Paweł and Joël to the team.&lt;br /&gt;
* [20 Mar 2014] [http://www.eventbrite.co.uk/e/owasp-london-chapter-meeting-march-2014-tickets-10063386861 WebSpa has been presented during OWASP London Chapter Meeting]&lt;br /&gt;
* [16 Mar 2014] WebSpa has a new contributor – Paweł Goleń. Paweł welcome in the team!&lt;br /&gt;
* [14 Mar 2014] [https://code.google.com/p/web-spa/ Scheduled the deletion of the Google code project, given that downloads require a new account]&lt;br /&gt;
* [04 Mar 2014] [https://soundcloud.com/#owasp-podcast/the-owasp-webspa-project-with The WebSpa podcast has now been available!] &lt;br /&gt;
* [22 Feb 2014] Created the WebSpa project on sourceforge, started the import from google code&lt;br /&gt;
* [22 Dec 2013] Version 0.6 has been released and can now be found in the download section&lt;br /&gt;
* [08 Nov 2013] The OWASP Web Knocking Project is created&lt;br /&gt;
&lt;br /&gt;
=FAQs=&lt;br /&gt;
&lt;br /&gt;
; Can one deploy WebSpa over HTTP? &lt;br /&gt;
: Yes, WebSpa can be deployed over HTTP, however for security reasons it is highly recommended to utilize HTTPS.&lt;br /&gt;
&lt;br /&gt;
; How to report a WebSpa bug?&lt;br /&gt;
:To report a WebSpa bug please feel free to create a ticket on the [http://sourceforge.net/p/webspa/tickets/?source=navbar sourceforge.net]. A sourceforge account is necessary. If you don’t own a sourceforge account you may send an e-mail to one of the contributors.&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is developed by a worldwide team of volunteers. Below is a list of all people that have contributed to the project so far.&lt;br /&gt;
&lt;br /&gt;
Active contributors:&lt;br /&gt;
* Yiannis Pavlosoglou - Inception &amp;amp; Development &lt;br /&gt;
* Patryk Arciszewski - Theoretician &amp;amp; Documentation&lt;br /&gt;
* Paweł Goleń - Breaking &amp;amp; Infrastructure &lt;br /&gt;
* Joël Rouiller - Development &amp;amp; Optimisation&lt;br /&gt;
* Oliver Merki - Leader &amp;amp; Operations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retired contributors:&lt;br /&gt;
* [[User:Dr. Markus Maria Miedaner|Markus Maria Miedaner]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
&lt;br /&gt;
== Release 0.9 (Q3/2015) == &lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.9 will be major release and include a comprehensive redesign of the WebKnock format in order to improve overall security and robustness of the request. The tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 44	New WebKnock request format should be defined&lt;br /&gt;
 42	Do not limit the web knock to 100 characters, instead use SHA-512 lengths	 &lt;br /&gt;
 35	A threat model for WebSpa should be created and reviewed	 &lt;br /&gt;
 33	Apache should be replaced by nginx	 &lt;br /&gt;
&lt;br /&gt;
== Release 0.85 (Q1/2015) ==&lt;br /&gt;
WebSpa_v0.85 will offer improved usability features, which will simplify installing, configuring and running WebSpa. The tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 40	Log to /​var/​log instead of a log.txt file	&lt;br /&gt;
 15	Add easy way to run the server as a background daemon	  &lt;br /&gt;
&lt;br /&gt;
== Release 0.8 (Q4/2014) ==&lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.8 will be sort of a proof-of-concept of WebSpa. A stable version to demonstrate the concept of WebKnocking, however, with some limitations with regards to usability/configuration and modularity (e.g. changing the hashing algorithm). The tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 43	Change SSL configuration to allow wget&lt;br /&gt;
 41	WebSpa administrator to WebSpa user output	 &lt;br /&gt;
 38	umask 077 should be added to webspa.sh	 &lt;br /&gt;
 32	A known_hosts file should be used to maintain the list of successfully verified keys	 &lt;br /&gt;
 31	Verification of server's public key fingerprint should be possible	 &lt;br /&gt;
 30	Help Files Update (0.8)	 &lt;br /&gt;
 27	Arrays.equals is not a constant time function	 &lt;br /&gt;
 2	Create maven build task for release	 &lt;br /&gt;
&lt;br /&gt;
== [http://sourceforge.net/projects/webspa/files/webspa-07.zip/download Release 0.7 (24/Apr/2014)] ==&lt;br /&gt;
&lt;br /&gt;
This is the current release of WebSpa. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.7 offers enhanced user administration functionality. The WebSpa client now offers the possibility for a user to connect to a web server with an untrusted/self-signed certificate.&lt;br /&gt;
&lt;br /&gt;
 - NEW: The WebSpa client asks the user if he wants to connect web servers with unknown/untrusted/self-signed certificates. (Ticket #28) &lt;br /&gt;
 - NEW: Introduced ‘passwd’ command, which allows the WebSpa administrator to modify a user’s password.&lt;br /&gt;
 - NEW: Introduced ‘pass-phrase show’ command, which allows the WebSpa administrator to print a user’s pass-phrase to the screen.&lt;br /&gt;
 - FIXED: Array is no longer sorted, which reduced the entropy of the web-knock. (Ticket #24)&lt;br /&gt;
 - FIXED: Reworked and added test cases.&lt;br /&gt;
 - FIXED: Removed dependency on Spring security. (Ticket #18)&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-06.zip Release 0.6 (21/Dec/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.6 offers enhanced logging functionality, fixing a bug that caused the server to become unresponsive upon starting and stopping. The client now offers to transmit a web knock request, thus not requiring for a user to copy-paste the URL into their browser. &lt;br /&gt;
&lt;br /&gt;
Additional test cases have been added, the option &amp;quot;?&amp;quot; is now available to offer &amp;quot;help&amp;quot; and the log functionality tracks via means of a timestamp all events logged&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-05.zip Release 0.5 (21/Oct/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.5 shortens the number of inputs required from a legitimate user of web-spa to only two: A valid pass-phrase, unique for each user and a single digit in the range of [0-9]. We refer to the latter as an action number and it represents a premeditated Operating System (O/S) command.&lt;br /&gt;
&lt;br /&gt;
All the functionality (for both the client and the server) is now within a single jar file, accompanied by detailed documentation:&lt;br /&gt;
&lt;br /&gt;
 - 00-web-spa-administration-guide.pdf	&lt;br /&gt;
 - 00-web-spa-specification-guide.pdf	&lt;br /&gt;
 - 00-web-spa-user-guide.pdf&lt;br /&gt;
&lt;br /&gt;
The server side functionality has been re-designed to operate with a single configuration file (created at first run) as well as a HyperSQL embedded file database (also created at first run).&lt;br /&gt;
&lt;br /&gt;
Finally, no files are created or are required when web-spa runs in client mode, with the '-client' option.&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-04.zip Release 0.4 (27/Aug/2011)] == &lt;br /&gt;
&lt;br /&gt;
A number of updates and bug fixes have been included within this version. Also, an update on the actual message format to further protect from replay attacks has been included. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.4 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-04.jar&lt;br /&gt;
 * webspa-elements-04.jar&lt;br /&gt;
 * webspa-server-04.jar&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-03.zip Release 0.3 (11/Jul/2011)] ==&lt;br /&gt;
&lt;br /&gt;
In its first usable release, WebSpa _v0.3 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-03.jar&lt;br /&gt;
 * webspa-elements-03.jar&lt;br /&gt;
 * webspa-server-03.jar&lt;br /&gt;
&lt;br /&gt;
== Contribution ==&lt;br /&gt;
&lt;br /&gt;
Involvement in the development and promotion of the OWASP WebSpa Project is actively encouraged!&lt;br /&gt;
You do not have to be a security expert in order to contribute.&lt;br /&gt;
Some of the ways you can help:&lt;br /&gt;
* Quality assurance of resolved defects&lt;br /&gt;
* Java development (good knowledge of Java desirable)&lt;br /&gt;
&lt;br /&gt;
=Project About=&lt;br /&gt;
{{:Projects/OWASP_WebSpa_Project}}  &lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]  [[Category:OWASP_Builders]] [[Category:OWASP_Defenders]]  [[Category:OWASP_Document]]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=174520</id>
		<title>OWASP WebSpa Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=174520"/>
				<updated>2014-05-08T00:39:49Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: /* Quick Download */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Main=&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;padding: 0;margin:0;margin-top:10px;text-align:left;&amp;quot; |-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
==OWASP WebSpa Project==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is a Java web knocking tool for sending a single HTTP/S request to your web server in order to authorize the execution of a premeditated Operating System (O/S) command. &lt;br /&gt;
It provides a cryptographically protected &amp;quot;open sesame&amp;quot; mechanism on the web application layer, comparable to well-known port-knocking techniques.&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
This project implements the concept of web knocking by offering a jar file that 'tails' the access log of an existing web server. A user submits a specially crafted URL, therefore executing a predefined O/S command. No new ports or services are created.&lt;br /&gt;
&lt;br /&gt;
Similarly to traditional network port-knocking schemes, the OWASP WebSpa Project aims to create a covert channel of communication for O/S commands over the web application layer. This channel is by no means bi-directional: It is only the client that can issue commands to the server. The inverse, i.e. the server issuing commands to the client, is not an option within the current version.&lt;br /&gt;
&lt;br /&gt;
==Licensing==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is free to use. It is licensed under the http://creativecommons.org/licenses/by-sa/3.0/ Creative Commons Attribution-ShareAlike 3.0 license], so you can copy, distribute and transmit the work, and you can adapt it, and use it commercially, but all provided that you attribute the work and if you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.&lt;br /&gt;
&lt;br /&gt;
The source code that comes with the OWASP WebSpa Project in the form of the tool named Web-Spa is released as open source software under the terms of the [http://www.gnu.org/licenses/quick-guide-gplv3.html GNU Public License (GPL) version 3]. For reference, the full text of the GPL_v3 can be downloaded from the [http://www.fsf.org/ Free Software Foundation]. There are no plans to change the license; web-spa will always remain an open source project free for use by anyone subject to the terms of the license. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== What is WebSpa? ==&lt;br /&gt;
&lt;br /&gt;
OWASP WebSpa provides:&lt;br /&gt;
&lt;br /&gt;
* A secure channel for executing premeditated O/S commands on your web server&lt;br /&gt;
* A resource-efficient single jar-file that can either be run as server, or client application, depending on the command line parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Presentation ==&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/webspa/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;&amp;quot; | &lt;br /&gt;
&lt;br /&gt;
== Quick Download ==&lt;br /&gt;
&lt;br /&gt;
[http://sourceforge.net/projects/webspa/files/webspa-07.zip/download WebSpa v0.7]&lt;br /&gt;
&lt;br /&gt;
==Classifications==&lt;br /&gt;
&lt;br /&gt;
   {| width=&amp;quot;200&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot;| [[File:Owasp-incubator-trans-85.png|link=https://www.owasp.org/index.php/OWASP_Project_Stages#tab=Incubator_Projects]]&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-builders-small.png|link=]]  &lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-defenders-small.png|link=]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Cc-button-y-sa-small.png|link=http://creativecommons.org/licenses/by-sa/3.0/]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Project_Type_Files_CODE.jpg|link=]]&lt;br /&gt;
   |}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Videos =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|S386azVcj-c|300|right|Linux Poweroff on Apache via Web Knocking with Web-Spa (_v0.7) }} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|eHlYnWyf35E|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.5) }} &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|_VU26ZGG7D8|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4 )}} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|pKF_NxHnoyA|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4) }} &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Tutorial =&lt;br /&gt;
&lt;br /&gt;
== Supporting Documentation ==&lt;br /&gt;
&lt;br /&gt;
The discrepant event discussed herein is web knocking. Within the latest [http://sourceforge.net/projects/webspa/files/latest/download?source=directory download] you can find three documents with the purpose of describing how WebSpa can be used. The three documents are:&lt;br /&gt;
&lt;br /&gt;
* ''''WebSpa Administration Guide''' This document describes how to setup and use the server component. It details how to create new users and add new action numbers with respective O/S commands assigned to them&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa Specification Guide''' This document describes the actual design detailing the use case, specification, requirements and actual attacks, which this tool has been engineered to withstand&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa User Guide''' This document describes how to use the client for issuing commands through a URL request to a web server&lt;br /&gt;
&lt;br /&gt;
The administration guide aims to enable anyone who would be interested in using WebSpa to be able to setup the server side component of it. After configuring the server component of WebSpa, you'll be ready to use the corresponding client for issuing direct actions as O/S commands to it.&lt;br /&gt;
&lt;br /&gt;
If this is your first time using WebSpa, please note that the server operations described in this document, will not work if a WebSpa client does not submit a web-knock to your web server in a timely manner.&lt;br /&gt;
&lt;br /&gt;
Thus, knowing a client implementation goes hand-in-hand with a server instance for it, please also have a look at the WebSpa user guide document to see how the two can be used in tandem. &lt;br /&gt;
&lt;br /&gt;
The user guide aims to enable anyone who would be interested in using web-spa to do so. As soon as you install the server side component and decide what actions to allow, you'll be ready to use the corresponding client for issuing direct actions that work for you.&lt;br /&gt;
&lt;br /&gt;
Finally, the specification guide aims to enable anyone who would be interested in implementing their own version of WebSpa to do so.&lt;br /&gt;
&lt;br /&gt;
== HelloWorld! Enabling SSH via Web Knocking with WebSpa ==&lt;br /&gt;
&lt;br /&gt;
In this section we describe the setup you should follow in order to get to the stage of being able to execute the video entitled: [https://www.youtube.com/watch?v=eHlYnWyf35E Enabling SSH via Web Knocking with Web-Spa (_v0.5)] on your server.&lt;br /&gt;
&lt;br /&gt;
We assume you can SSH into your web server using the user 'web-spa'. We also assume that the user 'web-spa' has permissions to run the necessary service start and stop commands for this service. So, let's login to the box and get the latest WebSpa download:&lt;br /&gt;
&lt;br /&gt;
 ssh web-spa@web.spa.seleucus.net&lt;br /&gt;
 web-spa@web:~$ cd /tmp&lt;br /&gt;
 web-spa@web:/tmp$ wget https://downloads.sourceforge.net/project/webspa/webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
It would be wise at this stage to check the SHA1 digest of what we just downloaded. Sourceforge publishes the SHA1 of all files available for download; copying the value into our command prompt yields:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ echo &amp;quot;a630f23f88c49d02b5895a3d7e16aad245c387f3 *webspa-06.zip&amp;quot; | sha1sum -c -&lt;br /&gt;
 webspa-06.zip: OK&lt;br /&gt;
 web-spa@web:/tmp$ &lt;br /&gt;
&lt;br /&gt;
Ok, so we have downloaded something that we can vouch for-ish. Let's extract and setup.&lt;br /&gt;
&lt;br /&gt;
 unzip webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
A lot of noise comes back from this command. Apologies, different groups have clearly stated they have wanted the source code as well the documentation to be included within the download. Let's have a look at the install file:&lt;br /&gt;
&lt;br /&gt;
 =================================================&lt;br /&gt;
 - Prerequisites for web-spa&lt;br /&gt;
 =================================================&lt;br /&gt;
&lt;br /&gt;
 The following programs must be installed in order&lt;br /&gt;
 for web-spa to run:&lt;br /&gt;
&lt;br /&gt;
 - Java 1.6 or later&lt;br /&gt;
&lt;br /&gt;
If you don't have java installed, consider using the following command: &lt;br /&gt;
&lt;br /&gt;
 sudo aptitude install openjdk-7-jre&lt;br /&gt;
&lt;br /&gt;
This will meet the one prerequisite for using WebSpa. As this is a production server, docs and src folders will not be missed. Also, we like to store things in /opt, ergo:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/src/&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/docs/&lt;br /&gt;
 web-spa@web:/tmp$ sudo mv -v /tmp/web-spa-0.6/ /opt&lt;br /&gt;
&lt;br /&gt;
We now have WebSpa in /opt, let's run the server and create some users. &lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ cd /opt/web-spa-0.6/&lt;br /&gt;
 web-spa@web:/opt/web-spa-0.6$ java -jar web-spa-0.6.jar -server&lt;br /&gt;
&lt;br /&gt;
 Web-Spa - Single HTTP/S Request Authorisation&lt;br /&gt;
 version 0.6 (web-spa@seleucus.net)&lt;br /&gt;
&lt;br /&gt;
 This is a holding prompt, type &amp;quot;exit&amp;quot; or &amp;quot;x&amp;quot; to quit&lt;br /&gt;
&lt;br /&gt;
 - type &amp;quot;service start&amp;quot; to start the web-spa server&lt;br /&gt;
 - type &amp;quot;help&amp;quot; or &amp;quot;?&amp;quot; for more options&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last line above is the server's holding prompt; all commands are issued via this prompt. In order to exit this prompt, type 'exit' or 'quit'. In the next step we will add 3 users and assign a unique pass-phrase to each one of them. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Yiannis Pavlosoglou&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: yiannis@xxxxxx.com&lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note that only a user's full name and pass-phrase are required to be entered. Let's create another user:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Oliver Merki&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that we did not specify a user's e-mail address nor a phone number, as both these fields were optional. Finally, adding a third user: &lt;br /&gt;
&lt;br /&gt;
  web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Patryk&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Patryk we only specified his first name and a unique pass-phrase. You get the picture. Now that we have created our users, let's add some actions to each user. We would like to give Patryk the ability to bounce the SSH service; ergo, let's add two actions:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh start &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 1&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh start' to action number 1 for user Patryk. Let's also add the stop command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 1  sudo service ssh start          has never been executed&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh stop &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 0&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh stop' to action number 0 for user Patryk. Two very important steps we must not forget is to enable the user Patryk and start the web-spa listening service. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user activate&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 User with ID: 13 is in-active&lt;br /&gt;
 -[Optional] Toggle user activation [Y/n]: &lt;br /&gt;
 User with ID: 13 is active&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 And finally issue the service start command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;service start&lt;br /&gt;
 [2014-02-23 12-36-07] Attempting to start web-spa...&lt;br /&gt;
 [2014-02-23 12-36-07] Found access log file: /...cus.net/logs/access.log&lt;br /&gt;
 [2014-02-23 12-36-07] Creating tail listener...&lt;br /&gt;
 [2014-02-23 12-36-07] Web-spa server started!&lt;br /&gt;
 [2014-02-23 12-36-07] Please make sure your web server is also up&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= News =&lt;br /&gt;
&lt;br /&gt;
* [07 May 2014] Added four video links in the respective &amp;quot;Video&amp;quot; tab, referencing YouTube&lt;br /&gt;
* [24 Apr 2014] Version 0.7 has been release and can now be found in the download section. Also, we welcome Paweł and Joël to the team.&lt;br /&gt;
* [20 Mar 2014] [http://www.eventbrite.co.uk/e/owasp-london-chapter-meeting-march-2014-tickets-10063386861 WebSpa has been presented during OWASP London Chapter Meeting]&lt;br /&gt;
* [16 Mar 2014] WebSpa has a new contributor – Paweł Goleń. Paweł welcome in the team!&lt;br /&gt;
* [14 Mar 2014] [https://code.google.com/p/web-spa/ Scheduled the deletion of the Google code project, given that downloads require a new account]&lt;br /&gt;
* [04 Mar 2014] [https://soundcloud.com/#owasp-podcast/the-owasp-webspa-project-with The WebSpa podcast has now been available!] &lt;br /&gt;
* [22 Feb 2014] Created the WebSpa project on sourceforge, started the import from google code&lt;br /&gt;
* [22 Dec 2013] Version 0.6 has been released and can now be found in the download section&lt;br /&gt;
* [08 Nov 2013] The OWASP Web Knocking Project is created&lt;br /&gt;
&lt;br /&gt;
=FAQs=&lt;br /&gt;
&lt;br /&gt;
; Can one deploy WebSpa over HTTP? &lt;br /&gt;
: Yes, WebSpa can be deployed over HTTP, however for security reasons it is highly recommended to utilize HTTPS.&lt;br /&gt;
&lt;br /&gt;
; How to report a WebSpa bug?&lt;br /&gt;
:To report a WebSpa bug please feel free to create a ticket on the [http://sourceforge.net/p/webspa/tickets/?source=navbar sourceforge.net]. A sourceforge account is necessary. If you don’t own a sourceforge account you may send an e-mail to one of the contributors.&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is developed by a worldwide team of volunteers. Below is a list of all people that have contributed to the project so far.&lt;br /&gt;
&lt;br /&gt;
Active contributors:&lt;br /&gt;
* Yiannis Pavlosoglou - Inception &amp;amp; Development &lt;br /&gt;
* Patryk Arciszewski - Theoretician &amp;amp; Documentation&lt;br /&gt;
* Paweł Goleń - Breaking &amp;amp; Infrastructure &lt;br /&gt;
* Joël Rouiller - Development &amp;amp; Optimisation&lt;br /&gt;
* Oliver Merki - Leader &amp;amp; Operations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retired contributors:&lt;br /&gt;
* [[User:Dr. Markus Maria Miedaner|Markus Maria Miedaner]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
&lt;br /&gt;
== Release 0.9 (Q3/2014) == &lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.9 will examine attacks on the web knocking tool and propose controls in order to address the issues in question. &lt;br /&gt;
&lt;br /&gt;
== Release 0.8 (Q2/2014) ==&lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.8 will incorporate in the server side component (run with -server option) the ability for a WebSpa administrator to generate a single output of all actions available for a user of WebSpa. The 12 tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 42	Do not limit the web knock to 100 characters, instead use SHA-512 lengths	 &lt;br /&gt;
 41	WebSpa administrator to WebSpa user output	 &lt;br /&gt;
 40	Log to /​var/​log instead of a log.txt file	 &lt;br /&gt;
 38	umask 077 should be added to webspa.sh	 &lt;br /&gt;
 35	A threat model for WebSpa should be created and reviewed	 &lt;br /&gt;
 33	Apache should be replaced by nginx	 &lt;br /&gt;
 32	A known_hosts file should be used to maintain the list of successfully verified keys	 &lt;br /&gt;
 31	Verification of server's public key fingerprint should be possible	 &lt;br /&gt;
 30	Help Files Update (0.8)	 &lt;br /&gt;
 27	Arrays.equals is not a constant time function	 &lt;br /&gt;
 15	Add easy way to run the server as a background daemon	 &lt;br /&gt;
 2	Create maven build task for release	 &lt;br /&gt;
&lt;br /&gt;
== [http://sourceforge.net/projects/webspa/files/webspa-07.zip/download Release 0.7 (24/Apr/2014)] ==&lt;br /&gt;
&lt;br /&gt;
This is the current release of WebSpa. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.7 offers enhanced user administration functionality. The WebSpa client now offers the possibility for a user to connect to a web server with an untrusted/self-signed certificate.&lt;br /&gt;
&lt;br /&gt;
 - NEW: The WebSpa client asks the user if he wants to connect web servers with unknown/untrusted/self-signed certificates. (Ticket #28) &lt;br /&gt;
 - NEW: Introduced ‘passwd’ command, which allows the WebSpa administrator to modify a user’s password.&lt;br /&gt;
 - NEW: Introduced ‘pass-phrase show’ command, which allows the WebSpa administrator to print a user’s pass-phrase to the screen.&lt;br /&gt;
 - FIXED: Array is no longer sorted, which reduced the entropy of the web-knock. (Ticket #24)&lt;br /&gt;
 - FIXED: Reworked and added test cases.&lt;br /&gt;
 - FIXED: Removed dependency on Spring security. (Ticket #18)&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-06.zip Release 0.6 (21/Dec/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.6 offers enhanced logging functionality, fixing a bug that caused the server to become unresponsive upon starting and stopping. The client now offers to transmit a web knock request, thus not requiring for a user to copy-paste the URL into their browser. &lt;br /&gt;
&lt;br /&gt;
Additional test cases have been added, the option &amp;quot;?&amp;quot; is now available to offer &amp;quot;help&amp;quot; and the log functionality tracks via means of a timestamp all events logged&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-05.zip Release 0.5 (21/Oct/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.5 shortens the number of inputs required from a legitimate user of web-spa to only two: A valid pass-phrase, unique for each user and a single digit in the range of [0-9]. We refer to the latter as an action number and it represents a premeditated Operating System (O/S) command.&lt;br /&gt;
&lt;br /&gt;
All the functionality (for both the client and the server) is now within a single jar file, accompanied by detailed documentation:&lt;br /&gt;
&lt;br /&gt;
 - 00-web-spa-administration-guide.pdf	&lt;br /&gt;
 - 00-web-spa-specification-guide.pdf	&lt;br /&gt;
 - 00-web-spa-user-guide.pdf&lt;br /&gt;
&lt;br /&gt;
The server side functionality has been re-designed to operate with a single configuration file (created at first run) as well as a HyperSQL embedded file database (also created at first run).&lt;br /&gt;
&lt;br /&gt;
Finally, no files are created or are required when web-spa runs in client mode, with the '-client' option.&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-04.zip Release 0.4 (27/Aug/2011)] == &lt;br /&gt;
&lt;br /&gt;
A number of updates and bug fixes have been included within this version. Also, an update on the actual message format to further protect from replay attacks has been included. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.4 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-04.jar&lt;br /&gt;
 * webspa-elements-04.jar&lt;br /&gt;
 * webspa-server-04.jar&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-03.zip Release 0.3 (11/Jul/2011)] ==&lt;br /&gt;
&lt;br /&gt;
In its first usable release, WebSpa _v0.3 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-03.jar&lt;br /&gt;
 * webspa-elements-03.jar&lt;br /&gt;
 * webspa-server-03.jar&lt;br /&gt;
&lt;br /&gt;
== Contribution ==&lt;br /&gt;
&lt;br /&gt;
Involvement in the development and promotion of the OWASP WebSpa Project is actively encouraged!&lt;br /&gt;
You do not have to be a security expert in order to contribute.&lt;br /&gt;
Some of the ways you can help:&lt;br /&gt;
* Quality assurance of resolved defects&lt;br /&gt;
* Java development (good knowledge of Java desirable)&lt;br /&gt;
&lt;br /&gt;
=Project About=&lt;br /&gt;
{{:Projects/OWASP_WebSpa_Project}}  &lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]  [[Category:OWASP_Builders]] [[Category:OWASP_Defenders]]  [[Category:OWASP_Document]]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=174519</id>
		<title>OWASP WebSpa Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=174519"/>
				<updated>2014-05-08T00:34:24Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: Updated the format for the roadmap for release 0.8&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Main=&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;padding: 0;margin:0;margin-top:10px;text-align:left;&amp;quot; |-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
==OWASP WebSpa Project==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is a Java web knocking tool for sending a single HTTP/S request to your web server in order to authorize the execution of a premeditated Operating System (O/S) command. &lt;br /&gt;
It provides a cryptographically protected &amp;quot;open sesame&amp;quot; mechanism on the web application layer, comparable to well-known port-knocking techniques.&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
This project implements the concept of web knocking by offering a jar file that 'tails' the access log of an existing web server. A user submits a specially crafted URL, therefore executing a predefined O/S command. No new ports or services are created.&lt;br /&gt;
&lt;br /&gt;
Similarly to traditional network port-knocking schemes, the OWASP WebSpa Project aims to create a covert channel of communication for O/S commands over the web application layer. This channel is by no means bi-directional: It is only the client that can issue commands to the server. The inverse, i.e. the server issuing commands to the client, is not an option within the current version.&lt;br /&gt;
&lt;br /&gt;
==Licensing==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is free to use. It is licensed under the http://creativecommons.org/licenses/by-sa/3.0/ Creative Commons Attribution-ShareAlike 3.0 license], so you can copy, distribute and transmit the work, and you can adapt it, and use it commercially, but all provided that you attribute the work and if you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.&lt;br /&gt;
&lt;br /&gt;
The source code that comes with the OWASP WebSpa Project in the form of the tool named Web-Spa is released as open source software under the terms of the [http://www.gnu.org/licenses/quick-guide-gplv3.html GNU Public License (GPL) version 3]. For reference, the full text of the GPL_v3 can be downloaded from the [http://www.fsf.org/ Free Software Foundation]. There are no plans to change the license; web-spa will always remain an open source project free for use by anyone subject to the terms of the license. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== What is WebSpa? ==&lt;br /&gt;
&lt;br /&gt;
OWASP WebSpa provides:&lt;br /&gt;
&lt;br /&gt;
* A secure channel for executing premeditated O/S commands on your web server&lt;br /&gt;
* A resource-efficient single jar-file that can either be run as server, or client application, depending on the command line parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Presentation ==&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/webspa/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;&amp;quot; | &lt;br /&gt;
&lt;br /&gt;
== Quick Download ==&lt;br /&gt;
&lt;br /&gt;
* http://sourceforge.net/projects/webspa/files/latest/download?source=files&lt;br /&gt;
&lt;br /&gt;
==Classifications==&lt;br /&gt;
&lt;br /&gt;
   {| width=&amp;quot;200&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot;| [[File:Owasp-incubator-trans-85.png|link=https://www.owasp.org/index.php/OWASP_Project_Stages#tab=Incubator_Projects]]&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-builders-small.png|link=]]  &lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-defenders-small.png|link=]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Cc-button-y-sa-small.png|link=http://creativecommons.org/licenses/by-sa/3.0/]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Project_Type_Files_CODE.jpg|link=]]&lt;br /&gt;
   |}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Videos =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|S386azVcj-c|300|right|Linux Poweroff on Apache via Web Knocking with Web-Spa (_v0.7) }} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|eHlYnWyf35E|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.5) }} &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|_VU26ZGG7D8|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4 )}} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|pKF_NxHnoyA|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4) }} &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Tutorial =&lt;br /&gt;
&lt;br /&gt;
== Supporting Documentation ==&lt;br /&gt;
&lt;br /&gt;
The discrepant event discussed herein is web knocking. Within the latest [http://sourceforge.net/projects/webspa/files/latest/download?source=directory download] you can find three documents with the purpose of describing how WebSpa can be used. The three documents are:&lt;br /&gt;
&lt;br /&gt;
* ''''WebSpa Administration Guide''' This document describes how to setup and use the server component. It details how to create new users and add new action numbers with respective O/S commands assigned to them&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa Specification Guide''' This document describes the actual design detailing the use case, specification, requirements and actual attacks, which this tool has been engineered to withstand&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa User Guide''' This document describes how to use the client for issuing commands through a URL request to a web server&lt;br /&gt;
&lt;br /&gt;
The administration guide aims to enable anyone who would be interested in using WebSpa to be able to setup the server side component of it. After configuring the server component of WebSpa, you'll be ready to use the corresponding client for issuing direct actions as O/S commands to it.&lt;br /&gt;
&lt;br /&gt;
If this is your first time using WebSpa, please note that the server operations described in this document, will not work if a WebSpa client does not submit a web-knock to your web server in a timely manner.&lt;br /&gt;
&lt;br /&gt;
Thus, knowing a client implementation goes hand-in-hand with a server instance for it, please also have a look at the WebSpa user guide document to see how the two can be used in tandem. &lt;br /&gt;
&lt;br /&gt;
The user guide aims to enable anyone who would be interested in using web-spa to do so. As soon as you install the server side component and decide what actions to allow, you'll be ready to use the corresponding client for issuing direct actions that work for you.&lt;br /&gt;
&lt;br /&gt;
Finally, the specification guide aims to enable anyone who would be interested in implementing their own version of WebSpa to do so.&lt;br /&gt;
&lt;br /&gt;
== HelloWorld! Enabling SSH via Web Knocking with WebSpa ==&lt;br /&gt;
&lt;br /&gt;
In this section we describe the setup you should follow in order to get to the stage of being able to execute the video entitled: [https://www.youtube.com/watch?v=eHlYnWyf35E Enabling SSH via Web Knocking with Web-Spa (_v0.5)] on your server.&lt;br /&gt;
&lt;br /&gt;
We assume you can SSH into your web server using the user 'web-spa'. We also assume that the user 'web-spa' has permissions to run the necessary service start and stop commands for this service. So, let's login to the box and get the latest WebSpa download:&lt;br /&gt;
&lt;br /&gt;
 ssh web-spa@web.spa.seleucus.net&lt;br /&gt;
 web-spa@web:~$ cd /tmp&lt;br /&gt;
 web-spa@web:/tmp$ wget https://downloads.sourceforge.net/project/webspa/webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
It would be wise at this stage to check the SHA1 digest of what we just downloaded. Sourceforge publishes the SHA1 of all files available for download; copying the value into our command prompt yields:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ echo &amp;quot;a630f23f88c49d02b5895a3d7e16aad245c387f3 *webspa-06.zip&amp;quot; | sha1sum -c -&lt;br /&gt;
 webspa-06.zip: OK&lt;br /&gt;
 web-spa@web:/tmp$ &lt;br /&gt;
&lt;br /&gt;
Ok, so we have downloaded something that we can vouch for-ish. Let's extract and setup.&lt;br /&gt;
&lt;br /&gt;
 unzip webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
A lot of noise comes back from this command. Apologies, different groups have clearly stated they have wanted the source code as well the documentation to be included within the download. Let's have a look at the install file:&lt;br /&gt;
&lt;br /&gt;
 =================================================&lt;br /&gt;
 - Prerequisites for web-spa&lt;br /&gt;
 =================================================&lt;br /&gt;
&lt;br /&gt;
 The following programs must be installed in order&lt;br /&gt;
 for web-spa to run:&lt;br /&gt;
&lt;br /&gt;
 - Java 1.6 or later&lt;br /&gt;
&lt;br /&gt;
If you don't have java installed, consider using the following command: &lt;br /&gt;
&lt;br /&gt;
 sudo aptitude install openjdk-7-jre&lt;br /&gt;
&lt;br /&gt;
This will meet the one prerequisite for using WebSpa. As this is a production server, docs and src folders will not be missed. Also, we like to store things in /opt, ergo:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/src/&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/docs/&lt;br /&gt;
 web-spa@web:/tmp$ sudo mv -v /tmp/web-spa-0.6/ /opt&lt;br /&gt;
&lt;br /&gt;
We now have WebSpa in /opt, let's run the server and create some users. &lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ cd /opt/web-spa-0.6/&lt;br /&gt;
 web-spa@web:/opt/web-spa-0.6$ java -jar web-spa-0.6.jar -server&lt;br /&gt;
&lt;br /&gt;
 Web-Spa - Single HTTP/S Request Authorisation&lt;br /&gt;
 version 0.6 (web-spa@seleucus.net)&lt;br /&gt;
&lt;br /&gt;
 This is a holding prompt, type &amp;quot;exit&amp;quot; or &amp;quot;x&amp;quot; to quit&lt;br /&gt;
&lt;br /&gt;
 - type &amp;quot;service start&amp;quot; to start the web-spa server&lt;br /&gt;
 - type &amp;quot;help&amp;quot; or &amp;quot;?&amp;quot; for more options&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last line above is the server's holding prompt; all commands are issued via this prompt. In order to exit this prompt, type 'exit' or 'quit'. In the next step we will add 3 users and assign a unique pass-phrase to each one of them. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Yiannis Pavlosoglou&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: yiannis@xxxxxx.com&lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note that only a user's full name and pass-phrase are required to be entered. Let's create another user:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Oliver Merki&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that we did not specify a user's e-mail address nor a phone number, as both these fields were optional. Finally, adding a third user: &lt;br /&gt;
&lt;br /&gt;
  web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Patryk&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Patryk we only specified his first name and a unique pass-phrase. You get the picture. Now that we have created our users, let's add some actions to each user. We would like to give Patryk the ability to bounce the SSH service; ergo, let's add two actions:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh start &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 1&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh start' to action number 1 for user Patryk. Let's also add the stop command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 1  sudo service ssh start          has never been executed&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh stop &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 0&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh stop' to action number 0 for user Patryk. Two very important steps we must not forget is to enable the user Patryk and start the web-spa listening service. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user activate&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 User with ID: 13 is in-active&lt;br /&gt;
 -[Optional] Toggle user activation [Y/n]: &lt;br /&gt;
 User with ID: 13 is active&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 And finally issue the service start command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;service start&lt;br /&gt;
 [2014-02-23 12-36-07] Attempting to start web-spa...&lt;br /&gt;
 [2014-02-23 12-36-07] Found access log file: /...cus.net/logs/access.log&lt;br /&gt;
 [2014-02-23 12-36-07] Creating tail listener...&lt;br /&gt;
 [2014-02-23 12-36-07] Web-spa server started!&lt;br /&gt;
 [2014-02-23 12-36-07] Please make sure your web server is also up&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= News =&lt;br /&gt;
&lt;br /&gt;
* [07 May 2014] Added four video links in the respective &amp;quot;Video&amp;quot; tab, referencing YouTube&lt;br /&gt;
* [24 Apr 2014] Version 0.7 has been release and can now be found in the download section. Also, we welcome Paweł and Joël to the team.&lt;br /&gt;
* [20 Mar 2014] [http://www.eventbrite.co.uk/e/owasp-london-chapter-meeting-march-2014-tickets-10063386861 WebSpa has been presented during OWASP London Chapter Meeting]&lt;br /&gt;
* [16 Mar 2014] WebSpa has a new contributor – Paweł Goleń. Paweł welcome in the team!&lt;br /&gt;
* [14 Mar 2014] [https://code.google.com/p/web-spa/ Scheduled the deletion of the Google code project, given that downloads require a new account]&lt;br /&gt;
* [04 Mar 2014] [https://soundcloud.com/#owasp-podcast/the-owasp-webspa-project-with The WebSpa podcast has now been available!] &lt;br /&gt;
* [22 Feb 2014] Created the WebSpa project on sourceforge, started the import from google code&lt;br /&gt;
* [22 Dec 2013] Version 0.6 has been released and can now be found in the download section&lt;br /&gt;
* [08 Nov 2013] The OWASP Web Knocking Project is created&lt;br /&gt;
&lt;br /&gt;
=FAQs=&lt;br /&gt;
&lt;br /&gt;
; Can one deploy WebSpa over HTTP? &lt;br /&gt;
: Yes, WebSpa can be deployed over HTTP, however for security reasons it is highly recommended to utilize HTTPS.&lt;br /&gt;
&lt;br /&gt;
; How to report a WebSpa bug?&lt;br /&gt;
:To report a WebSpa bug please feel free to create a ticket on the [http://sourceforge.net/p/webspa/tickets/?source=navbar sourceforge.net]. A sourceforge account is necessary. If you don’t own a sourceforge account you may send an e-mail to one of the contributors.&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is developed by a worldwide team of volunteers. Below is a list of all people that have contributed to the project so far.&lt;br /&gt;
&lt;br /&gt;
Active contributors:&lt;br /&gt;
* Yiannis Pavlosoglou - Inception &amp;amp; Development &lt;br /&gt;
* Patryk Arciszewski - Theoretician &amp;amp; Documentation&lt;br /&gt;
* Paweł Goleń - Breaking &amp;amp; Infrastructure &lt;br /&gt;
* Joël Rouiller - Development &amp;amp; Optimisation&lt;br /&gt;
* Oliver Merki - Leader &amp;amp; Operations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retired contributors:&lt;br /&gt;
* [[User:Dr. Markus Maria Miedaner|Markus Maria Miedaner]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
&lt;br /&gt;
== Release 0.9 (Q3/2014) == &lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.9 will examine attacks on the web knocking tool and propose controls in order to address the issues in question. &lt;br /&gt;
&lt;br /&gt;
== Release 0.8 (Q2/2014) ==&lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.8 will incorporate in the server side component (run with -server option) the ability for a WebSpa administrator to generate a single output of all actions available for a user of WebSpa. The 12 tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
 42	Do not limit the web knock to 100 characters, instead use SHA-512 lengths	 &lt;br /&gt;
 41	WebSpa administrator to WebSpa user output	 &lt;br /&gt;
 40	Log to /​var/​log instead of a log.txt file	 &lt;br /&gt;
 38	umask 077 should be added to webspa.sh	 &lt;br /&gt;
 35	A threat model for WebSpa should be created and reviewed	 &lt;br /&gt;
 33	Apache should be replaced by nginx	 &lt;br /&gt;
 32	A known_hosts file should be used to maintain the list of successfully verified keys	 &lt;br /&gt;
 31	Verification of server's public key fingerprint should be possible	 &lt;br /&gt;
 30	Help Files Update (0.8)	 &lt;br /&gt;
 27	Arrays.equals is not a constant time function	 &lt;br /&gt;
 15	Add easy way to run the server as a background daemon	 &lt;br /&gt;
 2	Create maven build task for release	 &lt;br /&gt;
&lt;br /&gt;
== [http://sourceforge.net/projects/webspa/files/webspa-07.zip/download Release 0.7 (24/Apr/2014)] ==&lt;br /&gt;
&lt;br /&gt;
This is the current release of WebSpa. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.7 offers enhanced user administration functionality. The WebSpa client now offers the possibility for a user to connect to a web server with an untrusted/self-signed certificate.&lt;br /&gt;
&lt;br /&gt;
 - NEW: The WebSpa client asks the user if he wants to connect web servers with unknown/untrusted/self-signed certificates. (Ticket #28) &lt;br /&gt;
 - NEW: Introduced ‘passwd’ command, which allows the WebSpa administrator to modify a user’s password.&lt;br /&gt;
 - NEW: Introduced ‘pass-phrase show’ command, which allows the WebSpa administrator to print a user’s pass-phrase to the screen.&lt;br /&gt;
 - FIXED: Array is no longer sorted, which reduced the entropy of the web-knock. (Ticket #24)&lt;br /&gt;
 - FIXED: Reworked and added test cases.&lt;br /&gt;
 - FIXED: Removed dependency on Spring security. (Ticket #18)&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-06.zip Release 0.6 (21/Dec/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.6 offers enhanced logging functionality, fixing a bug that caused the server to become unresponsive upon starting and stopping. The client now offers to transmit a web knock request, thus not requiring for a user to copy-paste the URL into their browser. &lt;br /&gt;
&lt;br /&gt;
Additional test cases have been added, the option &amp;quot;?&amp;quot; is now available to offer &amp;quot;help&amp;quot; and the log functionality tracks via means of a timestamp all events logged&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-05.zip Release 0.5 (21/Oct/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.5 shortens the number of inputs required from a legitimate user of web-spa to only two: A valid pass-phrase, unique for each user and a single digit in the range of [0-9]. We refer to the latter as an action number and it represents a premeditated Operating System (O/S) command.&lt;br /&gt;
&lt;br /&gt;
All the functionality (for both the client and the server) is now within a single jar file, accompanied by detailed documentation:&lt;br /&gt;
&lt;br /&gt;
 - 00-web-spa-administration-guide.pdf	&lt;br /&gt;
 - 00-web-spa-specification-guide.pdf	&lt;br /&gt;
 - 00-web-spa-user-guide.pdf&lt;br /&gt;
&lt;br /&gt;
The server side functionality has been re-designed to operate with a single configuration file (created at first run) as well as a HyperSQL embedded file database (also created at first run).&lt;br /&gt;
&lt;br /&gt;
Finally, no files are created or are required when web-spa runs in client mode, with the '-client' option.&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-04.zip Release 0.4 (27/Aug/2011)] == &lt;br /&gt;
&lt;br /&gt;
A number of updates and bug fixes have been included within this version. Also, an update on the actual message format to further protect from replay attacks has been included. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.4 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-04.jar&lt;br /&gt;
 * webspa-elements-04.jar&lt;br /&gt;
 * webspa-server-04.jar&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-03.zip Release 0.3 (11/Jul/2011)] ==&lt;br /&gt;
&lt;br /&gt;
In its first usable release, WebSpa _v0.3 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-03.jar&lt;br /&gt;
 * webspa-elements-03.jar&lt;br /&gt;
 * webspa-server-03.jar&lt;br /&gt;
&lt;br /&gt;
== Contribution ==&lt;br /&gt;
&lt;br /&gt;
Involvement in the development and promotion of the OWASP WebSpa Project is actively encouraged!&lt;br /&gt;
You do not have to be a security expert in order to contribute.&lt;br /&gt;
Some of the ways you can help:&lt;br /&gt;
* Quality assurance of resolved defects&lt;br /&gt;
* Java development (good knowledge of Java desirable)&lt;br /&gt;
&lt;br /&gt;
=Project About=&lt;br /&gt;
{{:Projects/OWASP_WebSpa_Project}}  &lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]  [[Category:OWASP_Builders]] [[Category:OWASP_Defenders]]  [[Category:OWASP_Document]]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=174518</id>
		<title>OWASP WebSpa Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=174518"/>
				<updated>2014-05-08T00:32:41Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: Updated the roadmap for release 0.8&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Main=&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;padding: 0;margin:0;margin-top:10px;text-align:left;&amp;quot; |-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
==OWASP WebSpa Project==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is a Java web knocking tool for sending a single HTTP/S request to your web server in order to authorize the execution of a premeditated Operating System (O/S) command. &lt;br /&gt;
It provides a cryptographically protected &amp;quot;open sesame&amp;quot; mechanism on the web application layer, comparable to well-known port-knocking techniques.&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
This project implements the concept of web knocking by offering a jar file that 'tails' the access log of an existing web server. A user submits a specially crafted URL, therefore executing a predefined O/S command. No new ports or services are created.&lt;br /&gt;
&lt;br /&gt;
Similarly to traditional network port-knocking schemes, the OWASP WebSpa Project aims to create a covert channel of communication for O/S commands over the web application layer. This channel is by no means bi-directional: It is only the client that can issue commands to the server. The inverse, i.e. the server issuing commands to the client, is not an option within the current version.&lt;br /&gt;
&lt;br /&gt;
==Licensing==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is free to use. It is licensed under the http://creativecommons.org/licenses/by-sa/3.0/ Creative Commons Attribution-ShareAlike 3.0 license], so you can copy, distribute and transmit the work, and you can adapt it, and use it commercially, but all provided that you attribute the work and if you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.&lt;br /&gt;
&lt;br /&gt;
The source code that comes with the OWASP WebSpa Project in the form of the tool named Web-Spa is released as open source software under the terms of the [http://www.gnu.org/licenses/quick-guide-gplv3.html GNU Public License (GPL) version 3]. For reference, the full text of the GPL_v3 can be downloaded from the [http://www.fsf.org/ Free Software Foundation]. There are no plans to change the license; web-spa will always remain an open source project free for use by anyone subject to the terms of the license. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== What is WebSpa? ==&lt;br /&gt;
&lt;br /&gt;
OWASP WebSpa provides:&lt;br /&gt;
&lt;br /&gt;
* A secure channel for executing premeditated O/S commands on your web server&lt;br /&gt;
* A resource-efficient single jar-file that can either be run as server, or client application, depending on the command line parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Presentation ==&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/webspa/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;&amp;quot; | &lt;br /&gt;
&lt;br /&gt;
== Quick Download ==&lt;br /&gt;
&lt;br /&gt;
* http://sourceforge.net/projects/webspa/files/latest/download?source=files&lt;br /&gt;
&lt;br /&gt;
==Classifications==&lt;br /&gt;
&lt;br /&gt;
   {| width=&amp;quot;200&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot;| [[File:Owasp-incubator-trans-85.png|link=https://www.owasp.org/index.php/OWASP_Project_Stages#tab=Incubator_Projects]]&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-builders-small.png|link=]]  &lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-defenders-small.png|link=]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Cc-button-y-sa-small.png|link=http://creativecommons.org/licenses/by-sa/3.0/]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Project_Type_Files_CODE.jpg|link=]]&lt;br /&gt;
   |}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Videos =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|S386azVcj-c|300|right|Linux Poweroff on Apache via Web Knocking with Web-Spa (_v0.7) }} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|eHlYnWyf35E|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.5) }} &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|_VU26ZGG7D8|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4 )}} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|pKF_NxHnoyA|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4) }} &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Tutorial =&lt;br /&gt;
&lt;br /&gt;
== Supporting Documentation ==&lt;br /&gt;
&lt;br /&gt;
The discrepant event discussed herein is web knocking. Within the latest [http://sourceforge.net/projects/webspa/files/latest/download?source=directory download] you can find three documents with the purpose of describing how WebSpa can be used. The three documents are:&lt;br /&gt;
&lt;br /&gt;
* ''''WebSpa Administration Guide''' This document describes how to setup and use the server component. It details how to create new users and add new action numbers with respective O/S commands assigned to them&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa Specification Guide''' This document describes the actual design detailing the use case, specification, requirements and actual attacks, which this tool has been engineered to withstand&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa User Guide''' This document describes how to use the client for issuing commands through a URL request to a web server&lt;br /&gt;
&lt;br /&gt;
The administration guide aims to enable anyone who would be interested in using WebSpa to be able to setup the server side component of it. After configuring the server component of WebSpa, you'll be ready to use the corresponding client for issuing direct actions as O/S commands to it.&lt;br /&gt;
&lt;br /&gt;
If this is your first time using WebSpa, please note that the server operations described in this document, will not work if a WebSpa client does not submit a web-knock to your web server in a timely manner.&lt;br /&gt;
&lt;br /&gt;
Thus, knowing a client implementation goes hand-in-hand with a server instance for it, please also have a look at the WebSpa user guide document to see how the two can be used in tandem. &lt;br /&gt;
&lt;br /&gt;
The user guide aims to enable anyone who would be interested in using web-spa to do so. As soon as you install the server side component and decide what actions to allow, you'll be ready to use the corresponding client for issuing direct actions that work for you.&lt;br /&gt;
&lt;br /&gt;
Finally, the specification guide aims to enable anyone who would be interested in implementing their own version of WebSpa to do so.&lt;br /&gt;
&lt;br /&gt;
== HelloWorld! Enabling SSH via Web Knocking with WebSpa ==&lt;br /&gt;
&lt;br /&gt;
In this section we describe the setup you should follow in order to get to the stage of being able to execute the video entitled: [https://www.youtube.com/watch?v=eHlYnWyf35E Enabling SSH via Web Knocking with Web-Spa (_v0.5)] on your server.&lt;br /&gt;
&lt;br /&gt;
We assume you can SSH into your web server using the user 'web-spa'. We also assume that the user 'web-spa' has permissions to run the necessary service start and stop commands for this service. So, let's login to the box and get the latest WebSpa download:&lt;br /&gt;
&lt;br /&gt;
 ssh web-spa@web.spa.seleucus.net&lt;br /&gt;
 web-spa@web:~$ cd /tmp&lt;br /&gt;
 web-spa@web:/tmp$ wget https://downloads.sourceforge.net/project/webspa/webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
It would be wise at this stage to check the SHA1 digest of what we just downloaded. Sourceforge publishes the SHA1 of all files available for download; copying the value into our command prompt yields:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ echo &amp;quot;a630f23f88c49d02b5895a3d7e16aad245c387f3 *webspa-06.zip&amp;quot; | sha1sum -c -&lt;br /&gt;
 webspa-06.zip: OK&lt;br /&gt;
 web-spa@web:/tmp$ &lt;br /&gt;
&lt;br /&gt;
Ok, so we have downloaded something that we can vouch for-ish. Let's extract and setup.&lt;br /&gt;
&lt;br /&gt;
 unzip webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
A lot of noise comes back from this command. Apologies, different groups have clearly stated they have wanted the source code as well the documentation to be included within the download. Let's have a look at the install file:&lt;br /&gt;
&lt;br /&gt;
 =================================================&lt;br /&gt;
 - Prerequisites for web-spa&lt;br /&gt;
 =================================================&lt;br /&gt;
&lt;br /&gt;
 The following programs must be installed in order&lt;br /&gt;
 for web-spa to run:&lt;br /&gt;
&lt;br /&gt;
 - Java 1.6 or later&lt;br /&gt;
&lt;br /&gt;
If you don't have java installed, consider using the following command: &lt;br /&gt;
&lt;br /&gt;
 sudo aptitude install openjdk-7-jre&lt;br /&gt;
&lt;br /&gt;
This will meet the one prerequisite for using WebSpa. As this is a production server, docs and src folders will not be missed. Also, we like to store things in /opt, ergo:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/src/&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/docs/&lt;br /&gt;
 web-spa@web:/tmp$ sudo mv -v /tmp/web-spa-0.6/ /opt&lt;br /&gt;
&lt;br /&gt;
We now have WebSpa in /opt, let's run the server and create some users. &lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ cd /opt/web-spa-0.6/&lt;br /&gt;
 web-spa@web:/opt/web-spa-0.6$ java -jar web-spa-0.6.jar -server&lt;br /&gt;
&lt;br /&gt;
 Web-Spa - Single HTTP/S Request Authorisation&lt;br /&gt;
 version 0.6 (web-spa@seleucus.net)&lt;br /&gt;
&lt;br /&gt;
 This is a holding prompt, type &amp;quot;exit&amp;quot; or &amp;quot;x&amp;quot; to quit&lt;br /&gt;
&lt;br /&gt;
 - type &amp;quot;service start&amp;quot; to start the web-spa server&lt;br /&gt;
 - type &amp;quot;help&amp;quot; or &amp;quot;?&amp;quot; for more options&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last line above is the server's holding prompt; all commands are issued via this prompt. In order to exit this prompt, type 'exit' or 'quit'. In the next step we will add 3 users and assign a unique pass-phrase to each one of them. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Yiannis Pavlosoglou&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: yiannis@xxxxxx.com&lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note that only a user's full name and pass-phrase are required to be entered. Let's create another user:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Oliver Merki&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that we did not specify a user's e-mail address nor a phone number, as both these fields were optional. Finally, adding a third user: &lt;br /&gt;
&lt;br /&gt;
  web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Patryk&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Patryk we only specified his first name and a unique pass-phrase. You get the picture. Now that we have created our users, let's add some actions to each user. We would like to give Patryk the ability to bounce the SSH service; ergo, let's add two actions:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh start &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 1&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh start' to action number 1 for user Patryk. Let's also add the stop command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 1  sudo service ssh start          has never been executed&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh stop &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 0&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh stop' to action number 0 for user Patryk. Two very important steps we must not forget is to enable the user Patryk and start the web-spa listening service. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user activate&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 User with ID: 13 is in-active&lt;br /&gt;
 -[Optional] Toggle user activation [Y/n]: &lt;br /&gt;
 User with ID: 13 is active&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 And finally issue the service start command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;service start&lt;br /&gt;
 [2014-02-23 12-36-07] Attempting to start web-spa...&lt;br /&gt;
 [2014-02-23 12-36-07] Found access log file: /...cus.net/logs/access.log&lt;br /&gt;
 [2014-02-23 12-36-07] Creating tail listener...&lt;br /&gt;
 [2014-02-23 12-36-07] Web-spa server started!&lt;br /&gt;
 [2014-02-23 12-36-07] Please make sure your web server is also up&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= News =&lt;br /&gt;
&lt;br /&gt;
* [07 May 2014] Added four video links in the respective &amp;quot;Video&amp;quot; tab, referencing YouTube&lt;br /&gt;
* [24 Apr 2014] Version 0.7 has been release and can now be found in the download section. Also, we welcome Paweł and Joël to the team.&lt;br /&gt;
* [20 Mar 2014] [http://www.eventbrite.co.uk/e/owasp-london-chapter-meeting-march-2014-tickets-10063386861 WebSpa has been presented during OWASP London Chapter Meeting]&lt;br /&gt;
* [16 Mar 2014] WebSpa has a new contributor – Paweł Goleń. Paweł welcome in the team!&lt;br /&gt;
* [14 Mar 2014] [https://code.google.com/p/web-spa/ Scheduled the deletion of the Google code project, given that downloads require a new account]&lt;br /&gt;
* [04 Mar 2014] [https://soundcloud.com/#owasp-podcast/the-owasp-webspa-project-with The WebSpa podcast has now been available!] &lt;br /&gt;
* [22 Feb 2014] Created the WebSpa project on sourceforge, started the import from google code&lt;br /&gt;
* [22 Dec 2013] Version 0.6 has been released and can now be found in the download section&lt;br /&gt;
* [08 Nov 2013] The OWASP Web Knocking Project is created&lt;br /&gt;
&lt;br /&gt;
=FAQs=&lt;br /&gt;
&lt;br /&gt;
; Can one deploy WebSpa over HTTP? &lt;br /&gt;
: Yes, WebSpa can be deployed over HTTP, however for security reasons it is highly recommended to utilize HTTPS.&lt;br /&gt;
&lt;br /&gt;
; How to report a WebSpa bug?&lt;br /&gt;
:To report a WebSpa bug please feel free to create a ticket on the [http://sourceforge.net/p/webspa/tickets/?source=navbar sourceforge.net]. A sourceforge account is necessary. If you don’t own a sourceforge account you may send an e-mail to one of the contributors.&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is developed by a worldwide team of volunteers. Below is a list of all people that have contributed to the project so far.&lt;br /&gt;
&lt;br /&gt;
Active contributors:&lt;br /&gt;
* Yiannis Pavlosoglou - Inception &amp;amp; Development &lt;br /&gt;
* Patryk Arciszewski - Theoretician &amp;amp; Documentation&lt;br /&gt;
* Paweł Goleń - Breaking &amp;amp; Infrastructure &lt;br /&gt;
* Joël Rouiller - Development &amp;amp; Optimisation&lt;br /&gt;
* Oliver Merki - Leader &amp;amp; Operations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retired contributors:&lt;br /&gt;
* [[User:Dr. Markus Maria Miedaner|Markus Maria Miedaner]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
&lt;br /&gt;
== Release 0.9 (Q3/2014) == &lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.9 will examine attacks on the web knocking tool and propose controls in order to address the issues in question. &lt;br /&gt;
&lt;br /&gt;
== Release 0.8 (Q2/2014) ==&lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.8 will incorporate in the server side component (run with -server option) the ability for a WebSpa administrator to generate a single output of all actions available for a user of WebSpa. The 12 tickets for this release are:&lt;br /&gt;
&lt;br /&gt;
42	Do not limit the web knock to 100 characters, instead use SHA-512 lengths	 &lt;br /&gt;
41	WebSpa administrator to WebSpa user output	 &lt;br /&gt;
40	Log to /​var/​log instead of a log.txt file	 &lt;br /&gt;
38	umask 077 should be added to webspa.sh	 &lt;br /&gt;
35	A threat model for WebSpa should be created and reviewed	 &lt;br /&gt;
33	Apache should be replaced by nginx	 &lt;br /&gt;
32	A known_hosts file should be used to maintain the list of successfully verified keys	 &lt;br /&gt;
31	Verification of server's public key fingerprint should be possible	 &lt;br /&gt;
30	Help Files Update (0.8)	 &lt;br /&gt;
27	Arrays.equals is not a constant time function	 &lt;br /&gt;
15	Add easy way to run the server as a background daemon	 &lt;br /&gt;
2	Create maven build task for release	 &lt;br /&gt;
&lt;br /&gt;
== [http://sourceforge.net/projects/webspa/files/webspa-07.zip/download Release 0.7 (24/Apr/2014)] ==&lt;br /&gt;
&lt;br /&gt;
This is the current release of WebSpa. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.7 offers enhanced user administration functionality. The WebSpa client now offers the possibility for a user to connect to a web server with an untrusted/self-signed certificate.&lt;br /&gt;
&lt;br /&gt;
 - NEW: The WebSpa client asks the user if he wants to connect web servers with unknown/untrusted/self-signed certificates. (Ticket #28) &lt;br /&gt;
 - NEW: Introduced ‘passwd’ command, which allows the WebSpa administrator to modify a user’s password.&lt;br /&gt;
 - NEW: Introduced ‘pass-phrase show’ command, which allows the WebSpa administrator to print a user’s pass-phrase to the screen.&lt;br /&gt;
 - FIXED: Array is no longer sorted, which reduced the entropy of the web-knock. (Ticket #24)&lt;br /&gt;
 - FIXED: Reworked and added test cases.&lt;br /&gt;
 - FIXED: Removed dependency on Spring security. (Ticket #18)&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-06.zip Release 0.6 (21/Dec/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.6 offers enhanced logging functionality, fixing a bug that caused the server to become unresponsive upon starting and stopping. The client now offers to transmit a web knock request, thus not requiring for a user to copy-paste the URL into their browser. &lt;br /&gt;
&lt;br /&gt;
Additional test cases have been added, the option &amp;quot;?&amp;quot; is now available to offer &amp;quot;help&amp;quot; and the log functionality tracks via means of a timestamp all events logged&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-05.zip Release 0.5 (21/Oct/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.5 shortens the number of inputs required from a legitimate user of web-spa to only two: A valid pass-phrase, unique for each user and a single digit in the range of [0-9]. We refer to the latter as an action number and it represents a premeditated Operating System (O/S) command.&lt;br /&gt;
&lt;br /&gt;
All the functionality (for both the client and the server) is now within a single jar file, accompanied by detailed documentation:&lt;br /&gt;
&lt;br /&gt;
 - 00-web-spa-administration-guide.pdf	&lt;br /&gt;
 - 00-web-spa-specification-guide.pdf	&lt;br /&gt;
 - 00-web-spa-user-guide.pdf&lt;br /&gt;
&lt;br /&gt;
The server side functionality has been re-designed to operate with a single configuration file (created at first run) as well as a HyperSQL embedded file database (also created at first run).&lt;br /&gt;
&lt;br /&gt;
Finally, no files are created or are required when web-spa runs in client mode, with the '-client' option.&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-04.zip Release 0.4 (27/Aug/2011)] == &lt;br /&gt;
&lt;br /&gt;
A number of updates and bug fixes have been included within this version. Also, an update on the actual message format to further protect from replay attacks has been included. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.4 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-04.jar&lt;br /&gt;
 * webspa-elements-04.jar&lt;br /&gt;
 * webspa-server-04.jar&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-03.zip Release 0.3 (11/Jul/2011)] ==&lt;br /&gt;
&lt;br /&gt;
In its first usable release, WebSpa _v0.3 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-03.jar&lt;br /&gt;
 * webspa-elements-03.jar&lt;br /&gt;
 * webspa-server-03.jar&lt;br /&gt;
&lt;br /&gt;
== Contribution ==&lt;br /&gt;
&lt;br /&gt;
Involvement in the development and promotion of the OWASP WebSpa Project is actively encouraged!&lt;br /&gt;
You do not have to be a security expert in order to contribute.&lt;br /&gt;
Some of the ways you can help:&lt;br /&gt;
* Quality assurance of resolved defects&lt;br /&gt;
* Java development (good knowledge of Java desirable)&lt;br /&gt;
&lt;br /&gt;
=Project About=&lt;br /&gt;
{{:Projects/OWASP_WebSpa_Project}}  &lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]  [[Category:OWASP_Builders]] [[Category:OWASP_Defenders]]  [[Category:OWASP_Document]]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=174499</id>
		<title>OWASP WebSpa Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=174499"/>
				<updated>2014-05-07T18:46:41Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: Reported the video update in the &amp;quot;News&amp;quot; tab&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Main=&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;padding: 0;margin:0;margin-top:10px;text-align:left;&amp;quot; |-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
==OWASP WebSpa Project==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is a Java web knocking tool for sending a single HTTP/S request to your web server in order to authorize the execution of a premeditated Operating System (O/S) command. &lt;br /&gt;
It provides a cryptographically protected &amp;quot;open sesame&amp;quot; mechanism on the web application layer, comparable to well-known port-knocking techniques.&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
This project implements the concept of web knocking by offering a jar file that 'tails' the access log of an existing web server. A user submits a specially crafted URL, therefore executing a predefined O/S command. No new ports or services are created.&lt;br /&gt;
&lt;br /&gt;
Similarly to traditional network port-knocking schemes, the OWASP WebSpa Project aims to create a covert channel of communication for O/S commands over the web application layer. This channel is by no means bi-directional: It is only the client that can issue commands to the server. The inverse, i.e. the server issuing commands to the client, is not an option within the current version.&lt;br /&gt;
&lt;br /&gt;
==Licensing==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is free to use. It is licensed under the http://creativecommons.org/licenses/by-sa/3.0/ Creative Commons Attribution-ShareAlike 3.0 license], so you can copy, distribute and transmit the work, and you can adapt it, and use it commercially, but all provided that you attribute the work and if you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.&lt;br /&gt;
&lt;br /&gt;
The source code that comes with the OWASP WebSpa Project in the form of the tool named Web-Spa is released as open source software under the terms of the [http://www.gnu.org/licenses/quick-guide-gplv3.html GNU Public License (GPL) version 3]. For reference, the full text of the GPL_v3 can be downloaded from the [http://www.fsf.org/ Free Software Foundation]. There are no plans to change the license; web-spa will always remain an open source project free for use by anyone subject to the terms of the license. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== What is WebSpa? ==&lt;br /&gt;
&lt;br /&gt;
OWASP WebSpa provides:&lt;br /&gt;
&lt;br /&gt;
* A secure channel for executing premeditated O/S commands on your web server&lt;br /&gt;
* A resource-efficient single jar-file that can either be run as server, or client application, depending on the command line parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Presentation ==&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/webspa/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;&amp;quot; | &lt;br /&gt;
&lt;br /&gt;
== Quick Download ==&lt;br /&gt;
&lt;br /&gt;
* http://sourceforge.net/projects/webspa/files/latest/download?source=files&lt;br /&gt;
&lt;br /&gt;
==Classifications==&lt;br /&gt;
&lt;br /&gt;
   {| width=&amp;quot;200&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot;| [[File:Owasp-incubator-trans-85.png|link=https://www.owasp.org/index.php/OWASP_Project_Stages#tab=Incubator_Projects]]&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-builders-small.png|link=]]  &lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-defenders-small.png|link=]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Cc-button-y-sa-small.png|link=http://creativecommons.org/licenses/by-sa/3.0/]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Project_Type_Files_CODE.jpg|link=]]&lt;br /&gt;
   |}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Videos =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|S386azVcj-c|300|right|Linux Poweroff on Apache via Web Knocking with Web-Spa (_v0.7) }} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|eHlYnWyf35E|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.5) }} &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|_VU26ZGG7D8|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4 )}} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|pKF_NxHnoyA|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4) }} &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Tutorial =&lt;br /&gt;
&lt;br /&gt;
== Supporting Documentation ==&lt;br /&gt;
&lt;br /&gt;
The discrepant event discussed herein is web knocking. Within the latest [http://sourceforge.net/projects/webspa/files/latest/download?source=directory download] you can find three documents with the purpose of describing how WebSpa can be used. The three documents are:&lt;br /&gt;
&lt;br /&gt;
* ''''WebSpa Administration Guide''' This document describes how to setup and use the server component. It details how to create new users and add new action numbers with respective O/S commands assigned to them&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa Specification Guide''' This document describes the actual design detailing the use case, specification, requirements and actual attacks, which this tool has been engineered to withstand&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa User Guide''' This document describes how to use the client for issuing commands through a URL request to a web server&lt;br /&gt;
&lt;br /&gt;
The administration guide aims to enable anyone who would be interested in using WebSpa to be able to setup the server side component of it. After configuring the server component of WebSpa, you'll be ready to use the corresponding client for issuing direct actions as O/S commands to it.&lt;br /&gt;
&lt;br /&gt;
If this is your first time using WebSpa, please note that the server operations described in this document, will not work if a WebSpa client does not submit a web-knock to your web server in a timely manner.&lt;br /&gt;
&lt;br /&gt;
Thus, knowing a client implementation goes hand-in-hand with a server instance for it, please also have a look at the WebSpa user guide document to see how the two can be used in tandem. &lt;br /&gt;
&lt;br /&gt;
The user guide aims to enable anyone who would be interested in using web-spa to do so. As soon as you install the server side component and decide what actions to allow, you'll be ready to use the corresponding client for issuing direct actions that work for you.&lt;br /&gt;
&lt;br /&gt;
Finally, the specification guide aims to enable anyone who would be interested in implementing their own version of WebSpa to do so.&lt;br /&gt;
&lt;br /&gt;
== HelloWorld! Enabling SSH via Web Knocking with WebSpa ==&lt;br /&gt;
&lt;br /&gt;
In this section we describe the setup you should follow in order to get to the stage of being able to execute the video entitled: [https://www.youtube.com/watch?v=eHlYnWyf35E Enabling SSH via Web Knocking with Web-Spa (_v0.5)] on your server.&lt;br /&gt;
&lt;br /&gt;
We assume you can SSH into your web server using the user 'web-spa'. We also assume that the user 'web-spa' has permissions to run the necessary service start and stop commands for this service. So, let's login to the box and get the latest WebSpa download:&lt;br /&gt;
&lt;br /&gt;
 ssh web-spa@web.spa.seleucus.net&lt;br /&gt;
 web-spa@web:~$ cd /tmp&lt;br /&gt;
 web-spa@web:/tmp$ wget https://downloads.sourceforge.net/project/webspa/webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
It would be wise at this stage to check the SHA1 digest of what we just downloaded. Sourceforge publishes the SHA1 of all files available for download; copying the value into our command prompt yields:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ echo &amp;quot;a630f23f88c49d02b5895a3d7e16aad245c387f3 *webspa-06.zip&amp;quot; | sha1sum -c -&lt;br /&gt;
 webspa-06.zip: OK&lt;br /&gt;
 web-spa@web:/tmp$ &lt;br /&gt;
&lt;br /&gt;
Ok, so we have downloaded something that we can vouch for-ish. Let's extract and setup.&lt;br /&gt;
&lt;br /&gt;
 unzip webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
A lot of noise comes back from this command. Apologies, different groups have clearly stated they have wanted the source code as well the documentation to be included within the download. Let's have a look at the install file:&lt;br /&gt;
&lt;br /&gt;
 =================================================&lt;br /&gt;
 - Prerequisites for web-spa&lt;br /&gt;
 =================================================&lt;br /&gt;
&lt;br /&gt;
 The following programs must be installed in order&lt;br /&gt;
 for web-spa to run:&lt;br /&gt;
&lt;br /&gt;
 - Java 1.6 or later&lt;br /&gt;
&lt;br /&gt;
If you don't have java installed, consider using the following command: &lt;br /&gt;
&lt;br /&gt;
 sudo aptitude install openjdk-7-jre&lt;br /&gt;
&lt;br /&gt;
This will meet the one prerequisite for using WebSpa. As this is a production server, docs and src folders will not be missed. Also, we like to store things in /opt, ergo:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/src/&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/docs/&lt;br /&gt;
 web-spa@web:/tmp$ sudo mv -v /tmp/web-spa-0.6/ /opt&lt;br /&gt;
&lt;br /&gt;
We now have WebSpa in /opt, let's run the server and create some users. &lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ cd /opt/web-spa-0.6/&lt;br /&gt;
 web-spa@web:/opt/web-spa-0.6$ java -jar web-spa-0.6.jar -server&lt;br /&gt;
&lt;br /&gt;
 Web-Spa - Single HTTP/S Request Authorisation&lt;br /&gt;
 version 0.6 (web-spa@seleucus.net)&lt;br /&gt;
&lt;br /&gt;
 This is a holding prompt, type &amp;quot;exit&amp;quot; or &amp;quot;x&amp;quot; to quit&lt;br /&gt;
&lt;br /&gt;
 - type &amp;quot;service start&amp;quot; to start the web-spa server&lt;br /&gt;
 - type &amp;quot;help&amp;quot; or &amp;quot;?&amp;quot; for more options&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last line above is the server's holding prompt; all commands are issued via this prompt. In order to exit this prompt, type 'exit' or 'quit'. In the next step we will add 3 users and assign a unique pass-phrase to each one of them. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Yiannis Pavlosoglou&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: yiannis@xxxxxx.com&lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note that only a user's full name and pass-phrase are required to be entered. Let's create another user:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Oliver Merki&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that we did not specify a user's e-mail address nor a phone number, as both these fields were optional. Finally, adding a third user: &lt;br /&gt;
&lt;br /&gt;
  web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Patryk&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Patryk we only specified his first name and a unique pass-phrase. You get the picture. Now that we have created our users, let's add some actions to each user. We would like to give Patryk the ability to bounce the SSH service; ergo, let's add two actions:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh start &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 1&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh start' to action number 1 for user Patryk. Let's also add the stop command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 1  sudo service ssh start          has never been executed&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh stop &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 0&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh stop' to action number 0 for user Patryk. Two very important steps we must not forget is to enable the user Patryk and start the web-spa listening service. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user activate&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 User with ID: 13 is in-active&lt;br /&gt;
 -[Optional] Toggle user activation [Y/n]: &lt;br /&gt;
 User with ID: 13 is active&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 And finally issue the service start command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;service start&lt;br /&gt;
 [2014-02-23 12-36-07] Attempting to start web-spa...&lt;br /&gt;
 [2014-02-23 12-36-07] Found access log file: /...cus.net/logs/access.log&lt;br /&gt;
 [2014-02-23 12-36-07] Creating tail listener...&lt;br /&gt;
 [2014-02-23 12-36-07] Web-spa server started!&lt;br /&gt;
 [2014-02-23 12-36-07] Please make sure your web server is also up&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= News =&lt;br /&gt;
&lt;br /&gt;
* [07 May 2014] Added four video links in the respective &amp;quot;Video&amp;quot; tab, referencing YouTube&lt;br /&gt;
* [24 Apr 2014] Version 0.7 has been release and can now be found in the download section. Also, we welcome Paweł and Joël to the team.&lt;br /&gt;
* [20 Mar 2014] [http://www.eventbrite.co.uk/e/owasp-london-chapter-meeting-march-2014-tickets-10063386861 WebSpa has been presented during OWASP London Chapter Meeting]&lt;br /&gt;
* [16 Mar 2014] WebSpa has a new contributor – Paweł Goleń. Paweł welcome in the team!&lt;br /&gt;
* [14 Mar 2014] [https://code.google.com/p/web-spa/ Scheduled the deletion of the Google code project, given that downloads require a new account]&lt;br /&gt;
* [04 Mar 2014] [https://soundcloud.com/#owasp-podcast/the-owasp-webspa-project-with The WebSpa podcast has now been available!] &lt;br /&gt;
* [22 Feb 2014] Created the WebSpa project on sourceforge, started the import from google code&lt;br /&gt;
* [22 Dec 2013] Version 0.6 has been released and can now be found in the download section&lt;br /&gt;
* [08 Nov 2013] The OWASP Web Knocking Project is created&lt;br /&gt;
&lt;br /&gt;
=FAQs=&lt;br /&gt;
&lt;br /&gt;
; Can one deploy WebSpa over HTTP? &lt;br /&gt;
: Yes, WebSpa can be deployed over HTTP, however for security reasons it is highly recommended to utilize HTTPS.&lt;br /&gt;
&lt;br /&gt;
; How to report a WebSpa bug?&lt;br /&gt;
:To report a WebSpa bug please feel free to create a ticket on the [http://sourceforge.net/p/webspa/tickets/?source=navbar sourceforge.net]. A sourceforge account is necessary. If you don’t own a sourceforge account you may send an e-mail to one of the contributors.&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is developed by a worldwide team of volunteers. Below is a list of all people that have contributed to the project so far.&lt;br /&gt;
&lt;br /&gt;
Active contributors:&lt;br /&gt;
* Yiannis Pavlosoglou - Inception &amp;amp; Development &lt;br /&gt;
* Patryk Arciszewski - Theoretician &amp;amp; Documentation&lt;br /&gt;
* Paweł Goleń - Breaking &amp;amp; Infrastructure &lt;br /&gt;
* Joël Rouiller - Development &amp;amp; Optimisation&lt;br /&gt;
* Oliver Merki - Leader &amp;amp; Operations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retired contributors:&lt;br /&gt;
* [[User:Dr. Markus Maria Miedaner|Markus Maria Miedaner]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
&lt;br /&gt;
== Release 0.9 (Q2-Q3/2014) == &lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.9 will examine attacks on the web knocking tool and propose controls in order to address the issues in question. &lt;br /&gt;
&lt;br /&gt;
== Release 0.8 (Q2/2014) ==&lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.8 will incorporate in the server side component (run with -server option) the ability for a WebSpa administrator to generate a single output of all actions available for a Web Knocking user.&lt;br /&gt;
&lt;br /&gt;
== [http://sourceforge.net/projects/webspa/files/webspa-07.zip/download Release 0.7 (24/Apr/2014)] ==&lt;br /&gt;
&lt;br /&gt;
This is the current release of WebSpa. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.7 offers enhanced user administration functionality. The WebSpa client now offers the possibility for a user to connect to a web server with an untrusted/self-signed certificate.&lt;br /&gt;
&lt;br /&gt;
 - NEW: The WebSpa client asks the user if he wants to connect web servers with unknown/untrusted/self-signed certificates. (Ticket #28) &lt;br /&gt;
 - NEW: Introduced ‘passwd’ command, which allows the WebSpa administrator to modify a user’s password.&lt;br /&gt;
 - NEW: Introduced ‘pass-phrase show’ command, which allows the WebSpa administrator to print a user’s pass-phrase to the screen.&lt;br /&gt;
 - FIXED: Array is no longer sorted, which reduced the entropy of the web-knock. (Ticket #24)&lt;br /&gt;
 - FIXED: Reworked and added test cases.&lt;br /&gt;
 - FIXED: Removed dependency on Spring security. (Ticket #18)&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-06.zip Release 0.6 (21/Dec/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.6 offers enhanced logging functionality, fixing a bug that caused the server to become unresponsive upon starting and stopping. The client now offers to transmit a web knock request, thus not requiring for a user to copy-paste the URL into their browser. &lt;br /&gt;
&lt;br /&gt;
Additional test cases have been added, the option &amp;quot;?&amp;quot; is now available to offer &amp;quot;help&amp;quot; and the log functionality tracks via means of a timestamp all events logged&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-05.zip Release 0.5 (21/Oct/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.5 shortens the number of inputs required from a legitimate user of web-spa to only two: A valid pass-phrase, unique for each user and a single digit in the range of [0-9]. We refer to the latter as an action number and it represents a premeditated Operating System (O/S) command.&lt;br /&gt;
&lt;br /&gt;
All the functionality (for both the client and the server) is now within a single jar file, accompanied by detailed documentation:&lt;br /&gt;
&lt;br /&gt;
 - 00-web-spa-administration-guide.pdf	&lt;br /&gt;
 - 00-web-spa-specification-guide.pdf	&lt;br /&gt;
 - 00-web-spa-user-guide.pdf&lt;br /&gt;
&lt;br /&gt;
The server side functionality has been re-designed to operate with a single configuration file (created at first run) as well as a HyperSQL embedded file database (also created at first run).&lt;br /&gt;
&lt;br /&gt;
Finally, no files are created or are required when web-spa runs in client mode, with the '-client' option.&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-04.zip Release 0.4 (27/Aug/2011)] == &lt;br /&gt;
&lt;br /&gt;
A number of updates and bug fixes have been included within this version. Also, an update on the actual message format to further protect from replay attacks has been included. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.4 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-04.jar&lt;br /&gt;
 * webspa-elements-04.jar&lt;br /&gt;
 * webspa-server-04.jar&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-03.zip Release 0.3 (11/Jul/2011)] ==&lt;br /&gt;
&lt;br /&gt;
In its first usable release, WebSpa _v0.3 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-03.jar&lt;br /&gt;
 * webspa-elements-03.jar&lt;br /&gt;
 * webspa-server-03.jar&lt;br /&gt;
&lt;br /&gt;
== Contribution ==&lt;br /&gt;
&lt;br /&gt;
Involvement in the development and promotion of the OWASP WebSpa Project is actively encouraged!&lt;br /&gt;
You do not have to be a security expert in order to contribute.&lt;br /&gt;
Some of the ways you can help:&lt;br /&gt;
* Quality assurance of resolved defects&lt;br /&gt;
* Java development (good knowledge of Java desirable)&lt;br /&gt;
&lt;br /&gt;
=Project About=&lt;br /&gt;
{{:Projects/OWASP_WebSpa_Project}}  &lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]  [[Category:OWASP_Builders]] [[Category:OWASP_Defenders]]  [[Category:OWASP_Document]]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=174498</id>
		<title>OWASP WebSpa Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=174498"/>
				<updated>2014-05-07T18:42:57Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: Added four video links in the respective &amp;quot;Video&amp;quot; tab, referencing YouTube&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Main=&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;padding: 0;margin:0;margin-top:10px;text-align:left;&amp;quot; |-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
==OWASP WebSpa Project==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is a Java web knocking tool for sending a single HTTP/S request to your web server in order to authorize the execution of a premeditated Operating System (O/S) command. &lt;br /&gt;
It provides a cryptographically protected &amp;quot;open sesame&amp;quot; mechanism on the web application layer, comparable to well-known port-knocking techniques.&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
This project implements the concept of web knocking by offering a jar file that 'tails' the access log of an existing web server. A user submits a specially crafted URL, therefore executing a predefined O/S command. No new ports or services are created.&lt;br /&gt;
&lt;br /&gt;
Similarly to traditional network port-knocking schemes, the OWASP WebSpa Project aims to create a covert channel of communication for O/S commands over the web application layer. This channel is by no means bi-directional: It is only the client that can issue commands to the server. The inverse, i.e. the server issuing commands to the client, is not an option within the current version.&lt;br /&gt;
&lt;br /&gt;
==Licensing==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is free to use. It is licensed under the http://creativecommons.org/licenses/by-sa/3.0/ Creative Commons Attribution-ShareAlike 3.0 license], so you can copy, distribute and transmit the work, and you can adapt it, and use it commercially, but all provided that you attribute the work and if you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.&lt;br /&gt;
&lt;br /&gt;
The source code that comes with the OWASP WebSpa Project in the form of the tool named Web-Spa is released as open source software under the terms of the [http://www.gnu.org/licenses/quick-guide-gplv3.html GNU Public License (GPL) version 3]. For reference, the full text of the GPL_v3 can be downloaded from the [http://www.fsf.org/ Free Software Foundation]. There are no plans to change the license; web-spa will always remain an open source project free for use by anyone subject to the terms of the license. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== What is WebSpa? ==&lt;br /&gt;
&lt;br /&gt;
OWASP WebSpa provides:&lt;br /&gt;
&lt;br /&gt;
* A secure channel for executing premeditated O/S commands on your web server&lt;br /&gt;
* A resource-efficient single jar-file that can either be run as server, or client application, depending on the command line parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Presentation ==&lt;br /&gt;
&lt;br /&gt;
http://sourceforge.net/projects/webspa/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;&amp;quot; | &lt;br /&gt;
&lt;br /&gt;
== Quick Download ==&lt;br /&gt;
&lt;br /&gt;
* http://sourceforge.net/projects/webspa/files/latest/download?source=files&lt;br /&gt;
&lt;br /&gt;
==Classifications==&lt;br /&gt;
&lt;br /&gt;
   {| width=&amp;quot;200&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot;| [[File:Owasp-incubator-trans-85.png|link=https://www.owasp.org/index.php/OWASP_Project_Stages#tab=Incubator_Projects]]&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-builders-small.png|link=]]  &lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-defenders-small.png|link=]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Cc-button-y-sa-small.png|link=http://creativecommons.org/licenses/by-sa/3.0/]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Project_Type_Files_CODE.jpg|link=]]&lt;br /&gt;
   |}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Videos =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|S386azVcj-c|300|right|Linux Poweroff on Apache via Web Knocking with Web-Spa (_v0.7) }} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|eHlYnWyf35E|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.5) }} &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|_VU26ZGG7D8|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4 )}} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|pKF_NxHnoyA|300|right|Enabling SSH via Web Knocking with Web-Spa (_v0.4) }} &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Tutorial =&lt;br /&gt;
&lt;br /&gt;
== Supporting Documentation ==&lt;br /&gt;
&lt;br /&gt;
The discrepant event discussed herein is web knocking. Within the latest [http://sourceforge.net/projects/webspa/files/latest/download?source=directory download] you can find three documents with the purpose of describing how WebSpa can be used. The three documents are:&lt;br /&gt;
&lt;br /&gt;
* ''''WebSpa Administration Guide''' This document describes how to setup and use the server component. It details how to create new users and add new action numbers with respective O/S commands assigned to them&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa Specification Guide''' This document describes the actual design detailing the use case, specification, requirements and actual attacks, which this tool has been engineered to withstand&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa User Guide''' This document describes how to use the client for issuing commands through a URL request to a web server&lt;br /&gt;
&lt;br /&gt;
The administration guide aims to enable anyone who would be interested in using WebSpa to be able to setup the server side component of it. After configuring the server component of WebSpa, you'll be ready to use the corresponding client for issuing direct actions as O/S commands to it.&lt;br /&gt;
&lt;br /&gt;
If this is your first time using WebSpa, please note that the server operations described in this document, will not work if a WebSpa client does not submit a web-knock to your web server in a timely manner.&lt;br /&gt;
&lt;br /&gt;
Thus, knowing a client implementation goes hand-in-hand with a server instance for it, please also have a look at the WebSpa user guide document to see how the two can be used in tandem. &lt;br /&gt;
&lt;br /&gt;
The user guide aims to enable anyone who would be interested in using web-spa to do so. As soon as you install the server side component and decide what actions to allow, you'll be ready to use the corresponding client for issuing direct actions that work for you.&lt;br /&gt;
&lt;br /&gt;
Finally, the specification guide aims to enable anyone who would be interested in implementing their own version of WebSpa to do so.&lt;br /&gt;
&lt;br /&gt;
== HelloWorld! Enabling SSH via Web Knocking with WebSpa ==&lt;br /&gt;
&lt;br /&gt;
In this section we describe the setup you should follow in order to get to the stage of being able to execute the video entitled: [https://www.youtube.com/watch?v=eHlYnWyf35E Enabling SSH via Web Knocking with Web-Spa (_v0.5)] on your server.&lt;br /&gt;
&lt;br /&gt;
We assume you can SSH into your web server using the user 'web-spa'. We also assume that the user 'web-spa' has permissions to run the necessary service start and stop commands for this service. So, let's login to the box and get the latest WebSpa download:&lt;br /&gt;
&lt;br /&gt;
 ssh web-spa@web.spa.seleucus.net&lt;br /&gt;
 web-spa@web:~$ cd /tmp&lt;br /&gt;
 web-spa@web:/tmp$ wget https://downloads.sourceforge.net/project/webspa/webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
It would be wise at this stage to check the SHA1 digest of what we just downloaded. Sourceforge publishes the SHA1 of all files available for download; copying the value into our command prompt yields:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ echo &amp;quot;a630f23f88c49d02b5895a3d7e16aad245c387f3 *webspa-06.zip&amp;quot; | sha1sum -c -&lt;br /&gt;
 webspa-06.zip: OK&lt;br /&gt;
 web-spa@web:/tmp$ &lt;br /&gt;
&lt;br /&gt;
Ok, so we have downloaded something that we can vouch for-ish. Let's extract and setup.&lt;br /&gt;
&lt;br /&gt;
 unzip webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
A lot of noise comes back from this command. Apologies, different groups have clearly stated they have wanted the source code as well the documentation to be included within the download. Let's have a look at the install file:&lt;br /&gt;
&lt;br /&gt;
 =================================================&lt;br /&gt;
 - Prerequisites for web-spa&lt;br /&gt;
 =================================================&lt;br /&gt;
&lt;br /&gt;
 The following programs must be installed in order&lt;br /&gt;
 for web-spa to run:&lt;br /&gt;
&lt;br /&gt;
 - Java 1.6 or later&lt;br /&gt;
&lt;br /&gt;
If you don't have java installed, consider using the following command: &lt;br /&gt;
&lt;br /&gt;
 sudo aptitude install openjdk-7-jre&lt;br /&gt;
&lt;br /&gt;
This will meet the one prerequisite for using WebSpa. As this is a production server, docs and src folders will not be missed. Also, we like to store things in /opt, ergo:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/src/&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/docs/&lt;br /&gt;
 web-spa@web:/tmp$ sudo mv -v /tmp/web-spa-0.6/ /opt&lt;br /&gt;
&lt;br /&gt;
We now have WebSpa in /opt, let's run the server and create some users. &lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ cd /opt/web-spa-0.6/&lt;br /&gt;
 web-spa@web:/opt/web-spa-0.6$ java -jar web-spa-0.6.jar -server&lt;br /&gt;
&lt;br /&gt;
 Web-Spa - Single HTTP/S Request Authorisation&lt;br /&gt;
 version 0.6 (web-spa@seleucus.net)&lt;br /&gt;
&lt;br /&gt;
 This is a holding prompt, type &amp;quot;exit&amp;quot; or &amp;quot;x&amp;quot; to quit&lt;br /&gt;
&lt;br /&gt;
 - type &amp;quot;service start&amp;quot; to start the web-spa server&lt;br /&gt;
 - type &amp;quot;help&amp;quot; or &amp;quot;?&amp;quot; for more options&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last line above is the server's holding prompt; all commands are issued via this prompt. In order to exit this prompt, type 'exit' or 'quit'. In the next step we will add 3 users and assign a unique pass-phrase to each one of them. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Yiannis Pavlosoglou&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: yiannis@xxxxxx.com&lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note that only a user's full name and pass-phrase are required to be entered. Let's create another user:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Oliver Merki&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that we did not specify a user's e-mail address nor a phone number, as both these fields were optional. Finally, adding a third user: &lt;br /&gt;
&lt;br /&gt;
  web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Patryk&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Patryk we only specified his first name and a unique pass-phrase. You get the picture. Now that we have created our users, let's add some actions to each user. We would like to give Patryk the ability to bounce the SSH service; ergo, let's add two actions:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh start &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 1&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh start' to action number 1 for user Patryk. Let's also add the stop command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 1  sudo service ssh start          has never been executed&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh stop &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 0&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh stop' to action number 0 for user Patryk. Two very important steps we must not forget is to enable the user Patryk and start the web-spa listening service. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user activate&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 User with ID: 13 is in-active&lt;br /&gt;
 -[Optional] Toggle user activation [Y/n]: &lt;br /&gt;
 User with ID: 13 is active&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 And finally issue the service start command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;service start&lt;br /&gt;
 [2014-02-23 12-36-07] Attempting to start web-spa...&lt;br /&gt;
 [2014-02-23 12-36-07] Found access log file: /...cus.net/logs/access.log&lt;br /&gt;
 [2014-02-23 12-36-07] Creating tail listener...&lt;br /&gt;
 [2014-02-23 12-36-07] Web-spa server started!&lt;br /&gt;
 [2014-02-23 12-36-07] Please make sure your web server is also up&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= News =&lt;br /&gt;
&lt;br /&gt;
* [24 Apr 2014] Version 0.7 has been release and can now be found in the download section. Also, we welcome Paweł and Joël to the team.&lt;br /&gt;
* [20 Mar 2014] [http://www.eventbrite.co.uk/e/owasp-london-chapter-meeting-march-2014-tickets-10063386861 WebSpa has been presented during OWASP London Chapter Meeting]&lt;br /&gt;
* [16 Mar 2014] WebSpa has a new contributor – Paweł Goleń. Paweł welcome in the team!&lt;br /&gt;
* [14 Mar 2014] [https://code.google.com/p/web-spa/ Scheduled the deletion of the Google code project, given that downloads require a new account]&lt;br /&gt;
* [04 Mar 2014] [https://soundcloud.com/#owasp-podcast/the-owasp-webspa-project-with The WebSpa podcast has now been available!] &lt;br /&gt;
* [22 Feb 2014] Created the WebSpa project on sourceforge, started the import from google code&lt;br /&gt;
* [22 Dec 2013] Version 0.6 has been released and can now be found in the download section&lt;br /&gt;
* [08 Nov 2013] The OWASP Web Knocking Project is created&lt;br /&gt;
&lt;br /&gt;
=FAQs=&lt;br /&gt;
&lt;br /&gt;
; Can one deploy WebSpa over HTTP? &lt;br /&gt;
: Yes, WebSpa can be deployed over HTTP, however for security reasons it is highly recommended to utilize HTTPS.&lt;br /&gt;
&lt;br /&gt;
; How to report a WebSpa bug?&lt;br /&gt;
:To report a WebSpa bug please feel free to create a ticket on the [http://sourceforge.net/p/webspa/tickets/?source=navbar sourceforge.net]. A sourceforge account is necessary. If you don’t own a sourceforge account you may send an e-mail to one of the contributors.&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is developed by a worldwide team of volunteers. Below is a list of all people that have contributed to the project so far.&lt;br /&gt;
&lt;br /&gt;
Active contributors:&lt;br /&gt;
* Yiannis Pavlosoglou - Inception &amp;amp; Development &lt;br /&gt;
* Patryk Arciszewski - Theoretician &amp;amp; Documentation&lt;br /&gt;
* Paweł Goleń - Breaking &amp;amp; Infrastructure &lt;br /&gt;
* Joël Rouiller - Development &amp;amp; Optimisation&lt;br /&gt;
* Oliver Merki - Leader &amp;amp; Operations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retired contributors:&lt;br /&gt;
* [[User:Dr. Markus Maria Miedaner|Markus Maria Miedaner]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
&lt;br /&gt;
== Release 0.9 (Q2-Q3/2014) == &lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.9 will examine attacks on the web knocking tool and propose controls in order to address the issues in question. &lt;br /&gt;
&lt;br /&gt;
== Release 0.8 (Q2/2014) ==&lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.8 will incorporate in the server side component (run with -server option) the ability for a WebSpa administrator to generate a single output of all actions available for a Web Knocking user.&lt;br /&gt;
&lt;br /&gt;
== [http://sourceforge.net/projects/webspa/files/webspa-07.zip/download Release 0.7 (24/Apr/2014)] ==&lt;br /&gt;
&lt;br /&gt;
This is the current release of WebSpa. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.7 offers enhanced user administration functionality. The WebSpa client now offers the possibility for a user to connect to a web server with an untrusted/self-signed certificate.&lt;br /&gt;
&lt;br /&gt;
 - NEW: The WebSpa client asks the user if he wants to connect web servers with unknown/untrusted/self-signed certificates. (Ticket #28) &lt;br /&gt;
 - NEW: Introduced ‘passwd’ command, which allows the WebSpa administrator to modify a user’s password.&lt;br /&gt;
 - NEW: Introduced ‘pass-phrase show’ command, which allows the WebSpa administrator to print a user’s pass-phrase to the screen.&lt;br /&gt;
 - FIXED: Array is no longer sorted, which reduced the entropy of the web-knock. (Ticket #24)&lt;br /&gt;
 - FIXED: Reworked and added test cases.&lt;br /&gt;
 - FIXED: Removed dependency on Spring security. (Ticket #18)&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-06.zip Release 0.6 (21/Dec/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.6 offers enhanced logging functionality, fixing a bug that caused the server to become unresponsive upon starting and stopping. The client now offers to transmit a web knock request, thus not requiring for a user to copy-paste the URL into their browser. &lt;br /&gt;
&lt;br /&gt;
Additional test cases have been added, the option &amp;quot;?&amp;quot; is now available to offer &amp;quot;help&amp;quot; and the log functionality tracks via means of a timestamp all events logged&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-05.zip Release 0.5 (21/Oct/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.5 shortens the number of inputs required from a legitimate user of web-spa to only two: A valid pass-phrase, unique for each user and a single digit in the range of [0-9]. We refer to the latter as an action number and it represents a premeditated Operating System (O/S) command.&lt;br /&gt;
&lt;br /&gt;
All the functionality (for both the client and the server) is now within a single jar file, accompanied by detailed documentation:&lt;br /&gt;
&lt;br /&gt;
 - 00-web-spa-administration-guide.pdf	&lt;br /&gt;
 - 00-web-spa-specification-guide.pdf	&lt;br /&gt;
 - 00-web-spa-user-guide.pdf&lt;br /&gt;
&lt;br /&gt;
The server side functionality has been re-designed to operate with a single configuration file (created at first run) as well as a HyperSQL embedded file database (also created at first run).&lt;br /&gt;
&lt;br /&gt;
Finally, no files are created or are required when web-spa runs in client mode, with the '-client' option.&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-04.zip Release 0.4 (27/Aug/2011)] == &lt;br /&gt;
&lt;br /&gt;
A number of updates and bug fixes have been included within this version. Also, an update on the actual message format to further protect from replay attacks has been included. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.4 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-04.jar&lt;br /&gt;
 * webspa-elements-04.jar&lt;br /&gt;
 * webspa-server-04.jar&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-03.zip Release 0.3 (11/Jul/2011)] ==&lt;br /&gt;
&lt;br /&gt;
In its first usable release, WebSpa _v0.3 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-03.jar&lt;br /&gt;
 * webspa-elements-03.jar&lt;br /&gt;
 * webspa-server-03.jar&lt;br /&gt;
&lt;br /&gt;
== Contribution ==&lt;br /&gt;
&lt;br /&gt;
Involvement in the development and promotion of the OWASP WebSpa Project is actively encouraged!&lt;br /&gt;
You do not have to be a security expert in order to contribute.&lt;br /&gt;
Some of the ways you can help:&lt;br /&gt;
* Quality assurance of resolved defects&lt;br /&gt;
* Java development (good knowledge of Java desirable)&lt;br /&gt;
&lt;br /&gt;
=Project About=&lt;br /&gt;
{{:Projects/OWASP_WebSpa_Project}}  &lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]  [[Category:OWASP_Builders]] [[Category:OWASP_Defenders]]  [[Category:OWASP_Document]]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_Guide_Introduction&amp;diff=171424</id>
		<title>Testing Guide Introduction</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_Guide_Introduction&amp;diff=171424"/>
				<updated>2014-04-01T22:34:51Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: Testing Guide V4: Review_v1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
=== The OWASP Testing Project ===&lt;br /&gt;
----&lt;br /&gt;
The OWASP Testing Project has been in development for many years. With this project, we want to help people understand the ''what'', ''why'', ''when'', ''where'', and ''how'' of testing their web applications. For this reason, we have avoided merely providing a simple checklist or prescription of issues that should be addressed. The outcome of this project is a complete Testing Framework, from which others can build their own testing programs or qualify other people’s processes. The Testing Guide describes in details both the general Testing Framework and the techniques required to implement the framework in practice.&lt;br /&gt;
&lt;br /&gt;
Writing the Testing Guide has proven to be a difficult task. It has been a challenge to obtain consensus and develop the content that allows people to apply the concepts described here, while enabling them to work in their own environment and culture. It has also been a challenge to change the focus of web application testing from penetration testing to testing integrated in the software development life cycle. &lt;br /&gt;
&lt;br /&gt;
However, we are very satisfied with the results we have reached. Many industry experts and those responsible for software security at some of the largest companies in the world are validating the Testing Framework. This framework helps organizations test their web applications in order to build reliable and secure software, rather than simply highlighting areas of weakness, although the latter is certainly a byproduct of many of OWASP’s guides and checklists. As such, we have made some hard decisions about the appropriateness of certain testing techniques and technologies, which we fully understand will not be agreed upon by everyone. However, OWASP is able to take the high ground and change culture over time through awareness and education based on consensus and experience.&lt;br /&gt;
&lt;br /&gt;
The rest of this guide is organized as follows. This introduction covers the pre-requisites of testing web applications: the scope of testing, the principles of successful testing, and testing techniques. Chapter 3 presents the OWASP Testing Framework and explains its techniques and tasks in relation to the various phases of the software development life cycle. Chapter 4 covers how to test for specific vulnerabilities (e.g., SQL Injection) by code inspection and penetration testing. &lt;br /&gt;
&lt;br /&gt;
'''Measuring (in)security: the Economics of Insecure Software'''&amp;lt;br&amp;gt;&lt;br /&gt;
A basic tenet of software engineering is that you can't control what you can't measure [1]. Security testing is no different. Unfortunately, measuring security is a notoriously difficult process. We will not cover this topic in detail here, since it would take a guide on its own (for an introduction, see [2]). &lt;br /&gt;
&lt;br /&gt;
One aspect that we want to emphasize, however, is that security measurements are, by necessity, about both the specific, technical issues (e.g., how prevalent a certain vulnerability is) and how these affect the economics of software. We find that most technical people understand at least the basic issues, or have a deeper understanding, of the vulnerabilities. Sadly, few are able to translate that technical knowledge into monetary terms, and, thereby, quantify the potential cost of vulnerabilities to the application owner's business. We believe that until this happens, CIOs will not be able to develop an accurate return on security investment and, subsequently, assign appropriate budgets for software security.&amp;lt;br/&amp;gt;&lt;br /&gt;
While estimating the cost of insecure software may appear a daunting task, recently there has been a significant amount of work in this direction. For example, in June 2002, the US National Institute of Standards (NIST) published a survey on the cost of insecure software to the US economy due to inadequate software testing [3]. Interestingly, they estimate that a better testing infrastructure would save more than a third of these costs, or about $22 billion a year. More recently, the links between economics and security have been studied by academic researchers. See [4] for more information about some of these efforts.&lt;br /&gt;
&lt;br /&gt;
The framework described in this document encourages people to measure security throughout their entire development process. They can then relate the cost of insecure software to the impact it has on their business, and consequently develop appropriate business decisions (resources) to manage the risk. Remember: measuring and testing web applications is even more critical than for other software, since web applications are exposed to millions of users through the Internet.&lt;br /&gt;
&lt;br /&gt;
'''What is Testing'''&amp;lt;br&amp;gt;&lt;br /&gt;
What do we mean by testing? During the development life cycle of a web application, many things need to be tested. The Merriam-Webster Dictionary describes testing as: &lt;br /&gt;
* To put to test or proof. &lt;br /&gt;
* To undergo a test. &lt;br /&gt;
* To be assigned a standing or evaluation based on tests. &lt;br /&gt;
For the purposes of this document, testing is a process of comparing the state of a system/application against a set of criteria. In the security industry, people frequently test against a set of mental criteria that are neither well defined nor complete. For this reason and others, many outsiders regard security testing as a black art. This document’s aim is to change that perception and to make it easier for people without in-depth security knowledge to make a difference. &lt;br /&gt;
&lt;br /&gt;
'''Why Testing'''&amp;lt;br&amp;gt;&lt;br /&gt;
This document is designed to help organizations understand what comprises a testing program, and to help them identify the steps that they need to undertake to build and operate that testing program on their web applications. It is intended to give a broad view of the elements required to make a comprehensive web application security program. This guide can be used as a reference and as a methodology to help determine the gap between your existing practices and industry best practices. This guide allows organizations to compare themselves against industry peers, understand the magnitude of resources required to test and maintain their software, or prepare for an audit. This chapter does not go into the technical details of how to test an application, as the intent is to provide a typical security organizational framework. The technical details about how to test an application, as part of a penetration test or code review will be covered in the remaining parts of this document. &lt;br /&gt;
&lt;br /&gt;
'''When to Test'''&amp;lt;br&amp;gt;&lt;br /&gt;
Most people today don’t test the software until it has already been created and is in the deployment phase of its life cycle (i.e., code has been created and instantiated into a working web application). This is generally a very ineffective and cost-prohibitive practice. One of the best methods to prevent security bugs from appearing in production applications is to improve the Software Development Life Cycle (SDLC) by including security in each of its phases. An SDLC is a structure imposed on the development of software artifacts. If an SDLC is not currently being used in your environment, it is time to pick one! The following figure shows a generic SDLC model as well as the (estimated) increasing cost of fixing security bugs in such a model. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:SDLC.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
''Figure 1: Generic SDLC Model'' &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Companies should inspect their overall SDLC to ensure that security is an integral part of the development process. SDLCs should include security tests to ensure security is adequately covered and controls are effective throughout the development process. &lt;br /&gt;
&lt;br /&gt;
'''What to Test'''&amp;lt;br&amp;gt;&lt;br /&gt;
It can be helpful to think of software development as a combination of people, process, and technology. If these are the factors that &amp;quot;create&amp;quot; software, then it is logical that these are the factors that must be tested. Today most people generally test the technology or the software itself. &lt;br /&gt;
&lt;br /&gt;
An effective testing program should have components that test ''People'' – to ensure that there is adequate education and awareness; ''Process'' – to ensure that there are adequate policies and standards and that people know how to follow these policies; ''Technology'' – to ensure that the process has been effective in its implementation. Unless a holistic approach is adopted, testing just the technical implementation of an application will not uncover management or operational vulnerabilities that could be present. By testing the people, policies, and processes, an organization can catch issues that would later manifest themselves into defects in the technology, thus eradicating bugs early and identifying the root causes of defects. Likewise, testing only some of the technical issues that can be present in a system will result in an incomplete and inaccurate security posture assessment. Denis Verdon, Head of Information Security at [http://www.fnf.com Fidelity National Financial] presented an excellent analogy for this misconception at the OWASP AppSec 2004 Conference in New York [5]: &amp;quot;If cars were built like applications [...] safety tests would assume frontal impact only. Cars would not be roll tested, or tested for stability in emergency maneuvers, brake effectiveness, side impact, and resistance to theft.&amp;quot; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Feedback and Comments'''&amp;lt;br&amp;gt;&lt;br /&gt;
As with all OWASP projects, we welcome comments and feedback. We especially like to know that our work is being used and that it is effective and accurate.&lt;br /&gt;
&lt;br /&gt;
==Principles of Testing==&lt;br /&gt;
&lt;br /&gt;
There are some common misconceptions when developing a testing methodology to weed out security bugs in software. This chapter covers some of the basic principles that should be taken into account by professionals when testing for security bugs in software. &lt;br /&gt;
&lt;br /&gt;
'''There is No Silver Bullet'''&amp;lt;br&amp;gt;&lt;br /&gt;
While it is tempting to think that a security scanner or application firewall will either provide a multitude of defenses or identify a multitude of problems, in reality there are no silver bullets to the problem of insecure software. Application security assessment software, while useful as a first pass to find low-hanging fruit, is generally immature and ineffective at in-depth assessments and at providing adequate test coverage. Remember that security is a process, not a product. &lt;br /&gt;
&lt;br /&gt;
'''Think Strategically, Not Tactically'''&amp;lt;br&amp;gt;&lt;br /&gt;
Over the last few years, security professionals have come to realize the fallacy of the patch-and-penetrate model that was pervasive in information security during the 1990’s. The patch-and-penetrate model involves fixing a reported bug, but without proper investigation of the root cause. This model is usually associated with the window of vulnerability shown in the figure below. The evolution of vulnerabilities in common software used worldwide has shown the ineffectiveness of this model. Fore more information about the window of vulnerability please refer to [6]. Vulnerability studies [7] have shown that with the reaction time of attackers worldwide, the typical window of vulnerability does not provide enough time for patch installation, since the time between a vulnerability being uncovered and an automated attack against it being developed and released is decreasing every year. There are also several wrong assumptions in the patch-and-penetrate model: patches interfere with the normal operations and might break existing applications, and not all the users might (in the end) be aware of a patch’s availability. Consequently not all the product's users will apply patches, either because of this issue or because they lack knowledge about the patch's existence.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:WindowExposure.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
''Figure 2: Window of Vulnerability''&amp;lt;/center&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
To prevent reoccurring security problems within an application, it is essential to build security into the Software Development Life Cycle (SDLC) by developing standards, policies, and guidelines that fit and work within the development methodology. Threat modeling and other techniques should be used to help assign appropriate resources to those parts of a system that are most at risk. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''The SDLC is King'''&amp;lt;br&amp;gt;&lt;br /&gt;
The SDLC is a process that is well-known to developers. By integrating security into each phase of the SDLC, it allows for a holistic approach to application security that leverages the procedures already in place within the organization. Be aware that while the names of the various phases may change depending on the SDLC model used by an organization, each conceptual phase of the archetype SDLC will be used to develop the application (i.e., define, design, develop, deploy, maintain). Each phase has security considerations that should become part of the existing process, to ensure a cost-effective and comprehensive security program. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test Early and Test Often'''&amp;lt;br&amp;gt;&lt;br /&gt;
When a bug is detected early within the SDLC, it can be addressed more quickly and at a lower cost. A security bug is no different from a functional or performance-based bug in this regard. A key step in making this possible is to educate the development and QA organizations about common security issues and the ways to detect and prevent them. Although new libraries, tools, or languages might help design better programs (with fewer security bugs), new threats arise constantly and developers must be aware of those that affect the software they are developing. Education in security testing also helps developers acquire the appropriate mindset to test an application from an attacker's perspective. This allows each organization to consider security issues as part of their existing responsibilities.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Understand the Scope of Security'''&amp;lt;br&amp;gt;&lt;br /&gt;
It is important to know how much security a given project will require. The information and assets that are to be protected should be given a classification that states how they are to be handled (e.g., Confidential, Secret, Top Secret). Discussions should occur with legal council to ensure that any specific security need will be met. In the USA they might come from federal regulations, such as the Gramm-Leach-Bliley Act [8], or from state laws, such as the California SB-1386 [9]. For organizations based in EU countries, both country-specific regulation and EU Directives might apply. For example, Directive 96/46/EC4 [10] makes it mandatory to treat personal data in applications with due care, whatever the application. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Develop the Right Mindset'''&amp;lt;br&amp;gt;&lt;br /&gt;
Successfully testing an application for security vulnerabilities requires thinking &amp;quot;outside of the box.&amp;quot; Normal use cases will test the normal behavior of the application when a user is using it in the manner that you expect. Good security testing requires going beyond what is expected and thinking like an attacker who is trying to break the application. Creative thinking can help to determine what unexpected data may cause an application to fail in an insecure manner. It can also help find what assumptions made by web developers are not always true and how they can be subverted. This is one of the reasons why automated tools are actually bad at automatically testing for vulnerabilities: this creative thinking must be done on a case-by-case basis and most web applications are being developed in a unique way (even if using common frameworks). &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Understand the Subject'''&amp;lt;br&amp;gt;&lt;br /&gt;
One of the first major initiatives in any good security program should be to require accurate documentation of the application. The architecture, data-flow diagrams, use cases, and more should be written in formal documents and made available for review. The technical specification and application documents should include information that lists not only the desired use cases, but also any specifically disallowed use case. Finally, it is good to have at least a basic security infrastructure that allows the monitoring and trending of attacks against an organization's applications and network (e.g., IDS systems). &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Use the Right Tools'''&amp;lt;br&amp;gt;&lt;br /&gt;
While we have already stated that there is no silver bullet tool, tools do play a critical role in the overall security program. There is a range of open source and commercial tools that can automate many routine security tasks. These tools can simplify and speed up the security process by assisting security personnel in their tasks. It is important to understand exactly what these tools can and cannot do, however, so that they are not oversold or used incorrectly. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''The Devil is in the Details'''&amp;lt;br&amp;gt;&lt;br /&gt;
It is critical not to perform a superficial security review of an application and consider it complete. This will instill a false sense of confidence that can be as dangerous as not having done a security review in the first place. It is vital to carefully review the findings and weed out any false positive that may remain in the report. Reporting an incorrect security finding can often undermine the valid message of the rest of a security report. Care should be taken to verify that every possible section of application logic has been tested, and that every use case scenario was explored for possible vulnerabilities. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Use Source Code When Available'''&amp;lt;br&amp;gt;&lt;br /&gt;
While black box penetration test results can be impressive and useful to demonstrate how vulnerabilities are exposed in production, they are not the most effective way to secure an application. If the source code for the application is available, it should be given to the security staff to assist them while performing their review. It is possible to discover vulnerabilities within the application source that would be missed during a black box engagement. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Develop Metrics'''&amp;lt;br&amp;gt;&lt;br /&gt;
An important part of a good security program is the ability to determine if things are getting better. It is important to track the results of testing engagements, and develop metrics that will reveal the application security trends within the organization. These metrics can show if more education and training are required, if there is a particular security mechanism that is not clearly understood by development, and if the total number of security related problems being found each month is going down. Consistent metrics that can be generated in an automated way from available source code will also help the organization in assessing the effectiveness of mechanisms introduced to reduce security bugs in software development. Metrics are not easily developed, so using standard metrics like those provided by the OWASP Metrics project and other organizations might be a good head start.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Document the Test Results'''&amp;lt;br&amp;gt;&lt;br /&gt;
To conclude the testing process, it is important to produce a formal record of what testing actions were taken, by whom, when they were performed, and details of the test findings. It is wise to agree on an acceptable format for the report which is useful to all concerned parties, which may include developers, project management, business owners, IT department, audit, and compliance. The report must be clear to the business owner in identifying where material risks exist and sufficient to get their backing for subsequent mitigation actions. The report must be clear to the developer in pin-pointing the exact function that is affected by the vulnerability, with associated recommendations for resolution in a language that the developer will understand (no pun intended). Last but not least, the report writing should not be overly burdensome on the security tester themselves; security testers are not generally renowned for their creative writing skills, therefore agreeing on a complex report can lead to instances where test results do not get properly documented.&lt;br /&gt;
&lt;br /&gt;
==Testing Techniques Explained==&lt;br /&gt;
&lt;br /&gt;
This section presents a high-level overview of various testing techniques that can be employed when building a testing program. It does not present specific methodologies for these techniques, although Chapter 3 will address this information. This section is included to provide context for the framework presented in the next chapter and to highlight the advantages and disadvantages of some of the techniques that should be considered. In particular, we will cover:&lt;br /&gt;
* Manual Inspections &amp;amp; Reviews &lt;br /&gt;
* Threat Modeling &lt;br /&gt;
* Code Review &lt;br /&gt;
* Penetration Testing &lt;br /&gt;
&lt;br /&gt;
=== Manual Inspections &amp;amp; Reviews ===&lt;br /&gt;
'''Overview'''&amp;lt;br&amp;gt;&lt;br /&gt;
Manual inspections are human-driven reviews that typically test the security implications of the people, policies, and processes, but can include inspection of technology decisions such as architectural designs. They are usually conducted by analyzing documentation or performing interviews with the designers or system owners. While the concept of manual inspections and human reviews is simple, they can be among the most powerful and effective techniques available. By asking someone how something works and why it was implemented in a specific way, it allows the tester to quickly determine if any security concerns are likely to be evident. Manual inspections and reviews are one of the few ways to test the software development life-cycle process itself and to ensure that there is an adequate policy or skill set in place. As with many things in life, when conducting manual inspections and reviews we suggest you adopt a trust-but-verify model. Not everything everyone tells you or shows you will be accurate. Manual reviews are particularly good for testing whether people understand the security process, have been made aware of policy, and have the appropriate skills to design or implement a secure application. Other activities, including manually reviewing the documentation, secure coding policies, security requirements, and architectural designs, should all be accomplished using manual inspections.&lt;br /&gt;
&lt;br /&gt;
'''Advantages:'''&lt;br /&gt;
* Requires no supporting technology &lt;br /&gt;
* Can be applied to a variety of situations&lt;br /&gt;
* Flexible &lt;br /&gt;
* Promotes teamwork &lt;br /&gt;
* Early in the SDLC &lt;br /&gt;
&lt;br /&gt;
'''Disadvantages:'''&lt;br /&gt;
* Can be time consuming &lt;br /&gt;
* Supporting material not always available &lt;br /&gt;
* Requires significant human thought and skill to be effective!&lt;br /&gt;
&lt;br /&gt;
=== Threat Modeling ===&lt;br /&gt;
'''Overview'''&amp;lt;br&amp;gt;&lt;br /&gt;
Threat modeling has become a popular technique to help system designers think about the security threats that their systems/applications might face. Therefore, threat modeling can be seen as risk assessment for applications. In fact, it enables the designer to develop mitigation strategies for potential vulnerabilities and helps them focus their inevitably limited resources and attention on the parts of the system that most require it. It is recommended that all applications have a threat model developed and documented. Threat models should be created as early as possible in the SDLC, and should be revisited as the application evolves and development progresses. To develop a threat model, we recommend taking a simple approach that follows the NIST 800-30 [11] standard for risk assessment. This approach involves: &lt;br /&gt;
* Decomposing the application – understand, through a process of manual inspection, how the application works, its assets, functionality, and connectivity. &lt;br /&gt;
* Defining and classifying the assets – classify the assets into tangible and intangible assets and rank them according to business importance. &lt;br /&gt;
* Exploring potential vulnerabilities - whether technical, operational, or management. &lt;br /&gt;
* Exploring potential threats – develop a realistic view of potential attack vectors from an attacker’s perspective, by using threat scenarios or attack trees.&lt;br /&gt;
* Creating mitigation strategies – develop mitigating controls for each of the threats deemed to be realistic. The output from a threat model itself can vary but is typically a collection of lists and diagrams. The OWASP Code Review Guide outlines an Application Threat Modeling methodology that can be used as a reference for the testing applications for potential security flaws in the design of the application. There is no right or wrong way to develop threat models and perform information risk assessments on applications. [12]. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages:'''&lt;br /&gt;
* Practical attacker's view of the system &lt;br /&gt;
* Flexible &lt;br /&gt;
* Early in the SDLC &lt;br /&gt;
&lt;br /&gt;
'''Disadvantages: &amp;lt;br&amp;gt;'''&lt;br /&gt;
* Relatively new technique &lt;br /&gt;
* Good threat models don’t automatically mean good software&lt;br /&gt;
&lt;br /&gt;
=== Source Code Review ===&lt;br /&gt;
'''Overview'''&amp;lt;br&amp;gt;&lt;br /&gt;
Source code review is the process of manually checking a web application's source code for security issues. Many serious security vulnerabilities cannot be detected with any other form of analysis or testing. As the popular saying goes “if you want to know what’s really going on, go straight to the source.&amp;quot; Almost all security experts agree that there is no substitute for actually looking at the code. All the information for identifying security problems is there in the code somewhere. Unlike testing third party closed software such as operating systems, when testing web applications (especially if they have been developed in-house) the source code should be made available for testing purposes. Many unintentional but significant security problems are also extremely difficult to discover with other forms of analysis or testing, such as penetration testing, making source code analysis the technique of choice for technical testing. With the source code, a tester can accurately determine what is happening (or is supposed to be happening) and remove the guess work of black box testing. Examples of issues that are particularly conducive to being found through source code reviews include concurrency problems, flawed business logic, access control problems, and cryptographic weaknesses as well as backdoors, Trojans, Easter eggs, time bombs, logic bombs, and other forms of malicious code. These issues often manifest themselves as the most harmful vulnerabilities in web sites. Source code analysis can also be extremely efficient to find implementation issues such as places where input validation was not performed or when fail open control procedures may be present. But keep in mind that operational procedures need to be reviewed as well, since the source code being deployed might not be the same as the one being analyzed herein [13].&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages:'''&lt;br /&gt;
* Completeness and effectiveness &lt;br /&gt;
* Accuracy &lt;br /&gt;
* Fast (for competent reviewers) &lt;br /&gt;
&lt;br /&gt;
'''Disadvantages:'''&lt;br /&gt;
* Requires highly skilled security developers &lt;br /&gt;
* Can miss issues in compiled libraries &lt;br /&gt;
* Cannot detect run-time errors easily &lt;br /&gt;
* The source code actually deployed might differ from the one being analyzed&lt;br /&gt;
&lt;br /&gt;
'''For more on code review, checkout the [[OWASP Code Review Project|OWASP code review project]]'''.&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Penetration Testing ===&lt;br /&gt;
'''Overview'''&amp;lt;br&amp;gt;&lt;br /&gt;
Penetration testing has been a common technique used to test network security for many years. It is also commonly known as black box testing or ethical hacking. Penetration testing is essentially the “art” of testing a running application remotely, without knowing the inner workings of the application itself, to find security vulnerabilities. Typically, the penetration test team would have access to an application as if they were users. The tester acts like an attacker and attempts to find and exploit vulnerabilities. In many cases the tester will be given a valid account on the system. While penetration testing has proven to be effective in network security, the technique does not naturally translate to applications. When penetration testing is performed on networks and operating systems, the majority of the work is involved in finding and then exploiting known vulnerabilities in specific technologies. As web applications are almost exclusively bespoke, penetration testing in the web application arena is more akin to pure research. Penetration testing tools have been developed that automate the process, but, again, with the nature of web applications their effectiveness is usually poor. Many people today use web application penetration testing as their primary security testing technique. Whilst it certainly has its place in a testing program, we do not believe it should be considered as the primary or only testing technique. Gary McGraw in [14] summed up penetration testing well when he said, “If you fail a penetration test you know you have a very bad problem indeed. If you pass a penetration test you do not know that you don’t have a very bad problem”. However, focused penetration testing (i.e., testing that attempts to exploit known vulnerabilities detected in previous reviews) can be useful in detecting if some specific vulnerabilities are actually fixed in the source code deployed on the web site. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages:'''&lt;br /&gt;
* Can be fast (and therefore cheap) &lt;br /&gt;
* Requires a relatively lower skill-set than source code review &lt;br /&gt;
* Tests the code that is actually being exposed &lt;br /&gt;
&lt;br /&gt;
'''Disadvantages:'''&lt;br /&gt;
* Too late in the SDLC &lt;br /&gt;
* Front impact testing only!&lt;br /&gt;
&lt;br /&gt;
=== The Need for a Balanced Approach ===&lt;br /&gt;
With so many techniques and so many approaches to testing the security of web applications, it can be difficult to understand which techniques to use and when to use them.&lt;br /&gt;
Experience shows that there is no right or wrong answer to exactly what techniques should be used to build a testing framework. The fact remains that all techniques should probably be used to ensure that all areas that need to be tested are tested. What is clear, however, is that there is no single technique that effectively covers all security testing that must be performed to ensure that all issues have been addressed. Many companies adopt one approach, which has historically been penetration testing. Penetration testing, while useful, cannot effectively address many of the issues that need to be tested, and is simply “too little too late” in the software development life cycle (SDLC). &lt;br /&gt;
The correct approach is a balanced one that includes several techniques, from manual reviews to technical testing. The balanced approach is sure to cover testing in all phases of the SDLC. This approach leverages the most appropriate techniques available depending on the current SDLC phase. &lt;br /&gt;
Of course there are times and circumstances where only one technique is possible; for example, a test on a web application that has already been created, and where the testing party does not have access to the source code. In this case, penetration testing is clearly better than no testing at all. However, we encourage the testing parties to challenge assumptions, such as no access to source code, and to explore the possibility of more complete testing. &lt;br /&gt;
A balanced approach varies depending on many factors, such as the maturity of the testing process and corporate culture. However, it is recommended that a balanced testing framework look something like the representations shown in Figure 3 and Figure 4. The following figure shows a typical proportional representation overlaid onto the software development life cycle. In keeping with research and experience, it is essential that companies place a higher emphasis on the early stages of development.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Image:ProportionSDLC.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;''Figure 3: Proportion of Test Effort in SDLC''&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
The following figure shows a typical proportional representation overlaid onto testing techniques. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Image:ProportionTest.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;''Figure 4: Proportion of Test Effort According to Test Technique''&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''A Note about Web Application Scanners'''&amp;lt;br&amp;gt;&lt;br /&gt;
Many organizations have started to use automated web application scanners. While they undoubtedly have a place in a testing program, we want to highlight some fundamental issues about why we do not believe that automating black box testing is (or will ever be) effective. By highlighting these issues, we are not discouraging web application scanner use. Rather, we are saying that their limitations should be understood, and testing frameworks should be planned appropriately.&lt;br /&gt;
NB: OWASP is currently working to develop a web application scanner-benchmarking platform. The following examples indicate why automated black box testing is not effective. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Example 1: Magic Parameters'''&amp;lt;br&amp;gt;&lt;br /&gt;
Imagine a simple web application that accepts a name-value pair of “magic” and then the value. For simplicity, the GET request may be: ''&amp;lt;nowiki&amp;gt;http://www.host/application?magic=value&amp;lt;/nowiki&amp;gt;'' &amp;lt;br&amp;gt; To further simplify the example, the values in this case can only be ASCII characters a – z (upper or lowercase) and integers 0 – 9. The designers of this application created an administrative backdoor during testing, but obfuscated it to prevent the casual observer from discovering it. By submitting the value sf8g7sfjdsurtsdieerwqredsgnfg8d (30 characters), the user will then be logged in and presented with an administrative screen with total control of the application. The HTTP request is now:&amp;lt;br&amp;gt; ''&amp;lt;nowiki&amp;gt;http://www.host/application?magic= sf8g7sfjdsurtsdieerwqredsgnfg8d &amp;lt;/nowiki&amp;gt;'' &amp;lt;br&amp;gt;&lt;br /&gt;
Given that all of the other parameters were simple two- and three-characters fields, it is not possible to start guessing combinations at approximately 28 characters. A web application scanner will need to brute force (or guess) the entire key space of 30 characters. That is up to 30^28 permutations, or trillions of HTTP requests! That is an electron in a digital haystack! &lt;br /&gt;
The code for this exemplar Magic Parameter check may look like the following: &amp;lt;br&amp;gt;&lt;br /&gt;
 public void doPost( HttpServletRequest request, HttpServletResponse response) &lt;br /&gt;
 { &lt;br /&gt;
 String magic = “sf8g7sfjdsurtsdieerwqredsgnfg8d”; &lt;br /&gt;
 boolean admin = magic.equals( request.getParameter(“magic”));&lt;br /&gt;
 if (admin) doAdmin( request, response); &lt;br /&gt;
 else …. // normal processing &lt;br /&gt;
 } &lt;br /&gt;
By looking in the code, the vulnerability practically leaps off the page as a potential problem. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Example 2: Bad Cryptography'''&amp;lt;br&amp;gt;&lt;br /&gt;
Cryptography is widely used in web applications. Imagine that a developer decided to write a simple cryptography algorithm to sign a user in from site A to site B automatically. In his/her wisdom, the developer decides that if a user is logged into site A, then he/she will generate a key using an MD5 hash function that comprises: ''Hash { username : date }'' &amp;lt;br&amp;gt;&lt;br /&gt;
When a user is passed to site B, he/she will send the key on the query string to site B in an HTTP re-direct. Site B independently computes the hash, and compares it to the hash passed on the request. If they match, site B signs the user in as the user they claim to be. Clearly, as we explain the scheme, the inadequacies can be worked out, and it can be seen how anyone that figures it out (or is told how it works, or downloads the information from Bugtraq) can login as any user. Manual inspection, such as a review, would have uncovered this security issue quickly, as would inspection of the code. A black-box web application scanner would have seen a 128-bit hash that changed with each user, and by the nature of hash functions, did not change in any predictable way.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''A Note about Static Source Code Review Tools'''&amp;lt;br&amp;gt;&lt;br /&gt;
Many organizations have started to use static source code scanners. While they undoubtedly have a place in a comprehensive testing program, we want to highlight some fundamental issues about why we do not believe this approach is effective when used alone. Static source code analysis alone cannot identify issues due to flaws in the design since it cannot understand the context in which the code is constructed. Source code analysis tools are useful in determining security issues due to coding errors, however significant manual effort is required to validate the findings. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Security Requirements Test Derivation ===&lt;br /&gt;
If you want to have a successful testing program, you need to know what your testing objectives are. These objectives are specified by security requirements. This section discusses in detail how to document requirements for security testing by deriving them from applicable standards and regulations and positive and negative application requirements. It also discusses how security requirements effectively drive security testing during the SDLC and how security test data can be used to effectively manage software security risks.&lt;br /&gt;
&lt;br /&gt;
'''Testing Objectives'''&amp;lt;br&amp;gt;&lt;br /&gt;
One of the objectives of security testing is to validate that security controls operate as expected. This is documented via ''security requirements'' that describe the functionality of the security control. At a high level, this means proving confidentiality, integrity, and availability of the data as well as the service.  The other objective is to validate that security controls are implemented with few or no vulnerabilities. These are common vulnerabilities, such as the [[OWASP Top Ten]], as well as vulnerabilities that have been previously identified with security assessments during the SDLC, such as threat modelling, source code analysis, and penetration test. &lt;br /&gt;
&lt;br /&gt;
'''Security Requirements Documentation'''&amp;lt;br&amp;gt;&lt;br /&gt;
The first step in the documentation of security requirements is to understand the ''business requirements''. A business requirement document could provide the initial, high-level information of the expected functionality for the application. For example, the main purpose of an application may be to provide financial services to customers or shopping and purchasing goods from an on-line catalogue. A security section of the business requirements should highlight the need to protect the customer data as well as to comply with applicable security documentation such as regulations, standards, and policies.&lt;br /&gt;
&lt;br /&gt;
A general checklist of the applicable regulations, standards, and policies serves well the purpose of a preliminary security compliance analysis for web applications. For example, compliance regulations can be identified by checking information about the business sector and the country/state where the application needs to function/operate. Some of these compliance guidelines and regulations might translate in specific technical requirements for security controls. For example, in the case of financial applications, the compliance with FFIEC guidelines for authentication [15] requires that financial institutions implement applications that mitigate weak authentication risks with multi-layered security control and multi factor authentication. &lt;br /&gt;
&lt;br /&gt;
Applicable industry standards for security need also to be captured by the general security requirement checklist. For example, in the case of applications that handle customer credit card data, the compliance with the PCI DSS [16] standard forbids the storage of PINs and CVV2 data and requires that the merchant protect magnetic strip data in storage and transmission with encryption and on display by masking. Such PCI DSS security requirements could be validated via source code analysis.&lt;br /&gt;
&lt;br /&gt;
Another section of the checklist needs to enforce general requirements for compliance with the organization information security standards and policies. From the functional requirements perspective, requirements for the security control need to map to a specific section of the information security standards. An example of such requirement can be: &amp;quot;a password complexity of six alphanumeric characters must be enforced by the authentication controls used by the application.&amp;quot; When security requirements map to compliance rules a security test can validate the exposure of compliance risks. If violation with information security standards and policies are found, these will result in a risk that can be documented and that the business has to deal with (i.e., manage). For this reason, since these security compliance requirements are enforceable, they need to be well documented and validated with security tests. &lt;br /&gt;
&lt;br /&gt;
'''Security Requirements Validation'''&amp;lt;br&amp;gt;&lt;br /&gt;
From the functionality perspective, the validation of security requirements is the main objective of security testing, while, from the risk management perspective, this is the objective of information security assessments. At a high level, the main goal of information security assessments is the identification of gaps in security controls, such as lack of basic authentication, authorization, or encryption controls. More in depth, the security assessment objective is risk analysis, such as the identification of potential weaknesses in security controls that ensure the confidentiality, integrity, and availability of the data. For example, when the application deals with personal identifiable information (PII) and sensitive data, the security requirement to be validated is the compliance with the company information security policy requiring encryption of such data in transit and in storage. Assuming encryption is used to protect the data, encryption algorithms and key lengths need to comply with the organization encryption standards. These might require that only certain algorithms and key lengths could be used. For example, a security requirement that can be security tested is verifying that only allowed ciphers are used (e.g., SHA-1, RSA, 3DES) with allowed minimum key lengths (e.g., more than 128 bit for symmetric and more than 1024 for asymmetric encryption).&lt;br /&gt;
&lt;br /&gt;
From the security assessment perspective, security requirements can be validated at different phases of the SDLC by using different artifacts and testing methodologies. For example, threat modeling focuses on identifying security flaws during design, secure code analysis and reviews focus on identifying security issues in source code during development, and penetration testing focuses on identifying vulnerabilities in the application during testing/validation. &lt;br /&gt;
&lt;br /&gt;
Security issues that are identified early in the SDLC can be documented in a test plan so they can be validated later with security tests. By combining the results of different testing techniques, it is possible to derive better security test cases and increase the level of assurance of the security requirements. For example, distinguishing true vulnerabilities from the un-exploitable ones is possible when the results of penetration tests and source code analysis are combined.  Considering the security test for a SQL injection vulnerability, for example, a black box test might involve first a scan of the application to fingerprint the vulnerability. The first evidence of a potential SQL injection vulnerability that can be validated is the generation of a SQL exception. A further validation of the SQL vulnerability might involve manually injecting attack vectors to modify the grammar of the SQL query for an information disclosure exploit. This might involve a lot of trial-and-error analysis till the malicious query is executed. Assuming the tester has the source code, she might learn from the source code analysis on how to construct the SQL attack vector that can exploit the vulnerability (e.g., execute a malicious query returning confidential data to unauthorized user).&lt;br /&gt;
&lt;br /&gt;
'''Threats and Countermeasures Taxonomies'''&amp;lt;br&amp;gt;&lt;br /&gt;
A ''threat and countermeasure classification'' that takes into consideration root causes of vulnerabilities is the critical factor to verify that security controls are designed, coded, and built so that the impact due to the exposure of such vulnerabilities is mitigated. In the case of web applications, the exposure of security controls to common vulnerabilities, such as the OWASP Top Ten, can be a good starting point to derive general security requirements. More specifically, the web application security frame [17] provides a classification (e.g. taxonomy) of vulnerabilities that can be documented in different guidelines and standards and validated with security tests. &lt;br /&gt;
&lt;br /&gt;
The focus of a threat and countermeasure categorization is to define security requirements in terms of the threats and the root cause of the vulnerability. A threat can be categorized by using STRIDE [18], for example, as Spoofing, Tampering, Repudiation, Information disclosure, Denial of service, and Elevation of privilege. The root cause can be categorized as security flaw in design, a security bug in coding, or an issue due to insecure configuration. For example, the root cause of weak authentication vulnerability might be the lack of mutual authentication when data crosses a trust boundary between the client and server tiers of the application. A security requirement that captures the threat of non-repudiation during an architecture design review allows for the documentation of the requirement for the countermeasure (e.g., mutual authentication) that can be validated later on with security tests.&lt;br /&gt;
&lt;br /&gt;
A threat and countermeasure categorization for vulnerabilities can also be used to document security requirements for secure coding such as secure coding standards. An example of a common coding error in authentication controls consists of applying an hash function to encrypt a password, without applying a seed to the value. From the secure coding perspective, this is a vulnerability that affects the encryption used for authentication with a vulnerability root cause in a coding error. Since the root cause is insecure coding the security requirement can be documented in secure coding standards and validated through secure code reviews during the development phase of the SDLC.&lt;br /&gt;
&lt;br /&gt;
'''Security Testing and Risk Analysis'''&amp;lt;br&amp;gt;&lt;br /&gt;
Security requirements need to take into consideration the severity of the vulnerabilities to support a ''risk mitigation strategy''. Assuming that the organization maintains a repository of vulnerabilities found in applications, i.e., a vulnerability knowledge base, the security issues can be reported by type, issue, mitigation, root cause, and mapped to the applications where they are found.  Such a vulnerability knowledge base can also be used to establish a metrics to analyze the effectiveness of the security tests throughout the SDLC.&lt;br /&gt;
 &lt;br /&gt;
For example, consider an input validation issue, such as a SQL injection, which was identified via source code analysis and reported with a coding error root cause and input validation vulnerability type. The exposure of such vulnerability can be assessed via a penetration test, by probing input fields with several SQL injection attack vectors. This test might validate that special characters are filtered before hitting the database and mitigate the vulnerability. By combining the results of source code analysis and penetration testing it is possible to determine the likelihood and exposure of the vulnerability and calculate the risk rating of the vulnerability. By reporting vulnerability risk ratings in the findings (e.g., test report) it is possible to decide on the mitigation strategy. For example, high and medium risk vulnerabilities can be prioritized for remediation, while low risk can be fixed in further releases.&lt;br /&gt;
&lt;br /&gt;
By considering the threat scenarios exploiting common vulnerabilities it is possible to identify potential risks for which the application security control needs to be security tested. For example, the OWASP Top Ten vulnerabilities can be mapped to attacks such as phishing, privacy violations, identify theft, system compromise, data alteration or data destruction, financial loss, and reputation loss. Such issues should be documented as part of the threat scenarios. By thinking in terms of threats and vulnerabilities, it is possible to devise a battery of tests that simulate such attack scenarios. Ideally, the organization vulnerability knowledge base can be used to derive security risk driven tests cases to validate the most likely attack scenarios. For example if identity theft is considered high risk, negative test scenarios should validate the mitigation of impacts deriving from the exploit of vulnerabilities in authentication, cryptographic controls, input validation, and authorization controls.&lt;br /&gt;
&lt;br /&gt;
=== Functional and Non Functional Test Requirements ===&lt;br /&gt;
'''Functional Security Requirements'''&amp;lt;br&amp;gt;&lt;br /&gt;
From the perspective of functional security requirements, the applicable standards, policies and regulations drive both the need of a type of security control as well as the control functionality. These requirements are also referred to as “positive requirements”, since they state the expected functionality that can be validated through security tests.&lt;br /&gt;
Examples of positive requirements are: “the application will lockout the user after six failed logon attempts” or “passwords need to be six min characters, alphanumeric”. The validation of positive requirements consists of asserting the expected functionality and, as such, can be tested by re-creating the testing conditions, and by running the test according to predefined inputs and by asserting the expected outcome as a fail/pass condition.&lt;br /&gt;
&lt;br /&gt;
In order to validate security requirements with security tests, security requirements need to be function driven and highlight the expected functionality (the what) and implicitly the implementation (the how). Examples of high-level security design requirements for authentication can be:&lt;br /&gt;
*Protect user credentials and shared secrets in transit and in storage&lt;br /&gt;
*Mask any confidential data in display (e.g., passwords, accounts)&lt;br /&gt;
*Lock the user account after a certain number of failed login attempts &lt;br /&gt;
*Do not show specific validation errors to the user as a result of failed logon &lt;br /&gt;
*Only allow passwords that are alphanumeric, include special characters and six characters minimum length, to limit the attack surface&lt;br /&gt;
*Allow for password change functionality only to authenticated users by validating the old password, the new password, and the user answer to the challenge question, to prevent brute forcing of a password via password change.&lt;br /&gt;
*The password reset form should validate the user’s username and the user’s registered email before sending the temporary password to the user via email. The temporary password issued should be a one time password. A link to the password reset web page will be sent to the user. The password reset web page should validate the user temporary password, the new password, as well as the user answer to the challenge question.&lt;br /&gt;
&lt;br /&gt;
'''Risk Driven Security Requirements'''&amp;lt;br&amp;gt;&lt;br /&gt;
Security tests need also to be risk driven, that is they need to validate the application for unexpected behavior. These are also called “negative requirements”, since they specify what the application should not do. &lt;br /&gt;
Examples of &amp;quot;should not do&amp;quot; (negative) requirements are:&lt;br /&gt;
* The application should not allow for the data to be altered or destroyed&lt;br /&gt;
* The application should not be compromised or misused for unauthorized financial transactions by a malicious user.&lt;br /&gt;
&lt;br /&gt;
Negative requirements are more difficult to test, because there is no expected behavior to look for. This might require a threat analyst to come up with unforeseeable input conditions, causes, and effects. This is where security testing needs to be driven by risk analysis and threat modeling.&lt;br /&gt;
The key is to document the threat scenarios and the functionality of the countermeasure as a factor to mitigate a threat. For example, in the case of authentication controls, the following security requirements can be documented from the threats and countermeasure perspective:&lt;br /&gt;
*Encrypt authentication data in storage and transit to mitigate risk of information disclosure and authentication protocol attacks&lt;br /&gt;
*Encrypt passwords using non reversible encryption such as using a digest (e.g., HASH) and a seed to prevent dictionary attacks&lt;br /&gt;
*Lock out accounts after reaching a logon failure threshold and enforce password complexity to mitigate risk of brute force password attacks&lt;br /&gt;
*Display generic error messages upon validation of credentials to mitigate risk of account harvesting/enumeration&lt;br /&gt;
*Mutually authenticate client and server to prevent non-repudiation and Man In the Middle (MiTM) attacks&lt;br /&gt;
&lt;br /&gt;
Threat modeling artifacts such as threat trees and attack libraries can be useful to derive the negative test scenarios. A threat tree will assume a root attack (e.g., attacker might be able to read other users' messages) and identify different exploits of security controls (e.g., data validation fails because of a SQL injection vulnerability) and necessary countermeasures (e.g., implement data validation and parametrized queries) that could be validated to be effective in mitigating such attacks.&lt;br /&gt;
&lt;br /&gt;
===Security Requirements Derivation Through Use and Misuse Cases===&lt;br /&gt;
Pre-requisite in describing the application functionality is to understand what the application is supposed to do and how. This can be done by describing ''use cases''. Use cases, in the graphical form as commonly used in software engineering, show the interactions of actors and their relations, and help to identify the actors in the application, their relationships, the intended sequence of actions for each scenario, alternative actions, special requirements, and pre- and post-conditions. Similar to use cases, ''misuse and abuse cases'' [19] describe unintended and malicious use scenarios of the application. These misuse cases provide a way to describe scenarios of how an attacker could misuse and abuse the application. By going through the individual steps in a use scenario and thinking about how it can be maliciously exploited, potential flaws or aspects of the application that are not well-defined can be discovered. The key is to describe all possible or, at least, the most critical use and misuse scenarios. Misuse scenarios allow the analysis of the application from the attacker's point of view and contribute to identifying potential vulnerabilities and the countermeasures that need to be implemented to mitigate the impact caused by the potential exposure to such vulnerabilities. Given all of the use and abuse cases, it is important to analyze them to determine which of them are the most critical ones and need to be documented in security requirements. The identification of the most critical misuse and abuse cases drives the documentation of security requirements and the necessary controls where security risks should be mitigated.&lt;br /&gt;
&lt;br /&gt;
To derive security requirements from use and misuse case [20] , it is important to define the functional scenarios and the negative scenarios, and put these in graphical form. In the case of derivation of security requirements for authentication, for example, the following step-by-step methodology can be followed.&lt;br /&gt;
&lt;br /&gt;
*Step 1: Describe the Functional Scenario: User authenticates by supplying username and password. The application grants access to users based upon authentication of user credentials by the application and provides specific errors to the user when validation fails.&lt;br /&gt;
&lt;br /&gt;
*Step 2: Describe the Negative Scenario:  Attacker breaks the authentication through a brute force/dictionary attack of passwords and account harvesting vulnerabilities in the application. The validation errors provide specific information to an attacker to guess which accounts are actually valid, registered accounts (usernames). The attacker, then, will try to brute force the password for such a valid account. A brute force attack to four minimum length all digit passwords can succeed with a limited number of attempts (i.e., 10^4).&lt;br /&gt;
&lt;br /&gt;
*Step 3: Describe Functional and Negative Scenarios With Use and Misuse Case: The graphical example in Figure below depicts the derivation of security requirements via use and misuse cases. The functional scenario consists of the user actions (entering username and password) and the application actions (authenticating the user and providing an error message if validation fails). The misuse case consists of the attacker actions, i.e., trying to break authentication by brute forcing the password via a dictionary attack and by guessing the valid usernames from error messages. By graphically representing the threats to the user actions (misuses), it is possible to derive the countermeasures as the application actions that mitigate such threats.&lt;br /&gt;
[[Image:UseAndMisuseCase.jpg|640px]]&lt;br /&gt;
&lt;br /&gt;
*Step 4: Elicit The Security Requirements. In this case, the following security requirements for authentication are derived: &lt;br /&gt;
:1) Passwords need to be alphanumeric, lower and upper case and minimum of seven character length&lt;br /&gt;
:2) Accounts need to lockout after five unsuccessful login attempt&lt;br /&gt;
:3) Logon error messages need to be generic&lt;br /&gt;
These security requirements need to be documented and tested.&lt;br /&gt;
&lt;br /&gt;
===Security Tests Integrated in Developers' and Testers' Workflows===&lt;br /&gt;
'''Developers' Security Testing Workflow'''&amp;lt;br&amp;gt;&lt;br /&gt;
Security testing during the development phase of the SDLC represents the first opportunity for developers to ensure that individual software components that they have developed are security tested before they are integrated with other components and built into the application. Software components might consist of software artifacts such as functions, methods, and classes, as well as application programming interfaces, libraries, and executables. For security testing, developers can rely on the results of the source code analysis to verify statically that the developed source code does not include potential vulnerabilities and is compliant with the secure coding standards. Security unit tests can further verify dynamically (i.e., at run time) that the components function as expected.  Before integrating both new and existing code changes in the application build, the results of the static and dynamic analysis should be reviewed and validated. &lt;br /&gt;
The validation of source code before integration in application builds is usually the responsibility of the senior developer. Such senior developer is also the subject matter expert in software security and his role is to lead the secure code review and make decisions whether to accept the code to be released in the application build or to require further changes and testing. This secure code review workflow can be enforced via formal acceptance as well as a check in a workflow management tool. For example, assuming the typical defect management workflow used for functional bugs, security bugs that have been fixed by a developer can be reported on a defect or change management system. The build master can look at the test results reported by the developers in the tool and grant approvals for checking in the code changes into the application build.&lt;br /&gt;
&lt;br /&gt;
'''Testers' Security Testing Workflow'''&amp;lt;br&amp;gt;&lt;br /&gt;
After components and code changes are tested by developers and checked in to the application build, the most likely next step in the software development process workflow is to perform tests on the application as a whole entity. This level of testing is usually referred to as integrated test and system level test. When security tests are part of these testing activities, they can be used to validate both the security functionality of the application as a whole, as well as the exposure to application level vulnerabilities. These security tests on the application include both white box testing, such as source code analysis, and black box testing, such as penetration testing. Gray box testing is similar to Black box testing. In a gray box testing we can assume we have some partial knowledge about the session management of our application, and that should help us in understanding whether the logout and timeout functions are properly secured.&lt;br /&gt;
&lt;br /&gt;
The target for the security tests is the complete system that is the artifact that will be potentially attacked and includes both whole source code and the executable. One peculiarity of security testing during this phase is that it is possible for security testers to determine whether vulnerabilities can be exploited and expose the application to real risks. &lt;br /&gt;
These include common web application vulnerabilities, as well as security issues that have been identified earlier in the SDLC with other activities such as threat modeling, source code analysis, and secure code reviews. &lt;br /&gt;
&lt;br /&gt;
Usually, testing engineers, rather then software developers, perform security tests when the application is in scope for integration system tests. Such testing engineers have security knowledge of web application vulnerabilities, black box and white box security testing techniques, and own the validation of security requirements in this phase. In order to perform such security tests, it is a pre-requisite that security test cases are documented in the security testing guidelines and procedures.&lt;br /&gt;
&lt;br /&gt;
A testing engineer who validates the security of the application in the integrated system environment might release the application for testing in the operational environment (e.g., user acceptance tests). At this stage of the SDLC (i.e., validation), the application functional testing is usually a responsibility of QA testers, while white-hat hackers/security consultants are usually responsible for security testing. Some organizations rely on their own specialized ethical hacking team in order to conduct such tests when a third party assessment is not required (such as for auditing purposes). &lt;br /&gt;
&lt;br /&gt;
Since these tests are the last resort for fixing vulnerabilities before the application is released to production, it is important that such issues are addressed as recommended by the testing team (e.g., the recommendations can include code, design, or configuration change). At this level, security auditors and information security officers discuss the reported security issues and analyze the potential risks according to information risk management procedures. Such procedures might require the developer team to fix all high risk vulnerabilities before the application could be deployed, unless such risks are acknowledged and accepted.&lt;br /&gt;
&lt;br /&gt;
===Developers' Security Tests===&lt;br /&gt;
'''Security Testing in the Coding Phase: Unit Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
From the developer’s perspective, the main objective of security tests is to validate that code is being developed in compliance with secure coding standards requirements. Developers' own coding artifacts such as functions, methods, classes, APIs, and libraries need to be functionally validated before being integrated into the application build. &lt;br /&gt;
&lt;br /&gt;
The security requirements that developers have to follow should be documented in secure coding standards and validated with static and dynamic analysis. As testing activity following a secure code review, unit tests can validate that code changes required by secure code reviews are properly implemented. Secure code reviews and source code analysis through source code analysis tools help developers in identifying security issues in source code as it is developed. By using unit tests and dynamic analysis (e.g., debugging) developers can validate the security functionality of components as well as verify that the countermeasures being developed mitigate any security risks previously identified through threat modeling and source code analysis.  &lt;br /&gt;
&lt;br /&gt;
A good practice for developers is to build security test cases as a generic security test suite that is part of the existing unit testing framework. A generic security test suite could be derived from previously defined use and misuse cases to security test functions, methods and classes. A generic security test suite might include security test cases to validate both positive and negative requirements for security controls such as:&lt;br /&gt;
* Authentication &amp;amp; Access Control&lt;br /&gt;
* Input Validation &amp;amp; Encoding&lt;br /&gt;
* Encryption&lt;br /&gt;
* User and Session Management&lt;br /&gt;
* Error and Exception Handling&lt;br /&gt;
* Auditing and Logging&lt;br /&gt;
&lt;br /&gt;
Developers empowered with a source code analysis tool integrated into their IDE, secure coding standards, and a security unit testing framework can assess and verify the security of the software components being developed. Security test cases can be run to identify potential security issues that have root causes in source code: besides input and output validation of parameters entering and exiting the components, these issues include authentication and authorization checks done by the component, protection of the data within the component, secure exception and error handling, and secure auditing and logging. Unit test frameworks such as Junit, Nunit, and CUnit can be adapted to verify security test requirements. In the case of security functional tests, unit level tests can test the functionality of security controls at the software component level, such as functions, methods, or classes. For example, a test case could validate input and output validation (e.g., variable sanitization) and boundary checks for variables by asserting the expected functionality of the component.&lt;br /&gt;
&lt;br /&gt;
The threat scenarios identified with use and misuse cases can be used to document the procedures for testing software components. In the case of authentication components, for example, security unit tests can assert the functionality of setting an account lockout as well as the fact that user input parameters cannot be abused to bypass the account lockout (e.g., by setting the account lockout counter to a negative number). At the component level, security unit tests can validate positive assertions as well as negative assertions, such as errors and exception handling. Exceptions should be caught without leaving the system in an insecure state, such as potential denial of service caused by resources not being deallocated (e.g., connection handles not closed within a final statement block), as well as potential elevation of privileges (e.g., higher privileges acquired before the exception is thrown and not re-set to the previous level before exiting the function). Secure error handling can validate potential information disclosure via informative error messages and stack traces. &lt;br /&gt;
&lt;br /&gt;
Unit level security test cases can be developed by a security engineer who is the subject matter expert in software security and is also responsible for validating that the security issues in the source code have been fixed and can be checked into the integrated system build.  Typically, the manager of the application builds also makes sure that third-party libraries and executable files are security assessed for potential vulnerabilities before being integrated in the application build.&lt;br /&gt;
&lt;br /&gt;
Threat scenarios for common vulnerabilities that have root causes in insecure coding can also be documented in the developer’s security testing guide. When a fix is implemented for a coding defect identified with source code analysis, for example, security test cases can verify that the implementation of the code change follows the secure coding requirements documented in the secure coding standards. &lt;br /&gt;
&lt;br /&gt;
Source code analysis and unit tests can validate that the code change mitigates the vulnerability exposed by the previously identified coding defect. The results of automated secure code analysis can also be used as automatic check-in gates for version control: software artifacts cannot be checked into the build with high or medium severity coding issues.&lt;br /&gt;
&lt;br /&gt;
===Functional Testers' Security Tests===&lt;br /&gt;
'''Security Testing During the Integration and Validation Phase: Integrated System Tests and Operation Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
The main objective of integrated system tests is to validate the “defense in depth” concept, that is, that the implementation of security controls provides security at different layers. For example, the lack of input validation when calling a component integrated with the application is often a factor that can be tested with integration testing. &lt;br /&gt;
&lt;br /&gt;
The integration system test environment is also the first environment where testers can simulate real attack scenarios as can be potentially executed by a malicious external or internal user of the application. Security testing at this level can validate whether vulnerabilities are real and can be exploited by attackers. For example, a potential vulnerability found in source code can be rated as high risk because of the exposure to potential malicious users, as well as because of the potential impact (e.g., access to confidential information).&lt;br /&gt;
Real attack scenarios can be tested with both manual testing techniques and penetration testing tools. Security tests of this type are also referred to as ethical hacking tests. From the security testing perspective, these are risk driven tests and have the objective to test the application in the operational environment. The target is the application build that is representative of the version of the application being deployed into production.&lt;br /&gt;
&lt;br /&gt;
The execution of security in the integration and validation phase is critical to identifying vulnerabilities due to integration of components as well as validating the exposure of such vulnerabilities. Since application security testing requires a specialized set of skills, which includes both software and security knowledge and is not typical of security engineers, organizations are often required to security-train their software developers on ethical hacking techniques, security assessment procedures and tools. A realistic scenario is to develop such resources in-house and document them in security testing guides and procedures that take into account the developer’s security testing knowledge. A so called “security test cases cheat list or check-list”, for example, can provide simple test cases and attack vectors that can be used by testers to validate exposure to common vulnerabilities such as spoofing, information disclosures, buffer overflows, format strings, SQL injection and XSS injection, XML, SOAP, canonicalization issues, denial of service and managed code and ActiveX controls (e.g., .NET). A first battery of these tests can be performed manually with a very basic knowledge of software security. The first objective of security tests might be the validation of a set of minimum security requirements. These security test cases might consist of manually forcing the application into error and exceptional states, and gathering knowledge from the application behavior. For example, SQL injection vulnerabilities can be tested manually by injecting attack vectors through user input and by checking if SQL exceptions are thrown back the user. The evidence of a SQL exception error might be a manifestation of a vulnerability that can be exploited. A more in-depth security test might require the tester’s knowledge of specialized testing techniques and tools. Besides source code analysis and penetration testing, these techniques include, for example, source code and binary fault injection, fault propagation analysis and code coverage, fuzz testing, and reverse engineering. The security testing guide should provide procedures and recommend tools that can be used by security testers to perform such in-depth security assessments.&lt;br /&gt;
&lt;br /&gt;
The next level of security testing after integration system tests is to perform security tests in the user acceptance environment. There are unique advantages to performing security tests in the operational environment. The user acceptance tests environment (UAT) is the one that is most representative of the release configuration, with the exception of the data (e.g., test data is used in place of real data). A characteristic of security testing in UAT is testing for security configuration issues. In some cases these vulnerabilities might represent high risks. For example, the server that hosts the web application might not be configured with minimum privileges, valid SSL certificate and secure configuration, essential services disabled and web root directory not cleaned from test and administration web pages.&lt;br /&gt;
&lt;br /&gt;
===Security Test Data Analysis and Reporting===&lt;br /&gt;
'''Goals for Security Test Metrics and Measurements'''&amp;lt;br&amp;gt;&lt;br /&gt;
The definition of the goals for the security testing metrics and measurements is a pre-requisite for using security testing data for risk analysis and management processes. For example, a measurement such as the total number of vulnerabilities found with security tests might quantify the security posture of the application. These measurements also help to identify security objectives for software security testing: for example, reducing the number of vulnerabilities to an acceptable number (minimum) before the application is deployed into production. &lt;br /&gt;
&lt;br /&gt;
Another manageable goal could be to compare the application security posture against a baseline to assess improvements in application security processes. For example, the security metrics baseline might consist of an application that was tested only with penetration tests. The security data obtained from an application that was also security tested during coding should show an improvement (e.g., fewer number of vulnerabilities) when compared with the baseline.&lt;br /&gt;
&lt;br /&gt;
In traditional software testing, the number of software defects, such as the bugs found in an application, could provide a measure of software quality. Similarly, security testing can provide a measure of software security. From the defect management and reporting perspective, software quality and security testing can use similar categorizations for root causes and defect remediation efforts. From the root cause perspective, a security defect can be due to an error in design (e.g., security flaws) or due to an error in coding (e.g., security bug). From the perspective of the effort required to fix a defect, both security and quality defects can be measured in terms of developer hours to implement the fix, the tools and resources required to fix, and, finally, the cost to implement the fix.&lt;br /&gt;
&lt;br /&gt;
A characteristic of security test data, compared to quality data, is the categorization in terms of the threat, the exposure of the vulnerability, and the potential impact posed by the vulnerability to determine the risk. Testing applications for security consists of managing technical risks to make sure that the application countermeasures meet acceptable levels. For this reason, security testing data needs to support the security risk strategy at critical checkpoints during the SDLC. For example, vulnerabilities found in source code with source code analysis represent an initial measure of risk. Such measure of risk (e.g., high, medium, low) for the vulnerability can be calculated by determining the exposure and likelihood factors and, further, by validating such vulnerability with penetration tests. The risk metrics associated to vulnerabilities found with security tests empower business management to make risk management decisions, such as to decide whether risks can be accepted, mitigated, or transferred at different levels within the organization (e.g., business as well as technical).&lt;br /&gt;
&lt;br /&gt;
When evaluating the security posture of an application, it is important to take into consideration certain factors, such as the size of the application being developed. Application size has been statistically proven to be related to the number of issues found in the application with tests. One measure of application size is the number of line of code (LOC) of the application. Typically,  software quality defects range from about 7 to 10 defects per thousand lines of new and changed code [21]. Since testing can reduce the overall number by about 25% with one test alone, it is logical for larger size applications to be tested more and more often than smaller size applications.&lt;br /&gt;
&lt;br /&gt;
When security testing is done in several phases of the SDLC, the test data could prove the capability of the security tests in detecting vulnerabilities as soon as they are introduced, and prove the effectiveness of removing them by implementing countermeasures at different checkpoints of the SDLC. A measurement of this type is also defined as “containment metrics” and provides a measure of the ability of a security assessment performed at each phase of the development process to maintain security within each phase. These containment metrics are also a critical factor in lowering the cost of fixing the vulnerabilities, since it is less expensive to deal with the vulnerabilities when they are found (in the same phase of the SDLC), rather then fixing them later in another phase. &lt;br /&gt;
&lt;br /&gt;
Security test metrics can support security risk, cost, and defect management analysis when it is associated with tangible and timed goals such as: &lt;br /&gt;
*Reducing the overall number of vulnerabilities by 30%&lt;br /&gt;
*Security issues are expected to be fixed by a certain deadline (e.g., before beta release) &lt;br /&gt;
&lt;br /&gt;
Security test data can be absolute, such as the number of vulnerabilities detected during manual code review, as well as comparative, such as the number of vulnerabilities detected in code reviews vs. penetration tests. To answer questions about the quality of the security process, it is important to determine a baseline for what could be considered acceptable and good. &lt;br /&gt;
&lt;br /&gt;
Security test data can also support specific objectives of the security analysis such as compliance with security regulations and information security standards, management of security processes, the identification of security root causes and process improvements, and security costs vs. benefits analysis.&lt;br /&gt;
&lt;br /&gt;
When security test data is reported it has to provide metrics to support the analysis. The scope of the analysis is the interpretation of test data to find clues about the security of the software being produced as well the effectiveness of the process. &lt;br /&gt;
Some examples of clues supported by security test data can be:&lt;br /&gt;
*Are vulnerabilities reduced to an acceptable level for release?&lt;br /&gt;
*How does the security quality of this product compare with similar software products?&lt;br /&gt;
*Are all security test requirements being met? &lt;br /&gt;
*What are the major root causes of security issues?&lt;br /&gt;
*How numerous are security flaws compared to security bugs?&lt;br /&gt;
*Which security activity is most effective in finding vulnerabilities?&lt;br /&gt;
*Which team is more productive in fixing security defects and vulnerabilities?&lt;br /&gt;
*Which percentage of overall vulnerabilities are high risk?&lt;br /&gt;
*Which tools are most effective in detecting security vulnerabilities?&lt;br /&gt;
*Which kind of security tests are most effective in finding vulnerabilities (e.g., white box vs. black box) tests?&lt;br /&gt;
*How many security issues are found during secure code reviews?&lt;br /&gt;
*How many security issues are found during secure design reviews?&lt;br /&gt;
&lt;br /&gt;
In order to make a sound judgment using the testing data, it is important to have a good understanding of the testing process as well as the testing tools. A tool taxonomy should be adopted to decide which security tools should be used. Security tools can be qualified as being good at finding common known vulnerabilities targeting different artifacts.&lt;br /&gt;
The issue is that the unknown security issues are not tested: the fact that you come out clean it does not mean that your software or application is good. Some studies [22] have demonstrated that, at best, tools can find 45% of overall vulnerabilities. &lt;br /&gt;
&lt;br /&gt;
Even the most sophisticated automation tools are not a match for an experienced security tester: just relying on successful test results from automation tools will give security practitioners a false sense of security.  Typically, the more experienced the security testers are with the security testing methodology and testing tools, the better the results of the security test and analysis will be. It is important that managers making an investment in security testing tools also consider an investment in hiring skilled human resources as well as security test training.&lt;br /&gt;
&lt;br /&gt;
'''Reporting Requirements'''&amp;lt;br&amp;gt;&lt;br /&gt;
The security posture of an application can be characterized from the perspective of the effect, such as number of vulnerabilities and the risk rating of the vulnerabilities, as well as from the perspective of the cause (i.e., origin) such as coding errors, architectural flaws, and configuration issues.  &lt;br /&gt;
&lt;br /&gt;
Vulnerabilities can be classified according to different criteria. This can be a statistical categorization, such as the OWASP Top 10 and WASC (Web Application Security Statistics) project, or related to defensive controls as in the case of WASF (Web Application Security Framework) categorization.&lt;br /&gt;
&lt;br /&gt;
When reporting security test data, the best practice is to include the following information, besides the categorization of each vulnerability by type:&lt;br /&gt;
*The security threat that the issue is exposed to&lt;br /&gt;
*The root cause of security issues (e.g., security bugs, security flaw)&lt;br /&gt;
*The testing technique used to find it&lt;br /&gt;
*The remediation of the vulnerability (e.g., the countermeasure) &lt;br /&gt;
*The risk rating of the vulnerability (High, Medium, Low)&lt;br /&gt;
&lt;br /&gt;
By describing what the security threat is, it will be possible to understand if and why the mitigation control is ineffective in mitigating the threat. &lt;br /&gt;
&lt;br /&gt;
Reporting the root cause of the issue can help pinpoint what needs to be fixed: in the case of a white box testing, for example, the software security root cause of the vulnerability will be the offending source code. &lt;br /&gt;
&lt;br /&gt;
Once issues are reported, it is also important to provide guidance to the software developer on how to re-test and find the vulnerability. This might involve using a white box testing technique (e.g., security code review with a static code analyzer) to find if the code is vulnerable. If a vulnerability can be found via a black box technique (penetration test), the test report also needs to provide information on how to validate the exposure of the vulnerability to the front end (e.g., client).&lt;br /&gt;
&lt;br /&gt;
The information about how to fix the vulnerability should be detailed enough for a developer to implement a fix. It should provide secure coding examples, configuration changes, and provide adequate references.&lt;br /&gt;
&lt;br /&gt;
Finally the risk rating helps to prioritize the remediation effort. Typically, assigning a risk rating to the vulnerability involves a risk analysis based upon factors such as impact and exposure.&lt;br /&gt;
&lt;br /&gt;
'''Business Cases'''&amp;lt;br&amp;gt; &lt;br /&gt;
For the security test metrics to be useful, they need to provide value back to the organization's security test data stakeholders, such as project managers, developers, information security offices, auditors, and chief information officers. The value can be in terms of the business case that each project stakeholder has in terms of role and responsibility.&lt;br /&gt;
&lt;br /&gt;
Software developers look at security test data to show that software is coded more securely and efficiently, so that they can make the case of using source code analysis tools as well as following secure coding standards and attending software security training. &lt;br /&gt;
&lt;br /&gt;
Project managers look for data that allows them to successfully manage and utilize security testing activities and resources according to the project plan. To project managers, security test data can show that projects are on schedule and moving on target for delivery dates and are getting better during tests. &lt;br /&gt;
&lt;br /&gt;
Security test data also helps the business case for security testing if the initiative comes from information security officers (ISOs). For example, it can provide evidence that security testing during the SDLC does not impact the project delivery, but rather reduces the overall workload needed to address vulnerabilities later in production. &lt;br /&gt;
&lt;br /&gt;
To compliance auditors, security test metrics provide a level of software security assurance and confidence that security standard compliance is addressed through the security review processes within the organization. &lt;br /&gt;
&lt;br /&gt;
Finally, Chief Information Officers (CIOs) and Chief Information Security Officers (CISOs), responsible for the budget that needs to be allocated in security resources, look for derivation of a cost/benefit analysis from security test data to make informed decisions on which security activities and tools to invest. One of the metrics that support such analysis is the Return On Investment (ROI) in Security [23]. To derive such metrics from security test data, it is important to quantify the differential between the risk due to the exposure of vulnerabilities and the effectiveness of the security tests in mitigating the security risk, and factor this gap with the cost of the security testing activity or the testing tools adopted.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1] T. DeMarco, ''Controlling Software Projects: Management, Measurement and Estimation'', Yourdon Press, 1982&lt;br /&gt;
&lt;br /&gt;
[2] S. Payne, ''A Guide to Security Metrics'' - http://www.sans.org/reading_room/whitepapers/auditing/55.php&lt;br /&gt;
&lt;br /&gt;
[3] NIST, ''The economic impacts of inadequate infrastructure for software testing'' - http://www.nist.gov/director/planning/upload/report02-3.pdf&lt;br /&gt;
&lt;br /&gt;
[4] Ross Anderson, ''Economics and Security Resource Page'' - http://www.cl.cam.ac.uk/~rja14/econsec.html &lt;br /&gt;
&lt;br /&gt;
[5] Denis Verdon, ''Teaching Developers To Fish'' - [[OWASP AppSec NYC 2004]]&lt;br /&gt;
&lt;br /&gt;
[6] Bruce Schneier, ''Cryptogram Issue #9'' - https://www.schneier.com/crypto-gram-0009.html&lt;br /&gt;
&lt;br /&gt;
[7] Symantec, ''Threat Reports'' -  http://www.symantec.com/security_response/publications/threatreport.jsp&lt;br /&gt;
&lt;br /&gt;
[8] FTC, ''The Gramm-Leach Bliley Act'' - http://business.ftc.gov/privacy-and-security/gramm-leach-bliley-act&lt;br /&gt;
&lt;br /&gt;
[9] Senator Peace and Assembly Member Simitian, ''SB 1386''- http://www.leginfo.ca.gov/pub/01-02/bill/sen/sb_1351-1400/sb_1386_bill_20020926_chaptered.html&lt;br /&gt;
&lt;br /&gt;
[10] European Union, ''Directive 96/46/EC on the protection of individuals with regard to the processing of personal data and on the free movement of such data'' -&lt;br /&gt;
http://ec.europa.eu/justice/policies/privacy/docs/95-46-ce/dir1995-46_part1_en.pdf&lt;br /&gt;
&lt;br /&gt;
[11] NIST, '' Risk management guide for information technology systems'' - http://csrc.nist.gov/publications/nistpubs/800-30-rev1/sp800_30_r1.pdf&lt;br /&gt;
&lt;br /&gt;
[12] SEI, Carnegie Mellon, ''Operationally Critical Threat, Asset, and Vulnerability Evaluation (OCTAVE)'' - http://www.cert.org/octave/&lt;br /&gt;
&lt;br /&gt;
[13] Ken Thompson, ''Reflections on Trusting Trust, Reprinted from Communication of the ACM '' - http://cm.bell-labs.com/who/ken/trust.html''   [[Category:FIXME|link not working]]&lt;br /&gt;
&lt;br /&gt;
[14] Gary McGraw, ''Beyond the Badness-ometer'' - http://www.drdobbs.com/security/beyond-the-badness-ometer/189500001&lt;br /&gt;
&lt;br /&gt;
[15] FFIEC, '' Authentication in an Internet Banking Environment'' - http://www.ffiec.gov/pdf/authentication_guidance.pdf&lt;br /&gt;
&lt;br /&gt;
[16] PCI Security Standards Council, ''PCI Data Security Standard'' - https://www.pcisecuritystandards.org/security_standards/index.php &lt;br /&gt;
&lt;br /&gt;
[17] MSDN, ''Cheat Sheet: Web Application Security Frame'' - http://msdn.microsoft.com/en-us/library/ms978518.aspx#tmwacheatsheet_webappsecurityframe &lt;br /&gt;
&lt;br /&gt;
[18] MSDN, ''Improving Web Application Security, Chapter 2, Threat And Countermeasures'' - http://msdn.microsoft.com/en-us/library/aa302418.aspx&lt;br /&gt;
&lt;br /&gt;
[19] Sindre,G. Opdmal A., '' Capturing Security Requirements Through Misuse Cases ' - http://folk.uio.no/nik/2001/21-sindre.pdf&lt;br /&gt;
&lt;br /&gt;
[20] Improving Security Across the Software Development Lifecycle Task Force, ''Referred Data from Caper Johns, Software Assessments, Benchmarks and Best Practices'' - http://www.criminal-justice-careers.com/resources/SDLCFULL.pdf&lt;br /&gt;
&lt;br /&gt;
[21] MITRE, ''Being Explicit About Weaknesses, Slide 30, Coverage of CWE'' - http://cwe.mitre.org/documents/being-explicit/BlackHatDC_BeingExplicit_Slides.ppt&lt;br /&gt;
&lt;br /&gt;
[22] Marco Morana, ''Building Security Into The Software Life Cycle, A Business Case'' - http://www.blackhat.com/presentations/bh-usa-06/bh-us-06-Morana-R3.0.pdf&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_Guide_Introduction&amp;diff=171423</id>
		<title>Testing Guide Introduction</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_Guide_Introduction&amp;diff=171423"/>
				<updated>2014-04-01T22:20:01Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: Testing Guide V4: Review_v1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
=== The OWASP Testing Project ===&lt;br /&gt;
----&lt;br /&gt;
The OWASP Testing Project has been in development for many years. With this project, we want to help people understand the ''what'', ''why'', ''when'', ''where'', and ''how'' of testing their web applications. For this reason, we have avoided merely providing a simple checklist or prescription of issues that should be addressed. The outcome of this project is a complete Testing Framework, from which others can build their own testing programs or qualify other people’s processes. The Testing Guide describes in details both the general Testing Framework and the techniques required to implement the framework in practice.&lt;br /&gt;
&lt;br /&gt;
Writing the Testing Guide has proven to be a difficult task. It has been a challenge to obtain consensus and develop the content that allows people to apply the concepts described here, while enabling them to work in their own environment and culture. It has also been a challenge to change the focus of web application testing from penetration testing to testing integrated in the software development life cycle. &lt;br /&gt;
&lt;br /&gt;
However, we are very satisfied with the results we have reached. Many industry experts and those responsible for software security at some of the largest companies in the world are validating the Testing Framework. This framework helps organizations test their web applications in order to build reliable and secure software, rather than simply highlighting areas of weakness, although the latter is certainly a byproduct of many of OWASP’s guides and checklists. As such, we have made some hard decisions about the appropriateness of certain testing techniques and technologies, which we fully understand will not be agreed upon by everyone. However, OWASP is able to take the high ground and change culture over time through awareness and education based on consensus and experience.&lt;br /&gt;
&lt;br /&gt;
The rest of this guide is organized as follows. This introduction covers the pre-requisites of testing web applications: the scope of testing, the principles of successful testing, and testing techniques. Chapter 3 presents the OWASP Testing Framework and explains its techniques and tasks in relation to the various phases of the software development life cycle. Chapter 4 covers how to test for specific vulnerabilities (e.g., SQL Injection) by code inspection and penetration testing. &lt;br /&gt;
&lt;br /&gt;
'''Measuring (in)security: the Economics of Insecure Software'''&amp;lt;br&amp;gt;&lt;br /&gt;
A basic tenet of software engineering is that you can't control what you can't measure [1]. Security testing is no different. Unfortunately, measuring security is a notoriously difficult process. We will not cover this topic in detail here, since it would take a guide on its own (for an introduction, see [2]). &lt;br /&gt;
&lt;br /&gt;
One aspect that we want to emphasize, however, is that security measurements are, by necessity, about both the specific, technical issues (e.g., how prevalent a certain vulnerability is) and how these affect the economics of software. We find that most technical people understand at least the basic issues, or have a deeper understanding, of the vulnerabilities. Sadly, few are able to translate that technical knowledge into monetary terms, and, thereby, quantify the potential cost of vulnerabilities to the application owner's business. We believe that until this happens, CIOs will not be able to develop an accurate return on security investment and, subsequently, assign appropriate budgets for software security.&amp;lt;br/&amp;gt;&lt;br /&gt;
While estimating the cost of insecure software may appear a daunting task, recently there has been a significant amount of work in this direction. For example, in June 2002, the US National Institute of Standards (NIST) published a survey on the cost of insecure software to the US economy due to inadequate software testing [3]. Interestingly, they estimate that a better testing infrastructure would save more than a third of these costs, or about $22 billion a year. More recently, the links between economics and security have been studied by academic researchers. See [4] for more information about some of these efforts.&lt;br /&gt;
&lt;br /&gt;
The framework described in this document encourages people to measure security throughout their entire development process. They can then relate the cost of insecure software to the impact it has on their business, and consequently develop appropriate business decisions (resources) to manage the risk. Remember: measuring and testing web applications is even more critical than for other software, since web applications are exposed to millions of users through the Internet.&lt;br /&gt;
&lt;br /&gt;
'''What is Testing'''&amp;lt;br&amp;gt;&lt;br /&gt;
What do we mean by testing? During the development life cycle of a web application, many things need to be tested. The Merriam-Webster Dictionary describes testing as: &lt;br /&gt;
* To put to test or proof. &lt;br /&gt;
* To undergo a test. &lt;br /&gt;
* To be assigned a standing or evaluation based on tests. &lt;br /&gt;
For the purposes of this document, testing is a process of comparing the state of a system/application against a set of criteria. In the security industry, people frequently test against a set of mental criteria that are neither well defined nor complete. For this reason and others, many outsiders regard security testing as a black art. This document’s aim is to change that perception and to make it easier for people without in-depth security knowledge to make a difference. &lt;br /&gt;
&lt;br /&gt;
'''Why Testing'''&amp;lt;br&amp;gt;&lt;br /&gt;
This document is designed to help organizations understand what comprises a testing program, and to help them identify the steps that they need to undertake to build and operate that testing program on their web applications. It is intended to give a broad view of the elements required to make a comprehensive web application security program. This guide can be used as a reference and as a methodology to help determine the gap between your existing practices and industry best practices. This guide allows organizations to compare themselves against industry peers, understand the magnitude of resources required to test and maintain their software, or prepare for an audit. This chapter does not go into the technical details of how to test an application, as the intent is to provide a typical security organizational framework. The technical details about how to test an application, as part of a penetration test or code review will be covered in the remaining parts of this document. &lt;br /&gt;
&lt;br /&gt;
'''When to Test'''&amp;lt;br&amp;gt;&lt;br /&gt;
Most people today don’t test the software until it has already been created and is in the deployment phase of its life cycle (i.e., code has been created and instantiated into a working web application). This is generally a very ineffective and cost-prohibitive practice. One of the best methods to prevent security bugs from appearing in production applications is to improve the Software Development Life Cycle (SDLC) by including security in each of its phases. An SDLC is a structure imposed on the development of software artifacts. If an SDLC is not currently being used in your environment, it is time to pick one! The following figure shows a generic SDLC model as well as the (estimated) increasing cost of fixing security bugs in such a model. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:SDLC.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
''Figure 1: Generic SDLC Model'' &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Companies should inspect their overall SDLC to ensure that security is an integral part of the development process. SDLCs should include security tests to ensure security is adequately covered and controls are effective throughout the development process. &lt;br /&gt;
&lt;br /&gt;
'''What to Test'''&amp;lt;br&amp;gt;&lt;br /&gt;
It can be helpful to think of software development as a combination of people, process, and technology. If these are the factors that &amp;quot;create&amp;quot; software, then it is logical that these are the factors that must be tested. Today most people generally test the technology or the software itself. &lt;br /&gt;
&lt;br /&gt;
An effective testing program should have components that test ''People'' – to ensure that there is adequate education and awareness; ''Process'' – to ensure that there are adequate policies and standards and that people know how to follow these policies; ''Technology'' – to ensure that the process has been effective in its implementation. Unless a holistic approach is adopted, testing just the technical implementation of an application will not uncover management or operational vulnerabilities that could be present. By testing the people, policies, and processes, an organization can catch issues that would later manifest themselves into defects in the technology, thus eradicating bugs early and identifying the root causes of defects. Likewise, testing only some of the technical issues that can be present in a system will result in an incomplete and inaccurate security posture assessment. Denis Verdon, Head of Information Security at [http://www.fnf.com Fidelity National Financial] presented an excellent analogy for this misconception at the OWASP AppSec 2004 Conference in New York [5]: &amp;quot;If cars were built like applications [...] safety tests would assume frontal impact only. Cars would not be roll tested, or tested for stability in emergency maneuvers, brake effectiveness, side impact, and resistance to theft.&amp;quot; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Feedback and Comments'''&amp;lt;br&amp;gt;&lt;br /&gt;
As with all OWASP projects, we welcome comments and feedback. We especially like to know that our work is being used and that it is effective and accurate.&lt;br /&gt;
&lt;br /&gt;
==Principles of Testing==&lt;br /&gt;
&lt;br /&gt;
There are some common misconceptions when developing a testing methodology to weed out security bugs in software. This chapter covers some of the basic principles that should be taken into account by professionals when testing for security bugs in software. &lt;br /&gt;
&lt;br /&gt;
'''There is No Silver Bullet'''&amp;lt;br&amp;gt;&lt;br /&gt;
While it is tempting to think that a security scanner or application firewall will either provide a multitude of defenses or identify a multitude of problems, in reality there are no silver bullets to the problem of insecure software. Application security assessment software, while useful as a first pass to find low-hanging fruit, is generally immature and ineffective at in-depth assessments and at providing adequate test coverage. Remember that security is a process, not a product. &lt;br /&gt;
&lt;br /&gt;
'''Think Strategically, Not Tactically'''&amp;lt;br&amp;gt;&lt;br /&gt;
Over the last few years, security professionals have come to realize the fallacy of the patch-and-penetrate model that was pervasive in information security during the 1990’s. The patch-and-penetrate model involves fixing a reported bug, but without proper investigation of the root cause. This model is usually associated with the window of vulnerability shown in the figure below. The evolution of vulnerabilities in common software used worldwide has shown the ineffectiveness of this model. Fore more information about the window of vulnerability please refer to [6]. Vulnerability studies [7] have shown that with the reaction time of attackers worldwide, the typical window of vulnerability does not provide enough time for patch installation, since the time between a vulnerability being uncovered and an automated attack against it being developed and released is decreasing every year. There are also several wrong assumptions in the patch-and-penetrate model: patches interfere with the normal operations and might break existing applications, and not all the users might (in the end) be aware of a patch’s availability. Consequently not all the product's users will apply patches, either because of this issue or because they lack knowledge about the patch's existence.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:WindowExposure.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
''Figure 2: Window of Vulnerability''&amp;lt;/center&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
To prevent reoccurring security problems within an application, it is essential to build security into the Software Development Life Cycle (SDLC) by developing standards, policies, and guidelines that fit and work within the development methodology. Threat modeling and other techniques should be used to help assign appropriate resources to those parts of a system that are most at risk. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''The SDLC is King'''&amp;lt;br&amp;gt;&lt;br /&gt;
The SDLC is a process that is well-known to developers. By integrating security into each phase of the SDLC, it allows for a holistic approach to application security that leverages the procedures already in place within the organization. Be aware that while the names of the various phases may change depending on the SDLC model used by an organization, each conceptual phase of the archetype SDLC will be used to develop the application (i.e., define, design, develop, deploy, maintain). Each phase has security considerations that should become part of the existing process, to ensure a cost-effective and comprehensive security program. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test Early and Test Often'''&amp;lt;br&amp;gt;&lt;br /&gt;
When a bug is detected early within the SDLC, it can be addressed more quickly and at a lower cost. A security bug is no different from a functional or performance-based bug in this regard. A key step in making this possible is to educate the development and QA organizations about common security issues and the ways to detect and prevent them. Although new libraries, tools, or languages might help design better programs (with fewer security bugs), new threats arise constantly and developers must be aware of those that affect the software they are developing. Education in security testing also helps developers acquire the appropriate mindset to test an application from an attacker's perspective. This allows each organization to consider security issues as part of their existing responsibilities.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Understand the Scope of Security'''&amp;lt;br&amp;gt;&lt;br /&gt;
It is important to know how much security a given project will require. The information and assets that are to be protected should be given a classification that states how they are to be handled (e.g., Confidential, Secret, Top Secret). Discussions should occur with legal council to ensure that any specific security need will be met. In the USA they might come from federal regulations, such as the Gramm-Leach-Bliley Act [8], or from state laws, such as the California SB-1386 [9]. For organizations based in EU countries, both country-specific regulation and EU Directives might apply. For example, Directive 96/46/EC4 [10] makes it mandatory to treat personal data in applications with due care, whatever the application. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Develop the Right Mindset'''&amp;lt;br&amp;gt;&lt;br /&gt;
Successfully testing an application for security vulnerabilities requires thinking &amp;quot;outside of the box.&amp;quot; Normal use cases will test the normal behavior of the application when a user is using it in the manner that you expect. Good security testing requires going beyond what is expected and thinking like an attacker who is trying to break the application. Creative thinking can help to determine what unexpected data may cause an application to fail in an insecure manner. It can also help find what assumptions made by web developers are not always true and how they can be subverted. This is one of the reasons why automated tools are actually bad at automatically testing for vulnerabilities: this creative thinking must be done on a case-by-case basis and most web applications are being developed in a unique way (even if using common frameworks). &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Understand the Subject'''&amp;lt;br&amp;gt;&lt;br /&gt;
One of the first major initiatives in any good security program should be to require accurate documentation of the application. The architecture, data-flow diagrams, use cases, and more should be written in formal documents and made available for review. The technical specification and application documents should include information that lists not only the desired use cases, but also any specifically disallowed use case. Finally, it is good to have at least a basic security infrastructure that allows the monitoring and trending of attacks against an organization's applications and network (e.g., IDS systems). &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Use the Right Tools'''&amp;lt;br&amp;gt;&lt;br /&gt;
While we have already stated that there is no silver bullet tool, tools do play a critical role in the overall security program. There is a range of open source and commercial tools that can automate many routine security tasks. These tools can simplify and speed up the security process by assisting security personnel in their tasks. It is important to understand exactly what these tools can and cannot do, however, so that they are not oversold or used incorrectly. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''The Devil is in the Details'''&amp;lt;br&amp;gt;&lt;br /&gt;
It is critical not to perform a superficial security review of an application and consider it complete. This will instill a false sense of confidence that can be as dangerous as not having done a security review in the first place. It is vital to carefully review the findings and weed out any false positive that may remain in the report. Reporting an incorrect security finding can often undermine the valid message of the rest of a security report. Care should be taken to verify that every possible section of application logic has been tested, and that every use case scenario was explored for possible vulnerabilities. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Use Source Code When Available'''&amp;lt;br&amp;gt;&lt;br /&gt;
While black box penetration test results can be impressive and useful to demonstrate how vulnerabilities are exposed in production, they are not the most effective way to secure an application. If the source code for the application is available, it should be given to the security staff to assist them while performing their review. It is possible to discover vulnerabilities within the application source that would be missed during a black box engagement. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Develop Metrics'''&amp;lt;br&amp;gt;&lt;br /&gt;
An important part of a good security program is the ability to determine if things are getting better. It is important to track the results of testing engagements, and develop metrics that will reveal the application security trends within the organization. These metrics can show if more education and training are required, if there is a particular security mechanism that is not clearly understood by development, and if the total number of security related problems being found each month is going down. Consistent metrics that can be generated in an automated way from available source code will also help the organization in assessing the effectiveness of mechanisms introduced to reduce security bugs in software development. Metrics are not easily developed, so using standard metrics like those provided by the OWASP Metrics project and other organizations might be a good head start.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Document the Test Results'''&amp;lt;br&amp;gt;&lt;br /&gt;
To conclude the testing process, it is important to produce a formal record of what testing actions were taken, by whom, when they were performed, and details of the test findings. It is wise to agree on an acceptable format for the report which is useful to all concerned parties, which may include developers, project management, business owners, IT department, audit, and compliance. The report must be clear to the business owner in identifying where material risks exist and sufficient to get their backing for subsequent mitigation actions. The report must be clear to the developer in pin-pointing the exact function that is affected by the vulnerability, with associated recommendations for resolution in a language that the developer will understand (no pun intended). Last but not least, the report writing should not be overly burdensome on the security tester themselves; security testers are not generally renowned for their creative writing skills, therefore agreeing on a complex report can lead to instances where test results do not get properly documented.&lt;br /&gt;
&lt;br /&gt;
==Testing Techniques Explained==&lt;br /&gt;
&lt;br /&gt;
This section presents a high-level overview of various testing techniques that can be employed when building a testing program. It does not present specific methodologies for these techniques, although Chapter 3 will address this information. This section is included to provide context for the framework presented in the next chapter and to highlight the advantages and disadvantages of some of the techniques that should be considered. In particular, we will cover:&lt;br /&gt;
* Manual Inspections &amp;amp; Reviews &lt;br /&gt;
* Threat Modeling &lt;br /&gt;
* Code Review &lt;br /&gt;
* Penetration Testing &lt;br /&gt;
&lt;br /&gt;
=== Manual Inspections &amp;amp; Reviews ===&lt;br /&gt;
'''Overview'''&amp;lt;br&amp;gt;&lt;br /&gt;
Manual inspections are human-driven reviews that typically test the security implications of the people, policies, and processes, but can include inspection of technology decisions such as architectural designs. They are usually conducted by analyzing documentation or performing interviews with the designers or system owners. While the concept of manual inspections and human reviews is simple, they can be among the most powerful and effective techniques available. By asking someone how something works and why it was implemented in a specific way, it allows the tester to quickly determine if any security concerns are likely to be evident. Manual inspections and reviews are one of the few ways to test the software development life-cycle process itself and to ensure that there is an adequate policy or skill set in place. As with many things in life, when conducting manual inspections and reviews we suggest you adopt a trust-but-verify model. Not everything everyone tells you or shows you will be accurate. Manual reviews are particularly good for testing whether people understand the security process, have been made aware of policy, and have the appropriate skills to design or implement a secure application. Other activities, including manually reviewing the documentation, secure coding policies, security requirements, and architectural designs, should all be accomplished using manual inspections.&lt;br /&gt;
&lt;br /&gt;
'''Advantages:'''&lt;br /&gt;
* Requires no supporting technology &lt;br /&gt;
* Can be applied to a variety of situations&lt;br /&gt;
* Flexible &lt;br /&gt;
* Promotes teamwork &lt;br /&gt;
* Early in the SDLC &lt;br /&gt;
&lt;br /&gt;
'''Disadvantages:'''&lt;br /&gt;
* Can be time consuming &lt;br /&gt;
* Supporting material not always available &lt;br /&gt;
* Requires significant human thought and skill to be effective!&lt;br /&gt;
&lt;br /&gt;
=== Threat Modeling ===&lt;br /&gt;
'''Overview'''&amp;lt;br&amp;gt;&lt;br /&gt;
Threat modeling has become a popular technique to help system designers think about the security threats that their systems/applications might face. Therefore, threat modeling can be seen as risk assessment for applications. In fact, it enables the designer to develop mitigation strategies for potential vulnerabilities and helps them focus their inevitably limited resources and attention on the parts of the system that most require it. It is recommended that all applications have a threat model developed and documented. Threat models should be created as early as possible in the SDLC, and should be revisited as the application evolves and development progresses. To develop a threat model, we recommend taking a simple approach that follows the NIST 800-30 [11] standard for risk assessment. This approach involves: &lt;br /&gt;
* Decomposing the application – understand, through a process of manual inspection, how the application works, its assets, functionality, and connectivity. &lt;br /&gt;
* Defining and classifying the assets – classify the assets into tangible and intangible assets and rank them according to business importance. &lt;br /&gt;
* Exploring potential vulnerabilities - whether technical, operational, or management. &lt;br /&gt;
* Exploring potential threats – develop a realistic view of potential attack vectors from an attacker’s perspective, by using threat scenarios or attack trees.&lt;br /&gt;
* Creating mitigation strategies – develop mitigating controls for each of the threats deemed to be realistic. The output from a threat model itself can vary but is typically a collection of lists and diagrams. The OWASP Code Review Guide outlines an Application Threat Modeling methodology that can be used as a reference for the testing applications for potential security flaws in the design of the application. There is no right or wrong way to develop threat models and perform information risk assessments on applications. [12]. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages:'''&lt;br /&gt;
* Practical attacker's view of the system &lt;br /&gt;
* Flexible &lt;br /&gt;
* Early in the SDLC &lt;br /&gt;
&lt;br /&gt;
'''Disadvantages: &amp;lt;br&amp;gt;'''&lt;br /&gt;
* Relatively new technique &lt;br /&gt;
* Good threat models don’t automatically mean good software&lt;br /&gt;
&lt;br /&gt;
=== Source Code Review ===&lt;br /&gt;
'''Overview'''&amp;lt;br&amp;gt;&lt;br /&gt;
Source code review is the process of manually checking a web application's source code for security issues. Many serious security vulnerabilities cannot be detected with any other form of analysis or testing. As the popular saying goes “if you want to know what’s really going on, go straight to the source.&amp;quot; Almost all security experts agree that there is no substitute for actually looking at the code. All the information for identifying security problems is there in the code somewhere. Unlike testing third party closed software such as operating systems, when testing web applications (especially if they have been developed in-house) the source code should be made available for testing purposes. Many unintentional but significant security problems are also extremely difficult to discover with other forms of analysis or testing, such as penetration testing, making source code analysis the technique of choice for technical testing. With the source code, a tester can accurately determine what is happening (or is supposed to be happening) and remove the guess work of black box testing. Examples of issues that are particularly conducive to being found through source code reviews include concurrency problems, flawed business logic, access control problems, and cryptographic weaknesses as well as backdoors, Trojans, Easter eggs, time bombs, logic bombs, and other forms of malicious code. These issues often manifest themselves as the most harmful vulnerabilities in web sites. Source code analysis can also be extremely efficient to find implementation issues such as places where input validation was not performed or when fail open control procedures may be present. But keep in mind that operational procedures need to be reviewed as well, since the source code being deployed might not be the same as the one being analyzed herein [13].&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages:'''&lt;br /&gt;
* Completeness and effectiveness &lt;br /&gt;
* Accuracy &lt;br /&gt;
* Fast (for competent reviewers) &lt;br /&gt;
&lt;br /&gt;
'''Disadvantages:'''&lt;br /&gt;
* Requires highly skilled security developers &lt;br /&gt;
* Can miss issues in compiled libraries &lt;br /&gt;
* Cannot detect run-time errors easily &lt;br /&gt;
* The source code actually deployed might differ from the one being analyzed&lt;br /&gt;
&lt;br /&gt;
'''For more on code review, checkout the [[OWASP Code Review Project|OWASP code review project]]'''.&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Penetration Testing ===&lt;br /&gt;
'''Overview'''&amp;lt;br&amp;gt;&lt;br /&gt;
Penetration testing has been a common technique used to test network security for many years. It is also commonly known as black box testing or ethical hacking. Penetration testing is essentially the “art” of testing a running application remotely, without knowing the inner workings of the application itself, to find security vulnerabilities. Typically, the penetration test team would have access to an application as if they were users. The tester acts like an attacker and attempts to find and exploit vulnerabilities. In many cases the tester will be given a valid account on the system. While penetration testing has proven to be effective in network security, the technique does not naturally translate to applications. When penetration testing is performed on networks and operating systems, the majority of the work is involved in finding and then exploiting known vulnerabilities in specific technologies. As web applications are almost exclusively bespoke, penetration testing in the web application arena is more akin to pure research. Penetration testing tools have been developed that automate the process, but, again, with the nature of web applications their effectiveness is usually poor. Many people today use web application penetration testing as their primary security testing technique. Whilst it certainly has its place in a testing program, we do not believe it should be considered as the primary or only testing technique. Gary McGraw in [14] summed up penetration testing well when he said, “If you fail a penetration test you know you have a very bad problem indeed. If you pass a penetration test you do not know that you don’t have a very bad problem”. However, focused penetration testing (i.e., testing that attempts to exploit known vulnerabilities detected in previous reviews) can be useful in detecting if some specific vulnerabilities are actually fixed in the source code deployed on the web site. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Advantages:'''&lt;br /&gt;
* Can be fast (and therefore cheap) &lt;br /&gt;
* Requires a relatively lower skill-set than source code review &lt;br /&gt;
* Tests the code that is actually being exposed &lt;br /&gt;
&lt;br /&gt;
'''Disadvantages:'''&lt;br /&gt;
* Too late in the SDLC &lt;br /&gt;
* Front impact testing only!&lt;br /&gt;
&lt;br /&gt;
=== The Need for a Balanced Approach ===&lt;br /&gt;
With so many techniques and so many approaches to testing the security of web applications, it can be difficult to understand which techniques to use and when to use them.&lt;br /&gt;
Experience shows that there is no right or wrong answer to exactly what techniques should be used to build a testing framework. The fact remains that all techniques should probably be used to ensure that all areas that need to be tested are tested. What is clear, however, is that there is no single technique that effectively covers all security testing that must be performed to ensure that all issues have been addressed. Many companies adopt one approach, which has historically been penetration testing. Penetration testing, while useful, cannot effectively address many of the issues that need to be tested, and is simply “too little too late” in the software development life cycle (SDLC). &lt;br /&gt;
The correct approach is a balanced one that includes several techniques, from manual reviews to technical testing. The balanced approach is sure to cover testing in all phases of the SDLC. This approach leverages the most appropriate techniques available depending on the current SDLC phase. &lt;br /&gt;
Of course there are times and circumstances where only one technique is possible; for example, a test on a web application that has already been created, and where the testing party does not have access to the source code. In this case, penetration testing is clearly better than no testing at all. However, we encourage the testing parties to challenge assumptions, such as no access to source code, and to explore the possibility of more complete testing. &lt;br /&gt;
A balanced approach varies depending on many factors, such as the maturity of the testing process and corporate culture. However, it is recommended that a balanced testing framework look something like the representations shown in Figure 3 and Figure 4. The following figure shows a typical proportional representation overlaid onto the software development life cycle. In keeping with research and experience, it is essential that companies place a higher emphasis on the early stages of development.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Image:ProportionSDLC.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;''Figure 3: Proportion of Test Effort in SDLC''&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
The following figure shows a typical proportional representation overlaid onto testing techniques. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Image:ProportionTest.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;''Figure 4: Proportion of Test Effort According to Test Technique''&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''A Note about Web Application Scanners'''&amp;lt;br&amp;gt;&lt;br /&gt;
Many organizations have started to use automated web application scanners. While they undoubtedly have a place in a testing program, we want to highlight some fundamental issues about why we do not believe that automating black box testing is (or will ever be) effective. By highlighting these issues, we are not discouraging web application scanner use. Rather, we are saying that their limitations should be understood, and testing frameworks should be planned appropriately.&lt;br /&gt;
NB: OWASP is currently working to develop a web application scanner-benchmarking platform. The following examples indicate why automated black box testing is not effective. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Example 1: Magic Parameters'''&amp;lt;br&amp;gt;&lt;br /&gt;
Imagine a simple web application that accepts a name-value pair of “magic” and then the value. For simplicity, the GET request may be: ''&amp;lt;nowiki&amp;gt;http://www.host/application?magic=value&amp;lt;/nowiki&amp;gt;'' &amp;lt;br&amp;gt; To further simplify the example, the values in this case can only be ASCII characters a – z (upper or lowercase) and integers 0 – 9. The designers of this application created an administrative backdoor during testing, but obfuscated it to prevent the casual observer from discovering it. By submitting the value sf8g7sfjdsurtsdieerwqredsgnfg8d (30 characters), the user will then be logged in and presented with an administrative screen with total control of the application. The HTTP request is now:&amp;lt;br&amp;gt; ''&amp;lt;nowiki&amp;gt;http://www.host/application?magic= sf8g7sfjdsurtsdieerwqredsgnfg8d &amp;lt;/nowiki&amp;gt;'' &amp;lt;br&amp;gt;&lt;br /&gt;
Given that all of the other parameters were simple two- and three-characters fields, it is not possible to start guessing combinations at approximately 28 characters. A web application scanner will need to brute force (or guess) the entire key space of 30 characters. That is up to 30^28 permutations, or trillions of HTTP requests! That is an electron in a digital haystack! &lt;br /&gt;
The code for this exemplar Magic Parameter check may look like the following: &amp;lt;br&amp;gt;&lt;br /&gt;
 public void doPost( HttpServletRequest request, HttpServletResponse response) &lt;br /&gt;
 { &lt;br /&gt;
 String magic = “sf8g7sfjdsurtsdieerwqredsgnfg8d”; &lt;br /&gt;
 boolean admin = magic.equals( request.getParameter(“magic”));&lt;br /&gt;
 if (admin) doAdmin( request, response); &lt;br /&gt;
 else …. // normal processing &lt;br /&gt;
 } &lt;br /&gt;
By looking in the code, the vulnerability practically leaps off the page as a potential problem. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Example 2: Bad Cryptography'''&amp;lt;br&amp;gt;&lt;br /&gt;
Cryptography is widely used in web applications. Imagine that a developer decided to write a simple cryptography algorithm to sign a user in from site A to site B automatically. In his/her wisdom, the developer decides that if a user is logged into site A, then he/she will generate a key using an MD5 hash function that comprises: ''Hash { username : date }'' &amp;lt;br&amp;gt;&lt;br /&gt;
When a user is passed to site B, he/she will send the key on the query string to site B in an HTTP re-direct. Site B independently computes the hash, and compares it to the hash passed on the request. If they match, site B signs the user in as the user they claim to be. Clearly, as we explain the scheme, the inadequacies can be worked out, and it can be seen how anyone that figures it out (or is told how it works, or downloads the information from Bugtraq) can login as any user. Manual inspection, such as a review, would have uncovered this security issue quickly, as would inspection of the code. A black-box web application scanner would have seen a 128-bit hash that changed with each user, and by the nature of hash functions, did not change in any predictable way.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''A Note about Static Source Code Review Tools'''&amp;lt;br&amp;gt;&lt;br /&gt;
Many organizations have started to use static source code scanners. While they undoubtedly have a place in a comprehensive testing program, we want to highlight some fundamental issues about why we do not believe this approach is effective when used alone. Static source code analysis alone cannot identify issues due to flaws in the design since it cannot understand the context in which the code is constructed. Source code analysis tools are useful in determining security issues due to coding errors, however significant manual effort is required to validate the findings. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Security Requirements Test Derivation ===&lt;br /&gt;
If you want to have a successful testing program, you need to know what the objectives of the testing are. These objectives are specified by security requirements. This section discusses in detail how to document requirements for security testing by deriving them from applicable standards and regulations and positive and negative application requirements. It also discusses how security requirements effectively drive security testing during the SDLC and how security test data can be used to effectively manage software security risks.&lt;br /&gt;
&lt;br /&gt;
'''Testing Objectives'''&amp;lt;br&amp;gt;&lt;br /&gt;
One of the objectives of security testing is to validate that security controls function as expected. This is documented via ''security requirements'' that describe the functionality of the security control. At a high level, this means proving confidentiality, integrity, and availability of the data as well as the service.  The other objective is to validate that security controls are implemented with few or no vulnerabilities. These are common vulnerabilities, such as the [[OWASP Top Ten]], as well as vulnerabilities that are previously identified with security assessments during the SDLC, such as threat modeling, source code analysis, and penetration test. &lt;br /&gt;
&lt;br /&gt;
'''Security Requirements Documentation'''&amp;lt;br&amp;gt;&lt;br /&gt;
The first step in the documentation of security requirements is to understand the ''business requirements''. A business requirement document could provide the initial, high-level information of the expected functionality for the application. For example, the main purpose of an application may be to provide financial services to customers or shopping and purchasing goods from an on-line catalogue. A security section of the business requirements should highlight the need to protect the customer data as well as to comply with applicable security documentation such as regulations, standards, and policies.&lt;br /&gt;
&lt;br /&gt;
A general checklist of the applicable regulations, standards, and policies serves well the purpose of a preliminary security compliance analysis for web applications. For example, compliance regulations can be identified by checking information about the business sector and the country/state where the application needs to function/operate. Some of these compliance guidelines and regulations might translate in specific technical requirements for security controls. For example, in the case of financial applications, the compliance with FFIEC guidelines for authentication [15] requires that financial institutions implement applications that mitigate weak authentication risks with multi-layered security control and multi factor authentication. &lt;br /&gt;
&lt;br /&gt;
Applicable industry standards for security need also to be captured by the general security requirement checklist. For example, in the case of applications that handle customer credit card data, the compliance with the PCI DSS [16] standard forbids the storage of PINs and CVV2 data and requires that the merchant protect magnetic strip data in storage and transmission with encryption and on display by masking. Such PCI DSS security requirements could be validated via source code analysis.&lt;br /&gt;
&lt;br /&gt;
Another section of the checklist needs to enforce general requirements for compliance with the organization information security standards and policies. From the functional requirements perspective, requirements for the security control need to map to a specific section of the information security standards. An example of such requirement can be: &amp;quot;a password complexity of six alphanumeric characters must be enforced by the authentication controls used by the application.&amp;quot; When security requirements map to compliance rules a security test can validate the exposure of compliance risks. If violation with information security standards and policies are found, these will result in a risk that can be documented and that the business has to deal with (i.e., manage). For this reason, since these security compliance requirements are enforceable, they need to be well documented and validated with security tests. &lt;br /&gt;
&lt;br /&gt;
'''Security Requirements Validation'''&amp;lt;br&amp;gt;&lt;br /&gt;
From the functionality perspective, the validation of security requirements is the main objective of security testing, while, from the risk management perspective, this is the objective of information security assessments. At a high level, the main goal of information security assessments is the identification of gaps in security controls, such as lack of basic authentication, authorization, or encryption controls. More in depth, the security assessment objective is risk analysis, such as the identification of potential weaknesses in security controls that ensure the confidentiality, integrity, and availability of the data. For example, when the application deals with personal identifiable information (PII) and sensitive data, the security requirement to be validated is the compliance with the company information security policy requiring encryption of such data in transit and in storage. Assuming encryption is used to protect the data, encryption algorithms and key lengths need to comply with the organization encryption standards. These might require that only certain algorithms and key lengths could be used. For example, a security requirement that can be security tested is verifying that only allowed ciphers are used (e.g., SHA-1, RSA, 3DES) with allowed minimum key lengths (e.g., more than 128 bit for symmetric and more than 1024 for asymmetric encryption).&lt;br /&gt;
&lt;br /&gt;
From the security assessment perspective, security requirements can be validated at different phases of the SDLC by using different artifacts and testing methodologies. For example, threat modeling focuses on identifying security flaws during design, secure code analysis and reviews focus on identifying security issues in source code during development, and penetration testing focuses on identifying vulnerabilities in the application during testing/validation. &lt;br /&gt;
&lt;br /&gt;
Security issues that are identified early in the SDLC can be documented in a test plan so they can be validated later with security tests. By combining the results of different testing techniques, it is possible to derive better security test cases and increase the level of assurance of the security requirements. For example, distinguishing true vulnerabilities from the un-exploitable ones is possible when the results of penetration tests and source code analysis are combined.  Considering the security test for a SQL injection vulnerability, for example, a black box test might involve first a scan of the application to fingerprint the vulnerability. The first evidence of a potential SQL injection vulnerability that can be validated is the generation of a SQL exception. A further validation of the SQL vulnerability might involve manually injecting attack vectors to modify the grammar of the SQL query for an information disclosure exploit. This might involve a lot of trial-and-error analysis till the malicious query is executed. Assuming the tester has the source code, she might learn from the source code analysis on how to construct the SQL attack vector that can exploit the vulnerability (e.g., execute a malicious query returning confidential data to unauthorized user).&lt;br /&gt;
&lt;br /&gt;
'''Threats and Countermeasures Taxonomies'''&amp;lt;br&amp;gt;&lt;br /&gt;
A ''threat and countermeasure classification'' that takes into consideration root causes of vulnerabilities is the critical factor to verify that security controls are designed, coded, and built so that the impact due to the exposure of such vulnerabilities is mitigated. In the case of web applications, the exposure of security controls to common vulnerabilities, such as the OWASP Top Ten, can be a good starting point to derive general security requirements. More specifically, the web application security frame [17] provides a classification (e.g. taxonomy) of vulnerabilities that can be documented in different guidelines and standards and validated with security tests. &lt;br /&gt;
&lt;br /&gt;
The focus of a threat and countermeasure categorization is to define security requirements in terms of the threats and the root cause of the vulnerability. A threat can be categorized by using STRIDE [18], for example, as Spoofing, Tampering, Repudiation, Information disclosure, Denial of service, and Elevation of privilege. The root cause can be categorized as security flaw in design, a security bug in coding, or an issue due to insecure configuration. For example, the root cause of weak authentication vulnerability might be the lack of mutual authentication when data crosses a trust boundary between the client and server tiers of the application. A security requirement that captures the threat of non-repudiation during an architecture design review allows for the documentation of the requirement for the countermeasure (e.g., mutual authentication) that can be validated later on with security tests.&lt;br /&gt;
&lt;br /&gt;
A threat and countermeasure categorization for vulnerabilities can also be used to document security requirements for secure coding such as secure coding standards. An example of a common coding error in authentication controls consists of applying an hash function to encrypt a password, without applying a seed to the value. From the secure coding perspective, this is a vulnerability that affects the encryption used for authentication with a vulnerability root cause in a coding error. Since the root cause is insecure coding the security requirement can be documented in secure coding standards and validated through secure code reviews during the development phase of the SDLC.&lt;br /&gt;
&lt;br /&gt;
'''Security Testing and Risk Analysis'''&amp;lt;br&amp;gt;&lt;br /&gt;
Security requirements need to take into consideration the severity of the vulnerabilities to support a ''risk mitigation strategy''. Assuming that the organization maintains a repository of vulnerabilities found in applications, i.e., a vulnerability knowledge base, the security issues can be reported by type, issue, mitigation, root cause, and mapped to the applications where they are found.  Such a vulnerability knowledge base can also be used to establish a metrics to analyze the effectiveness of the security tests throughout the SDLC.&lt;br /&gt;
 &lt;br /&gt;
For example, consider an input validation issue, such as a SQL injection, which was identified via source code analysis and reported with a coding error root cause and input validation vulnerability type. The exposure of such vulnerability can be assessed via a penetration test, by probing input fields with several SQL injection attack vectors. This test might validate that special characters are filtered before hitting the database and mitigate the vulnerability. By combining the results of source code analysis and penetration testing it is possible to determine the likelihood and exposure of the vulnerability and calculate the risk rating of the vulnerability. By reporting vulnerability risk ratings in the findings (e.g., test report) it is possible to decide on the mitigation strategy. For example, high and medium risk vulnerabilities can be prioritized for remediation, while low risk can be fixed in further releases.&lt;br /&gt;
&lt;br /&gt;
By considering the threat scenarios exploiting common vulnerabilities it is possible to identify potential risks for which the application security control needs to be security tested. For example, the OWASP Top Ten vulnerabilities can be mapped to attacks such as phishing, privacy violations, identify theft, system compromise, data alteration or data destruction, financial loss, and reputation loss. Such issues should be documented as part of the threat scenarios. By thinking in terms of threats and vulnerabilities, it is possible to devise a battery of tests that simulate such attack scenarios. Ideally, the organization vulnerability knowledge base can be used to derive security risk driven tests cases to validate the most likely attack scenarios. For example if identity theft is considered high risk, negative test scenarios should validate the mitigation of impacts deriving from the exploit of vulnerabilities in authentication, cryptographic controls, input validation, and authorization controls.&lt;br /&gt;
&lt;br /&gt;
=== Functional and Non Functional Test Requirements ===&lt;br /&gt;
'''Functional Security Requirements'''&amp;lt;br&amp;gt;&lt;br /&gt;
From the perspective of functional security requirements, the applicable standards, policies and regulations drive both the need of a type of security control as well as the control functionality. These requirements are also referred to as “positive requirements”, since they state the expected functionality that can be validated through security tests.&lt;br /&gt;
Examples of positive requirements are: “the application will lockout the user after six failed logon attempts” or “passwords need to be six min characters, alphanumeric”. The validation of positive requirements consists of asserting the expected functionality and, as such, can be tested by re-creating the testing conditions, and by running the test according to predefined inputs and by asserting the expected outcome as a fail/pass condition.&lt;br /&gt;
&lt;br /&gt;
In order to validate security requirements with security tests, security requirements need to be function driven and highlight the expected functionality (the what) and implicitly the implementation (the how). Examples of high-level security design requirements for authentication can be:&lt;br /&gt;
*Protect user credentials and shared secrets in transit and in storage&lt;br /&gt;
*Mask any confidential data in display (e.g., passwords, accounts)&lt;br /&gt;
*Lock the user account after a certain number of failed login attempts &lt;br /&gt;
*Do not show specific validation errors to the user as a result of failed logon &lt;br /&gt;
*Only allow passwords that are alphanumeric, include special characters and six characters minimum length, to limit the attack surface&lt;br /&gt;
*Allow for password change functionality only to authenticated users by validating the old password, the new password, and the user answer to the challenge question, to prevent brute forcing of a password via password change.&lt;br /&gt;
*The password reset form should validate the user’s username and the user’s registered email before sending the temporary password to the user via email. The temporary password issued should be a one time password. A link to the password reset web page will be sent to the user. The password reset web page should validate the user temporary password, the new password, as well as the user answer to the challenge question.&lt;br /&gt;
&lt;br /&gt;
'''Risk Driven Security Requirements'''&amp;lt;br&amp;gt;&lt;br /&gt;
Security tests need also to be risk driven, that is they need to validate the application for unexpected behavior. These are also called “negative requirements”, since they specify what the application should not do. &lt;br /&gt;
Examples of &amp;quot;should not do&amp;quot; (negative) requirements are:&lt;br /&gt;
* The application should not allow for the data to be altered or destroyed&lt;br /&gt;
* The application should not be compromised or misused for unauthorized financial transactions by a malicious user.&lt;br /&gt;
&lt;br /&gt;
Negative requirements are more difficult to test, because there is no expected behavior to look for. This might require a threat analyst to come up with unforeseeable input conditions, causes, and effects. This is where security testing needs to be driven by risk analysis and threat modeling.&lt;br /&gt;
The key is to document the threat scenarios and the functionality of the countermeasure as a factor to mitigate a threat. For example, in the case of authentication controls, the following security requirements can be documented from the threats and countermeasure perspective:&lt;br /&gt;
*Encrypt authentication data in storage and transit to mitigate risk of information disclosure and authentication protocol attacks&lt;br /&gt;
*Encrypt passwords using non reversible encryption such as using a digest (e.g., HASH) and a seed to prevent dictionary attacks&lt;br /&gt;
*Lock out accounts after reaching a logon failure threshold and enforce password complexity to mitigate risk of brute force password attacks&lt;br /&gt;
*Display generic error messages upon validation of credentials to mitigate risk of account harvesting/enumeration&lt;br /&gt;
*Mutually authenticate client and server to prevent non-repudiation and Man In the Middle (MiTM) attacks&lt;br /&gt;
&lt;br /&gt;
Threat modeling artifacts such as threat trees and attack libraries can be useful to derive the negative test scenarios. A threat tree will assume a root attack (e.g., attacker might be able to read other users' messages) and identify different exploits of security controls (e.g., data validation fails because of a SQL injection vulnerability) and necessary countermeasures (e.g., implement data validation and parametrized queries) that could be validated to be effective in mitigating such attacks.&lt;br /&gt;
&lt;br /&gt;
===Security Requirements Derivation Through Use and Misuse Cases===&lt;br /&gt;
Pre-requisite in describing the application functionality is to understand what the application is supposed to do and how. This can be done by describing ''use cases''. Use cases, in the graphical form as commonly used in software engineering, show the interactions of actors and their relations, and help to identify the actors in the application, their relationships, the intended sequence of actions for each scenario, alternative actions, special requirements, and pre- and post-conditions. Similar to use cases, ''misuse and abuse cases'' [19] describe unintended and malicious use scenarios of the application. These misuse cases provide a way to describe scenarios of how an attacker could misuse and abuse the application. By going through the individual steps in a use scenario and thinking about how it can be maliciously exploited, potential flaws or aspects of the application that are not well-defined can be discovered. The key is to describe all possible or, at least, the most critical use and misuse scenarios. Misuse scenarios allow the analysis of the application from the attacker's point of view and contribute to identifying potential vulnerabilities and the countermeasures that need to be implemented to mitigate the impact caused by the potential exposure to such vulnerabilities. Given all of the use and abuse cases, it is important to analyze them to determine which of them are the most critical ones and need to be documented in security requirements. The identification of the most critical misuse and abuse cases drives the documentation of security requirements and the necessary controls where security risks should be mitigated.&lt;br /&gt;
&lt;br /&gt;
To derive security requirements from use and misuse case [20] , it is important to define the functional scenarios and the negative scenarios, and put these in graphical form. In the case of derivation of security requirements for authentication, for example, the following step-by-step methodology can be followed.&lt;br /&gt;
&lt;br /&gt;
*Step 1: Describe the Functional Scenario: User authenticates by supplying username and password. The application grants access to users based upon authentication of user credentials by the application and provides specific errors to the user when validation fails.&lt;br /&gt;
&lt;br /&gt;
*Step 2: Describe the Negative Scenario:  Attacker breaks the authentication through a brute force/dictionary attack of passwords and account harvesting vulnerabilities in the application. The validation errors provide specific information to an attacker to guess which accounts are actually valid, registered accounts (usernames). The attacker, then, will try to brute force the password for such a valid account. A brute force attack to four minimum length all digit passwords can succeed with a limited number of attempts (i.e., 10^4).&lt;br /&gt;
&lt;br /&gt;
*Step 3: Describe Functional and Negative Scenarios With Use and Misuse Case: The graphical example in Figure below depicts the derivation of security requirements via use and misuse cases. The functional scenario consists of the user actions (entering username and password) and the application actions (authenticating the user and providing an error message if validation fails). The misuse case consists of the attacker actions, i.e., trying to break authentication by brute forcing the password via a dictionary attack and by guessing the valid usernames from error messages. By graphically representing the threats to the user actions (misuses), it is possible to derive the countermeasures as the application actions that mitigate such threats.&lt;br /&gt;
[[Image:UseAndMisuseCase.jpg|640px]]&lt;br /&gt;
&lt;br /&gt;
*Step 4: Elicit The Security Requirements. In this case, the following security requirements for authentication are derived: &lt;br /&gt;
:1) Passwords need to be alphanumeric, lower and upper case and minimum of seven character length&lt;br /&gt;
:2) Accounts need to lockout after five unsuccessful login attempt&lt;br /&gt;
:3) Logon error messages need to be generic&lt;br /&gt;
These security requirements need to be documented and tested.&lt;br /&gt;
&lt;br /&gt;
===Security Tests Integrated in Developers' and Testers' Workflows===&lt;br /&gt;
'''Developers' Security Testing Workflow'''&amp;lt;br&amp;gt;&lt;br /&gt;
Security testing during the development phase of the SDLC represents the first opportunity for developers to ensure that individual software components that they have developed are security tested before they are integrated with other components and built into the application. Software components might consist of software artifacts such as functions, methods, and classes, as well as application programming interfaces, libraries, and executables. For security testing, developers can rely on the results of the source code analysis to verify statically that the developed source code does not include potential vulnerabilities and is compliant with the secure coding standards. Security unit tests can further verify dynamically (i.e., at run time) that the components function as expected.  Before integrating both new and existing code changes in the application build, the results of the static and dynamic analysis should be reviewed and validated. &lt;br /&gt;
The validation of source code before integration in application builds is usually the responsibility of the senior developer. Such senior developer is also the subject matter expert in software security and his role is to lead the secure code review and make decisions whether to accept the code to be released in the application build or to require further changes and testing. This secure code review workflow can be enforced via formal acceptance as well as a check in a workflow management tool. For example, assuming the typical defect management workflow used for functional bugs, security bugs that have been fixed by a developer can be reported on a defect or change management system. The build master can look at the test results reported by the developers in the tool and grant approvals for checking in the code changes into the application build.&lt;br /&gt;
&lt;br /&gt;
'''Testers' Security Testing Workflow'''&amp;lt;br&amp;gt;&lt;br /&gt;
After components and code changes are tested by developers and checked in to the application build, the most likely next step in the software development process workflow is to perform tests on the application as a whole entity. This level of testing is usually referred to as integrated test and system level test. When security tests are part of these testing activities, they can be used to validate both the security functionality of the application as a whole, as well as the exposure to application level vulnerabilities. These security tests on the application include both white box testing, such as source code analysis, and black box testing, such as penetration testing. Gray box testing is similar to Black box testing. In a gray box testing we can assume we have some partial knowledge about the session management of our application, and that should help us in understanding whether the logout and timeout functions are properly secured.&lt;br /&gt;
&lt;br /&gt;
The target for the security tests is the complete system that is the artifact that will be potentially attacked and includes both whole source code and the executable. One peculiarity of security testing during this phase is that it is possible for security testers to determine whether vulnerabilities can be exploited and expose the application to real risks. &lt;br /&gt;
These include common web application vulnerabilities, as well as security issues that have been identified earlier in the SDLC with other activities such as threat modeling, source code analysis, and secure code reviews. &lt;br /&gt;
&lt;br /&gt;
Usually, testing engineers, rather then software developers, perform security tests when the application is in scope for integration system tests. Such testing engineers have security knowledge of web application vulnerabilities, black box and white box security testing techniques, and own the validation of security requirements in this phase. In order to perform such security tests, it is a pre-requisite that security test cases are documented in the security testing guidelines and procedures.&lt;br /&gt;
&lt;br /&gt;
A testing engineer who validates the security of the application in the integrated system environment might release the application for testing in the operational environment (e.g., user acceptance tests). At this stage of the SDLC (i.e., validation), the application functional testing is usually a responsibility of QA testers, while white-hat hackers/security consultants are usually responsible for security testing. Some organizations rely on their own specialized ethical hacking team in order to conduct such tests when a third party assessment is not required (such as for auditing purposes). &lt;br /&gt;
&lt;br /&gt;
Since these tests are the last resort for fixing vulnerabilities before the application is released to production, it is important that such issues are addressed as recommended by the testing team (e.g., the recommendations can include code, design, or configuration change). At this level, security auditors and information security officers discuss the reported security issues and analyze the potential risks according to information risk management procedures. Such procedures might require the developer team to fix all high risk vulnerabilities before the application could be deployed, unless such risks are acknowledged and accepted.&lt;br /&gt;
&lt;br /&gt;
===Developers' Security Tests===&lt;br /&gt;
'''Security Testing in the Coding Phase: Unit Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
From the developer’s perspective, the main objective of security tests is to validate that code is being developed in compliance with secure coding standards requirements. Developers' own coding artifacts such as functions, methods, classes, APIs, and libraries need to be functionally validated before being integrated into the application build. &lt;br /&gt;
&lt;br /&gt;
The security requirements that developers have to follow should be documented in secure coding standards and validated with static and dynamic analysis. As testing activity following a secure code review, unit tests can validate that code changes required by secure code reviews are properly implemented. Secure code reviews and source code analysis through source code analysis tools help developers in identifying security issues in source code as it is developed. By using unit tests and dynamic analysis (e.g., debugging) developers can validate the security functionality of components as well as verify that the countermeasures being developed mitigate any security risks previously identified through threat modeling and source code analysis.  &lt;br /&gt;
&lt;br /&gt;
A good practice for developers is to build security test cases as a generic security test suite that is part of the existing unit testing framework. A generic security test suite could be derived from previously defined use and misuse cases to security test functions, methods and classes. A generic security test suite might include security test cases to validate both positive and negative requirements for security controls such as:&lt;br /&gt;
* Authentication &amp;amp; Access Control&lt;br /&gt;
* Input Validation &amp;amp; Encoding&lt;br /&gt;
* Encryption&lt;br /&gt;
* User and Session Management&lt;br /&gt;
* Error and Exception Handling&lt;br /&gt;
* Auditing and Logging&lt;br /&gt;
&lt;br /&gt;
Developers empowered with a source code analysis tool integrated into their IDE, secure coding standards, and a security unit testing framework can assess and verify the security of the software components being developed. Security test cases can be run to identify potential security issues that have root causes in source code: besides input and output validation of parameters entering and exiting the components, these issues include authentication and authorization checks done by the component, protection of the data within the component, secure exception and error handling, and secure auditing and logging. Unit test frameworks such as Junit, Nunit, and CUnit can be adapted to verify security test requirements. In the case of security functional tests, unit level tests can test the functionality of security controls at the software component level, such as functions, methods, or classes. For example, a test case could validate input and output validation (e.g., variable sanitization) and boundary checks for variables by asserting the expected functionality of the component.&lt;br /&gt;
&lt;br /&gt;
The threat scenarios identified with use and misuse cases can be used to document the procedures for testing software components. In the case of authentication components, for example, security unit tests can assert the functionality of setting an account lockout as well as the fact that user input parameters cannot be abused to bypass the account lockout (e.g., by setting the account lockout counter to a negative number). At the component level, security unit tests can validate positive assertions as well as negative assertions, such as errors and exception handling. Exceptions should be caught without leaving the system in an insecure state, such as potential denial of service caused by resources not being deallocated (e.g., connection handles not closed within a final statement block), as well as potential elevation of privileges (e.g., higher privileges acquired before the exception is thrown and not re-set to the previous level before exiting the function). Secure error handling can validate potential information disclosure via informative error messages and stack traces. &lt;br /&gt;
&lt;br /&gt;
Unit level security test cases can be developed by a security engineer who is the subject matter expert in software security and is also responsible for validating that the security issues in the source code have been fixed and can be checked into the integrated system build.  Typically, the manager of the application builds also makes sure that third-party libraries and executable files are security assessed for potential vulnerabilities before being integrated in the application build.&lt;br /&gt;
&lt;br /&gt;
Threat scenarios for common vulnerabilities that have root causes in insecure coding can also be documented in the developer’s security testing guide. When a fix is implemented for a coding defect identified with source code analysis, for example, security test cases can verify that the implementation of the code change follows the secure coding requirements documented in the secure coding standards. &lt;br /&gt;
&lt;br /&gt;
Source code analysis and unit tests can validate that the code change mitigates the vulnerability exposed by the previously identified coding defect. The results of automated secure code analysis can also be used as automatic check-in gates for version control: software artifacts cannot be checked into the build with high or medium severity coding issues.&lt;br /&gt;
&lt;br /&gt;
===Functional Testers' Security Tests===&lt;br /&gt;
'''Security Testing During the Integration and Validation Phase: Integrated System Tests and Operation Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
The main objective of integrated system tests is to validate the “defense in depth” concept, that is, that the implementation of security controls provides security at different layers. For example, the lack of input validation when calling a component integrated with the application is often a factor that can be tested with integration testing. &lt;br /&gt;
&lt;br /&gt;
The integration system test environment is also the first environment where testers can simulate real attack scenarios as can be potentially executed by a malicious external or internal user of the application. Security testing at this level can validate whether vulnerabilities are real and can be exploited by attackers. For example, a potential vulnerability found in source code can be rated as high risk because of the exposure to potential malicious users, as well as because of the potential impact (e.g., access to confidential information).&lt;br /&gt;
Real attack scenarios can be tested with both manual testing techniques and penetration testing tools. Security tests of this type are also referred to as ethical hacking tests. From the security testing perspective, these are risk driven tests and have the objective to test the application in the operational environment. The target is the application build that is representative of the version of the application being deployed into production.&lt;br /&gt;
&lt;br /&gt;
The execution of security in the integration and validation phase is critical to identifying vulnerabilities due to integration of components as well as validating the exposure of such vulnerabilities. Since application security testing requires a specialized set of skills, which includes both software and security knowledge and is not typical of security engineers, organizations are often required to security-train their software developers on ethical hacking techniques, security assessment procedures and tools. A realistic scenario is to develop such resources in-house and document them in security testing guides and procedures that take into account the developer’s security testing knowledge. A so called “security test cases cheat list or check-list”, for example, can provide simple test cases and attack vectors that can be used by testers to validate exposure to common vulnerabilities such as spoofing, information disclosures, buffer overflows, format strings, SQL injection and XSS injection, XML, SOAP, canonicalization issues, denial of service and managed code and ActiveX controls (e.g., .NET). A first battery of these tests can be performed manually with a very basic knowledge of software security. The first objective of security tests might be the validation of a set of minimum security requirements. These security test cases might consist of manually forcing the application into error and exceptional states, and gathering knowledge from the application behavior. For example, SQL injection vulnerabilities can be tested manually by injecting attack vectors through user input and by checking if SQL exceptions are thrown back the user. The evidence of a SQL exception error might be a manifestation of a vulnerability that can be exploited. A more in-depth security test might require the tester’s knowledge of specialized testing techniques and tools. Besides source code analysis and penetration testing, these techniques include, for example, source code and binary fault injection, fault propagation analysis and code coverage, fuzz testing, and reverse engineering. The security testing guide should provide procedures and recommend tools that can be used by security testers to perform such in-depth security assessments.&lt;br /&gt;
&lt;br /&gt;
The next level of security testing after integration system tests is to perform security tests in the user acceptance environment. There are unique advantages to performing security tests in the operational environment. The user acceptance tests environment (UAT) is the one that is most representative of the release configuration, with the exception of the data (e.g., test data is used in place of real data). A characteristic of security testing in UAT is testing for security configuration issues. In some cases these vulnerabilities might represent high risks. For example, the server that hosts the web application might not be configured with minimum privileges, valid SSL certificate and secure configuration, essential services disabled and web root directory not cleaned from test and administration web pages.&lt;br /&gt;
&lt;br /&gt;
===Security Test Data Analysis and Reporting===&lt;br /&gt;
'''Goals for Security Test Metrics and Measurements'''&amp;lt;br&amp;gt;&lt;br /&gt;
The definition of the goals for the security testing metrics and measurements is a pre-requisite for using security testing data for risk analysis and management processes. For example, a measurement such as the total number of vulnerabilities found with security tests might quantify the security posture of the application. These measurements also help to identify security objectives for software security testing: for example, reducing the number of vulnerabilities to an acceptable number (minimum) before the application is deployed into production. &lt;br /&gt;
&lt;br /&gt;
Another manageable goal could be to compare the application security posture against a baseline to assess improvements in application security processes. For example, the security metrics baseline might consist of an application that was tested only with penetration tests. The security data obtained from an application that was also security tested during coding should show an improvement (e.g., fewer number of vulnerabilities) when compared with the baseline.&lt;br /&gt;
&lt;br /&gt;
In traditional software testing, the number of software defects, such as the bugs found in an application, could provide a measure of software quality. Similarly, security testing can provide a measure of software security. From the defect management and reporting perspective, software quality and security testing can use similar categorizations for root causes and defect remediation efforts. From the root cause perspective, a security defect can be due to an error in design (e.g., security flaws) or due to an error in coding (e.g., security bug). From the perspective of the effort required to fix a defect, both security and quality defects can be measured in terms of developer hours to implement the fix, the tools and resources required to fix, and, finally, the cost to implement the fix.&lt;br /&gt;
&lt;br /&gt;
A characteristic of security test data, compared to quality data, is the categorization in terms of the threat, the exposure of the vulnerability, and the potential impact posed by the vulnerability to determine the risk. Testing applications for security consists of managing technical risks to make sure that the application countermeasures meet acceptable levels. For this reason, security testing data needs to support the security risk strategy at critical checkpoints during the SDLC. For example, vulnerabilities found in source code with source code analysis represent an initial measure of risk. Such measure of risk (e.g., high, medium, low) for the vulnerability can be calculated by determining the exposure and likelihood factors and, further, by validating such vulnerability with penetration tests. The risk metrics associated to vulnerabilities found with security tests empower business management to make risk management decisions, such as to decide whether risks can be accepted, mitigated, or transferred at different levels within the organization (e.g., business as well as technical).&lt;br /&gt;
&lt;br /&gt;
When evaluating the security posture of an application, it is important to take into consideration certain factors, such as the size of the application being developed. Application size has been statistically proven to be related to the number of issues found in the application with tests. One measure of application size is the number of line of code (LOC) of the application. Typically,  software quality defects range from about 7 to 10 defects per thousand lines of new and changed code [21]. Since testing can reduce the overall number by about 25% with one test alone, it is logical for larger size applications to be tested more and more often than smaller size applications.&lt;br /&gt;
&lt;br /&gt;
When security testing is done in several phases of the SDLC, the test data could prove the capability of the security tests in detecting vulnerabilities as soon as they are introduced, and prove the effectiveness of removing them by implementing countermeasures at different checkpoints of the SDLC. A measurement of this type is also defined as “containment metrics” and provides a measure of the ability of a security assessment performed at each phase of the development process to maintain security within each phase. These containment metrics are also a critical factor in lowering the cost of fixing the vulnerabilities, since it is less expensive to deal with the vulnerabilities when they are found (in the same phase of the SDLC), rather then fixing them later in another phase. &lt;br /&gt;
&lt;br /&gt;
Security test metrics can support security risk, cost, and defect management analysis when it is associated with tangible and timed goals such as: &lt;br /&gt;
*Reducing the overall number of vulnerabilities by 30%&lt;br /&gt;
*Security issues are expected to be fixed by a certain deadline (e.g., before beta release) &lt;br /&gt;
&lt;br /&gt;
Security test data can be absolute, such as the number of vulnerabilities detected during manual code review, as well as comparative, such as the number of vulnerabilities detected in code reviews vs. penetration tests. To answer questions about the quality of the security process, it is important to determine a baseline for what could be considered acceptable and good. &lt;br /&gt;
&lt;br /&gt;
Security test data can also support specific objectives of the security analysis such as compliance with security regulations and information security standards, management of security processes, the identification of security root causes and process improvements, and security costs vs. benefits analysis.&lt;br /&gt;
&lt;br /&gt;
When security test data is reported it has to provide metrics to support the analysis. The scope of the analysis is the interpretation of test data to find clues about the security of the software being produced as well the effectiveness of the process. &lt;br /&gt;
Some examples of clues supported by security test data can be:&lt;br /&gt;
*Are vulnerabilities reduced to an acceptable level for release?&lt;br /&gt;
*How does the security quality of this product compare with similar software products?&lt;br /&gt;
*Are all security test requirements being met? &lt;br /&gt;
*What are the major root causes of security issues?&lt;br /&gt;
*How numerous are security flaws compared to security bugs?&lt;br /&gt;
*Which security activity is most effective in finding vulnerabilities?&lt;br /&gt;
*Which team is more productive in fixing security defects and vulnerabilities?&lt;br /&gt;
*Which percentage of overall vulnerabilities are high risk?&lt;br /&gt;
*Which tools are most effective in detecting security vulnerabilities?&lt;br /&gt;
*Which kind of security tests are most effective in finding vulnerabilities (e.g., white box vs. black box) tests?&lt;br /&gt;
*How many security issues are found during secure code reviews?&lt;br /&gt;
*How many security issues are found during secure design reviews?&lt;br /&gt;
&lt;br /&gt;
In order to make a sound judgment using the testing data, it is important to have a good understanding of the testing process as well as the testing tools. A tool taxonomy should be adopted to decide which security tools should be used. Security tools can be qualified as being good at finding common known vulnerabilities targeting different artifacts.&lt;br /&gt;
The issue is that the unknown security issues are not tested: the fact that you come out clean it does not mean that your software or application is good. Some studies [22] have demonstrated that, at best, tools can find 45% of overall vulnerabilities. &lt;br /&gt;
&lt;br /&gt;
Even the most sophisticated automation tools are not a match for an experienced security tester: just relying on successful test results from automation tools will give security practitioners a false sense of security.  Typically, the more experienced the security testers are with the security testing methodology and testing tools, the better the results of the security test and analysis will be. It is important that managers making an investment in security testing tools also consider an investment in hiring skilled human resources as well as security test training.&lt;br /&gt;
&lt;br /&gt;
'''Reporting Requirements'''&amp;lt;br&amp;gt;&lt;br /&gt;
The security posture of an application can be characterized from the perspective of the effect, such as number of vulnerabilities and the risk rating of the vulnerabilities, as well as from the perspective of the cause (i.e., origin) such as coding errors, architectural flaws, and configuration issues.  &lt;br /&gt;
&lt;br /&gt;
Vulnerabilities can be classified according to different criteria. This can be a statistical categorization, such as the OWASP Top 10 and WASC (Web Application Security Statistics) project, or related to defensive controls as in the case of WASF (Web Application Security Framework) categorization.&lt;br /&gt;
&lt;br /&gt;
When reporting security test data, the best practice is to include the following information, besides the categorization of each vulnerability by type:&lt;br /&gt;
*The security threat that the issue is exposed to&lt;br /&gt;
*The root cause of security issues (e.g., security bugs, security flaw)&lt;br /&gt;
*The testing technique used to find it&lt;br /&gt;
*The remediation of the vulnerability (e.g., the countermeasure) &lt;br /&gt;
*The risk rating of the vulnerability (High, Medium, Low)&lt;br /&gt;
&lt;br /&gt;
By describing what the security threat is, it will be possible to understand if and why the mitigation control is ineffective in mitigating the threat. &lt;br /&gt;
&lt;br /&gt;
Reporting the root cause of the issue can help pinpoint what needs to be fixed: in the case of a white box testing, for example, the software security root cause of the vulnerability will be the offending source code. &lt;br /&gt;
&lt;br /&gt;
Once issues are reported, it is also important to provide guidance to the software developer on how to re-test and find the vulnerability. This might involve using a white box testing technique (e.g., security code review with a static code analyzer) to find if the code is vulnerable. If a vulnerability can be found via a black box technique (penetration test), the test report also needs to provide information on how to validate the exposure of the vulnerability to the front end (e.g., client).&lt;br /&gt;
&lt;br /&gt;
The information about how to fix the vulnerability should be detailed enough for a developer to implement a fix. It should provide secure coding examples, configuration changes, and provide adequate references.&lt;br /&gt;
&lt;br /&gt;
Finally the risk rating helps to prioritize the remediation effort. Typically, assigning a risk rating to the vulnerability involves a risk analysis based upon factors such as impact and exposure.&lt;br /&gt;
&lt;br /&gt;
'''Business Cases'''&amp;lt;br&amp;gt; &lt;br /&gt;
For the security test metrics to be useful, they need to provide value back to the organization's security test data stakeholders, such as project managers, developers, information security offices, auditors, and chief information officers. The value can be in terms of the business case that each project stakeholder has in terms of role and responsibility.&lt;br /&gt;
&lt;br /&gt;
Software developers look at security test data to show that software is coded more securely and efficiently, so that they can make the case of using source code analysis tools as well as following secure coding standards and attending software security training. &lt;br /&gt;
&lt;br /&gt;
Project managers look for data that allows them to successfully manage and utilize security testing activities and resources according to the project plan. To project managers, security test data can show that projects are on schedule and moving on target for delivery dates and are getting better during tests. &lt;br /&gt;
&lt;br /&gt;
Security test data also helps the business case for security testing if the initiative comes from information security officers (ISOs). For example, it can provide evidence that security testing during the SDLC does not impact the project delivery, but rather reduces the overall workload needed to address vulnerabilities later in production. &lt;br /&gt;
&lt;br /&gt;
To compliance auditors, security test metrics provide a level of software security assurance and confidence that security standard compliance is addressed through the security review processes within the organization. &lt;br /&gt;
&lt;br /&gt;
Finally, Chief Information Officers (CIOs) and Chief Information Security Officers (CISOs), responsible for the budget that needs to be allocated in security resources, look for derivation of a cost/benefit analysis from security test data to make informed decisions on which security activities and tools to invest. One of the metrics that support such analysis is the Return On Investment (ROI) in Security [23]. To derive such metrics from security test data, it is important to quantify the differential between the risk due to the exposure of vulnerabilities and the effectiveness of the security tests in mitigating the security risk, and factor this gap with the cost of the security testing activity or the testing tools adopted.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1] T. DeMarco, ''Controlling Software Projects: Management, Measurement and Estimation'', Yourdon Press, 1982&lt;br /&gt;
&lt;br /&gt;
[2] S. Payne, ''A Guide to Security Metrics'' - http://www.sans.org/reading_room/whitepapers/auditing/55.php&lt;br /&gt;
&lt;br /&gt;
[3] NIST, ''The economic impacts of inadequate infrastructure for software testing'' - http://www.nist.gov/director/planning/upload/report02-3.pdf&lt;br /&gt;
&lt;br /&gt;
[4] Ross Anderson, ''Economics and Security Resource Page'' - http://www.cl.cam.ac.uk/~rja14/econsec.html &lt;br /&gt;
&lt;br /&gt;
[5] Denis Verdon, ''Teaching Developers To Fish'' - [[OWASP AppSec NYC 2004]]&lt;br /&gt;
&lt;br /&gt;
[6] Bruce Schneier, ''Cryptogram Issue #9'' - https://www.schneier.com/crypto-gram-0009.html&lt;br /&gt;
&lt;br /&gt;
[7] Symantec, ''Threat Reports'' -  http://www.symantec.com/security_response/publications/threatreport.jsp&lt;br /&gt;
&lt;br /&gt;
[8] FTC, ''The Gramm-Leach Bliley Act'' - http://business.ftc.gov/privacy-and-security/gramm-leach-bliley-act&lt;br /&gt;
&lt;br /&gt;
[9] Senator Peace and Assembly Member Simitian, ''SB 1386''- http://www.leginfo.ca.gov/pub/01-02/bill/sen/sb_1351-1400/sb_1386_bill_20020926_chaptered.html&lt;br /&gt;
&lt;br /&gt;
[10] European Union, ''Directive 96/46/EC on the protection of individuals with regard to the processing of personal data and on the free movement of such data'' -&lt;br /&gt;
http://ec.europa.eu/justice/policies/privacy/docs/95-46-ce/dir1995-46_part1_en.pdf&lt;br /&gt;
&lt;br /&gt;
[11] NIST, '' Risk management guide for information technology systems'' - http://csrc.nist.gov/publications/nistpubs/800-30-rev1/sp800_30_r1.pdf&lt;br /&gt;
&lt;br /&gt;
[12] SEI, Carnegie Mellon, ''Operationally Critical Threat, Asset, and Vulnerability Evaluation (OCTAVE)'' - http://www.cert.org/octave/&lt;br /&gt;
&lt;br /&gt;
[13] Ken Thompson, ''Reflections on Trusting Trust, Reprinted from Communication of the ACM '' - http://cm.bell-labs.com/who/ken/trust.html''   [[Category:FIXME|link not working]]&lt;br /&gt;
&lt;br /&gt;
[14] Gary McGraw, ''Beyond the Badness-ometer'' - http://www.drdobbs.com/security/beyond-the-badness-ometer/189500001&lt;br /&gt;
&lt;br /&gt;
[15] FFIEC, '' Authentication in an Internet Banking Environment'' - http://www.ffiec.gov/pdf/authentication_guidance.pdf&lt;br /&gt;
&lt;br /&gt;
[16] PCI Security Standards Council, ''PCI Data Security Standard'' - https://www.pcisecuritystandards.org/security_standards/index.php &lt;br /&gt;
&lt;br /&gt;
[17] MSDN, ''Cheat Sheet: Web Application Security Frame'' - http://msdn.microsoft.com/en-us/library/ms978518.aspx#tmwacheatsheet_webappsecurityframe &lt;br /&gt;
&lt;br /&gt;
[18] MSDN, ''Improving Web Application Security, Chapter 2, Threat And Countermeasures'' - http://msdn.microsoft.com/en-us/library/aa302418.aspx&lt;br /&gt;
&lt;br /&gt;
[19] Sindre,G. Opdmal A., '' Capturing Security Requirements Through Misuse Cases ' - http://folk.uio.no/nik/2001/21-sindre.pdf&lt;br /&gt;
&lt;br /&gt;
[20] Improving Security Across the Software Development Lifecycle Task Force, ''Referred Data from Caper Johns, Software Assessments, Benchmarks and Best Practices'' - http://www.criminal-justice-careers.com/resources/SDLCFULL.pdf&lt;br /&gt;
&lt;br /&gt;
[21] MITRE, ''Being Explicit About Weaknesses, Slide 30, Coverage of CWE'' - http://cwe.mitre.org/documents/being-explicit/BlackHatDC_BeingExplicit_Slides.ppt&lt;br /&gt;
&lt;br /&gt;
[22] Marco Morana, ''Building Security Into The Software Life Cycle, A Business Case'' - http://www.blackhat.com/presentations/bh-usa-06/bh-us-06-Morana-R3.0.pdf&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_Weak_SSL/TLS_Ciphers,_Insufficient_Transport_Layer_Protection_(OTG-CRYPST-001)&amp;diff=170253</id>
		<title>Testing for Weak SSL/TLS Ciphers, Insufficient Transport Layer Protection (OTG-CRYPST-001)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_Weak_SSL/TLS_Ciphers,_Insufficient_Transport_Layer_Protection_(OTG-CRYPST-001)&amp;diff=170253"/>
				<updated>2014-03-16T23:38:30Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: Testing Guide V4: Review_v1 - More work needed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Brief Summary ==&lt;br /&gt;
&lt;br /&gt;
Sensitive data must be protected when it is transmitted through the network. Such data can include user credentials and credit cards. As a rule of thumb, if data must be protected when it is stored, it must be protected also during transmission. &lt;br /&gt;
&lt;br /&gt;
HTTP is a clear-text protocol and it is normally secured via an SSL/TLS tunnel, resulting in HTTPS traffic [1]. The use of this protocol ensures not only confidentiality, but also authentication. Servers are authenticated using digital certificates and it is also possible to use client certificate for mutual authentication. &lt;br /&gt;
&lt;br /&gt;
Even if high grade ciphers are today supported and normally used, some misconfiguration in the server can be used to force the use of a weak cipher - or at worst no encryption - permitting to an attacker to gain access to the supposed secure communication channel. Other misconfiguration can be used for a Denial of Service attack.&lt;br /&gt;
&lt;br /&gt;
== Description of the Issue == &lt;br /&gt;
If control is missed and HTTP protocol is used to transmit sensitive information is a vulnerability [2] (e.g. credentials transmitted over HTTP [3]) and there are a specific OWASP Testing Guide v4’s test.&lt;br /&gt;
&lt;br /&gt;
If SSL/TLS service is present it is good but it increments the attack surface and some vulnerabilities insist on it, such as:&lt;br /&gt;
* SSL/TLS protocols, ciphers, keys and renegotiation must be properly configured.&lt;br /&gt;
* Certificate validity must be ensured.&lt;br /&gt;
Other vulnerabilities linked to this is:&lt;br /&gt;
* Software exposed must be updated due to possibility of known vulnerabilities [4].&lt;br /&gt;
* Usage of Secure flag for Session Cookies [5].&lt;br /&gt;
* Usage of HTTP Strict Transport Security (HSTS) [6].&lt;br /&gt;
* The presence of HTTP and HTTPS both, which can be used to intercept traffic [7], [8].&lt;br /&gt;
* The presence of mixed HTTPS and HTTP content in the same page, which can be used to Leak information.&lt;br /&gt;
&lt;br /&gt;
===Sensitive data transmitted in clear-text===&lt;br /&gt;
If the application transmits sensitive information via unencrypted channels - e.g. HTTP - it is a vulnerability. Typically it is possible to find BASIC authentication over HTTP, input password or session cookie sent via HTTP and, in general, other information considered by regulations, laws or organization policy.&lt;br /&gt;
&lt;br /&gt;
===Weak SSL/TLS Ciphers/Protocols/Keys===&lt;br /&gt;
Historically, there have been limitations set in place by the U.S. government to allow cryptosystems to be exported only for key sizes of at most 40 bits, a key length which could be broken and would allow the decryption of communications. Since then cryptographic export regulations have been relaxed the maximum key size is 128 bits.&lt;br /&gt;
It is important to check the SSL configuration being used to avoid putting in place cryptographic support which could be easily defeated. To reach this goal SSL-based services should not offer the possibility to choose weak cipher suite. A cipher suite is specified by an encryption protocol (e.g. DES, RC4, AES), the encryption key length (e.g. 40, 56, or 128 bits), and a hash algorithm (e.g. SHA, MD5) used for integrity checking.&lt;br /&gt;
Briefly, the key points for the cipher suite determination are the following: &lt;br /&gt;
# The client sends to the server a ClientHello message specifying, among other information, the protocol and the cipher suites that it is able to handle. Note that a client is usually a web browser (most popular SSL client nowadays), but not necessarily, since it can be any SSL-enabled application; the same holds for the server, which needs not to be a web server, though this is the most common case [9].&lt;br /&gt;
#The server responds with a ServerHello message, containing the chosen protocol and cipher suite that will be used for that session (in general the server selects the strongest protocol and cipher suite supported by both the client and server). &lt;br /&gt;
&lt;br /&gt;
It is possible (for example, by means of configuration directives) to specify which cipher suites the server will honor. In this way you may control, for example, whether or not conversations with clients will support 40-bit encryption only.&lt;br /&gt;
&lt;br /&gt;
#The server sends its Certificate message and, if client authentication is required, also sends a CertificateRequest message to the client.&lt;br /&gt;
#The server sends a ServerHelloDone message and waits for a client response.&lt;br /&gt;
#Upon receipt of the ServerHelloDone message, the client verifies the validity of the server's digital certificate.&lt;br /&gt;
&lt;br /&gt;
===SSL certificate validity – client and server===&lt;br /&gt;
&lt;br /&gt;
When accessing a web application via the HTTPS protocol, a secure channel is established between the client and the server. The identity of one (the server) or both parties (client and server) is then established by means of digital certificates. So, once the cipher suite is determined, the “SSL Handshake” continues with the exchange of the certificates, like follow:&lt;br /&gt;
# The server sends its Certificate message and, if client authentication is required, also sends a CertificateRequest message to the client.&lt;br /&gt;
# The server sends a ServerHelloDone message and waits for a client response.&lt;br /&gt;
# Upon receipt of the ServerHelloDone message, the client verifies the validity of the server's digital certificate.&lt;br /&gt;
&lt;br /&gt;
In order for the communication to be set up, a number of checks on the certificates must be passed. While discussing SSL and certificate based authentication is beyond the scope of this Guide, we will focus on the main criteria involved in ascertaining certificate validity: &lt;br /&gt;
&lt;br /&gt;
* Checking if the Certificate Authority (CA) is a known one (meaning one considered trusted);&lt;br /&gt;
* Checking that the certificate is currently valid;&lt;br /&gt;
* Checking that the name of the site and the name reported in the certificate match.&lt;br /&gt;
&lt;br /&gt;
Let is examine each check more in detail. &lt;br /&gt;
&lt;br /&gt;
* Each browser comes with a preloaded list of trusted CAs, against which the certificate signing CA is compared (this list can be customized and expanded at will). During the initial negotiations with an HTTPS server, if the server certificate relates to a CA unknown to the browser, a warning is usually raised. This happens most often because a web application relies on a certificate signed by a self-established CA. Whether this is to be considered a concern depends on several factors. For example, this may be fine for an Intranet environment (think of corporate web email being provided via HTTPS; here, obviously all users recognize the internal CA as a trusted CA). When a service is provided to the general public via the Internet, however (i.e. when it is important to positively verify the identity of the server we are talking to), it is usually imperative to rely on a trusted CA, one which is recognized by all the user base (and here we stop with our considerations; we won’t delve deeper in the implications of the trust model being used by digital certificates). &lt;br /&gt;
&lt;br /&gt;
* Certificates have an associated period of validity, therefore they may expire. Again, we are warned by the browser about this. A public service needs a temporally valid certificate; otherwise, it means we are talking with a server whose certificate was issued by someone we trust, but has expired without being renewed. &lt;br /&gt;
&lt;br /&gt;
* What if the name on the certificate and the name of the server do not match? If this happens, it might sound suspicious. For a number of reasons, this is not so rare to see. A system may host a number of name-based virtual hosts, which share the same IP address and are identified by means of the HTTP 1.1 Host: header information. In this case, since the SSL handshake checks the server certificate before the HTTP request is processed, it is not possible to assign different certificates to each virtual server. Therefore, if the name of the site and the name reported in the certificate do not match, we have a condition which is typically signaled by the browser. To avoid this, IP-based virtual servers must be used. [33] and [34] describe techniques to deal with this problem and allow name-based virtual hosts to be correctly referenced. &lt;br /&gt;
&lt;br /&gt;
===Other vulnerabilities===&lt;br /&gt;
The presence of a new service, listening in a separate tcp port may introduce vulnerabilities such as Infrastructure vulnerability if software is not up to date [4]. Futhermore for a correct protection of data during transmission Session Cookie must use the Secure flag [5] and some directives should be sent to the browser to accept only secure traffic (e.g. HSTS [6], CSP [9]). &lt;br /&gt;
&lt;br /&gt;
Also there are some attacks can be used to intercept traffic if the web server exposes the application on both HTTP and HTTPS [6], [7] or in case of mixed HTTP and HTTPS resources in the same page.&lt;br /&gt;
&lt;br /&gt;
== Black Box testing and example ==&lt;br /&gt;
&lt;br /&gt;
===Testing for sensitive data transmitted in clear-text===&lt;br /&gt;
Various typologies of information which must be protected can be also transmitted in clear text. It is possible to check if these information is transmitted over HTTP instead of HTTPS.&lt;br /&gt;
&lt;br /&gt;
Please refer to specific Tests for full details, for credentials [3] and other kind of data [2].  &lt;br /&gt;
&lt;br /&gt;
=====Example 1. Basic Authentication over HTTP=====&lt;br /&gt;
A typical example is the usage of Basic Authentication over HTTP. Also because with Basic Authentication, after login, credentials are encoded - and not encrypted - into HTTP Headers.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -kis http://example.com/restricted/&lt;br /&gt;
HTTP/1.1 401 Authorization Required&lt;br /&gt;
Date: Fri, 01 Aug 2013 00:00:00 GMT&lt;br /&gt;
WWW-Authenticate: Basic realm=&amp;quot;Restricted Area&amp;quot;&lt;br /&gt;
Accept-Ranges: bytes&lt;br /&gt;
Vary: Accept-Encoding&lt;br /&gt;
Content-Length: 162&lt;br /&gt;
Content-Type: text/html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;401 Authorization Required&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body bgcolor=white&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;401 Authorization Required&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Invalid login credentials!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Testing for Weak SSL/TLS Ciphers/Protocols/Keys vulnerabilities===&lt;br /&gt;
Large number of available cipher suites and quick progress in cryptanalysis makes judging an SSL server a non-trivial task. At the time of writing these criteria are widely recognized as minimum checklist:&lt;br /&gt;
* Weak ciphers must not be used (e.g. less than 128 bits [10]; no NULL ciphers suite, due to no encryption used; no Anonymous Diffie-Hellmann, due to not provides authentication).&lt;br /&gt;
* Weak protocols must be disabled (e.g. SSLv2 must be disabled, due to known weaknesses in protocol design [11]).&lt;br /&gt;
* Renegotiation must be properly configured (e.g. Insecure Renegotiation must be disabled, due to MiTM attacks [12] and Client-initiated Renegotiation must be disabled, due to Denial of Service vulnerability [13]).&lt;br /&gt;
* No Export (EXP) level cipher suites, due to can be easly broken [10].&lt;br /&gt;
* X.509 certificates key length must be strong (e.g. if RSA or DSA is used the key must be at least 1024 bits).&lt;br /&gt;
* X.509 certificates must be signed only with secure hashing algoritms (e.g. not signed using MD5 hash, due to known collision attacks on this hash).&lt;br /&gt;
* Keys must be generated with proper entropy (e.g, Weak Key Generated with Debian) [14].&lt;br /&gt;
A most complete checklist includes:&lt;br /&gt;
* Secure Renegotiation should be enabled.&lt;br /&gt;
* MD5 should not be used, due to known collision attacks. [35]&lt;br /&gt;
* RC4 should not be used, due to crypto-analytical attacks [15].&lt;br /&gt;
* Server should be protected from BEAST Attack [16].&lt;br /&gt;
* Server should be protected from CRIME attack, TLS compression must be disabled [17].&lt;br /&gt;
* Server should support Forward Secrecy [18].&lt;br /&gt;
&lt;br /&gt;
Following standards can be used as reference while assessing SSL servers:&lt;br /&gt;
* PCI-DSS v2.0 in point 4.1 requires compliant parties to use &amp;quot;strong cryptography&amp;quot; without precisely defining key lengths and algorithms. Common interpretation, partially based on previous versions of the standard, is that at least 128 bit key cipher, no export strength algorithms and no SSLv2 should be used [19].&lt;br /&gt;
* Qualys SSL Labs Server Rating Guide [14], Depoloyment best practice [10] and SSL Threat Model [20] has been proposed to standardize SSL server assessment and configuration. But is less updated than the SSL Server tool [21].&lt;br /&gt;
* OWASP has a lot of resources about SSL/TLS Security [22], [23], [24], [25]. [26].&lt;br /&gt;
&lt;br /&gt;
Some tools and scanners both free - e.g. SSLAudit [28] or SSLScan [29] and commercial - e.g. Tenable Nessus [27], and other used into examples - can be used to assess SSL/TLS vulnerabilities. But due to evolution of these vulnerabilities a good way is also to check them manually with openssl [30] or using tool’s output as an input for manual evaluation using the references on the bottom on the Test to stay updated.&lt;br /&gt;
&lt;br /&gt;
Sometimes the SSL/TLS enabled service is not directly accessible and you can access it only via HTTP proxy using CONNECT method [36]. Most of the tools will try to connect to desired tcp port in order to start SSL/TLS handshake. This will obviously not work since desired port is accessible only via HTTP proxy. You can easily circumvent this by using relaying software such as socat [37].&lt;br /&gt;
&lt;br /&gt;
====Example 2. SSL service recognition via nmap====&lt;br /&gt;
First step is to identify ports which have SSL/TLS wrapped services. Typically tcp ports with SSL for web and mail services are -  but not limited to - 443 (https), 465 (ssmtp), 585 (imap4-ssl), 993 (imaps), 995 (ssl-pop).&lt;br /&gt;
In this example we search for SSL services using nmap with “-sV” option, used for identify services and it is also able to identify SSL services [31]. Other options are for this particular example and must be customized. Often in a Web Application Penetration Test scope is limited to port 80 and 443.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ nmap -sV --reason -PN -n --top-ports 100 www.example.com&lt;br /&gt;
Starting Nmap 6.25 ( http://nmap.org ) at 2013-01-01 00:00 CEST&lt;br /&gt;
Nmap scan report for www.example.com (127.0.0.1)&lt;br /&gt;
Host is up, received user-set (0.20s latency).&lt;br /&gt;
Not shown: 89 filtered ports&lt;br /&gt;
Reason: 89 no-responses&lt;br /&gt;
PORT    STATE SERVICE  REASON  VERSION&lt;br /&gt;
21/tcp  open  ftp      syn-ack Pure-FTPd&lt;br /&gt;
22/tcp  open  ssh      syn-ack OpenSSH 5.3 (protocol 2.0)&lt;br /&gt;
25/tcp  open  smtp     syn-ack Exim smtpd 4.80&lt;br /&gt;
26/tcp  open  smtp     syn-ack Exim smtpd 4.80&lt;br /&gt;
80/tcp  open  http     syn-ack&lt;br /&gt;
110/tcp open  pop3     syn-ack Dovecot pop3d&lt;br /&gt;
143/tcp open  imap     syn-ack Dovecot imapd&lt;br /&gt;
443/tcp open  ssl/http syn-ack Apache&lt;br /&gt;
465/tcp open  ssl/smtp syn-ack Exim smtpd 4.80&lt;br /&gt;
993/tcp open  ssl/imap syn-ack Dovecot imapd&lt;br /&gt;
995/tcp open  ssl/pop3 syn-ack Dovecot pop3d&lt;br /&gt;
Service Info: Hosts: example.com&lt;br /&gt;
Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .&lt;br /&gt;
Nmap done: 1 IP address (1 host up) scanned in 131.38 seconds&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Example 3. Checking for Certificate information, Weak Ciphers and SSLv2 via nmap====&lt;br /&gt;
nmap has two scripts for checking Certificate information, Weak Ciphers and SSLv2 [31].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ nmap --script ssl-cert,ssl-enum-ciphers -p 443,465,993,995 www.example.com&lt;br /&gt;
Starting Nmap 6.25 ( http://nmap.org ) at 2013-01-01 00:00 CEST&lt;br /&gt;
Nmap scan report for www.example.com (127.0.0.1)&lt;br /&gt;
Host is up (0.090s latency).&lt;br /&gt;
rDNS record for 127.0.0.1: www.example.com&lt;br /&gt;
PORT    STATE SERVICE&lt;br /&gt;
443/tcp open  https&lt;br /&gt;
| ssl-cert: Subject: commonName=www.example.org&lt;br /&gt;
| Issuer: commonName=*******&lt;br /&gt;
| Public Key type: rsa&lt;br /&gt;
| Public Key bits: 1024&lt;br /&gt;
| Not valid before: 2010-01-23T00:00:00+00:00&lt;br /&gt;
| Not valid after:  2020-02-28T23:59:59+00:00&lt;br /&gt;
| MD5:   *******&lt;br /&gt;
|_SHA-1: *******&lt;br /&gt;
| ssl-enum-ciphers: &lt;br /&gt;
|   SSLv3: &lt;br /&gt;
|     ciphers: &lt;br /&gt;
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - strong&lt;br /&gt;
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - strong&lt;br /&gt;
|       TLS_RSA_WITH_RC4_128_SHA - strong&lt;br /&gt;
|     compressors: &lt;br /&gt;
|       NULL&lt;br /&gt;
|   TLSv1.0: &lt;br /&gt;
|     ciphers: &lt;br /&gt;
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - strong&lt;br /&gt;
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - strong&lt;br /&gt;
|       TLS_RSA_WITH_RC4_128_SHA - strong&lt;br /&gt;
|     compressors: &lt;br /&gt;
|       NULL&lt;br /&gt;
|_  least strength: strong&lt;br /&gt;
465/tcp open  smtps&lt;br /&gt;
| ssl-cert: Subject: commonName=*.exapmple.com&lt;br /&gt;
| Issuer: commonName=*******&lt;br /&gt;
| Public Key type: rsa&lt;br /&gt;
| Public Key bits: 2048&lt;br /&gt;
| Not valid before: 2010-01-23T00:00:00+00:00&lt;br /&gt;
| Not valid after:  2020-02-28T23:59:59+00:00&lt;br /&gt;
| MD5:   *******&lt;br /&gt;
|_SHA-1: *******&lt;br /&gt;
| ssl-enum-ciphers: &lt;br /&gt;
|   SSLv3: &lt;br /&gt;
|     ciphers: &lt;br /&gt;
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - strong&lt;br /&gt;
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - strong&lt;br /&gt;
|       TLS_RSA_WITH_RC4_128_SHA - strong&lt;br /&gt;
|     compressors: &lt;br /&gt;
|       NULL&lt;br /&gt;
|   TLSv1.0: &lt;br /&gt;
|     ciphers: &lt;br /&gt;
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - strong&lt;br /&gt;
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - strong&lt;br /&gt;
|       TLS_RSA_WITH_RC4_128_SHA - strong&lt;br /&gt;
|     compressors: &lt;br /&gt;
|       NULL&lt;br /&gt;
|_  least strength: strong&lt;br /&gt;
993/tcp open  imaps&lt;br /&gt;
| ssl-cert: Subject: commonName=*.exapmple.com&lt;br /&gt;
| Issuer: commonName=*******&lt;br /&gt;
| Public Key type: rsa&lt;br /&gt;
| Public Key bits: 2048&lt;br /&gt;
| Not valid before: 2010-01-23T00:00:00+00:00&lt;br /&gt;
| Not valid after:  2020-02-28T23:59:59+00:00&lt;br /&gt;
| MD5:   *******&lt;br /&gt;
|_SHA-1: *******&lt;br /&gt;
| ssl-enum-ciphers: &lt;br /&gt;
|   SSLv3: &lt;br /&gt;
|     ciphers: &lt;br /&gt;
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - strong&lt;br /&gt;
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - strong&lt;br /&gt;
|       TLS_RSA_WITH_RC4_128_SHA - strong&lt;br /&gt;
|     compressors: &lt;br /&gt;
|       NULL&lt;br /&gt;
|   TLSv1.0: &lt;br /&gt;
|     ciphers: &lt;br /&gt;
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - strong&lt;br /&gt;
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - strong&lt;br /&gt;
|       TLS_RSA_WITH_RC4_128_SHA - strong&lt;br /&gt;
|     compressors: &lt;br /&gt;
|       NULL&lt;br /&gt;
|_  least strength: strong&lt;br /&gt;
995/tcp open  pop3s&lt;br /&gt;
| ssl-cert: Subject: commonName=*.exapmple.com&lt;br /&gt;
| Issuer: commonName=*******&lt;br /&gt;
| Public Key type: rsa&lt;br /&gt;
| Public Key bits: 2048&lt;br /&gt;
| Not valid before: 2010-01-23T00:00:00+00:00&lt;br /&gt;
| Not valid after:  2020-02-28T23:59:59+00:00&lt;br /&gt;
| MD5:   *******&lt;br /&gt;
|_SHA-1: *******&lt;br /&gt;
| ssl-enum-ciphers: &lt;br /&gt;
|   SSLv3: &lt;br /&gt;
|     ciphers: &lt;br /&gt;
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - strong&lt;br /&gt;
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - strong&lt;br /&gt;
|       TLS_RSA_WITH_RC4_128_SHA - strong&lt;br /&gt;
|     compressors: &lt;br /&gt;
|       NULL&lt;br /&gt;
|   TLSv1.0: &lt;br /&gt;
|     ciphers: &lt;br /&gt;
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - strong&lt;br /&gt;
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - strong&lt;br /&gt;
|       TLS_RSA_WITH_RC4_128_SHA - strong&lt;br /&gt;
|     compressors: &lt;br /&gt;
|       NULL&lt;br /&gt;
|_  least strength: strong&lt;br /&gt;
Nmap done: 1 IP address (1 host up) scanned in 8.64 seconds&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Example 4 Checking for Client-initiated Renegotiation and Secure Renegotiation via openssl (manually)====&lt;br /&gt;
openssl [30] can be used for testing manually SSL/TLS. In this example we try to initiate a renegotiation by client [m] connecting to server with openssl - writing the fist line of an HTTP request, in a new line typing “R”, waiting for renegotiaion and completing the HTTP request - and check if secure renegotiaion is supperted looking server output. Using manual request it is also possible to see if Compression is enabled for TLS in order to check for CRIME [13], check for ciphers and other vulnerabilities. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ openssl s_client -connect www2.example.com:443&lt;br /&gt;
CONNECTED(00000003)&lt;br /&gt;
depth=2 ******&lt;br /&gt;
verify error:num=20:unable to get local issuer certificate&lt;br /&gt;
verify return:0&lt;br /&gt;
---&lt;br /&gt;
Certificate chain&lt;br /&gt;
 0 s:******&lt;br /&gt;
   i:******&lt;br /&gt;
 1 s:******&lt;br /&gt;
   i:******&lt;br /&gt;
 2 s:******&lt;br /&gt;
   i:******&lt;br /&gt;
---&lt;br /&gt;
Server certificate&lt;br /&gt;
-----BEGIN CERTIFICATE-----&lt;br /&gt;
******&lt;br /&gt;
-----END CERTIFICATE-----&lt;br /&gt;
subject=******&lt;br /&gt;
issuer=******&lt;br /&gt;
---&lt;br /&gt;
No client certificate CA names sent&lt;br /&gt;
---&lt;br /&gt;
SSL handshake has read 3558 bytes and written 640 bytes&lt;br /&gt;
---&lt;br /&gt;
New, TLSv1/SSLv3, Cipher is DES-CBC3-SHA&lt;br /&gt;
Server public key is 2048 bit&lt;br /&gt;
Secure Renegotiation IS NOT supported&lt;br /&gt;
Compression: NONE&lt;br /&gt;
Expansion: NONE&lt;br /&gt;
SSL-Session:&lt;br /&gt;
    Protocol  : TLSv1&lt;br /&gt;
    Cipher    : DES-CBC3-SHA&lt;br /&gt;
    Session-ID: ******&lt;br /&gt;
    Session-ID-ctx: &lt;br /&gt;
    Master-Key: ******&lt;br /&gt;
    Key-Arg   : None&lt;br /&gt;
    PSK identity: None&lt;br /&gt;
    PSK identity hint: None&lt;br /&gt;
    SRP username: None&lt;br /&gt;
    Start Time: ******&lt;br /&gt;
    Timeout   : 300 (sec)&lt;br /&gt;
    Verify return code: 20 (unable to get local issuer certificate)&lt;br /&gt;
---&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now we can write the first line of an HTTP request and then R in a new line.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HEAD / HTTP/1.1&lt;br /&gt;
R&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Server is renegotiating&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RENEGOTIATING&lt;br /&gt;
depth=2 C******&lt;br /&gt;
verify error:num=20:unable to get local issuer certificate&lt;br /&gt;
verify return:0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And we can complete our request, checking for response.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HEAD / HTTP/1.1&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 403 Forbidden ( The server denies the specified Uniform Resource Locator (URL). Contact the server administrator.  )&lt;br /&gt;
Connection: close&lt;br /&gt;
Pragma: no-cache&lt;br /&gt;
Cache-Control: no-cache&lt;br /&gt;
Content-Type: text/html&lt;br /&gt;
Content-Length: 1792  &lt;br /&gt;
&lt;br /&gt;
read:errno=0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Even if the HEAD is not permitted, Client-intiated renegotiaion is permitted.&lt;br /&gt;
&lt;br /&gt;
====Example 5. Testing supported Cipher Suites, BEAST and CRIME attacks via TestSSLServer====&lt;br /&gt;
TestSSLServer [32] is a script which permits to check cipher suite and also BEAST and CRIME attacks. BEAST (Browser Exploit Against SSL/TLS)  exploits a vulnerability of CBC in TLS 1.0. CRIME (Compression Ratio Info-leak Made Easy) exploits a vulnerability of TLS Compression, that sould be disabled. It is really interesting a first fix for BEAST was the usage of RC4, but this is discouraged due to a crypto-analytical attack to RC4 [15].&lt;br /&gt;
&lt;br /&gt;
An online tool to check for these attacks is SSL Labs, but can be used only for internet facing servers. Also consider that target data will be stored on SSL Labs server and also will result some connection from SSL Labs server [21].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ java -jar TestSSLServer.jar www3.example.com 443&lt;br /&gt;
Supported versions: SSLv3 TLSv1.0 TLSv1.1 TLSv1.2&lt;br /&gt;
Deflate compression: no&lt;br /&gt;
Supported cipher suites (ORDER IS NOT SIGNIFICANT):&lt;br /&gt;
  SSLv3&lt;br /&gt;
     RSA_WITH_RC4_128_SHA&lt;br /&gt;
     RSA_WITH_3DES_EDE_CBC_SHA&lt;br /&gt;
     DHE_RSA_WITH_3DES_EDE_CBC_SHA&lt;br /&gt;
     RSA_WITH_AES_128_CBC_SHA&lt;br /&gt;
     DHE_RSA_WITH_AES_128_CBC_SHA&lt;br /&gt;
     RSA_WITH_AES_256_CBC_SHA&lt;br /&gt;
     DHE_RSA_WITH_AES_256_CBC_SHA&lt;br /&gt;
     RSA_WITH_CAMELLIA_128_CBC_SHA&lt;br /&gt;
     DHE_RSA_WITH_CAMELLIA_128_CBC_SHA&lt;br /&gt;
     RSA_WITH_CAMELLIA_256_CBC_SHA&lt;br /&gt;
     DHE_RSA_WITH_CAMELLIA_256_CBC_SHA&lt;br /&gt;
     TLS_RSA_WITH_SEED_CBC_SHA&lt;br /&gt;
     TLS_DHE_RSA_WITH_SEED_CBC_SHA&lt;br /&gt;
  (TLSv1.0: idem)&lt;br /&gt;
  (TLSv1.1: idem)&lt;br /&gt;
  TLSv1.2&lt;br /&gt;
     RSA_WITH_RC4_128_SHA&lt;br /&gt;
     RSA_WITH_3DES_EDE_CBC_SHA&lt;br /&gt;
     DHE_RSA_WITH_3DES_EDE_CBC_SHA&lt;br /&gt;
     RSA_WITH_AES_128_CBC_SHA&lt;br /&gt;
     DHE_RSA_WITH_AES_128_CBC_SHA&lt;br /&gt;
     RSA_WITH_AES_256_CBC_SHA&lt;br /&gt;
     DHE_RSA_WITH_AES_256_CBC_SHA&lt;br /&gt;
     RSA_WITH_AES_128_CBC_SHA256&lt;br /&gt;
     RSA_WITH_AES_256_CBC_SHA256&lt;br /&gt;
     RSA_WITH_CAMELLIA_128_CBC_SHA&lt;br /&gt;
     DHE_RSA_WITH_CAMELLIA_128_CBC_SHA&lt;br /&gt;
     DHE_RSA_WITH_AES_128_CBC_SHA256&lt;br /&gt;
     DHE_RSA_WITH_AES_256_CBC_SHA256&lt;br /&gt;
     RSA_WITH_CAMELLIA_256_CBC_SHA&lt;br /&gt;
     DHE_RSA_WITH_CAMELLIA_256_CBC_SHA&lt;br /&gt;
     TLS_RSA_WITH_SEED_CBC_SHA&lt;br /&gt;
     TLS_DHE_RSA_WITH_SEED_CBC_SHA&lt;br /&gt;
     TLS_RSA_WITH_AES_128_GCM_SHA256&lt;br /&gt;
     TLS_RSA_WITH_AES_256_GCM_SHA384&lt;br /&gt;
     TLS_DHE_RSA_WITH_AES_128_GCM_SHA256&lt;br /&gt;
     TLS_DHE_RSA_WITH_AES_256_GCM_SHA384&lt;br /&gt;
----------------------&lt;br /&gt;
Server certificate(s):&lt;br /&gt;
  ******&lt;br /&gt;
----------------------&lt;br /&gt;
Minimal encryption strength:     strong encryption (96-bit or more)&lt;br /&gt;
Achievable encryption strength:  strong encryption (96-bit or more)&lt;br /&gt;
BEAST status: vulnerable&lt;br /&gt;
CRIME status: protected&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Example 6.  Testing SSL/TLS vulnerabilities with sslyze====&lt;br /&gt;
sslyze [33] is a python script which permits also mass scan and XML output. Follows an example of a regular scan. Is one of the most complete and versatile tool for SSL/TLS testing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./sslyze.py --regular example.com:443&lt;br /&gt;
&lt;br /&gt;
 REGISTERING AVAILABLE PLUGINS&lt;br /&gt;
 -----------------------------&lt;br /&gt;
&lt;br /&gt;
  PluginHSTS&lt;br /&gt;
  PluginSessionRenegotiation&lt;br /&gt;
  PluginCertInfo&lt;br /&gt;
  PluginSessionResumption&lt;br /&gt;
  PluginOpenSSLCipherSuites&lt;br /&gt;
  PluginCompression&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 CHECKING HOST(S) AVAILABILITY&lt;br /&gt;
 -----------------------------&lt;br /&gt;
&lt;br /&gt;
  example.com:443                      =&amp;gt; 127.0.0.1:443&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 SCAN RESULTS FOR EXAMPLE.COM:443 - 127.0.0.1:443&lt;br /&gt;
 ---------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
  * Compression :&lt;br /&gt;
        Compression Support:      Disabled&lt;br /&gt;
&lt;br /&gt;
  * Session Renegotiation :&lt;br /&gt;
      Client-initiated Renegotiations:    Rejected&lt;br /&gt;
      Secure Renegotiation:               Supported&lt;br /&gt;
&lt;br /&gt;
  * Certificate :&lt;br /&gt;
      Validation w/ Mozilla's CA Store:  Certificate is NOT Trusted: unable to get local issuer certificate&lt;br /&gt;
      Hostname Validation:               MISMATCH                           &lt;br /&gt;
      SHA1 Fingerprint:                  ******&lt;br /&gt;
&lt;br /&gt;
      Common Name:                       www.example.com                     &lt;br /&gt;
      Issuer:                            ******&lt;br /&gt;
      Serial Number:                     ****                               &lt;br /&gt;
      Not Before:                        Sep 26 00:00:00 2010 GMT           &lt;br /&gt;
      Not After:                         Sep 26 23:59:59 2020 GMT   &lt;br /&gt;
       &lt;br /&gt;
      Signature Algorithm:               sha1WithRSAEncryption              &lt;br /&gt;
      Key Size:                          1024 bit                           &lt;br /&gt;
      X509v3 Subject Alternative Name:   {'othername': ['&amp;lt;unsupported&amp;gt;'], 'DNS': ['www.example.com']}&lt;br /&gt;
&lt;br /&gt;
  * OCSP Stapling :&lt;br /&gt;
      Server did not send back an OCSP response.                                   &lt;br /&gt;
&lt;br /&gt;
  * Session Resumption :&lt;br /&gt;
      With Session IDs:           Supported (5 successful, 0 failed, 0 errors, 5 total attempts).&lt;br /&gt;
      With TLS Session Tickets:   Supported&lt;br /&gt;
&lt;br /&gt;
  * SSLV2 Cipher Suites :&lt;br /&gt;
&lt;br /&gt;
      Rejected Cipher Suite(s): Hidden &lt;br /&gt;
&lt;br /&gt;
      Preferred Cipher Suite: None     &lt;br /&gt;
&lt;br /&gt;
      Accepted Cipher Suite(s): None   &lt;br /&gt;
&lt;br /&gt;
      Undefined - An unexpected error happened: None &lt;br /&gt;
&lt;br /&gt;
  * SSLV3 Cipher Suites :&lt;br /&gt;
&lt;br /&gt;
      Rejected Cipher Suite(s): Hidden &lt;br /&gt;
&lt;br /&gt;
      Preferred Cipher Suite:          &lt;br /&gt;
        RC4-SHA                       128 bits      HTTP 200 OK                        &lt;br /&gt;
&lt;br /&gt;
      Accepted Cipher Suite(s):        &lt;br /&gt;
        CAMELLIA256-SHA               256 bits      HTTP 200 OK                        &lt;br /&gt;
        RC4-SHA                       128 bits      HTTP 200 OK                        &lt;br /&gt;
        CAMELLIA128-SHA               128 bits      HTTP 200 OK                        &lt;br /&gt;
&lt;br /&gt;
      Undefined - An unexpected error happened: None &lt;br /&gt;
&lt;br /&gt;
  * TLSV1_1 Cipher Suites :&lt;br /&gt;
&lt;br /&gt;
      Rejected Cipher Suite(s): Hidden &lt;br /&gt;
&lt;br /&gt;
      Preferred Cipher Suite: None     &lt;br /&gt;
&lt;br /&gt;
      Accepted Cipher Suite(s): None   &lt;br /&gt;
&lt;br /&gt;
      Undefined - An unexpected error happened: &lt;br /&gt;
        ECDH-RSA-AES256-SHA             socket.timeout - timed out         &lt;br /&gt;
        ECDH-ECDSA-AES256-SHA           socket.timeout - timed out         &lt;br /&gt;
&lt;br /&gt;
  * TLSV1_2 Cipher Suites :&lt;br /&gt;
&lt;br /&gt;
      Rejected Cipher Suite(s): Hidden &lt;br /&gt;
&lt;br /&gt;
      Preferred Cipher Suite: None     &lt;br /&gt;
&lt;br /&gt;
      Accepted Cipher Suite(s): None   &lt;br /&gt;
&lt;br /&gt;
      Undefined - An unexpected error happened: &lt;br /&gt;
        ECDH-RSA-AES256-GCM-SHA384      socket.timeout - timed out         &lt;br /&gt;
        ECDH-ECDSA-AES256-GCM-SHA384    socket.timeout - timed out         &lt;br /&gt;
&lt;br /&gt;
  * TLSV1 Cipher Suites :&lt;br /&gt;
&lt;br /&gt;
      Rejected Cipher Suite(s): Hidden &lt;br /&gt;
&lt;br /&gt;
      Preferred Cipher Suite:          &lt;br /&gt;
        RC4-SHA                       128 bits      Timeout on HTTP GET                &lt;br /&gt;
&lt;br /&gt;
      Accepted Cipher Suite(s):        &lt;br /&gt;
        CAMELLIA256-SHA               256 bits      HTTP 200 OK                        &lt;br /&gt;
        RC4-SHA                       128 bits      HTTP 200 OK                        &lt;br /&gt;
        CAMELLIA128-SHA               128 bits      HTTP 200 OK                        &lt;br /&gt;
&lt;br /&gt;
      Undefined - An unexpected error happened: &lt;br /&gt;
        ADH-CAMELLIA256-SHA             socket.timeout - timed out         &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 SCAN COMPLETED IN 9.68 S&lt;br /&gt;
 ------------------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Testing SSL certificate validity – client and server===&lt;br /&gt;
Firstly upgrade your browser because also CA certs expire and, in every release of the browser, these are been renewed.&lt;br /&gt;
Examine the validity of the certificates used by the application. Browsers will issue a warning when encountering expired certificates, certificates issued by untrusted CAs, and certificates which do not match namewise with the site to which they should refer. By clicking on the padlock which appears in the browser window when visiting an HTTPS site, you can look at information related to the certificate – including the issuer, period of validity, encryption characteristics, etc. If the application requires a client certificate, you probably have installed one to access it. Certificate information is available in the browser by inspecting the relevant certificate(s) in the list of the installed certificates. &lt;br /&gt;
These checks must be applied to all visible SSL-wrapped communication channels used by the application. Though this is the usual https service running on port 443, there may be additional services involved depending on the web application architecture and on deployment issues (an HTTPS administrative port left open, HTTPS services on non-standard ports, etc.). Therefore, apply these checks to all SSL-wrapped ports which have been discovered. For example, the nmap scanner features a scanning mode (enabled by the –sV command line switch) which identifies SSL-wrapped services. The Nessus vulnerability scanner has the capability of performing SSL checks on all SSL/TLS-wrapped services. &lt;br /&gt;
&lt;br /&gt;
Some tools, as in previous examples, check also for certificate validity.&lt;br /&gt;
&lt;br /&gt;
====Example 7. Testing for certificate validity (manually)====&lt;br /&gt;
Rather than providing a fictitious example, we have inserted an anonymized real-life example to stress how frequently one stumbles on https sites whose certificates are inaccurate with respect to naming. &lt;br /&gt;
The following screenshots refer to a regional site of a high-profile IT company. &lt;br /&gt;
&lt;br /&gt;
We are visiting an .it site and the certificate was issued to a .com site! Internet Explorer warns that the name on the certificate does not match the name of the site. &lt;br /&gt;
&lt;br /&gt;
[[Image:SSL Certificate Validity Testing IE Warning.gif]]&lt;br /&gt;
''Warning issued by Microsoft Internet Explorer''&lt;br /&gt;
&lt;br /&gt;
The message issued by Firefox is different – Firefox complains because it cannot ascertain the identity of the .com site the certificate refers to because it does not know the CA which signed the certificate. In fact, Internet Explorer and Firefox do not come preloaded with the same list of CAs. Therefore, the behavior experienced with various browsers may differ.&lt;br /&gt;
&lt;br /&gt;
[[Image:SSL Certificate Validity Testing Firefox Warning.gif]]&lt;br /&gt;
''Warning issued by Mozilla Firefox''&lt;br /&gt;
&lt;br /&gt;
===Testing for other vulnerabilities===&lt;br /&gt;
As mentioned previously there are other types of vulnerabilities that are not related with the SSL/TLS protocol used, the cipher suites or Certificates. A part from others discussed in other parts of the Guide, the another one is possible when the server provide the website both with the HTTP and HTTPS protocols, and permit to an attacker to force a victim into using a non-secure channel instead of a secure one.&lt;br /&gt;
&lt;br /&gt;
====Surf Jacking====&lt;br /&gt;
Surf Jacking attack [7] was first presented by Sandro Gauci and permits to an attacker to hijack an HTTP session even when the victim’s connection is encrypted using SSL or TLS.&lt;br /&gt;
The following is a scenario of how the attack can take place:&lt;br /&gt;
&lt;br /&gt;
The following is a scenario of how the attack can take place:&lt;br /&gt;
* Victim logs into the secure website at https://somesecuresite/.&lt;br /&gt;
* The secure site issues a session cookie as the client logs in.&lt;br /&gt;
* While logged in, the victim opens a new browser window and goes to http:// examplesite/&lt;br /&gt;
* An attacker sitting on the same network is able to see the clear text traffic to http://examplesite.&lt;br /&gt;
* The attacker sends back a &amp;quot;301 Moved Permanently&amp;quot; in response to the clear text traffic to http://examplesite. The response contains the header “Location: http://somesecuresite /”, which makes it appear that examplesite is sending the web browser to somesecuresite. Notice that the URL scheme is HTTP not HTTPS.&lt;br /&gt;
* The victim's browser starts a new clear text connection to http://somesecuresite/ and sends an HTTP request containing cookie in the HTTP header in clear text&lt;br /&gt;
* The attacker sees this traffic and logs the cookie for later (ab)use.&lt;br /&gt;
To test if a website is vulnerable is sufficient to proceed like follow:&lt;br /&gt;
# Check if website supports both HTTP and HTTPS protocol&lt;br /&gt;
# Check if cookies do not have the “Secure” flag&lt;br /&gt;
&lt;br /&gt;
====SSL Strip====&lt;br /&gt;
Often applications supports both HTTP and HTTPS. As for usability or because users do not use to type “https://www.example.com”. Often users go into an HTTPS website from link or a redirect. Typically also home banking site have a similar configuration with an iframed login or a form with action attribute over HTTPS but the page under HTTP.&lt;br /&gt;
An attacker in a privileged position - as described in SSL strip [8] - can incercept traffic when user is into HTTP and manipulate it to get a Man-In-The-Middle attack under HTTPS.&lt;br /&gt;
To test if application is vulnerable is sufficient the website supports both HTTP and HTTPS.&lt;br /&gt;
&lt;br /&gt;
===Testing via HTTP proxy===&lt;br /&gt;
&lt;br /&gt;
Inside corporate environments you can see services that are not directly accessible and you can access them only via HTTP proxy using the CONNECT method [36]. Most of the tools will not work in this scenario because they try to connect to desired tcp port in order to start SSL/TLS handshake. With the help of relaying software such as socat [37] you can re-enable those tools for use with services behind HTTP proxy.&lt;br /&gt;
&lt;br /&gt;
====Example 8. Testing via HTTP proxy==== &lt;br /&gt;
&lt;br /&gt;
To connect to destined.application.lan:443 via proxy 10.13.37.100:3128 run socat as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ socat TCP-LISTEN:9999,reuseaddr,fork PROXY:10.13.37.100:destined.application.lan:443,proxyport=3128&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you can target all other tools to localhost:9999:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ openssl s_client -connect localhost:9999&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All connections to localhost:9999 will be effectively relayed by socat via proxy to destined.application.lan:443.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Gray Box testing and example ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Testing for Weak SSL/TLS Cipher Suites===&lt;br /&gt;
Check the configuration of the web servers which provide https services. If the web application provides other SSL/TLS wrapped services, these should be checked as well. &lt;br /&gt;
&lt;br /&gt;
====Example 9. Windows Server==== &lt;br /&gt;
Check the configuration on a Microsoft Windows Server (2000, 2003 and 2008) using the registry key:&lt;br /&gt;
&amp;lt;pre&amp;gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\&amp;lt;/pre&amp;gt;&lt;br /&gt;
which has some sub-keys like Ciphers, Protocols and KeyExchangeAlgorithms.&lt;br /&gt;
&lt;br /&gt;
====Example 10: Apache====&lt;br /&gt;
To check the cipher suites and protocols supported by Apache2 web server open the ssl.conf file and search for the SSLCipherSuite, SSLProtocol, SSLHonorCipherOrder,SSLInsecureRenegotiation and SSLCompression directives.&lt;br /&gt;
&lt;br /&gt;
===Testing SSL certificate validity – client and server===&lt;br /&gt;
Examine the validity of the certificates used by the application at both server and client levels. The usage of certificates is primarily at the web server level; however, there may be additional communication paths protected by SSL (for example, towards the DBMS). You should check the application architecture to identify all SSL protected channels.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
'''OWASP Resources'''&lt;br /&gt;
* [5] [OWASP Testing Guide - Testing for cookie attributes (OTG-SESS-002)|https://www.owasp.org/index.php/Testing_for_cookies_attributes_(OWASP-SM-002)]&lt;br /&gt;
* [4][OWASP Testing Guide - Test Network/Infrastructure Configuration (OTG-CONFIG-001)|https://www.owasp.org/index.php/Testing_for_infrastructure_configuration_management_(OWASP-CM-003)]&lt;br /&gt;
* [6] [OWASP Testing |https://www.owasp.org/index.php/Testing_for_cookies_attributes_(OWASP-SM-002)][Guide - Testing for Missing HSTS header (OTG-CONFIG-009)|https://www.owasp.org/index.php/Testing_for_Missing_HSTS_header]&lt;br /&gt;
* [2] [OWASP Testing Guide - Testing for Sensitive information sent via unencrypted channels (OTG-CRYPST-007)|https://www.owasp.org/index.php?title=Testing_for_Sensitive_information_sent_via_unencrypted_channels_(OTG-CRYPST-007)&amp;amp;action=edit&amp;amp;redlink=1]&lt;br /&gt;
* [3] [OWASP Testing Guide - Testing for Credentials Transported over an Encrypted Channel (OWASP-AT-001)|https://www.owasp.org/index.php/Testing_for_Credentials_Transported_over_an_Encrypted_Channel_(OWASP-AT-001)]&lt;br /&gt;
* [9] [OWASP Testing Guide - Test Content Security Policy (OTG-CONFIG-008)|https://www.owasp.org/index.php/Testing_for_Content_Security_Policy_weakness]&lt;br /&gt;
* [22] [OWASP Cheat sheet - Transport Layer Protection|https://www.owasp.org/index.php/Transport_Layer_Protection_Cheat_Sheet]&lt;br /&gt;
* [23] [OWASP TOP 10 2013 - A6 Sensitive Data Exposure|https://www.owasp.org/index.php/Top_10_2013-A6-Sensitive_Data_Exposure]&lt;br /&gt;
* [24] [OWASP TOP 10 2010 - A9 Insufficient Transport Layer Protection|https://www.owasp.org/index.php/Top_10_2010-A9-Insufficient_Transport_Layer_Protection]&lt;br /&gt;
* [25] [OWASP ASVS 2009 - Verification 10|https://code.google.com/p/owasp-asvs/wiki/Verification_V10]&lt;br /&gt;
* [26] [OWASP Application Security FAQ - Cryptography/SSL|https://www.owasp.org/index.php/OWASP_Application_Security_FAQ#Cryptography.2FSSL]&lt;br /&gt;
&lt;br /&gt;
'''Whitepapers'''&lt;br /&gt;
* [1] [RFC5246 - The Transport Layer Security (TLS) Protocol Version 1.2 (Updated by RFC 5746, RFC 5878, RFC 6176)|http://www.ietf.org/rfc/rfc5246.txt]&lt;br /&gt;
* [36] [RFC2817 - Upgrading to TLS Within HTTP/1.1|]&lt;br /&gt;
* [34] [RFC6066 - Transport Layer Security (TLS) Extensions: Extension Definitions|http://www.ietf.org/rfc/rfc6066.txt]&lt;br /&gt;
* [11] [SSLv2 Protocol Multiple Weaknesses |http://osvdb.org/56387]&lt;br /&gt;
* [12] [Mitre - TLS Renegotiation MiTM|http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3555]&lt;br /&gt;
* [13] [Qualys SSL Labs - TLS Renegotiation DoS|https://community.qualys.com/blogs/securitylabs/2011/10/31/tls-renegotiation-and-denial-of-service-attacks]&lt;br /&gt;
* [10] [Qualys SSL Labs - SSL/TLS Deployment Best Practices|https://www.ssllabs.com/projects/best-practices/index.html]&lt;br /&gt;
* [14] [Qualys SSL Labs - SSL Server Rating Guide|https://www.ssllabs.com/projects/rating-guide/index.html]&lt;br /&gt;
* [20] [Qualys SSL Labs - SSL Threat Model|https://www.ssllabs.com/projects/ssl-threat-model/index.html]&lt;br /&gt;
* [18] [Qualys SSL Labs - Forward Secrecy|https://community.qualys.com/blogs/securitylabs/2013/06/25/ssl-labs-deploying-forward-secrecy]&lt;br /&gt;
* [15] [Qualys SSL Labs - RC4 Usage|https://community.qualys.com/blogs/securitylabs/2013/03/19/rc4-in-tls-is-broken-now-what]&lt;br /&gt;
* [16] [Qualys SSL Labs - BEAST|https://community.qualys.com/blogs/securitylabs/2011/10/17/mitigating-the-beast-attack-on-tls]&lt;br /&gt;
* [17] [Qualys SSL Labs - CRIME|https://community.qualys.com/blogs/securitylabs/2012/09/14/crime-information-leakage-attack-against-ssltls]&lt;br /&gt;
* [7] [SurfJacking attack|https://resources.enablesecurity.com/resources/Surf%20Jacking.pdf]&lt;br /&gt;
* [8] [SSLStrip attack|http://www.thoughtcrime.org/software/sslstrip/]&lt;br /&gt;
* [19] [PCI-DSS v2.0|https://www.pcisecuritystandards.org/security_standards/documents.php]&lt;br /&gt;
* [35] [Xiaoyun Wang, Hongbo Yu: How to Break MD5 and Other Hash Functions| http://link.springer.com/chapter/10.1007/11426639_2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Tools'''&lt;br /&gt;
* [21][Qualys SSL Labs - SSL Server Test|https://www.ssllabs.com/ssltest/index.html]: internet facing scanner&lt;br /&gt;
* [27] [Tenable - Nessus Vulnerability Scanner|http://www.tenable.com/products/nessus]: includes some plugins to test different SSL related vulnerabilities, Certificates and the presence of HTTP Basic authentication without SSL.&lt;br /&gt;
* [32] [TestSSLServer|http://www.bolet.org/TestSSLServer/]: a java scanner - and also windows executable - includes tests for cipher suites, CRIME and BEAST&lt;br /&gt;
* [33] [sslyze|https://github.com/iSECPartners/sslyze]: is a python script to check vulnerabilities in SSL/TLS.&lt;br /&gt;
* [28] [SSLAudit|https://code.google.com/p/sslaudit/]: a perl script/windows executable scanner which follows Qualys SSL Labs Rating Guide.&lt;br /&gt;
* [29] [SSLScan|http://sourceforge.net/projects/sslscan/] with [SSL Tests|http://www.pentesterscripting.com/discovery/ssl_tests]: a SSL Scanner and a wrapper in order to enumerate SSL vulnerabilities.&lt;br /&gt;
* [31] [nmap|http://nmap.org/]: can be used primary to identify SSL-based services and then to check Certificate and SSL/TLS vulnerabilities. In particular it has some scripts to check [Certificate and SSLv2|http://nmap.org/nsedoc/scripts/ssl-cert.html] and supported [SSL/TLS protocols/ciphers|http://nmap.org/nsedoc/scripts/ssl-enum-ciphers.html] with an internal rating.&lt;br /&gt;
* [30] [curl|http://curl.haxx.se/] and [openssl|http://www.openssl.org/]: can be used to query manually SSL/TLS services&lt;br /&gt;
* [9] [Stunnel|http://www.stunnel.org]: a noteworthy class of SSL clients is that of SSL proxies such as stunnel available at which can be used to allow non-SSL enabled tools to talk to SSL services)&lt;br /&gt;
* [37] [socat| http://www.dest-unreach.org/socat/]: Multipurpose relay&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
[[Category:Cryptographic Vulnerability]]&lt;br /&gt;
[[Category:SSL]]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=170106</id>
		<title>OWASP WebSpa Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_WebSpa_Project&amp;diff=170106"/>
				<updated>2014-03-14T00:50:52Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: /* News */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Main=&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;padding: 0;margin:0;margin-top:10px;text-align:left;&amp;quot; |-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
==OWASP WebSpa Project==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is a Java web knocking tool for sending a single HTTP/S request to your web server in order to authorize the execution of a premeditated Operating System (O/S) command. &lt;br /&gt;
It provides a cryptographically protected &amp;quot;open sesame&amp;quot; mechanism on the web application layer, comparable to well-known port-knocking techniques.&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
This project implements the concept of web knocking by offering a jar file that 'tails' the access log of an existing web server. A user submits a specially crafted URL, therefore executing a predefined O/S command. No new ports or services are created.&lt;br /&gt;
&lt;br /&gt;
Similarly to traditional network port-knocking schemes, the OWASP WebSpa Project aims to create a covert channel of communication for O/S commands over the web application layer. This channel is by no means bi-directional: It is only the client that can issue commands to the server. The inverse, i.e. the server issuing commands to the client, is not an option within the current version.&lt;br /&gt;
&lt;br /&gt;
==Licensing==&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is free to use. It is licensed under the http://creativecommons.org/licenses/by-sa/3.0/ Creative Commons Attribution-ShareAlike 3.0 license], so you can copy, distribute and transmit the work, and you can adapt it, and use it commercially, but all provided that you attribute the work and if you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.&lt;br /&gt;
&lt;br /&gt;
The source code that comes with the OWASP WebSpa Project in the form of the tool named Web-Spa is released as open source software under the terms of the [http://www.gnu.org/licenses/quick-guide-gplv3.html GNU Public License (GPL) version 3]. For reference, the full text of the GPL_v3 can be downloaded from the [http://www.fsf.org/ Free Software Foundation]. There are no plans to change the license; web-spa will always remain an open source project free for use by anyone subject to the terms of the license. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;border-right: 1px dotted gray;padding-right:25px;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== What is WebSpa? ==&lt;br /&gt;
&lt;br /&gt;
OWASP WebSpa provides:&lt;br /&gt;
&lt;br /&gt;
* A secure channel for executing premeditated O/S commands on your web server&lt;br /&gt;
* A resource-efficient single jar-file that can either be run as server, or client application, depending on the command line parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Presentation ==&lt;br /&gt;
&lt;br /&gt;
https://code.google.com/p/web-spa/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot;  style=&amp;quot;padding-left:25px;width:200px;&amp;quot; | &lt;br /&gt;
&lt;br /&gt;
== Quick Download ==&lt;br /&gt;
&lt;br /&gt;
* http://goo.gl/4T82Ug&lt;br /&gt;
&lt;br /&gt;
==Classifications==&lt;br /&gt;
&lt;br /&gt;
   {| width=&amp;quot;200&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot; rowspan=&amp;quot;2&amp;quot;| [[File:Owasp-incubator-trans-85.png|link=https://www.owasp.org/index.php/OWASP_Project_Stages#tab=Incubator_Projects]]&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-builders-small.png|link=]]  &lt;br /&gt;
   |-&lt;br /&gt;
   | align=&amp;quot;center&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| [[File:Owasp-defenders-small.png|link=]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Cc-button-y-sa-small.png|link=http://creativecommons.org/licenses/by-sa/3.0/]]&lt;br /&gt;
   |-&lt;br /&gt;
   | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;  | [[File:Project_Type_Files_CODE.jpg|link=]]&lt;br /&gt;
   |}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Videos =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|eHlYnWyf35E|300|right|OWASP Web Knocking Project Demo}} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|eHlYnWyf35E|300|right|OWASP Web Knocking Project Demo}} &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|eHlYnWyf35E|300|right|OWASP Web Knocking Project Demo}} &lt;br /&gt;
|&lt;br /&gt;
{{#ev:youtube|eHlYnWyf35E|300|right|OWASP Web Knocking Project Demo}} &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Tutorial =&lt;br /&gt;
&lt;br /&gt;
== Supporting Documentation ==&lt;br /&gt;
&lt;br /&gt;
The discrepant event discussed herein is web knocking. Within the latest [http://sourceforge.net/projects/webspa/files/latest/download?source=directory download] you can find three documents with the purpose of describing how WebSpa can be used. The three documents are:&lt;br /&gt;
&lt;br /&gt;
* ''''WebSpa Administration Guide''' This document describes how to setup and use the server component. It details how to create new users and add new action numbers with respective O/S commands assigned to them&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa Specification Guide''' This document describes the actual design detailing the use case, specification, requirements and actual attacks, which this tool has been engineered to withstand&lt;br /&gt;
&lt;br /&gt;
* '''WebSpa User Guide''' This document describes how to use the client for issuing commands through a URL request to a web server&lt;br /&gt;
&lt;br /&gt;
The administration guide aims to enable anyone who would be interested in using WebSpa to be able to setup the server side component of it. After configuring the server component of WebSpa, you'll be ready to use the corresponding client for issuing direct actions as O/S commands to it.&lt;br /&gt;
&lt;br /&gt;
If this is your first time using WebSpa, please note that the server operations described in this document, will not work if a WebSpa client does not submit a web-knock to your web server in a timely manner.&lt;br /&gt;
&lt;br /&gt;
Thus, knowing a client implementation goes hand-in-hand with a server instance for it, please also have a look at the WebSpa user guide document to see how the two can be used in tandem. &lt;br /&gt;
&lt;br /&gt;
The user guide aims to enable anyone who would be interested in using web-spa to do so. As soon as you install the server side component and decide what actions to allow, you'll be ready to use the corresponding client for issuing direct actions that work for you.&lt;br /&gt;
&lt;br /&gt;
Finally, the specification guide aims to enable anyone who would be interested in implementing their own version of WebSpa to do so.&lt;br /&gt;
&lt;br /&gt;
== HelloWorld! Enabling SSH via Web Knocking with WebSpa ==&lt;br /&gt;
&lt;br /&gt;
In this section we describe the setup you should follow in order to get to the stage of being able to execute the video entitled: [https://www.youtube.com/watch?v=eHlYnWyf35E Enabling SSH via Web Knocking with Web-Spa (_v0.5)] on your server.&lt;br /&gt;
&lt;br /&gt;
We assume you can SSH into your web server using the user 'web-spa'. We also assume that the user 'web-spa' has permissions to run the necessary service start and stop commands for this service. So, let's login to the box and get the latest WebSpa download:&lt;br /&gt;
&lt;br /&gt;
 ssh web-spa@web.spa.seleucus.net&lt;br /&gt;
 web-spa@web:~$ cd /tmp&lt;br /&gt;
 web-spa@web:/tmp$ wget https://downloads.sourceforge.net/project/webspa/webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
It would be wise at this stage to check the SHA1 digest of what we just downloaded. Sourceforge publishes the SHA1 of all files available for download; copying the value into our command prompt yields:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ echo &amp;quot;a630f23f88c49d02b5895a3d7e16aad245c387f3 *webspa-06.zip&amp;quot; | sha1sum -c -&lt;br /&gt;
 webspa-06.zip: OK&lt;br /&gt;
 web-spa@web:/tmp$ &lt;br /&gt;
&lt;br /&gt;
Ok, so we have downloaded something that we can vouch for-ish. Let's extract and setup.&lt;br /&gt;
&lt;br /&gt;
 unzip webspa-06.zip&lt;br /&gt;
&lt;br /&gt;
A lot of noise comes back from this command. Apologies, different groups have clearly stated they have wanted the source code as well the documentation to be included within the download. Let's have a look at the install file:&lt;br /&gt;
&lt;br /&gt;
 =================================================&lt;br /&gt;
 - Prerequisites for web-spa&lt;br /&gt;
 =================================================&lt;br /&gt;
&lt;br /&gt;
 The following programs must be installed in order&lt;br /&gt;
 for web-spa to run:&lt;br /&gt;
&lt;br /&gt;
 - Java 1.6 or later&lt;br /&gt;
&lt;br /&gt;
If you don't have java installed, consider using the following command: &lt;br /&gt;
&lt;br /&gt;
 sudo aptitude install openjdk-7-jre&lt;br /&gt;
&lt;br /&gt;
This will meet the one prerequisite for using WebSpa. As this is a production server, docs and src folders will not be missed. Also, we like to store things in /opt, ergo:&lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/src/&lt;br /&gt;
 web-spa@web:/tmp$ rm -frv /tmp/web-spa-0.6/docs/&lt;br /&gt;
 web-spa@web:/tmp$ sudo mv -v /tmp/web-spa-0.6/ /opt&lt;br /&gt;
&lt;br /&gt;
We now have WebSpa in /opt, let's run the server and create some users. &lt;br /&gt;
&lt;br /&gt;
 web-spa@web:/tmp$ cd /opt/web-spa-0.6/&lt;br /&gt;
 web-spa@web:/opt/web-spa-0.6$ java -jar web-spa-0.6.jar -server&lt;br /&gt;
&lt;br /&gt;
 Web-Spa - Single HTTP/S Request Authorisation&lt;br /&gt;
 version 0.6 (web-spa@seleucus.net)&lt;br /&gt;
&lt;br /&gt;
 This is a holding prompt, type &amp;quot;exit&amp;quot; or &amp;quot;x&amp;quot; to quit&lt;br /&gt;
&lt;br /&gt;
 - type &amp;quot;service start&amp;quot; to start the web-spa server&lt;br /&gt;
 - type &amp;quot;help&amp;quot; or &amp;quot;?&amp;quot; for more options&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last line above is the server's holding prompt; all commands are issued via this prompt. In order to exit this prompt, type 'exit' or 'quit'. In the next step we will add 3 users and assign a unique pass-phrase to each one of them. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Yiannis Pavlosoglou&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: yiannis@xxxxxx.com&lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note that only a user's full name and pass-phrase are required to be entered. Let's create another user:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Oliver Merki&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that we did not specify a user's e-mail address nor a phone number, as both these fields were optional. Finally, adding a third user: &lt;br /&gt;
&lt;br /&gt;
  web-spa-server&amp;gt;user add&lt;br /&gt;
 =[Required] Enter the New User's Full Name: Patryk&lt;br /&gt;
 =[Required] Enter the New User's Pass-Phrase: &lt;br /&gt;
 =[Required] Re-enter the above value: &lt;br /&gt;
 -[Optional] Please enter the New User's Email Address: &lt;br /&gt;
 -[Optional] Please enter the New User's Phone Number: &lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Patryk we only specified his first name and a unique pass-phrase. You get the picture. Now that we have created our users, let's add some actions to each user. We would like to give Patryk the ability to bounce the SSH service; ergo, let's add two actions:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh start &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 1&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh start' to action number 1 for user Patryk. Let's also add the stop command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;action add&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 The existing actions for this user are: &lt;br /&gt;
 Actions for user with ID: 13&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 #  O/S Command                     Last Executed            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 1  sudo service ssh start          has never been executed&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 =[Required] Enter the new O/S Command: sudo service ssh stop &lt;br /&gt;
 =[Required] Select an action number for this O/S Command [0,9]: 0&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above adds the O/S command 'sudo service ssh stop' to action number 0 for user Patryk. Two very important steps we must not forget is to enable the user Patryk and start the web-spa listening service. &lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;user activate&lt;br /&gt;
 Users:&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 ID  Active  Full Name               Last Modified            &lt;br /&gt;
 -----------------------------------------------------------&lt;br /&gt;
 11  false   Yiannis Pavlosoglou     2014-02-23 12:09:26.240&lt;br /&gt;
 12  false   Oliver Merki            2014-02-23 12:12:13.313&lt;br /&gt;
 13  false   Patryk                  2014-02-23 12:14:57.895&lt;br /&gt;
 ___________________________________________________________&lt;br /&gt;
 -[Optional] Select a User ID: 13&lt;br /&gt;
 User with ID: 13 is in-active&lt;br /&gt;
 -[Optional] Toggle user activation [Y/n]: &lt;br /&gt;
 User with ID: 13 is active&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 And finally issue the service start command:&lt;br /&gt;
&lt;br /&gt;
 web-spa-server&amp;gt;service start&lt;br /&gt;
 [2014-02-23 12-36-07] Attempting to start web-spa...&lt;br /&gt;
 [2014-02-23 12-36-07] Found access log file: /...cus.net/logs/access.log&lt;br /&gt;
 [2014-02-23 12-36-07] Creating tail listener...&lt;br /&gt;
 [2014-02-23 12-36-07] Web-spa server started!&lt;br /&gt;
 [2014-02-23 12-36-07] Please make sure your web server is also up&lt;br /&gt;
 web-spa-server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= News =&lt;br /&gt;
&lt;br /&gt;
* [14 Mar 2014] [https://code.google.com/p/web-spa/ Scheduled the deletion of the Google code project, given that downloads require a new account]&lt;br /&gt;
* [04 Mar 2014] [https://soundcloud.com/#owasp-podcast/the-owasp-webspa-project-with The WebSpa podcast has now been available!] &lt;br /&gt;
* [22 Feb 2014] Created the WebSpa project on sourceforge, started the import from google code&lt;br /&gt;
* [22 Dec 2013] Version 0.6 has been released and can be found in the download section&lt;br /&gt;
* [08 Nov 2013] The OWASP Web Knocking Project is created&lt;br /&gt;
&lt;br /&gt;
=FAQs=&lt;br /&gt;
&lt;br /&gt;
; Q1&lt;br /&gt;
: A1&lt;br /&gt;
&lt;br /&gt;
; Q2&lt;br /&gt;
: A2&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
&lt;br /&gt;
The OWASP WebSpa Project is developed by a worldwide team of volunteers. Below is a list of all people that have contributed to the project so far.&lt;br /&gt;
&lt;br /&gt;
Active contributors:&lt;br /&gt;
* Yiannis Pavlosoglou&lt;br /&gt;
* Patryk Arciszewski&lt;br /&gt;
* Oliver Merki&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Retired contributors:&lt;br /&gt;
* [[User:Dr. Markus Maria Miedaner|Markus Maria Miedaner]]&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
&lt;br /&gt;
== Release 0.9 (Q2-Q3/2014) == &lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.9 will examine attacks on the web knocking tool and propose controls in order to address the issues in question. &lt;br /&gt;
&lt;br /&gt;
== Release 0.8 (Q2/2014) ==&lt;br /&gt;
&lt;br /&gt;
WebSpa_v0.8 will incorporate in the server side component (run with -server option) the ability for a web-spa administrator to generate a single output of all actions available for a Web Knocking user.&lt;br /&gt;
&lt;br /&gt;
== Release 0.7 (Q1/2014) ==&lt;br /&gt;
&lt;br /&gt;
This is the next release of web-spa. The next release has not been scheduled yet.&lt;br /&gt;
&lt;br /&gt;
For WebSpa_v0.7, a Java write-up of a number of test cases so that to increase test coverage within the tool. The ability to reset the pass-phrase for a web-spa user will also be added. &lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-06.zip Release 0.6 (21/Dec/2013)] ==&lt;br /&gt;
&lt;br /&gt;
This is the current release of web-spa. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.6 offers enhanced logging functionality, fixing a bug that caused the server to become unresponsive upon starting and stopping. The client now offers to transmit a web knock request, thus not requiring for a user to copy-paste the URL into their browser. &lt;br /&gt;
&lt;br /&gt;
Additional test cases have been added, the option &amp;quot;?&amp;quot; is now available to offer &amp;quot;help&amp;quot; and the log functionality tracks via means of a timestamp all events logged&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-05.zip Release 0.5 (21/Oct/2013)] ==&lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.5 shortens the number of inputs required from a legitimate user of web-spa to only two: A valid pass-phrase, unique for each user and a single digit in the range of [0-9]. We refer to the latter as an action number and it represents a premeditated Operating System (O/S) command.&lt;br /&gt;
&lt;br /&gt;
All the functionality (for both the client and the server) is now within a single jar file, accompanied by detailed documentation:&lt;br /&gt;
&lt;br /&gt;
 - 00-web-spa-administration-guide.pdf	&lt;br /&gt;
 - 00-web-spa-specification-guide.pdf	&lt;br /&gt;
 - 00-web-spa-user-guide.pdf&lt;br /&gt;
&lt;br /&gt;
The server side functionality has been re-designed to operate with a single configuration file (created at first run) as well as a HyperSQL embedded file database (also created at first run).&lt;br /&gt;
&lt;br /&gt;
Finally, no files are created or are required when web-spa runs in client mode, with the '-client' option.&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-04.zip Release 0.4 (27/Aug/2011)] == &lt;br /&gt;
&lt;br /&gt;
A number of updates and bug fixes have been included within this version. Also, an update on the actual message format to further protect from replay attacks has been included. &lt;br /&gt;
&lt;br /&gt;
WebSpa _v0.4 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-04.jar&lt;br /&gt;
 * webspa-elements-04.jar&lt;br /&gt;
 * webspa-server-04.jar&lt;br /&gt;
&lt;br /&gt;
== [https://code.google.com/p/web-spa/downloads/detail?name=webspa-03.zip Release 0.3 (11/Jul/2011)] ==&lt;br /&gt;
&lt;br /&gt;
In its first usable release, WebSpa _v0.3 contains the necessary client and server components, as well as an elements API library. Thus, the files within the download are:&lt;br /&gt;
 * webspa-client-03.jar&lt;br /&gt;
 * webspa-elements-03.jar&lt;br /&gt;
 * webspa-server-03.jar&lt;br /&gt;
&lt;br /&gt;
== Contribution ==&lt;br /&gt;
&lt;br /&gt;
Involvement in the development and promotion of the OWASP WebSpa Project is actively encouraged!&lt;br /&gt;
You do not have to be a security expert in order to contribute.&lt;br /&gt;
Some of the ways you can help:&lt;br /&gt;
* Quality assurance of resolved defects&lt;br /&gt;
* Java development (good knowledge of Java desirable)&lt;br /&gt;
&lt;br /&gt;
=Project About=&lt;br /&gt;
{{:Projects/OWASP_WebSpa_Project}}  &lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &amp;lt;headertabs /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Project]]  [[Category:OWASP_Builders]] [[Category:OWASP_Defenders]]  [[Category:OWASP_Document]]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_Session_Management&amp;diff=170105</id>
		<title>Testing for Session Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_Session_Management&amp;diff=170105"/>
				<updated>2014-03-14T00:44:01Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: Testing Guide V4: Review_v1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
''' 4.5 Session Management Testing'''&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
One of the core components of any web-based application is the mechanism by which it controls and maintains the state for a user interacting with it. We refer to this as Session Management and define it as the set of all controls governing state-full interaction between a user and the web-based application. This broadly covers anything from how user authentication is performed, to what happens upon them logging out. &lt;br /&gt;
&lt;br /&gt;
HTTP is a stateless protocol, meaning that web servers respond to client requests without linking them to each other.  Even simple application logic requires a user's multiple requests to be associated with each other across a &amp;quot;session”.  This necessitates third party solutions – through either Off-The-Shelf (OTS) middleware and web server solutions, or bespoke developer implementations.  Most popular web application environments, such as ASP and PHP, provide developers with built-in session handling routines. Some kind of identification token will typically be issued, which will be referred to as a “Session ID” or Cookie.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
There are a number of ways in which a web application may interact with a user.  Each is dependent upon the nature of the site, the security, and availability requirements of the application.&lt;br /&gt;
Whilst there are accepted best practices for application development, such as those outlined in the [[OWASP Guide Project|OWASP Guide to Building Secure Web Applications]], it is important that application security is considered within the context of the provider’s requirements and expectations. In this chapter we describe the following items.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Testing for Session_Management_Schema (OWASP-SM-001)|4.7.1 Testing for Bypassing Session Management Schema (OTG-SESS-001)]]&lt;br /&gt;
&lt;br /&gt;
[[Testing for cookies attributes  (OWASP-SM-002)|4.7.2 Testing for Cookies attributes (OTG-SESS-002)]]&lt;br /&gt;
&lt;br /&gt;
[[Testing for Session Fixation  (OWASP-SM-003)|4.7.3 Testing for Session Fixation (OTG-SESS-003)]]&lt;br /&gt;
&lt;br /&gt;
[[Testing for Exposed Session Variables  (OWASP-SM-004)|4.7.4 Testing for Exposed Session Variables (OTG-SESS-004)]]&lt;br /&gt;
&lt;br /&gt;
[[Testing for CSRF  (OWASP-SM-005)|4.7.5 Testing for Cross Site Request Forgery (CSRF) (OTG-SESS-005)]]&lt;br /&gt;
&lt;br /&gt;
[[Testing for logout functionality (OWASP-SM-007)|4.7.6 Testing for logout functionality (OTG-SESS-007)]]&lt;br /&gt;
&lt;br /&gt;
[[Test Session Timeout (OTG-SESS-008)|4.7.7 Test Session Timeout (OTG-SESS-008)]]&lt;br /&gt;
&lt;br /&gt;
[[Testing for Session puzzling (OTG-SESS-010)|4.7.8 Testing for Session puzzling (OTG-SESS-010)]]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_logout_functionality_(OTG-SESS-006)&amp;diff=170102</id>
		<title>Testing for logout functionality (OTG-SESS-006)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_logout_functionality_(OTG-SESS-006)&amp;diff=170102"/>
				<updated>2014-03-14T00:13:39Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: Testing Guide V4: Review_v1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Brief Summary ==&lt;br /&gt;
Session termination is an important part of the session lifecycle. Reducing to a minimum the lifetime of the session token(s) decreases the likelihood of a successful session hijacking attack. This can be seen as a control against preventing other attacks like Cross Site Scripting and Cross Site Request Forgery. Such attacks have been known to rely on a user having an authenticated session present. Not having a secure session termination only increases the attack surface for any of these attacks. &lt;br /&gt;
&lt;br /&gt;
A secure session termination requires at least the following components:&lt;br /&gt;
&lt;br /&gt;
* Availability of user interface controls for manual logouts performed by the user.&lt;br /&gt;
* Session termination after a given amount of time without activity (session timeout).&lt;br /&gt;
* Proper invalidation of server-side session state.&lt;br /&gt;
&lt;br /&gt;
== Description of the Issue == &lt;br /&gt;
&lt;br /&gt;
There are multiple issues which can prevent the effective termination of a session. For the ideal secure web application, a user should be able to terminate at any time through the user interface. Every page should contain a logout button on a place where it is directly visible. Unclear or ambiguous logout functions could cause the user not trusting such functionality.&lt;br /&gt;
&lt;br /&gt;
Another common mistake in session termination is, that the client-side session token is set to a new value while the server-side state remains active and can be reused by setting the session cookie back to the previous value. Sometimes only a confirmation message is shown to the user without performing any further action. This should be avoided. &lt;br /&gt;
&lt;br /&gt;
Users of web browsers often don't mind that an application is still open and just close the browser or a tab. A web application should be aware of this behavior and terminate the session automatically on the server-side after a defined amount of time.&lt;br /&gt;
&lt;br /&gt;
The usage of a single sign-on (SSO) system instead of an application-specific authentication scheme often causes the coexistence of multiple sessions which have to be terminated separately. For instance, the termination of the application-specific session does not terminate the session in the SSO system. Navigating back to the SSO portal offers the user the possibility to relogin back to the application where the logout was performed just before. On the other side a logout function in a SSO system does not necessarily causes session termination in connected applications.&lt;br /&gt;
&lt;br /&gt;
== Black Box testing and example ==&lt;br /&gt;
'''Testing for logout user interface:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Verify the appearance and visibility of the logout functionality in the user interface. For this purpose, view each page from the perspective of an user who has the intention to logout from the web application.&lt;br /&gt;
&lt;br /&gt;
'''Result Expected:'''&amp;lt;br&amp;gt;&lt;br /&gt;
There are some properties which indicate a good logout user interface:&lt;br /&gt;
* A logout button is present on all pages of the web application.&lt;br /&gt;
* The logout button should be identified quickly by an user which wants to logout from the web application.&lt;br /&gt;
* After loading of a page the logout button should be visible without scrolling.&lt;br /&gt;
* Ideally the logout button is placed in an area of the page, which is fixed in the view port of the browser and not affected by scrolling of the content.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Testing for server-side session termination:'''&amp;lt;br&amp;gt;&lt;br /&gt;
First, store the values of cookies which are used to identify a session. Invoke the logout function and observe the behavior of the application, especially regarding session cookies. Try to navigate to a page which is only visible in an authenticated session, e.g. by usage of the back button of the browser. If a cached version of the page is displayed, use the reload button to refresh the page from the server. If the logout function causes that session cookies are set to a new value, restore the old value of the session cookies and reload a page from the authenticated area of the application. If these test don't show any vulnerabilities on a particular page, try at least some further pages of the application which are considered as security-critical, to ensure that session termination is recognized properly by these areas of the application.&lt;br /&gt;
&lt;br /&gt;
'''Result Expected:'''&amp;lt;br&amp;gt;&lt;br /&gt;
No data which should be visible only by authenticated users should be visible on the examined pages while performing the tests. Ideally the application redirects to a public area or a login form while accessing authenticated areas after termination of the session.&lt;br /&gt;
&lt;br /&gt;
It should be not necessary for the security of the application, but setting session cookies to new values after logout is generally considered as good practice.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Testing for session timeout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Try to determine a session timeout by performing requests to a page in the authenticated area of the web application with increasing delays. If the logout behavior appears, the used delay matches approximately the session timeout value.&lt;br /&gt;
&lt;br /&gt;
'''Result Expected:'''&amp;lt;br&amp;gt;&lt;br /&gt;
The same results as for server-side session termination testing described before are excepted by a logout caused by an inactivity timeout.&lt;br /&gt;
&lt;br /&gt;
The proper value for the session timeout highly depends on the purpose of the application and should be a balance of security and usability. In a banking applications it makes normally no sense to keep an inactive session more than 15 minutes. On the other side a short timeout in a wiki or forum could annoy users which are typing lengthy articles with unnecessary login requests. There timeouts of an hour and more can be acceptable.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Testing for session termination in single sign-on environments (single sign-off):'''&amp;lt;br&amp;gt;&lt;br /&gt;
Perform a logout in the tested application. Verify if there is a central portal or application directory which allows the user to relogin to the application without authentication. Test if the application requests the user to authenticate, if the URL of an entry point to the application is requested.&lt;br /&gt;
&lt;br /&gt;
While logged in in the tested application, perform a logout in the SSO system. Then try to access an authenticated area of the tested application.&lt;br /&gt;
&lt;br /&gt;
'''Result Expected:'''&amp;lt;br&amp;gt;&lt;br /&gt;
It is expected that the invocation of a logout function in a web application connected to a SSO system or in the SSO system itself causes global termination of all sessions. An authentication of the user should be required to gain access to the application after logout in the SSO system and connected application.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
'''Whitepapers'''&lt;br /&gt;
* &amp;quot;The FormsAuthentication.SignOut method does not prevent cookie reply attacks in ASP.NET applications&amp;quot; - http://support.microsoft.com/default.aspx?scid=kb;en-us;900111&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tools'''&lt;br /&gt;
* &amp;quot;Burp Suite - Repeater&amp;quot; - http://portswigger.net/burp/repeater.html&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_Testing_Guide_Appendix_D:_Encoded_Injection&amp;diff=169821</id>
		<title>OWASP Testing Guide Appendix D: Encoded Injection</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_Testing_Guide_Appendix_D:_Encoded_Injection&amp;diff=169821"/>
				<updated>2014-03-09T22:56:04Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: Testing Guide V4: Review_v1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
&lt;br /&gt;
Character encoding is the process of mapping characters, numbers and other symbols to a standard format. Typically, this is done in order to create a message ready for transmission between sender and receiver. It is, in simple terms, the conversion of characters (belonging to different languages like English, Chinese, Greek or any other known language) into bytes. An example of a widely used character encoding scheme is the American Standard Code for Information Interchange (ASCII) that initially used 7-bit codes. More recent examples of encoding schemes would be the Unicode UTF-8 and UTF-16 computing industry standards. &lt;br /&gt;
&lt;br /&gt;
In the space of application security and due to the plethora of encoding schemes available, character encoding has a popular misuse. It is being used for encoding malicious injection strings in a way that obfuscates them. This can lead to the bypass of input validation filters, or take advantage of particular ways in which browsers render encoded text. &lt;br /&gt;
&lt;br /&gt;
== Input Encoding – Filter Evasion ==&lt;br /&gt;
&lt;br /&gt;
Web applications usually employ different types of input filtering mechanisms to limit the input that can be submitted by the user. If these input filters are not implemented sufficiently well, it is possible to slip a character or two through these filters. For instance, a / can be represented as 2F (hex) in ASCII, while the same character (/) is encoded as C0 AF in Unicode (2 byte sequence). Therefore, it is important for the input filtering control to be aware of the encoding scheme used. If the filter is found to be detecting only, say, UTF-8 encoded injections, a different encoding scheme may be employed to bypass this filter.&lt;br /&gt;
&lt;br /&gt;
== Output Encoding – Server &amp;amp; Browser Consensus ==&lt;br /&gt;
&lt;br /&gt;
Web browsers, in order to coherently display a web page, are required to be aware of the encoding scheme used. Ideally, this information should be provided to the browser in the HTTP header (“Content-Type”) field, as shown below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;Content-Type: text/html; charset=UTF-8&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt; or through HTML META tag (“META HTTP-EQUIV”), as shown below:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;META http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=ISO-8859-1&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is through these character encoding declarations that the browser understands which set of characters to use when converting bytes to characters.&lt;br /&gt;
Note: The content type mentioned in the HTTP header has precedence over the META tag declaration.&lt;br /&gt;
&lt;br /&gt;
CERT describes it here as follows:&lt;br /&gt;
&lt;br /&gt;
''Many web pages leave the character encoding (&amp;quot;charset&amp;quot; parameter in HTTP) undefined. In earlier versions of HTML and HTTP, the character encoding was supposed to default to ISO-8859-1 if it wasn't defined. In fact, many browsers had a different default, so it was not possible to rely on the default being ISO-8859-1. HTML version 4 legitimizes this - if the character encoding isn't specified, any character encoding can be used.&lt;br /&gt;
&lt;br /&gt;
If the web server doesn't specify which character encoding is in use, it can't tell which characters are special. Web pages with unspecified character encoding work most of the time because most character sets assign the same characters to byte values below 128. But which of the values above 128 are special? Some 16-bit character-encoding schemes have additional multi-byte representations for special characters such as &amp;quot;&amp;lt;&amp;quot;. Some browsers recognize this alternative encoding and act on it. This is &amp;quot;correct&amp;quot; behavior, but it makes attacks using malicious scripts much harder to prevent. The server simply doesn't know which byte sequences represent the special characters''&lt;br /&gt;
&lt;br /&gt;
Therefore in the event of not receiving the character encoding information from the server, the browser either attempts to ‘guess’ the encoding scheme or reverts to a default scheme. In some cases, the user explicitly sets the default encoding in the browser to a different scheme. Any such mismatch in the encoding scheme used by the web page (server) and the browser may cause the browser to interpret the page in a manner that is unintended or unexpected.&lt;br /&gt;
&lt;br /&gt;
==== Encoded Injections ====&lt;br /&gt;
&lt;br /&gt;
All the scenarios given below form only a subset of the various ways obfuscation can be achieved in order to bypass input filters. Also, the success of encoded injections depends on the browser in use. For example, US-ASCII encoded injections were previously successful only in IE browser but not in Firefox. Therefore, it may be noted that encoded injections, to a large extent, are browser dependent.&lt;br /&gt;
&lt;br /&gt;
==== Basic Encoding ====&lt;br /&gt;
&lt;br /&gt;
Consider a basic input validation filter that protects against injection of single quote character. In this case the following injection would easily bypass this filter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;SCRIPT&amp;gt;alert(String.fromCharCode(88,83,83))&amp;lt;/SCRIPT&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
String.fromCharCode Javascript function takes the given Unicode values and returns the corresponding string. This is one of the most basic forms of encoded injections. Another vector that can be used to bypass this filter is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;IMG SRC=javascript:alert(&amp;amp;quot ;XSS&amp;amp;quot ;)&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;IMG SRC=javascript:alert(&amp;amp;#34 ;XSS&amp;amp;#34 ;)&amp;gt; (Numeric reference)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above uses HTML Entities to construct the injection string. HTML Entities encoding is used to display characters that have a special meaning in HTML. For instance, ‘&amp;gt;’ works as a closing bracket for a HTML tag. In order to actually display this character on the web page HTML character entities should be inserted in the page source. The injections mentioned above are one way of encoding. There are numerous other ways in which a string can be encoded (obfuscated) in order to bypass the above filter.&lt;br /&gt;
&lt;br /&gt;
==== Hex Encoding ====&lt;br /&gt;
&lt;br /&gt;
Hex, short for Hexadecimal, is a base 16 numbering system i.e it has 16 different values from 0 to 9 and A to F to represent various characters. Hex encoding is another form of obfuscation that is, sometimes, used to bypass input validation filters. For instance, hex encoded version of the string &lt;br /&gt;
&amp;lt;IMG SRC=javascript:alert('XSS')&amp;gt; is&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;IMG SRC=%6A%61%76%61%73%63%72%69%70%74%3A%61%6C%65%72%74%28%27%58%53%53%27%29&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A variation of the above string is given below. Can be used in case ‘%’ is being filtered:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;IMG SRC=&amp;amp;#x6A&amp;amp;#x61&amp;amp;#x76&amp;amp;#x61&amp;amp;#x73&amp;amp;#x63&amp;amp;#x72&amp;amp;#x69&amp;amp;#x70&amp;amp;#x74&amp;amp;#x3A&amp;amp;#x61&amp;amp;#x6C&amp;amp;#x65&amp;amp;#x72&amp;amp;#x74&amp;amp;#x28&amp;amp;#x27&amp;amp;#x58&amp;amp;#x53&amp;amp;#x53&amp;amp;#x27&amp;amp;#x29&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are other encoding schemes like Base64 and Octal as well that may be used for obfuscation. Although, every encoding scheme may not work every time, a bit of trial and error coupled with intelligent manipulations would definitely reveal the loophole in a weakly built input validation filter.&lt;br /&gt;
&lt;br /&gt;
==== UTF-7 Encoding ====&lt;br /&gt;
&lt;br /&gt;
UTF-7 encoding of &amp;lt;SCRIPT&amp;gt;alert(‘XSS’);&amp;lt;/SCRIPT&amp;gt; is as below&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;+ADw-SCRIPT+AD4-alert('XSS');+ADw-/SCRIPT+AD4-&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the above script to work, the browser has to interpret the web page as encoded in UTF-7.&lt;br /&gt;
&lt;br /&gt;
==== Multi-byte Encoding ====&lt;br /&gt;
&lt;br /&gt;
Variable-width encoding is another type of character encoding scheme that uses codes of varying lengths to encode characters. Multi-Byte Encoding is a type of variable-width encoding that uses varying number of bytes to represent a character.&lt;br /&gt;
Multibyte encoding is primarily used to encode characters that belong to a large character set e.g. Chinese, Japanese and Korean. &lt;br /&gt;
&lt;br /&gt;
Multibyte encoding has been used in the past to bypass standard input validation functions and carry out cross site scripting and SQL injection attacks.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
http://en.wikipedia.org/wiki/Encode_(semiotics)&lt;br /&gt;
&lt;br /&gt;
http://ha.ckers.org/xss.html&lt;br /&gt;
&lt;br /&gt;
http://www.cert.org/tech_tips/malicious_code_mitigation.html&lt;br /&gt;
&lt;br /&gt;
http://www.w3schools.com/HTML/html_entities.asp&lt;br /&gt;
&lt;br /&gt;
http://www.iss.net/security_center/advice/Intrusions/2000639/default.htm&lt;br /&gt;
&lt;br /&gt;
http://searchsecurity.techtarget.com/expert/KnowledgebaseAnswer/0,289625,sid14_gci1212217_tax299989,00.html&lt;br /&gt;
&lt;br /&gt;
http://www.joelonsoftware.com/articles/Unicode.html&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User:Yiannis&amp;diff=169288</id>
		<title>User:Yiannis</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User:Yiannis&amp;diff=169288"/>
				<updated>2014-03-02T21:32:54Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: Updated short bio&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There is a world of numbers, hiding behind letters, inside computers, this is what stimulates my work. I am currently employed in IT risk management within the financial industry, running a team of technical risk assessors. Prior to this, I spent 5 years in the world of professional penetration testing. I focused my career evolution on assisting large scale projects actually implement secure development practices. This included teaching developers how to write secure code. For OWASP, I was the project leader for JBroFuzz and used to chair the Global Industry Committee. I am on the Application Security Advisory Board of the (ISC)2. My academic qualifications include a [http://wrap.warwick.ac.uk/1193/ PhD in information security], designing routing protocols for ad-hoc networks. I am a certified scrum master and hold the CISSP certification.&lt;br /&gt;
&lt;br /&gt;
'''Application Security''' &lt;br /&gt;
&lt;br /&gt;
*2011 - Web-Spa [http://code.google.com/p/web-spa/ Single Request Authorisation Web Knocking]&lt;br /&gt;
*2011 - Port Knocking Web Implementations [http://www.portknocking.org/view/implementations Ideas for more ports]&lt;br /&gt;
*2011 - Swiss Cyber Storm [https://www.swisscyberstorm.com/speakers/pavlosoglou.html Protecting Web Applications through Port Knocking]&lt;br /&gt;
*2009 - WebGoat Off-By-One Lesson [http://webgoat.googlecode.com/svn-history/r436/trunk/webgoat/src/main/java/org/owasp/webgoat/lessons/OffByOne.java WebGoat Off-By-One Lesson Remains to be Published]&lt;br /&gt;
&lt;br /&gt;
'''OWASP Life in Bullets:''' &lt;br /&gt;
&lt;br /&gt;
*2010 - Bletchley Park ISSA UK [http://www.issa-uk.org/newsletters/ISSANewsletterApril2010.pdf Hacking for Queen and Country]&lt;br /&gt;
*2010 - OWASP GitHub [http://www.owasp.org/index.php/Category:OWASP_GitHub http://www.owasp.org/index.php/Category:OWASP_GitHub] &lt;br /&gt;
*2010 - OWASP London [http://www.owasp.org/index.php/London#Thursday.2C_January_14th_2010 http://www.owasp.org/index.php/London#Thursday.2C_January_14th_2010] &lt;br /&gt;
**Penetration Testing with Selenium&lt;br /&gt;
*2009 - OWASP Global Industry Committee [http://www.owasp.org/index.php/Global_Industry_Committee http://www.owasp.org/index.php/Global_Industry_Committee]&lt;br /&gt;
*2008 - OWASP NYC Conference [http://video.google.com/videoplay?docid=-1551704659206071145# http://video.google.com/videoplay?docid=-1551704659206071145#]&lt;br /&gt;
**JBroFuzz - Building a Java Fuzzer&lt;br /&gt;
*2008 - Deepsec Vienna [http://2008.deepsec.net/ http://2008.deepsec.net/]&lt;br /&gt;
**Hybrid Code Auditing: A Dataflow Source Code Review Methodology&lt;br /&gt;
*2007 - OWASP New York/New Jersey [http://www.owasp.org/images/4/4e/OWASP_NY_07-Financial-Real-Time-Threats_Pavlosoglou.ppt http://www.owasp.org/images/4/4e/OWASP_NY_07-Financial-Real-Time-Threats_Pavlosoglou.ppt]&lt;br /&gt;
**Financial Real-Time Threats: Impacting Trading Floor Operations&lt;br /&gt;
*2006 - JBroFuzz Project Leader [http://lists.owasp.org/mailman/listinfo/owasp-jbrofuzz http://lists.owasp.org/mailman/listinfo/owasp-jbrofuzz]&lt;br /&gt;
** JBroFuzz Mailing List&lt;br /&gt;
&lt;br /&gt;
'''Project Involvement'''&lt;br /&gt;
&lt;br /&gt;
*DirBuster - [http://www.owasp.org/index.php/Category:OWASP_DirBuster_Project http://www.owasp.org/index.php/Category:OWASP_DirBuster_Project]&lt;br /&gt;
*JBroFuzz - [http://www.owasp.org/index.php/JBroFuzz http://www.owasp.org/index.php/JBroFuzz]&lt;br /&gt;
&lt;br /&gt;
'''Contact''' &lt;br /&gt;
&lt;br /&gt;
Yiannis Pavlosoglou&amp;lt;br&amp;gt; yiannis@owasp.org&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User:Yiannis&amp;diff=118499</id>
		<title>User:Yiannis</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User:Yiannis&amp;diff=118499"/>
				<updated>2011-10-03T23:56:25Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There is a world of numbers, hiding behind letters, inside computers that stimulates the brain of Yiannis. Currently, he is focusing on research relating to coding standards, practices and ways of exploiting development code. This focus entails the breaking and making of client-side standalone, as well as server-side web applications. &lt;br /&gt;
&lt;br /&gt;
'''Application Security''' &lt;br /&gt;
&lt;br /&gt;
*2011 - Web-Spa [http://code.google.com/p/web-spa/ Single Request Authorisation Web Knocking]&lt;br /&gt;
*2011 - Port Knocking Web Implementations [http://www.portknocking.org/view/implementations Ideas for more ports]&lt;br /&gt;
*2011 - Swiss Cyber Storm [https://www.swisscyberstorm.com/speakers/pavlosoglou.html Protecting Web Applications through Port Knocking]&lt;br /&gt;
*2009 - WebGoat Off-By-One Lesson [http://webgoat.googlecode.com/svn-history/r436/trunk/webgoat/src/main/java/org/owasp/webgoat/lessons/OffByOne.java WebGoat Off-By-One Lesson Remains to be Published]&lt;br /&gt;
&lt;br /&gt;
'''OWASP Life in Bullets:''' &lt;br /&gt;
&lt;br /&gt;
*2010 - Bletchley Park ISSA UK [http://www.issa-uk.org/newsletters/ISSANewsletterApril2010.pdf Hacking for Queen and Country]&lt;br /&gt;
*2010 - OWASP GitHub [http://www.owasp.org/index.php/Category:OWASP_GitHub http://www.owasp.org/index.php/Category:OWASP_GitHub] &lt;br /&gt;
*2010 - OWASP London [http://www.owasp.org/index.php/London#Thursday.2C_January_14th_2010 http://www.owasp.org/index.php/London#Thursday.2C_January_14th_2010] &lt;br /&gt;
**Penetration Testing with Selenium&lt;br /&gt;
*2009 - OWASP Global Industry Committee [http://www.owasp.org/index.php/Global_Industry_Committee http://www.owasp.org/index.php/Global_Industry_Committee]&lt;br /&gt;
*2008 - OWASP NYC Conference [http://video.google.com/videoplay?docid=-1551704659206071145# http://video.google.com/videoplay?docid=-1551704659206071145#]&lt;br /&gt;
**JBroFuzz - Building a Java Fuzzer&lt;br /&gt;
*2008 - Deepsec Vienna [http://2008.deepsec.net/ http://2008.deepsec.net/]&lt;br /&gt;
**Hybrid Code Auditing: A Dataflow Source Code Review Methodology&lt;br /&gt;
*2007 - OWASP New York/New Jersey [http://www.owasp.org/images/4/4e/OWASP_NY_07-Financial-Real-Time-Threats_Pavlosoglou.ppt http://www.owasp.org/images/4/4e/OWASP_NY_07-Financial-Real-Time-Threats_Pavlosoglou.ppt]&lt;br /&gt;
**Financial Real-Time Threats: Impacting Trading Floor Operations&lt;br /&gt;
*2006 - JBroFuzz Project Leader [http://lists.owasp.org/mailman/listinfo/owasp-jbrofuzz http://lists.owasp.org/mailman/listinfo/owasp-jbrofuzz]&lt;br /&gt;
** JBroFuzz Mailing List&lt;br /&gt;
&lt;br /&gt;
'''Project Involvement'''&lt;br /&gt;
&lt;br /&gt;
*DirBuster - [http://www.owasp.org/index.php/Category:OWASP_DirBuster_Project http://www.owasp.org/index.php/Category:OWASP_DirBuster_Project]&lt;br /&gt;
*JBroFuzz - [http://www.owasp.org/index.php/JBroFuzz http://www.owasp.org/index.php/JBroFuzz]&lt;br /&gt;
&lt;br /&gt;
'''Contact''' &lt;br /&gt;
&lt;br /&gt;
Yiannis Pavlosoglou&amp;lt;br&amp;gt; yiannis@owasp.org&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Zed_Attack_Proxy_Project/Releases/ZAP_1.1.0/Assessment&amp;diff=97515</id>
		<title>Projects/OWASP Zed Attack Proxy Project/Releases/ZAP 1.1.0/Assessment</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Zed_Attack_Proxy_Project/Releases/ZAP_1.1.0/Assessment&amp;diff=97515"/>
				<updated>2010-12-22T16:12:40Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: /* Stable Release Review of the OWASP Zed Attack Proxy Project - Release ZAP 1.1.0 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;small&amp;gt;[[:OWASP Zed Attack Proxy Project|Click here to return to project's main page]]&amp;lt;/small&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Stable Release Review of the OWASP Zed Attack Proxy Project - Release ZAP 1.1.0 ==&lt;br /&gt;
&lt;br /&gt;
==== Project Leader for this Release ====&lt;br /&gt;
'''''[[User:Psiinon|Psiinon]]'s Pre-Assessment Checklist:'''''&lt;br /&gt;
&lt;br /&gt;
{{ Pre-Assessment Questions - Tools&lt;br /&gt;
| 1. Is this release associated with a project containing at least the [[Assessing_Project_Health#Project_Wiki_Page_Minimal_Content|Project Wiki Page Minimum Content]]  information?&lt;br /&gt;
= I believe so&lt;br /&gt;
&lt;br /&gt;
| 2. Is your tool licensed under an open source license? &lt;br /&gt;
= Yes - Apache License 2.0, referenced on both http://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project and http://code.google.com/p/zaproxy/&lt;br /&gt;
&lt;br /&gt;
| 3. Is the source code and any documentation available in an online project repository? &lt;br /&gt;
= Yes - http://code.google.com/p/zaproxy/source/checkout&lt;br /&gt;
&lt;br /&gt;
| 4. Is there working code? &lt;br /&gt;
= Yes - http://code.google.com/p/zaproxy/source/checkout&lt;br /&gt;
&lt;br /&gt;
| 5. Is there a roadmap for this project release which will take it from Alpha to Stable release? &lt;br /&gt;
= Yes - http://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project#tab=Roadmap&lt;br /&gt;
&lt;br /&gt;
| 6. Are the Alpha pre-assessment items complete?&lt;br /&gt;
= I believe so&lt;br /&gt;
&lt;br /&gt;
| 7. Is there an installer or stand-alone executable? &lt;br /&gt;
= Yes, for Windows, Linux and Mac OS (being generated now) - http://code.google.com/p/zaproxy/downloads/list&lt;br /&gt;
&lt;br /&gt;
| 8. Is there user documentation on the OWASP project wiki page? &lt;br /&gt;
= There is some documentation on the project page http://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project, but this also references the Google Code page which includes the full user guide: http://code.google.com/p/zaproxy/wiki/HelpIntro, the latter is generated from the java help pages - migrating it to the OWASP wiki could prove tricky&lt;br /&gt;
&lt;br /&gt;
| 9. Is there an &amp;quot;About box&amp;quot; or similar help item which lists the following? &lt;br /&gt;
= Yes - there is an about box which include things like the license and OWASP project page link. The credits are in the help file and online here: http://code.google.com/p/zaproxy/wiki/HelpCredits&lt;br /&gt;
&lt;br /&gt;
| 10. Is there documentation on how to build the tool from source including obtaining the source from the code repository? &lt;br /&gt;
= Yes - http://code.google.com/p/zaproxy/wiki/Building&lt;br /&gt;
&lt;br /&gt;
| 11. Is the tool documentation stored in the same repository as the source code?&lt;br /&gt;
= Yes - http://code.google.com/p/zaproxy/source/browse/#svn/wiki&lt;br /&gt;
 &lt;br /&gt;
| 12. Are the Alpha and Beta pre-assessment items complete? &lt;br /&gt;
= I believe so&lt;br /&gt;
&lt;br /&gt;
| 13. Does the tool include documentation built into the tool? &lt;br /&gt;
= Yes - a full help file is included which is also available online: http://code.google.com/p/zaproxy/wiki/HelpIntro &lt;br /&gt;
&lt;br /&gt;
| 14. Does the tool include build scripts to automate builds? &lt;br /&gt;
= Yes - http://code.google.com/p/zaproxy/source/browse/trunk/build/build.xml&lt;br /&gt;
&lt;br /&gt;
| 15. Is there a publicly accessible bug tracking system? &lt;br /&gt;
= Yes - http://code.google.com/p/zaproxy/issues/list&lt;br /&gt;
&lt;br /&gt;
| 16. Have any existing limitations of the tool been documented? &lt;br /&gt;
= Yes - all known limitations raised as bugs&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== First Reviewer ====&lt;br /&gt;
'''''[[User:Yiannis|Yiannis]]'s Review:'''''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;Ideally, reviewers should be an existing OWASP project leader or chapter leader.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ Assessment Questions - Tools&lt;br /&gt;
&lt;br /&gt;
| 1. Is an installer for the tool available and easy to use? How close does it reach the goal of a fully automated installer?&lt;br /&gt;
=Yes. A stand-alone executable exists; it installs the files correctly with the corresponding shortcuts in place.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
| 2. Is the end user documentation complete, relevant and presented on the OWASP wiki page?&lt;br /&gt;
&lt;br /&gt;
Yes. Pressing F1 triggers the OWASP ZAP User Guide window to appear. The documentation is also at:&lt;br /&gt;
=http://code.google.com/p/zaproxy/wiki/HelpReleases1_1_0&lt;br /&gt;
&lt;br /&gt;
|3. Does the tool have an “About box” or similar help item which allows the end user to get an overview of the state of this tool? Is this information readily available and easy to find?&lt;br /&gt;
=Yes.&lt;br /&gt;
&lt;br /&gt;
| 4. Does the documentation on building the source provide the necessary information and detail to allow someone to build the tool? Is there sufficient detail and information for the target user? Is there any domain specific knowledge that is assumed and not provided?&lt;br /&gt;
=Yes. It took less than 2 minutes to build after import into eclipse. &lt;br /&gt;
&lt;br /&gt;
| 5. Is the tool's documentation available with the source code and would it readily discoverable by a new user of the tool?&lt;br /&gt;
=Yes. Standard JavaDoc format is also present. &lt;br /&gt;
&lt;br /&gt;
| 6. Is there anything missing that is critical enough to keep the release at a alpha quality?&lt;br /&gt;
=No. This is definately a project that should be in beta, if not release!&lt;br /&gt;
&lt;br /&gt;
| 7. Does the tool substantially address the application security issues it was created to solve?&lt;br /&gt;
=There is room for improvement around key functionality that will make the tool unique in terms of the features that it offers. This is on the roadmap for it's next release.&lt;br /&gt;
&lt;br /&gt;
| 8. Is the tool reasonably easy to use?&lt;br /&gt;
=Yes. Carrying a port of paros also helps in this matter.&lt;br /&gt;
&lt;br /&gt;
| 9. Does the documentation meet the needs of the tool users and is easily found?&lt;br /&gt;
=Yes.&lt;br /&gt;
&lt;br /&gt;
| 10. Do the build scripts work as expected? Can you build the tool? The goal is a “One-click” build.&lt;br /&gt;
=Yes. A few warning do come back from javac, but they are minor.&lt;br /&gt;
&lt;br /&gt;
| 11. Is the bug tracking system usable? Is it hosted at the same place as the source code? (e.g. Google Code, Sourceforge)&lt;br /&gt;
=Yes. There is 40 or some defects on the list, addressed at a priority, etc.&lt;br /&gt;
&lt;br /&gt;
| 12. Have you noted any limitations of the tool that are not already documented by the project lead.&lt;br /&gt;
=A few in terms of memory requirements around proxying and spidering. This is more on the side of &amp;quot;know what you are doing&amp;quot; then &amp;quot;the tool brakes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
| 13. Would you consider using this tool in your day to day work assuming your professional work includes a reason to use this tool? Why or why not?&lt;br /&gt;
=Yes. I want to see more functionality though!&lt;br /&gt;
&lt;br /&gt;
| 14. What, if anything, is missing which would make this a more useful tool? Is what is missing critical enough to keep the release at a beta quality?&lt;br /&gt;
=Nothing; this can move to beta.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Second Reviewer ====&lt;br /&gt;
'''''[[User:Name|TBD]]'s Review:'''''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;It is recommended that an OWASP board member or Global Projects Committee member be the second reviewer on Quality releases. The board has the initial option to review the project, followed by the Global Projects Committee.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ Assessment Questions - Tools&lt;br /&gt;
&lt;br /&gt;
| 1. Is an installer for the tool available and easy to use? How close does it reach the goal of a fully automated installer?      &lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 2. Is the end user documentation complete, relevant and presented on the OWASP wiki page?&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
|3. Does the tool have an “About box” or similar help item which allows the end user to get an overview of the state of this tool? Is this information readily available and easy to find?&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 4. Does the documentation on building the source provide the necessary information and detail to allow someone to build the tool? Is there sufficient detail and information for the target user? Is there any domain specific knowledge that is assumed and not provided?&lt;br /&gt;
=  &lt;br /&gt;
&lt;br /&gt;
| 5. Is the tool's documentation available with the source code and would it readily discoverable by a new user of the tool?&lt;br /&gt;
=  &lt;br /&gt;
&lt;br /&gt;
| 6. Is there anything missing that is critical enough to keep the release at a alpha quality?&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 7. Does the tool substantially address the application security issues it was created to solve?&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 8. Is the tool reasonably easy to use?&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 9. Does the documentation meet the needs of the tool users and is easily found?&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 10. Do the build scripts work as expected? Can you build the tool? The goal is a “One-click” build.&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 11. Is the bug tracking system usable? Is it hosted at the same place as the source code? (e.g. Google Code, Sourceforge)&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 12. Have you noted any limitations of the tool that are not already documented by the project lead.&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 13. Would you consider using this tool in your day to day work assuming your professional work includes a reason to use this tool? Why or why not?&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 14. What, if anything, is missing which would make this a more useful tool? Is what is missing critical enough to keep the release at a beta quality?&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&amp;lt;headertabs/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Projects/OWASP_Zed_Attack_Proxy_Project/Releases/ZAP_1.1.0/Assessment&amp;diff=97161</id>
		<title>Projects/OWASP Zed Attack Proxy Project/Releases/ZAP 1.1.0/Assessment</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Projects/OWASP_Zed_Attack_Proxy_Project/Releases/ZAP_1.1.0/Assessment&amp;diff=97161"/>
				<updated>2010-12-19T23:21:15Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: /* Stable Release Review of the OWASP Zed Attack Proxy Project - Release ZAP 1.1.0 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;small&amp;gt;[[:OWASP Zed Attack Proxy Project|Click here to return to project's main page]]&amp;lt;/small&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Stable Release Review of the OWASP Zed Attack Proxy Project - Release ZAP 1.1.0 ==&lt;br /&gt;
&lt;br /&gt;
==== Project Leader for this Release ====&lt;br /&gt;
'''''[[User:Psiinon|Psiinon]]'s Pre-Assessment Checklist:'''''&lt;br /&gt;
&lt;br /&gt;
{{ Pre-Assessment Questions - Tools&lt;br /&gt;
| 1. Is this release associated with a project containing at least the [[Assessing_Project_Health#Project_Wiki_Page_Minimal_Content|Project Wiki Page Minimum Content]]  information?&lt;br /&gt;
= I believe so&lt;br /&gt;
&lt;br /&gt;
| 2. Is your tool licensed under an open source license? &lt;br /&gt;
= Yes - Apache License 2.0, referenced on both http://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project and http://code.google.com/p/zaproxy/&lt;br /&gt;
&lt;br /&gt;
| 3. Is the source code and any documentation available in an online project repository? &lt;br /&gt;
= Yes - http://code.google.com/p/zaproxy/source/checkout&lt;br /&gt;
&lt;br /&gt;
| 4. Is there working code? &lt;br /&gt;
= Yes - http://code.google.com/p/zaproxy/source/checkout&lt;br /&gt;
&lt;br /&gt;
| 5. Is there a roadmap for this project release which will take it from Alpha to Stable release? &lt;br /&gt;
= Yes - http://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project#tab=Roadmap&lt;br /&gt;
&lt;br /&gt;
| 6. Are the Alpha pre-assessment items complete?&lt;br /&gt;
= I believe so&lt;br /&gt;
&lt;br /&gt;
| 7. Is there an installer or stand-alone executable? &lt;br /&gt;
= Yes, for Windows, Linux and Mac OS (being generated now) - http://code.google.com/p/zaproxy/downloads/list&lt;br /&gt;
&lt;br /&gt;
| 8. Is there user documentation on the OWASP project wiki page? &lt;br /&gt;
= There is some documentation on the project page http://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project, but this also references the Google Code page which includes the full user guide: http://code.google.com/p/zaproxy/wiki/HelpIntro, the latter is generated from the java help pages - migrating it to the OWASP wiki could prove tricky&lt;br /&gt;
&lt;br /&gt;
| 9. Is there an &amp;quot;About box&amp;quot; or similar help item which lists the following? &lt;br /&gt;
= Yes - there is an about box which include things like the license and OWASP project page link. The credits are in the help file and online here: http://code.google.com/p/zaproxy/wiki/HelpCredits&lt;br /&gt;
&lt;br /&gt;
| 10. Is there documentation on how to build the tool from source including obtaining the source from the code repository? &lt;br /&gt;
= Yes - http://code.google.com/p/zaproxy/wiki/Building&lt;br /&gt;
&lt;br /&gt;
| 11. Is the tool documentation stored in the same repository as the source code?&lt;br /&gt;
= Yes - http://code.google.com/p/zaproxy/source/browse/#svn/wiki&lt;br /&gt;
 &lt;br /&gt;
| 12. Are the Alpha and Beta pre-assessment items complete? &lt;br /&gt;
= I believe so&lt;br /&gt;
&lt;br /&gt;
| 13. Does the tool include documentation built into the tool? &lt;br /&gt;
= Yes - a full help file is included which is also available online: http://code.google.com/p/zaproxy/wiki/HelpIntro &lt;br /&gt;
&lt;br /&gt;
| 14. Does the tool include build scripts to automate builds? &lt;br /&gt;
= Yes - http://code.google.com/p/zaproxy/source/browse/trunk/build/build.xml&lt;br /&gt;
&lt;br /&gt;
| 15. Is there a publicly accessible bug tracking system? &lt;br /&gt;
= Yes - http://code.google.com/p/zaproxy/issues/list&lt;br /&gt;
&lt;br /&gt;
| 16. Have any existing limitations of the tool been documented? &lt;br /&gt;
= Yes - all known limitations raised as bugs&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== First Reviewer ====&lt;br /&gt;
'''''[[User:Yiannis|Yiannis]]'s Review:'''''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;Ideally, reviewers should be an existing OWASP project leader or chapter leader.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ Assessment Questions - Tools&lt;br /&gt;
&lt;br /&gt;
| 1. Is an installer for the tool available and easy to use? How close does it reach the goal of a fully automated installer?&lt;br /&gt;
&lt;br /&gt;
Yes. A stand-alone executable exists; it installs the files correctly with the corresponding shortcuts in place.&lt;br /&gt;
&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 2. Is the end user documentation complete, relevant and presented on the OWASP wiki page?&lt;br /&gt;
&lt;br /&gt;
Yes. Pressing F1 triggers the OWASP ZAP User Guide window to appear. The documentation is also at:&lt;br /&gt;
http://code.google.com/p/zaproxy/wiki/HelpReleases1_1_0&lt;br /&gt;
&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
|3. Does the tool have an “About box” or similar help item which allows the end user to get an overview of the state of this tool? Is this information readily available and easy to find?&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 4. Does the documentation on building the source provide the necessary information and detail to allow someone to build the tool? Is there sufficient detail and information for the target user? Is there any domain specific knowledge that is assumed and not provided?&lt;br /&gt;
&lt;br /&gt;
Yes. It took less than 2 minutes to build after import into eclipse.&lt;br /&gt;
&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 5. Is the tool's documentation available with the source code and would it readily discoverable by a new user of the tool?&lt;br /&gt;
&lt;br /&gt;
Yes. Standard JavaDoc format is also present.&lt;br /&gt;
&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 6. Is there anything missing that is critical enough to keep the release at a alpha quality?&lt;br /&gt;
&lt;br /&gt;
No. This is definately a project that should be in beta, if not release!&lt;br /&gt;
&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 7. Does the tool substantially address the application security issues it was created to solve?&lt;br /&gt;
&lt;br /&gt;
There is room for improvement around key functionality that will make the tool unique in terms of the features that it offers. This is on the roadmap for it's next release.&lt;br /&gt;
&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 8. Is the tool reasonably easy to use?&lt;br /&gt;
&lt;br /&gt;
Yes. Carrying a port of paros also helps in this matter.&lt;br /&gt;
&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 9. Does the documentation meet the needs of the tool users and is easily found?&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 10. Do the build scripts work as expected? Can you build the tool? The goal is a “One-click” build.&lt;br /&gt;
&lt;br /&gt;
Yes. A few warning do come back from javac, but they are minor.&lt;br /&gt;
&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 11. Is the bug tracking system usable? Is it hosted at the same place as the source code? (e.g. Google Code, Sourceforge)&lt;br /&gt;
&lt;br /&gt;
Yes. There is 40 or some defects on the list, addressed at a priority, etc.&lt;br /&gt;
&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 12. Have you noted any limitations of the tool that are not already documented by the project lead.&lt;br /&gt;
&lt;br /&gt;
A few in terms of memory requirements around proxying and spidering. This is more on the side of &amp;quot;know what you are doing&amp;quot; then &amp;quot;the tool brakes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 13. Would you consider using this tool in your day to day work assuming your professional work includes a reason to use this tool? Why or why not?&lt;br /&gt;
&lt;br /&gt;
Yes. I want to see more functionality though!&lt;br /&gt;
&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 14. What, if anything, is missing which would make this a more useful tool? Is what is missing critical enough to keep the release at a beta quality?&lt;br /&gt;
&lt;br /&gt;
Nothing; this can move to beta.&lt;br /&gt;
&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Second Reviewer ====&lt;br /&gt;
'''''[[User:Name|TBD]]'s Review:'''''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;It is recommended that an OWASP board member or Global Projects Committee member be the second reviewer on Quality releases. The board has the initial option to review the project, followed by the Global Projects Committee.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ Assessment Questions - Tools&lt;br /&gt;
&lt;br /&gt;
| 1. Is an installer for the tool available and easy to use? How close does it reach the goal of a fully automated installer?      &lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 2. Is the end user documentation complete, relevant and presented on the OWASP wiki page?&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
|3. Does the tool have an “About box” or similar help item which allows the end user to get an overview of the state of this tool? Is this information readily available and easy to find?&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 4. Does the documentation on building the source provide the necessary information and detail to allow someone to build the tool? Is there sufficient detail and information for the target user? Is there any domain specific knowledge that is assumed and not provided?&lt;br /&gt;
=  &lt;br /&gt;
&lt;br /&gt;
| 5. Is the tool's documentation available with the source code and would it readily discoverable by a new user of the tool?&lt;br /&gt;
=  &lt;br /&gt;
&lt;br /&gt;
| 6. Is there anything missing that is critical enough to keep the release at a alpha quality?&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 7. Does the tool substantially address the application security issues it was created to solve?&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 8. Is the tool reasonably easy to use?&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 9. Does the documentation meet the needs of the tool users and is easily found?&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 10. Do the build scripts work as expected? Can you build the tool? The goal is a “One-click” build.&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 11. Is the bug tracking system usable? Is it hosted at the same place as the source code? (e.g. Google Code, Sourceforge)&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 12. Have you noted any limitations of the tool that are not already documented by the project lead.&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 13. Would you consider using this tool in your day to day work assuming your professional work includes a reason to use this tool? Why or why not?&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
| 14. What, if anything, is missing which would make this a more useful tool? Is what is missing critical enough to keep the release at a beta quality?&lt;br /&gt;
= &lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&amp;lt;headertabs/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Global_Industry_Committee&amp;diff=96746</id>
		<title>Global Industry Committee</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Global_Industry_Committee&amp;diff=96746"/>
				<updated>2010-12-17T00:50:11Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: /* Work in Progress */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''The Global Industry Committee was created during the OWASP EU Summit in Portugal. The primary purpose of the Global Industry Committee is to work with industry executives to gather requirements from industry, work with Membership, Projects and others.''' &lt;br /&gt;
&lt;br /&gt;
== Mission Statement  ==&lt;br /&gt;
&lt;br /&gt;
''To expand awareness of and promote the inclusion of software security best practices in Industry, Government, Academia and regulatory agencies and be a voice for industry. We will accomplish this through outreach; including presentations, development of position papers and collaborative efforts with other entities.'' [https://www.owasp.org/index.php/Global_Industry_Committee#General_Presentations_and_Reports Powerpoint of Accomplishments] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Committee Plan  ==&lt;br /&gt;
&lt;br /&gt;
Step 1: [[Industry:Organizations for Outreach|Identify specific organizations]] worth working with to spread the OWASP gospel &lt;br /&gt;
&lt;br /&gt;
Step 2: Prioritize the proposed liasons based on potential impact, and also realistic likelihood of the organization actively working with us &lt;br /&gt;
&lt;br /&gt;
Step 3: Execute, leveraging global OWASP resources as much as possible to maximize impact &lt;br /&gt;
&lt;br /&gt;
Step 4: Evaluate progress &amp;amp;amp; repeat Step 1-3 &lt;br /&gt;
&lt;br /&gt;
== Committee Members  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Committee Members: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name &lt;br /&gt;
! Email &lt;br /&gt;
! Location&lt;br /&gt;
|-&lt;br /&gt;
| Lorna Alamri &lt;br /&gt;
| lorna.alamri 'at' owasp dot org &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Joe Bernik &lt;br /&gt;
| bernik 'at' gmail dot com &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Rex Booth &lt;br /&gt;
| rex.booth 'at' gt dot com &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| David Campbell &lt;br /&gt;
| dcampbell 'at' owasp dot org &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Alexander Fry &lt;br /&gt;
| alexander.fry 'at' owasp dot org &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Georg Hess &lt;br /&gt;
| georg.hess 'at' artofdefence dot com &lt;br /&gt;
| Germany&lt;br /&gt;
|-&lt;br /&gt;
| Yiannis Pavlosoglou &lt;br /&gt;
| yiannis 'at' owasp dot org &lt;br /&gt;
| UK&lt;br /&gt;
|-&lt;br /&gt;
| Colin Watson &lt;br /&gt;
| colin.watson 'at' owasp dot org &lt;br /&gt;
| UK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Board Member Representative: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name &lt;br /&gt;
! Email &lt;br /&gt;
! Location&lt;br /&gt;
|-&lt;br /&gt;
| Matt Tesauro &lt;br /&gt;
| matt.tesauro 'at' owasp dot org &lt;br /&gt;
| USA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The committee chair (from Nov 2010) is Yiannis Pavlosoglou. Previous chairs: &lt;br /&gt;
&lt;br /&gt;
*Colin Watson (Nov 2009 to Oct 2010)&lt;br /&gt;
&lt;br /&gt;
= Monthly Report Format =&lt;br /&gt;
&lt;br /&gt;
See below...&lt;br /&gt;
&lt;br /&gt;
== Getting Involved  ==&lt;br /&gt;
&lt;br /&gt;
=== Mailing List  ===&lt;br /&gt;
&lt;br /&gt;
[http://lists.owasp.org/mailman/listinfo/global_industry_committee Join our mailing list] &lt;br /&gt;
&lt;br /&gt;
=== Meetings  ===&lt;br /&gt;
&lt;br /&gt;
The next Global Industry Committee meeting will be: &lt;br /&gt;
&lt;br /&gt;
*TBC &lt;br /&gt;
**Dial in number: +1 866 534 4754 &lt;br /&gt;
**Call code 192341&lt;br /&gt;
&lt;br /&gt;
Minutes of previous meetings are: &lt;br /&gt;
&lt;br /&gt;
*[[Industry:Minutes 2010-08-17|17 Aug 2010]] (also [http://www.owasp.org/images/0/0d/Gic_call_17aug2010.mp3 MP3 recording of the call]) &lt;br /&gt;
*[[Industry:Minutes 2010-05-18|18 May 2010]] &lt;br /&gt;
*[[Industry:Minutes 2010-01-05|05 Jan 2010]] (also [http://www.owasp.org/images/a/a3/Owasp_gic_call_5jan10.mp3 MP3 recording of the call]) &lt;br /&gt;
*[[Industry:Minutes 2009-01-23|23 Jan 2009]]&lt;br /&gt;
* 16 Dec 2010&lt;br /&gt;
&lt;br /&gt;
=== Membership  ===&lt;br /&gt;
&lt;br /&gt;
[[Membership]] explains how to become an OWASP organization supporter or individual member. But you don't have to be an OWASP Member or Committee Member to contribute. &lt;br /&gt;
&lt;br /&gt;
The current committee members joined for a 12 month term - see [[How to Join a Committee]] and [[Global Committee Pages]]. We would especially welcome new members who can widen our geographic coverage (e.g. Africa, Asia and South America) and who have time to contribute proactively. &lt;br /&gt;
&lt;br /&gt;
=== Other ongoing initiatives  ===&lt;br /&gt;
&lt;br /&gt;
*[http://www.owasp.org/index.php/Global_Industry_Committee-SIG Special Interest Groups] - Outreach to sector-specific critical infrastructures worldwide. &lt;br /&gt;
*[http://www.owasp.org/index.php/Category:India OWASP India Advisory Board] - Regional panel contributing to the software outsourcing industry. &lt;br /&gt;
*[http://www.owasp.org/index.php/Industry:Citations OWASP Citations] - References to OWASP in official, or otherwise important, documents.&lt;br /&gt;
&lt;br /&gt;
== Current Activity  ==&lt;br /&gt;
&lt;br /&gt;
=== Work in Progress  ===&lt;br /&gt;
&lt;br /&gt;
The current activities being undertaken: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Task &lt;br /&gt;
! Deadline &lt;br /&gt;
! Type &lt;br /&gt;
! Status &lt;br /&gt;
! Description &lt;br /&gt;
! Who&lt;br /&gt;
|-&lt;br /&gt;
| New IETF Web Security working group / W3C Web Application Security Working Group&lt;br /&gt;
| Ongoing&lt;br /&gt;
| All Members&lt;br /&gt;
| New&lt;br /&gt;
| Invite and coordinate OWASP contributions on this IETF/W3C Group&lt;br /&gt;
| CW/YP&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/OWASP_Mobile_Security_Project Kickoff OWASP Mobile Security Project]&lt;br /&gt;
| 2011 Summit&lt;br /&gt;
| Projects&lt;br /&gt;
| New&lt;br /&gt;
| Provide GIC oversight to Mobile Security Project&lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.cio.gov/pages.cfm/page/Federal-Risk-and-Authorization-Management-Program-FedRAMP FedRAMP]&lt;br /&gt;
| 17 Jan 2011&lt;br /&gt;
| Standards&lt;br /&gt;
| In progress&lt;br /&gt;
| Provide response to FedRAMP certification and accreditation process&lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [http://trac.tools.ietf.org/area/sec/trac/wiki/SecurityDirectorate IETF Security Directorate]&lt;br /&gt;
| -&lt;br /&gt;
| Outreach&lt;br /&gt;
| In progress&lt;br /&gt;
| Make contact with, and discuss common goals with IETF&lt;br /&gt;
| YP/CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://hacking-lab.com/ Hacking Lab]&lt;br /&gt;
| 14 Dec 2011&lt;br /&gt;
| Outreach&lt;br /&gt;
| In progress&lt;br /&gt;
| Matt Tesauro has been working with Hacking Lab previously and brought it to the GIC&lt;br /&gt;
| MAT/YP&lt;br /&gt;
|-&lt;br /&gt;
| Leeds Chapter Leader Presentation&lt;br /&gt;
| 13 Dec 2011&lt;br /&gt;
| Outreach&lt;br /&gt;
| In progress&lt;br /&gt;
| LA is gathering OWASP overview and project information for OWASP Leeds presentation needs.&lt;br /&gt;
| LA&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;Configure SSL&amp;quot; Campaign&lt;br /&gt;
| 1 Feb 2011&lt;br /&gt;
| Paper write-up&lt;br /&gt;
| In progress&lt;br /&gt;
| Alexis FitzGerald's idea&lt;br /&gt;
| AFG/CW&lt;br /&gt;
|-&lt;br /&gt;
| [Testimonials]&lt;br /&gt;
| -&lt;br /&gt;
| Outreach&lt;br /&gt;
| In progress&lt;br /&gt;
| Obtain further testimonials for wiki page&lt;br /&gt;
| CW/SD&lt;br /&gt;
|-&lt;br /&gt;
| Reconnecting with past Industy Committee connections&lt;br /&gt;
| 1 Feb 2011&lt;br /&gt;
| Follow up&lt;br /&gt;
| In progress&lt;br /&gt;
| YP and LA to follow up with Industry Committee past contacts.&lt;br /&gt;
| YP/LA&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:ICO Data Sharing CoP|Data Sharing CoP]] &lt;br /&gt;
| 5 Jan 2011 &lt;br /&gt;
| Standards &lt;br /&gt;
| In progress &lt;br /&gt;
| Provide response to UK ICO's &amp;quot;Data Sharing Code of Practice Consultation&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.londoncentral.bcs.org BCS London Central] &lt;br /&gt;
| 17 Feb 2011 &lt;br /&gt;
| Outreach &lt;br /&gt;
| New &lt;br /&gt;
| Present a talk about OWASP. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.bcs.org BCS] &lt;br /&gt;
| 3 Sep 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Write article for BCS ITnow magazine about application security and OWASP Top Ten. &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.usmma.edu/ USMMA] &lt;br /&gt;
| 1 Jan 2011 &lt;br /&gt;
| Outreach &lt;br /&gt;
| New &lt;br /&gt;
| Make contact. Present a talk about OWASP to the USMMA computer club or security teams. &lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.usna.edu/ USNA] &lt;br /&gt;
| 1 Jan 2011 &lt;br /&gt;
| Outreach &lt;br /&gt;
| New &lt;br /&gt;
| Make contact. Present a talk about OWASP to the USNA computer science faculty and students or interest group. &lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.auscert.org.au/ AusCERT] &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Make contact and discuss opportunities for OWASP to contribute to their work &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| OWASP Financial Services SIG &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Working with Fabio Cerullo, Eoin Keary, Jim Routh, Jerry Kickenson and others on forming a SIG. Arranging a financial panel for AppSec in Washington, DC in November &lt;br /&gt;
| JB/EK&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.spva.org Secure POS Vendor Alliance (SPVA)] &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Begin dialogue about possibility of working together. Have had trouble getting through to them but have a good lead now. Updates soon&amp;amp;nbsp;:) &lt;br /&gt;
| DC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Completed Items  ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Task &lt;br /&gt;
! Completed &lt;br /&gt;
! Type &lt;br /&gt;
! Status &lt;br /&gt;
! Description &lt;br /&gt;
! Who&lt;br /&gt;
|-&lt;br /&gt;
| CRESTCON&lt;br /&gt;
| 14 Dec 2011&lt;br /&gt;
| Outreach&lt;br /&gt;
| Closed&lt;br /&gt;
| YP is attending CRESTCON in Royal Holloway, Surrey, UK&lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| (ISC)^2 Application Security Advisory Board (ASAB) &lt;br /&gt;
| 19 Nov 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| YP is now a member of the (ISC)^2 ASAB, with the first meeting to be held in FL on the above stated date. &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.techexecnetworks.com/event_2010.12.01.asp T.E.N./Fortify Software Security Assurance Summit] &lt;br /&gt;
| 1 Dec 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed&lt;br /&gt;
| Discuss quick wins and high impact software assurance activities using the OWASP SAMM model as reference and cite other OWASP projects as resources. &lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:DOJ Nondiscrimination on the Basis of Disability|DOJ Nondiscimination on the Basis of Disability]] &lt;br /&gt;
| 30 Nov 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to US DOJ's &amp;quot;Accessibility of Web Information and Services of State and Local Government Entities and Public Accommodations&amp;quot; &lt;br /&gt;
| AF/LA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:e-Consumer Protection Consultation|e-Consumer Protection Consultation]] &lt;br /&gt;
| 13 Oct 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Review and provide official OWASP response to [http://www.oft.gov.uk/ UK Office of Fair Trading] [http://www.oft.gov.uk/OFTwork/consultations/current/eprotection/ e-Consumer Protection Consultation]. &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:ENISA Cloud Computing Common Assurance Metrics|ENISA Common Assurance Maturity Model]] &lt;br /&gt;
| 8 Oct 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Work with [[:Category:OWASP Cloud ‐ 10 Project]] to contribute to the development of Common Assurance Maturity Model for [http://www.enisa.europa.eu/ ENISA]/Cloud Security Alliance/etc joint initiative. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.w3.org/TR/2010/WD-mwabp-20100713/ Mobile Web Application Best Practices Working Draft] &lt;br /&gt;
| 6 Aug 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Review and provide official OWASP response to W3C's [http://www.w3.org/2005/MWI/BPWG/ Mobile Web Best Practices Working Group]. &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.oft.gov.uk/ UK Office of Fair Trading] &lt;br /&gt;
| 23 Jul 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Ask to be added to official consultation list &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.businesslink.gov.uk BusinessLink] &lt;br /&gt;
| 1 Jul 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Offer to contribute to development of IT security information about [http://www.businesslink.gov.uk/bdotg/action/layer?topicId=1075421745 application security] on the BusinessLink website for UK SMEs. Outcome - no help required at present, but BusinessLink system to be disbanded. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| Veracode &lt;br /&gt;
| 28 Jun 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Discuss use of Open SAMM to classify Secure SDL maturity in Veracode's code analysis summary reports. Outcome - positive response received. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Leeds_UK OWASP Leeds/North] &lt;br /&gt;
| 16 Jun 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentations at chapter meeting in Newcastle-upon-Tyne about ENISA CAMM and OWASP Appsensor &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Front_Range_OWASP_Conference_2010 Front Range OWASP Conference (FROC) 2010] &lt;br /&gt;
| 2 Jun 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation [http://tinyurl.com/froctalks Vids &amp;amp;amp; presentations online] &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.isaca-denver.org/meetings/MAY_2010_CHPT_MTG.shtml OWASP Presentation at ISACA Denver Annual Meeting] &lt;br /&gt;
| 27 May 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation [https://docs.google.com/fileview?id=0B_-vbfka88vFNjIwY2IwYjItZmYyNi00MmNiLWFhOWItYmQ4OGZmZjVmZWUx&amp;amp;hl=en Presentation online] &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.issa-uk.org/ ISSA-UK] &lt;br /&gt;
| 13 May 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Personal Information Online Code of Practice|Personal Information Online COP]] &lt;br /&gt;
| 5 Mar 2010 &lt;br /&gt;
| Legislation &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to UK Information Commissioner's Office draft &amp;quot;Personal Information Online Code of Practice&amp;quot; &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.enisa.europa.eu/ ENISA] Mobile Apps &lt;br /&gt;
| Mar 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Identify and introduce OWASP contact for ENISA's Mobile Apps Project, in conjunction with Dinis Cruz. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Technology Strategy Board Secure Software Development Initiative|Technology Strategy Board Secure Software Development Partnership]] &lt;br /&gt;
| 18 Feb 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Liaise with the UK [http://www.innovateuk.org/ Technology Strategy Board] about the Secure Software Development Partnership (SSDP) in conjunction with the [http://www.owasp.org/index.php/London London chapter] leader Justin Clarke &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.issa-nova.org Information Systems Security Association Northern Virginia Chapter (ISSA-NOVA)] &lt;br /&gt;
| 21 Jan 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide presentation covering CSSLP, fundamentals of AppSec and Intro to OWASP and Global Industry Committee &lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.enisa.europa.eu/ ENISA] &lt;br /&gt;
| Jan 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Discuss opportunities for OWASP to work with ENISA, in conjunction with Dinis Cruz. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[:Industry:Draft NIST SP 800-37 Revision 1|NIST SP 800-37 Revision 1 FPD]] Review Project &lt;br /&gt;
| 30 Dec 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;NIST SP 800-37 Revision 1 Final Public Draft, Guide for Applying the Risk Management Framework to Federal Information Systems: A Security Life Cycle Approach&amp;quot; &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.crest-approved.org/ CREST] CRESTCon &lt;br /&gt;
| 15 Dec 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Already an oversubscribed event, YP &amp;amp;amp; CW have been placed on the reserve list. Update: Positions secured for the 15th. &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [http://msdn.microsoft.com/en-us/security/cc448177.aspx SDL Pro Network] &lt;br /&gt;
| 30 Nov 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Contact SDL Pro Network to discuss if there are opportunities for OWASP to become involved or connected in some way &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST IR 7628|Draft NIST IR 7628]] &lt;br /&gt;
| 25 Nov 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;NIST IR 7628 Draft Smart Grid Cyber Security Strategy and Requirements&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/OWASP_AppSec_DC_2009 Appsec DC 2009] &lt;br /&gt;
| 10-13 Nov 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation - special effort to engage with US Federal sector &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.justice.gov.uk/ UK Ministry of Justice] &lt;br /&gt;
| - &lt;br /&gt;
| Legislation &lt;br /&gt;
| Closed &lt;br /&gt;
| Ask to be added to official consultation list &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.it-sa.de/ IT-SA] &lt;br /&gt;
| 13-15 Oct 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| OWASP booth at trade show &lt;br /&gt;
| GH&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/OWASP_AppSec_Germany_2009_Conference OWASP AppSec Germany 2009] &lt;br /&gt;
| 13 Oct 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation &lt;br /&gt;
| GH&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.loc.gov Library of Congress] &lt;br /&gt;
| 28 Sep 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about OWASP &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/OWASP_Ireland_AppSec_2009_Conference OWASP Ireland AppSec 2009] &lt;br /&gt;
| 10 Sep 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation &lt;br /&gt;
| EK&lt;br /&gt;
|-&lt;br /&gt;
| OWASP Citations &lt;br /&gt;
| 7 Sep 2009 &lt;br /&gt;
| Other &lt;br /&gt;
| Closed &lt;br /&gt;
| Identify and record the most important references to OWASP in official, or otherwise important, documents. Page created at: [[Industry:Citations]] &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.loc.gov Library of Congress] &lt;br /&gt;
| 26 Aug 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about OWASP &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| OWASP webcast at Brighttalk [http://www.brighttalk.com/summit/dataprivacy2 Data and Privacy in Web 2.0 Summit] &lt;br /&gt;
| 13 Aug 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Deliver [http://www.brighttalk.com/webcasts/4767/attend OWASP presentation on XSS, client side exploitation, and countermeasures]. &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:SAFECode Secure Development Practices (update to Oct 2008 version)|SAFECode Secure Development Practices (update to Oct 2008 version)]] &lt;br /&gt;
| 31 Jul 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Response to [http://www.safecode.org/ SAFECode] &amp;quot;Fundamental Practices for Secure Software Development: A Guide to the Most Effective Secure Development Practices in Use Today.&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Category:OWASP_CSA_Project OWASP CSA Project] &lt;br /&gt;
| 8 Jul 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Response to RFC [http://www.cloudsecurityalliance.org/guidance/csaguide.pdf Cloud Security Alliance Guidance v1.0] &lt;br /&gt;
| TB&lt;br /&gt;
|-&lt;br /&gt;
| [[Scotland]] &lt;br /&gt;
| 25 Jun 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about the Global Industry Committee, its role and recent activities (presentation slides [[Image:Owasp-scotland-industry-committee-june-2009.ppt]] and written notes [[Image:Owasp-scotland-industry-committee-june-2009-notes.pdf]]) &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| OWASP Presentation at [http://cfp2009.org/ CFP Con 2009] &lt;br /&gt;
| 1 Jun 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Deliver presentation on web threats and countermeasures. See [http://www.cfp2009.org/wiki/index.php/Tutorials/Workshops CFP tutorial page] grep OWASP for more info. &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| ENISA [http://www.enisa.europa.eu/pages/02_03_news_2009_02_19_who_is_who.html Who-Is-Who Directory] &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Contact ENISA regarding OWASP inclusion in directory (in progress). Encourage European chapter leaders to contact their ENISA liaison officers (completed). Contact UK liaison officer on behalf of London, Leeds and Scotland chapters. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| IIL [http://www.iilondon.co.uk/ Insurance Institute of London] &lt;br /&gt;
| 2 Jun 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Contact IIL regarding future input to their publication [http://www.iilondon.co.uk/XtraCart/store/comersus_viewItem.asp?idProduct=187 Insurance Aspects of E-Commerce] &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST SP 800-118|Draft NIST SP 800-118]] &lt;br /&gt;
| 29 May 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;Draft NIST Special Publication 800-118 Guide to Enterprise Password Management&amp;quot; &lt;br /&gt;
| CW/EK/RB/DC&lt;br /&gt;
|-&lt;br /&gt;
| German IT Industry Association &lt;br /&gt;
| 15 May 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation on OWASP &lt;br /&gt;
| GH&lt;br /&gt;
|-&lt;br /&gt;
| [http://docs.google.com/Present?docid=ddkr62qv_171cd7gh5fb&amp;amp;skipauth=true Outreach Presentation to Frontier Airlines] &lt;br /&gt;
| 7 May 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide outreach presentation covering fundamentals of AppSec and Intro to OWASP &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:DPC BS 10012|DPC BS 10012]] &lt;br /&gt;
| 31 Mar 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;BS 10012 Specification for the management of personal information in compliance with the Data Protection Act 1998&amp;quot; Draft for Public Comment (DPC) &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST SP 800-53 Revision 3|Draft NIST SP 800-53 Revision 3]] &lt;br /&gt;
| 27 Mar 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;Draft NIST Special Publication 800-53 (Revision 3) Recommended Security Controls for Federal Information Systems and Organizations&amp;quot; &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST SP 800-122|Draft NIST SP 800-122]] &lt;br /&gt;
| 13 Mar 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;Draft NIST Special Publication 800-122 Guide to Protecting the Confidentiality of Personally Identifiable Information (PII)&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[London]] &lt;br /&gt;
| 12 Mar 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about the Global Industry Committee, its role and recent activities (presentation slides [[Image:Owasp-london-industry-committee-march-2009.ppt]] and written notes [[Image:Owasp-london-industry-committee-march-2009-notes.pdf]]) &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Digital Britain Interim Report|Digital Britain Interim Report]] &lt;br /&gt;
| 11 Mar 2009 &lt;br /&gt;
| Legislation &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to UK Government's &amp;quot;Digital Britain Interim Report Jan 2009&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Front_Range_OWASP_Conference_2009 SnowFROC Front Range] &lt;br /&gt;
| 5 Mar 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.commerce.gov/ Department of Commerce] &lt;br /&gt;
| 25 Feb 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about OWASP to Economic Security Working Group &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:DPC BS 8878:2009|DPC BS 8878:2009]] &lt;br /&gt;
| 31 Jan 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;BS 8878:2009 Web accessibility. Building accessible experiences for disabled people&amp;quot; Draft for Public Comment (DPC) &lt;br /&gt;
| Puneet/CW&lt;br /&gt;
|-&lt;br /&gt;
| AppSec Presentation Delivered to Infragard, Dec 2008 &lt;br /&gt;
| Dec 2008 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| [http://www.infragard.net/ Infragard] is a collaboration between the US FBI and maintainers of critical infrastructure. [http://docs.google.com/Present?docid=ddkr62qv_0cn7km4c3&amp;amp;skipauth=true Presentation here]. Email DC for full PPT with speaker notes &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| The Register [http://www.theregister.co.uk/2008/11/22/google_analytics_as_security_risk/ Google Analytics — Yes, it is a security risk] &lt;br /&gt;
| Nov 2008 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Co-ordination of response and provision of comments from OWASP leaders about risk of JavaScript on Barack Obama's website &lt;br /&gt;
| DC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== General Presentations and Reports  ===&lt;br /&gt;
&lt;br /&gt;
[[Summit 2009]] &lt;br /&gt;
&lt;br /&gt;
*Global Industry Committee Presentation [[Image:Owasp-summit2009-industry-committee.ppt]]&lt;br /&gt;
&lt;br /&gt;
Summaries (for inclusion into other full OWASP presentations): &lt;br /&gt;
&lt;br /&gt;
*Sep 2009 [[Image:Owasp-industry-committee-summary-september-2009.ppt]] &lt;br /&gt;
*Jul 2009 [[Image:Owasp-industry-committee-summary-july-2009.ppt]] &lt;br /&gt;
*May 2009 [[Image:Owasp-industry-committee-summary-may-2009.ppt]] &lt;br /&gt;
*Apr 2009 [[Image:Owasp-industry-committee-summary-april-2009.ppt]] &lt;br /&gt;
*Mar 2009 [[Image:Owasp-industry-committee-summary-march-2009.ppt]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other [http://www.owasp.org/index.php/Global_Committee_Pages Global Committees]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Global_Industry_Committee&amp;diff=96745</id>
		<title>Global Industry Committee</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Global_Industry_Committee&amp;diff=96745"/>
				<updated>2010-12-17T00:47:15Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: /* Meetings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''The Global Industry Committee was created during the OWASP EU Summit in Portugal. The primary purpose of the Global Industry Committee is to work with industry executives to gather requirements from industry, work with Membership, Projects and others.''' &lt;br /&gt;
&lt;br /&gt;
== Mission Statement  ==&lt;br /&gt;
&lt;br /&gt;
''To expand awareness of and promote the inclusion of software security best practices in Industry, Government, Academia and regulatory agencies and be a voice for industry. We will accomplish this through outreach; including presentations, development of position papers and collaborative efforts with other entities.'' [https://www.owasp.org/index.php/Global_Industry_Committee#General_Presentations_and_Reports Powerpoint of Accomplishments] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Committee Plan  ==&lt;br /&gt;
&lt;br /&gt;
Step 1: [[Industry:Organizations for Outreach|Identify specific organizations]] worth working with to spread the OWASP gospel &lt;br /&gt;
&lt;br /&gt;
Step 2: Prioritize the proposed liasons based on potential impact, and also realistic likelihood of the organization actively working with us &lt;br /&gt;
&lt;br /&gt;
Step 3: Execute, leveraging global OWASP resources as much as possible to maximize impact &lt;br /&gt;
&lt;br /&gt;
Step 4: Evaluate progress &amp;amp;amp; repeat Step 1-3 &lt;br /&gt;
&lt;br /&gt;
== Committee Members  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Committee Members: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name &lt;br /&gt;
! Email &lt;br /&gt;
! Location&lt;br /&gt;
|-&lt;br /&gt;
| Lorna Alamri &lt;br /&gt;
| lorna.alamri 'at' owasp dot org &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Joe Bernik &lt;br /&gt;
| bernik 'at' gmail dot com &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Rex Booth &lt;br /&gt;
| rex.booth 'at' gt dot com &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| David Campbell &lt;br /&gt;
| dcampbell 'at' owasp dot org &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Alexander Fry &lt;br /&gt;
| alexander.fry 'at' owasp dot org &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Georg Hess &lt;br /&gt;
| georg.hess 'at' artofdefence dot com &lt;br /&gt;
| Germany&lt;br /&gt;
|-&lt;br /&gt;
| Yiannis Pavlosoglou &lt;br /&gt;
| yiannis 'at' owasp dot org &lt;br /&gt;
| UK&lt;br /&gt;
|-&lt;br /&gt;
| Colin Watson &lt;br /&gt;
| colin.watson 'at' owasp dot org &lt;br /&gt;
| UK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Board Member Representative: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name &lt;br /&gt;
! Email &lt;br /&gt;
! Location&lt;br /&gt;
|-&lt;br /&gt;
| Matt Tesauro &lt;br /&gt;
| matt.tesauro 'at' owasp dot org &lt;br /&gt;
| USA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The committee chair (from Nov 2010) is Yiannis Pavlosoglou. Previous chairs: &lt;br /&gt;
&lt;br /&gt;
*Colin Watson (Nov 2009 to Oct 2010)&lt;br /&gt;
&lt;br /&gt;
= Monthly Report Format =&lt;br /&gt;
&lt;br /&gt;
See below...&lt;br /&gt;
&lt;br /&gt;
== Getting Involved  ==&lt;br /&gt;
&lt;br /&gt;
=== Mailing List  ===&lt;br /&gt;
&lt;br /&gt;
[http://lists.owasp.org/mailman/listinfo/global_industry_committee Join our mailing list] &lt;br /&gt;
&lt;br /&gt;
=== Meetings  ===&lt;br /&gt;
&lt;br /&gt;
The next Global Industry Committee meeting will be: &lt;br /&gt;
&lt;br /&gt;
*TBC &lt;br /&gt;
**Dial in number: +1 866 534 4754 &lt;br /&gt;
**Call code 192341&lt;br /&gt;
&lt;br /&gt;
Minutes of previous meetings are: &lt;br /&gt;
&lt;br /&gt;
*[[Industry:Minutes 2010-08-17|17 Aug 2010]] (also [http://www.owasp.org/images/0/0d/Gic_call_17aug2010.mp3 MP3 recording of the call]) &lt;br /&gt;
*[[Industry:Minutes 2010-05-18|18 May 2010]] &lt;br /&gt;
*[[Industry:Minutes 2010-01-05|05 Jan 2010]] (also [http://www.owasp.org/images/a/a3/Owasp_gic_call_5jan10.mp3 MP3 recording of the call]) &lt;br /&gt;
*[[Industry:Minutes 2009-01-23|23 Jan 2009]]&lt;br /&gt;
* 16 Dec 2010&lt;br /&gt;
&lt;br /&gt;
=== Membership  ===&lt;br /&gt;
&lt;br /&gt;
[[Membership]] explains how to become an OWASP organization supporter or individual member. But you don't have to be an OWASP Member or Committee Member to contribute. &lt;br /&gt;
&lt;br /&gt;
The current committee members joined for a 12 month term - see [[How to Join a Committee]] and [[Global Committee Pages]]. We would especially welcome new members who can widen our geographic coverage (e.g. Africa, Asia and South America) and who have time to contribute proactively. &lt;br /&gt;
&lt;br /&gt;
=== Other ongoing initiatives  ===&lt;br /&gt;
&lt;br /&gt;
*[http://www.owasp.org/index.php/Global_Industry_Committee-SIG Special Interest Groups] - Outreach to sector-specific critical infrastructures worldwide. &lt;br /&gt;
*[http://www.owasp.org/index.php/Category:India OWASP India Advisory Board] - Regional panel contributing to the software outsourcing industry. &lt;br /&gt;
*[http://www.owasp.org/index.php/Industry:Citations OWASP Citations] - References to OWASP in official, or otherwise important, documents.&lt;br /&gt;
&lt;br /&gt;
== Current Activity  ==&lt;br /&gt;
&lt;br /&gt;
=== Work in Progress  ===&lt;br /&gt;
&lt;br /&gt;
The current activities being undertaken: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Task &lt;br /&gt;
! Deadline &lt;br /&gt;
! Type &lt;br /&gt;
! Status &lt;br /&gt;
! Description &lt;br /&gt;
! Who&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/OWASP_Mobile_Security_Project Kickoff OWASP Mobile Security Project]&lt;br /&gt;
| 2011 Summit&lt;br /&gt;
| Projects&lt;br /&gt;
| New&lt;br /&gt;
| Provide GIC oversight to Mobile Security Project&lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.cio.gov/pages.cfm/page/Federal-Risk-and-Authorization-Management-Program-FedRAMP FedRAMP]&lt;br /&gt;
| 17 Jan 2011&lt;br /&gt;
| Standards&lt;br /&gt;
| In progress&lt;br /&gt;
| Provide response to FedRAMP certification and accreditation process&lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [http://trac.tools.ietf.org/area/sec/trac/wiki/SecurityDirectorate IETF Security Directorate]&lt;br /&gt;
| -&lt;br /&gt;
| Outreach&lt;br /&gt;
| In progress&lt;br /&gt;
| Make contact with, and discuss common goals with IETF&lt;br /&gt;
| YP/CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://hacking-lab.com/ Hacking Lab]&lt;br /&gt;
| 14 Dec 2011&lt;br /&gt;
| Outreach&lt;br /&gt;
| In progress&lt;br /&gt;
| Matt Tesauro has been working with Hacking Lab previously and brought it to the GIC&lt;br /&gt;
| MAT/YP&lt;br /&gt;
|-&lt;br /&gt;
| Leeds Chapter Leader Presentation&lt;br /&gt;
| 13 Dec 2011&lt;br /&gt;
| Outreach&lt;br /&gt;
| In progress&lt;br /&gt;
| LA is gathering OWASP overview and project information for OWASP Leeds presentation needs.&lt;br /&gt;
| LA&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;Configure SSL&amp;quot; Campaign&lt;br /&gt;
| 1 Feb 2011&lt;br /&gt;
| Paper write-up&lt;br /&gt;
| In progress&lt;br /&gt;
| Alexis FitzGerald's idea&lt;br /&gt;
| AFG/CW&lt;br /&gt;
|-&lt;br /&gt;
| [Testimonials]&lt;br /&gt;
| -&lt;br /&gt;
| Outreach&lt;br /&gt;
| In progress&lt;br /&gt;
| Obtain further testimonials for wiki page&lt;br /&gt;
| CW/SD&lt;br /&gt;
|-&lt;br /&gt;
| Reconnecting with past Industy Committee connections&lt;br /&gt;
| 1 Feb 2011&lt;br /&gt;
| Follow up&lt;br /&gt;
| In progress&lt;br /&gt;
| YP and LA to follow up with Industry Committee past contacts.&lt;br /&gt;
| YP/LA&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:ICO Data Sharing CoP|Data Sharing CoP]] &lt;br /&gt;
| 5 Jan 2011 &lt;br /&gt;
| Standards &lt;br /&gt;
| In progress &lt;br /&gt;
| Provide response to UK ICO's &amp;quot;Data Sharing Code of Practice Consultation&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.londoncentral.bcs.org BCS London Central] &lt;br /&gt;
| 17 Feb 2011 &lt;br /&gt;
| Outreach &lt;br /&gt;
| New &lt;br /&gt;
| Present a talk about OWASP. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.bcs.org BCS] &lt;br /&gt;
| 3 Sep 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Write article for BCS ITnow magazine about application security and OWASP Top Ten. &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.usmma.edu/ USMMA] &lt;br /&gt;
| 1 Jan 2011 &lt;br /&gt;
| Outreach &lt;br /&gt;
| New &lt;br /&gt;
| Make contact. Present a talk about OWASP to the USMMA computer club or security teams. &lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.usna.edu/ USNA] &lt;br /&gt;
| 1 Jan 2011 &lt;br /&gt;
| Outreach &lt;br /&gt;
| New &lt;br /&gt;
| Make contact. Present a talk about OWASP to the USNA computer science faculty and students or interest group. &lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.auscert.org.au/ AusCERT] &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Make contact and discuss opportunities for OWASP to contribute to their work &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| OWASP Financial Services SIG &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Working with Fabio Cerullo, Eoin Keary, Jim Routh, Jerry Kickenson and others on forming a SIG. Arranging a financial panel for AppSec in Washington, DC in November &lt;br /&gt;
| JB/EK&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.spva.org Secure POS Vendor Alliance (SPVA)] &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Begin dialogue about possibility of working together. Have had trouble getting through to them but have a good lead now. Updates soon&amp;amp;nbsp;:) &lt;br /&gt;
| DC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Completed Items  ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Task &lt;br /&gt;
! Completed &lt;br /&gt;
! Type &lt;br /&gt;
! Status &lt;br /&gt;
! Description &lt;br /&gt;
! Who&lt;br /&gt;
|-&lt;br /&gt;
| CRESTCON&lt;br /&gt;
| 14 Dec 2011&lt;br /&gt;
| Outreach&lt;br /&gt;
| Closed&lt;br /&gt;
| YP is attending CRESTCON in Royal Holloway, Surrey, UK&lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| (ISC)^2 Application Security Advisory Board (ASAB) &lt;br /&gt;
| 19 Nov 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| YP is now a member of the (ISC)^2 ASAB, with the first meeting to be held in FL on the above stated date. &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.techexecnetworks.com/event_2010.12.01.asp T.E.N./Fortify Software Security Assurance Summit] &lt;br /&gt;
| 1 Dec 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed&lt;br /&gt;
| Discuss quick wins and high impact software assurance activities using the OWASP SAMM model as reference and cite other OWASP projects as resources. &lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:DOJ Nondiscrimination on the Basis of Disability|DOJ Nondiscimination on the Basis of Disability]] &lt;br /&gt;
| 30 Nov 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to US DOJ's &amp;quot;Accessibility of Web Information and Services of State and Local Government Entities and Public Accommodations&amp;quot; &lt;br /&gt;
| AF/LA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:e-Consumer Protection Consultation|e-Consumer Protection Consultation]] &lt;br /&gt;
| 13 Oct 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Review and provide official OWASP response to [http://www.oft.gov.uk/ UK Office of Fair Trading] [http://www.oft.gov.uk/OFTwork/consultations/current/eprotection/ e-Consumer Protection Consultation]. &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:ENISA Cloud Computing Common Assurance Metrics|ENISA Common Assurance Maturity Model]] &lt;br /&gt;
| 8 Oct 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Work with [[:Category:OWASP Cloud ‐ 10 Project]] to contribute to the development of Common Assurance Maturity Model for [http://www.enisa.europa.eu/ ENISA]/Cloud Security Alliance/etc joint initiative. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.w3.org/TR/2010/WD-mwabp-20100713/ Mobile Web Application Best Practices Working Draft] &lt;br /&gt;
| 6 Aug 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Review and provide official OWASP response to W3C's [http://www.w3.org/2005/MWI/BPWG/ Mobile Web Best Practices Working Group]. &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.oft.gov.uk/ UK Office of Fair Trading] &lt;br /&gt;
| 23 Jul 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Ask to be added to official consultation list &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.businesslink.gov.uk BusinessLink] &lt;br /&gt;
| 1 Jul 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Offer to contribute to development of IT security information about [http://www.businesslink.gov.uk/bdotg/action/layer?topicId=1075421745 application security] on the BusinessLink website for UK SMEs. Outcome - no help required at present, but BusinessLink system to be disbanded. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| Veracode &lt;br /&gt;
| 28 Jun 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Discuss use of Open SAMM to classify Secure SDL maturity in Veracode's code analysis summary reports. Outcome - positive response received. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Leeds_UK OWASP Leeds/North] &lt;br /&gt;
| 16 Jun 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentations at chapter meeting in Newcastle-upon-Tyne about ENISA CAMM and OWASP Appsensor &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Front_Range_OWASP_Conference_2010 Front Range OWASP Conference (FROC) 2010] &lt;br /&gt;
| 2 Jun 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation [http://tinyurl.com/froctalks Vids &amp;amp;amp; presentations online] &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.isaca-denver.org/meetings/MAY_2010_CHPT_MTG.shtml OWASP Presentation at ISACA Denver Annual Meeting] &lt;br /&gt;
| 27 May 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation [https://docs.google.com/fileview?id=0B_-vbfka88vFNjIwY2IwYjItZmYyNi00MmNiLWFhOWItYmQ4OGZmZjVmZWUx&amp;amp;hl=en Presentation online] &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.issa-uk.org/ ISSA-UK] &lt;br /&gt;
| 13 May 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Personal Information Online Code of Practice|Personal Information Online COP]] &lt;br /&gt;
| 5 Mar 2010 &lt;br /&gt;
| Legislation &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to UK Information Commissioner's Office draft &amp;quot;Personal Information Online Code of Practice&amp;quot; &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.enisa.europa.eu/ ENISA] Mobile Apps &lt;br /&gt;
| Mar 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Identify and introduce OWASP contact for ENISA's Mobile Apps Project, in conjunction with Dinis Cruz. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Technology Strategy Board Secure Software Development Initiative|Technology Strategy Board Secure Software Development Partnership]] &lt;br /&gt;
| 18 Feb 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Liaise with the UK [http://www.innovateuk.org/ Technology Strategy Board] about the Secure Software Development Partnership (SSDP) in conjunction with the [http://www.owasp.org/index.php/London London chapter] leader Justin Clarke &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.issa-nova.org Information Systems Security Association Northern Virginia Chapter (ISSA-NOVA)] &lt;br /&gt;
| 21 Jan 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide presentation covering CSSLP, fundamentals of AppSec and Intro to OWASP and Global Industry Committee &lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.enisa.europa.eu/ ENISA] &lt;br /&gt;
| Jan 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Discuss opportunities for OWASP to work with ENISA, in conjunction with Dinis Cruz. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[:Industry:Draft NIST SP 800-37 Revision 1|NIST SP 800-37 Revision 1 FPD]] Review Project &lt;br /&gt;
| 30 Dec 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;NIST SP 800-37 Revision 1 Final Public Draft, Guide for Applying the Risk Management Framework to Federal Information Systems: A Security Life Cycle Approach&amp;quot; &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.crest-approved.org/ CREST] CRESTCon &lt;br /&gt;
| 15 Dec 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Already an oversubscribed event, YP &amp;amp;amp; CW have been placed on the reserve list. Update: Positions secured for the 15th. &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [http://msdn.microsoft.com/en-us/security/cc448177.aspx SDL Pro Network] &lt;br /&gt;
| 30 Nov 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Contact SDL Pro Network to discuss if there are opportunities for OWASP to become involved or connected in some way &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST IR 7628|Draft NIST IR 7628]] &lt;br /&gt;
| 25 Nov 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;NIST IR 7628 Draft Smart Grid Cyber Security Strategy and Requirements&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/OWASP_AppSec_DC_2009 Appsec DC 2009] &lt;br /&gt;
| 10-13 Nov 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation - special effort to engage with US Federal sector &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.justice.gov.uk/ UK Ministry of Justice] &lt;br /&gt;
| - &lt;br /&gt;
| Legislation &lt;br /&gt;
| Closed &lt;br /&gt;
| Ask to be added to official consultation list &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.it-sa.de/ IT-SA] &lt;br /&gt;
| 13-15 Oct 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| OWASP booth at trade show &lt;br /&gt;
| GH&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/OWASP_AppSec_Germany_2009_Conference OWASP AppSec Germany 2009] &lt;br /&gt;
| 13 Oct 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation &lt;br /&gt;
| GH&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.loc.gov Library of Congress] &lt;br /&gt;
| 28 Sep 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about OWASP &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/OWASP_Ireland_AppSec_2009_Conference OWASP Ireland AppSec 2009] &lt;br /&gt;
| 10 Sep 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation &lt;br /&gt;
| EK&lt;br /&gt;
|-&lt;br /&gt;
| OWASP Citations &lt;br /&gt;
| 7 Sep 2009 &lt;br /&gt;
| Other &lt;br /&gt;
| Closed &lt;br /&gt;
| Identify and record the most important references to OWASP in official, or otherwise important, documents. Page created at: [[Industry:Citations]] &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.loc.gov Library of Congress] &lt;br /&gt;
| 26 Aug 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about OWASP &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| OWASP webcast at Brighttalk [http://www.brighttalk.com/summit/dataprivacy2 Data and Privacy in Web 2.0 Summit] &lt;br /&gt;
| 13 Aug 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Deliver [http://www.brighttalk.com/webcasts/4767/attend OWASP presentation on XSS, client side exploitation, and countermeasures]. &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:SAFECode Secure Development Practices (update to Oct 2008 version)|SAFECode Secure Development Practices (update to Oct 2008 version)]] &lt;br /&gt;
| 31 Jul 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Response to [http://www.safecode.org/ SAFECode] &amp;quot;Fundamental Practices for Secure Software Development: A Guide to the Most Effective Secure Development Practices in Use Today.&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Category:OWASP_CSA_Project OWASP CSA Project] &lt;br /&gt;
| 8 Jul 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Response to RFC [http://www.cloudsecurityalliance.org/guidance/csaguide.pdf Cloud Security Alliance Guidance v1.0] &lt;br /&gt;
| TB&lt;br /&gt;
|-&lt;br /&gt;
| [[Scotland]] &lt;br /&gt;
| 25 Jun 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about the Global Industry Committee, its role and recent activities (presentation slides [[Image:Owasp-scotland-industry-committee-june-2009.ppt]] and written notes [[Image:Owasp-scotland-industry-committee-june-2009-notes.pdf]]) &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| OWASP Presentation at [http://cfp2009.org/ CFP Con 2009] &lt;br /&gt;
| 1 Jun 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Deliver presentation on web threats and countermeasures. See [http://www.cfp2009.org/wiki/index.php/Tutorials/Workshops CFP tutorial page] grep OWASP for more info. &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| ENISA [http://www.enisa.europa.eu/pages/02_03_news_2009_02_19_who_is_who.html Who-Is-Who Directory] &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Contact ENISA regarding OWASP inclusion in directory (in progress). Encourage European chapter leaders to contact their ENISA liaison officers (completed). Contact UK liaison officer on behalf of London, Leeds and Scotland chapters. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| IIL [http://www.iilondon.co.uk/ Insurance Institute of London] &lt;br /&gt;
| 2 Jun 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Contact IIL regarding future input to their publication [http://www.iilondon.co.uk/XtraCart/store/comersus_viewItem.asp?idProduct=187 Insurance Aspects of E-Commerce] &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST SP 800-118|Draft NIST SP 800-118]] &lt;br /&gt;
| 29 May 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;Draft NIST Special Publication 800-118 Guide to Enterprise Password Management&amp;quot; &lt;br /&gt;
| CW/EK/RB/DC&lt;br /&gt;
|-&lt;br /&gt;
| German IT Industry Association &lt;br /&gt;
| 15 May 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation on OWASP &lt;br /&gt;
| GH&lt;br /&gt;
|-&lt;br /&gt;
| [http://docs.google.com/Present?docid=ddkr62qv_171cd7gh5fb&amp;amp;skipauth=true Outreach Presentation to Frontier Airlines] &lt;br /&gt;
| 7 May 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide outreach presentation covering fundamentals of AppSec and Intro to OWASP &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:DPC BS 10012|DPC BS 10012]] &lt;br /&gt;
| 31 Mar 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;BS 10012 Specification for the management of personal information in compliance with the Data Protection Act 1998&amp;quot; Draft for Public Comment (DPC) &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST SP 800-53 Revision 3|Draft NIST SP 800-53 Revision 3]] &lt;br /&gt;
| 27 Mar 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;Draft NIST Special Publication 800-53 (Revision 3) Recommended Security Controls for Federal Information Systems and Organizations&amp;quot; &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST SP 800-122|Draft NIST SP 800-122]] &lt;br /&gt;
| 13 Mar 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;Draft NIST Special Publication 800-122 Guide to Protecting the Confidentiality of Personally Identifiable Information (PII)&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[London]] &lt;br /&gt;
| 12 Mar 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about the Global Industry Committee, its role and recent activities (presentation slides [[Image:Owasp-london-industry-committee-march-2009.ppt]] and written notes [[Image:Owasp-london-industry-committee-march-2009-notes.pdf]]) &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Digital Britain Interim Report|Digital Britain Interim Report]] &lt;br /&gt;
| 11 Mar 2009 &lt;br /&gt;
| Legislation &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to UK Government's &amp;quot;Digital Britain Interim Report Jan 2009&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Front_Range_OWASP_Conference_2009 SnowFROC Front Range] &lt;br /&gt;
| 5 Mar 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.commerce.gov/ Department of Commerce] &lt;br /&gt;
| 25 Feb 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about OWASP to Economic Security Working Group &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:DPC BS 8878:2009|DPC BS 8878:2009]] &lt;br /&gt;
| 31 Jan 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;BS 8878:2009 Web accessibility. Building accessible experiences for disabled people&amp;quot; Draft for Public Comment (DPC) &lt;br /&gt;
| Puneet/CW&lt;br /&gt;
|-&lt;br /&gt;
| AppSec Presentation Delivered to Infragard, Dec 2008 &lt;br /&gt;
| Dec 2008 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| [http://www.infragard.net/ Infragard] is a collaboration between the US FBI and maintainers of critical infrastructure. [http://docs.google.com/Present?docid=ddkr62qv_0cn7km4c3&amp;amp;skipauth=true Presentation here]. Email DC for full PPT with speaker notes &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| The Register [http://www.theregister.co.uk/2008/11/22/google_analytics_as_security_risk/ Google Analytics — Yes, it is a security risk] &lt;br /&gt;
| Nov 2008 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Co-ordination of response and provision of comments from OWASP leaders about risk of JavaScript on Barack Obama's website &lt;br /&gt;
| DC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== General Presentations and Reports  ===&lt;br /&gt;
&lt;br /&gt;
[[Summit 2009]] &lt;br /&gt;
&lt;br /&gt;
*Global Industry Committee Presentation [[Image:Owasp-summit2009-industry-committee.ppt]]&lt;br /&gt;
&lt;br /&gt;
Summaries (for inclusion into other full OWASP presentations): &lt;br /&gt;
&lt;br /&gt;
*Sep 2009 [[Image:Owasp-industry-committee-summary-september-2009.ppt]] &lt;br /&gt;
*Jul 2009 [[Image:Owasp-industry-committee-summary-july-2009.ppt]] &lt;br /&gt;
*May 2009 [[Image:Owasp-industry-committee-summary-may-2009.ppt]] &lt;br /&gt;
*Apr 2009 [[Image:Owasp-industry-committee-summary-april-2009.ppt]] &lt;br /&gt;
*Mar 2009 [[Image:Owasp-industry-committee-summary-march-2009.ppt]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other [http://www.owasp.org/index.php/Global_Committee_Pages Global Committees]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Global_Industry_Committee&amp;diff=96197</id>
		<title>Global Industry Committee</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Global_Industry_Committee&amp;diff=96197"/>
				<updated>2010-12-14T00:07:16Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: /* Work in Progress */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''The Global Industry Committee was created during the OWASP EU Summit in Portugal. The primary purpose of the Global Industry Committee is to work with industry executives to gather requirements from industry, work with Membership, Projects and others.''' &lt;br /&gt;
&lt;br /&gt;
== Mission Statement  ==&lt;br /&gt;
&lt;br /&gt;
''To expand awareness of and promote the inclusion of software security best practices in Industry, Government, Academia and regulatory agencies and be a voice for industry. We will accomplish this through outreach; including presentations, development of position papers and collaborative efforts with other entities.'' [https://www.owasp.org/index.php/Global_Industry_Committee#General_Presentations_and_Reports Powerpoint of Accomplishments] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Committee Plan  ==&lt;br /&gt;
&lt;br /&gt;
Step 1: [[Industry:Organizations for Outreach|Identify specific organizations]] worth working with to spread the OWASP gospel &lt;br /&gt;
&lt;br /&gt;
Step 2: Prioritize the proposed liasons based on potential impact, and also realistic likelihood of the organization actively working with us &lt;br /&gt;
&lt;br /&gt;
Step 3: Execute, leveraging global OWASP resources as much as possible to maximize impact &lt;br /&gt;
&lt;br /&gt;
Step 4: Evaluate progress &amp;amp;amp; repeat Step 1-3 &lt;br /&gt;
&lt;br /&gt;
== Committee Members  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Committee Members: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name &lt;br /&gt;
! Email &lt;br /&gt;
! Location&lt;br /&gt;
|-&lt;br /&gt;
| Lorna Alamri &lt;br /&gt;
| lorna.alamri 'at' owasp dot org &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Joe Bernik &lt;br /&gt;
| bernik 'at' gmail dot com &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Rex Booth &lt;br /&gt;
| rex.booth 'at' gt dot com &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| David Campbell &lt;br /&gt;
| dcampbell 'at' owasp dot org &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Alexander Fry &lt;br /&gt;
| alexander.fry 'at' owasp dot org &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Georg Hess &lt;br /&gt;
| georg.hess 'at' artofdefence dot com &lt;br /&gt;
| Germany&lt;br /&gt;
|-&lt;br /&gt;
| Yiannis Pavlosoglou &lt;br /&gt;
| yiannis 'at' owasp dot org &lt;br /&gt;
| UK&lt;br /&gt;
|-&lt;br /&gt;
| Colin Watson &lt;br /&gt;
| colin.watson 'at' owasp dot org &lt;br /&gt;
| UK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Board Member Representative: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name &lt;br /&gt;
! Email &lt;br /&gt;
! Location&lt;br /&gt;
|-&lt;br /&gt;
| Matt Tesauro &lt;br /&gt;
| matt.tesauro 'at' owasp dot org &lt;br /&gt;
| USA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The committee chair (from Nov 2010) is Yiannis Pavlosoglou. Previous chairs: &lt;br /&gt;
&lt;br /&gt;
*Colin Watson (Nov 2009 to Oct 2010)&lt;br /&gt;
&lt;br /&gt;
= Monthly Report Format =&lt;br /&gt;
&lt;br /&gt;
See below...&lt;br /&gt;
&lt;br /&gt;
== Getting Involved  ==&lt;br /&gt;
&lt;br /&gt;
=== Mailing List  ===&lt;br /&gt;
&lt;br /&gt;
[http://lists.owasp.org/mailman/listinfo/global_industry_committee Join our mailing list] &lt;br /&gt;
&lt;br /&gt;
=== Meetings  ===&lt;br /&gt;
&lt;br /&gt;
The next Global Industry Committee meeting will be: &lt;br /&gt;
&lt;br /&gt;
*TBC &lt;br /&gt;
**Dial in number: +1 866 534 4754 &lt;br /&gt;
**Call code 192341&lt;br /&gt;
&lt;br /&gt;
Minutes of previous meetings are: &lt;br /&gt;
&lt;br /&gt;
*[[Industry:Minutes 2010-08-17|17 Aug 2010]] (also [http://www.owasp.org/images/0/0d/Gic_call_17aug2010.mp3 MP3 recording of the call]) &lt;br /&gt;
*[[Industry:Minutes 2010-05-18|18 May 2010]] &lt;br /&gt;
*[[Industry:Minutes 2010-01-05|05 Jan 2010]] (also [http://www.owasp.org/images/a/a3/Owasp_gic_call_5jan10.mp3 MP3 recording of the call]) &lt;br /&gt;
*[[Industry:Minutes 2009-01-23|23 Jan 2009]]&lt;br /&gt;
&lt;br /&gt;
=== Membership  ===&lt;br /&gt;
&lt;br /&gt;
[[Membership]] explains how to become an OWASP organization supporter or individual member. But you don't have to be an OWASP Member or Committee Member to contribute. &lt;br /&gt;
&lt;br /&gt;
The current committee members joined for a 12 month term - see [[How to Join a Committee]] and [[Global Committee Pages]]. We would especially welcome new members who can widen our geographic coverage (e.g. Africa, Asia and South America) and who have time to contribute proactively. &lt;br /&gt;
&lt;br /&gt;
=== Other ongoing initiatives  ===&lt;br /&gt;
&lt;br /&gt;
*[http://www.owasp.org/index.php/Global_Industry_Committee-SIG Special Interest Groups] - Outreach to sector-specific critical infrastructures worldwide. &lt;br /&gt;
*[http://www.owasp.org/index.php/Category:India OWASP India Advisory Board] - Regional panel contributing to the software outsourcing industry. &lt;br /&gt;
*[http://www.owasp.org/index.php/Industry:Citations OWASP Citations] - References to OWASP in official, or otherwise important, documents.&lt;br /&gt;
&lt;br /&gt;
== Current Activity  ==&lt;br /&gt;
&lt;br /&gt;
=== Work in Progress  ===&lt;br /&gt;
&lt;br /&gt;
The current activities being undertaken: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Task &lt;br /&gt;
! Deadline &lt;br /&gt;
! Type &lt;br /&gt;
! Status &lt;br /&gt;
! Description &lt;br /&gt;
! Who&lt;br /&gt;
|-&lt;br /&gt;
| CRESTCON&lt;br /&gt;
| 14 Dec 2011&lt;br /&gt;
| Reachout&lt;br /&gt;
| In progress&lt;br /&gt;
| YP is attending CRESTCON in Royal Holloway, Surrey, UK&lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| Configure SSL&amp;quot; Campaign&lt;br /&gt;
| 1 Feb 2011&lt;br /&gt;
| Paper write-up&lt;br /&gt;
| In progress&lt;br /&gt;
| Colin Watson with Alexis FitzGerald are drafting this&lt;br /&gt;
| CW/AF&lt;br /&gt;
|-&lt;br /&gt;
| Reconnecting with past Industy Committee connections&lt;br /&gt;
| 1 Feb 2011&lt;br /&gt;
| Follow up&lt;br /&gt;
| In progress&lt;br /&gt;
| YP and LA to follow up with Industry Committee past contacts.&lt;br /&gt;
| YP/LA&lt;br /&gt;
|-&lt;br /&gt;
| (ISC)^2 Application Security Advisory Board (ASAB) &lt;br /&gt;
| 19 Nov 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| In progress &lt;br /&gt;
| YP is now a member of the (ISC)^2 ASAB, with the first meeting to be held in FL on the above stated date. &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:ICO Data Sharing CoP|Data Sharing CoP]] &lt;br /&gt;
| 5 Jan 2011 &lt;br /&gt;
| Standards &lt;br /&gt;
| In progress &lt;br /&gt;
| Provide response to UK ICO's &amp;quot;Data Sharing Code of Practice Consultation&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.londoncentral.bcs.org BCS London Central] &lt;br /&gt;
| 17 Feb 2011 &lt;br /&gt;
| Outreach &lt;br /&gt;
| New &lt;br /&gt;
| Present a talk about OWASP. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.bcs.org BCS] &lt;br /&gt;
| 3 Sep 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Write article for BCS ITnow magazine about application security and OWASP Top Ten. &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.usmma.edu/ USMMA] &lt;br /&gt;
| 1 Jan 2011 &lt;br /&gt;
| Outreach &lt;br /&gt;
| New &lt;br /&gt;
| Make contact. Present a talk about OWASP to the USMMA computer club or security teams. &lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.usna.edu/ USNA] &lt;br /&gt;
| 1 Jan 2011 &lt;br /&gt;
| Outreach &lt;br /&gt;
| New &lt;br /&gt;
| Make contact. Present a talk about OWASP to the USNA computer science faculty and students or interest group. &lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.auscert.org.au/ AusCERT] &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Make contact and discuss opportunities for OWASP to contribute to their work &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| OWASP Financial Services SIG &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Working with Fabio Cerullo, Eoin Keary, Jim Routh, Jerry Kickenson and others on forming a SIG. Arranging a financial panel for AppSec in Washington, DC in November &lt;br /&gt;
| JB/EK&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.spva.org Secure POS Vendor Alliance (SPVA)] &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Begin dialogue about possibility of working together. Have had trouble getting through to them but have a good lead now. Updates soon&amp;amp;nbsp;:) &lt;br /&gt;
| DC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Completed Items  ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Task &lt;br /&gt;
! Completed &lt;br /&gt;
! Type &lt;br /&gt;
! Status &lt;br /&gt;
! Description &lt;br /&gt;
! Who&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.techexecnetworks.com/event_2010.12.01.asp T.E.N./Fortify Software Security Assurance Summit] &lt;br /&gt;
| 1 Dec 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed&lt;br /&gt;
| Discuss quick wins and high impact software assurance activities using the OWASP SAMM model as reference and cite other OWASP projects as resources. &lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:DOJ Nondiscrimination on the Basis of Disability|DOJ Nondiscimination on the Basis of Disability]] &lt;br /&gt;
| 30 Nov 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to US DOJ's &amp;quot;Accessibility of Web Information and Services of State and Local Government Entities and Public Accommodations&amp;quot; &lt;br /&gt;
| AF/LA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:e-Consumer Protection Consultation|e-Consumer Protection Consultation]] &lt;br /&gt;
| 13 Oct 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Review and provide official OWASP response to [http://www.oft.gov.uk/ UK Office of Fair Trading] [http://www.oft.gov.uk/OFTwork/consultations/current/eprotection/ e-Consumer Protection Consultation]. &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:ENISA Cloud Computing Common Assurance Metrics|ENISA Common Assurance Maturity Model]] &lt;br /&gt;
| 8 Oct 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Work with [[:Category:OWASP Cloud ‐ 10 Project]] to contribute to the development of Common Assurance Maturity Model for [http://www.enisa.europa.eu/ ENISA]/Cloud Security Alliance/etc joint initiative. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.w3.org/TR/2010/WD-mwabp-20100713/ Mobile Web Application Best Practices Working Draft] &lt;br /&gt;
| 6 Aug 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Review and provide official OWASP response to W3C's [http://www.w3.org/2005/MWI/BPWG/ Mobile Web Best Practices Working Group]. &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.oft.gov.uk/ UK Office of Fair Trading] &lt;br /&gt;
| 23 Jul 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Ask to be added to official consultation list &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.businesslink.gov.uk BusinessLink] &lt;br /&gt;
| 1 Jul 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Offer to contribute to development of IT security information about [http://www.businesslink.gov.uk/bdotg/action/layer?topicId=1075421745 application security] on the BusinessLink website for UK SMEs. Outcome - no help required at present, but BusinessLink system to be disbanded. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| Veracode &lt;br /&gt;
| 28 Jun 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Discuss use of Open SAMM to classify Secure SDL maturity in Veracode's code analysis summary reports. Outcome - positive response received. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Leeds_UK OWASP Leeds/North] &lt;br /&gt;
| 16 Jun 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentations at chapter meeting in Newcastle-upon-Tyne about ENISA CAMM and OWASP Appsensor &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Front_Range_OWASP_Conference_2010 Front Range OWASP Conference (FROC) 2010] &lt;br /&gt;
| 2 Jun 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation [http://tinyurl.com/froctalks Vids &amp;amp;amp; presentations online] &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.isaca-denver.org/meetings/MAY_2010_CHPT_MTG.shtml OWASP Presentation at ISACA Denver Annual Meeting] &lt;br /&gt;
| 27 May 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation [https://docs.google.com/fileview?id=0B_-vbfka88vFNjIwY2IwYjItZmYyNi00MmNiLWFhOWItYmQ4OGZmZjVmZWUx&amp;amp;hl=en Presentation online] &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.issa-uk.org/ ISSA-UK] &lt;br /&gt;
| 13 May 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Personal Information Online Code of Practice|Personal Information Online COP]] &lt;br /&gt;
| 5 Mar 2010 &lt;br /&gt;
| Legislation &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to UK Information Commissioner's Office draft &amp;quot;Personal Information Online Code of Practice&amp;quot; &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.enisa.europa.eu/ ENISA] Mobile Apps &lt;br /&gt;
| Mar 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Identify and introduce OWASP contact for ENISA's Mobile Apps Project, in conjunction with Dinis Cruz. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Technology Strategy Board Secure Software Development Initiative|Technology Strategy Board Secure Software Development Partnership]] &lt;br /&gt;
| 18 Feb 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Liaise with the UK [http://www.innovateuk.org/ Technology Strategy Board] about the Secure Software Development Partnership (SSDP) in conjunction with the [http://www.owasp.org/index.php/London London chapter] leader Justin Clarke &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.issa-nova.org Information Systems Security Association Northern Virginia Chapter (ISSA-NOVA)] &lt;br /&gt;
| 21 Jan 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide presentation covering CSSLP, fundamentals of AppSec and Intro to OWASP and Global Industry Committee &lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.enisa.europa.eu/ ENISA] &lt;br /&gt;
| Jan 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Discuss opportunities for OWASP to work with ENISA, in conjunction with Dinis Cruz. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[:Industry:Draft NIST SP 800-37 Revision 1|NIST SP 800-37 Revision 1 FPD]] Review Project &lt;br /&gt;
| 30 Dec 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;NIST SP 800-37 Revision 1 Final Public Draft, Guide for Applying the Risk Management Framework to Federal Information Systems: A Security Life Cycle Approach&amp;quot; &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.crest-approved.org/ CREST] CRESTCon &lt;br /&gt;
| 15 Dec 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Already an oversubscribed event, YP &amp;amp;amp; CW have been placed on the reserve list. Update: Positions secured for the 15th. &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [http://msdn.microsoft.com/en-us/security/cc448177.aspx SDL Pro Network] &lt;br /&gt;
| 30 Nov 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Contact SDL Pro Network to discuss if there are opportunities for OWASP to become involved or connected in some way &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST IR 7628|Draft NIST IR 7628]] &lt;br /&gt;
| 25 Nov 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;NIST IR 7628 Draft Smart Grid Cyber Security Strategy and Requirements&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/OWASP_AppSec_DC_2009 Appsec DC 2009] &lt;br /&gt;
| 10-13 Nov 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation - special effort to engage with US Federal sector &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.justice.gov.uk/ UK Ministry of Justice] &lt;br /&gt;
| - &lt;br /&gt;
| Legislation &lt;br /&gt;
| Closed &lt;br /&gt;
| Ask to be added to official consultation list &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.it-sa.de/ IT-SA] &lt;br /&gt;
| 13-15 Oct 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| OWASP booth at trade show &lt;br /&gt;
| GH&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/OWASP_AppSec_Germany_2009_Conference OWASP AppSec Germany 2009] &lt;br /&gt;
| 13 Oct 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation &lt;br /&gt;
| GH&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.loc.gov Library of Congress] &lt;br /&gt;
| 28 Sep 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about OWASP &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/OWASP_Ireland_AppSec_2009_Conference OWASP Ireland AppSec 2009] &lt;br /&gt;
| 10 Sep 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation &lt;br /&gt;
| EK&lt;br /&gt;
|-&lt;br /&gt;
| OWASP Citations &lt;br /&gt;
| 7 Sep 2009 &lt;br /&gt;
| Other &lt;br /&gt;
| Closed &lt;br /&gt;
| Identify and record the most important references to OWASP in official, or otherwise important, documents. Page created at: [[Industry:Citations]] &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.loc.gov Library of Congress] &lt;br /&gt;
| 26 Aug 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about OWASP &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| OWASP webcast at Brighttalk [http://www.brighttalk.com/summit/dataprivacy2 Data and Privacy in Web 2.0 Summit] &lt;br /&gt;
| 13 Aug 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Deliver [http://www.brighttalk.com/webcasts/4767/attend OWASP presentation on XSS, client side exploitation, and countermeasures]. &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:SAFECode Secure Development Practices (update to Oct 2008 version)|SAFECode Secure Development Practices (update to Oct 2008 version)]] &lt;br /&gt;
| 31 Jul 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Response to [http://www.safecode.org/ SAFECode] &amp;quot;Fundamental Practices for Secure Software Development: A Guide to the Most Effective Secure Development Practices in Use Today.&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Category:OWASP_CSA_Project OWASP CSA Project] &lt;br /&gt;
| 8 Jul 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Response to RFC [http://www.cloudsecurityalliance.org/guidance/csaguide.pdf Cloud Security Alliance Guidance v1.0] &lt;br /&gt;
| TB&lt;br /&gt;
|-&lt;br /&gt;
| [[Scotland]] &lt;br /&gt;
| 25 Jun 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about the Global Industry Committee, its role and recent activities (presentation slides [[Image:Owasp-scotland-industry-committee-june-2009.ppt]] and written notes [[Image:Owasp-scotland-industry-committee-june-2009-notes.pdf]]) &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| OWASP Presentation at [http://cfp2009.org/ CFP Con 2009] &lt;br /&gt;
| 1 Jun 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Deliver presentation on web threats and countermeasures. See [http://www.cfp2009.org/wiki/index.php/Tutorials/Workshops CFP tutorial page] grep OWASP for more info. &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| ENISA [http://www.enisa.europa.eu/pages/02_03_news_2009_02_19_who_is_who.html Who-Is-Who Directory] &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Contact ENISA regarding OWASP inclusion in directory (in progress). Encourage European chapter leaders to contact their ENISA liaison officers (completed). Contact UK liaison officer on behalf of London, Leeds and Scotland chapters. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| IIL [http://www.iilondon.co.uk/ Insurance Institute of London] &lt;br /&gt;
| 2 Jun 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Contact IIL regarding future input to their publication [http://www.iilondon.co.uk/XtraCart/store/comersus_viewItem.asp?idProduct=187 Insurance Aspects of E-Commerce] &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST SP 800-118|Draft NIST SP 800-118]] &lt;br /&gt;
| 29 May 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;Draft NIST Special Publication 800-118 Guide to Enterprise Password Management&amp;quot; &lt;br /&gt;
| CW/EK/RB/DC&lt;br /&gt;
|-&lt;br /&gt;
| German IT Industry Association &lt;br /&gt;
| 15 May 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation on OWASP &lt;br /&gt;
| GH&lt;br /&gt;
|-&lt;br /&gt;
| [http://docs.google.com/Present?docid=ddkr62qv_171cd7gh5fb&amp;amp;skipauth=true Outreach Presentation to Frontier Airlines] &lt;br /&gt;
| 7 May 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide outreach presentation covering fundamentals of AppSec and Intro to OWASP &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:DPC BS 10012|DPC BS 10012]] &lt;br /&gt;
| 31 Mar 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;BS 10012 Specification for the management of personal information in compliance with the Data Protection Act 1998&amp;quot; Draft for Public Comment (DPC) &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST SP 800-53 Revision 3|Draft NIST SP 800-53 Revision 3]] &lt;br /&gt;
| 27 Mar 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;Draft NIST Special Publication 800-53 (Revision 3) Recommended Security Controls for Federal Information Systems and Organizations&amp;quot; &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST SP 800-122|Draft NIST SP 800-122]] &lt;br /&gt;
| 13 Mar 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;Draft NIST Special Publication 800-122 Guide to Protecting the Confidentiality of Personally Identifiable Information (PII)&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[London]] &lt;br /&gt;
| 12 Mar 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about the Global Industry Committee, its role and recent activities (presentation slides [[Image:Owasp-london-industry-committee-march-2009.ppt]] and written notes [[Image:Owasp-london-industry-committee-march-2009-notes.pdf]]) &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Digital Britain Interim Report|Digital Britain Interim Report]] &lt;br /&gt;
| 11 Mar 2009 &lt;br /&gt;
| Legislation &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to UK Government's &amp;quot;Digital Britain Interim Report Jan 2009&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Front_Range_OWASP_Conference_2009 SnowFROC Front Range] &lt;br /&gt;
| 5 Mar 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.commerce.gov/ Department of Commerce] &lt;br /&gt;
| 25 Feb 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about OWASP to Economic Security Working Group &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:DPC BS 8878:2009|DPC BS 8878:2009]] &lt;br /&gt;
| 31 Jan 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;BS 8878:2009 Web accessibility. Building accessible experiences for disabled people&amp;quot; Draft for Public Comment (DPC) &lt;br /&gt;
| Puneet/CW&lt;br /&gt;
|-&lt;br /&gt;
| AppSec Presentation Delivered to Infragard, Dec 2008 &lt;br /&gt;
| Dec 2008 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| [http://www.infragard.net/ Infragard] is a collaboration between the US FBI and maintainers of critical infrastructure. [http://docs.google.com/Present?docid=ddkr62qv_0cn7km4c3&amp;amp;skipauth=true Presentation here]. Email DC for full PPT with speaker notes &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| The Register [http://www.theregister.co.uk/2008/11/22/google_analytics_as_security_risk/ Google Analytics — Yes, it is a security risk] &lt;br /&gt;
| Nov 2008 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Co-ordination of response and provision of comments from OWASP leaders about risk of JavaScript on Barack Obama's website &lt;br /&gt;
| DC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== General Presentations and Reports  ===&lt;br /&gt;
&lt;br /&gt;
[[Summit 2009]] &lt;br /&gt;
&lt;br /&gt;
*Global Industry Committee Presentation [[Image:Owasp-summit2009-industry-committee.ppt]]&lt;br /&gt;
&lt;br /&gt;
Summaries (for inclusion into other full OWASP presentations): &lt;br /&gt;
&lt;br /&gt;
*Sep 2009 [[Image:Owasp-industry-committee-summary-september-2009.ppt]] &lt;br /&gt;
*Jul 2009 [[Image:Owasp-industry-committee-summary-july-2009.ppt]] &lt;br /&gt;
*May 2009 [[Image:Owasp-industry-committee-summary-may-2009.ppt]] &lt;br /&gt;
*Apr 2009 [[Image:Owasp-industry-committee-summary-april-2009.ppt]] &lt;br /&gt;
*Mar 2009 [[Image:Owasp-industry-committee-summary-march-2009.ppt]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other [http://www.owasp.org/index.php/Global_Committee_Pages Global Committees]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Global_Industry_Committee&amp;diff=96196</id>
		<title>Global Industry Committee</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Global_Industry_Committee&amp;diff=96196"/>
				<updated>2010-12-13T23:52:54Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: /* Committee Members */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''The Global Industry Committee was created during the OWASP EU Summit in Portugal. The primary purpose of the Global Industry Committee is to work with industry executives to gather requirements from industry, work with Membership, Projects and others.''' &lt;br /&gt;
&lt;br /&gt;
== Mission Statement  ==&lt;br /&gt;
&lt;br /&gt;
''To expand awareness of and promote the inclusion of software security best practices in Industry, Government, Academia and regulatory agencies and be a voice for industry. We will accomplish this through outreach; including presentations, development of position papers and collaborative efforts with other entities.'' [https://www.owasp.org/index.php/Global_Industry_Committee#General_Presentations_and_Reports Powerpoint of Accomplishments] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Committee Plan  ==&lt;br /&gt;
&lt;br /&gt;
Step 1: [[Industry:Organizations for Outreach|Identify specific organizations]] worth working with to spread the OWASP gospel &lt;br /&gt;
&lt;br /&gt;
Step 2: Prioritize the proposed liasons based on potential impact, and also realistic likelihood of the organization actively working with us &lt;br /&gt;
&lt;br /&gt;
Step 3: Execute, leveraging global OWASP resources as much as possible to maximize impact &lt;br /&gt;
&lt;br /&gt;
Step 4: Evaluate progress &amp;amp;amp; repeat Step 1-3 &lt;br /&gt;
&lt;br /&gt;
== Committee Members  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Committee Members: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name &lt;br /&gt;
! Email &lt;br /&gt;
! Location&lt;br /&gt;
|-&lt;br /&gt;
| Lorna Alamri &lt;br /&gt;
| lorna.alamri 'at' owasp dot org &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Joe Bernik &lt;br /&gt;
| bernik 'at' gmail dot com &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Rex Booth &lt;br /&gt;
| rex.booth 'at' gt dot com &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| David Campbell &lt;br /&gt;
| dcampbell 'at' owasp dot org &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Alexander Fry &lt;br /&gt;
| alexander.fry 'at' owasp dot org &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Georg Hess &lt;br /&gt;
| georg.hess 'at' artofdefence dot com &lt;br /&gt;
| Germany&lt;br /&gt;
|-&lt;br /&gt;
| Yiannis Pavlosoglou &lt;br /&gt;
| yiannis 'at' owasp dot org &lt;br /&gt;
| UK&lt;br /&gt;
|-&lt;br /&gt;
| Colin Watson &lt;br /&gt;
| colin.watson 'at' owasp dot org &lt;br /&gt;
| UK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Board Member Representative: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name &lt;br /&gt;
! Email &lt;br /&gt;
! Location&lt;br /&gt;
|-&lt;br /&gt;
| Matt Tesauro &lt;br /&gt;
| matt.tesauro 'at' owasp dot org &lt;br /&gt;
| USA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The committee chair (from Nov 2010) is Yiannis Pavlosoglou. Previous chairs: &lt;br /&gt;
&lt;br /&gt;
*Colin Watson (Nov 2009 to Oct 2010)&lt;br /&gt;
&lt;br /&gt;
= Monthly Report Format =&lt;br /&gt;
&lt;br /&gt;
See below...&lt;br /&gt;
&lt;br /&gt;
== Getting Involved  ==&lt;br /&gt;
&lt;br /&gt;
=== Mailing List  ===&lt;br /&gt;
&lt;br /&gt;
[http://lists.owasp.org/mailman/listinfo/global_industry_committee Join our mailing list] &lt;br /&gt;
&lt;br /&gt;
=== Meetings  ===&lt;br /&gt;
&lt;br /&gt;
The next Global Industry Committee meeting will be: &lt;br /&gt;
&lt;br /&gt;
*TBC &lt;br /&gt;
**Dial in number: +1 866 534 4754 &lt;br /&gt;
**Call code 192341&lt;br /&gt;
&lt;br /&gt;
Minutes of previous meetings are: &lt;br /&gt;
&lt;br /&gt;
*[[Industry:Minutes 2010-08-17|17 Aug 2010]] (also [http://www.owasp.org/images/0/0d/Gic_call_17aug2010.mp3 MP3 recording of the call]) &lt;br /&gt;
*[[Industry:Minutes 2010-05-18|18 May 2010]] &lt;br /&gt;
*[[Industry:Minutes 2010-01-05|05 Jan 2010]] (also [http://www.owasp.org/images/a/a3/Owasp_gic_call_5jan10.mp3 MP3 recording of the call]) &lt;br /&gt;
*[[Industry:Minutes 2009-01-23|23 Jan 2009]]&lt;br /&gt;
&lt;br /&gt;
=== Membership  ===&lt;br /&gt;
&lt;br /&gt;
[[Membership]] explains how to become an OWASP organization supporter or individual member. But you don't have to be an OWASP Member or Committee Member to contribute. &lt;br /&gt;
&lt;br /&gt;
The current committee members joined for a 12 month term - see [[How to Join a Committee]] and [[Global Committee Pages]]. We would especially welcome new members who can widen our geographic coverage (e.g. Africa, Asia and South America) and who have time to contribute proactively. &lt;br /&gt;
&lt;br /&gt;
=== Other ongoing initiatives  ===&lt;br /&gt;
&lt;br /&gt;
*[http://www.owasp.org/index.php/Global_Industry_Committee-SIG Special Interest Groups] - Outreach to sector-specific critical infrastructures worldwide. &lt;br /&gt;
*[http://www.owasp.org/index.php/Category:India OWASP India Advisory Board] - Regional panel contributing to the software outsourcing industry. &lt;br /&gt;
*[http://www.owasp.org/index.php/Industry:Citations OWASP Citations] - References to OWASP in official, or otherwise important, documents.&lt;br /&gt;
&lt;br /&gt;
== Current Activity  ==&lt;br /&gt;
&lt;br /&gt;
=== Work in Progress  ===&lt;br /&gt;
&lt;br /&gt;
The current activities being undertaken: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Task &lt;br /&gt;
! Deadline &lt;br /&gt;
! Type &lt;br /&gt;
! Status &lt;br /&gt;
! Description &lt;br /&gt;
! Who&lt;br /&gt;
|-&lt;br /&gt;
| Reconnecting with past Industy Committee connections&lt;br /&gt;
| 1 Feb 2011&lt;br /&gt;
| Follow up&lt;br /&gt;
| In progress&lt;br /&gt;
| YP and LA to follow up with Industry Committee past contacts.&lt;br /&gt;
| YP/LA&lt;br /&gt;
|-&lt;br /&gt;
| (ISC)^2 Application Security Advisory Board (ASAB) &lt;br /&gt;
| 19 Nov 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| In progress &lt;br /&gt;
| YP is now a member of the (ISC)^2 ASAB, with the first meeting to be held in FL on the above stated date. &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:ICO Data Sharing CoP|Data Sharing CoP]] &lt;br /&gt;
| 5 Jan 2011 &lt;br /&gt;
| Standards &lt;br /&gt;
| In progress &lt;br /&gt;
| Provide response to UK ICO's &amp;quot;Data Sharing Code of Practice Consultation&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.londoncentral.bcs.org BCS London Central] &lt;br /&gt;
| 17 Feb 2011 &lt;br /&gt;
| Outreach &lt;br /&gt;
| New &lt;br /&gt;
| Present a talk about OWASP. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.bcs.org BCS] &lt;br /&gt;
| 3 Sep 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Write article for BCS ITnow magazine about application security and OWASP Top Ten. &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.usmma.edu/ USMMA] &lt;br /&gt;
| 1 Jan 2011 &lt;br /&gt;
| Outreach &lt;br /&gt;
| New &lt;br /&gt;
| Make contact. Present a talk about OWASP to the USMMA computer club or security teams. &lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.usna.edu/ USNA] &lt;br /&gt;
| 1 Jan 2011 &lt;br /&gt;
| Outreach &lt;br /&gt;
| New &lt;br /&gt;
| Make contact. Present a talk about OWASP to the USNA computer science faculty and students or interest group. &lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.auscert.org.au/ AusCERT] &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Make contact and discuss opportunities for OWASP to contribute to their work &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| OWASP Financial Services SIG &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Working with Fabio Cerullo, Eoin Keary, Jim Routh, Jerry Kickenson and others on forming a SIG. Arranging a financial panel for AppSec in Washington, DC in November &lt;br /&gt;
| JB/EK&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.spva.org Secure POS Vendor Alliance (SPVA)] &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Begin dialogue about possibility of working together. Have had trouble getting through to them but have a good lead now. Updates soon&amp;amp;nbsp;:) &lt;br /&gt;
| DC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Completed Items  ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Task &lt;br /&gt;
! Completed &lt;br /&gt;
! Type &lt;br /&gt;
! Status &lt;br /&gt;
! Description &lt;br /&gt;
! Who&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.techexecnetworks.com/event_2010.12.01.asp T.E.N./Fortify Software Security Assurance Summit] &lt;br /&gt;
| 1 Dec 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed&lt;br /&gt;
| Discuss quick wins and high impact software assurance activities using the OWASP SAMM model as reference and cite other OWASP projects as resources. &lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:DOJ Nondiscrimination on the Basis of Disability|DOJ Nondiscimination on the Basis of Disability]] &lt;br /&gt;
| 30 Nov 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to US DOJ's &amp;quot;Accessibility of Web Information and Services of State and Local Government Entities and Public Accommodations&amp;quot; &lt;br /&gt;
| AF/LA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:e-Consumer Protection Consultation|e-Consumer Protection Consultation]] &lt;br /&gt;
| 13 Oct 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Review and provide official OWASP response to [http://www.oft.gov.uk/ UK Office of Fair Trading] [http://www.oft.gov.uk/OFTwork/consultations/current/eprotection/ e-Consumer Protection Consultation]. &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:ENISA Cloud Computing Common Assurance Metrics|ENISA Common Assurance Maturity Model]] &lt;br /&gt;
| 8 Oct 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Work with [[:Category:OWASP Cloud ‐ 10 Project]] to contribute to the development of Common Assurance Maturity Model for [http://www.enisa.europa.eu/ ENISA]/Cloud Security Alliance/etc joint initiative. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.w3.org/TR/2010/WD-mwabp-20100713/ Mobile Web Application Best Practices Working Draft] &lt;br /&gt;
| 6 Aug 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Review and provide official OWASP response to W3C's [http://www.w3.org/2005/MWI/BPWG/ Mobile Web Best Practices Working Group]. &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.oft.gov.uk/ UK Office of Fair Trading] &lt;br /&gt;
| 23 Jul 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Ask to be added to official consultation list &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.businesslink.gov.uk BusinessLink] &lt;br /&gt;
| 1 Jul 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Offer to contribute to development of IT security information about [http://www.businesslink.gov.uk/bdotg/action/layer?topicId=1075421745 application security] on the BusinessLink website for UK SMEs. Outcome - no help required at present, but BusinessLink system to be disbanded. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| Veracode &lt;br /&gt;
| 28 Jun 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Discuss use of Open SAMM to classify Secure SDL maturity in Veracode's code analysis summary reports. Outcome - positive response received. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Leeds_UK OWASP Leeds/North] &lt;br /&gt;
| 16 Jun 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentations at chapter meeting in Newcastle-upon-Tyne about ENISA CAMM and OWASP Appsensor &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Front_Range_OWASP_Conference_2010 Front Range OWASP Conference (FROC) 2010] &lt;br /&gt;
| 2 Jun 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation [http://tinyurl.com/froctalks Vids &amp;amp;amp; presentations online] &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.isaca-denver.org/meetings/MAY_2010_CHPT_MTG.shtml OWASP Presentation at ISACA Denver Annual Meeting] &lt;br /&gt;
| 27 May 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation [https://docs.google.com/fileview?id=0B_-vbfka88vFNjIwY2IwYjItZmYyNi00MmNiLWFhOWItYmQ4OGZmZjVmZWUx&amp;amp;hl=en Presentation online] &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.issa-uk.org/ ISSA-UK] &lt;br /&gt;
| 13 May 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Personal Information Online Code of Practice|Personal Information Online COP]] &lt;br /&gt;
| 5 Mar 2010 &lt;br /&gt;
| Legislation &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to UK Information Commissioner's Office draft &amp;quot;Personal Information Online Code of Practice&amp;quot; &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.enisa.europa.eu/ ENISA] Mobile Apps &lt;br /&gt;
| Mar 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Identify and introduce OWASP contact for ENISA's Mobile Apps Project, in conjunction with Dinis Cruz. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Technology Strategy Board Secure Software Development Initiative|Technology Strategy Board Secure Software Development Partnership]] &lt;br /&gt;
| 18 Feb 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Liaise with the UK [http://www.innovateuk.org/ Technology Strategy Board] about the Secure Software Development Partnership (SSDP) in conjunction with the [http://www.owasp.org/index.php/London London chapter] leader Justin Clarke &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.issa-nova.org Information Systems Security Association Northern Virginia Chapter (ISSA-NOVA)] &lt;br /&gt;
| 21 Jan 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide presentation covering CSSLP, fundamentals of AppSec and Intro to OWASP and Global Industry Committee &lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.enisa.europa.eu/ ENISA] &lt;br /&gt;
| Jan 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Discuss opportunities for OWASP to work with ENISA, in conjunction with Dinis Cruz. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[:Industry:Draft NIST SP 800-37 Revision 1|NIST SP 800-37 Revision 1 FPD]] Review Project &lt;br /&gt;
| 30 Dec 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;NIST SP 800-37 Revision 1 Final Public Draft, Guide for Applying the Risk Management Framework to Federal Information Systems: A Security Life Cycle Approach&amp;quot; &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.crest-approved.org/ CREST] CRESTCon &lt;br /&gt;
| 15 Dec 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Already an oversubscribed event, YP &amp;amp;amp; CW have been placed on the reserve list. Update: Positions secured for the 15th. &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [http://msdn.microsoft.com/en-us/security/cc448177.aspx SDL Pro Network] &lt;br /&gt;
| 30 Nov 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Contact SDL Pro Network to discuss if there are opportunities for OWASP to become involved or connected in some way &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST IR 7628|Draft NIST IR 7628]] &lt;br /&gt;
| 25 Nov 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;NIST IR 7628 Draft Smart Grid Cyber Security Strategy and Requirements&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/OWASP_AppSec_DC_2009 Appsec DC 2009] &lt;br /&gt;
| 10-13 Nov 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation - special effort to engage with US Federal sector &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.justice.gov.uk/ UK Ministry of Justice] &lt;br /&gt;
| - &lt;br /&gt;
| Legislation &lt;br /&gt;
| Closed &lt;br /&gt;
| Ask to be added to official consultation list &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.it-sa.de/ IT-SA] &lt;br /&gt;
| 13-15 Oct 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| OWASP booth at trade show &lt;br /&gt;
| GH&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/OWASP_AppSec_Germany_2009_Conference OWASP AppSec Germany 2009] &lt;br /&gt;
| 13 Oct 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation &lt;br /&gt;
| GH&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.loc.gov Library of Congress] &lt;br /&gt;
| 28 Sep 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about OWASP &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/OWASP_Ireland_AppSec_2009_Conference OWASP Ireland AppSec 2009] &lt;br /&gt;
| 10 Sep 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation &lt;br /&gt;
| EK&lt;br /&gt;
|-&lt;br /&gt;
| OWASP Citations &lt;br /&gt;
| 7 Sep 2009 &lt;br /&gt;
| Other &lt;br /&gt;
| Closed &lt;br /&gt;
| Identify and record the most important references to OWASP in official, or otherwise important, documents. Page created at: [[Industry:Citations]] &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.loc.gov Library of Congress] &lt;br /&gt;
| 26 Aug 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about OWASP &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| OWASP webcast at Brighttalk [http://www.brighttalk.com/summit/dataprivacy2 Data and Privacy in Web 2.0 Summit] &lt;br /&gt;
| 13 Aug 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Deliver [http://www.brighttalk.com/webcasts/4767/attend OWASP presentation on XSS, client side exploitation, and countermeasures]. &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:SAFECode Secure Development Practices (update to Oct 2008 version)|SAFECode Secure Development Practices (update to Oct 2008 version)]] &lt;br /&gt;
| 31 Jul 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Response to [http://www.safecode.org/ SAFECode] &amp;quot;Fundamental Practices for Secure Software Development: A Guide to the Most Effective Secure Development Practices in Use Today.&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Category:OWASP_CSA_Project OWASP CSA Project] &lt;br /&gt;
| 8 Jul 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Response to RFC [http://www.cloudsecurityalliance.org/guidance/csaguide.pdf Cloud Security Alliance Guidance v1.0] &lt;br /&gt;
| TB&lt;br /&gt;
|-&lt;br /&gt;
| [[Scotland]] &lt;br /&gt;
| 25 Jun 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about the Global Industry Committee, its role and recent activities (presentation slides [[Image:Owasp-scotland-industry-committee-june-2009.ppt]] and written notes [[Image:Owasp-scotland-industry-committee-june-2009-notes.pdf]]) &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| OWASP Presentation at [http://cfp2009.org/ CFP Con 2009] &lt;br /&gt;
| 1 Jun 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Deliver presentation on web threats and countermeasures. See [http://www.cfp2009.org/wiki/index.php/Tutorials/Workshops CFP tutorial page] grep OWASP for more info. &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| ENISA [http://www.enisa.europa.eu/pages/02_03_news_2009_02_19_who_is_who.html Who-Is-Who Directory] &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Contact ENISA regarding OWASP inclusion in directory (in progress). Encourage European chapter leaders to contact their ENISA liaison officers (completed). Contact UK liaison officer on behalf of London, Leeds and Scotland chapters. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| IIL [http://www.iilondon.co.uk/ Insurance Institute of London] &lt;br /&gt;
| 2 Jun 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Contact IIL regarding future input to their publication [http://www.iilondon.co.uk/XtraCart/store/comersus_viewItem.asp?idProduct=187 Insurance Aspects of E-Commerce] &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST SP 800-118|Draft NIST SP 800-118]] &lt;br /&gt;
| 29 May 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;Draft NIST Special Publication 800-118 Guide to Enterprise Password Management&amp;quot; &lt;br /&gt;
| CW/EK/RB/DC&lt;br /&gt;
|-&lt;br /&gt;
| German IT Industry Association &lt;br /&gt;
| 15 May 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation on OWASP &lt;br /&gt;
| GH&lt;br /&gt;
|-&lt;br /&gt;
| [http://docs.google.com/Present?docid=ddkr62qv_171cd7gh5fb&amp;amp;skipauth=true Outreach Presentation to Frontier Airlines] &lt;br /&gt;
| 7 May 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide outreach presentation covering fundamentals of AppSec and Intro to OWASP &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:DPC BS 10012|DPC BS 10012]] &lt;br /&gt;
| 31 Mar 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;BS 10012 Specification for the management of personal information in compliance with the Data Protection Act 1998&amp;quot; Draft for Public Comment (DPC) &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST SP 800-53 Revision 3|Draft NIST SP 800-53 Revision 3]] &lt;br /&gt;
| 27 Mar 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;Draft NIST Special Publication 800-53 (Revision 3) Recommended Security Controls for Federal Information Systems and Organizations&amp;quot; &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST SP 800-122|Draft NIST SP 800-122]] &lt;br /&gt;
| 13 Mar 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;Draft NIST Special Publication 800-122 Guide to Protecting the Confidentiality of Personally Identifiable Information (PII)&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[London]] &lt;br /&gt;
| 12 Mar 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about the Global Industry Committee, its role and recent activities (presentation slides [[Image:Owasp-london-industry-committee-march-2009.ppt]] and written notes [[Image:Owasp-london-industry-committee-march-2009-notes.pdf]]) &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Digital Britain Interim Report|Digital Britain Interim Report]] &lt;br /&gt;
| 11 Mar 2009 &lt;br /&gt;
| Legislation &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to UK Government's &amp;quot;Digital Britain Interim Report Jan 2009&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Front_Range_OWASP_Conference_2009 SnowFROC Front Range] &lt;br /&gt;
| 5 Mar 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.commerce.gov/ Department of Commerce] &lt;br /&gt;
| 25 Feb 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about OWASP to Economic Security Working Group &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:DPC BS 8878:2009|DPC BS 8878:2009]] &lt;br /&gt;
| 31 Jan 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;BS 8878:2009 Web accessibility. Building accessible experiences for disabled people&amp;quot; Draft for Public Comment (DPC) &lt;br /&gt;
| Puneet/CW&lt;br /&gt;
|-&lt;br /&gt;
| AppSec Presentation Delivered to Infragard, Dec 2008 &lt;br /&gt;
| Dec 2008 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| [http://www.infragard.net/ Infragard] is a collaboration between the US FBI and maintainers of critical infrastructure. [http://docs.google.com/Present?docid=ddkr62qv_0cn7km4c3&amp;amp;skipauth=true Presentation here]. Email DC for full PPT with speaker notes &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| The Register [http://www.theregister.co.uk/2008/11/22/google_analytics_as_security_risk/ Google Analytics — Yes, it is a security risk] &lt;br /&gt;
| Nov 2008 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Co-ordination of response and provision of comments from OWASP leaders about risk of JavaScript on Barack Obama's website &lt;br /&gt;
| DC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== General Presentations and Reports  ===&lt;br /&gt;
&lt;br /&gt;
[[Summit 2009]] &lt;br /&gt;
&lt;br /&gt;
*Global Industry Committee Presentation [[Image:Owasp-summit2009-industry-committee.ppt]]&lt;br /&gt;
&lt;br /&gt;
Summaries (for inclusion into other full OWASP presentations): &lt;br /&gt;
&lt;br /&gt;
*Sep 2009 [[Image:Owasp-industry-committee-summary-september-2009.ppt]] &lt;br /&gt;
*Jul 2009 [[Image:Owasp-industry-committee-summary-july-2009.ppt]] &lt;br /&gt;
*May 2009 [[Image:Owasp-industry-committee-summary-may-2009.ppt]] &lt;br /&gt;
*Apr 2009 [[Image:Owasp-industry-committee-summary-april-2009.ppt]] &lt;br /&gt;
*Mar 2009 [[Image:Owasp-industry-committee-summary-march-2009.ppt]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other [http://www.owasp.org/index.php/Global_Committee_Pages Global Committees]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Global_Industry_Committee&amp;diff=96190</id>
		<title>Global Industry Committee</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Global_Industry_Committee&amp;diff=96190"/>
				<updated>2010-12-13T23:44:24Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: /* Monthly Report Format */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''The Global Industry Committee was created during the OWASP EU Summit in Portugal. The primary purpose of the Global Industry Committee is to work with industry executives to gather requirements from industry, work with Membership, Projects and others.''' &lt;br /&gt;
&lt;br /&gt;
== Mission Statement  ==&lt;br /&gt;
&lt;br /&gt;
''To expand awareness of and promote the inclusion of software security best practices in Industry, Government, Academia and regulatory agencies and be a voice for industry. We will accomplish this through outreach; including presentations, development of position papers and collaborative efforts with other entities.'' [https://www.owasp.org/index.php/Global_Industry_Committee#General_Presentations_and_Reports Powerpoint of Accomplishments] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Committee Plan  ==&lt;br /&gt;
&lt;br /&gt;
Step 1: [[Industry:Organizations for Outreach|Identify specific organizations]] worth working with to spread the OWASP gospel &lt;br /&gt;
&lt;br /&gt;
Step 2: Prioritize the proposed liasons based on potential impact, and also realistic likelihood of the organization actively working with us &lt;br /&gt;
&lt;br /&gt;
Step 3: Execute, leveraging global OWASP resources as much as possible to maximize impact &lt;br /&gt;
&lt;br /&gt;
Step 4: Evaluate progress &amp;amp;amp; repeat Step 1-3 &lt;br /&gt;
&lt;br /&gt;
== Committee Members  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Committee Members: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name &lt;br /&gt;
! Email &lt;br /&gt;
! Location&lt;br /&gt;
|-&lt;br /&gt;
| Lorna Alamri &lt;br /&gt;
| lorna.alamri 'at' owasp dot org &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Joe Bernik &lt;br /&gt;
| bernik 'at' gmail dot com &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Rex Booth &lt;br /&gt;
| rex.booth 'at' gt dot com &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| David Campbell &lt;br /&gt;
| dcampbell 'at' owasp dot org &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Alexander Fry &lt;br /&gt;
| alexander.fry 'at' owasp dot org &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Georg Hess &lt;br /&gt;
| georg.hess 'at' artofdefence dot com &lt;br /&gt;
| Germany&lt;br /&gt;
|-&lt;br /&gt;
| Eoin Keary &lt;br /&gt;
| eoin.keary 'at' owasp dot org &lt;br /&gt;
| Ireland&lt;br /&gt;
|-&lt;br /&gt;
| Yiannis Pavlosoglou &lt;br /&gt;
| yiannis 'at' owasp dot org &lt;br /&gt;
| UK&lt;br /&gt;
|-&lt;br /&gt;
| Colin Watson &lt;br /&gt;
| colin.watson 'at' owasp dot org &lt;br /&gt;
| UK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The committee chair (from Nov 2010) is Yiannis Pavlosoglou. Previous chairs: &lt;br /&gt;
&lt;br /&gt;
*Colin Watson (Nov 2009 to Oct 2010)&lt;br /&gt;
&lt;br /&gt;
= Monthly Report Format =&lt;br /&gt;
&lt;br /&gt;
See below...&lt;br /&gt;
&lt;br /&gt;
== Getting Involved  ==&lt;br /&gt;
&lt;br /&gt;
=== Mailing List  ===&lt;br /&gt;
&lt;br /&gt;
[http://lists.owasp.org/mailman/listinfo/global_industry_committee Join our mailing list] &lt;br /&gt;
&lt;br /&gt;
=== Meetings  ===&lt;br /&gt;
&lt;br /&gt;
The next Global Industry Committee meeting will be: &lt;br /&gt;
&lt;br /&gt;
*TBC &lt;br /&gt;
**Dial in number: +1 866 534 4754 &lt;br /&gt;
**Call code 192341&lt;br /&gt;
&lt;br /&gt;
Minutes of previous meetings are: &lt;br /&gt;
&lt;br /&gt;
*[[Industry:Minutes 2010-08-17|17 Aug 2010]] (also [http://www.owasp.org/images/0/0d/Gic_call_17aug2010.mp3 MP3 recording of the call]) &lt;br /&gt;
*[[Industry:Minutes 2010-05-18|18 May 2010]] &lt;br /&gt;
*[[Industry:Minutes 2010-01-05|05 Jan 2010]] (also [http://www.owasp.org/images/a/a3/Owasp_gic_call_5jan10.mp3 MP3 recording of the call]) &lt;br /&gt;
*[[Industry:Minutes 2009-01-23|23 Jan 2009]]&lt;br /&gt;
&lt;br /&gt;
=== Membership  ===&lt;br /&gt;
&lt;br /&gt;
[[Membership]] explains how to become an OWASP organization supporter or individual member. But you don't have to be an OWASP Member or Committee Member to contribute. &lt;br /&gt;
&lt;br /&gt;
The current committee members joined for a 12 month term - see [[How to Join a Committee]] and [[Global Committee Pages]]. We would especially welcome new members who can widen our geographic coverage (e.g. Africa, Asia and South America) and who have time to contribute proactively. &lt;br /&gt;
&lt;br /&gt;
=== Other ongoing initiatives  ===&lt;br /&gt;
&lt;br /&gt;
*[http://www.owasp.org/index.php/Global_Industry_Committee-SIG Special Interest Groups] - Outreach to sector-specific critical infrastructures worldwide. &lt;br /&gt;
*[http://www.owasp.org/index.php/Category:India OWASP India Advisory Board] - Regional panel contributing to the software outsourcing industry. &lt;br /&gt;
*[http://www.owasp.org/index.php/Industry:Citations OWASP Citations] - References to OWASP in official, or otherwise important, documents.&lt;br /&gt;
&lt;br /&gt;
== Current Activity  ==&lt;br /&gt;
&lt;br /&gt;
=== Work in Progress  ===&lt;br /&gt;
&lt;br /&gt;
The current activities being undertaken: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Task &lt;br /&gt;
! Deadline &lt;br /&gt;
! Type &lt;br /&gt;
! Status &lt;br /&gt;
! Description &lt;br /&gt;
! Who&lt;br /&gt;
|-&lt;br /&gt;
| Reconnecting with past Industy Committee connections&lt;br /&gt;
| 1 Feb 2011&lt;br /&gt;
| Follow up&lt;br /&gt;
| In progress&lt;br /&gt;
| YP and LA to follow up with Industry Committee past contacts.&lt;br /&gt;
| YP/LA&lt;br /&gt;
|-&lt;br /&gt;
| (ISC)^2 Application Security Advisory Board (ASAB) &lt;br /&gt;
| 19 Nov 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| In progress &lt;br /&gt;
| YP is now a member of the (ISC)^2 ASAB, with the first meeting to be held in FL on the above stated date. &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:ICO Data Sharing CoP|Data Sharing CoP]] &lt;br /&gt;
| 5 Jan 2011 &lt;br /&gt;
| Standards &lt;br /&gt;
| In progress &lt;br /&gt;
| Provide response to UK ICO's &amp;quot;Data Sharing Code of Practice Consultation&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.londoncentral.bcs.org BCS London Central] &lt;br /&gt;
| 17 Feb 2011 &lt;br /&gt;
| Outreach &lt;br /&gt;
| New &lt;br /&gt;
| Present a talk about OWASP. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.bcs.org BCS] &lt;br /&gt;
| 3 Sep 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Write article for BCS ITnow magazine about application security and OWASP Top Ten. &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.usmma.edu/ USMMA] &lt;br /&gt;
| 1 Jan 2011 &lt;br /&gt;
| Outreach &lt;br /&gt;
| New &lt;br /&gt;
| Make contact. Present a talk about OWASP to the USMMA computer club or security teams. &lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.usna.edu/ USNA] &lt;br /&gt;
| 1 Jan 2011 &lt;br /&gt;
| Outreach &lt;br /&gt;
| New &lt;br /&gt;
| Make contact. Present a talk about OWASP to the USNA computer science faculty and students or interest group. &lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.auscert.org.au/ AusCERT] &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Make contact and discuss opportunities for OWASP to contribute to their work &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| OWASP Financial Services SIG &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Working with Fabio Cerullo, Eoin Keary, Jim Routh, Jerry Kickenson and others on forming a SIG. Arranging a financial panel for AppSec in Washington, DC in November &lt;br /&gt;
| JB/EK&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.spva.org Secure POS Vendor Alliance (SPVA)] &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Begin dialogue about possibility of working together. Have had trouble getting through to them but have a good lead now. Updates soon&amp;amp;nbsp;:) &lt;br /&gt;
| DC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Completed Items  ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Task &lt;br /&gt;
! Completed &lt;br /&gt;
! Type &lt;br /&gt;
! Status &lt;br /&gt;
! Description &lt;br /&gt;
! Who&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.techexecnetworks.com/event_2010.12.01.asp T.E.N./Fortify Software Security Assurance Summit] &lt;br /&gt;
| 1 Dec 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed&lt;br /&gt;
| Discuss quick wins and high impact software assurance activities using the OWASP SAMM model as reference and cite other OWASP projects as resources. &lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:DOJ Nondiscrimination on the Basis of Disability|DOJ Nondiscimination on the Basis of Disability]] &lt;br /&gt;
| 30 Nov 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to US DOJ's &amp;quot;Accessibility of Web Information and Services of State and Local Government Entities and Public Accommodations&amp;quot; &lt;br /&gt;
| AF/LA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:e-Consumer Protection Consultation|e-Consumer Protection Consultation]] &lt;br /&gt;
| 13 Oct 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Review and provide official OWASP response to [http://www.oft.gov.uk/ UK Office of Fair Trading] [http://www.oft.gov.uk/OFTwork/consultations/current/eprotection/ e-Consumer Protection Consultation]. &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:ENISA Cloud Computing Common Assurance Metrics|ENISA Common Assurance Maturity Model]] &lt;br /&gt;
| 8 Oct 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Work with [[:Category:OWASP Cloud ‐ 10 Project]] to contribute to the development of Common Assurance Maturity Model for [http://www.enisa.europa.eu/ ENISA]/Cloud Security Alliance/etc joint initiative. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.w3.org/TR/2010/WD-mwabp-20100713/ Mobile Web Application Best Practices Working Draft] &lt;br /&gt;
| 6 Aug 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Review and provide official OWASP response to W3C's [http://www.w3.org/2005/MWI/BPWG/ Mobile Web Best Practices Working Group]. &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.oft.gov.uk/ UK Office of Fair Trading] &lt;br /&gt;
| 23 Jul 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Ask to be added to official consultation list &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.businesslink.gov.uk BusinessLink] &lt;br /&gt;
| 1 Jul 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Offer to contribute to development of IT security information about [http://www.businesslink.gov.uk/bdotg/action/layer?topicId=1075421745 application security] on the BusinessLink website for UK SMEs. Outcome - no help required at present, but BusinessLink system to be disbanded. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| Veracode &lt;br /&gt;
| 28 Jun 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Discuss use of Open SAMM to classify Secure SDL maturity in Veracode's code analysis summary reports. Outcome - positive response received. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Leeds_UK OWASP Leeds/North] &lt;br /&gt;
| 16 Jun 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentations at chapter meeting in Newcastle-upon-Tyne about ENISA CAMM and OWASP Appsensor &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Front_Range_OWASP_Conference_2010 Front Range OWASP Conference (FROC) 2010] &lt;br /&gt;
| 2 Jun 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation [http://tinyurl.com/froctalks Vids &amp;amp;amp; presentations online] &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.isaca-denver.org/meetings/MAY_2010_CHPT_MTG.shtml OWASP Presentation at ISACA Denver Annual Meeting] &lt;br /&gt;
| 27 May 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation [https://docs.google.com/fileview?id=0B_-vbfka88vFNjIwY2IwYjItZmYyNi00MmNiLWFhOWItYmQ4OGZmZjVmZWUx&amp;amp;hl=en Presentation online] &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.issa-uk.org/ ISSA-UK] &lt;br /&gt;
| 13 May 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Personal Information Online Code of Practice|Personal Information Online COP]] &lt;br /&gt;
| 5 Mar 2010 &lt;br /&gt;
| Legislation &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to UK Information Commissioner's Office draft &amp;quot;Personal Information Online Code of Practice&amp;quot; &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.enisa.europa.eu/ ENISA] Mobile Apps &lt;br /&gt;
| Mar 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Identify and introduce OWASP contact for ENISA's Mobile Apps Project, in conjunction with Dinis Cruz. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Technology Strategy Board Secure Software Development Initiative|Technology Strategy Board Secure Software Development Partnership]] &lt;br /&gt;
| 18 Feb 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Liaise with the UK [http://www.innovateuk.org/ Technology Strategy Board] about the Secure Software Development Partnership (SSDP) in conjunction with the [http://www.owasp.org/index.php/London London chapter] leader Justin Clarke &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.issa-nova.org Information Systems Security Association Northern Virginia Chapter (ISSA-NOVA)] &lt;br /&gt;
| 21 Jan 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide presentation covering CSSLP, fundamentals of AppSec and Intro to OWASP and Global Industry Committee &lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.enisa.europa.eu/ ENISA] &lt;br /&gt;
| Jan 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Discuss opportunities for OWASP to work with ENISA, in conjunction with Dinis Cruz. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[:Industry:Draft NIST SP 800-37 Revision 1|NIST SP 800-37 Revision 1 FPD]] Review Project &lt;br /&gt;
| 30 Dec 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;NIST SP 800-37 Revision 1 Final Public Draft, Guide for Applying the Risk Management Framework to Federal Information Systems: A Security Life Cycle Approach&amp;quot; &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.crest-approved.org/ CREST] CRESTCon &lt;br /&gt;
| 15 Dec 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Already an oversubscribed event, YP &amp;amp;amp; CW have been placed on the reserve list. Update: Positions secured for the 15th. &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [http://msdn.microsoft.com/en-us/security/cc448177.aspx SDL Pro Network] &lt;br /&gt;
| 30 Nov 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Contact SDL Pro Network to discuss if there are opportunities for OWASP to become involved or connected in some way &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST IR 7628|Draft NIST IR 7628]] &lt;br /&gt;
| 25 Nov 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;NIST IR 7628 Draft Smart Grid Cyber Security Strategy and Requirements&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/OWASP_AppSec_DC_2009 Appsec DC 2009] &lt;br /&gt;
| 10-13 Nov 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation - special effort to engage with US Federal sector &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.justice.gov.uk/ UK Ministry of Justice] &lt;br /&gt;
| - &lt;br /&gt;
| Legislation &lt;br /&gt;
| Closed &lt;br /&gt;
| Ask to be added to official consultation list &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.it-sa.de/ IT-SA] &lt;br /&gt;
| 13-15 Oct 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| OWASP booth at trade show &lt;br /&gt;
| GH&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/OWASP_AppSec_Germany_2009_Conference OWASP AppSec Germany 2009] &lt;br /&gt;
| 13 Oct 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation &lt;br /&gt;
| GH&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.loc.gov Library of Congress] &lt;br /&gt;
| 28 Sep 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about OWASP &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/OWASP_Ireland_AppSec_2009_Conference OWASP Ireland AppSec 2009] &lt;br /&gt;
| 10 Sep 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation &lt;br /&gt;
| EK&lt;br /&gt;
|-&lt;br /&gt;
| OWASP Citations &lt;br /&gt;
| 7 Sep 2009 &lt;br /&gt;
| Other &lt;br /&gt;
| Closed &lt;br /&gt;
| Identify and record the most important references to OWASP in official, or otherwise important, documents. Page created at: [[Industry:Citations]] &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.loc.gov Library of Congress] &lt;br /&gt;
| 26 Aug 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about OWASP &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| OWASP webcast at Brighttalk [http://www.brighttalk.com/summit/dataprivacy2 Data and Privacy in Web 2.0 Summit] &lt;br /&gt;
| 13 Aug 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Deliver [http://www.brighttalk.com/webcasts/4767/attend OWASP presentation on XSS, client side exploitation, and countermeasures]. &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:SAFECode Secure Development Practices (update to Oct 2008 version)|SAFECode Secure Development Practices (update to Oct 2008 version)]] &lt;br /&gt;
| 31 Jul 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Response to [http://www.safecode.org/ SAFECode] &amp;quot;Fundamental Practices for Secure Software Development: A Guide to the Most Effective Secure Development Practices in Use Today.&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Category:OWASP_CSA_Project OWASP CSA Project] &lt;br /&gt;
| 8 Jul 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Response to RFC [http://www.cloudsecurityalliance.org/guidance/csaguide.pdf Cloud Security Alliance Guidance v1.0] &lt;br /&gt;
| TB&lt;br /&gt;
|-&lt;br /&gt;
| [[Scotland]] &lt;br /&gt;
| 25 Jun 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about the Global Industry Committee, its role and recent activities (presentation slides [[Image:Owasp-scotland-industry-committee-june-2009.ppt]] and written notes [[Image:Owasp-scotland-industry-committee-june-2009-notes.pdf]]) &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| OWASP Presentation at [http://cfp2009.org/ CFP Con 2009] &lt;br /&gt;
| 1 Jun 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Deliver presentation on web threats and countermeasures. See [http://www.cfp2009.org/wiki/index.php/Tutorials/Workshops CFP tutorial page] grep OWASP for more info. &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| ENISA [http://www.enisa.europa.eu/pages/02_03_news_2009_02_19_who_is_who.html Who-Is-Who Directory] &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Contact ENISA regarding OWASP inclusion in directory (in progress). Encourage European chapter leaders to contact their ENISA liaison officers (completed). Contact UK liaison officer on behalf of London, Leeds and Scotland chapters. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| IIL [http://www.iilondon.co.uk/ Insurance Institute of London] &lt;br /&gt;
| 2 Jun 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Contact IIL regarding future input to their publication [http://www.iilondon.co.uk/XtraCart/store/comersus_viewItem.asp?idProduct=187 Insurance Aspects of E-Commerce] &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST SP 800-118|Draft NIST SP 800-118]] &lt;br /&gt;
| 29 May 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;Draft NIST Special Publication 800-118 Guide to Enterprise Password Management&amp;quot; &lt;br /&gt;
| CW/EK/RB/DC&lt;br /&gt;
|-&lt;br /&gt;
| German IT Industry Association &lt;br /&gt;
| 15 May 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation on OWASP &lt;br /&gt;
| GH&lt;br /&gt;
|-&lt;br /&gt;
| [http://docs.google.com/Present?docid=ddkr62qv_171cd7gh5fb&amp;amp;skipauth=true Outreach Presentation to Frontier Airlines] &lt;br /&gt;
| 7 May 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide outreach presentation covering fundamentals of AppSec and Intro to OWASP &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:DPC BS 10012|DPC BS 10012]] &lt;br /&gt;
| 31 Mar 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;BS 10012 Specification for the management of personal information in compliance with the Data Protection Act 1998&amp;quot; Draft for Public Comment (DPC) &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST SP 800-53 Revision 3|Draft NIST SP 800-53 Revision 3]] &lt;br /&gt;
| 27 Mar 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;Draft NIST Special Publication 800-53 (Revision 3) Recommended Security Controls for Federal Information Systems and Organizations&amp;quot; &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST SP 800-122|Draft NIST SP 800-122]] &lt;br /&gt;
| 13 Mar 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;Draft NIST Special Publication 800-122 Guide to Protecting the Confidentiality of Personally Identifiable Information (PII)&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[London]] &lt;br /&gt;
| 12 Mar 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about the Global Industry Committee, its role and recent activities (presentation slides [[Image:Owasp-london-industry-committee-march-2009.ppt]] and written notes [[Image:Owasp-london-industry-committee-march-2009-notes.pdf]]) &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Digital Britain Interim Report|Digital Britain Interim Report]] &lt;br /&gt;
| 11 Mar 2009 &lt;br /&gt;
| Legislation &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to UK Government's &amp;quot;Digital Britain Interim Report Jan 2009&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Front_Range_OWASP_Conference_2009 SnowFROC Front Range] &lt;br /&gt;
| 5 Mar 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.commerce.gov/ Department of Commerce] &lt;br /&gt;
| 25 Feb 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about OWASP to Economic Security Working Group &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:DPC BS 8878:2009|DPC BS 8878:2009]] &lt;br /&gt;
| 31 Jan 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;BS 8878:2009 Web accessibility. Building accessible experiences for disabled people&amp;quot; Draft for Public Comment (DPC) &lt;br /&gt;
| Puneet/CW&lt;br /&gt;
|-&lt;br /&gt;
| AppSec Presentation Delivered to Infragard, Dec 2008 &lt;br /&gt;
| Dec 2008 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| [http://www.infragard.net/ Infragard] is a collaboration between the US FBI and maintainers of critical infrastructure. [http://docs.google.com/Present?docid=ddkr62qv_0cn7km4c3&amp;amp;skipauth=true Presentation here]. Email DC for full PPT with speaker notes &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| The Register [http://www.theregister.co.uk/2008/11/22/google_analytics_as_security_risk/ Google Analytics — Yes, it is a security risk] &lt;br /&gt;
| Nov 2008 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Co-ordination of response and provision of comments from OWASP leaders about risk of JavaScript on Barack Obama's website &lt;br /&gt;
| DC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== General Presentations and Reports  ===&lt;br /&gt;
&lt;br /&gt;
[[Summit 2009]] &lt;br /&gt;
&lt;br /&gt;
*Global Industry Committee Presentation [[Image:Owasp-summit2009-industry-committee.ppt]]&lt;br /&gt;
&lt;br /&gt;
Summaries (for inclusion into other full OWASP presentations): &lt;br /&gt;
&lt;br /&gt;
*Sep 2009 [[Image:Owasp-industry-committee-summary-september-2009.ppt]] &lt;br /&gt;
*Jul 2009 [[Image:Owasp-industry-committee-summary-july-2009.ppt]] &lt;br /&gt;
*May 2009 [[Image:Owasp-industry-committee-summary-may-2009.ppt]] &lt;br /&gt;
*Apr 2009 [[Image:Owasp-industry-committee-summary-april-2009.ppt]] &lt;br /&gt;
*Mar 2009 [[Image:Owasp-industry-committee-summary-march-2009.ppt]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other [http://www.owasp.org/index.php/Global_Committee_Pages Global Committees]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Global_Industry_Committee&amp;diff=91974</id>
		<title>Global Industry Committee</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Global_Industry_Committee&amp;diff=91974"/>
				<updated>2010-10-26T11:35:53Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''The Global Industry Committee was created during the OWASP EU Summit in Portugal. The primary purpose of the Global Industry Committee is to work with industry executives to gather requirements from industry, work with Membership, Projects and others.''' &lt;br /&gt;
&lt;br /&gt;
== Mission Statement ==&lt;br /&gt;
&lt;br /&gt;
''To expand awareness of and promote the inclusion of software security best practices in Industry, Government, Academia and regulatory agencies and be a voice for industry. We will accomplish this through outreach; including presentations, development of position papers and collaborative efforts with other entities.'' [https://www.owasp.org/index.php/Global_Industry_Committee#General_Presentations_and_Reports Powerpoint of Accomplishments] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Committee Plan ==&lt;br /&gt;
&lt;br /&gt;
Step 1: [[Industry:Organizations for Outreach|Identify specific organizations]] worth working with to spread the OWASP gospel &lt;br /&gt;
&lt;br /&gt;
Step 2: Prioritize the proposed liasons based on potential impact, and also realistic likelihood of the organization actively working with us &lt;br /&gt;
&lt;br /&gt;
Step 3: Execute, leveraging global OWASP resources as much as possible to maximize impact &lt;br /&gt;
&lt;br /&gt;
Step 4: Evaluate progress &amp;amp;amp; repeat Step 1-3 &lt;br /&gt;
&lt;br /&gt;
== Committee Members ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; Committee Members: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name &lt;br /&gt;
! Email &lt;br /&gt;
! Location&lt;br /&gt;
|-&lt;br /&gt;
| Lorna Alamri&lt;br /&gt;
| lorna.alamri 'at' owasp dot org&lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Joe Bernik &lt;br /&gt;
| bernik 'at' gmail dot com&lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Rex Booth &lt;br /&gt;
| rex.booth 'at' gt dot com &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| David Campbell &lt;br /&gt;
| dcampbell 'at' owasp dot org &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Alexander Fry &lt;br /&gt;
| alexander.fry 'at' owasp dot org &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Georg Hess &lt;br /&gt;
| georg.hess 'at' artofdefence dot com &lt;br /&gt;
| Germany&lt;br /&gt;
|-&lt;br /&gt;
| Eoin Keary &lt;br /&gt;
| eoin.keary 'at' owasp dot org &lt;br /&gt;
| Ireland&lt;br /&gt;
|-&lt;br /&gt;
| Yiannis Pavlosoglou &lt;br /&gt;
| yiannis 'at' owasp dot org &lt;br /&gt;
| UK&lt;br /&gt;
|-&lt;br /&gt;
| Colin Watson &lt;br /&gt;
| colin.watson 'at' owasp dot org &lt;br /&gt;
| UK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The committee chair is Colin Watson.  From 1st November 2010, Yiannis Pavlosoglou will take over this role.&lt;br /&gt;
&lt;br /&gt;
== Monthly Report ==&lt;br /&gt;
&lt;br /&gt;
Date of last update: 29 September 2010&lt;br /&gt;
Updated by: CW&lt;br /&gt;
&lt;br /&gt;
Accomplishments for this Month&lt;br /&gt;
* Finish writing article for BCS&lt;br /&gt;
* Continued work on Common Assurance Maturity Model in conjunction with OWASP Cloud 10 project (with ENISA, CSA, etc)&lt;br /&gt;
* Yiannis Pavlosoglou was elected unopposed as GIC chair from 1 Nov 2010&lt;br /&gt;
Planned for Next Month&lt;br /&gt;
* Review whether OWASP should respond to W3C Document Object Model (DOM) Level 3 Events Specification&lt;br /&gt;
* Follow up outreach to SPVA, USNA and USMMA&lt;br /&gt;
* Response to UK Office of Fair Trading consultation&lt;br /&gt;
Issues/Risks/Challenges&lt;br /&gt;
* Difficulty getting enough engagement with good contacts in all priority sectors&lt;br /&gt;
Financial costs to OWASP for calender year ending 31 Dec 2010 (2009)&lt;br /&gt;
* Budget: nil (nil)&lt;br /&gt;
* Actual: nil (nil)&lt;br /&gt;
* OWASP staff time: negligible (negligible)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting Involved ==&lt;br /&gt;
&lt;br /&gt;
=== Mailing List  ===&lt;br /&gt;
&lt;br /&gt;
[http://lists.owasp.org/mailman/listinfo/global_industry_committee Join our mailing list] &lt;br /&gt;
&lt;br /&gt;
=== Meetings  ===&lt;br /&gt;
&lt;br /&gt;
The next Global Industry Committee meeting will be: &lt;br /&gt;
&lt;br /&gt;
* TBC&lt;br /&gt;
** Dial in number:  +1 866 534 4754&lt;br /&gt;
** Call code 192341&lt;br /&gt;
&lt;br /&gt;
Minutes of previous meetings are: &lt;br /&gt;
&lt;br /&gt;
* [[Industry:Minutes_2010-08-17|17 Aug 2010]] (also [http://www.owasp.org/images/0/0d/Gic_call_17aug2010.mp3 MP3 recording of the call])&lt;br /&gt;
* [[Industry:Minutes 2010-05-18|18 May 2010]] &lt;br /&gt;
*[[Industry:Minutes 2010-01-05|05 Jan 2010]] (also [http://www.owasp.org/images/a/a3/Owasp_gic_call_5jan10.mp3 MP3 recording of the call])&lt;br /&gt;
*[[Industry:Minutes 2009-01-23|23 Jan 2009]]&lt;br /&gt;
&lt;br /&gt;
=== Membership  ===&lt;br /&gt;
&lt;br /&gt;
[[Membership]] explains how to become an OWASP organization supporter or individual member. But you don't have to be an OWASP Member or Committee Member to contribute.&lt;br /&gt;
&lt;br /&gt;
The current committee members joined for a 12 month term - see [[How to Join a Committee]] and [[Global Committee Pages]].  We would especially welcome new members who can widen our geographic coverage (e.g. Africa, Asia and South America) and who have time to contribute proactively.&lt;br /&gt;
&lt;br /&gt;
=== Other ongoing initiatives  ===&lt;br /&gt;
&lt;br /&gt;
*[http://www.owasp.org/index.php/Global_Industry_Committee-SIG Special Interest Groups] - Outreach to sector-specific critical infrastructures worldwide. &lt;br /&gt;
*[http://www.owasp.org/index.php/Category:India OWASP India Advisory Board] - Regional panel contributing to the software outsourcing industry. &lt;br /&gt;
*[http://www.owasp.org/index.php/Industry:Citations OWASP Citations] - References to OWASP in official, or otherwise important, documents.&lt;br /&gt;
&lt;br /&gt;
== Current Activity ==&lt;br /&gt;
&lt;br /&gt;
=== Work in Progress  ===&lt;br /&gt;
&lt;br /&gt;
The current activities being undertaken: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Task &lt;br /&gt;
! Deadline &lt;br /&gt;
! Type &lt;br /&gt;
! Status &lt;br /&gt;
! Description &lt;br /&gt;
! Who&lt;br /&gt;
|-&lt;br /&gt;
| (ISC)^2 Application Security Advisory Board (ASAB)&lt;br /&gt;
| 19 Nov 2010 &lt;br /&gt;
| Outreach&lt;br /&gt;
| In progress&lt;br /&gt;
| YP is now a member of the (ISC)^2 ASAB, with the first meeting to be held in FL on the above stated date.&lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:DOJ Nondiscrimination on the Basis of Disability|DOJ Nondiscimination on the Basis of Disability]]&lt;br /&gt;
| 24 Jan 2011 &lt;br /&gt;
| Standards &lt;br /&gt;
| In progress&lt;br /&gt;
| Provide response to US DOJ's &amp;quot;Accessibility of Web Information and Services of State and Local Government Entities and Public Accommodations&amp;quot;&lt;br /&gt;
| AF/LA&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:ICO Data Sharing CoP|Data Sharing CoP]]&lt;br /&gt;
| 5 Jan 2011 &lt;br /&gt;
| Standards &lt;br /&gt;
| In progress&lt;br /&gt;
| Provide response to UK ICO's &amp;quot;Data Sharing Code of Practice Consultation&amp;quot;&lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.londoncentral.bcs.org BCS London Central] &lt;br /&gt;
| 17 Feb 2011 &lt;br /&gt;
| Outreach &lt;br /&gt;
| New&lt;br /&gt;
| Present a talk about OWASP.&lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.bcs.org BCS] &lt;br /&gt;
| 3 Sep 2010&lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress&lt;br /&gt;
| Write article for BCS ITnow magazine about application security and OWASP Top Ten.&lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/OWASP_AppSec_DC_2010 Appsec DC 2010] &lt;br /&gt;
| 8-11 Nov 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Conference organisation - special effort to engage with US Federal sector &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.usmma.edu/ USMMA] &lt;br /&gt;
| 1 Jan 2011 &lt;br /&gt;
| Outreach &lt;br /&gt;
| New &lt;br /&gt;
| Make contact. Present a talk about OWASP to the USMMA computer club or security teams.&lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.usna.edu/ USNA] &lt;br /&gt;
| 1 Jan 2011 &lt;br /&gt;
| Outreach &lt;br /&gt;
| New &lt;br /&gt;
| Make contact. Present a talk about OWASP to the USNA computer science faculty and students or interest group.&lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.auscert.org.au/ AusCERT] &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Make contact and discuss opportunities for OWASP to contribute to their work&lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| OWASP Financial Services SIG &lt;br /&gt;
| -&lt;br /&gt;
| Outreach&lt;br /&gt;
| In Progress &lt;br /&gt;
| Working with Fabio Cerullo, Eoin Keary, Jim Routh, Jerry Kickenson and others on forming a SIG.  Arranging a financial panel for AppSec in Washington, DC in November&lt;br /&gt;
| JB/EK&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.spva.org Secure POS Vendor Alliance (SPVA)] &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Begin dialogue about possibility of working together.  Have had trouble getting through to them but have a good lead now.  Updates soon :)&lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Completed Items  ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Task &lt;br /&gt;
! Completed &lt;br /&gt;
! Type &lt;br /&gt;
! Status &lt;br /&gt;
! Description &lt;br /&gt;
! Who&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:e-Consumer Protection Consultation |e-Consumer Protection Consultation]]&lt;br /&gt;
| 13 Oct 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed&lt;br /&gt;
| Review and provide official OWASP response to [http://www.oft.gov.uk/ UK Office of Fair Trading] [http://www.oft.gov.uk/OFTwork/consultations/current/eprotection/ e-Consumer Protection Consultation].&lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:ENISA Cloud Computing Common Assurance Metrics|ENISA Common Assurance Maturity Model]] &lt;br /&gt;
| 8 Oct 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Work with [[:Category:OWASP Cloud ‐ 10 Project]] to contribute to the development of Common Assurance Maturity Model for [http://www.enisa.europa.eu/ ENISA]/Cloud Security Alliance/etc joint initiative. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.w3.org/TR/2010/WD-mwabp-20100713/ Mobile Web Application Best Practices Working Draft] &lt;br /&gt;
| 6 Aug 2010&lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Review and provide official OWASP response to W3C's  [http://www.w3.org/2005/MWI/BPWG/ Mobile Web Best Practices Working Group].&lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.oft.gov.uk/ UK Office of Fair Trading] &lt;br /&gt;
| 23 Jul 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Ask to be added to official consultation list&lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.businesslink.gov.uk BusinessLink] &lt;br /&gt;
| 1 Jul 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Offer to contribute to development of IT security information about [http://www.businesslink.gov.uk/bdotg/action/layer?topicId=1075421745 application security] on the BusinessLink website for UK SMEs.  Outcome - no help required at present, but BusinessLink system to be disbanded.&lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| Veracode &lt;br /&gt;
| 28 Jun 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Discuss use of Open SAMM to classify Secure SDL maturity in Veracode's code analysis summary reports. Outcome - positive response received.&lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Leeds_UK OWASP Leeds/North] &lt;br /&gt;
| 16 Jun 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed&lt;br /&gt;
| Presentations at chapter meeting in Newcastle-upon-Tyne about ENISA CAMM and OWASP Appsensor  &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Front_Range_OWASP_Conference_2010 Front Range OWASP Conference (FROC) 2010] &lt;br /&gt;
| 2 Jun 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed&lt;br /&gt;
| Conference organisation [http://tinyurl.com/froctalks Vids &amp;amp; presentations online]&lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.isaca-denver.org/meetings/MAY_2010_CHPT_MTG.shtml OWASP Presentation at ISACA Denver Annual Meeting] &lt;br /&gt;
| 27 May 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed&lt;br /&gt;
| Presentation [https://docs.google.com/fileview?id=0B_-vbfka88vFNjIwY2IwYjItZmYyNi00MmNiLWFhOWItYmQ4OGZmZjVmZWUx&amp;amp;hl=en Presentation online]&lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.issa-uk.org/ ISSA-UK] &lt;br /&gt;
| 13 May 2010&lt;br /&gt;
| Outreach&lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation&lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Personal Information Online Code of Practice|Personal Information Online COP]] &lt;br /&gt;
| 5 Mar 2010 &lt;br /&gt;
| Legislation &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to UK Information Commissioner's Office draft &amp;quot;Personal Information Online Code of Practice&amp;quot; &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.enisa.europa.eu/ ENISA] Mobile Apps&lt;br /&gt;
| Mar 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Identify and introduce OWASP contact for ENISA's Mobile Apps Project, in conjunction with Dinis Cruz. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Technology Strategy Board Secure Software Development Initiative|Technology Strategy Board Secure Software Development Partnership]]&lt;br /&gt;
| 18 Feb 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed&lt;br /&gt;
| Liaise with the UK  [http://www.innovateuk.org/ Technology Strategy Board] about the Secure Software Development Partnership (SSDP) in conjunction with the [http://www.owasp.org/index.php/London London chapter] leader Justin Clarke&lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.issa-nova.org Information Systems Security Association Northern Virginia Chapter (ISSA-NOVA)] &lt;br /&gt;
| 21 Jan 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide presentation covering CSSLP, fundamentals of AppSec and Intro to OWASP and Global Industry Committee  &lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.enisa.europa.eu/ ENISA] &lt;br /&gt;
| Jan 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed&lt;br /&gt;
| Discuss opportunities for OWASP to work with ENISA, in conjunction with Dinis Cruz. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[:Industry:Draft NIST SP 800-37 Revision 1|NIST SP 800-37 Revision 1 FPD]] Review Project &lt;br /&gt;
| 30 Dec 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;NIST SP 800-37 Revision 1 Final Public Draft, Guide for Applying the Risk Management Framework to Federal Information Systems: A Security Life Cycle Approach&amp;quot; &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.crest-approved.org/ CREST] CRESTCon &lt;br /&gt;
| 15 Dec 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Already an oversubscribed event, YP &amp;amp;amp; CW have been placed on the reserve list. Update: Positions secured for the 15th. &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [http://msdn.microsoft.com/en-us/security/cc448177.aspx SDL Pro Network] &lt;br /&gt;
| 30 Nov 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Contact SDL Pro Network to discuss if there are opportunities for OWASP to become involved or connected in some way &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST IR 7628|Draft NIST IR 7628]] &lt;br /&gt;
| 25 Nov 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;NIST IR 7628 Draft Smart Grid Cyber Security Strategy and Requirements&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/OWASP_AppSec_DC_2009 Appsec DC 2009] &lt;br /&gt;
| 10-13 Nov 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation - special effort to engage with US Federal sector &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.justice.gov.uk/ UK Ministry of Justice] &lt;br /&gt;
| - &lt;br /&gt;
| Legislation &lt;br /&gt;
| Closed &lt;br /&gt;
| Ask to be added to official consultation list &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.it-sa.de/ IT-SA] &lt;br /&gt;
| 13-15 Oct 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| OWASP booth at trade show &lt;br /&gt;
| GH&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/OWASP_AppSec_Germany_2009_Conference OWASP AppSec Germany 2009] &lt;br /&gt;
| 13 Oct 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation &lt;br /&gt;
| GH&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.loc.gov Library of Congress] &lt;br /&gt;
| 28 Sep 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about OWASP &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/OWASP_Ireland_AppSec_2009_Conference OWASP Ireland AppSec 2009] &lt;br /&gt;
| 10 Sep 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation &lt;br /&gt;
| EK&lt;br /&gt;
|-&lt;br /&gt;
| OWASP Citations &lt;br /&gt;
| 7 Sep 2009 &lt;br /&gt;
| Other &lt;br /&gt;
| Closed &lt;br /&gt;
| Identify and record the most important references to OWASP in official, or otherwise important, documents. Page created at: [[Industry:Citations]] &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.loc.gov Library of Congress] &lt;br /&gt;
| 26 Aug 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about OWASP &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| OWASP webcast at Brighttalk [http://www.brighttalk.com/summit/dataprivacy2 Data and Privacy in Web 2.0 Summit] &lt;br /&gt;
| 13 Aug 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Deliver [http://www.brighttalk.com/webcasts/4767/attend OWASP presentation on XSS, client side exploitation, and countermeasures]. &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:SAFECode Secure Development Practices (update to Oct 2008 version)|SAFECode Secure Development Practices (update to Oct 2008 version)]] &lt;br /&gt;
| 31 Jul 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Response to [http://www.safecode.org/ SAFECode] &amp;quot;Fundamental Practices for Secure Software Development: A Guide to the Most Effective Secure Development Practices in Use Today.&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Category:OWASP_CSA_Project OWASP CSA Project] &lt;br /&gt;
| 8 Jul 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Response to RFC [http://www.cloudsecurityalliance.org/guidance/csaguide.pdf Cloud Security Alliance Guidance v1.0] &lt;br /&gt;
| TB&lt;br /&gt;
|-&lt;br /&gt;
| [[Scotland]] &lt;br /&gt;
| 25 Jun 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about the Global Industry Committee, its role and recent activities (presentation slides [[Image:Owasp-scotland-industry-committee-june-2009.ppt]] and written notes [[Image:Owasp-scotland-industry-committee-june-2009-notes.pdf]]) &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| OWASP Presentation at [http://cfp2009.org/ CFP Con 2009] &lt;br /&gt;
| 1 Jun 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Deliver presentation on web threats and countermeasures. See [http://www.cfp2009.org/wiki/index.php/Tutorials/Workshops CFP tutorial page] grep OWASP for more info. &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| ENISA [http://www.enisa.europa.eu/pages/02_03_news_2009_02_19_who_is_who.html Who-Is-Who Directory] &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Contact ENISA regarding OWASP inclusion in directory (in progress). Encourage European chapter leaders to contact their ENISA liaison officers (completed). Contact UK liaison officer on behalf of London, Leeds and Scotland chapters. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| IIL [http://www.iilondon.co.uk/ Insurance Institute of London] &lt;br /&gt;
| 2 Jun 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Contact IIL regarding future input to their publication [http://www.iilondon.co.uk/XtraCart/store/comersus_viewItem.asp?idProduct=187 Insurance Aspects of E-Commerce] &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST SP 800-118|Draft NIST SP 800-118]] &lt;br /&gt;
| 29 May 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;Draft NIST Special Publication 800-118 Guide to Enterprise Password Management&amp;quot; &lt;br /&gt;
| CW/EK/RB/DC&lt;br /&gt;
|-&lt;br /&gt;
| German IT Industry Association &lt;br /&gt;
| 15 May 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation on OWASP &lt;br /&gt;
| GH&lt;br /&gt;
|-&lt;br /&gt;
| [http://docs.google.com/Present?docid=ddkr62qv_171cd7gh5fb&amp;amp;skipauth=true Outreach Presentation to Frontier Airlines] &lt;br /&gt;
| 7 May 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide outreach presentation covering fundamentals of AppSec and Intro to OWASP &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:DPC BS 10012|DPC BS 10012]] &lt;br /&gt;
| 31 Mar 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;BS 10012 Specification for the management of personal information in compliance with the Data Protection Act 1998&amp;quot; Draft for Public Comment (DPC) &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST SP 800-53 Revision 3|Draft NIST SP 800-53 Revision 3]] &lt;br /&gt;
| 27 Mar 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;Draft NIST Special Publication 800-53 (Revision 3) Recommended Security Controls for Federal Information Systems and Organizations&amp;quot; &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST SP 800-122|Draft NIST SP 800-122]] &lt;br /&gt;
| 13 Mar 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;Draft NIST Special Publication 800-122 Guide to Protecting the Confidentiality of Personally Identifiable Information (PII)&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[London]] &lt;br /&gt;
| 12 Mar 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about the Global Industry Committee, its role and recent activities (presentation slides [[Image:Owasp-london-industry-committee-march-2009.ppt]] and written notes [[Image:Owasp-london-industry-committee-march-2009-notes.pdf]]) &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Digital Britain Interim Report|Digital Britain Interim Report]] &lt;br /&gt;
| 11 Mar 2009 &lt;br /&gt;
| Legislation &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to UK Government's &amp;quot;Digital Britain Interim Report Jan 2009&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Front_Range_OWASP_Conference_2009 SnowFROC Front Range] &lt;br /&gt;
| 5 Mar 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.commerce.gov/ Department of Commerce] &lt;br /&gt;
| 25 Feb 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about OWASP to Economic Security Working Group &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:DPC BS 8878:2009|DPC BS 8878:2009]] &lt;br /&gt;
| 31 Jan 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;BS 8878:2009 Web accessibility. Building accessible experiences for disabled people&amp;quot; Draft for Public Comment (DPC) &lt;br /&gt;
| Puneet/CW&lt;br /&gt;
|-&lt;br /&gt;
| AppSec Presentation Delivered to Infragard, Dec 2008 &lt;br /&gt;
| Dec 2008 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| [http://www.infragard.net/ Infragard] is a collaboration between the US FBI and maintainers of critical infrastructure. [http://docs.google.com/Present?docid=ddkr62qv_0cn7km4c3&amp;amp;skipauth=true Presentation here]. Email DC for full PPT with speaker notes &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| The Register [http://www.theregister.co.uk/2008/11/22/google_analytics_as_security_risk/ Google Analytics — Yes, it is a security risk] &lt;br /&gt;
| Nov 2008 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Co-ordination of response and provision of comments from OWASP leaders about risk of JavaScript on Barack Obama's website &lt;br /&gt;
| DC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== General Presentations and Reports  ===&lt;br /&gt;
&lt;br /&gt;
[[Summit 2009]] &lt;br /&gt;
&lt;br /&gt;
*Global Industry Committee Presentation [[Image:Owasp-summit2009-industry-committee.ppt]]&lt;br /&gt;
&lt;br /&gt;
Summaries (for inclusion into other full OWASP presentations): &lt;br /&gt;
&lt;br /&gt;
*Sep 2009 [[Image:Owasp-industry-committee-summary-september-2009.ppt]] &lt;br /&gt;
*Jul 2009 [[Image:Owasp-industry-committee-summary-july-2009.ppt]] &lt;br /&gt;
*May 2009 [[Image:Owasp-industry-committee-summary-may-2009.ppt]] &lt;br /&gt;
*Apr 2009 [[Image:Owasp-industry-committee-summary-april-2009.ppt]] &lt;br /&gt;
*Mar 2009 [[Image:Owasp-industry-committee-summary-march-2009.ppt]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Other [http://www.owasp.org/index.php/Global_Committee_Pages Global Committees]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Global_Industry_Committee&amp;diff=91973</id>
		<title>Global Industry Committee</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Global_Industry_Committee&amp;diff=91973"/>
				<updated>2010-10-26T11:35:00Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: /* Work in Progress */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''The Global Industry Committee was created during the OWASP EU Summit in Portugal. The primary purpose of the Global Industry Committee is to work with industry executives to gather requirements from industry, work with Membership, Projects and others.''' &lt;br /&gt;
&lt;br /&gt;
== Mission Statement ==&lt;br /&gt;
&lt;br /&gt;
''To expand awareness of and promote the inclusion of software security best practices in Industry, Government, Academia and regulatory agencies and be a voice for industry. We will accomplish this through outreach; including presentations, development of position papers and collaborative efforts with other entities.'' [https://www.owasp.org/index.php/Global_Industry_Committee#General_Presentations_and_Reports Powerpoint of Accomplishments] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Committee Plan ==&lt;br /&gt;
&lt;br /&gt;
Step 1: [[Industry:Organizations for Outreach|Identify specific organizations]] worth working with to spread the OWASP gospel &lt;br /&gt;
&lt;br /&gt;
Step 2: Prioritize the proposed liasons based on potential impact, and also realistic likelihood of the organization actively working with us &lt;br /&gt;
&lt;br /&gt;
Step 3: Execute, leveraging global OWASP resources as much as possible to maximize impact &lt;br /&gt;
&lt;br /&gt;
Step 4: Evaluate progress &amp;amp;amp; repeat Step 1-3 &lt;br /&gt;
&lt;br /&gt;
== Committee Members ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; Committee Members: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name &lt;br /&gt;
! Email &lt;br /&gt;
! Location&lt;br /&gt;
|-&lt;br /&gt;
| Lorna Alamri&lt;br /&gt;
| lorna.alamri 'at' owasp dot org&lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Joe Bernik &lt;br /&gt;
| bernik 'at' gmail dot com&lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Rex Booth &lt;br /&gt;
| rex.booth 'at' gt dot com &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| David Campbell &lt;br /&gt;
| dcampbell 'at' owasp dot org &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Alexander Fry &lt;br /&gt;
| alexander.fry 'at' owasp dot org &lt;br /&gt;
| US&lt;br /&gt;
|-&lt;br /&gt;
| Georg Hess &lt;br /&gt;
| georg.hess 'at' artofdefence dot com &lt;br /&gt;
| Germany&lt;br /&gt;
|-&lt;br /&gt;
| Eoin Keary &lt;br /&gt;
| eoin.keary 'at' owasp dot org &lt;br /&gt;
| Ireland&lt;br /&gt;
|-&lt;br /&gt;
| Yiannis Pavlosoglou &lt;br /&gt;
| yiannis 'at' owasp dot org &lt;br /&gt;
| UK&lt;br /&gt;
|-&lt;br /&gt;
| Colin Watson &lt;br /&gt;
| colin.watson 'at' owasp dot org &lt;br /&gt;
| UK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The committee chair is Colin Watson.  From 1st November 2010, Yiannis Pavlosoglou will take over this role.&lt;br /&gt;
&lt;br /&gt;
== Monthly Report ==&lt;br /&gt;
&lt;br /&gt;
Date of last update: 29 September 2010&lt;br /&gt;
Updated by: CW&lt;br /&gt;
&lt;br /&gt;
Accomplishments for this Month&lt;br /&gt;
* Finish writing article for BCS&lt;br /&gt;
* Continued work on Common Assurance Maturity Model in conjunction with OWASP Cloud 10 project (with ENISA, CSA, etc)&lt;br /&gt;
* Yiannis Pavlosoglou was elected unopposed as GIC chair from 1 Nov 2010&lt;br /&gt;
Planned for Next Month&lt;br /&gt;
* Review whether OWASP should respond to W3C Document Object Model (DOM) Level 3 Events Specification&lt;br /&gt;
* Follow up outreach to SPVA, USNA and USMMA&lt;br /&gt;
* Response to UK Office of Fair Trading consultation&lt;br /&gt;
Issues/Risks/Challenges&lt;br /&gt;
* Difficulty getting enough engagement with good contacts in all priority sectors&lt;br /&gt;
Financial costs to OWASP for calender year ending 31 Dec 2010 (2009)&lt;br /&gt;
* Budget: nil (nil)&lt;br /&gt;
* Actual: nil (nil)&lt;br /&gt;
* OWASP staff time: negligible (negligible)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting Involved ==&lt;br /&gt;
&lt;br /&gt;
=== Mailing List  ===&lt;br /&gt;
&lt;br /&gt;
[http://lists.owasp.org/mailman/listinfo/global_industry_committee Join our mailing list] &lt;br /&gt;
&lt;br /&gt;
=== Meetings  ===&lt;br /&gt;
&lt;br /&gt;
The next Global Industry Committee meeting will be: &lt;br /&gt;
&lt;br /&gt;
* TBC&lt;br /&gt;
** Dial in number:  +1 866 534 4754&lt;br /&gt;
** Call code 192341&lt;br /&gt;
&lt;br /&gt;
Minutes of previous meetings are: &lt;br /&gt;
&lt;br /&gt;
* [[Industry:Minutes_2010-08-17|17 Aug 2010]] (also [http://www.owasp.org/images/0/0d/Gic_call_17aug2010.mp3 MP3 recording of the call])&lt;br /&gt;
* [[Industry:Minutes 2010-05-18|18 May 2010]] &lt;br /&gt;
*[[Industry:Minutes 2010-01-05|05 Jan 2010]] (also [http://www.owasp.org/images/a/a3/Owasp_gic_call_5jan10.mp3 MP3 recording of the call])&lt;br /&gt;
*[[Industry:Minutes 2009-01-23|23 Jan 2009]]&lt;br /&gt;
&lt;br /&gt;
=== Membership  ===&lt;br /&gt;
&lt;br /&gt;
[[Membership]] explains how to become an OWASP organization supporter or individual member. But you don't have to be an OWASP Member or Committee Member to contribute.&lt;br /&gt;
&lt;br /&gt;
The current committee members joined for a 12 month term - see [[How to Join a Committee]] and [[Global Committee Pages]].  We would especially welcome new members who can widen our geographic coverage (e.g. Africa, Asia and South America) and who have time to contribute proactively.&lt;br /&gt;
&lt;br /&gt;
=== Other ongoing initiatives  ===&lt;br /&gt;
&lt;br /&gt;
*[http://www.owasp.org/index.php/Global_Industry_Committee-SIG Special Interest Groups] - Outreach to sector-specific critical infrastructures worldwide. &lt;br /&gt;
*[http://www.owasp.org/index.php/Category:India OWASP India Advisory Board] - Regional panel contributing to the software outsourcing industry. &lt;br /&gt;
*[http://www.owasp.org/index.php/Industry:Citations OWASP Citations] - References to OWASP in official, or otherwise important, documents.&lt;br /&gt;
&lt;br /&gt;
== Current Activity ==&lt;br /&gt;
&lt;br /&gt;
=== Work in Progress  ===&lt;br /&gt;
&lt;br /&gt;
The current activities being undertaken: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Task &lt;br /&gt;
! Deadline &lt;br /&gt;
! Type &lt;br /&gt;
! Status &lt;br /&gt;
! Description &lt;br /&gt;
! Who&lt;br /&gt;
|-&lt;br /&gt;
| (ISC)^2 Application Security Advisory Board (ASAB)&lt;br /&gt;
| 19 Nov 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| In progress&lt;br /&gt;
| YP is now a member of the (ISC)^2 ASAB, with the first meeting to be held in FL on the above stated date.&lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:DOJ Nondiscrimination on the Basis of Disability|DOJ Nondiscimination on the Basis of Disability]]&lt;br /&gt;
| 24 Jan 2011 &lt;br /&gt;
| Standards &lt;br /&gt;
| In progress&lt;br /&gt;
| Provide response to US DOJ's &amp;quot;Accessibility of Web Information and Services of State and Local Government Entities and Public Accommodations&amp;quot;&lt;br /&gt;
| AF/LA&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:ICO Data Sharing CoP|Data Sharing CoP]]&lt;br /&gt;
| 5 Jan 2011 &lt;br /&gt;
| Standards &lt;br /&gt;
| In progress&lt;br /&gt;
| Provide response to UK ICO's &amp;quot;Data Sharing Code of Practice Consultation&amp;quot;&lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.londoncentral.bcs.org BCS London Central] &lt;br /&gt;
| 17 Feb 2011 &lt;br /&gt;
| Outreach &lt;br /&gt;
| New&lt;br /&gt;
| Present a talk about OWASP.&lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.bcs.org BCS] &lt;br /&gt;
| 3 Sep 2010&lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress&lt;br /&gt;
| Write article for BCS ITnow magazine about application security and OWASP Top Ten.&lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/OWASP_AppSec_DC_2010 Appsec DC 2010] &lt;br /&gt;
| 8-11 Nov 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Conference organisation - special effort to engage with US Federal sector &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.usmma.edu/ USMMA] &lt;br /&gt;
| 1 Jan 2011 &lt;br /&gt;
| Outreach &lt;br /&gt;
| New &lt;br /&gt;
| Make contact. Present a talk about OWASP to the USMMA computer club or security teams.&lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.usna.edu/ USNA] &lt;br /&gt;
| 1 Jan 2011 &lt;br /&gt;
| Outreach &lt;br /&gt;
| New &lt;br /&gt;
| Make contact. Present a talk about OWASP to the USNA computer science faculty and students or interest group.&lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.auscert.org.au/ AusCERT] &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Make contact and discuss opportunities for OWASP to contribute to their work&lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| OWASP Financial Services SIG &lt;br /&gt;
| -&lt;br /&gt;
| Outreach&lt;br /&gt;
| In Progress &lt;br /&gt;
| Working with Fabio Cerullo, Eoin Keary, Jim Routh, Jerry Kickenson and others on forming a SIG.  Arranging a financial panel for AppSec in Washington, DC in November&lt;br /&gt;
| JB/EK&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.spva.org Secure POS Vendor Alliance (SPVA)] &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| In Progress &lt;br /&gt;
| Begin dialogue about possibility of working together.  Have had trouble getting through to them but have a good lead now.  Updates soon :)&lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Completed Items  ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Task &lt;br /&gt;
! Completed &lt;br /&gt;
! Type &lt;br /&gt;
! Status &lt;br /&gt;
! Description &lt;br /&gt;
! Who&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:e-Consumer Protection Consultation |e-Consumer Protection Consultation]]&lt;br /&gt;
| 13 Oct 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed&lt;br /&gt;
| Review and provide official OWASP response to [http://www.oft.gov.uk/ UK Office of Fair Trading] [http://www.oft.gov.uk/OFTwork/consultations/current/eprotection/ e-Consumer Protection Consultation].&lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:ENISA Cloud Computing Common Assurance Metrics|ENISA Common Assurance Maturity Model]] &lt;br /&gt;
| 8 Oct 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Work with [[:Category:OWASP Cloud ‐ 10 Project]] to contribute to the development of Common Assurance Maturity Model for [http://www.enisa.europa.eu/ ENISA]/Cloud Security Alliance/etc joint initiative. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.w3.org/TR/2010/WD-mwabp-20100713/ Mobile Web Application Best Practices Working Draft] &lt;br /&gt;
| 6 Aug 2010&lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Review and provide official OWASP response to W3C's  [http://www.w3.org/2005/MWI/BPWG/ Mobile Web Best Practices Working Group].&lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.oft.gov.uk/ UK Office of Fair Trading] &lt;br /&gt;
| 23 Jul 2010 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Ask to be added to official consultation list&lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.businesslink.gov.uk BusinessLink] &lt;br /&gt;
| 1 Jul 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Offer to contribute to development of IT security information about [http://www.businesslink.gov.uk/bdotg/action/layer?topicId=1075421745 application security] on the BusinessLink website for UK SMEs.  Outcome - no help required at present, but BusinessLink system to be disbanded.&lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| Veracode &lt;br /&gt;
| 28 Jun 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Discuss use of Open SAMM to classify Secure SDL maturity in Veracode's code analysis summary reports. Outcome - positive response received.&lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Leeds_UK OWASP Leeds/North] &lt;br /&gt;
| 16 Jun 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed&lt;br /&gt;
| Presentations at chapter meeting in Newcastle-upon-Tyne about ENISA CAMM and OWASP Appsensor  &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Front_Range_OWASP_Conference_2010 Front Range OWASP Conference (FROC) 2010] &lt;br /&gt;
| 2 Jun 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed&lt;br /&gt;
| Conference organisation [http://tinyurl.com/froctalks Vids &amp;amp; presentations online]&lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.isaca-denver.org/meetings/MAY_2010_CHPT_MTG.shtml OWASP Presentation at ISACA Denver Annual Meeting] &lt;br /&gt;
| 27 May 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed&lt;br /&gt;
| Presentation [https://docs.google.com/fileview?id=0B_-vbfka88vFNjIwY2IwYjItZmYyNi00MmNiLWFhOWItYmQ4OGZmZjVmZWUx&amp;amp;hl=en Presentation online]&lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.issa-uk.org/ ISSA-UK] &lt;br /&gt;
| 13 May 2010&lt;br /&gt;
| Outreach&lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation&lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Personal Information Online Code of Practice|Personal Information Online COP]] &lt;br /&gt;
| 5 Mar 2010 &lt;br /&gt;
| Legislation &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to UK Information Commissioner's Office draft &amp;quot;Personal Information Online Code of Practice&amp;quot; &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.enisa.europa.eu/ ENISA] Mobile Apps&lt;br /&gt;
| Mar 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Identify and introduce OWASP contact for ENISA's Mobile Apps Project, in conjunction with Dinis Cruz. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Technology Strategy Board Secure Software Development Initiative|Technology Strategy Board Secure Software Development Partnership]]&lt;br /&gt;
| 18 Feb 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed&lt;br /&gt;
| Liaise with the UK  [http://www.innovateuk.org/ Technology Strategy Board] about the Secure Software Development Partnership (SSDP) in conjunction with the [http://www.owasp.org/index.php/London London chapter] leader Justin Clarke&lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.issa-nova.org Information Systems Security Association Northern Virginia Chapter (ISSA-NOVA)] &lt;br /&gt;
| 21 Jan 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide presentation covering CSSLP, fundamentals of AppSec and Intro to OWASP and Global Industry Committee  &lt;br /&gt;
| AF&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.enisa.europa.eu/ ENISA] &lt;br /&gt;
| Jan 2010 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed&lt;br /&gt;
| Discuss opportunities for OWASP to work with ENISA, in conjunction with Dinis Cruz. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[:Industry:Draft NIST SP 800-37 Revision 1|NIST SP 800-37 Revision 1 FPD]] Review Project &lt;br /&gt;
| 30 Dec 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;NIST SP 800-37 Revision 1 Final Public Draft, Guide for Applying the Risk Management Framework to Federal Information Systems: A Security Life Cycle Approach&amp;quot; &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.crest-approved.org/ CREST] CRESTCon &lt;br /&gt;
| 15 Dec 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Already an oversubscribed event, YP &amp;amp;amp; CW have been placed on the reserve list. Update: Positions secured for the 15th. &lt;br /&gt;
| YP&lt;br /&gt;
|-&lt;br /&gt;
| [http://msdn.microsoft.com/en-us/security/cc448177.aspx SDL Pro Network] &lt;br /&gt;
| 30 Nov 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Contact SDL Pro Network to discuss if there are opportunities for OWASP to become involved or connected in some way &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST IR 7628|Draft NIST IR 7628]] &lt;br /&gt;
| 25 Nov 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;NIST IR 7628 Draft Smart Grid Cyber Security Strategy and Requirements&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/OWASP_AppSec_DC_2009 Appsec DC 2009] &lt;br /&gt;
| 10-13 Nov 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation - special effort to engage with US Federal sector &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.justice.gov.uk/ UK Ministry of Justice] &lt;br /&gt;
| - &lt;br /&gt;
| Legislation &lt;br /&gt;
| Closed &lt;br /&gt;
| Ask to be added to official consultation list &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.it-sa.de/ IT-SA] &lt;br /&gt;
| 13-15 Oct 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| OWASP booth at trade show &lt;br /&gt;
| GH&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/OWASP_AppSec_Germany_2009_Conference OWASP AppSec Germany 2009] &lt;br /&gt;
| 13 Oct 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation &lt;br /&gt;
| GH&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.loc.gov Library of Congress] &lt;br /&gt;
| 28 Sep 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about OWASP &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/OWASP_Ireland_AppSec_2009_Conference OWASP Ireland AppSec 2009] &lt;br /&gt;
| 10 Sep 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation &lt;br /&gt;
| EK&lt;br /&gt;
|-&lt;br /&gt;
| OWASP Citations &lt;br /&gt;
| 7 Sep 2009 &lt;br /&gt;
| Other &lt;br /&gt;
| Closed &lt;br /&gt;
| Identify and record the most important references to OWASP in official, or otherwise important, documents. Page created at: [[Industry:Citations]] &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.loc.gov Library of Congress] &lt;br /&gt;
| 26 Aug 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about OWASP &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| OWASP webcast at Brighttalk [http://www.brighttalk.com/summit/dataprivacy2 Data and Privacy in Web 2.0 Summit] &lt;br /&gt;
| 13 Aug 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Deliver [http://www.brighttalk.com/webcasts/4767/attend OWASP presentation on XSS, client side exploitation, and countermeasures]. &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:SAFECode Secure Development Practices (update to Oct 2008 version)|SAFECode Secure Development Practices (update to Oct 2008 version)]] &lt;br /&gt;
| 31 Jul 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Response to [http://www.safecode.org/ SAFECode] &amp;quot;Fundamental Practices for Secure Software Development: A Guide to the Most Effective Secure Development Practices in Use Today.&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Category:OWASP_CSA_Project OWASP CSA Project] &lt;br /&gt;
| 8 Jul 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Response to RFC [http://www.cloudsecurityalliance.org/guidance/csaguide.pdf Cloud Security Alliance Guidance v1.0] &lt;br /&gt;
| TB&lt;br /&gt;
|-&lt;br /&gt;
| [[Scotland]] &lt;br /&gt;
| 25 Jun 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about the Global Industry Committee, its role and recent activities (presentation slides [[Image:Owasp-scotland-industry-committee-june-2009.ppt]] and written notes [[Image:Owasp-scotland-industry-committee-june-2009-notes.pdf]]) &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| OWASP Presentation at [http://cfp2009.org/ CFP Con 2009] &lt;br /&gt;
| 1 Jun 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Deliver presentation on web threats and countermeasures. See [http://www.cfp2009.org/wiki/index.php/Tutorials/Workshops CFP tutorial page] grep OWASP for more info. &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| ENISA [http://www.enisa.europa.eu/pages/02_03_news_2009_02_19_who_is_who.html Who-Is-Who Directory] &lt;br /&gt;
| - &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Contact ENISA regarding OWASP inclusion in directory (in progress). Encourage European chapter leaders to contact their ENISA liaison officers (completed). Contact UK liaison officer on behalf of London, Leeds and Scotland chapters. &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| IIL [http://www.iilondon.co.uk/ Insurance Institute of London] &lt;br /&gt;
| 2 Jun 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Contact IIL regarding future input to their publication [http://www.iilondon.co.uk/XtraCart/store/comersus_viewItem.asp?idProduct=187 Insurance Aspects of E-Commerce] &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST SP 800-118|Draft NIST SP 800-118]] &lt;br /&gt;
| 29 May 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;Draft NIST Special Publication 800-118 Guide to Enterprise Password Management&amp;quot; &lt;br /&gt;
| CW/EK/RB/DC&lt;br /&gt;
|-&lt;br /&gt;
| German IT Industry Association &lt;br /&gt;
| 15 May 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation on OWASP &lt;br /&gt;
| GH&lt;br /&gt;
|-&lt;br /&gt;
| [http://docs.google.com/Present?docid=ddkr62qv_171cd7gh5fb&amp;amp;skipauth=true Outreach Presentation to Frontier Airlines] &lt;br /&gt;
| 7 May 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide outreach presentation covering fundamentals of AppSec and Intro to OWASP &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:DPC BS 10012|DPC BS 10012]] &lt;br /&gt;
| 31 Mar 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;BS 10012 Specification for the management of personal information in compliance with the Data Protection Act 1998&amp;quot; Draft for Public Comment (DPC) &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST SP 800-53 Revision 3|Draft NIST SP 800-53 Revision 3]] &lt;br /&gt;
| 27 Mar 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;Draft NIST Special Publication 800-53 (Revision 3) Recommended Security Controls for Federal Information Systems and Organizations&amp;quot; &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Draft NIST SP 800-122|Draft NIST SP 800-122]] &lt;br /&gt;
| 13 Mar 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;Draft NIST Special Publication 800-122 Guide to Protecting the Confidentiality of Personally Identifiable Information (PII)&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[London]] &lt;br /&gt;
| 12 Mar 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about the Global Industry Committee, its role and recent activities (presentation slides [[Image:Owasp-london-industry-committee-march-2009.ppt]] and written notes [[Image:Owasp-london-industry-committee-march-2009-notes.pdf]]) &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:Digital Britain Interim Report|Digital Britain Interim Report]] &lt;br /&gt;
| 11 Mar 2009 &lt;br /&gt;
| Legislation &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to UK Government's &amp;quot;Digital Britain Interim Report Jan 2009&amp;quot; &lt;br /&gt;
| CW&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.owasp.org/index.php/Front_Range_OWASP_Conference_2009 SnowFROC Front Range] &lt;br /&gt;
| 5 Mar 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Conference organisation &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| US [http://www.commerce.gov/ Department of Commerce] &lt;br /&gt;
| 25 Feb 2009 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Presentation about OWASP to Economic Security Working Group &lt;br /&gt;
| RB&lt;br /&gt;
|-&lt;br /&gt;
| [[Industry:DPC BS 8878:2009|DPC BS 8878:2009]] &lt;br /&gt;
| 31 Jan 2009 &lt;br /&gt;
| Standards &lt;br /&gt;
| Closed &lt;br /&gt;
| Provide response to &amp;quot;BS 8878:2009 Web accessibility. Building accessible experiences for disabled people&amp;quot; Draft for Public Comment (DPC) &lt;br /&gt;
| Puneet/CW&lt;br /&gt;
|-&lt;br /&gt;
| AppSec Presentation Delivered to Infragard, Dec 2008 &lt;br /&gt;
| Dec 2008 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| [http://www.infragard.net/ Infragard] is a collaboration between the US FBI and maintainers of critical infrastructure. [http://docs.google.com/Present?docid=ddkr62qv_0cn7km4c3&amp;amp;skipauth=true Presentation here]. Email DC for full PPT with speaker notes &lt;br /&gt;
| DC&lt;br /&gt;
|-&lt;br /&gt;
| The Register [http://www.theregister.co.uk/2008/11/22/google_analytics_as_security_risk/ Google Analytics — Yes, it is a security risk] &lt;br /&gt;
| Nov 2008 &lt;br /&gt;
| Outreach &lt;br /&gt;
| Closed &lt;br /&gt;
| Co-ordination of response and provision of comments from OWASP leaders about risk of JavaScript on Barack Obama's website &lt;br /&gt;
| DC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== General Presentations and Reports  ===&lt;br /&gt;
&lt;br /&gt;
[[Summit 2009]] &lt;br /&gt;
&lt;br /&gt;
*Global Industry Committee Presentation [[Image:Owasp-summit2009-industry-committee.ppt]]&lt;br /&gt;
&lt;br /&gt;
Summaries (for inclusion into other full OWASP presentations): &lt;br /&gt;
&lt;br /&gt;
*Sep 2009 [[Image:Owasp-industry-committee-summary-september-2009.ppt]] &lt;br /&gt;
*Jul 2009 [[Image:Owasp-industry-committee-summary-july-2009.ppt]] &lt;br /&gt;
*May 2009 [[Image:Owasp-industry-committee-summary-may-2009.ppt]] &lt;br /&gt;
*Apr 2009 [[Image:Owasp-industry-committee-summary-april-2009.ppt]] &lt;br /&gt;
*Mar 2009 [[Image:Owasp-industry-committee-summary-march-2009.ppt]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Other [http://www.owasp.org/index.php/Global_Committee_Pages Global Committees]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User:Yiannis&amp;diff=91738</id>
		<title>User:Yiannis</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User:Yiannis&amp;diff=91738"/>
				<updated>2010-10-21T10:27:06Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There is a world of numbers, hiding behind letters, inside computers that stimulates the brain of Yiannis. Currently, he is focusing on research relating to coding standards, practices and ways of exploiting development code. This focus entails the breaking and making of client-side standalone, as well as server-side web applications. &lt;br /&gt;
&lt;br /&gt;
'''OWASP Life in Bullets:''' &lt;br /&gt;
&lt;br /&gt;
*2010 - Bletchley Park ISSA UK [http://www.issa-uk.org/newsletters/ISSANewsletterApril2010.pdf Hacking for Queen and Country]&lt;br /&gt;
*2010 - OWASP GitHub [http://www.owasp.org/index.php/Category:OWASP_GitHub http://www.owasp.org/index.php/Category:OWASP_GitHub] &lt;br /&gt;
*2010 - OWASP London [http://www.owasp.org/index.php/London#Thursday.2C_January_14th_2010 http://www.owasp.org/index.php/London#Thursday.2C_January_14th_2010] &lt;br /&gt;
**Penetration Testing with Selenium&lt;br /&gt;
*2009 - OWASP Global Industry Committee [http://www.owasp.org/index.php/Global_Industry_Committee http://www.owasp.org/index.php/Global_Industry_Committee]&lt;br /&gt;
*2008 - OWASP NYC Conference [http://video.google.com/videoplay?docid=-1551704659206071145# http://video.google.com/videoplay?docid=-1551704659206071145#]&lt;br /&gt;
**JBroFuzz - Building a Java Fuzzer&lt;br /&gt;
*2008 - Deepsec Vienna [http://2008.deepsec.net/ http://2008.deepsec.net/]&lt;br /&gt;
**Hybrid Code Auditing: A Dataflow Source Code Review Methodology&lt;br /&gt;
*2007 - OWASP New York/New Jersey [http://www.owasp.org/images/4/4e/OWASP_NY_07-Financial-Real-Time-Threats_Pavlosoglou.ppt http://www.owasp.org/images/4/4e/OWASP_NY_07-Financial-Real-Time-Threats_Pavlosoglou.ppt]&lt;br /&gt;
**Financial Real-Time Threats: Impacting Trading Floor Operations&lt;br /&gt;
*2006 - JBroFuzz Project Leader [http://lists.owasp.org/mailman/listinfo/owasp-jbrofuzz http://lists.owasp.org/mailman/listinfo/owasp-jbrofuzz]&lt;br /&gt;
** JBroFuzz Mailing List&lt;br /&gt;
&lt;br /&gt;
'''Project Involvement'''&lt;br /&gt;
&lt;br /&gt;
*DirBuster - [http://www.owasp.org/index.php/Category:OWASP_DirBuster_Project http://www.owasp.org/index.php/Category:OWASP_DirBuster_Project]&lt;br /&gt;
*JBroFuzz - [http://www.owasp.org/index.php/JBroFuzz http://www.owasp.org/index.php/JBroFuzz]&lt;br /&gt;
&lt;br /&gt;
'''Contact''' &lt;br /&gt;
&lt;br /&gt;
Yiannis Pavlosoglou&amp;lt;br&amp;gt; yiannis@owasp.org&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User:Yiannis&amp;diff=91700</id>
		<title>User:Yiannis</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User:Yiannis&amp;diff=91700"/>
				<updated>2010-10-20T17:36:08Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There is a world of numbers, hiding behind letters, inside computers that stimulates the brain of Yiannis. Currently, he is focusing on research relating to coding standards, practices and ways of exploiting development code. This focus entails the breaking and making of client-side standalone, as well as server-side web applications. &lt;br /&gt;
&lt;br /&gt;
'''OWASP Life in Bullets:''' &lt;br /&gt;
&lt;br /&gt;
*2010 - Bletchley Park ISSA UK [http://www.issa-uk.org/newsletters/ISSANewsletterApril2010.pdf Hacking for Queen and Country]&lt;br /&gt;
*2010 - OWASP GitHub [http://www.owasp.org/index.php/Category:OWASP_GitHub http://www.owasp.org/index.php/Category:OWASP_GitHub] &lt;br /&gt;
*2010 - OWASP London [http://www.owasp.org/index.php/London#Thursday.2C_January_14th_2010 http://www.owasp.org/index.php/London#Thursday.2C_January_14th_2010] &lt;br /&gt;
**Penetration Testing with Selenium&lt;br /&gt;
&lt;br /&gt;
'''Project Involvement'''&lt;br /&gt;
&lt;br /&gt;
*DirBuster - [http://www.owasp.org/index.php/Category:OWASP_DirBuster_Project http://www.owasp.org/index.php/Category:OWASP_DirBuster_Project]&lt;br /&gt;
*JBroFuzz - [http://www.owasp.org/index.php/JBroFuzz http://www.owasp.org/index.php/JBroFuzz]&lt;br /&gt;
&lt;br /&gt;
'''Contact''' &lt;br /&gt;
&lt;br /&gt;
Yiannis Pavlosoglou&amp;lt;br&amp;gt; yiannis@owasp.org&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Global_Industry_Committee_-_Application_5&amp;diff=89776</id>
		<title>Global Industry Committee - Application 5</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Global_Industry_Committee_-_Application_5&amp;diff=89776"/>
				<updated>2010-09-22T00:47:19Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[How to Join a Committee|Click here to return to 'How to Join a Committee' page]] &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot; style=&amp;quot;width: 100%&amp;quot; align=&amp;quot;center&amp;quot; border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background: #4058a0; color: white&amp;quot; align=&amp;quot;center&amp;quot; colspan=&amp;quot;2&amp;quot; | &amp;lt;font color=&amp;quot;#ffffff&amp;quot;&amp;gt;'''COMMITTEE APPLICATION FORM'''&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: #7b8abd; width: 25%&amp;quot; align=&amp;quot;center&amp;quot; | '''Applicant's Name''' &lt;br /&gt;
| style=&amp;quot;background: #cccccc; width: 85%&amp;quot; align=&amp;quot;left&amp;quot; | &amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;Lorna Alamri&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: #7b8abd; width: 25%&amp;quot; align=&amp;quot;center&amp;quot; | '''Current and past OWASP Roles''' &lt;br /&gt;
| style=&amp;quot;background: #cccccc; width: 85%&amp;quot; align=&amp;quot;left&amp;quot; | OWASP MSP board, Connections&amp;amp;nbsp;Committee, Newsletter Editor&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: #7b8abd; width: 25%&amp;quot; align=&amp;quot;center&amp;quot; | '''Committee Applying for''' &lt;br /&gt;
| style=&amp;quot;background: #cccccc; width: 85%&amp;quot; align=&amp;quot;left&amp;quot; | OWASP Global Industry Committee.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Please be aware that for an application to be considered by the board, '''you MUST have 5 recommendations'''. An incomplete application will not be considered for vote. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot; style=&amp;quot;width: 100%&amp;quot; align=&amp;quot;center&amp;quot; border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background: #4058a0; color: white&amp;quot; align=&amp;quot;center&amp;quot; colspan=&amp;quot;8&amp;quot; | &amp;lt;font color=&amp;quot;#ffffff&amp;quot;&amp;gt;'''COMMITTEE RECOMMENDATIONS'''&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background: white; color: white&amp;quot; align=&amp;quot;center&amp;quot; | &amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
! style=&amp;quot;background: #7b8abd; color: white&amp;quot; align=&amp;quot;center&amp;quot; | &amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;'''Who Recommends/Name'''&amp;lt;/font&amp;gt;&lt;br /&gt;
! style=&amp;quot;background: #7b8abd; color: white&amp;quot; align=&amp;quot;center&amp;quot; | &amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;'''Role in OWASP'''&amp;lt;/font&amp;gt;&lt;br /&gt;
! style=&amp;quot;background: #7b8abd; color: white&amp;quot; align=&amp;quot;center&amp;quot; | &amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;'''Recommendation Content'''&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: #cccccc; width: 3%&amp;quot; align=&amp;quot;center&amp;quot; | '''1''' &lt;br /&gt;
| style=&amp;quot;background: #cccccc; width: 20%&amp;quot; align=&amp;quot;center&amp;quot; | Konstantinos Papapanagiotou&lt;br /&gt;
| style=&amp;quot;background: #cccccc; width: 20%&amp;quot; align=&amp;quot;center&amp;quot; | Greek Chapter Leader&lt;br /&gt;
| style=&amp;quot;background: #cccccc; width: 57%&amp;quot; align=&amp;quot;center&amp;quot; | Excellent work editing the newsletter and also coordinating the translation teams.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: #cccccc; width: 3%&amp;quot; align=&amp;quot;center&amp;quot; | '''2''' &lt;br /&gt;
| style=&amp;quot;background: #cccccc; width: 20%&amp;quot; align=&amp;quot;center&amp;quot; | Neil Matatall&lt;br /&gt;
| style=&amp;quot;background: #cccccc; width: 20%&amp;quot; align=&amp;quot;center&amp;quot; | OC Chapter Leader&lt;br /&gt;
| style=&amp;quot;background: #cccccc; width: 57%&amp;quot; align=&amp;quot;center&amp;quot; | good work with the newsletter, very personable, go getter, takes initiative, good marketing skills.  &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: #cccccc; width: 3%&amp;quot; align=&amp;quot;center&amp;quot; | '''3''' &lt;br /&gt;
| style=&amp;quot;background: #cccccc; width: 20%&amp;quot; align=&amp;quot;center&amp;quot; | Tin Zaw&lt;br /&gt;
| style=&amp;quot;background: #cccccc; width: 20%&amp;quot; align=&amp;quot;center&amp;quot; | Los Angeles Chapter Leader&lt;br /&gt;
| style=&amp;quot;background: #cccccc; width: 57%&amp;quot; align=&amp;quot;center&amp;quot; | Lorna has been very helpful to us, AppSec conference committee. She took initiative &lt;br /&gt;
and did a great job in promoting AppSec USA in the newsletters. She is a great communicator and an excellent people-person.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: #cccccc; width: 3%&amp;quot; align=&amp;quot;center&amp;quot; | '''4''' &lt;br /&gt;
| style=&amp;quot;background: #cccccc; width: 20%&amp;quot; align=&amp;quot;center&amp;quot; | Cassio Goldschmidt&lt;br /&gt;
| style=&amp;quot;background: #cccccc; width: 20%&amp;quot; align=&amp;quot;center&amp;quot; | Los Angeles Chapter Founder, AppSec USA 2010 co-chair&lt;br /&gt;
| style=&amp;quot;background: #cccccc; width: 57%&amp;quot; align=&amp;quot;center&amp;quot; | As an OWASP MSP board member, Lorna helped to create one of the most well run chapters in the country. Lorna is dedicated, personable and passionate about OWASP. She makes me have high expectations about OWASP AppSec USA 2011.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: #cccccc; width: 3%&amp;quot; align=&amp;quot;center&amp;quot; | '''5''' &lt;br /&gt;
| style=&amp;quot;background: #cccccc; width: 20%&amp;quot; align=&amp;quot;center&amp;quot; | Helen Gao&lt;br /&gt;
| style=&amp;quot;background: #cccccc; width: 20%&amp;quot; align=&amp;quot;center&amp;quot; | Founder and leader of Long Island Chapter &lt;br /&gt;
| style=&amp;quot;background: #cccccc; width: 57%&amp;quot; align=&amp;quot;center&amp;quot; | I have worked with you on several OWASP newsletters.  You have impressed me with your enthusiasm and energy.  I'm happy that you are willing to do more volunteer work.  I wish you the best of luck with the committee.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User:Yiannis&amp;diff=89565</id>
		<title>User:Yiannis</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User:Yiannis&amp;diff=89565"/>
				<updated>2010-09-20T01:02:34Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There is a world of numbers, hiding behind letters, inside computers that stimulates the brain of Yiannis. Currently, he is focusing on research relating to coding standards, practices and ways of exploiting development code. This focus entails the breaking and making of client-side standalone, as well as server-side web applications. &lt;br /&gt;
&lt;br /&gt;
'''OWASP Life in Bullets:''' &lt;br /&gt;
&lt;br /&gt;
*2010 - Bletchley Park ISSA UK [http://www.issa-uk.org/newsletters/ISSANewsletterApril2010.pdf Hacking for Queen and Country]&lt;br /&gt;
*2010 - OWASP GitHub [http://www.owasp.org/index.php/Category:OWASP_GitHub http://www.owasp.org/index.php/Category:OWASP_GitHub] &lt;br /&gt;
*2010 - OWASP London [http://www.owasp.org/index.php/London#Thursday.2C_January_14th_2010 http://www.owasp.org/index.php/London#Thursday.2C_January_14th_2010] &lt;br /&gt;
**Penetration Testing with Selenium&lt;br /&gt;
&lt;br /&gt;
'''Contact''' &lt;br /&gt;
&lt;br /&gt;
Yiannis Pavlosoglou&amp;lt;br&amp;gt; yiannis@owasp.org&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User:Yiannis&amp;diff=89564</id>
		<title>User:Yiannis</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User:Yiannis&amp;diff=89564"/>
				<updated>2010-09-20T00:23:26Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There is a world of numbers, hiding behind letters, inside computers that stimulates the brain of Yiannis. Currently, he is focusing on research relating to coding standards, practices and ways of exploiting development code. This focus entails the breaking and making of client-side standalone, as well as server-side web applications.&lt;br /&gt;
&lt;br /&gt;
'''OWASP Life in Bullets:'''&lt;br /&gt;
&lt;br /&gt;
* 2010 - OWASP GitHub [[http://www.owasp.org/index.php/Category:OWASP_GitHub http://www.owasp.org/index.php/Category:OWASP_GitHub]]&lt;br /&gt;
* 2010 - OWASP London [[http://www.owasp.org/index.php/London#Thursday.2C_January_14th_2010 http://www.owasp.org/index.php/London#Thursday.2C_January_14th_2010]]&lt;br /&gt;
** Penetration Testing with Selenium&lt;br /&gt;
&lt;br /&gt;
'''Contact'''&lt;br /&gt;
&lt;br /&gt;
Yiannis Pavlosoglou&amp;lt;br&amp;gt;&lt;br /&gt;
yiannis@owasp.org&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:Jbrofuzz-fuzz-header.png&amp;diff=89563</id>
		<title>File:Jbrofuzz-fuzz-header.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:Jbrofuzz-fuzz-header.png&amp;diff=89563"/>
				<updated>2010-09-19T23:00:37Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: uploaded a new version of &amp;quot;File:Jbrofuzz-fuzz-header.png&amp;quot;:&amp;amp;#32;Updated version.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_JBroFuzz_Tutorial&amp;diff=89404</id>
		<title>OWASP JBroFuzz Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_JBroFuzz_Tutorial&amp;diff=89404"/>
				<updated>2010-09-16T09:45:00Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Introduction  ==&lt;br /&gt;
&lt;br /&gt;
''“If you can’t fuzz with JBroFuzz, you probably do not want to fuzz!”'' &lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;Old JBroFuzz Motto &amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; The art of teaching, Mark Van Doren said, is the art of assisting discovery. Fuzzing is a representative discipline towards assisting the discovery of security vulnerabilities, that is just beginning to come of age. Over the last two years, through continuous development, JBroFuzz has attempted to expose the intrinsic beauty of the subject: Constantly submit a vast amount of payloads to a service, device or prompt, waiting for the one response that makes all the difference. This is the mentality that JBroFuzz embraces and attempts to offer back to security professionals. &lt;br /&gt;
&lt;br /&gt;
Fuzzing as a concept goes beyond a conventional work flow or a standard methodology. I would argue that to know how to fuzz well, is to master a new language. Thus, similar to the process of learning a programming (or foreign) language, there are three things you must master: &lt;br /&gt;
&lt;br /&gt;
• Grammar: How fuzzing as a process is structured&amp;lt;br&amp;gt; • Vocabulary: How to name fuzzing concepts you want to use&amp;lt;br&amp;gt; • Usage: Ways of achieving everyday effective results with fuzzing&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:001-JBroFuzz-Tutorial.jpg|right|300px|JBroFuzz Splash Screen]]From the pre-existing information available for JBroFuzz, this tutorial focuses on usage: How to best put a fuzzing tool to good use, either via the UI, or using APIs that ''JBroFuzz.jar'' is constituted of. As a result, this document has a small requirement as a caveat; you need to have a beginner level understanding of the Java programming language in order to understand some sections. &lt;br /&gt;
&lt;br /&gt;
There are a number of working examples described here within, which '''grep''' for statements such as “''&amp;lt;nowiki&amp;gt;public static void main(String[] args)&amp;lt;/nowiki&amp;gt;''”. The majority of the content relates to reviewing these examples and putting the Java syntax into a fuzzing perspective. &lt;br /&gt;
&lt;br /&gt;
To summarise, this tutorial focuses on customary and effective usage of fuzzing through the JBroFuzz Java APIs and the respective UI. It is targeting (without attacking them) web applications. Without further redo, let’s get fuzzing!&lt;br /&gt;
&lt;br /&gt;
== JBroFuzz Basic Functionality  ==&lt;br /&gt;
&lt;br /&gt;
This section carries a number of basic fuzzing examples to get you started with JBroFuzz. Overall, even though the actions performed to not produce any amazing fuzzing results, it serves as a starting point in understanding how to perform particular fuzzing operations on web applications. &lt;br /&gt;
&lt;br /&gt;
=== 'Hello Google!' (forget 'Hello World')  ===&lt;br /&gt;
&lt;br /&gt;
As the traditional first program that you learn when indulging in a new programming language, 'Hello World!' represents the norm for understanding the basic output operations and syntax (let alone compiler and execution behaviour) of the language in question. &lt;br /&gt;
&lt;br /&gt;
As with most web application security related tools, when I am given the responsibility to run them, often in order to understand how they work, I would first craft a legitimate, single request to a trusted (to be up and behaving) popular Internet location. Needless, to say this request more than on occasion finds itself on Google servers. &lt;br /&gt;
&lt;br /&gt;
So 'Hello World!' for programming languages seems to transform to 'Hello Google!' for understanding how web application security related tools work. Let us see, how JBroFuzz does it. &lt;br /&gt;
&lt;br /&gt;
• Double-click on JBroFuzz and browse to the 'Fuzzing' tab &lt;br /&gt;
&lt;br /&gt;
JBroFuzz is constituted of tabs, typically located in the bottom or top (if you bother to change the settings) of the main window. &lt;br /&gt;
&lt;br /&gt;
The 'Fuzzing' tab is where you craft your request message to a particular host. Once that is in place, you can select any part of the request and proceed into adding any number of payloads. We shall see how in later sections. &lt;br /&gt;
&lt;br /&gt;
• In the 'URL' field type: http://www.google.com/ http://www.google.com &lt;br /&gt;
&lt;br /&gt;
Unlike conventional URLs, the URL field in JBroFuzz is only used for the underlying protocol (HTTP or HTTPS), host name (e.g. www.yahoo.com) and (optionally) port number. &lt;br /&gt;
&lt;br /&gt;
All remaining information pasted or typed into the 'URL' field will be ignored; you are expected to enter it in the 'Request' field below. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Still, if you want to just copy-paste a URL from a browser, hit [Ctrl+L] while you are not fuzzing, paste the URL value that you have copied from a browser and JBroFuzz will automatically do the work for you. &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Examples of valid URL values to be put in the &lt;br /&gt;
&lt;br /&gt;
Treat the 'URL' and 'Request' fields as the two stages of a 'telnet' session on port 80; you are effectively using the 'URL' field to specify the equivalent of: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;amp;gt;telnet www.google.com 8088&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
As equivalent to: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;http://www.google.com:8088&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
or in the case of HTTPS: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://www.google.com:8088&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Naturally, default ports for HTTP is 80 and HTTPS is 443. &lt;br /&gt;
&lt;br /&gt;
• In the 'Request' field type: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET / HTTP/1.0&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
And press 'Enter' twice &lt;br /&gt;
&lt;br /&gt;
This is where the body of the message you are sending is to be placed. So anything obeying HTTP/S protocol, such as GET and POST requests, header fields and/or HTML content should be included here. &lt;br /&gt;
&lt;br /&gt;
As part of the process of fuzzing web applications with JBroFuzz you need to have done your homework, in terms of providing a base request message. This message is what will be used later on to add payloads to particular sections of the request. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;• Hit 'Start' [Ctrl+Enter]&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
This will instigate the process of sending a single request to the specified host on a given (or default) port, over HTTP or HTTPS. &lt;br /&gt;
&lt;br /&gt;
Once a connection has been established JBroFuzz will proceed to submit the message you have typed into the 'Request' field. &lt;br /&gt;
&lt;br /&gt;
Finally, JBroFuzz will log all data sent and received into a file; accessing this file is typically a process of double clicking on the output line on the table at the bottom section of the 'Fuzzing' tab. &lt;br /&gt;
&lt;br /&gt;
You should see a response received in the bottom part of the 'Fuzzing' panel. Double click (or right click for more options) to see the information exchanged; typically this would be a 302 redirect pointing you to another location. Congratulations, you have just said &amp;quot;Hello&amp;quot; to Google! &lt;br /&gt;
&lt;br /&gt;
[[Image:002-JBroFuzz-Tutorial.png|500px|JBroFuzz Hello Google!]] &lt;br /&gt;
&lt;br /&gt;
Now this would typically be enough under RFC rules, to get a response back; but damn all the bots out here, most websites require further information to respond back. So, in the 'Request' field let's pretend to be a (kind of) legitimate browser by typing: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET / HTTP/1.0&amp;lt;br&amp;gt; Host: www.google.com&amp;lt;br&amp;gt; User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729) JBroFuzz/1.5&amp;lt;br&amp;gt; Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-gb,en;q=0.5Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Not forgetting to end the request typed with two returns: Press 'Enter' twice. Again, you should be able to see a line added with the response received back. &lt;br /&gt;
&lt;br /&gt;
Practice sending single requests to a website of your choice by changing the URL and also the 'Host:' field from the 'Request' above. Also try accessing an HTTPS website. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Alternatively, you can use the shortcut [Ctrl+L] to type in your URL, with the 'Request' field filled automatically, based on the URL you have typed. &amp;lt;/nowiki&amp;gt; &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== HTTP Version Numbers &amp;amp;amp; www.cia.gov Headerless Responses  ===&lt;br /&gt;
&lt;br /&gt;
For web applications, very often ill-defined requests submitted over the Internet, will trigger semi-legitimate responses that actually do not obey HTTP RFC protocol specification. Often, even though this is not the case in this example, these responses can lead to the identification of one or more security vulnerabilities. &lt;br /&gt;
&lt;br /&gt;
In this example we test for the responses received for invalid HTTP version numbers on a particular website, namely www.cia.gov, over https. Now a word of caution here; please do not attempt to fuzz web applications that you do not have the authority to do so, especially over the Internet. &lt;br /&gt;
&lt;br /&gt;
Still, for the purposes of this tutorial exercise, we will subject a web server to no more than a dozen or so requests. These requests would be otherwise identical, if it was not for the HTTP version number incrementing by a value of 1 on each request. &lt;br /&gt;
&lt;br /&gt;
In terms of having the authority to do so, well this is identical to hitting 'Refresh' in your web browser a dozen or so times, while you are browsing to www.cia.gov. I do not consider this remotely close to any form of hacking, cracking, or proper fuzzing; web servers across the globe receive a lot more abuse than this on a daily basis. &lt;br /&gt;
&lt;br /&gt;
Finally, by the time you are reading this, the particular issue described might have been fixed. So here goes: &lt;br /&gt;
&lt;br /&gt;
• Within JBroFuzz, select: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;File -&amp;amp;gt; Open Location [Ctrl+L]&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Type: https://www.cia.gov and hit enter. This is depicted in the following screenshot: &lt;br /&gt;
&lt;br /&gt;
[[Image:003-JBroFuzz-Tutorial.png|JBroFuzz Open Location]] &lt;br /&gt;
&lt;br /&gt;
Hitting 'Enter' should automatically populate the 'URL' field and the 'Request' field within the 'Fuzzing' tab. What you see is the base request that we intend to add fuzzing payloads to. Before we do so, let us make one small alteration first: &lt;br /&gt;
&lt;br /&gt;
• Modify the first line of the 'Request' field to: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET / HTTP/0.0&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Our objective is to enumerate the supported by the web server (in this case www.cia.gov) HTTP version numbers, following the two digit format that it has. We could be a lot more agressive here and test for buffer overflows and all types of injection; that would be out of line without the authority to do so. Instead we are going to see how JBroFuzz will iterate through the values of 0.0 to 1.4 by means of adding a Fuzzer to our base request. &lt;br /&gt;
&lt;br /&gt;
• Highlight the second zero from the line 'GET / HTTP/0.0' and right-click, selecting 'Add'. This is depicted in the screeshot below: &lt;br /&gt;
&lt;br /&gt;
[[Image:004-JBroFuzz-Tutorial.png|400px|Adding a Fuzzer to the HTTP version number]] &lt;br /&gt;
&lt;br /&gt;
• From the appearing 'Add a Fuzzer' window, select as 'Category Name', in the most left column 'Base' and as 'Fuzzer Name' in the middle column 'Base 10 (Decimal) Alphabet. &lt;br /&gt;
&lt;br /&gt;
• Click on 'Add Fuzzer' on the bottom right of the window &lt;br /&gt;
&lt;br /&gt;
[[Image:005-JBroFuzz-Tutorial.png|400px|Adding a Fuzzer]] &lt;br /&gt;
&lt;br /&gt;
This should add a Fuzzer of length 1 that iterates over the decimal (i.e. base 10) numbers 0 to 9. If we have added a hexadecimal Fuzzer instead of a decimal one (i.e. base 16) the iteration would from 0 to F. If we had selected two digits instead of one and proceeded to add a decimal Fuzzer, the iteration would be from: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;00&amp;lt;br&amp;gt; 01&amp;lt;br&amp;gt; ..&amp;lt;br&amp;gt; 98&amp;lt;br&amp;gt; 99&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
From a User Interface (UI) perspective you should see a line added to the 'Added Payloads Table'. &lt;br /&gt;
&lt;br /&gt;
• Click 'Start' [Ctrl+Enter] &lt;br /&gt;
&lt;br /&gt;
This process will send 10 requests to the specified web server changing only first line of the request to: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET / HTTP/0.0...&amp;lt;br&amp;gt; GET / HTTP/0.1...&amp;lt;br&amp;gt; ...&amp;lt;br&amp;gt; GET / HTTP/0.8...&amp;lt;br&amp;gt; GET / HTTP/0.9...&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
While this is ongoing, you can sort the results by 'No' in the 'Output' table in the bottom of the 'Fuzzing' tab. This should enable you to see what request is currently being transmitted and received in real time. &lt;br /&gt;
&lt;br /&gt;
Once complete, change the first line of the 'Request' field to read: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET / HTTP/1.0&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
• Click 'Start' [Ctrl+Enter] &lt;br /&gt;
&lt;br /&gt;
The resulting output should resemble the following screenshot: &lt;br /&gt;
&lt;br /&gt;
[[Image:006-JBroFuzz-Tutorial.png|500px|JBroFuzz Output from a Fuzzing Session]] &lt;br /&gt;
&lt;br /&gt;
Straight away we can notice a difference in the response size: For HTTP version numbers 0.0 to 0.9 we are getting back what seems fairly big in size responses; 32222 bytes in size worth of responses, given that HTTP protocol version 0.0 to 0.8 do not officially exist! &lt;br /&gt;
&lt;br /&gt;
By double-clicking on one of these requests, we can see that the web server in question is responding back with no headers, yet returning a full HTML body; this represents the 32222 bytes of response of data we are receiving back. The following screenshot illustrates this: &lt;br /&gt;
&lt;br /&gt;
[[Image:007-JBroFuzz-Tutorial.png|300px|JBroFuzz Output for a Single Request/Response]] &lt;br /&gt;
&lt;br /&gt;
Using the 'Graphing' tab we can proceed to graph the particular requests and responses for this given session. &lt;br /&gt;
&lt;br /&gt;
• Within the 'Graphing' tab, click 'Start' [Ctrl+Enter]. &lt;br /&gt;
&lt;br /&gt;
• Select the directory corresponding to the Output folder we have used for this fuzzing session. This will typically be the last one. &lt;br /&gt;
&lt;br /&gt;
• Right-click and select 'Graph' &lt;br /&gt;
&lt;br /&gt;
Once complete, browse to the 'Response Size' tab within the 'Graphing' tab, as illustrated in the screenshot below: &lt;br /&gt;
&lt;br /&gt;
[[Image:008-JBroFuzz-Tutorial.png|300px|JBroFuzz Graphing different 'Response Sizes']] &lt;br /&gt;
&lt;br /&gt;
To re-iterate this does not present a security vulnerability in any shape or form; merely the fact that by manipulating HTTP version numbers as part of the request we transmit, we can impact the response that we get back. In this case, what changes is the non-existent header fields, with some HTML content being received back. &lt;br /&gt;
&lt;br /&gt;
If I was to guess what is causing this, I would say that some sort of load balancing or content delivery is not happening as it should when non-existent version numbers are being transmitted. &lt;br /&gt;
&lt;br /&gt;
== Using JBroFuzz with a Generic Proxy  ==&lt;br /&gt;
&lt;br /&gt;
JBrofuzz 2.0 and subsequent releases include generic proxy support. As of this writing, basic authentication is supported with plans to eventually support NTLM and Kerberos authentication as well. We've tried to make the use of a proxy as straight forward as possible. All arguments for the proxy can be passed in the URL field and will take one of the following forms. &lt;br /&gt;
&amp;lt;pre&amp;gt;Without Authentication: &amp;amp;lt;proxy server&amp;amp;gt;:&amp;amp;lt;proxy port&amp;amp;gt;&lt;br /&gt;
With Authentication: &amp;amp;lt;proxy username&amp;amp;gt;:&amp;amp;lt;proxy password&amp;amp;gt;@&amp;amp;lt;proxy server&amp;amp;gt;:&amp;amp;lt;proxy port&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
The structure of the request field and whether the GET parameter contains an absolute URL depends on the proxy you are using. For this reason, you may have to do a bit of trial and error to determine what format(s) your proxy accepts. To make all of this a bit clearer lets look at a couple of examples. &lt;br /&gt;
&lt;br /&gt;
=== Squid Proxy  ===&lt;br /&gt;
&lt;br /&gt;
In the first example, we are fuzzing through a squid proxy that requires ncsa user authentication as shown in the figure below. When producing similar results, its important that you use your own proxy and not the one shown in the figure. This proxy was setup for demonstration purposes, will not accept connections from your IP address, and the credentials will no longer be active. &lt;br /&gt;
&lt;br /&gt;
[[Image:016-JBroFuzz-Tutorial.jpg|503x449px]] &lt;br /&gt;
&lt;br /&gt;
=== Paros Proxy  ===&lt;br /&gt;
&lt;br /&gt;
In the second example, we are fuzzing through a local Paros proxy running on port 8080 that does not require user authentication. Notice the difference in the syntax of the URL field when user authentication is not required. &lt;br /&gt;
&lt;br /&gt;
[[Image:017-JBroFuzz-Tutorial.jpg|503x449px]] &lt;br /&gt;
&lt;br /&gt;
In the third example, we are still fuzzing through Paros, but notice the slight difference in the Request Field. Specifically, pay special attention to the GET line. We are no longer including the fully qualified path. Unlike Squid, Paros will accept both formats. Keep this in mind when you are performing initial testing with JBroFuzz and the proxy of your choice. &lt;br /&gt;
&lt;br /&gt;
[[Image:018-JBroFuzz-Tutorial.jpg|503x449px]]&lt;br /&gt;
&lt;br /&gt;
=== Burp Proxy  ===&lt;br /&gt;
In the final example, we are fuzzing through Burp. Similar to Squid, Burp requires absolute URLs in the request. A successful Burp request is shown below.&lt;br /&gt;
&lt;br /&gt;
[[Image:019-JBroFuzz-Tutorial.jpg|503x449px]]&lt;br /&gt;
&lt;br /&gt;
== Using JBroFuzz with Paros Proxy ==&lt;br /&gt;
&lt;br /&gt;
JBroFuzz is a standalone fuzzer; it can release and create sockets over HTTP and HTTPS, but in order to use JBroFuzz correctly you will have to know what it is that you are fuzzing. &lt;br /&gt;
&lt;br /&gt;
In comes the need for a proxy tool; the opening versions of JBroFuzz actually had a proxy tab that you could use to intercept traffic generated by your web browser. That functionality got removed in an attempt to focus and deliver solely on the fuzzing capabilities of the tool. &lt;br /&gt;
&lt;br /&gt;
This section details how to use JBroFuzz in combination with a client side proxy. The one selected is Paros Proxy, which, despite the fact that it hasn't been updated since 2006 is still a popular tool that you see in web security testing live CDs. You could use any of the other proxy tools available. &lt;br /&gt;
&lt;br /&gt;
=== Winning on a Remix of the Year Award ===&lt;br /&gt;
&lt;br /&gt;
At 17:53, on a frosty winter evening, a message window popped up: &lt;br /&gt;
&amp;lt;pre&amp;gt;17:53 http://www.localhost.com/remixcontest/club/annual2010.html&lt;br /&gt;
17:53 Hey bro, could you cast in a vote here for the Such &amp;amp;amp; Such Remix?&lt;br /&gt;
17:53 Appreciated!&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
A friend in need is a friend indeed, so here goes I thought. Opening up a web browser configured to work with Paros as an intermediate proxy, allowed for the casting of my vote. while keeping a record of each request and reply. &lt;br /&gt;
&lt;br /&gt;
No registration, or any other form of submitting an identifier was needed. The request that Paros stored for the casting of the actual vote was: &lt;br /&gt;
&amp;lt;pre&amp;gt;GET http://www.localhost.com/remixcontest/club/vote.php?onLoad=%5Btype%20Method%5D&amp;amp;amp;id=55 HTTP/1.1&lt;br /&gt;
Host: www.localhost.com&lt;br /&gt;
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729) Paros/3.2.13&lt;br /&gt;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&lt;br /&gt;
Accept-Language: en-gb,en;q=0.5&lt;br /&gt;
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&lt;br /&gt;
Keep-Alive: 300&lt;br /&gt;
Proxy-Connection: keep-alive&lt;br /&gt;
Cookie: PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Paros Proxy actually places the domain (in this case www.localhost.com) with the protocol (i.e. http) in front of the GET request. As a result, you can't open a telnet/netcat session and just copy-paste the above. Similarly when we bring the request into JBroFuzz, a bit of tweaking is required. &lt;br /&gt;
&lt;br /&gt;
*In the URL field, type:&lt;br /&gt;
&amp;lt;pre&amp;gt;http://www.localhost.com&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
In the Request field, let's keep what is of interest: &lt;br /&gt;
&amp;lt;pre&amp;gt;GET /remixcontest/club/vote.php?onLoad=%5Btype%20Method%5D&amp;amp;amp;id=55 HTTP/1.0&lt;br /&gt;
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5&lt;br /&gt;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&lt;br /&gt;
Accept-Language: en-gb,en;q=0.5&lt;br /&gt;
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&lt;br /&gt;
Cookie: PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
No needs for Keep-Alive and Proxy-Connection. Let's simplify the HTTP request by making it a version 1.0 request and getting rid of the Host header as well. Also on the user agent, let us keep that mainstream vanilla: Firefox on Windows (popular browser combination), getting rid of the .NET and Paros additives. &lt;br /&gt;
&lt;br /&gt;
Checking on the website, our Such &amp;amp;amp; Such remix already has about 100 votes or so and the top remix has approximately 310 votes. Let's fuzz this: &lt;br /&gt;
&lt;br /&gt;
*Select 2 of the digits of the cookie value:&lt;br /&gt;
&amp;lt;pre&amp;gt;PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
*Select: Panel -&amp;amp;gt; Add&lt;br /&gt;
&lt;br /&gt;
*In the &amp;quot;Add a Fuzzer&amp;quot; panel, select:&lt;br /&gt;
&amp;lt;pre&amp;gt;Base -&amp;amp;gt; Base16 (HEX)&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
and select &amp;quot;Add Fuzzer&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
This will add a line within the Payloads tab on the right hand side. &lt;br /&gt;
&lt;br /&gt;
Our cookie value above (PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e) is in lowercase, hexadecimal format. Let's make sure the encoding we select is also that. &lt;br /&gt;
&lt;br /&gt;
Within the Payloads tab, click on the encoding drop down menu and select lowercase. Just before clicking &amp;quot;Start&amp;quot;, JBroFuzz should look something like the screenshot below. &lt;br /&gt;
&lt;br /&gt;
[[Image:014-JBroFuzz-Tutorial.png|Adding Votes by iterating through PHPSESSID cookie values]] &lt;br /&gt;
&lt;br /&gt;
== Performing User Enumeration with a Valid Set of Credentials  ==&lt;br /&gt;
&lt;br /&gt;
Often you encounter an application that allows for the enumeration of one or more pages after a user has been successfully granted a set of session credentials. One of the key areas to test from an application specific perspective, relates to the page(s) that provide user account information. &lt;br /&gt;
&lt;br /&gt;
In the following example, we investigate an ASP.NET 2.0 application with a C# back-end. In this, an authenticated user has the option to select to &amp;quot;View My Profile&amp;quot;. This page provides them with account information (including the typical username, email address, further notes) that they can proceed to update and save to the back-end system. &lt;br /&gt;
&lt;br /&gt;
After a user has authenticated, the following URL, gives them access to their profile information stored on the database: &lt;br /&gt;
&amp;lt;pre&amp;gt;http://www.myattackingdomain.com/portal-location/UserInfo.aspx?UserID=23&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Simple investigation confirms that the digits allowed as part of the UserID value are decimal numbers only. Lets feed that information into JBroFuzz. &lt;br /&gt;
&lt;br /&gt;
=== Fuzzing a User ID ===&lt;br /&gt;
&lt;br /&gt;
• Within JBroFuzz, select: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;File -&amp;amp;gt; Open Location [Ctrl+L]&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Type: http://www.myattackingdomain.com/portal-location/UserInfo.aspx?UserID=23 and hit enter. This is depicted in the following screenshot: &lt;br /&gt;
&lt;br /&gt;
[[Image:009-JBroFuzz-Tutorial.png|300px|JBroFuzz 'GET' Request with a 'UserID' parameter]] &lt;br /&gt;
&lt;br /&gt;
From the URL the important parameter is the value of the UserID query string (the value 23, above). We want to fuzz that. &lt;br /&gt;
&lt;br /&gt;
• Within the Fuzzing Tab, in the &amp;quot;Request&amp;quot; text area, highlight the above number 23 • Right-click and select &amp;quot;Add&amp;quot; &lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Add a Fuzzer&amp;quot; window that appears, select: &lt;br /&gt;
&lt;br /&gt;
• Category Name: &amp;lt;code&amp;gt;Base&amp;lt;/code&amp;gt; • Fuzzer Name: &amp;lt;code&amp;gt;Base10 (DEC)&amp;lt;/code&amp;gt; • Select &amp;quot;Add Fuzzer&amp;quot; in the bottom right &lt;br /&gt;
&lt;br /&gt;
This would have added a decimal (base 10 fuzzer) of length 2 onto the location. &lt;br /&gt;
&lt;br /&gt;
• You will see a row added within the &amp;quot;Added Fuzzers Table&amp;quot; of the Fuzzing panel. • Click &amp;quot;Start&amp;quot; &amp;lt;code&amp;gt;Ctrl+Enter&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
This will transmit 100 requests to the domain in question, which in this case is assumed: www.myattackingdomain.com. The value being changed within each request will be: &lt;br /&gt;
&amp;lt;pre&amp;gt;• GET /portal-location/UserInfo.aspx?UserID=00 HTTP/1.0&lt;br /&gt;
• GET /portal-location/UserInfo.aspx?UserID=01 HTTP/1.0&lt;br /&gt;
...&lt;br /&gt;
• GET /portal-location/UserInfo.aspx?UserID=98 HTTP/1.0&lt;br /&gt;
• GET /portal-location/UserInfo.aspx?UserID=99 HTTP/1.0&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Done. Let's proceed to graph the responses that we have obtained. Our objective is to understand which two-digit numbers from 00 to 99 correspond to valid user accounts. &lt;br /&gt;
&lt;br /&gt;
=== Graphing Results ===&lt;br /&gt;
&lt;br /&gt;
• Within the &amp;quot;Graphing&amp;quot; tab, click &amp;quot;Start&amp;quot; &amp;lt;code&amp;gt;Ctrl+Enter&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A list of directories will appear on the left-hand side. If you scroll to the bottom of the list you should see the directory corresponding to your fuzzing session, in our case it was (175 2009-06-24 16-18-24) &lt;br /&gt;
&amp;lt;pre&amp;gt;• Right-click on (175 2009-06-24 16-18-24)&lt;br /&gt;
• Click &amp;quot;Graph&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This will generate the graphs in their respective tabs. The question now becomes which graph is of interest for our user enumeration exercise. &lt;br /&gt;
&lt;br /&gt;
By definition enumerating users against an ID value, or any other identifier involves being able to obtain a different response for an existing user to that of a user that is not have a corresponding ID value. &lt;br /&gt;
&lt;br /&gt;
Thus, from the metrics available, the one useful for enumerating users will be that of measuring the &amp;quot;Hamming Distance&amp;quot; between responses received. Based on the JBroFuzz documentation: &lt;br /&gt;
&lt;br /&gt;
'''Fuzzing Hamming Distance ''' &lt;br /&gt;
&amp;lt;pre&amp;gt;A bar chart with the hamming distance of the characters in the response, &lt;br /&gt;
relative to the first response received. Check each character of the first&lt;br /&gt;
response received, against the character at the same position of the&lt;br /&gt;
current response received. If they are not identical, increment the &lt;br /&gt;
hamming distance.&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
As we can see the Fuzzing Hamming Distance (FHD) varies quite a bit from the definition of the normal hamming distance term, used in telecommunications. Still, they share a lot of similarities. &lt;br /&gt;
&lt;br /&gt;
As we can from the above, the first request is critical to calibrating our user enumeration exercise. It represents the value that all other Fuzzing Hamming Distances (FHD) will be measured and normalised towards. For the java-skilled audience, the algorithm is quite trivial, but offers spectacular results in distinguishing responses: &lt;br /&gt;
&amp;lt;pre&amp;gt;in = new BufferedReader(new FileReader(f));&lt;br /&gt;
   58 &lt;br /&gt;
   59 			int counter = 0;&lt;br /&gt;
   60 			int check = 0;&lt;br /&gt;
   61 			int c;&lt;br /&gt;
   62 			while (((c = in.read()) &amp;amp;gt; 0) &amp;amp;amp;&amp;amp;amp; (counter &amp;amp;lt; MAX_CHARS)) {&lt;br /&gt;
   63 &lt;br /&gt;
   64 				// If we are passed &amp;quot;--jbrofuzz--&amp;amp;gt;\n&amp;quot; in the file&lt;br /&gt;
   65 				if (check == END_SIGNATURE.length()) {&lt;br /&gt;
   66 &lt;br /&gt;
   67 					firstSet.append((char) c);&lt;br /&gt;
   68 &lt;br /&gt;
   69 				}&lt;br /&gt;
   70 				// Else find &amp;quot;--jbrofuzz--&amp;amp;gt;\n&amp;quot; using a counter&lt;br /&gt;
   71 				else {&lt;br /&gt;
   72 					// Increment the counter for each success&lt;br /&gt;
   73 					if (c == END_SIGNATURE.charAt(check)) {&lt;br /&gt;
   74 						check++;&lt;br /&gt;
   75 					} else {&lt;br /&gt;
   76 						check = 0;&lt;br /&gt;
   77 					}&lt;br /&gt;
   78 				}&lt;br /&gt;
   79 &lt;br /&gt;
   80 				counter++;&lt;br /&gt;
   81 &lt;br /&gt;
   82 			}&lt;br /&gt;
   83 			in.close();&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Ergo, the corresponding graph is depicted in the screenshot below. The peak graphs correspond to number that if you hover the mouse over will give you the enumeration ID of a valid user. &lt;br /&gt;
&lt;br /&gt;
[[Image:015-JBroFuzz-Tutorial.png|500px|Measuring Hamming Distance for User Enumeration]] &lt;br /&gt;
&lt;br /&gt;
== Eliminating False Positives: LDAP Injection ==&lt;br /&gt;
&lt;br /&gt;
Every now and then a tool (that does not produce false positives) will hit an application reporting back a huge variety of (hopefully not confirmed, but pending further investigation) injection findings. &lt;br /&gt;
&lt;br /&gt;
Due to the limited number of characters required in performing LDAP Injection, such issues will be high on that list. But let's refresh our memory a bit of how LDAP injection works:&lt;br /&gt;
&lt;br /&gt;
http://www.owasp.org/index.php/LDAP_injection&lt;br /&gt;
&lt;br /&gt;
So typically, during an automated scan, negating LDAP cn-type queries would be submitted and their responses noted. Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /myfilelocation.jsp?lang=en&amp;amp;city=user)(sn=*&amp;amp;rid=97 HTTP/1.1&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
vs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /myfilelocation.jsp?lang=en&amp;amp;city=user)!(sn=*&amp;amp;rid=97 HTTP/1.1&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /myfilelocation.jsp?lang=en&amp;amp;city=admin*)((|userpassword=*)&amp;amp;rid=97 HTTP/1.1&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As great as this check might be from an LDAP perspective, it has a high likelihood of generating false positives, due to the character sets being used. Ergo, a protection mechanism (silly worst-case blacklist present for example) would typically hunt down cross-site scripting and sql injection type of characters:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt; &amp;gt; ' etc.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Not considering =, *, or brackets as completely bad (he says). &lt;br /&gt;
&lt;br /&gt;
=== What characters are allowed through? ===&lt;br /&gt;
&lt;br /&gt;
Enough of all that; we want to know what responses are allowed back and what's different about them for all characters being filtered through a black-list.&lt;br /&gt;
&lt;br /&gt;
Let's transform the above GET into the following and proceed to add a single fuzzer that tells us that:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /myfilelocation.jsp?lang=en&amp;amp;city=X&amp;amp;rid=97 HTTP/1.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now in the position of the X character, proceed to add an ASCII 94 Alphabet Fuzzer (available in version 2.1 and above). This will check the responses for all characters which are printable ASCII, with the exception of space.&lt;br /&gt;
&lt;br /&gt;
In total there are 95 printable ASCII characters; minus the one present for space (yes, the one you hit all the time, every day) leaves 94. This fuzzer produces each of those values, in incrementing ASCII order.&lt;br /&gt;
&lt;br /&gt;
[[Image:020-JBroFuzz-Tutorial.png|500px|Measuring Size Length for Single Character ASCII 94 Fuzzing]] &lt;br /&gt;
&lt;br /&gt;
Based on the above graph, the following responses trigger a different response size. Thus the characters blocked by a black-list are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
! &amp;quot; , &amp;lt; &amp;gt; @ [ \ ] ^ ` { | } ~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interesting. Know any payloads that can evade those?&lt;br /&gt;
:)&lt;br /&gt;
&lt;br /&gt;
== JBroFuzz Development Corner  ==&lt;br /&gt;
&lt;br /&gt;
This section presents how to setup and use JBroFuzz as a fuzzing library. Also, it offers an insight in how to setup and compile your own version of JBroFuzz. As different people have different levels of expertise of the java programming language, eclipse, ant and subversion, some of the steps presented herein might be considered basic by advanced developers. &lt;br /&gt;
&lt;br /&gt;
=== Setting up a JBroFuzz Development Environment ===&lt;br /&gt;
&lt;br /&gt;
This section guides you towards setting up a development environment for JBroFuzz. Despite the Operating System (O/S) being windows XP, a similar process can be followed in a number of other O/S. &lt;br /&gt;
&lt;br /&gt;
You will need to have installed: &lt;br /&gt;
&lt;br /&gt;
*Tortoise SVN (using TortoiseSVN-1.6.6.17493-win32-svn-1.6.6.msi) &lt;br /&gt;
*Eclipse Java (using eclipse-java-galileo-SR1-win32.zip)&lt;br /&gt;
&lt;br /&gt;
Optionally, if you don't like building your application through eclipse you could also require to install Apache Ant. &lt;br /&gt;
&lt;br /&gt;
==== Step 1: Obtain the source code ====&lt;br /&gt;
&lt;br /&gt;
JBroFuzz uses SubVersion with the repository being publicly available for download through anonymous access on sourceforge. There is a plan to move it the source to the OWASP Git repository, but until then, use the guidelines below. &lt;br /&gt;
&lt;br /&gt;
[[Image:010-JBroFuzz-Tutorial.png|Tortoise SVN Check out JBroFuzz Source Code]] &lt;br /&gt;
&lt;br /&gt;
Right click on the folder location where you want to download the source code and select: &lt;br /&gt;
&lt;br /&gt;
*SVN Checkout&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;URL of repository&amp;quot;, enter: &lt;br /&gt;
&amp;lt;pre&amp;gt;https://jbrofuzz.svn.sourceforge.net/svnroot/jbrofuzz&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
In the &amp;quot;Checkout directory&amp;quot;, enter the folder location of your choice, in this case: &lt;br /&gt;
&amp;lt;pre&amp;gt;C:\root\code\jbrofuzz&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
In the &amp;quot;Checkout Depth&amp;quot; select: &lt;br /&gt;
&lt;br /&gt;
*Fully recursive&lt;br /&gt;
&lt;br /&gt;
Untick &amp;quot;Omit Externals&amp;quot; (should be unticked by default) &lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Revision&amp;quot; select: &lt;br /&gt;
&lt;br /&gt;
*&amp;quot;Head revision&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Select OK. &lt;br /&gt;
&lt;br /&gt;
This process, once complete will checkout the entirety of the JBroFuzz source code from the SVN repository on sourceforge. &lt;br /&gt;
&lt;br /&gt;
==== Step 2: Configuring a JBroFuzz Project within Eclipse ====&lt;br /&gt;
&lt;br /&gt;
Having obtained the latest copy of the source code, the next step entails importing that source code within the Eclipse IDE. &lt;br /&gt;
&lt;br /&gt;
Within Eclipse, select: &lt;br /&gt;
&amp;lt;pre&amp;gt;File -&amp;amp;gt; New -&amp;amp;gt; Other&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
From the &amp;quot;New&amp;quot; panel that appears, select: &lt;br /&gt;
&amp;lt;pre&amp;gt;Java -&amp;amp;gt; Java Project from Existig Ant Buildfile&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
[[Image:011-JBroFuzz-Tutorial.png|Import JBroFuzz Code into Eclipse from Ant File]] &lt;br /&gt;
&lt;br /&gt;
Select &amp;quot;Next&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
In the next menu, under &amp;quot;Ant buildfile&amp;quot;, select &amp;quot;Browse&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Browse to the location where you have just (step 1) downloaded the source code and select the following file: &lt;br /&gt;
&lt;br /&gt;
*build.xml&lt;br /&gt;
&lt;br /&gt;
The build.xml file is an Ant build file that JBroFuzz uses. &lt;br /&gt;
&lt;br /&gt;
[[Image:012-JBroFuzz-Tutorial.png|Select the Ant File]] &lt;br /&gt;
&lt;br /&gt;
Selecting that file should have populated the &amp;quot;Project name&amp;quot; as jbrofuzz and also given you: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;javac&amp;quot; task found in target &amp;quot;compile&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
MAKE SURE TO TICK: &lt;br /&gt;
&lt;br /&gt;
*&amp;quot;Link to the buildfile in the filesystem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise eclipse will try to replicate the source code within your workspace and that makes the process a tiny bit more complicated when it comes to actually building JBroFuzz. &lt;br /&gt;
&lt;br /&gt;
Click &amp;quot;Finish&amp;quot; &lt;br /&gt;
&lt;br /&gt;
You will see the item &amp;quot;Building workspace (76%) on the bottom right hand side of Eclipse. Once that is complete, you should see the jbrofuzz project on the top left corner of the Package Explorer within Eclipse. &lt;br /&gt;
&lt;br /&gt;
==== Step 3: Building JBroFuzz ====&lt;br /&gt;
&lt;br /&gt;
Within the Package Explorer, expand the jbrofuzz project and double-click on the build.xml file. &lt;br /&gt;
&lt;br /&gt;
Right click on the &amp;quot;build [default]&amp;quot; task within the &amp;quot;Outline&amp;quot; window (typically seen on the right hand side) and select: &lt;br /&gt;
&amp;lt;pre&amp;gt;Run As -&amp;amp;gt; 1. Ant Build [Alt+Shift+X, Q]&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
If the build has been successful, a JBroFuzz.jar file within the the /jar folder would have been created. Following the path conventions above that should be in: &lt;br /&gt;
&amp;lt;pre&amp;gt;C:\root\code\jbrofuzz\jar\JBroFuzz.jar&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
[[Image:013-JBroFuzz-Tutorial.png|Building JBroFuzz within Eclipse]] &lt;br /&gt;
&lt;br /&gt;
=== How to Use JBroFuzz as a Fuzzing Library ===&lt;br /&gt;
&lt;br /&gt;
Quite often what you need to do in terms of fuzzing, far exceeds the User Interface (UI) of JBroFuzz. For this reason, a set of core fuzzing APIs have been made available that can be used for more advanced fuzzing scenarios. &lt;br /&gt;
&lt;br /&gt;
The JBroFuzz.jar standalone archive (made available with every release) carries a core fuzzing library that holds a number of key classes. These are located under: &lt;br /&gt;
&amp;lt;pre&amp;gt;org.owasp.jbrofuzz.core.*;&lt;br /&gt;
-Database.java&lt;br /&gt;
-Fuzzer.java&lt;br /&gt;
-FuzzerBigInteger.java&lt;br /&gt;
-NoSuchFuzzerException.java&lt;br /&gt;
-Prototype.java&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
The class of importance is Fuzzer.java. If you are going to use recursive iterators of great length, there is also FuzzerBigInteger.java. The difference between the two is that Fuzzer.java uses the primitive java data type long (up to 16^16 values) while FuzzerBigInteger.java uses java BigInteger to perform the counting. Naturally, the class FuzzerBigInteger is slower and takes more memory than the Fuzzer class. &lt;br /&gt;
&lt;br /&gt;
Within JBroFuzz a Fuzzer is an instance of a java Iterator. This implies that values can be accessed by simply calling the &amp;lt;code&amp;gt;next()&amp;lt;/code&amp;gt; method once an object has been made available. Typically, a call to &amp;lt;code&amp;gt;hasNext()&amp;lt;/code&amp;gt; should also be performed prior to avoid an exception being thrown. &lt;br /&gt;
&lt;br /&gt;
A Fuzzer can be obtained from the factory method &amp;lt;code&amp;gt;createFuzzer(String, int);&amp;lt;/code&amp;gt; available for every instance of the fuzzing Database. Ergo: &lt;br /&gt;
&lt;br /&gt;
==== A HelloFuzzer Example ====&lt;br /&gt;
&amp;lt;pre&amp;gt;Database myDatabase = new Database();&lt;br /&gt;
&lt;br /&gt;
Fuzzer myFuzzer = myDatabase.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 5);&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
So how do I use the API? Here is a simple HelloFuzzer (file called HelloFuzzer.java) example: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(Fuzzer f = fuzzDB.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 4); f.hasNext();) {&lt;br /&gt;
       // Get the next payload value...&lt;br /&gt;
       System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloFuzzer.java OWASP JBroFuzz Example 1&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
To compile the above use: &lt;br /&gt;
&amp;lt;pre&amp;gt;javac -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar&amp;quot; HelloFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This assumes that you are currently inside the directory where HelloFuzzer.java resides and that the JBroFuzz.jar is located two directories within your current location i.e. in jbrofuzz/jar. In order to run the above compiled HelloFuzzer class issue: &lt;br /&gt;
&amp;lt;pre&amp;gt;java -cp &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Note: The above 2 commands have been crafted in a win32 environment. The process for compiling and running HelloFuzzer.java above is the same in *nix machines. Simply replace the backslash &amp;quot;\&amp;quot; with &amp;quot;/&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
==== Fuzzing Payload Definitions ====&lt;br /&gt;
&lt;br /&gt;
Within the JBroFuzz.jar file, there is a file called fuzzers.jbrf that carries all the fuzzer definitions that you see in the UI payloads tab of JBroFuzz. To view a latest copy of this file you can browse the SVN repository of JBroFuzz: &lt;br /&gt;
&amp;lt;pre&amp;gt;http://jbrofuzz.svn.sourceforge.net/viewvc/jbrofuzz/tar/fuzzers.jbrf?view=log&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
A note here worth mentioning: Files ending in .jbrofuzz are session files saved by users while performing fuzzing operations. Files ending in .jbrf are JBroFuzz system files. Typical examples of .jbrf files are headers.jbrf, as well as fuzzers.jbrf. Both these use an internal proprietary format not to be confused with the .jbrofuzz file format. &lt;br /&gt;
&lt;br /&gt;
Fuzzers belong in categories (1 to many) and each fuzzer carries a set of payloads that define the alphabet of the fuzzer. &lt;br /&gt;
&lt;br /&gt;
Also, you have replacive and recursive fuzzers, zero fuzzers, etc. There are a number of different fuzzer categories. As an example of a fuzzer within the fuzzers.jbrf file, consider the hexadecimal fuzzer: &lt;br /&gt;
&amp;lt;pre&amp;gt;Fuzzer Name: Base16 (HEX)&lt;br /&gt;
Fuzzer Type: Recursive&lt;br /&gt;
Fuzzer Id:   031-B16-HEX&lt;br /&gt;
&lt;br /&gt;
Total Number of Payloads: 16&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Within the fuzzers.jbrf file this fuzzer is defined in plain-text format as follows: &lt;br /&gt;
&amp;lt;pre&amp;gt;R:031-B16-HEX:Base16 (HEX):16&lt;br /&gt;
&amp;amp;gt; Number Systems | Base | Recursive Fuzzers&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
a&lt;br /&gt;
b&lt;br /&gt;
c&lt;br /&gt;
d&lt;br /&gt;
e&lt;br /&gt;
f&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; There is very little preventing you from defining your own fuzzers within this file, by following the file format specified above. You can use the UI to see if they have been loaded successfully. &lt;br /&gt;
&lt;br /&gt;
Further to recursive and replacive fuzzers you also have zero fuzzers (i.e. a zero fuzzer of 1000 will just transmit 1000 requests as they are, without adding any payloads) double fuzzers, cross product fuzzers, etc. &lt;br /&gt;
&lt;br /&gt;
Notice the factory method Database.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 4) yielding: &amp;quot;I want a 4 digit recursive fuzzer (why because NUM-HEX is recursive in its definition, starts with R: instead of P:) of HEX digits.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Thus the above scenario would iterate through all the digits from 0000 to ffff. I wouldn't recommend using the above scenario for such trivial fuzzing capabilities; simply presented as an example of the inner workings of JBroFuzz.jar &lt;br /&gt;
&lt;br /&gt;
==== HelloFuzzer Refined ====&lt;br /&gt;
&lt;br /&gt;
A more detailed code breakdown of the above HelloFuzzer example can be found below: &lt;br /&gt;
&amp;lt;pre&amp;gt;/**&lt;br /&gt;
 * JBroFuzz API Examples 01&lt;br /&gt;
 *&lt;br /&gt;
 * JBroFuzz - A stateless network protocol fuzzer for web applications.&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (C) 2007, 2008, 2009 subere@uncon.org&lt;br /&gt;
 *&lt;br /&gt;
 * This file is part of the JBroFuzz API examples on how to use the &lt;br /&gt;
 * fuzzer libraries included in JBroFuzz.jar.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is free software: you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 * &lt;br /&gt;
 * You should have received a copy of the GNU General Public License&lt;br /&gt;
 * along with JBroFuzz.  If not, see &amp;amp;lt;http://www.gnu.org/licenses/&amp;amp;gt;.&lt;br /&gt;
 * Alternatively, write to the Free Software Foundation, Inc., 51 &lt;br /&gt;
 * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.&lt;br /&gt;
 * &lt;br /&gt;
 * Verbatim copying and distribution of this entire program file is &lt;br /&gt;
 * permitted in any medium without royalty provided this notice &lt;br /&gt;
 * is preserved. &lt;br /&gt;
 * &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import org.owasp.jbrofuzz.core.NoSuchFuzzerException;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Database;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Fuzzer; &lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;In JBroFuzz a Fuzzer is a java Iterator.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;In order to create a Fuzzer, use the factory method&lt;br /&gt;
 * Database.createFuzzer(String, int), passing as arguments&lt;br /&gt;
 * the Fuzzer ID and the specified length as a positive int.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;Be careful to check that the fuzzer ID (labelled as f_ID)&lt;br /&gt;
 * is actually an existing ID from the Database of Fuzzers.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;Expected Output:&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &amp;amp;lt;code&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: 00000&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: 00001&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  ...&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  (a total of 16^5 = 1048576 lines)&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  ...&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: ffffd&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: ffffe&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: fffff&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 * &amp;amp;lt;/code&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;For more information on the Database of Fuzzers, see the&lt;br /&gt;
 * HelloDatabase Class.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * @author subere@uncon.org&lt;br /&gt;
 * @version n/a&lt;br /&gt;
 */&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param args&lt;br /&gt;
	 */&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
		// You have to construct an instance of the fuzzers database&lt;br /&gt;
		Database fuzzDB = new Database();&lt;br /&gt;
		// You have to supply a valid fuzzer ID&lt;br /&gt;
		String f_ID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
		// You have to supply a (+)tive int&lt;br /&gt;
		int f_len = 5;&lt;br /&gt;
		&lt;br /&gt;
		try {&lt;br /&gt;
			&lt;br /&gt;
			for(Fuzzer f = fuzzDB.createFuzzer(f_ID, f_len); f.hasNext();) {&lt;br /&gt;
				&lt;br /&gt;
				// Get the next payload value...&lt;br /&gt;
				System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		} catch (NoSuchFuzzerException e) {&lt;br /&gt;
			&lt;br /&gt;
			System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
==== Hello Database of Fuzzers ====&lt;br /&gt;
&lt;br /&gt;
Having seen how to access a single Fuzzer through the createFuzzer() method available in the Database object. The next question that comes naturally is what are the Fuzzers that are available by default in JBroFuzz? &lt;br /&gt;
&lt;br /&gt;
To answer that, this example focuses more on the database component that we previously initialised, investigating the list of available methods that it offers. &lt;br /&gt;
&lt;br /&gt;
In JBroFuzz, all Fuzzers are stored in a Database object that you will be required to construct in order to access them. &lt;br /&gt;
&amp;lt;pre&amp;gt;/**&lt;br /&gt;
 * JBroFuzz API Examples 02&lt;br /&gt;
 *&lt;br /&gt;
 * JBroFuzz - A stateless network protocol fuzzer for web applications.&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (C) 2007, 2008, 2009 subere@uncon.org&lt;br /&gt;
 *&lt;br /&gt;
 * This file is part of the JBroFuzz API examples on how to use the &lt;br /&gt;
 * fuzzer libraries included in JBroFuzz.jar.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is free software: you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 * &lt;br /&gt;
 * You should have received a copy of the GNU General Public License&lt;br /&gt;
 * along with JBroFuzz.  If not, see &amp;amp;lt;http://www.gnu.org/licenses/&amp;amp;gt;.&lt;br /&gt;
 * Alternatively, write to the Free Software Foundation, Inc., 51 &lt;br /&gt;
 * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.&lt;br /&gt;
 * &lt;br /&gt;
 * Verbatim copying and distribution of this entire program file is &lt;br /&gt;
 * permitted in any medium without royalty provided this notice &lt;br /&gt;
 * is preserved. &lt;br /&gt;
 * &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import org.owasp.jbrofuzz.core.NoSuchFuzzerException;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Database;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Fuzzer; &lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;In JBroFuzz all Fuzzers are stored in a Database&lt;br /&gt;
 * object that you will be required to construct in order&lt;br /&gt;
 * to access them.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;Within the Database, each Fuzzer is a collection of &lt;br /&gt;
 * payloads, which carries a unique ID string value.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;Example ID values are the output of this program:&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &amp;amp;lt;code&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer ID is: 013-LDP-INJ&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	The name of the fuzzer is:			LDAP Injection&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	The id of the fuzzer is:			013-LDP-INJ&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	The of payloads it carries (it's alphabet) is:	20&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	It has as 1st payload:&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *		|&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer ID is: 018-XSS-4IE&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	The name of the fuzzer is:			XSS IE&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	The id of the fuzzer is:			018-XSS-4IE&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	The of payloads it carries (it's alphabet) is:	38&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	It has as 1st payload:&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *		&amp;amp;lt; img src=`x` onrerror= `&amp;amp;nbsp;;; alert(1) ` /&amp;amp;gt;&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * &amp;amp;lt;/code&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;Do not be confused between Prototypes and Fuzzers; &lt;br /&gt;
 * JBroFuzz uses Prototype objects to construct the Fuzzers&lt;br /&gt;
 * that get added into the Database upon initialisation.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;As a result, the getter methods available within a Database&lt;br /&gt;
 * object can carry the name of getAllPrototypeIDs and &lt;br /&gt;
 * getAllFuzzerIDs interchangebly.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * @author subere@uncon.org&lt;br /&gt;
 * @version n/a&lt;br /&gt;
 */&lt;br /&gt;
public class HelloDatabase {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param args&lt;br /&gt;
	 */&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
		// You have to construct an instance of the fuzzers database&lt;br /&gt;
		Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
		// Get a list of all the fuzzer IDs from the database&lt;br /&gt;
		String[] fuzzer_IDs = fuzzDB.getAllPrototypeIDs();&lt;br /&gt;
		&lt;br /&gt;
		System.out.println(&amp;quot;The fuzzer IDs found are:&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		for(String fuzzerID&amp;amp;nbsp;: fuzzer_IDs) {&lt;br /&gt;
			&lt;br /&gt;
			System.out.println(&amp;quot;The fuzzer ID is: &amp;quot; + fuzzerID);&lt;br /&gt;
			&lt;br /&gt;
			// We pass of length of 1, irrelevant if we are&lt;br /&gt;
			// just going to access the first payload&lt;br /&gt;
			// of the fuzzer&lt;br /&gt;
			Fuzzer fuzzer;&lt;br /&gt;
			try {&lt;br /&gt;
				&lt;br /&gt;
				fuzzer = fuzzDB.createFuzzer(fuzzerID, 1);&lt;br /&gt;
				// Normally you should check for fuzzer.hasNext()				&lt;br /&gt;
				String payload = fuzzer.next();&lt;br /&gt;
				&lt;br /&gt;
				System.out.println(&amp;quot;\tThe name of the fuzzer is:\t\t\t&amp;quot; + fuzzer.getName() );&lt;br /&gt;
				System.out.println(&amp;quot;\tThe id of the fuzzer is:\t\t\t&amp;quot; + fuzzer.getId() );&lt;br /&gt;
				System.out.println(&amp;quot;\tThe of payloads it carries (it's alphabet) is:\t&amp;quot; + fuzzDB.getSize(fuzzerID));&lt;br /&gt;
				System.out.println(&amp;quot;\tIt has as 1st payload:\n\t\t&amp;quot; + payload );&lt;br /&gt;
&lt;br /&gt;
			} catch (NoSuchFuzzerException e) {&lt;br /&gt;
				System.out.println(&amp;quot;Could not find the specified fuzzer!&amp;quot;);&lt;br /&gt;
				System.out.println(&amp;quot;Going to print all the fuzzer IDs I know:&amp;quot;);&lt;br /&gt;
				// old vs new for loop&amp;amp;nbsp;:)&lt;br /&gt;
				// in case of an error, print just the &lt;br /&gt;
				// fuzzer IDs, accessed from the DB&lt;br /&gt;
				for(int j = 0; j &amp;amp;lt; fuzzer_IDs.length; j++) {&lt;br /&gt;
					System.out.println(&amp;quot;The fuzzer ID is: &amp;quot; + fuzzer_IDs[j]);&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
==== Methods available within the Fuzzer Class ====&lt;br /&gt;
&lt;br /&gt;
A final example of this section, involves seeing the usage of all the method calls available in the Fuzzer.java class &lt;br /&gt;
&amp;lt;pre&amp;gt;/**&lt;br /&gt;
 * JBroFuzz API Examples 03&lt;br /&gt;
 *&lt;br /&gt;
 * JBroFuzz - A stateless network protocol fuzzer for web applications.&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (C) 2007, 2008, 2009 subere@uncon.org&lt;br /&gt;
 *&lt;br /&gt;
 * This file is part of the JBroFuzz API examples on how to use the &lt;br /&gt;
 * fuzzer libraries included in JBroFuzz.jar.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is free software: you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 * &lt;br /&gt;
 * You should have received a copy of the GNU General Public License&lt;br /&gt;
 * along with JBroFuzz.  If not, see &amp;amp;lt;http://www.gnu.org/licenses/&amp;amp;gt;.&lt;br /&gt;
 * Alternatively, write to the Free Software Foundation, Inc., 51 &lt;br /&gt;
 * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.&lt;br /&gt;
 * &lt;br /&gt;
 * Verbatim copying and distribution of this entire program file is &lt;br /&gt;
 * permitted in any medium without royalty provided this notice &lt;br /&gt;
 * is preserved. &lt;br /&gt;
 * &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import org.owasp.jbrofuzz.core.NoSuchFuzzerException;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Database;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Fuzzer; &lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;Example iterating through all the methods available&lt;br /&gt;
 * in the Fuzzer Object and their respective outputs.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * @author subere@uncon.org&lt;br /&gt;
 * @version n/a&lt;br /&gt;
 */&lt;br /&gt;
public class IndigoFuzzerTests {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param args&lt;br /&gt;
	 */&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
		// You have to construct an instance of the fuzzers database&lt;br /&gt;
		Database fuzzDB = new Database();&lt;br /&gt;
		// You have to supply a valid fuzzer ID&lt;br /&gt;
		String f_ID = &amp;quot;033-B08-OCT&amp;quot;;&lt;br /&gt;
		// You have to supply a (+)tive int&lt;br /&gt;
		int f_len = 5;&lt;br /&gt;
&lt;br /&gt;
		try {&lt;br /&gt;
			&lt;br /&gt;
			Fuzzer f = fuzzDB.createFuzzer(f_ID, f_len);&lt;br /&gt;
&lt;br /&gt;
			while(f.hasNext()) {&lt;br /&gt;
				&lt;br /&gt;
				// Could do this via reflection, but..&lt;br /&gt;
				f.next();&lt;br /&gt;
				// System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
				System.out.println(&amp;quot; The maximum value is: &amp;quot; + f.getMaximumValue());&lt;br /&gt;
&lt;br /&gt;
				System.out.println(&amp;quot; The current value is: &amp;quot; + f.getCurrectValue());&lt;br /&gt;
				&lt;br /&gt;
&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		} catch (NoSuchFuzzerException e) {&lt;br /&gt;
			&lt;br /&gt;
			System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
=== Advanced Fuzzing with the JBroFuzz Library ===&lt;br /&gt;
&lt;br /&gt;
This section covers more advanced APIs that are available under the '''org.owasp.jbrofuzz.core package'''. It should be noted that some of these classes and their corresponding functionality are not used by the JBroFuzz program application. Instead, they are made available for incorporation into other java code that you have perhaps written that requires more specialized type of fuzzing. &lt;br /&gt;
&lt;br /&gt;
==== Fuzzing Really Long Values with Big Integer ====&lt;br /&gt;
&lt;br /&gt;
As stated previously, within JBroFuzz a Fuzzer is a java Iterator. This implies that while fuzzing, we typically keep track of a counter representing the value that we are currently on. Consider the example of HelloFuzzer.java, above: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(Fuzzer f = fuzzDB.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 4); f.hasNext();) {&lt;br /&gt;
       // Get the next payload value...&lt;br /&gt;
       System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloFuzzer.java OWASP JBroFuzz Example 1&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
If we compile this program: &lt;br /&gt;
&amp;lt;pre&amp;gt;javac -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar&amp;quot; HelloFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
and run it: &lt;br /&gt;
&amp;lt;pre&amp;gt;java -cp &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
We are going to see output similar to: &lt;br /&gt;
&amp;lt;pre&amp;gt; The fuzzer payload is: 0000&lt;br /&gt;
 ... (output omitted)&lt;br /&gt;
 The fuzzer payload is: fffd&lt;br /&gt;
 The fuzzer payload is: fffe&lt;br /&gt;
 The fuzzer payload is: ffff&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Now what if we want a hexadecimal fuzzer of length not 4, but, say, 24. Let's try compile and run the above program with a length of 24. Changing the line to: &lt;br /&gt;
&amp;lt;pre&amp;gt;     for(Fuzzer f = fuzzDB.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 24); f.hasNext();) {&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Running this modified version of HelloFuzzer.java, yields: &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;gt;javac -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer.java&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt;java -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Nothing! What is actually happening is JBroFuzz is figuring out that the specified length of the Fuzzer we are about to create is far greater than that of the long java data type. As a result, the Fuzzer is not even entering the iteration mode that is typically expected with methods next() and hasNext(). &lt;br /&gt;
&lt;br /&gt;
That's all great, but we still want a hexadecimal fuzzer, 24 digits long going from: &lt;br /&gt;
&amp;lt;pre&amp;gt;000000000000000000000000&lt;br /&gt;
...to...&lt;br /&gt;
ffffffffffffffffffffffff&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
For this JBroFuzz offers another type of Fuzzer class, that of FuzzerBigInteger. Let's modify the critical line within the original HelloFuzzer.java program that we had: &lt;br /&gt;
&amp;lt;pre&amp;gt;     for(FuzzerBigInteger f = fuzzDB.createFuzzerBigInteger(&amp;quot;031-B16-HEX&amp;quot;, 24); f.hasNext();) {&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
With the entire program becoming: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(FuzzerBigInteger f = fuzzDB.createFuzzerBigInteger(&amp;quot;031-B16-HEX&amp;quot;, 24); f.hasNext();) {&lt;br /&gt;
       // Get the next payload value...&lt;br /&gt;
       System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloFuzzer.java OWASP JBroFuzz Example 1&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Compiling and running this program yields: &lt;br /&gt;
&amp;lt;pre&amp;gt; The fuzzer payload is: 000000000000000000000000&lt;br /&gt;
 The fuzzer payload is: 000000000000000000000001&lt;br /&gt;
 ... (output omitted)&lt;br /&gt;
 The fuzzer payload is: 00000000000000000001a982&lt;br /&gt;
 ... (output omitted)&lt;br /&gt;
 The fuzzer payload is: 00000000000000000001a982&lt;br /&gt;
 The fuzzer payload is: ffffffffffffffffffffffff&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
There are limitations to this class, as governed by the BigInteger class itself. Further information can be found at: &lt;br /&gt;
&amp;lt;pre&amp;gt;http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigInteger.html&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Still, on a virtual windows xp machine with 256Mb of RAM the above code had no problem running to completion. It took some time though.. Characteristics of the windows machine while this iteration was ongoing: The CPU was being utilised at 100% and memory usage was constant at 212 Mb. Overall, a clean sheet for FuzzerBigInteger.java. &lt;br /&gt;
&lt;br /&gt;
==== Using the Power Fuzzer API ====&lt;br /&gt;
&lt;br /&gt;
With web applications, it is often that you find yourself re-using part of, or the entirety of a fuzzing payload in more than one location, as part of the GET, POST, or any other type of request you submit. &lt;br /&gt;
&lt;br /&gt;
For this reason, JBroFuzz offers the PowerFuzzer class: A type of iterator for which you can specify how many copies of the payload you require in each request. &lt;br /&gt;
&lt;br /&gt;
Let's consider the following trivial scenario. You are in need of all hexadecimal values, which are 4-digits long (i.e. 0000 to FFFF) and you are in need of these 5 times for each request. &lt;br /&gt;
&lt;br /&gt;
This scenario is trivial, because typically you can assign the fuzzing payload (i.e. the value you get back from Fuzzer.next() ) to a String variable and re-use it as many times as you see fit. &lt;br /&gt;
&amp;lt;pre&amp;gt; Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzerID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 int length = 4;&lt;br /&gt;
 ....&lt;br /&gt;
     for(Fuzzer f = fuzzDB.createFuzzer(fuzzerID, length); f.hasNext();) {&lt;br /&gt;
          String payload = f.next();&lt;br /&gt;
          ....&lt;br /&gt;
     }&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Using the PowerFuzzer.class, the following HelloPowerFuzzer.java program can be created: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloPowerFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzerID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 int length = 4;&lt;br /&gt;
 int power = 5;&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(PowerFuzzer f = fuzzDB.createPowerFuzzer(fuzzerID, length, power); f.hasNext();) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] identicalElements = f.nextPower();&lt;br /&gt;
&lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem&amp;amp;nbsp;: identicalElements) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloPowerFuzzer.java OWASP JBroFuzz Power Fuzzer Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This program would output the following; no rocket science here: &lt;br /&gt;
&amp;lt;pre&amp;gt;....&lt;br /&gt;
 I have 5 elements: 4817 4817 4817 4817 4817&lt;br /&gt;
 I have 5 elements: 4818 4818 4818 4818 4818&lt;br /&gt;
 I have 5 elements: 4819 4819 4819 4819 4819&lt;br /&gt;
 I have 5 elements: 481a 481a 481a 481a 481a&lt;br /&gt;
 I have 5 elements: 481b 481b 481b 481b 481b&lt;br /&gt;
 I have 5 elements: 481c 481c 481c 481c 481c&lt;br /&gt;
 I have 5 elements: 481d 481d 481d 481d 481d&lt;br /&gt;
 I have 5 elements: 481e 481e 481e 481e 481e&lt;br /&gt;
 I have 5 elements: 481f 481f 481f 481f 481f&lt;br /&gt;
 I have 5 elements: 4820 4820 4820 4820 4820&lt;br /&gt;
 I have 5 elements: 4821 4821 4821 4821 4821&lt;br /&gt;
 I have 5 elements: 4822 4822 4822 4822 4822&lt;br /&gt;
 I have 5 elements: 4823 4823 4823 4823 4823&lt;br /&gt;
 I have 5 elements: 4824 4824 4824 4824 4824&lt;br /&gt;
 I have 5 elements: 4825 4825 4825 4825 4825&lt;br /&gt;
 I have 5 elements: 4826 4826 4826 4826 4826&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Now imagine you need to change the number of elements you obtain back every time. For every second request, you need to obtain back two identical payloads, for every third request, you need to obtain back three payloads and for every fourth request, you need to obtain back four payloads. &lt;br /&gt;
&lt;br /&gt;
The PowerFuzzer class, with the corresponding method '''setPower(int)''' allows you to set how many identical elements you obtain back, without having to worry about the length argument. Below is a class that solves the above scenario: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloPowerFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzerID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 int length = 4;&lt;br /&gt;
 int power = 5;&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(PowerFuzzer f = fuzzDB.createPowerFuzzer(fuzzerID, length, power); f.hasNext();) {&lt;br /&gt;
	 &lt;br /&gt;
	   int currentValue = (int) f.getCurrentValue(); &lt;br /&gt;
	   currentValue&amp;amp;nbsp;%= 4;&lt;br /&gt;
	   switch (currentValue) {&lt;br /&gt;
			case 0: f.setPower(1); break;&lt;br /&gt;
			case 1: f.setPower(2); break;&lt;br /&gt;
			case 2: f.setPower(3); break;&lt;br /&gt;
			default: f.setPower(4); break;&lt;br /&gt;
	   }&lt;br /&gt;
	   &lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] identicalElements = f.nextPower();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem&amp;amp;nbsp;: identicalElements) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloPowerFuzzer.java&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This class has as output: &lt;br /&gt;
&amp;lt;pre&amp;gt; ....&lt;br /&gt;
 I have 1 elements: 22a8&lt;br /&gt;
 I have 2 elements: 22a9 22a9&lt;br /&gt;
 I have 3 elements: 22aa 22aa 22aa&lt;br /&gt;
 I have 4 elements: 22ab 22ab 22ab 22ab&lt;br /&gt;
 I have 1 elements: 22ac&lt;br /&gt;
 I have 2 elements: 22ad 22ad&lt;br /&gt;
 I have 3 elements: 22ae 22ae 22ae&lt;br /&gt;
 I have 4 elements: 22af 22af 22af 22af&lt;br /&gt;
 I have 1 elements: 22b0&lt;br /&gt;
 I have 2 elements: 22b1 22b1&lt;br /&gt;
 I have 3 elements: 22b2 22b2 22b2&lt;br /&gt;
 I have 4 elements: 22b3 22b3 22b3 22b3&lt;br /&gt;
 I have 1 elements: 22b4&lt;br /&gt;
 I have 2 elements: 22b5 22b5&lt;br /&gt;
 I have 3 elements: 22b6 22b6 22b6&lt;br /&gt;
 I have 4 elements: 22b7 22b7 22b7 22b7&lt;br /&gt;
 I have 1 elements: 22b8&lt;br /&gt;
 I have 2 elements: 22b9 22b9&lt;br /&gt;
 ....&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Naturally, the algorithm of the number of elements required can vary based on any number of parameters. The PowerFuzzer class gives you a quick way to control the number of identical payloads you obtain back, without having to worry about creating a data type to store them in. &lt;br /&gt;
&lt;br /&gt;
==== Using the Double Fuzzer API ====&lt;br /&gt;
&lt;br /&gt;
In some cases of fuzzing web applications, a requirement to fuzz two (or more) locations part of the request being submitted to the web server becomes apparent. &lt;br /&gt;
&lt;br /&gt;
The DoubleFuzzer class allows you to create a fuzzer based on two prototype definitions. Similarly to instantiating a Fuzzer through a prototype and a given length, with a DoubleFuzzer, we pass two prototype definitions and two lengths. The corresponding method call available within the '''Database''' class of org.owasp.jbrofuzz.core is: &lt;br /&gt;
&amp;lt;pre&amp;gt;public DoubleFuzzer createDoubleFuzzer(String id1, int length1,  &lt;br /&gt;
								String id2, int length2) throws NoSuchFuzzerException {&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Let's cross-breed some fuzzers, see what results we get back during an iteration. &lt;br /&gt;
&lt;br /&gt;
The first example below, uses two hexadecimal fuzzers of different lengths, as specified by the variables: &lt;br /&gt;
&amp;lt;pre&amp;gt;String fuzzID1 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
String fuzzID2 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
int length1 = 4;&lt;br /&gt;
int length2 = 2;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
As the double fuzzer iteration is taking place, the second fuzzer, defined by the fuzzID2 &amp;amp;amp; length2 loops, starting from 00 and going all the way up to FF. An example output is: &lt;br /&gt;
&amp;lt;pre&amp;gt; I have 2 elements: fefb fb&lt;br /&gt;
 I have 2 elements: fefc fc&lt;br /&gt;
 I have 2 elements: fefd fd&lt;br /&gt;
 I have 2 elements: fefe fe&lt;br /&gt;
 I have 2 elements: feff ff&lt;br /&gt;
 I have 2 elements: ff00 00&lt;br /&gt;
 I have 2 elements: ff01 01&lt;br /&gt;
 I have 2 elements: ff02 02&lt;br /&gt;
 I have 2 elements: ff03 03&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
The complete code listing of HelloDoubleFuzzer.java is: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloDoubleFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzID1 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 String fuzzID2 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 int length1 = 4;&lt;br /&gt;
 int length2 = 2;&lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
     DoubleFuzzer f = fuzzDB.createDoubleFuzzer(fuzzID1, length1, fuzzID2, length2);&lt;br /&gt;
	 &lt;br /&gt;
     while( f.hasNext() ) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] payloads = f.next();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem&amp;amp;nbsp;: payloads) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloDoubleFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
That's simple enough; now let's cross-breed something a bit more exotic: Imagine a 3-digit octal ID value [000 - 777] being submitted inline with, say, a parameter that we want to test for Cross-Site Scripting (XSS). Let's adjust the program above with the corresponding fuzzer IDs of these fuzzers. Remember all the IDs of all the fuzzers can be found in the fuzzers.jbrf file within JBroFuzz.jar: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloDoubleFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzID1 = &amp;quot;033-B08-OCT&amp;quot;;&lt;br /&gt;
 String fuzzID2 = &amp;quot;019-XSS-GEK&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 int length1 = 3;&lt;br /&gt;
 int length2 = 1;&lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
     DoubleFuzzer f = fuzzDB.createDoubleFuzzer(fuzzID1, length1, fuzzID2, length2);&lt;br /&gt;
	 &lt;br /&gt;
     while( f.hasNext() ) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] payloads = f.next();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem&amp;amp;nbsp;: payloads) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloDoubleFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
The output from this program is: &lt;br /&gt;
&amp;lt;pre&amp;gt; I have 2 elements: 000 (1?(1?{a:1?&amp;quot;&amp;quot;[1?&amp;quot;ev\a\l&amp;quot;:0](1?&amp;quot;\a\lert&amp;quot;:0):0}:0).a:0)[1?&amp;quot;\c\a\l\l&amp;quot;:0](content,1?&amp;quot;x\s\s&amp;quot;:0)&lt;br /&gt;
 I have 2 elements: 001 &amp;amp;lt;STYLE TYPE=&amp;quot;text/javascript&amp;quot;&amp;amp;gt;alert('XSS');&amp;amp;lt;/STYLE&amp;amp;gt;&lt;br /&gt;
 I have 2 elements: 002 &amp;amp;lt;SCRIPT SRC=http://ha.ckers.org/xss.js&lt;br /&gt;
 I have 2 elements: 003 &amp;amp;lt;A HREF=&amp;quot;http://google:ha.ckers.org&amp;quot;&amp;amp;gt;XSS&amp;amp;lt;/A&amp;amp;gt;&lt;br /&gt;
 I have 2 elements: 004 &amp;amp;lt;A HREF=&amp;quot;http://ha.ckers.org@google&amp;quot;&amp;amp;gt;XSS&amp;amp;lt;/A&amp;amp;gt;&lt;br /&gt;
 I have 2 elements: 005 &amp;amp;lt;A HREF=&amp;quot;//google&amp;quot;&amp;amp;gt;XSS&amp;amp;lt;/A&amp;amp;gt;&lt;br /&gt;
 ....&lt;br /&gt;
 ...&lt;br /&gt;
 ..&lt;br /&gt;
 .&lt;br /&gt;
 ..&lt;br /&gt;
 ...&lt;br /&gt;
 ....&lt;br /&gt;
 I have 2 elements: 774 &amp;amp;lt;SCRIPT SRC=http://ha.ckers.org/xss.js&lt;br /&gt;
 I have 2 elements: 775 &amp;amp;lt;A HREF=&amp;quot;http://google:ha.ckers.org&amp;quot;&amp;amp;gt;XSS&amp;amp;lt;/A&amp;amp;gt;&lt;br /&gt;
 I have 2 elements: 776 &amp;amp;lt;A HREF=&amp;quot;http://ha.ckers.org@google&amp;quot;&amp;amp;gt;XSS&amp;amp;lt;/A&amp;amp;gt;&lt;br /&gt;
 I have 2 elements: 777 &amp;amp;lt;A HREF=&amp;quot;//google&amp;quot;&amp;amp;gt;XSS&amp;amp;lt;/A&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
With the list stopping iterating at the last element of the greatest of the two fuzzers. &lt;br /&gt;
&lt;br /&gt;
==== Using the Cross Product Fuzzer API ====&lt;br /&gt;
&lt;br /&gt;
A final case of a special Double Fuzzer is the the Cross Product Fuzzer of the payloads of two fuzzers. This type of fuzzing is virtually encountered in username/password login form on the Internet. Let's work on this by example. &lt;br /&gt;
&lt;br /&gt;
Consider your home network router. You recall changing the default password to one of the typical password values that you use. Also, you are not 100% certain about the username for the router either, it is one of the typical admin, user, administrator, root, yoda type values, but you cannot recall which one. Needless to say, you don't know what the username, or password actually is. &lt;br /&gt;
&lt;br /&gt;
So in a mini brute-forcing attack scenario, you have the following list of usernames, out of which one is valid: &lt;br /&gt;
&amp;lt;pre&amp;gt;admin&lt;br /&gt;
administrator&lt;br /&gt;
Administrator&lt;br /&gt;
root&lt;br /&gt;
adminUser&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Also you know that the password is one of the following (Top 10 Threadwatch 2007 passwords): &lt;br /&gt;
&amp;lt;pre&amp;gt;password&lt;br /&gt;
123456&lt;br /&gt;
qwerty&lt;br /&gt;
abc123&lt;br /&gt;
letmein&lt;br /&gt;
monkey&lt;br /&gt;
myspace1&lt;br /&gt;
password1&lt;br /&gt;
blink182&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
The set that contains every possible combination of the two sets is the Cross Product of the list of usernames, times the list of passwords. So manually, (as most people do while locking themselves out) you would try, popular combinations of the above, starting with: &lt;br /&gt;
&amp;lt;pre&amp;gt;admin password&lt;br /&gt;
admin 123456&lt;br /&gt;
admin qwerty&lt;br /&gt;
....&lt;br /&gt;
admin blink182&lt;br /&gt;
administrator password&lt;br /&gt;
administrator 123456&lt;br /&gt;
administrator qwerty&lt;br /&gt;
....&lt;br /&gt;
adminUser password1&lt;br /&gt;
adminUser blink182&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Thus the total number of attempts would be (number of usernames) x (number of passwords). No rocket science here. &lt;br /&gt;
&lt;br /&gt;
JBroFuzz introduces the CrossProductFuzzer class capable of iterating through the cross product of two fuzzers. Let's put it into code; the following program provides a list of all 2-digit octal numbers with every 2-digit binary number. A total of (8 x 8) x (2 x 2) = 256 values. &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloCrossFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzID1 = &amp;quot;033-B08-OCT&amp;quot;;&lt;br /&gt;
 String fuzzID2 = &amp;quot;034-B02-BIN&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 int length1 = 2;&lt;br /&gt;
 int length2 = 2;&lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
     CrossProductFuzzer f = fuzzDB.createCrossFuzzer(fuzzID1, length1, fuzzID2, length2);&lt;br /&gt;
	 &lt;br /&gt;
     while( f.hasNext() ) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] payloads = f.next();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem&amp;amp;nbsp;: payloads) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloCrossFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This program has as output: &lt;br /&gt;
&amp;lt;pre&amp;gt; I have 2 elements: 00 00&lt;br /&gt;
 ...&lt;br /&gt;
 ..&lt;br /&gt;
 .&lt;br /&gt;
 ..&lt;br /&gt;
 ...&lt;br /&gt;
 I have 2 elements: 74 00&lt;br /&gt;
 I have 2 elements: 74 01&lt;br /&gt;
 I have 2 elements: 74 10&lt;br /&gt;
 I have 2 elements: 74 11&lt;br /&gt;
 I have 2 elements: 75 00&lt;br /&gt;
 I have 2 elements: 75 01&lt;br /&gt;
 I have 2 elements: 75 10&lt;br /&gt;
 I have 2 elements: 75 11&lt;br /&gt;
 I have 2 elements: 76 00&lt;br /&gt;
 I have 2 elements: 76 01&lt;br /&gt;
 I have 2 elements: 76 10&lt;br /&gt;
 I have 2 elements: 76 11&lt;br /&gt;
 I have 2 elements: 77 00&lt;br /&gt;
 I have 2 elements: 77 01&lt;br /&gt;
 I have 2 elements: 77 10&lt;br /&gt;
 I have 2 elements: 77 11&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
You can substitute any list of fuzzer ID to the IDs you use in this program. &lt;br /&gt;
&lt;br /&gt;
'''Remember!''' The total number of payloads must not exceed that of the the maximum value of the long primitive java data type ''Long.MAX_VALUE'' which is 2^63 - 1. If you are in need of more than that payloads, you would have to use the big integer implementation of the Fuzzer class, namely: FuzzerBigInteger.java. &lt;br /&gt;
&lt;br /&gt;
== Graphing with JBroFuzz ==&lt;br /&gt;
&lt;br /&gt;
Once a fuzzing session has completed, JBroFuzz offers the ability to generate a number of graphs, using various metrics. This section investigates how to further the graphing functionality available with the application. &lt;br /&gt;
&lt;br /&gt;
=== Customizing the logo on each Graph ===&lt;br /&gt;
&lt;br /&gt;
As of version 2.0, all image icons within JBroFuzz are located within the /icons directory of the application. The particular transparent image file displayed on top right part of the graphs is named: &lt;br /&gt;
&amp;lt;pre&amp;gt;/icons/owasp-med.png&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This file is a 64 x 64 PNG image file. You can replace it with your own file, as follows: &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;gt;ls -l JBroFuzz.jar&lt;br /&gt;
-rw-rw-rw-   1 user     group     4033612 Feb 15 12:33 JBroFuzz.jar&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt;unzip -oq JBroFuzz.jar&lt;br /&gt;
&amp;amp;gt;cd icons&lt;br /&gt;
&amp;amp;gt;mv owasp-med.png file64x64-file.png&lt;br /&gt;
&amp;amp;gt;cd ..&lt;br /&gt;
&amp;amp;gt;zip -r JBroFuzz.zip *&lt;br /&gt;
&amp;amp;gt;mv JBroFuzz.zip JBroFuzz.jar&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This enables you to have your own (company logo) on JBroFuzz graphs. Further to this, a number of other customization options are available, by right clicking on each of the graph generated. &lt;br /&gt;
&lt;br /&gt;
== Added Fuzzer Transformations ==&lt;br /&gt;
&lt;br /&gt;
A fuzzing transform is a simple term used to define the linear transposition of every set of payloads contained within a fuzzer. Say you have the following 4 basic XSS payloads:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;quot;&amp;gt;&amp;lt;script&amp;gt;alert('I can do some damage here!');&amp;lt;/script&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;IMG SRC=`javascript:alert(&amp;quot;XSS says, 'XSS'&amp;quot;)`&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;IFRAME SRC=&amp;quot;javascript:alert('XSS');&amp;quot;&amp;gt;&amp;lt;/IFRAME&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/XSS STYLE=xss:expression(alert('XSS'))&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that even though this example only looks at replacive fuzzers, recursive fuzzers, fuzzing transforms do apply to recursive fuzzers as well.&lt;br /&gt;
&lt;br /&gt;
Without getting too algebraic, if X is the payload value, a transform is a linear equation such that for every original payload contained within a fuzzer, the resulting payload Y is of the form.&lt;br /&gt;
&lt;br /&gt;
From version 2.4, JBroFuzz supports linear fuzzing tranforms for all its respective fuzzers. These are of the form:&lt;br /&gt;
&lt;br /&gt;
Y = A*X + B&lt;br /&gt;
&lt;br /&gt;
Where B represents a constant being padded to the original payload X, with A being the act of multiplication i.e. that of applying a particular encoding on X. Let's look at an example:&lt;br /&gt;
&lt;br /&gt;
X = &amp;quot;&amp;gt;&amp;lt;script&amp;gt;alert('I can do some damage here!');&amp;lt;/script&amp;gt;&lt;br /&gt;
B = %00%00&lt;br /&gt;
A = URL Cp1252&lt;br /&gt;
&lt;br /&gt;
Ergo, ignoring the brackets:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Y = (URL Cp1252)*(&amp;quot;&amp;gt;&amp;lt;script&amp;gt;alert('I can do some damage here!');&amp;lt;/script&amp;gt;) + %00%00&amp;lt;br&amp;gt;&lt;br /&gt;
Y = %22%3E%3Cscript%3Ealert%28%27I+can+do+some+damage+here%21%27%29%3B%3C%2Fscript%3E%00%00&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Unfortunately, in fuzzing algebraic equivalence relations do not really hold much ground i.e. generating a payload, by padding a constant value at the end is not at all the same as padding a constant value at the beginning and the end for that payload. Thus in:&lt;br /&gt;
&lt;br /&gt;
Y = A*X + B&lt;br /&gt;
&lt;br /&gt;
We have to break down the constant B in two parts:&lt;br /&gt;
&lt;br /&gt;
Y = B + A*X + C&lt;br /&gt;
&lt;br /&gt;
This is the fuzzing transform that JBroFuzz uses. Whatsmore, we can chain this with friends, with benefits:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Y{1} = B{1} + A{1}*X{1} + C{1}&amp;lt;br&amp;gt;&lt;br /&gt;
Y{2} = B{2} + A{2}*Y{1} + C{1}&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Ergo,&lt;br /&gt;
&lt;br /&gt;
Y{2} = B{2} + A{2}*{ B{1} + A{1}*X{1} + C{1} } + C{1}&lt;br /&gt;
&lt;br /&gt;
But we all hated math at school, think it was the teachers, not the subject, so let's look at an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Y{1} = %00 + {URL Cp1252}{&amp;quot;&amp;gt;&amp;lt;script&amp;gt;alert('I can do some damage here!');&amp;lt;/script&amp;gt;} + %00%00&amp;lt;br&amp;gt;&lt;br /&gt;
Y{2} = {Base64}Y{1}&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Note that B{2} = C{2} = null&lt;br /&gt;
&lt;br /&gt;
And of course we get:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Y{2} = JTAwJTIyJTNFJTNDc2NyaXB0JTNFYWxlcnQlMjglMjdJK2Nhbitkbytzb21lK2RhbWFnZStoZXJlJTIxJTI3JTI5JTNCJTNDJTJGc2NyaXB0JTNFJTAwJTAw&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JBroFuzz 2.4 can do this in two rows for every payload grouped in a fuzzer, within the Added Fuzzer Tranformations Table of the Fuzzing tab.&lt;br /&gt;
&lt;br /&gt;
After fuzzing that triple URL encode, base64 padded, timestamp MD5 into SHA512 hash? That would be 4 rows within the Added Fuzzer Tranformations Table. &lt;br /&gt;
&lt;br /&gt;
One fine day, we will write a process to reverse back transforms by simple cryptanalysis.&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP_JBroFuzz]]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User:Yiannis&amp;diff=88742</id>
		<title>User:Yiannis</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User:Yiannis&amp;diff=88742"/>
				<updated>2010-09-06T17:33:28Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There is a world of numbers, hiding behind letters, inside computers that stimulates the brain of Yiannis. Currently, he is focusing on research relating to coding standards, practices and ways of exploiting development code. This focus entails the breaking and making of client-side standalone, as well as server-side web applications.&lt;br /&gt;
&lt;br /&gt;
'''OWASP Life in Bullets:'''&lt;br /&gt;
&lt;br /&gt;
* 2010 - OWASP GitHub [[http://www.owasp.org/index.php/Category:OWASP_GitHub http://www.owasp.org/index.php/Category:OWASP_GitHub]]&lt;br /&gt;
&lt;br /&gt;
'''Contact'''&lt;br /&gt;
&lt;br /&gt;
Yiannis Pavlosoglou&amp;lt;br&amp;gt;&lt;br /&gt;
yiannis@owasp.org&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:JBroFuzzDownload.png&amp;diff=84469</id>
		<title>File:JBroFuzzDownload.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:JBroFuzzDownload.png&amp;diff=84469"/>
				<updated>2010-06-04T13:57:52Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: The JBroFuzz Download Button&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The JBroFuzz Download Button&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_JBroFuzz_Tutorial&amp;diff=80734</id>
		<title>OWASP JBroFuzz Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_JBroFuzz_Tutorial&amp;diff=80734"/>
				<updated>2010-03-30T16:04:38Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Introduction  ==&lt;br /&gt;
&lt;br /&gt;
''“If you can’t fuzz with JBroFuzz, you probably do not want to fuzz!”'' &lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;Old JBroFuzz Motto &amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; The art of teaching, Mark Van Doren said, is the art of assisting discovery. Fuzzing is a representative discipline towards assisting the discovery of security vulnerabilities, that is just beginning to come of age. Over the last two years, through continuous development, JBroFuzz has attempted to expose the intrinsic beauty of the subject: Constantly submit a vast amount of payloads to a service, device or prompt, waiting for the one response that makes all the difference. This is the mentality that JBroFuzz embraces and attempts to offer back to security professionals. &lt;br /&gt;
&lt;br /&gt;
Fuzzing as a concept goes beyond a conventional work flow or a standard methodology. I would argue that to know how to fuzz well, is to master a new language. Thus, similar to the process of learning a programming (or foreign) language, there are three things you must master: &lt;br /&gt;
&lt;br /&gt;
• Grammar: How fuzzing as a process is structured&amp;lt;br&amp;gt; • Vocabulary: How to name fuzzing concepts you want to use&amp;lt;br&amp;gt; • Usage: Ways of achieving everyday effective results with fuzzing&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:001-JBroFuzz-Tutorial.jpg|right|300px|JBroFuzz Splash Screen]]From the pre-existing information available for JBroFuzz, this tutorial focuses on usage: How to best put a fuzzing tool to good use, either via the UI, or using APIs that ''JBroFuzz.jar'' is constituted of. As a result, this document has a small requirement as a caveat; you need to have a beginner level understanding of the Java programming language in order to understand some sections. &lt;br /&gt;
&lt;br /&gt;
There are a number of working examples described here within, which '''grep''' for statements such as “''&amp;lt;nowiki&amp;gt;public static void main(String[] args)&amp;lt;/nowiki&amp;gt;''”. The majority of the content relates to reviewing these examples and putting the Java syntax into a fuzzing perspective. &lt;br /&gt;
&lt;br /&gt;
To summarise, this tutorial focuses on customary and effective usage of fuzzing through the JBroFuzz Java APIs and the respective UI. It is targeting (without attacking them) web applications. Without further redo, let’s get fuzzing! &lt;br /&gt;
&lt;br /&gt;
== JBroFuzz Basic Functionality  ==&lt;br /&gt;
&lt;br /&gt;
This section carries a number of basic fuzzing examples to get you started with JBroFuzz. Overall, even though the actions performed to not produce any amazing fuzzing results, it serves as a starting point in understanding how to perform particular fuzzing operations on web applications. &lt;br /&gt;
&lt;br /&gt;
=== 'Hello Google!' (forget 'Hello World')  ===&lt;br /&gt;
&lt;br /&gt;
As the traditional first program that you learn when indulging in a new programming language, 'Hello World!' represents the norm for understanding the basic output operations and syntax (let alone compiler and execution behaviour) of the language in question. &lt;br /&gt;
&lt;br /&gt;
As with most web application security related tools, when I am given the responsibility to run them, often in order to understand how they work, I would first craft a legitimate, single request to a trusted (to be up and behaving) popular Internet location. Needless, to say this request more than on occasion finds itself on Google servers. &lt;br /&gt;
&lt;br /&gt;
So 'Hello World!' for programming languages seems to transform to 'Hello Google!' for understanding how web application security related tools work. Let us see, how JBroFuzz does it. &lt;br /&gt;
&lt;br /&gt;
• Double-click on JBroFuzz and browse to the 'Fuzzing' tab &lt;br /&gt;
&lt;br /&gt;
JBroFuzz is constituted of tabs, typically located in the bottom or top (if you bother to change the settings) of the main window. &lt;br /&gt;
&lt;br /&gt;
The 'Fuzzing' tab is where you craft your request message to a particular host. Once that is in place, you can select any part of the request and proceed into adding any number of payloads. We shall see how in later sections. &lt;br /&gt;
&lt;br /&gt;
• In the 'URL' field type: http://www.google.com/ http://www.google.com &lt;br /&gt;
&lt;br /&gt;
Unlike conventional URLs, the URL field in JBroFuzz is only used for the underlying protocol (HTTP or HTTPS), host name (e.g. www.yahoo.com) and (optionally) port number. &lt;br /&gt;
&lt;br /&gt;
All remaining information pasted or typed into the 'URL' field will be ignored; you are expected to enter it in the 'Request' field below. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Still, if you want to just copy-paste a URL from a browser, hit [Ctrl+L] while you are not fuzzing, paste the URL value that you have copied from a browser and JBroFuzz will automatically do the work for you. &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Examples of valid URL values to be put in the &lt;br /&gt;
&lt;br /&gt;
Treat the 'URL' and 'Request' fields as the two stages of a 'telnet' session on port 80; you are effectively using the 'URL' field to specify the equivalent of: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;amp;gt;telnet www.google.com 8088&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
As equivalent to: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;http://www.google.com:8088&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
or in the case of HTTPS: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://www.google.com:8088&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Naturally, default ports for HTTP is 80 and HTTPS is 443. &lt;br /&gt;
&lt;br /&gt;
• In the 'Request' field type: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET / HTTP/1.0&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
And press 'Enter' twice &lt;br /&gt;
&lt;br /&gt;
This is where the body of the message you are sending is to be placed. So anything obeying HTTP/S protocol, such as GET and POST requests, header fields and/or HTML content should be included here. &lt;br /&gt;
&lt;br /&gt;
As part of the process of fuzzing web applications with JBroFuzz you need to have done your homework, in terms of providing a base request message. This message is what will be used later on to add payloads to particular sections of the request. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;• Hit 'Start' [Ctrl+Enter]&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
This will instigate the process of sending a single request to the specified host on a given (or default) port, over HTTP or HTTPS. &lt;br /&gt;
&lt;br /&gt;
Once a connection has been established JBroFuzz will proceed to submit the message you have typed into the 'Request' field. &lt;br /&gt;
&lt;br /&gt;
Finally, JBroFuzz will log all data sent and received into a file; accessing this file is typically a process of double clicking on the output line on the table at the bottom section of the 'Fuzzing' tab. &lt;br /&gt;
&lt;br /&gt;
You should see a response received in the bottom part of the 'Fuzzing' panel. Double click (or right click for more options) to see the information exchanged; typically this would be a 302 redirect pointing you to another location. Congratulations, you have just said &amp;quot;Hello&amp;quot; to Google! &lt;br /&gt;
&lt;br /&gt;
[[Image:002-JBroFuzz-Tutorial.png|500px|JBroFuzz Hello Google!]] &lt;br /&gt;
&lt;br /&gt;
Now this would typically be enough under RFC rules, to get a response back; but damn all the bots out here, most websites require further information to respond back. So, in the 'Request' field let's pretend to be a (kind of) legitimate browser by typing: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET / HTTP/1.0&amp;lt;br&amp;gt; Host: www.google.com&amp;lt;br&amp;gt; User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729) JBroFuzz/1.5&amp;lt;br&amp;gt; Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-gb,en;q=0.5Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Not forgetting to end the request typed with two returns: Press 'Enter' twice. Again, you should be able to see a line added with the response received back. &lt;br /&gt;
&lt;br /&gt;
Practice sending single requests to a website of your choice by changing the URL and also the 'Host:' field from the 'Request' above. Also try accessing an HTTPS website. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Alternatively, you can use the shortcut [Ctrl+L] to type in your URL, with the 'Request' field filled automatically, based on the URL you have typed. &amp;lt;/nowiki&amp;gt; &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== HTTP Version Numbers &amp;amp;amp; www.cia.gov Headerless Responses  ===&lt;br /&gt;
&lt;br /&gt;
For web applications, very often ill-defined requests submitted over the Internet, will trigger semi-legitimate responses that actually do not obey HTTP RFC protocol specification. Often, even though this is not the case in this example, these responses can lead to the identification of one or more security vulnerabilities. &lt;br /&gt;
&lt;br /&gt;
In this example we test for the responses received for invalid HTTP version numbers on a particular website, namely www.cia.gov, over https. Now a word of caution here; please do not attempt to fuzz web applications that you do not have the authority to do so, especially over the Internet. &lt;br /&gt;
&lt;br /&gt;
Still, for the purposes of this tutorial exercise, we will subject a web server to no more than a dozen or so requests. These requests would be otherwise identical, if it was not for the HTTP version number incrementing by a value of 1 on each request. &lt;br /&gt;
&lt;br /&gt;
In terms of having the authority to do so, well this is identical to hitting 'Refresh' in your web browser a dozen or so times, while you are browsing to www.cia.gov. I do not consider this remotely close to any form of hacking, cracking, or proper fuzzing; web servers across the globe receive a lot more abuse than this on a daily basis. &lt;br /&gt;
&lt;br /&gt;
Finally, by the time you are reading this, the particular issue described might have been fixed. So here goes: &lt;br /&gt;
&lt;br /&gt;
• Within JBroFuzz, select: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;File -&amp;amp;gt; Open Location [Ctrl+L]&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Type: https://www.cia.gov and hit enter. This is depicted in the following screenshot: &lt;br /&gt;
&lt;br /&gt;
[[Image:003-JBroFuzz-Tutorial.png|JBroFuzz Open Location]] &lt;br /&gt;
&lt;br /&gt;
Hitting 'Enter' should automatically populate the 'URL' field and the 'Request' field within the 'Fuzzing' tab. What you see is the base request that we intend to add fuzzing payloads to. Before we do so, let us make one small alteration first: &lt;br /&gt;
&lt;br /&gt;
• Modify the first line of the 'Request' field to: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET / HTTP/0.0&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Our objective is to enumerate the supported by the web server (in this case www.cia.gov) HTTP version numbers, following the two digit format that it has. We could be a lot more agressive here and test for buffer overflows and all types of injection; that would be out of line without the authority to do so. Instead we are going to see how JBroFuzz will iterate through the values of 0.0 to 1.4 by means of adding a Fuzzer to our base request. &lt;br /&gt;
&lt;br /&gt;
• Highlight the second zero from the line 'GET / HTTP/0.0' and right-click, selecting 'Add'. This is depicted in the screeshot below: &lt;br /&gt;
&lt;br /&gt;
[[Image:004-JBroFuzz-Tutorial.png|400px|Adding a Fuzzer to the HTTP version number]] &lt;br /&gt;
&lt;br /&gt;
• From the appearing 'Add a Fuzzer' window, select as 'Category Name', in the most left column 'Base' and as 'Fuzzer Name' in the middle column 'Base 10 (Decimal) Alphabet. &lt;br /&gt;
&lt;br /&gt;
• Click on 'Add Fuzzer' on the bottom right of the window &lt;br /&gt;
&lt;br /&gt;
[[Image:005-JBroFuzz-Tutorial.png|400px|Adding a Fuzzer]] &lt;br /&gt;
&lt;br /&gt;
This should add a Fuzzer of length 1 that iterates over the decimal (i.e. base 10) numbers 0 to 9. If we have added a hexadecimal Fuzzer instead of a decimal one (i.e. base 16) the iteration would from 0 to F. If we had selected two digits instead of one and proceeded to add a decimal Fuzzer, the iteration would be from: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;00&amp;lt;br&amp;gt; 01&amp;lt;br&amp;gt; ..&amp;lt;br&amp;gt; 98&amp;lt;br&amp;gt; 99&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
From a User Interface (UI) perspective you should see a line added to the 'Added Payloads Table'. &lt;br /&gt;
&lt;br /&gt;
• Click 'Start' [Ctrl+Enter] &lt;br /&gt;
&lt;br /&gt;
This process will send 10 requests to the specified web server changing only first line of the request to: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET / HTTP/0.0...&amp;lt;br&amp;gt; GET / HTTP/0.1...&amp;lt;br&amp;gt; ...&amp;lt;br&amp;gt; GET / HTTP/0.8...&amp;lt;br&amp;gt; GET / HTTP/0.9...&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
While this is ongoing, you can sort the results by 'No' in the 'Output' table in the bottom of the 'Fuzzing' tab. This should enable you to see what request is currently being transmitted and received in real time. &lt;br /&gt;
&lt;br /&gt;
Once complete, change the first line of the 'Request' field to read: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET / HTTP/1.0&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
• Click 'Start' [Ctrl+Enter] &lt;br /&gt;
&lt;br /&gt;
The resulting output should resemble the following screenshot: &lt;br /&gt;
&lt;br /&gt;
[[Image:006-JBroFuzz-Tutorial.png|500px|JBroFuzz Output from a Fuzzing Session]] &lt;br /&gt;
&lt;br /&gt;
Straight away we can notice a difference in the response size: For HTTP version numbers 0.0 to 0.9 we are getting back what seems fairly big in size responses; 32222 bytes in size worth of responses, given that HTTP protocol version 0.0 to 0.8 do not officially exist! &lt;br /&gt;
&lt;br /&gt;
By double-clicking on one of these requests, we can see that the web server in question is responding back with no headers, yet returning a full HTML body; this represents the 32222 bytes of response of data we are receiving back. The following screenshot illustrates this: &lt;br /&gt;
&lt;br /&gt;
[[Image:007-JBroFuzz-Tutorial.png|300px|JBroFuzz Output for a Single Request/Response]] &lt;br /&gt;
&lt;br /&gt;
Using the 'Graphing' tab we can proceed to graph the particular requests and responses for this given session. &lt;br /&gt;
&lt;br /&gt;
• Within the 'Graphing' tab, click 'Start' [Ctrl+Enter]. &lt;br /&gt;
&lt;br /&gt;
• Select the directory corresponding to the Output folder we have used for this fuzzing session. This will typically be the last one. &lt;br /&gt;
&lt;br /&gt;
• Right-click and select 'Graph' &lt;br /&gt;
&lt;br /&gt;
Once complete, browse to the 'Response Size' tab within the 'Graphing' tab, as illustrated in the screenshot below: &lt;br /&gt;
&lt;br /&gt;
[[Image:008-JBroFuzz-Tutorial.png|300px|JBroFuzz Graphing different 'Response Sizes']] &lt;br /&gt;
&lt;br /&gt;
To re-iterate this does not present a security vulnerability in any shape or form; merely the fact that by manipulating HTTP version numbers as part of the request we transmit, we can impact the response that we get back. In this case, what changes is the non-existent header fields, with some HTML content being received back. &lt;br /&gt;
&lt;br /&gt;
If I was to guess what is causing this, I would say that some sort of load balancing or content delivery is not happening as it should when non-existent version numbers are being transmitted. &lt;br /&gt;
&lt;br /&gt;
== Using JBroFuzz with a Generic Proxy  ==&lt;br /&gt;
&lt;br /&gt;
JBrofuzz 2.0 and subsequent releases include generic proxy support. As of this writing, basic authentication is supported with plans to eventually support NTLM and Kerberos authentication as well. We've tried to make the use of a proxy as straight forward as possible. All arguments for the proxy can be passed in the URL field and will take one of the following forms. &lt;br /&gt;
&amp;lt;pre&amp;gt;Without Authentication: &amp;amp;lt;proxy server&amp;amp;gt;:&amp;amp;lt;proxy port&amp;amp;gt;&lt;br /&gt;
With Authentication: &amp;amp;lt;proxy username&amp;amp;gt;:&amp;amp;lt;proxy password&amp;amp;gt;@&amp;amp;lt;proxy server&amp;amp;gt;:&amp;amp;lt;proxy port&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
The structure of the request field and whether the GET parameter contains an absolute URL depends on the proxy you are using. For this reason, you may have to do a bit of trial and error to determine what format(s) your proxy accepts. To make all of this a bit clearer lets look at a couple of examples. &lt;br /&gt;
&lt;br /&gt;
=== Squid Proxy  ===&lt;br /&gt;
&lt;br /&gt;
In the first example, we are fuzzing through a squid proxy that requires ncsa user authentication as shown in the figure below. When producing similar results, its important that you use your own proxy and not the one shown in the figure. This proxy was setup for demonstration purposes, will not accept connections from your IP address, and the credentials will no longer be active. &lt;br /&gt;
&lt;br /&gt;
[[Image:016-JBroFuzz-Tutorial.jpg|503x449px]] &lt;br /&gt;
&lt;br /&gt;
=== Paros Proxy  ===&lt;br /&gt;
&lt;br /&gt;
In the second example, we are fuzzing through a local Paros proxy running on port 8080 that does not require user authentication. Notice the difference in the syntax of the URL field when user authentication is not required. &lt;br /&gt;
&lt;br /&gt;
[[Image:017-JBroFuzz-Tutorial.jpg|503x449px]] &lt;br /&gt;
&lt;br /&gt;
In the third example, we are still fuzzing through Paros, but notice the slight difference in the Request Field. Specifically, pay special attention to the GET line. We are no longer including the fully qualified path. Unlike Squid, Paros will accept both formats. Keep this in mind when you are performing initial testing with JBroFuzz and the proxy of your choice. &lt;br /&gt;
&lt;br /&gt;
[[Image:018-JBroFuzz-Tutorial.jpg|503x449px]]&lt;br /&gt;
&lt;br /&gt;
=== Burp Proxy  ===&lt;br /&gt;
In the final example, we are fuzzing through Burp. Similar to Squid, Burp requires absolute URLs in the request. A successful Burp request is shown below.&lt;br /&gt;
&lt;br /&gt;
[[Image:019-JBroFuzz-Tutorial.jpg|503x449px]]&lt;br /&gt;
&lt;br /&gt;
== Using JBroFuzz with Paros Proxy ==&lt;br /&gt;
&lt;br /&gt;
JBroFuzz is a standalone fuzzer; it can release and create sockets over HTTP and HTTPS, but in order to use JBroFuzz correctly you will have to know what it is that you are fuzzing. &lt;br /&gt;
&lt;br /&gt;
In comes the need for a proxy tool; the opening versions of JBroFuzz actually had a proxy tab that you could use to intercept traffic generated by your web browser. That functionality got removed in an attempt to focus and deliver solely on the fuzzing capabilities of the tool. &lt;br /&gt;
&lt;br /&gt;
This section details how to use JBroFuzz in combination with a client side proxy. The one selected is Paros Proxy, which, despite the fact that it hasn't been updated since 2006 is still a popular tool that you see in web security testing live CDs. You could use any of the other proxy tools available. &lt;br /&gt;
&lt;br /&gt;
=== Winning on a Remix of the Year Award ===&lt;br /&gt;
&lt;br /&gt;
At 17:53, on a frosty winter evening, a message window popped up: &lt;br /&gt;
&amp;lt;pre&amp;gt;17:53 http://www.localhost.com/remixcontest/club/annual2010.html&lt;br /&gt;
17:53 Hey bro, could you cast in a vote here for the Such &amp;amp;amp; Such Remix?&lt;br /&gt;
17:53 Appreciated!&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
A friend in need is a friend indeed, so here goes I thought. Opening up a web browser configured to work with Paros as an intermediate proxy, allowed for the casting of my vote. while keeping a record of each request and reply. &lt;br /&gt;
&lt;br /&gt;
No registration, or any other form of submitting an identifier was needed. The request that Paros stored for the casting of the actual vote was: &lt;br /&gt;
&amp;lt;pre&amp;gt;GET http://www.localhost.com/remixcontest/club/vote.php?onLoad=%5Btype%20Method%5D&amp;amp;amp;id=55 HTTP/1.1&lt;br /&gt;
Host: www.localhost.com&lt;br /&gt;
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729) Paros/3.2.13&lt;br /&gt;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&lt;br /&gt;
Accept-Language: en-gb,en;q=0.5&lt;br /&gt;
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&lt;br /&gt;
Keep-Alive: 300&lt;br /&gt;
Proxy-Connection: keep-alive&lt;br /&gt;
Cookie: PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Paros Proxy actually places the domain (in this case www.localhost.com) with the protocol (i.e. http) in front of the GET request. As a result, you can't open a telnet/netcat session and just copy-paste the above. Similarly when we bring the request into JBroFuzz, a bit of tweaking is required. &lt;br /&gt;
&lt;br /&gt;
*In the URL field, type:&lt;br /&gt;
&amp;lt;pre&amp;gt;http://www.localhost.com&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
In the Request field, let's keep what is of interest: &lt;br /&gt;
&amp;lt;pre&amp;gt;GET /remixcontest/club/vote.php?onLoad=%5Btype%20Method%5D&amp;amp;amp;id=55 HTTP/1.0&lt;br /&gt;
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5&lt;br /&gt;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&lt;br /&gt;
Accept-Language: en-gb,en;q=0.5&lt;br /&gt;
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&lt;br /&gt;
Cookie: PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
No needs for Keep-Alive and Proxy-Connection. Let's simplify the HTTP request by making it a version 1.0 request and getting rid of the Host header as well. Also on the user agent, let us keep that mainstream vanilla: Firefox on Windows (popular browser combination), getting rid of the .NET and Paros additives. &lt;br /&gt;
&lt;br /&gt;
Checking on the website, our Such &amp;amp;amp; Such remix already has about 100 votes or so and the top remix has approximately 310 votes. Let's fuzz this: &lt;br /&gt;
&lt;br /&gt;
*Select 2 of the digits of the cookie value:&lt;br /&gt;
&amp;lt;pre&amp;gt;PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
*Select: Panel -&amp;amp;gt; Add&lt;br /&gt;
&lt;br /&gt;
*In the &amp;quot;Add a Fuzzer&amp;quot; panel, select:&lt;br /&gt;
&amp;lt;pre&amp;gt;Base -&amp;amp;gt; Base16 (HEX)&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
and select &amp;quot;Add Fuzzer&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
This will add a line within the Payloads tab on the right hand side. &lt;br /&gt;
&lt;br /&gt;
Our cookie value above (PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e) is in lowercase, hexadecimal format. Let's make sure the encoding we select is also that. &lt;br /&gt;
&lt;br /&gt;
Within the Payloads tab, click on the encoding drop down menu and select lowercase. Just before clicking &amp;quot;Start&amp;quot;, JBroFuzz should look something like the screenshot below. &lt;br /&gt;
&lt;br /&gt;
[[Image:014-JBroFuzz-Tutorial.png|Adding Votes by iterating through PHPSESSID cookie values]] &lt;br /&gt;
&lt;br /&gt;
== Performing User Enumeration with a Valid Set of Credentials  ==&lt;br /&gt;
&lt;br /&gt;
Often you encounter an application that allows for the enumeration of one or more pages after a user has been successfully granted a set of session credentials. One of the key areas to test from an application specific perspective, relates to the page(s) that provide user account information. &lt;br /&gt;
&lt;br /&gt;
In the following example, we investigate an ASP.NET 2.0 application with a C# back-end. In this, an authenticated user has the option to select to &amp;quot;View My Profile&amp;quot;. This page provides them with account information (including the typical username, email address, further notes) that they can proceed to update and save to the back-end system. &lt;br /&gt;
&lt;br /&gt;
After a user has authenticated, the following URL, gives them access to their profile information stored on the database: &lt;br /&gt;
&amp;lt;pre&amp;gt;http://www.myattackingdomain.com/portal-location/UserInfo.aspx?UserID=23&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Simple investigation confirms that the digits allowed as part of the UserID value are decimal numbers only. Lets feed that information into JBroFuzz. &lt;br /&gt;
&lt;br /&gt;
=== Fuzzing a User ID ===&lt;br /&gt;
&lt;br /&gt;
• Within JBroFuzz, select: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;File -&amp;amp;gt; Open Location [Ctrl+L]&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Type: http://www.myattackingdomain.com/portal-location/UserInfo.aspx?UserID=23 and hit enter. This is depicted in the following screenshot: &lt;br /&gt;
&lt;br /&gt;
[[Image:009-JBroFuzz-Tutorial.png|300px|JBroFuzz 'GET' Request with a 'UserID' parameter]] &lt;br /&gt;
&lt;br /&gt;
From the URL the important parameter is the value of the UserID query string (the value 23, above). We want to fuzz that. &lt;br /&gt;
&lt;br /&gt;
• Within the Fuzzing Tab, in the &amp;quot;Request&amp;quot; text area, highlight the above number 23 • Right-click and select &amp;quot;Add&amp;quot; &lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Add a Fuzzer&amp;quot; window that appears, select: &lt;br /&gt;
&lt;br /&gt;
• Category Name: &amp;lt;code&amp;gt;Base&amp;lt;/code&amp;gt; • Fuzzer Name: &amp;lt;code&amp;gt;Base10 (DEC)&amp;lt;/code&amp;gt; • Select &amp;quot;Add Fuzzer&amp;quot; in the bottom right &lt;br /&gt;
&lt;br /&gt;
This would have added a decimal (base 10 fuzzer) of length 2 onto the location. &lt;br /&gt;
&lt;br /&gt;
• You will see a row added within the &amp;quot;Added Fuzzers Table&amp;quot; of the Fuzzing panel. • Click &amp;quot;Start&amp;quot; &amp;lt;code&amp;gt;Ctrl+Enter&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
This will transmit 100 requests to the domain in question, which in this case is assumed: www.myattackingdomain.com. The value being changed within each request will be: &lt;br /&gt;
&amp;lt;pre&amp;gt;• GET /portal-location/UserInfo.aspx?UserID=00 HTTP/1.0&lt;br /&gt;
• GET /portal-location/UserInfo.aspx?UserID=01 HTTP/1.0&lt;br /&gt;
...&lt;br /&gt;
• GET /portal-location/UserInfo.aspx?UserID=98 HTTP/1.0&lt;br /&gt;
• GET /portal-location/UserInfo.aspx?UserID=99 HTTP/1.0&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Done. Let's proceed to graph the responses that we have obtained. Our objective is to understand which two-digit numbers from 00 to 99 correspond to valid user accounts. &lt;br /&gt;
&lt;br /&gt;
=== Graphing Results ===&lt;br /&gt;
&lt;br /&gt;
• Within the &amp;quot;Graphing&amp;quot; tab, click &amp;quot;Start&amp;quot; &amp;lt;code&amp;gt;Ctrl+Enter&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A list of directories will appear on the left-hand side. If you scroll to the bottom of the list you should see the directory corresponding to your fuzzing session, in our case it was (175 2009-06-24 16-18-24) &lt;br /&gt;
&amp;lt;pre&amp;gt;• Right-click on (175 2009-06-24 16-18-24)&lt;br /&gt;
• Click &amp;quot;Graph&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This will generate the graphs in their respective tabs. The question now becomes which graph is of interest for our user enumeration exercise. &lt;br /&gt;
&lt;br /&gt;
By definition enumerating users against an ID value, or any other identifier involves being able to obtain a different response for an existing user to that of a user that is not have a corresponding ID value. &lt;br /&gt;
&lt;br /&gt;
Thus, from the metrics available, the one useful for enumerating users will be that of measuring the &amp;quot;Hamming Distance&amp;quot; between responses received. Based on the JBroFuzz documentation: &lt;br /&gt;
&lt;br /&gt;
'''Fuzzing Hamming Distance ''' &lt;br /&gt;
&amp;lt;pre&amp;gt;A bar chart with the hamming distance of the characters in the response, &lt;br /&gt;
relative to the first response received. Check each character of the first&lt;br /&gt;
response received, against the character at the same position of the&lt;br /&gt;
current response received. If they are not identical, increment the &lt;br /&gt;
hamming distance.&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
As we can see the Fuzzing Hamming Distance (FHD) varies quite a bit from the definition of the normal hamming distance term, used in telecommunications. Still, they share a lot of similarities. &lt;br /&gt;
&lt;br /&gt;
As we can from the above, the first request is critical to calibrating our user enumeration exercise. It represents the value that all other Fuzzing Hamming Distances (FHD) will be measured and normalised towards. For the java-skilled audience, the algorithm is quite trivial, but offers spectacular results in distinguishing responses: &lt;br /&gt;
&amp;lt;pre&amp;gt;in = new BufferedReader(new FileReader(f));&lt;br /&gt;
   58 &lt;br /&gt;
   59 			int counter = 0;&lt;br /&gt;
   60 			int check = 0;&lt;br /&gt;
   61 			int c;&lt;br /&gt;
   62 			while (((c = in.read()) &amp;amp;gt; 0) &amp;amp;amp;&amp;amp;amp; (counter &amp;amp;lt; MAX_CHARS)) {&lt;br /&gt;
   63 &lt;br /&gt;
   64 				// If we are passed &amp;quot;--jbrofuzz--&amp;amp;gt;\n&amp;quot; in the file&lt;br /&gt;
   65 				if (check == END_SIGNATURE.length()) {&lt;br /&gt;
   66 &lt;br /&gt;
   67 					firstSet.append((char) c);&lt;br /&gt;
   68 &lt;br /&gt;
   69 				}&lt;br /&gt;
   70 				// Else find &amp;quot;--jbrofuzz--&amp;amp;gt;\n&amp;quot; using a counter&lt;br /&gt;
   71 				else {&lt;br /&gt;
   72 					// Increment the counter for each success&lt;br /&gt;
   73 					if (c == END_SIGNATURE.charAt(check)) {&lt;br /&gt;
   74 						check++;&lt;br /&gt;
   75 					} else {&lt;br /&gt;
   76 						check = 0;&lt;br /&gt;
   77 					}&lt;br /&gt;
   78 				}&lt;br /&gt;
   79 &lt;br /&gt;
   80 				counter++;&lt;br /&gt;
   81 &lt;br /&gt;
   82 			}&lt;br /&gt;
   83 			in.close();&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Ergo, the corresponding graph is depicted in the screenshot below. The peak graphs correspond to number that if you hover the mouse over will give you the enumeration ID of a valid user. &lt;br /&gt;
&lt;br /&gt;
[[Image:015-JBroFuzz-Tutorial.png|500px|Measuring Hamming Distance for User Enumeration]] &lt;br /&gt;
&lt;br /&gt;
== Eliminating False Positives: LDAP Injection ==&lt;br /&gt;
&lt;br /&gt;
Every now and then a tool (that does not produce false positives) will hit an application reporting back a huge variety of (hopefully not confirmed, but pending further investigation) injection findings. &lt;br /&gt;
&lt;br /&gt;
Due to the limited number of characters required in performing LDAP Injection, such issues will be high on that list. But let's refresh our memory a bit of how LDAP injection works:&lt;br /&gt;
&lt;br /&gt;
http://www.owasp.org/index.php/LDAP_injection&lt;br /&gt;
&lt;br /&gt;
So typically, during an automated scan, negating LDAP cn-type queries would be submitted and their responses noted. Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /myfilelocation.jsp?lang=en&amp;amp;city=user)(sn=*&amp;amp;rid=97 HTTP/1.1&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
vs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /myfilelocation.jsp?lang=en&amp;amp;city=user)!(sn=*&amp;amp;rid=97 HTTP/1.1&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /myfilelocation.jsp?lang=en&amp;amp;city=admin*)((|userpassword=*)&amp;amp;rid=97 HTTP/1.1&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As great as this check might be from an LDAP perspective, it has a high likelihood of generating false positives, due to the character sets being used. Ergo, a protection mechanism (silly worst-case blacklist present for example) would typically hunt down cross-site scripting and sql injection type of characters:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt; &amp;gt; ' etc.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Not considering =, *, or brackets as completely bad (he says). &lt;br /&gt;
&lt;br /&gt;
=== What characters are allowed through? ===&lt;br /&gt;
&lt;br /&gt;
Enough of all that; we want to know what responses are allowed back and what's different about them for all characters being filtered through a black-list.&lt;br /&gt;
&lt;br /&gt;
Let's transform the above GET into the following and proceed to add a single fuzzer that tells us that:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /myfilelocation.jsp?lang=en&amp;amp;city=X&amp;amp;rid=97 HTTP/1.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now in the position of the X character, proceed to add an ASCII 94 Alphabet Fuzzer (available in version 2.1 and above). This will check the responses for all characters which are printable ASCII, with the exception of space.&lt;br /&gt;
&lt;br /&gt;
In total there are 95 printable ASCII characters; minus the one present for space (yes, the one you hit all the time, every day) leaves 94. This fuzzer produces each of those values, in incrementing ASCII order.&lt;br /&gt;
&lt;br /&gt;
[[Image:020-JBroFuzz-Tutorial.png|500px|Measuring Size Length for Single Character ASCII 94 Fuzzing]] &lt;br /&gt;
&lt;br /&gt;
Based on the above graph, the following responses trigger a different response size. Thus the characters blocked by a black-list are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
! &amp;quot; , &amp;lt; &amp;gt; @ [ \ ] ^ ` { | } ~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interesting. Know any payloads that can evade those?&lt;br /&gt;
:)&lt;br /&gt;
&lt;br /&gt;
== JBroFuzz Development Corner  ==&lt;br /&gt;
&lt;br /&gt;
This section presents how to setup and use JBroFuzz as a fuzzing library. Also, it offers an insight in how to setup and compile your own version of JBroFuzz. As different people have different levels of expertise of the java programming language, eclipse, ant and subversion, some of the steps presented herein might be considered basic by advanced developers. &lt;br /&gt;
&lt;br /&gt;
=== Setting up a JBroFuzz Development Environment ===&lt;br /&gt;
&lt;br /&gt;
This section guides you towards setting up a development environment for JBroFuzz. Despite the Operating System (O/S) being windows XP, a similar process can be followed in a number of other O/S. &lt;br /&gt;
&lt;br /&gt;
You will need to have installed: &lt;br /&gt;
&lt;br /&gt;
*Tortoise SVN (using TortoiseSVN-1.6.6.17493-win32-svn-1.6.6.msi) &lt;br /&gt;
*Eclipse Java (using eclipse-java-galileo-SR1-win32.zip)&lt;br /&gt;
&lt;br /&gt;
Optionally, if you don't like building your application through eclipse you could also require to install Apache Ant. &lt;br /&gt;
&lt;br /&gt;
==== Step 1: Obtain the source code ====&lt;br /&gt;
&lt;br /&gt;
JBroFuzz uses SubVersion with the repository being publicly available for download through anonymous access on sourceforge. There is a plan to move it the source to the OWASP Git repository, but until then, use the guidelines below. &lt;br /&gt;
&lt;br /&gt;
[[Image:010-JBroFuzz-Tutorial.png|Tortoise SVN Check out JBroFuzz Source Code]] &lt;br /&gt;
&lt;br /&gt;
Right click on the folder location where you want to download the source code and select: &lt;br /&gt;
&lt;br /&gt;
*SVN Checkout&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;URL of repository&amp;quot;, enter: &lt;br /&gt;
&amp;lt;pre&amp;gt;https://jbrofuzz.svn.sourceforge.net/svnroot/jbrofuzz&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
In the &amp;quot;Checkout directory&amp;quot;, enter the folder location of your choice, in this case: &lt;br /&gt;
&amp;lt;pre&amp;gt;C:\root\code\jbrofuzz&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
In the &amp;quot;Checkout Depth&amp;quot; select: &lt;br /&gt;
&lt;br /&gt;
*Fully recursive&lt;br /&gt;
&lt;br /&gt;
Untick &amp;quot;Omit Externals&amp;quot; (should be unticked by default) &lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Revision&amp;quot; select: &lt;br /&gt;
&lt;br /&gt;
*&amp;quot;Head revision&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Select OK. &lt;br /&gt;
&lt;br /&gt;
This process, once complete will checkout the entirety of the JBroFuzz source code from the SVN repository on sourceforge. &lt;br /&gt;
&lt;br /&gt;
==== Step 2: Configuring a JBroFuzz Project within Eclipse ====&lt;br /&gt;
&lt;br /&gt;
Having obtained the latest copy of the source code, the next step entails importing that source code within the Eclipse IDE. &lt;br /&gt;
&lt;br /&gt;
Within Eclipse, select: &lt;br /&gt;
&amp;lt;pre&amp;gt;File -&amp;amp;gt; New -&amp;amp;gt; Other&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
From the &amp;quot;New&amp;quot; panel that appears, select: &lt;br /&gt;
&amp;lt;pre&amp;gt;Java -&amp;amp;gt; Java Project from Existig Ant Buildfile&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
[[Image:011-JBroFuzz-Tutorial.png|Import JBroFuzz Code into Eclipse from Ant File]] &lt;br /&gt;
&lt;br /&gt;
Select &amp;quot;Next&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
In the next menu, under &amp;quot;Ant buildfile&amp;quot;, select &amp;quot;Browse&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Browse to the location where you have just (step 1) downloaded the source code and select the following file: &lt;br /&gt;
&lt;br /&gt;
*build.xml&lt;br /&gt;
&lt;br /&gt;
The build.xml file is an Ant build file that JBroFuzz uses. &lt;br /&gt;
&lt;br /&gt;
[[Image:012-JBroFuzz-Tutorial.png|Select the Ant File]] &lt;br /&gt;
&lt;br /&gt;
Selecting that file should have populated the &amp;quot;Project name&amp;quot; as jbrofuzz and also given you: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;javac&amp;quot; task found in target &amp;quot;compile&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
MAKE SURE TO TICK: &lt;br /&gt;
&lt;br /&gt;
*&amp;quot;Link to the buildfile in the filesystem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise eclipse will try to replicate the source code within your workspace and that makes the process a tiny bit more complicated when it comes to actually building JBroFuzz. &lt;br /&gt;
&lt;br /&gt;
Click &amp;quot;Finish&amp;quot; &lt;br /&gt;
&lt;br /&gt;
You will see the item &amp;quot;Building workspace (76%) on the bottom right hand side of Eclipse. Once that is complete, you should see the jbrofuzz project on the top left corner of the Package Explorer within Eclipse. &lt;br /&gt;
&lt;br /&gt;
==== Step 3: Building JBroFuzz ====&lt;br /&gt;
&lt;br /&gt;
Within the Package Explorer, expand the jbrofuzz project and double-click on the build.xml file. &lt;br /&gt;
&lt;br /&gt;
Right click on the &amp;quot;build [default]&amp;quot; task within the &amp;quot;Outline&amp;quot; window (typically seen on the right hand side) and select: &lt;br /&gt;
&amp;lt;pre&amp;gt;Run As -&amp;amp;gt; 1. Ant Build [Alt+Shift+X, Q]&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
If the build has been successful, a JBroFuzz.jar file within the the /jar folder would have been created. Following the path conventions above that should be in: &lt;br /&gt;
&amp;lt;pre&amp;gt;C:\root\code\jbrofuzz\jar\JBroFuzz.jar&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
[[Image:013-JBroFuzz-Tutorial.png|Building JBroFuzz within Eclipse]] &lt;br /&gt;
&lt;br /&gt;
=== How to Use JBroFuzz as a Fuzzing Library ===&lt;br /&gt;
&lt;br /&gt;
Quite often what you need to do in terms of fuzzing, far exceeds the User Interface (UI) of JBroFuzz. For this reason, a set of core fuzzing APIs have been made available that can be used for more advanced fuzzing scenarios. &lt;br /&gt;
&lt;br /&gt;
The JBroFuzz.jar standalone archive (made available with every release) carries a core fuzzing library that holds a number of key classes. These are located under: &lt;br /&gt;
&amp;lt;pre&amp;gt;org.owasp.jbrofuzz.core.*;&lt;br /&gt;
-Database.java&lt;br /&gt;
-Fuzzer.java&lt;br /&gt;
-FuzzerBigInteger.java&lt;br /&gt;
-NoSuchFuzzerException.java&lt;br /&gt;
-Prototype.java&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
The class of importance is Fuzzer.java. If you are going to use recursive iterators of great length, there is also FuzzerBigInteger.java. The difference between the two is that Fuzzer.java uses the primitive java data type long (up to 16^16 values) while FuzzerBigInteger.java uses java BigInteger to perform the counting. Naturally, the class FuzzerBigInteger is slower and takes more memory than the Fuzzer class. &lt;br /&gt;
&lt;br /&gt;
Within JBroFuzz a Fuzzer is an instance of a java Iterator. This implies that values can be accessed by simply calling the &amp;lt;code&amp;gt;next()&amp;lt;/code&amp;gt; method once an object has been made available. Typically, a call to &amp;lt;code&amp;gt;hasNext()&amp;lt;/code&amp;gt; should also be performed prior to avoid an exception being thrown. &lt;br /&gt;
&lt;br /&gt;
A Fuzzer can be obtained from the factory method &amp;lt;code&amp;gt;createFuzzer(String, int);&amp;lt;/code&amp;gt; available for every instance of the fuzzing Database. Ergo: &lt;br /&gt;
&lt;br /&gt;
==== A HelloFuzzer Example ====&lt;br /&gt;
&amp;lt;pre&amp;gt;Database myDatabase = new Database();&lt;br /&gt;
&lt;br /&gt;
Fuzzer myFuzzer = myDatabase.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 5);&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
So how do I use the API? Here is a simple HelloFuzzer (file called HelloFuzzer.java) example: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(Fuzzer f = fuzzDB.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 4); f.hasNext();) {&lt;br /&gt;
       // Get the next payload value...&lt;br /&gt;
       System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloFuzzer.java OWASP JBroFuzz Example 1&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
To compile the above use: &lt;br /&gt;
&amp;lt;pre&amp;gt;javac -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar&amp;quot; HelloFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This assumes that you are currently inside the directory where HelloFuzzer.java resides and that the JBroFuzz.jar is located two directories within your current location i.e. in jbrofuzz/jar. In order to run the above compiled HelloFuzzer class issue: &lt;br /&gt;
&amp;lt;pre&amp;gt;java -cp &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Note: The above 2 commands have been crafted in a win32 environment. The process for compiling and running HelloFuzzer.java above is the same in *nix machines. Simply replace the backslash &amp;quot;\&amp;quot; with &amp;quot;/&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
==== Fuzzing Payload Definitions ====&lt;br /&gt;
&lt;br /&gt;
Within the JBroFuzz.jar file, there is a file called fuzzers.jbrf that carries all the fuzzer definitions that you see in the UI payloads tab of JBroFuzz. To view a latest copy of this file you can browse the SVN repository of JBroFuzz: &lt;br /&gt;
&amp;lt;pre&amp;gt;http://jbrofuzz.svn.sourceforge.net/viewvc/jbrofuzz/tar/fuzzers.jbrf?view=log&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
A note here worth mentioning: Files ending in .jbrofuzz are session files saved by users while performing fuzzing operations. Files ending in .jbrf are JBroFuzz system files. Typical examples of .jbrf files are headers.jbrf, as well as fuzzers.jbrf. Both these use an internal proprietary format not to be confused with the .jbrofuzz file format. &lt;br /&gt;
&lt;br /&gt;
Fuzzers belong in categories (1 to many) and each fuzzer carries a set of payloads that define the alphabet of the fuzzer. &lt;br /&gt;
&lt;br /&gt;
Also, you have replacive and recursive fuzzers, zero fuzzers, etc. There are a number of different fuzzer categories. As an example of a fuzzer within the fuzzers.jbrf file, consider the hexadecimal fuzzer: &lt;br /&gt;
&amp;lt;pre&amp;gt;Fuzzer Name: Base16 (HEX)&lt;br /&gt;
Fuzzer Type: Recursive&lt;br /&gt;
Fuzzer Id:   031-B16-HEX&lt;br /&gt;
&lt;br /&gt;
Total Number of Payloads: 16&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Within the fuzzers.jbrf file this fuzzer is defined in plain-text format as follows: &lt;br /&gt;
&amp;lt;pre&amp;gt;R:031-B16-HEX:Base16 (HEX):16&lt;br /&gt;
&amp;amp;gt; Number Systems | Base | Recursive Fuzzers&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
a&lt;br /&gt;
b&lt;br /&gt;
c&lt;br /&gt;
d&lt;br /&gt;
e&lt;br /&gt;
f&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; There is very little preventing you from defining your own fuzzers within this file, by following the file format specified above. You can use the UI to see if they have been loaded successfully. &lt;br /&gt;
&lt;br /&gt;
Further to recursive and replacive fuzzers you also have zero fuzzers (i.e. a zero fuzzer of 1000 will just transmit 1000 requests as they are, without adding any payloads) double fuzzers, cross product fuzzers, etc. &lt;br /&gt;
&lt;br /&gt;
Notice the factory method Database.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 4) yielding: &amp;quot;I want a 4 digit recursive fuzzer (why because NUM-HEX is recursive in its definition, starts with R: instead of P:) of HEX digits.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Thus the above scenario would iterate through all the digits from 0000 to ffff. I wouldn't recommend using the above scenario for such trivial fuzzing capabilities; simply presented as an example of the inner workings of JBroFuzz.jar &lt;br /&gt;
&lt;br /&gt;
==== HelloFuzzer Refined ====&lt;br /&gt;
&lt;br /&gt;
A more detailed code breakdown of the above HelloFuzzer example can be found below: &lt;br /&gt;
&amp;lt;pre&amp;gt;/**&lt;br /&gt;
 * JBroFuzz API Examples 01&lt;br /&gt;
 *&lt;br /&gt;
 * JBroFuzz - A stateless network protocol fuzzer for web applications.&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (C) 2007, 2008, 2009 subere@uncon.org&lt;br /&gt;
 *&lt;br /&gt;
 * This file is part of the JBroFuzz API examples on how to use the &lt;br /&gt;
 * fuzzer libraries included in JBroFuzz.jar.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is free software: you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 * &lt;br /&gt;
 * You should have received a copy of the GNU General Public License&lt;br /&gt;
 * along with JBroFuzz.  If not, see &amp;amp;lt;http://www.gnu.org/licenses/&amp;amp;gt;.&lt;br /&gt;
 * Alternatively, write to the Free Software Foundation, Inc., 51 &lt;br /&gt;
 * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.&lt;br /&gt;
 * &lt;br /&gt;
 * Verbatim copying and distribution of this entire program file is &lt;br /&gt;
 * permitted in any medium without royalty provided this notice &lt;br /&gt;
 * is preserved. &lt;br /&gt;
 * &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import org.owasp.jbrofuzz.core.NoSuchFuzzerException;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Database;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Fuzzer; &lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;In JBroFuzz a Fuzzer is a java Iterator.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;In order to create a Fuzzer, use the factory method&lt;br /&gt;
 * Database.createFuzzer(String, int), passing as arguments&lt;br /&gt;
 * the Fuzzer ID and the specified length as a positive int.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;Be careful to check that the fuzzer ID (labelled as f_ID)&lt;br /&gt;
 * is actually an existing ID from the Database of Fuzzers.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;Expected Output:&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &amp;amp;lt;code&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: 00000&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: 00001&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  ...&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  (a total of 16^5 = 1048576 lines)&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  ...&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: ffffd&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: ffffe&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: fffff&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 * &amp;amp;lt;/code&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;For more information on the Database of Fuzzers, see the&lt;br /&gt;
 * HelloDatabase Class.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * @author subere@uncon.org&lt;br /&gt;
 * @version n/a&lt;br /&gt;
 */&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param args&lt;br /&gt;
	 */&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
		// You have to construct an instance of the fuzzers database&lt;br /&gt;
		Database fuzzDB = new Database();&lt;br /&gt;
		// You have to supply a valid fuzzer ID&lt;br /&gt;
		String f_ID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
		// You have to supply a (+)tive int&lt;br /&gt;
		int f_len = 5;&lt;br /&gt;
		&lt;br /&gt;
		try {&lt;br /&gt;
			&lt;br /&gt;
			for(Fuzzer f = fuzzDB.createFuzzer(f_ID, f_len); f.hasNext();) {&lt;br /&gt;
				&lt;br /&gt;
				// Get the next payload value...&lt;br /&gt;
				System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		} catch (NoSuchFuzzerException e) {&lt;br /&gt;
			&lt;br /&gt;
			System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
==== Hello Database of Fuzzers ====&lt;br /&gt;
&lt;br /&gt;
Having seen how to access a single Fuzzer through the createFuzzer() method available in the Database object. The next question that comes naturally is what are the Fuzzers that are available by default in JBroFuzz? &lt;br /&gt;
&lt;br /&gt;
To answer that, this example focuses more on the database component that we previously initialised, investigating the list of available methods that it offers. &lt;br /&gt;
&lt;br /&gt;
In JBroFuzz, all Fuzzers are stored in a Database object that you will be required to construct in order to access them. &lt;br /&gt;
&amp;lt;pre&amp;gt;/**&lt;br /&gt;
 * JBroFuzz API Examples 02&lt;br /&gt;
 *&lt;br /&gt;
 * JBroFuzz - A stateless network protocol fuzzer for web applications.&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (C) 2007, 2008, 2009 subere@uncon.org&lt;br /&gt;
 *&lt;br /&gt;
 * This file is part of the JBroFuzz API examples on how to use the &lt;br /&gt;
 * fuzzer libraries included in JBroFuzz.jar.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is free software: you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 * &lt;br /&gt;
 * You should have received a copy of the GNU General Public License&lt;br /&gt;
 * along with JBroFuzz.  If not, see &amp;amp;lt;http://www.gnu.org/licenses/&amp;amp;gt;.&lt;br /&gt;
 * Alternatively, write to the Free Software Foundation, Inc., 51 &lt;br /&gt;
 * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.&lt;br /&gt;
 * &lt;br /&gt;
 * Verbatim copying and distribution of this entire program file is &lt;br /&gt;
 * permitted in any medium without royalty provided this notice &lt;br /&gt;
 * is preserved. &lt;br /&gt;
 * &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import org.owasp.jbrofuzz.core.NoSuchFuzzerException;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Database;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Fuzzer; &lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;In JBroFuzz all Fuzzers are stored in a Database&lt;br /&gt;
 * object that you will be required to construct in order&lt;br /&gt;
 * to access them.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;Within the Database, each Fuzzer is a collection of &lt;br /&gt;
 * payloads, which carries a unique ID string value.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;Example ID values are the output of this program:&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &amp;amp;lt;code&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer ID is: 013-LDP-INJ&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	The name of the fuzzer is:			LDAP Injection&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	The id of the fuzzer is:			013-LDP-INJ&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	The of payloads it carries (it's alphabet) is:	20&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	It has as 1st payload:&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *		|&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer ID is: 018-XSS-4IE&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	The name of the fuzzer is:			XSS IE&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	The id of the fuzzer is:			018-XSS-4IE&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	The of payloads it carries (it's alphabet) is:	38&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	It has as 1st payload:&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *		&amp;amp;lt; img src=`x` onrerror= `&amp;amp;nbsp;;; alert(1) ` /&amp;amp;gt;&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * &amp;amp;lt;/code&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;Do not be confused between Prototypes and Fuzzers; &lt;br /&gt;
 * JBroFuzz uses Prototype objects to construct the Fuzzers&lt;br /&gt;
 * that get added into the Database upon initialisation.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;As a result, the getter methods available within a Database&lt;br /&gt;
 * object can carry the name of getAllPrototypeIDs and &lt;br /&gt;
 * getAllFuzzerIDs interchangebly.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * @author subere@uncon.org&lt;br /&gt;
 * @version n/a&lt;br /&gt;
 */&lt;br /&gt;
public class HelloDatabase {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param args&lt;br /&gt;
	 */&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
		// You have to construct an instance of the fuzzers database&lt;br /&gt;
		Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
		// Get a list of all the fuzzer IDs from the database&lt;br /&gt;
		String[] fuzzer_IDs = fuzzDB.getAllPrototypeIDs();&lt;br /&gt;
		&lt;br /&gt;
		System.out.println(&amp;quot;The fuzzer IDs found are:&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		for(String fuzzerID&amp;amp;nbsp;: fuzzer_IDs) {&lt;br /&gt;
			&lt;br /&gt;
			System.out.println(&amp;quot;The fuzzer ID is: &amp;quot; + fuzzerID);&lt;br /&gt;
			&lt;br /&gt;
			// We pass of length of 1, irrelevant if we are&lt;br /&gt;
			// just going to access the first payload&lt;br /&gt;
			// of the fuzzer&lt;br /&gt;
			Fuzzer fuzzer;&lt;br /&gt;
			try {&lt;br /&gt;
				&lt;br /&gt;
				fuzzer = fuzzDB.createFuzzer(fuzzerID, 1);&lt;br /&gt;
				// Normally you should check for fuzzer.hasNext()				&lt;br /&gt;
				String payload = fuzzer.next();&lt;br /&gt;
				&lt;br /&gt;
				System.out.println(&amp;quot;\tThe name of the fuzzer is:\t\t\t&amp;quot; + fuzzer.getName() );&lt;br /&gt;
				System.out.println(&amp;quot;\tThe id of the fuzzer is:\t\t\t&amp;quot; + fuzzer.getId() );&lt;br /&gt;
				System.out.println(&amp;quot;\tThe of payloads it carries (it's alphabet) is:\t&amp;quot; + fuzzDB.getSize(fuzzerID));&lt;br /&gt;
				System.out.println(&amp;quot;\tIt has as 1st payload:\n\t\t&amp;quot; + payload );&lt;br /&gt;
&lt;br /&gt;
			} catch (NoSuchFuzzerException e) {&lt;br /&gt;
				System.out.println(&amp;quot;Could not find the specified fuzzer!&amp;quot;);&lt;br /&gt;
				System.out.println(&amp;quot;Going to print all the fuzzer IDs I know:&amp;quot;);&lt;br /&gt;
				// old vs new for loop&amp;amp;nbsp;:)&lt;br /&gt;
				// in case of an error, print just the &lt;br /&gt;
				// fuzzer IDs, accessed from the DB&lt;br /&gt;
				for(int j = 0; j &amp;amp;lt; fuzzer_IDs.length; j++) {&lt;br /&gt;
					System.out.println(&amp;quot;The fuzzer ID is: &amp;quot; + fuzzer_IDs[j]);&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
==== Methods available within the Fuzzer Class ====&lt;br /&gt;
&lt;br /&gt;
A final example of this section, involves seeing the usage of all the method calls available in the Fuzzer.java class &lt;br /&gt;
&amp;lt;pre&amp;gt;/**&lt;br /&gt;
 * JBroFuzz API Examples 03&lt;br /&gt;
 *&lt;br /&gt;
 * JBroFuzz - A stateless network protocol fuzzer for web applications.&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (C) 2007, 2008, 2009 subere@uncon.org&lt;br /&gt;
 *&lt;br /&gt;
 * This file is part of the JBroFuzz API examples on how to use the &lt;br /&gt;
 * fuzzer libraries included in JBroFuzz.jar.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is free software: you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 * &lt;br /&gt;
 * You should have received a copy of the GNU General Public License&lt;br /&gt;
 * along with JBroFuzz.  If not, see &amp;amp;lt;http://www.gnu.org/licenses/&amp;amp;gt;.&lt;br /&gt;
 * Alternatively, write to the Free Software Foundation, Inc., 51 &lt;br /&gt;
 * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.&lt;br /&gt;
 * &lt;br /&gt;
 * Verbatim copying and distribution of this entire program file is &lt;br /&gt;
 * permitted in any medium without royalty provided this notice &lt;br /&gt;
 * is preserved. &lt;br /&gt;
 * &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import org.owasp.jbrofuzz.core.NoSuchFuzzerException;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Database;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Fuzzer; &lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;Example iterating through all the methods available&lt;br /&gt;
 * in the Fuzzer Object and their respective outputs.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * @author subere@uncon.org&lt;br /&gt;
 * @version n/a&lt;br /&gt;
 */&lt;br /&gt;
public class IndigoFuzzerTests {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param args&lt;br /&gt;
	 */&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
		// You have to construct an instance of the fuzzers database&lt;br /&gt;
		Database fuzzDB = new Database();&lt;br /&gt;
		// You have to supply a valid fuzzer ID&lt;br /&gt;
		String f_ID = &amp;quot;033-B08-OCT&amp;quot;;&lt;br /&gt;
		// You have to supply a (+)tive int&lt;br /&gt;
		int f_len = 5;&lt;br /&gt;
&lt;br /&gt;
		try {&lt;br /&gt;
			&lt;br /&gt;
			Fuzzer f = fuzzDB.createFuzzer(f_ID, f_len);&lt;br /&gt;
&lt;br /&gt;
			while(f.hasNext()) {&lt;br /&gt;
				&lt;br /&gt;
				// Could do this via reflection, but..&lt;br /&gt;
				f.next();&lt;br /&gt;
				// System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
				System.out.println(&amp;quot; The maximum value is: &amp;quot; + f.getMaximumValue());&lt;br /&gt;
&lt;br /&gt;
				System.out.println(&amp;quot; The current value is: &amp;quot; + f.getCurrectValue());&lt;br /&gt;
				&lt;br /&gt;
&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		} catch (NoSuchFuzzerException e) {&lt;br /&gt;
			&lt;br /&gt;
			System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
=== Advanced Fuzzing with the JBroFuzz Library ===&lt;br /&gt;
&lt;br /&gt;
This section covers more advanced APIs that are available under the '''org.owasp.jbrofuzz.core package'''. It should be noted that some of these classes and their corresponding functionality are not used by the JBroFuzz program application. Instead, they are made available for incorporation into other java code that you have perhaps written that requires more specialized type of fuzzing. &lt;br /&gt;
&lt;br /&gt;
==== Fuzzing Really Long Values with Big Integer ====&lt;br /&gt;
&lt;br /&gt;
As stated previously, within JBroFuzz a Fuzzer is a java Iterator. This implies that while fuzzing, we typically keep track of a counter representing the value that we are currently on. Consider the example of HelloFuzzer.java, above: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(Fuzzer f = fuzzDB.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 4); f.hasNext();) {&lt;br /&gt;
       // Get the next payload value...&lt;br /&gt;
       System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloFuzzer.java OWASP JBroFuzz Example 1&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
If we compile this program: &lt;br /&gt;
&amp;lt;pre&amp;gt;javac -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar&amp;quot; HelloFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
and run it: &lt;br /&gt;
&amp;lt;pre&amp;gt;java -cp &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
We are going to see output similar to: &lt;br /&gt;
&amp;lt;pre&amp;gt; The fuzzer payload is: 0000&lt;br /&gt;
 ... (output omitted)&lt;br /&gt;
 The fuzzer payload is: fffd&lt;br /&gt;
 The fuzzer payload is: fffe&lt;br /&gt;
 The fuzzer payload is: ffff&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Now what if we want a hexadecimal fuzzer of length not 4, but, say, 24. Let's try compile and run the above program with a length of 24. Changing the line to: &lt;br /&gt;
&amp;lt;pre&amp;gt;     for(Fuzzer f = fuzzDB.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 24); f.hasNext();) {&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Running this modified version of HelloFuzzer.java, yields: &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;gt;javac -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer.java&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt;java -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Nothing! What is actually happening is JBroFuzz is figuring out that the specified length of the Fuzzer we are about to create is far greater than that of the long java data type. As a result, the Fuzzer is not even entering the iteration mode that is typically expected with methods next() and hasNext(). &lt;br /&gt;
&lt;br /&gt;
That's all great, but we still want a hexadecimal fuzzer, 24 digits long going from: &lt;br /&gt;
&amp;lt;pre&amp;gt;000000000000000000000000&lt;br /&gt;
...to...&lt;br /&gt;
ffffffffffffffffffffffff&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
For this JBroFuzz offers another type of Fuzzer class, that of FuzzerBigInteger. Let's modify the critical line within the original HelloFuzzer.java program that we had: &lt;br /&gt;
&amp;lt;pre&amp;gt;     for(FuzzerBigInteger f = fuzzDB.createFuzzerBigInteger(&amp;quot;031-B16-HEX&amp;quot;, 24); f.hasNext();) {&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
With the entire program becoming: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(FuzzerBigInteger f = fuzzDB.createFuzzerBigInteger(&amp;quot;031-B16-HEX&amp;quot;, 24); f.hasNext();) {&lt;br /&gt;
       // Get the next payload value...&lt;br /&gt;
       System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloFuzzer.java OWASP JBroFuzz Example 1&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Compiling and running this program yields: &lt;br /&gt;
&amp;lt;pre&amp;gt; The fuzzer payload is: 000000000000000000000000&lt;br /&gt;
 The fuzzer payload is: 000000000000000000000001&lt;br /&gt;
 ... (output omitted)&lt;br /&gt;
 The fuzzer payload is: 00000000000000000001a982&lt;br /&gt;
 ... (output omitted)&lt;br /&gt;
 The fuzzer payload is: 00000000000000000001a982&lt;br /&gt;
 The fuzzer payload is: ffffffffffffffffffffffff&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
There are limitations to this class, as governed by the BigInteger class itself. Further information can be found at: &lt;br /&gt;
&amp;lt;pre&amp;gt;http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigInteger.html&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Still, on a virtual windows xp machine with 256Mb of RAM the above code had no problem running to completion. It took some time though.. Characteristics of the windows machine while this iteration was ongoing: The CPU was being utilised at 100% and memory usage was constant at 212 Mb. Overall, a clean sheet for FuzzerBigInteger.java. &lt;br /&gt;
&lt;br /&gt;
==== Using the Power Fuzzer API ====&lt;br /&gt;
&lt;br /&gt;
With web applications, it is often that you find yourself re-using part of, or the entirety of a fuzzing payload in more than one location, as part of the GET, POST, or any other type of request you submit. &lt;br /&gt;
&lt;br /&gt;
For this reason, JBroFuzz offers the PowerFuzzer class: A type of iterator for which you can specify how many copies of the payload you require in each request. &lt;br /&gt;
&lt;br /&gt;
Let's consider the following trivial scenario. You are in need of all hexadecimal values, which are 4-digits long (i.e. 0000 to FFFF) and you are in need of these 5 times for each request. &lt;br /&gt;
&lt;br /&gt;
This scenario is trivial, because typically you can assign the fuzzing payload (i.e. the value you get back from Fuzzer.next() ) to a String variable and re-use it as many times as you see fit. &lt;br /&gt;
&amp;lt;pre&amp;gt; Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzerID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 int length = 4;&lt;br /&gt;
 ....&lt;br /&gt;
     for(Fuzzer f = fuzzDB.createFuzzer(fuzzerID, length); f.hasNext();) {&lt;br /&gt;
          String payload = f.next();&lt;br /&gt;
          ....&lt;br /&gt;
     }&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Using the PowerFuzzer.class, the following HelloPowerFuzzer.java program can be created: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloPowerFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzerID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 int length = 4;&lt;br /&gt;
 int power = 5;&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(PowerFuzzer f = fuzzDB.createPowerFuzzer(fuzzerID, length, power); f.hasNext();) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] identicalElements = f.nextPower();&lt;br /&gt;
&lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem&amp;amp;nbsp;: identicalElements) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloPowerFuzzer.java OWASP JBroFuzz Power Fuzzer Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This program would output the following; no rocket science here: &lt;br /&gt;
&amp;lt;pre&amp;gt;....&lt;br /&gt;
 I have 5 elements: 4817 4817 4817 4817 4817&lt;br /&gt;
 I have 5 elements: 4818 4818 4818 4818 4818&lt;br /&gt;
 I have 5 elements: 4819 4819 4819 4819 4819&lt;br /&gt;
 I have 5 elements: 481a 481a 481a 481a 481a&lt;br /&gt;
 I have 5 elements: 481b 481b 481b 481b 481b&lt;br /&gt;
 I have 5 elements: 481c 481c 481c 481c 481c&lt;br /&gt;
 I have 5 elements: 481d 481d 481d 481d 481d&lt;br /&gt;
 I have 5 elements: 481e 481e 481e 481e 481e&lt;br /&gt;
 I have 5 elements: 481f 481f 481f 481f 481f&lt;br /&gt;
 I have 5 elements: 4820 4820 4820 4820 4820&lt;br /&gt;
 I have 5 elements: 4821 4821 4821 4821 4821&lt;br /&gt;
 I have 5 elements: 4822 4822 4822 4822 4822&lt;br /&gt;
 I have 5 elements: 4823 4823 4823 4823 4823&lt;br /&gt;
 I have 5 elements: 4824 4824 4824 4824 4824&lt;br /&gt;
 I have 5 elements: 4825 4825 4825 4825 4825&lt;br /&gt;
 I have 5 elements: 4826 4826 4826 4826 4826&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Now imagine you need to change the number of elements you obtain back every time. For every second request, you need to obtain back two identical payloads, for every third request, you need to obtain back three payloads and for every fourth request, you need to obtain back four payloads. &lt;br /&gt;
&lt;br /&gt;
The PowerFuzzer class, with the corresponding method '''setPower(int)''' allows you to set how many identical elements you obtain back, without having to worry about the length argument. Below is a class that solves the above scenario: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloPowerFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzerID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 int length = 4;&lt;br /&gt;
 int power = 5;&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(PowerFuzzer f = fuzzDB.createPowerFuzzer(fuzzerID, length, power); f.hasNext();) {&lt;br /&gt;
	 &lt;br /&gt;
	   int currentValue = (int) f.getCurrentValue(); &lt;br /&gt;
	   currentValue&amp;amp;nbsp;%= 4;&lt;br /&gt;
	   switch (currentValue) {&lt;br /&gt;
			case 0: f.setPower(1); break;&lt;br /&gt;
			case 1: f.setPower(2); break;&lt;br /&gt;
			case 2: f.setPower(3); break;&lt;br /&gt;
			default: f.setPower(4); break;&lt;br /&gt;
	   }&lt;br /&gt;
	   &lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] identicalElements = f.nextPower();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem&amp;amp;nbsp;: identicalElements) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloPowerFuzzer.java&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This class has as output: &lt;br /&gt;
&amp;lt;pre&amp;gt; ....&lt;br /&gt;
 I have 1 elements: 22a8&lt;br /&gt;
 I have 2 elements: 22a9 22a9&lt;br /&gt;
 I have 3 elements: 22aa 22aa 22aa&lt;br /&gt;
 I have 4 elements: 22ab 22ab 22ab 22ab&lt;br /&gt;
 I have 1 elements: 22ac&lt;br /&gt;
 I have 2 elements: 22ad 22ad&lt;br /&gt;
 I have 3 elements: 22ae 22ae 22ae&lt;br /&gt;
 I have 4 elements: 22af 22af 22af 22af&lt;br /&gt;
 I have 1 elements: 22b0&lt;br /&gt;
 I have 2 elements: 22b1 22b1&lt;br /&gt;
 I have 3 elements: 22b2 22b2 22b2&lt;br /&gt;
 I have 4 elements: 22b3 22b3 22b3 22b3&lt;br /&gt;
 I have 1 elements: 22b4&lt;br /&gt;
 I have 2 elements: 22b5 22b5&lt;br /&gt;
 I have 3 elements: 22b6 22b6 22b6&lt;br /&gt;
 I have 4 elements: 22b7 22b7 22b7 22b7&lt;br /&gt;
 I have 1 elements: 22b8&lt;br /&gt;
 I have 2 elements: 22b9 22b9&lt;br /&gt;
 ....&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Naturally, the algorithm of the number of elements required can vary based on any number of parameters. The PowerFuzzer class gives you a quick way to control the number of identical payloads you obtain back, without having to worry about creating a data type to store them in. &lt;br /&gt;
&lt;br /&gt;
==== Using the Double Fuzzer API ====&lt;br /&gt;
&lt;br /&gt;
In some cases of fuzzing web applications, a requirement to fuzz two (or more) locations part of the request being submitted to the web server becomes apparent. &lt;br /&gt;
&lt;br /&gt;
The DoubleFuzzer class allows you to create a fuzzer based on two prototype definitions. Similarly to instantiating a Fuzzer through a prototype and a given length, with a DoubleFuzzer, we pass two prototype definitions and two lengths. The corresponding method call available within the '''Database''' class of org.owasp.jbrofuzz.core is: &lt;br /&gt;
&amp;lt;pre&amp;gt;public DoubleFuzzer createDoubleFuzzer(String id1, int length1,  &lt;br /&gt;
								String id2, int length2) throws NoSuchFuzzerException {&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Let's cross-breed some fuzzers, see what results we get back during an iteration. &lt;br /&gt;
&lt;br /&gt;
The first example below, uses two hexadecimal fuzzers of different lengths, as specified by the variables: &lt;br /&gt;
&amp;lt;pre&amp;gt;String fuzzID1 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
String fuzzID2 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
int length1 = 4;&lt;br /&gt;
int length2 = 2;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
As the double fuzzer iteration is taking place, the second fuzzer, defined by the fuzzID2 &amp;amp;amp; length2 loops, starting from 00 and going all the way up to FF. An example output is: &lt;br /&gt;
&amp;lt;pre&amp;gt; I have 2 elements: fefb fb&lt;br /&gt;
 I have 2 elements: fefc fc&lt;br /&gt;
 I have 2 elements: fefd fd&lt;br /&gt;
 I have 2 elements: fefe fe&lt;br /&gt;
 I have 2 elements: feff ff&lt;br /&gt;
 I have 2 elements: ff00 00&lt;br /&gt;
 I have 2 elements: ff01 01&lt;br /&gt;
 I have 2 elements: ff02 02&lt;br /&gt;
 I have 2 elements: ff03 03&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
The complete code listing of HelloDoubleFuzzer.java is: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloDoubleFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzID1 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 String fuzzID2 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 int length1 = 4;&lt;br /&gt;
 int length2 = 2;&lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
     DoubleFuzzer f = fuzzDB.createDoubleFuzzer(fuzzID1, length1, fuzzID2, length2);&lt;br /&gt;
	 &lt;br /&gt;
     while( f.hasNext() ) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] payloads = f.next();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem&amp;amp;nbsp;: payloads) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloDoubleFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
That's simple enough; now let's cross-breed something a bit more exotic: Imagine a 3-digit octal ID value [000 - 777] being submitted inline with, say, a parameter that we want to test for Cross-Site Scripting (XSS). Let's adjust the program above with the corresponding fuzzer IDs of these fuzzers. Remember all the IDs of all the fuzzers can be found in the fuzzers.jbrf file within JBroFuzz.jar: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloDoubleFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzID1 = &amp;quot;033-B08-OCT&amp;quot;;&lt;br /&gt;
 String fuzzID2 = &amp;quot;019-XSS-GEK&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 int length1 = 3;&lt;br /&gt;
 int length2 = 1;&lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
     DoubleFuzzer f = fuzzDB.createDoubleFuzzer(fuzzID1, length1, fuzzID2, length2);&lt;br /&gt;
	 &lt;br /&gt;
     while( f.hasNext() ) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] payloads = f.next();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem&amp;amp;nbsp;: payloads) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloDoubleFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
The output from this program is: &lt;br /&gt;
&amp;lt;pre&amp;gt; I have 2 elements: 000 (1?(1?{a:1?&amp;quot;&amp;quot;[1?&amp;quot;ev\a\l&amp;quot;:0](1?&amp;quot;\a\lert&amp;quot;:0):0}:0).a:0)[1?&amp;quot;\c\a\l\l&amp;quot;:0](content,1?&amp;quot;x\s\s&amp;quot;:0)&lt;br /&gt;
 I have 2 elements: 001 &amp;amp;lt;STYLE TYPE=&amp;quot;text/javascript&amp;quot;&amp;amp;gt;alert('XSS');&amp;amp;lt;/STYLE&amp;amp;gt;&lt;br /&gt;
 I have 2 elements: 002 &amp;amp;lt;SCRIPT SRC=http://ha.ckers.org/xss.js&lt;br /&gt;
 I have 2 elements: 003 &amp;amp;lt;A HREF=&amp;quot;http://google:ha.ckers.org&amp;quot;&amp;amp;gt;XSS&amp;amp;lt;/A&amp;amp;gt;&lt;br /&gt;
 I have 2 elements: 004 &amp;amp;lt;A HREF=&amp;quot;http://ha.ckers.org@google&amp;quot;&amp;amp;gt;XSS&amp;amp;lt;/A&amp;amp;gt;&lt;br /&gt;
 I have 2 elements: 005 &amp;amp;lt;A HREF=&amp;quot;//google&amp;quot;&amp;amp;gt;XSS&amp;amp;lt;/A&amp;amp;gt;&lt;br /&gt;
 ....&lt;br /&gt;
 ...&lt;br /&gt;
 ..&lt;br /&gt;
 .&lt;br /&gt;
 ..&lt;br /&gt;
 ...&lt;br /&gt;
 ....&lt;br /&gt;
 I have 2 elements: 774 &amp;amp;lt;SCRIPT SRC=http://ha.ckers.org/xss.js&lt;br /&gt;
 I have 2 elements: 775 &amp;amp;lt;A HREF=&amp;quot;http://google:ha.ckers.org&amp;quot;&amp;amp;gt;XSS&amp;amp;lt;/A&amp;amp;gt;&lt;br /&gt;
 I have 2 elements: 776 &amp;amp;lt;A HREF=&amp;quot;http://ha.ckers.org@google&amp;quot;&amp;amp;gt;XSS&amp;amp;lt;/A&amp;amp;gt;&lt;br /&gt;
 I have 2 elements: 777 &amp;amp;lt;A HREF=&amp;quot;//google&amp;quot;&amp;amp;gt;XSS&amp;amp;lt;/A&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
With the list stopping iterating at the last element of the greatest of the two fuzzers. &lt;br /&gt;
&lt;br /&gt;
==== Using the Cross Product Fuzzer API ====&lt;br /&gt;
&lt;br /&gt;
A final case of a special Double Fuzzer is the the Cross Product Fuzzer of the payloads of two fuzzers. This type of fuzzing is virtually encountered in username/password login form on the Internet. Let's work on this by example. &lt;br /&gt;
&lt;br /&gt;
Consider your home network router. You recall changing the default password to one of the typical password values that you use. Also, you are not 100% certain about the username for the router either, it is one of the typical admin, user, administrator, root, yoda type values, but you cannot recall which one. Needless to say, you don't know what the username, or password actually is. &lt;br /&gt;
&lt;br /&gt;
So in a mini brute-forcing attack scenario, you have the following list of usernames, out of which one is valid: &lt;br /&gt;
&amp;lt;pre&amp;gt;admin&lt;br /&gt;
administrator&lt;br /&gt;
Administrator&lt;br /&gt;
root&lt;br /&gt;
adminUser&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Also you know that the password is one of the following (Top 10 Threadwatch 2007 passwords): &lt;br /&gt;
&amp;lt;pre&amp;gt;password&lt;br /&gt;
123456&lt;br /&gt;
qwerty&lt;br /&gt;
abc123&lt;br /&gt;
letmein&lt;br /&gt;
monkey&lt;br /&gt;
myspace1&lt;br /&gt;
password1&lt;br /&gt;
blink182&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
The set that contains every possible combination of the two sets is the Cross Product of the list of usernames, times the list of passwords. So manually, (as most people do while locking themselves out) you would try, popular combinations of the above, starting with: &lt;br /&gt;
&amp;lt;pre&amp;gt;admin password&lt;br /&gt;
admin 123456&lt;br /&gt;
admin qwerty&lt;br /&gt;
....&lt;br /&gt;
admin blink182&lt;br /&gt;
administrator password&lt;br /&gt;
administrator 123456&lt;br /&gt;
administrator qwerty&lt;br /&gt;
....&lt;br /&gt;
adminUser password1&lt;br /&gt;
adminUser blink182&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Thus the total number of attempts would be (number of usernames) x (number of passwords). No rocket science here. &lt;br /&gt;
&lt;br /&gt;
JBroFuzz introduces the CrossProductFuzzer class capable of iterating through the cross product of two fuzzers. Let's put it into code; the following program provides a list of all 2-digit octal numbers with every 2-digit binary number. A total of (8 x 8) x (2 x 2) = 256 values. &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloCrossFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzID1 = &amp;quot;033-B08-OCT&amp;quot;;&lt;br /&gt;
 String fuzzID2 = &amp;quot;034-B02-BIN&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 int length1 = 2;&lt;br /&gt;
 int length2 = 2;&lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
     CrossProductFuzzer f = fuzzDB.createCrossFuzzer(fuzzID1, length1, fuzzID2, length2);&lt;br /&gt;
	 &lt;br /&gt;
     while( f.hasNext() ) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] payloads = f.next();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem&amp;amp;nbsp;: payloads) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloCrossFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This program has as output: &lt;br /&gt;
&amp;lt;pre&amp;gt; I have 2 elements: 00 00&lt;br /&gt;
 ...&lt;br /&gt;
 ..&lt;br /&gt;
 .&lt;br /&gt;
 ..&lt;br /&gt;
 ...&lt;br /&gt;
 I have 2 elements: 74 00&lt;br /&gt;
 I have 2 elements: 74 01&lt;br /&gt;
 I have 2 elements: 74 10&lt;br /&gt;
 I have 2 elements: 74 11&lt;br /&gt;
 I have 2 elements: 75 00&lt;br /&gt;
 I have 2 elements: 75 01&lt;br /&gt;
 I have 2 elements: 75 10&lt;br /&gt;
 I have 2 elements: 75 11&lt;br /&gt;
 I have 2 elements: 76 00&lt;br /&gt;
 I have 2 elements: 76 01&lt;br /&gt;
 I have 2 elements: 76 10&lt;br /&gt;
 I have 2 elements: 76 11&lt;br /&gt;
 I have 2 elements: 77 00&lt;br /&gt;
 I have 2 elements: 77 01&lt;br /&gt;
 I have 2 elements: 77 10&lt;br /&gt;
 I have 2 elements: 77 11&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
You can substitute any list of fuzzer ID to the IDs you use in this program. &lt;br /&gt;
&lt;br /&gt;
'''Remember!''' The total number of payloads must not exceed that of the the maximum value of the long primitive java data type ''Long.MAX_VALUE'' which is 2^63 - 1. If you are in need of more than that payloads, you would have to use the big integer implementation of the Fuzzer class, namely: FuzzerBigInteger.java. &lt;br /&gt;
&lt;br /&gt;
== Graphing with JBroFuzz ==&lt;br /&gt;
&lt;br /&gt;
Once a fuzzing session has completed, JBroFuzz offers the ability to generate a number of graphs, using various metrics. This section investigates how to further the graphing functionality available with the application. &lt;br /&gt;
&lt;br /&gt;
=== Customizing the logo on each Graph ===&lt;br /&gt;
&lt;br /&gt;
As of version 2.0, all image icons within JBroFuzz are located within the /icons directory of the application. The particular transparent image file displayed on top right part of the graphs is named: &lt;br /&gt;
&amp;lt;pre&amp;gt;/icons/owasp-med.png&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This file is a 64 x 64 PNG image file. You can replace it with your own file, as follows: &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;gt;ls -l JBroFuzz.jar&lt;br /&gt;
-rw-rw-rw-   1 user     group     4033612 Feb 15 12:33 JBroFuzz.jar&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt;unzip -oq JBroFuzz.jar&lt;br /&gt;
&amp;amp;gt;cd icons&lt;br /&gt;
&amp;amp;gt;mv owasp-med.png file64x64-file.png&lt;br /&gt;
&amp;amp;gt;cd ..&lt;br /&gt;
&amp;amp;gt;zip -r JBroFuzz.zip *&lt;br /&gt;
&amp;amp;gt;mv JBroFuzz.zip JBroFuzz.jar&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This enables you to have your own (company logo) on JBroFuzz graphs. Further to this, a number of other customization options are available, by right clicking on each of the graph generated. &lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP_JBroFuzz]]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=File:020-JBroFuzz-Tutorial.png&amp;diff=80733</id>
		<title>File:020-JBroFuzz-Tutorial.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=File:020-JBroFuzz-Tutorial.png&amp;diff=80733"/>
				<updated>2010-03-30T15:58:14Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: A list of 94 different printable ASCII character responses, based on the fuzzing for what characters are allowed through.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A list of 94 different printable ASCII character responses, based on the fuzzing for what characters are allowed through.&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_JBroFuzz_Tutorial&amp;diff=80732</id>
		<title>OWASP JBroFuzz Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_JBroFuzz_Tutorial&amp;diff=80732"/>
				<updated>2010-03-30T15:50:54Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: /* What characters are allowed through? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Introduction  ==&lt;br /&gt;
&lt;br /&gt;
''“If you can’t fuzz with JBroFuzz, you probably do not want to fuzz!”'' &lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;Old JBroFuzz Motto &amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; The art of teaching, Mark Van Doren said, is the art of assisting discovery. Fuzzing is a representative discipline towards assisting the discovery of security vulnerabilities, that is just beginning to come of age. Over the last two years, through continuous development, JBroFuzz has attempted to expose the intrinsic beauty of the subject: Constantly submit a vast amount of payloads to a service, device or prompt, waiting for the one response that makes all the difference. This is the mentality that JBroFuzz embraces and attempts to offer back to security professionals. &lt;br /&gt;
&lt;br /&gt;
Fuzzing as a concept goes beyond a conventional work flow or a standard methodology. I would argue that to know how to fuzz well, is to master a new language. Thus, similar to the process of learning a programming (or foreign) language, there are three things you must master: &lt;br /&gt;
&lt;br /&gt;
• Grammar: How fuzzing as a process is structured&amp;lt;br&amp;gt; • Vocabulary: How to name fuzzing concepts you want to use&amp;lt;br&amp;gt; • Usage: Ways of achieving everyday effective results with fuzzing&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:001-JBroFuzz-Tutorial.jpg|right|300px|JBroFuzz Splash Screen]]From the pre-existing information available for JBroFuzz, this tutorial focuses on usage: How to best put a fuzzing tool to good use, either via the UI, or using APIs that ''JBroFuzz.jar'' is constituted of. As a result, this document has a small requirement as a caveat; you need to have a beginner level understanding of the Java programming language in order to understand some sections. &lt;br /&gt;
&lt;br /&gt;
There are a number of working examples described here within, which '''grep''' for statements such as “''&amp;lt;nowiki&amp;gt;public static void main(String[] args)&amp;lt;/nowiki&amp;gt;''”. The majority of the content relates to reviewing these examples and putting the Java syntax into a fuzzing perspective. &lt;br /&gt;
&lt;br /&gt;
To summarise, this tutorial focuses on customary and effective usage of fuzzing through the JBroFuzz Java APIs and the respective UI. It is targeting (without attacking them) web applications. Without further redo, let’s get fuzzing! &lt;br /&gt;
&lt;br /&gt;
== JBroFuzz Basic Functionality  ==&lt;br /&gt;
&lt;br /&gt;
This section carries a number of basic fuzzing examples to get you started with JBroFuzz. Overall, even though the actions performed to not produce any amazing fuzzing results, it serves as a starting point in understanding how to perform particular fuzzing operations on web applications. &lt;br /&gt;
&lt;br /&gt;
=== 'Hello Google!' (forget 'Hello World')  ===&lt;br /&gt;
&lt;br /&gt;
As the traditional first program that you learn when indulging in a new programming language, 'Hello World!' represents the norm for understanding the basic output operations and syntax (let alone compiler and execution behaviour) of the language in question. &lt;br /&gt;
&lt;br /&gt;
As with most web application security related tools, when I am given the responsibility to run them, often in order to understand how they work, I would first craft a legitimate, single request to a trusted (to be up and behaving) popular Internet location. Needless, to say this request more than on occasion finds itself on Google servers. &lt;br /&gt;
&lt;br /&gt;
So 'Hello World!' for programming languages seems to transform to 'Hello Google!' for understanding how web application security related tools work. Let us see, how JBroFuzz does it. &lt;br /&gt;
&lt;br /&gt;
• Double-click on JBroFuzz and browse to the 'Fuzzing' tab &lt;br /&gt;
&lt;br /&gt;
JBroFuzz is constituted of tabs, typically located in the bottom or top (if you bother to change the settings) of the main window. &lt;br /&gt;
&lt;br /&gt;
The 'Fuzzing' tab is where you craft your request message to a particular host. Once that is in place, you can select any part of the request and proceed into adding any number of payloads. We shall see how in later sections. &lt;br /&gt;
&lt;br /&gt;
• In the 'URL' field type: http://www.google.com/ http://www.google.com &lt;br /&gt;
&lt;br /&gt;
Unlike conventional URLs, the URL field in JBroFuzz is only used for the underlying protocol (HTTP or HTTPS), host name (e.g. www.yahoo.com) and (optionally) port number. &lt;br /&gt;
&lt;br /&gt;
All remaining information pasted or typed into the 'URL' field will be ignored; you are expected to enter it in the 'Request' field below. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Still, if you want to just copy-paste a URL from a browser, hit [Ctrl+L] while you are not fuzzing, paste the URL value that you have copied from a browser and JBroFuzz will automatically do the work for you. &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Examples of valid URL values to be put in the &lt;br /&gt;
&lt;br /&gt;
Treat the 'URL' and 'Request' fields as the two stages of a 'telnet' session on port 80; you are effectively using the 'URL' field to specify the equivalent of: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;amp;gt;telnet www.google.com 8088&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
As equivalent to: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;http://www.google.com:8088&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
or in the case of HTTPS: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://www.google.com:8088&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Naturally, default ports for HTTP is 80 and HTTPS is 443. &lt;br /&gt;
&lt;br /&gt;
• In the 'Request' field type: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET / HTTP/1.0&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
And press 'Enter' twice &lt;br /&gt;
&lt;br /&gt;
This is where the body of the message you are sending is to be placed. So anything obeying HTTP/S protocol, such as GET and POST requests, header fields and/or HTML content should be included here. &lt;br /&gt;
&lt;br /&gt;
As part of the process of fuzzing web applications with JBroFuzz you need to have done your homework, in terms of providing a base request message. This message is what will be used later on to add payloads to particular sections of the request. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;• Hit 'Start' [Ctrl+Enter]&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
This will instigate the process of sending a single request to the specified host on a given (or default) port, over HTTP or HTTPS. &lt;br /&gt;
&lt;br /&gt;
Once a connection has been established JBroFuzz will proceed to submit the message you have typed into the 'Request' field. &lt;br /&gt;
&lt;br /&gt;
Finally, JBroFuzz will log all data sent and received into a file; accessing this file is typically a process of double clicking on the output line on the table at the bottom section of the 'Fuzzing' tab. &lt;br /&gt;
&lt;br /&gt;
You should see a response received in the bottom part of the 'Fuzzing' panel. Double click (or right click for more options) to see the information exchanged; typically this would be a 302 redirect pointing you to another location. Congratulations, you have just said &amp;quot;Hello&amp;quot; to Google! &lt;br /&gt;
&lt;br /&gt;
[[Image:002-JBroFuzz-Tutorial.png|500px|JBroFuzz Hello Google!]] &lt;br /&gt;
&lt;br /&gt;
Now this would typically be enough under RFC rules, to get a response back; but damn all the bots out here, most websites require further information to respond back. So, in the 'Request' field let's pretend to be a (kind of) legitimate browser by typing: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET / HTTP/1.0&amp;lt;br&amp;gt; Host: www.google.com&amp;lt;br&amp;gt; User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729) JBroFuzz/1.5&amp;lt;br&amp;gt; Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-gb,en;q=0.5Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Not forgetting to end the request typed with two returns: Press 'Enter' twice. Again, you should be able to see a line added with the response received back. &lt;br /&gt;
&lt;br /&gt;
Practice sending single requests to a website of your choice by changing the URL and also the 'Host:' field from the 'Request' above. Also try accessing an HTTPS website. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Alternatively, you can use the shortcut [Ctrl+L] to type in your URL, with the 'Request' field filled automatically, based on the URL you have typed. &amp;lt;/nowiki&amp;gt; &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== HTTP Version Numbers &amp;amp;amp; www.cia.gov Headerless Responses  ===&lt;br /&gt;
&lt;br /&gt;
For web applications, very often ill-defined requests submitted over the Internet, will trigger semi-legitimate responses that actually do not obey HTTP RFC protocol specification. Often, even though this is not the case in this example, these responses can lead to the identification of one or more security vulnerabilities. &lt;br /&gt;
&lt;br /&gt;
In this example we test for the responses received for invalid HTTP version numbers on a particular website, namely www.cia.gov, over https. Now a word of caution here; please do not attempt to fuzz web applications that you do not have the authority to do so, especially over the Internet. &lt;br /&gt;
&lt;br /&gt;
Still, for the purposes of this tutorial exercise, we will subject a web server to no more than a dozen or so requests. These requests would be otherwise identical, if it was not for the HTTP version number incrementing by a value of 1 on each request. &lt;br /&gt;
&lt;br /&gt;
In terms of having the authority to do so, well this is identical to hitting 'Refresh' in your web browser a dozen or so times, while you are browsing to www.cia.gov. I do not consider this remotely close to any form of hacking, cracking, or proper fuzzing; web servers across the globe receive a lot more abuse than this on a daily basis. &lt;br /&gt;
&lt;br /&gt;
Finally, by the time you are reading this, the particular issue described might have been fixed. So here goes: &lt;br /&gt;
&lt;br /&gt;
• Within JBroFuzz, select: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;File -&amp;amp;gt; Open Location [Ctrl+L]&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Type: https://www.cia.gov and hit enter. This is depicted in the following screenshot: &lt;br /&gt;
&lt;br /&gt;
[[Image:003-JBroFuzz-Tutorial.png|JBroFuzz Open Location]] &lt;br /&gt;
&lt;br /&gt;
Hitting 'Enter' should automatically populate the 'URL' field and the 'Request' field within the 'Fuzzing' tab. What you see is the base request that we intend to add fuzzing payloads to. Before we do so, let us make one small alteration first: &lt;br /&gt;
&lt;br /&gt;
• Modify the first line of the 'Request' field to: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET / HTTP/0.0&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Our objective is to enumerate the supported by the web server (in this case www.cia.gov) HTTP version numbers, following the two digit format that it has. We could be a lot more agressive here and test for buffer overflows and all types of injection; that would be out of line without the authority to do so. Instead we are going to see how JBroFuzz will iterate through the values of 0.0 to 1.4 by means of adding a Fuzzer to our base request. &lt;br /&gt;
&lt;br /&gt;
• Highlight the second zero from the line 'GET / HTTP/0.0' and right-click, selecting 'Add'. This is depicted in the screeshot below: &lt;br /&gt;
&lt;br /&gt;
[[Image:004-JBroFuzz-Tutorial.png|400px|Adding a Fuzzer to the HTTP version number]] &lt;br /&gt;
&lt;br /&gt;
• From the appearing 'Add a Fuzzer' window, select as 'Category Name', in the most left column 'Base' and as 'Fuzzer Name' in the middle column 'Base 10 (Decimal) Alphabet. &lt;br /&gt;
&lt;br /&gt;
• Click on 'Add Fuzzer' on the bottom right of the window &lt;br /&gt;
&lt;br /&gt;
[[Image:005-JBroFuzz-Tutorial.png|400px|Adding a Fuzzer]] &lt;br /&gt;
&lt;br /&gt;
This should add a Fuzzer of length 1 that iterates over the decimal (i.e. base 10) numbers 0 to 9. If we have added a hexadecimal Fuzzer instead of a decimal one (i.e. base 16) the iteration would from 0 to F. If we had selected two digits instead of one and proceeded to add a decimal Fuzzer, the iteration would be from: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;00&amp;lt;br&amp;gt; 01&amp;lt;br&amp;gt; ..&amp;lt;br&amp;gt; 98&amp;lt;br&amp;gt; 99&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
From a User Interface (UI) perspective you should see a line added to the 'Added Payloads Table'. &lt;br /&gt;
&lt;br /&gt;
• Click 'Start' [Ctrl+Enter] &lt;br /&gt;
&lt;br /&gt;
This process will send 10 requests to the specified web server changing only first line of the request to: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET / HTTP/0.0...&amp;lt;br&amp;gt; GET / HTTP/0.1...&amp;lt;br&amp;gt; ...&amp;lt;br&amp;gt; GET / HTTP/0.8...&amp;lt;br&amp;gt; GET / HTTP/0.9...&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
While this is ongoing, you can sort the results by 'No' in the 'Output' table in the bottom of the 'Fuzzing' tab. This should enable you to see what request is currently being transmitted and received in real time. &lt;br /&gt;
&lt;br /&gt;
Once complete, change the first line of the 'Request' field to read: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET / HTTP/1.0&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
• Click 'Start' [Ctrl+Enter] &lt;br /&gt;
&lt;br /&gt;
The resulting output should resemble the following screenshot: &lt;br /&gt;
&lt;br /&gt;
[[Image:006-JBroFuzz-Tutorial.png|500px|JBroFuzz Output from a Fuzzing Session]] &lt;br /&gt;
&lt;br /&gt;
Straight away we can notice a difference in the response size: For HTTP version numbers 0.0 to 0.9 we are getting back what seems fairly big in size responses; 32222 bytes in size worth of responses, given that HTTP protocol version 0.0 to 0.8 do not officially exist! &lt;br /&gt;
&lt;br /&gt;
By double-clicking on one of these requests, we can see that the web server in question is responding back with no headers, yet returning a full HTML body; this represents the 32222 bytes of response of data we are receiving back. The following screenshot illustrates this: &lt;br /&gt;
&lt;br /&gt;
[[Image:007-JBroFuzz-Tutorial.png|300px|JBroFuzz Output for a Single Request/Response]] &lt;br /&gt;
&lt;br /&gt;
Using the 'Graphing' tab we can proceed to graph the particular requests and responses for this given session. &lt;br /&gt;
&lt;br /&gt;
• Within the 'Graphing' tab, click 'Start' [Ctrl+Enter]. &lt;br /&gt;
&lt;br /&gt;
• Select the directory corresponding to the Output folder we have used for this fuzzing session. This will typically be the last one. &lt;br /&gt;
&lt;br /&gt;
• Right-click and select 'Graph' &lt;br /&gt;
&lt;br /&gt;
Once complete, browse to the 'Response Size' tab within the 'Graphing' tab, as illustrated in the screenshot below: &lt;br /&gt;
&lt;br /&gt;
[[Image:008-JBroFuzz-Tutorial.png|300px|JBroFuzz Graphing different 'Response Sizes']] &lt;br /&gt;
&lt;br /&gt;
To re-iterate this does not present a security vulnerability in any shape or form; merely the fact that by manipulating HTTP version numbers as part of the request we transmit, we can impact the response that we get back. In this case, what changes is the non-existent header fields, with some HTML content being received back. &lt;br /&gt;
&lt;br /&gt;
If I was to guess what is causing this, I would say that some sort of load balancing or content delivery is not happening as it should when non-existent version numbers are being transmitted. &lt;br /&gt;
&lt;br /&gt;
== Using JBroFuzz with a Generic Proxy  ==&lt;br /&gt;
&lt;br /&gt;
JBrofuzz 2.0 and subsequent releases include generic proxy support. As of this writing, basic authentication is supported with plans to eventually support NTLM and Kerberos authentication as well. We've tried to make the use of a proxy as straight forward as possible. All arguments for the proxy can be passed in the URL field and will take one of the following forms. &lt;br /&gt;
&amp;lt;pre&amp;gt;Without Authentication: &amp;amp;lt;proxy server&amp;amp;gt;:&amp;amp;lt;proxy port&amp;amp;gt;&lt;br /&gt;
With Authentication: &amp;amp;lt;proxy username&amp;amp;gt;:&amp;amp;lt;proxy password&amp;amp;gt;@&amp;amp;lt;proxy server&amp;amp;gt;:&amp;amp;lt;proxy port&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
The structure of the request field and whether the GET parameter contains an absolute URL depends on the proxy you are using. For this reason, you may have to do a bit of trial and error to determine what format(s) your proxy accepts. To make all of this a bit clearer lets look at a couple of examples. &lt;br /&gt;
&lt;br /&gt;
=== Squid Proxy  ===&lt;br /&gt;
&lt;br /&gt;
In the first example, we are fuzzing through a squid proxy that requires ncsa user authentication as shown in the figure below. When producing similar results, its important that you use your own proxy and not the one shown in the figure. This proxy was setup for demonstration purposes, will not accept connections from your IP address, and the credentials will no longer be active. &lt;br /&gt;
&lt;br /&gt;
[[Image:016-JBroFuzz-Tutorial.jpg|503x449px]] &lt;br /&gt;
&lt;br /&gt;
=== Paros Proxy  ===&lt;br /&gt;
&lt;br /&gt;
In the second example, we are fuzzing through a local Paros proxy running on port 8080 that does not require user authentication. Notice the difference in the syntax of the URL field when user authentication is not required. &lt;br /&gt;
&lt;br /&gt;
[[Image:017-JBroFuzz-Tutorial.jpg|503x449px]] &lt;br /&gt;
&lt;br /&gt;
In the third example, we are still fuzzing through Paros, but notice the slight difference in the Request Field. Specifically, pay special attention to the GET line. We are no longer including the fully qualified path. Unlike Squid, Paros will accept both formats. Keep this in mind when you are performing initial testing with JBroFuzz and the proxy of your choice. &lt;br /&gt;
&lt;br /&gt;
[[Image:018-JBroFuzz-Tutorial.jpg|503x449px]]&lt;br /&gt;
&lt;br /&gt;
=== Burp Proxy  ===&lt;br /&gt;
In the final example, we are fuzzing through Burp. Similar to Squid, Burp requires absolute URLs in the request. A successful Burp request is shown below.&lt;br /&gt;
&lt;br /&gt;
[[Image:019-JBroFuzz-Tutorial.jpg|503x449px]]&lt;br /&gt;
&lt;br /&gt;
== Using JBroFuzz with Paros Proxy ==&lt;br /&gt;
&lt;br /&gt;
JBroFuzz is a standalone fuzzer; it can release and create sockets over HTTP and HTTPS, but in order to use JBroFuzz correctly you will have to know what it is that you are fuzzing. &lt;br /&gt;
&lt;br /&gt;
In comes the need for a proxy tool; the opening versions of JBroFuzz actually had a proxy tab that you could use to intercept traffic generated by your web browser. That functionality got removed in an attempt to focus and deliver solely on the fuzzing capabilities of the tool. &lt;br /&gt;
&lt;br /&gt;
This section details how to use JBroFuzz in combination with a client side proxy. The one selected is Paros Proxy, which, despite the fact that it hasn't been updated since 2006 is still a popular tool that you see in web security testing live CDs. You could use any of the other proxy tools available. &lt;br /&gt;
&lt;br /&gt;
=== Winning on a Remix of the Year Award ===&lt;br /&gt;
&lt;br /&gt;
At 17:53, on a frosty winter evening, a message window popped up: &lt;br /&gt;
&amp;lt;pre&amp;gt;17:53 http://www.localhost.com/remixcontest/club/annual2010.html&lt;br /&gt;
17:53 Hey bro, could you cast in a vote here for the Such &amp;amp;amp; Such Remix?&lt;br /&gt;
17:53 Appreciated!&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
A friend in need is a friend indeed, so here goes I thought. Opening up a web browser configured to work with Paros as an intermediate proxy, allowed for the casting of my vote. while keeping a record of each request and reply. &lt;br /&gt;
&lt;br /&gt;
No registration, or any other form of submitting an identifier was needed. The request that Paros stored for the casting of the actual vote was: &lt;br /&gt;
&amp;lt;pre&amp;gt;GET http://www.localhost.com/remixcontest/club/vote.php?onLoad=%5Btype%20Method%5D&amp;amp;amp;id=55 HTTP/1.1&lt;br /&gt;
Host: www.localhost.com&lt;br /&gt;
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729) Paros/3.2.13&lt;br /&gt;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&lt;br /&gt;
Accept-Language: en-gb,en;q=0.5&lt;br /&gt;
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&lt;br /&gt;
Keep-Alive: 300&lt;br /&gt;
Proxy-Connection: keep-alive&lt;br /&gt;
Cookie: PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Paros Proxy actually places the domain (in this case www.localhost.com) with the protocol (i.e. http) in front of the GET request. As a result, you can't open a telnet/netcat session and just copy-paste the above. Similarly when we bring the request into JBroFuzz, a bit of tweaking is required. &lt;br /&gt;
&lt;br /&gt;
*In the URL field, type:&lt;br /&gt;
&amp;lt;pre&amp;gt;http://www.localhost.com&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
In the Request field, let's keep what is of interest: &lt;br /&gt;
&amp;lt;pre&amp;gt;GET /remixcontest/club/vote.php?onLoad=%5Btype%20Method%5D&amp;amp;amp;id=55 HTTP/1.0&lt;br /&gt;
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5&lt;br /&gt;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&lt;br /&gt;
Accept-Language: en-gb,en;q=0.5&lt;br /&gt;
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&lt;br /&gt;
Cookie: PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
No needs for Keep-Alive and Proxy-Connection. Let's simplify the HTTP request by making it a version 1.0 request and getting rid of the Host header as well. Also on the user agent, let us keep that mainstream vanilla: Firefox on Windows (popular browser combination), getting rid of the .NET and Paros additives. &lt;br /&gt;
&lt;br /&gt;
Checking on the website, our Such &amp;amp;amp; Such remix already has about 100 votes or so and the top remix has approximately 310 votes. Let's fuzz this: &lt;br /&gt;
&lt;br /&gt;
*Select 2 of the digits of the cookie value:&lt;br /&gt;
&amp;lt;pre&amp;gt;PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
*Select: Panel -&amp;amp;gt; Add&lt;br /&gt;
&lt;br /&gt;
*In the &amp;quot;Add a Fuzzer&amp;quot; panel, select:&lt;br /&gt;
&amp;lt;pre&amp;gt;Base -&amp;amp;gt; Base16 (HEX)&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
and select &amp;quot;Add Fuzzer&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
This will add a line within the Payloads tab on the right hand side. &lt;br /&gt;
&lt;br /&gt;
Our cookie value above (PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e) is in lowercase, hexadecimal format. Let's make sure the encoding we select is also that. &lt;br /&gt;
&lt;br /&gt;
Within the Payloads tab, click on the encoding drop down menu and select lowercase. Just before clicking &amp;quot;Start&amp;quot;, JBroFuzz should look something like the screenshot below. &lt;br /&gt;
&lt;br /&gt;
[[Image:014-JBroFuzz-Tutorial.png|Adding Votes by iterating through PHPSESSID cookie values]] &lt;br /&gt;
&lt;br /&gt;
== Performing User Enumeration with a Valid Set of Credentials  ==&lt;br /&gt;
&lt;br /&gt;
Often you encounter an application that allows for the enumeration of one or more pages after a user has been successfully granted a set of session credentials. One of the key areas to test from an application specific perspective, relates to the page(s) that provide user account information. &lt;br /&gt;
&lt;br /&gt;
In the following example, we investigate an ASP.NET 2.0 application with a C# back-end. In this, an authenticated user has the option to select to &amp;quot;View My Profile&amp;quot;. This page provides them with account information (including the typical username, email address, further notes) that they can proceed to update and save to the back-end system. &lt;br /&gt;
&lt;br /&gt;
After a user has authenticated, the following URL, gives them access to their profile information stored on the database: &lt;br /&gt;
&amp;lt;pre&amp;gt;http://www.myattackingdomain.com/portal-location/UserInfo.aspx?UserID=23&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Simple investigation confirms that the digits allowed as part of the UserID value are decimal numbers only. Lets feed that information into JBroFuzz. &lt;br /&gt;
&lt;br /&gt;
=== Fuzzing a User ID ===&lt;br /&gt;
&lt;br /&gt;
• Within JBroFuzz, select: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;File -&amp;amp;gt; Open Location [Ctrl+L]&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Type: http://www.myattackingdomain.com/portal-location/UserInfo.aspx?UserID=23 and hit enter. This is depicted in the following screenshot: &lt;br /&gt;
&lt;br /&gt;
[[Image:009-JBroFuzz-Tutorial.png|300px|JBroFuzz 'GET' Request with a 'UserID' parameter]] &lt;br /&gt;
&lt;br /&gt;
From the URL the important parameter is the value of the UserID query string (the value 23, above). We want to fuzz that. &lt;br /&gt;
&lt;br /&gt;
• Within the Fuzzing Tab, in the &amp;quot;Request&amp;quot; text area, highlight the above number 23 • Right-click and select &amp;quot;Add&amp;quot; &lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Add a Fuzzer&amp;quot; window that appears, select: &lt;br /&gt;
&lt;br /&gt;
• Category Name: &amp;lt;code&amp;gt;Base&amp;lt;/code&amp;gt; • Fuzzer Name: &amp;lt;code&amp;gt;Base10 (DEC)&amp;lt;/code&amp;gt; • Select &amp;quot;Add Fuzzer&amp;quot; in the bottom right &lt;br /&gt;
&lt;br /&gt;
This would have added a decimal (base 10 fuzzer) of length 2 onto the location. &lt;br /&gt;
&lt;br /&gt;
• You will see a row added within the &amp;quot;Added Fuzzers Table&amp;quot; of the Fuzzing panel. • Click &amp;quot;Start&amp;quot; &amp;lt;code&amp;gt;Ctrl+Enter&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
This will transmit 100 requests to the domain in question, which in this case is assumed: www.myattackingdomain.com. The value being changed within each request will be: &lt;br /&gt;
&amp;lt;pre&amp;gt;• GET /portal-location/UserInfo.aspx?UserID=00 HTTP/1.0&lt;br /&gt;
• GET /portal-location/UserInfo.aspx?UserID=01 HTTP/1.0&lt;br /&gt;
...&lt;br /&gt;
• GET /portal-location/UserInfo.aspx?UserID=98 HTTP/1.0&lt;br /&gt;
• GET /portal-location/UserInfo.aspx?UserID=99 HTTP/1.0&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Done. Let's proceed to graph the responses that we have obtained. Our objective is to understand which two-digit numbers from 00 to 99 correspond to valid user accounts. &lt;br /&gt;
&lt;br /&gt;
=== Graphing Results ===&lt;br /&gt;
&lt;br /&gt;
• Within the &amp;quot;Graphing&amp;quot; tab, click &amp;quot;Start&amp;quot; &amp;lt;code&amp;gt;Ctrl+Enter&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A list of directories will appear on the left-hand side. If you scroll to the bottom of the list you should see the directory corresponding to your fuzzing session, in our case it was (175 2009-06-24 16-18-24) &lt;br /&gt;
&amp;lt;pre&amp;gt;• Right-click on (175 2009-06-24 16-18-24)&lt;br /&gt;
• Click &amp;quot;Graph&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This will generate the graphs in their respective tabs. The question now becomes which graph is of interest for our user enumeration exercise. &lt;br /&gt;
&lt;br /&gt;
By definition enumerating users against an ID value, or any other identifier involves being able to obtain a different response for an existing user to that of a user that is not have a corresponding ID value. &lt;br /&gt;
&lt;br /&gt;
Thus, from the metrics available, the one useful for enumerating users will be that of measuring the &amp;quot;Hamming Distance&amp;quot; between responses received. Based on the JBroFuzz documentation: &lt;br /&gt;
&lt;br /&gt;
'''Fuzzing Hamming Distance ''' &lt;br /&gt;
&amp;lt;pre&amp;gt;A bar chart with the hamming distance of the characters in the response, &lt;br /&gt;
relative to the first response received. Check each character of the first&lt;br /&gt;
response received, against the character at the same position of the&lt;br /&gt;
current response received. If they are not identical, increment the &lt;br /&gt;
hamming distance.&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
As we can see the Fuzzing Hamming Distance (FHD) varies quite a bit from the definition of the normal hamming distance term, used in telecommunications. Still, they share a lot of similarities. &lt;br /&gt;
&lt;br /&gt;
As we can from the above, the first request is critical to calibrating our user enumeration exercise. It represents the value that all other Fuzzing Hamming Distances (FHD) will be measured and normalised towards. For the java-skilled audience, the algorithm is quite trivial, but offers spectacular results in distinguishing responses: &lt;br /&gt;
&amp;lt;pre&amp;gt;in = new BufferedReader(new FileReader(f));&lt;br /&gt;
   58 &lt;br /&gt;
   59 			int counter = 0;&lt;br /&gt;
   60 			int check = 0;&lt;br /&gt;
   61 			int c;&lt;br /&gt;
   62 			while (((c = in.read()) &amp;amp;gt; 0) &amp;amp;amp;&amp;amp;amp; (counter &amp;amp;lt; MAX_CHARS)) {&lt;br /&gt;
   63 &lt;br /&gt;
   64 				// If we are passed &amp;quot;--jbrofuzz--&amp;amp;gt;\n&amp;quot; in the file&lt;br /&gt;
   65 				if (check == END_SIGNATURE.length()) {&lt;br /&gt;
   66 &lt;br /&gt;
   67 					firstSet.append((char) c);&lt;br /&gt;
   68 &lt;br /&gt;
   69 				}&lt;br /&gt;
   70 				// Else find &amp;quot;--jbrofuzz--&amp;amp;gt;\n&amp;quot; using a counter&lt;br /&gt;
   71 				else {&lt;br /&gt;
   72 					// Increment the counter for each success&lt;br /&gt;
   73 					if (c == END_SIGNATURE.charAt(check)) {&lt;br /&gt;
   74 						check++;&lt;br /&gt;
   75 					} else {&lt;br /&gt;
   76 						check = 0;&lt;br /&gt;
   77 					}&lt;br /&gt;
   78 				}&lt;br /&gt;
   79 &lt;br /&gt;
   80 				counter++;&lt;br /&gt;
   81 &lt;br /&gt;
   82 			}&lt;br /&gt;
   83 			in.close();&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Ergo, the corresponding graph is depicted in the screenshot below. The peak graphs correspond to number that if you hover the mouse over will give you the enumeration ID of a valid user. &lt;br /&gt;
&lt;br /&gt;
[[Image:015-JBroFuzz-Tutorial.png|500px|Measuring Hamming Distance for User Enumeration]] &lt;br /&gt;
&lt;br /&gt;
== Eliminating False Positives: LDAP Injection ==&lt;br /&gt;
&lt;br /&gt;
Every now and then a tool (that does not produce false positives) will hit an application reporting back a huge variety of (hopefully not confirmed, but pending further investigation) injection findings. &lt;br /&gt;
&lt;br /&gt;
Due to the limited number of characters required in performing LDAP Injection, such issues will be high on that list. But let's refresh our memory a bit of how LDAP injection works:&lt;br /&gt;
&lt;br /&gt;
http://www.owasp.org/index.php/LDAP_injection&lt;br /&gt;
&lt;br /&gt;
So typically, during an automated scan, negating LDAP cn-type queries would be submitted and their responses noted. Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /myfilelocation.jsp?lang=en&amp;amp;city=user)(sn=*&amp;amp;rid=97 HTTP/1.1&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
vs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /myfilelocation.jsp?lang=en&amp;amp;city=user)!(sn=*&amp;amp;rid=97 HTTP/1.1&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /myfilelocation.jsp?lang=en&amp;amp;city=admin*)((|userpassword=*)&amp;amp;rid=97 HTTP/1.1&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As great as this check might be from an LDAP perspective, it has a high likelihood of generating false positives, due to the character sets being used. Ergo, a protection mechanism (silly worst-case blacklist present for example) would typically hunt down cross-site scripting and sql injection type of characters:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt; &amp;gt; ' etc.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Not considering =, *, or brackets as completely bad (he says). &lt;br /&gt;
&lt;br /&gt;
=== What characters are allowed through? ===&lt;br /&gt;
&lt;br /&gt;
Enough of all that; we want to know what responses are allowed back and what's different about them for all characters being filtered through a black-list.&lt;br /&gt;
&lt;br /&gt;
Let's transform the above GET into the following and proceed to add a single fuzzer that tells us that:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /myfilelocation.jsp?lang=en&amp;amp;city=X&amp;amp;rid=97 HTTP/1.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now in the position of the X character, proceed to add an ASCII 94 Alphabet Fuzzer (available in version 2.1 and above). This will check the responses for all characters which are printable ASCII, with the exception of space.&lt;br /&gt;
&lt;br /&gt;
In total there are 95 printable ASCII characters; minus the one present for space (yes, the one you hit all the time, every day) leaves 94. This fuzzer produces each of those values, in incrementing ASCII order.&lt;br /&gt;
&lt;br /&gt;
== JBroFuzz Development Corner  ==&lt;br /&gt;
&lt;br /&gt;
This section presents how to setup and use JBroFuzz as a fuzzing library. Also, it offers an insight in how to setup and compile your own version of JBroFuzz. As different people have different levels of expertise of the java programming language, eclipse, ant and subversion, some of the steps presented herein might be considered basic by advanced developers. &lt;br /&gt;
&lt;br /&gt;
=== Setting up a JBroFuzz Development Environment ===&lt;br /&gt;
&lt;br /&gt;
This section guides you towards setting up a development environment for JBroFuzz. Despite the Operating System (O/S) being windows XP, a similar process can be followed in a number of other O/S. &lt;br /&gt;
&lt;br /&gt;
You will need to have installed: &lt;br /&gt;
&lt;br /&gt;
*Tortoise SVN (using TortoiseSVN-1.6.6.17493-win32-svn-1.6.6.msi) &lt;br /&gt;
*Eclipse Java (using eclipse-java-galileo-SR1-win32.zip)&lt;br /&gt;
&lt;br /&gt;
Optionally, if you don't like building your application through eclipse you could also require to install Apache Ant. &lt;br /&gt;
&lt;br /&gt;
==== Step 1: Obtain the source code ====&lt;br /&gt;
&lt;br /&gt;
JBroFuzz uses SubVersion with the repository being publicly available for download through anonymous access on sourceforge. There is a plan to move it the source to the OWASP Git repository, but until then, use the guidelines below. &lt;br /&gt;
&lt;br /&gt;
[[Image:010-JBroFuzz-Tutorial.png|Tortoise SVN Check out JBroFuzz Source Code]] &lt;br /&gt;
&lt;br /&gt;
Right click on the folder location where you want to download the source code and select: &lt;br /&gt;
&lt;br /&gt;
*SVN Checkout&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;URL of repository&amp;quot;, enter: &lt;br /&gt;
&amp;lt;pre&amp;gt;https://jbrofuzz.svn.sourceforge.net/svnroot/jbrofuzz&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
In the &amp;quot;Checkout directory&amp;quot;, enter the folder location of your choice, in this case: &lt;br /&gt;
&amp;lt;pre&amp;gt;C:\root\code\jbrofuzz&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
In the &amp;quot;Checkout Depth&amp;quot; select: &lt;br /&gt;
&lt;br /&gt;
*Fully recursive&lt;br /&gt;
&lt;br /&gt;
Untick &amp;quot;Omit Externals&amp;quot; (should be unticked by default) &lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Revision&amp;quot; select: &lt;br /&gt;
&lt;br /&gt;
*&amp;quot;Head revision&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Select OK. &lt;br /&gt;
&lt;br /&gt;
This process, once complete will checkout the entirety of the JBroFuzz source code from the SVN repository on sourceforge. &lt;br /&gt;
&lt;br /&gt;
==== Step 2: Configuring a JBroFuzz Project within Eclipse ====&lt;br /&gt;
&lt;br /&gt;
Having obtained the latest copy of the source code, the next step entails importing that source code within the Eclipse IDE. &lt;br /&gt;
&lt;br /&gt;
Within Eclipse, select: &lt;br /&gt;
&amp;lt;pre&amp;gt;File -&amp;amp;gt; New -&amp;amp;gt; Other&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
From the &amp;quot;New&amp;quot; panel that appears, select: &lt;br /&gt;
&amp;lt;pre&amp;gt;Java -&amp;amp;gt; Java Project from Existig Ant Buildfile&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
[[Image:011-JBroFuzz-Tutorial.png|Import JBroFuzz Code into Eclipse from Ant File]] &lt;br /&gt;
&lt;br /&gt;
Select &amp;quot;Next&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
In the next menu, under &amp;quot;Ant buildfile&amp;quot;, select &amp;quot;Browse&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Browse to the location where you have just (step 1) downloaded the source code and select the following file: &lt;br /&gt;
&lt;br /&gt;
*build.xml&lt;br /&gt;
&lt;br /&gt;
The build.xml file is an Ant build file that JBroFuzz uses. &lt;br /&gt;
&lt;br /&gt;
[[Image:012-JBroFuzz-Tutorial.png|Select the Ant File]] &lt;br /&gt;
&lt;br /&gt;
Selecting that file should have populated the &amp;quot;Project name&amp;quot; as jbrofuzz and also given you: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;javac&amp;quot; task found in target &amp;quot;compile&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
MAKE SURE TO TICK: &lt;br /&gt;
&lt;br /&gt;
*&amp;quot;Link to the buildfile in the filesystem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise eclipse will try to replicate the source code within your workspace and that makes the process a tiny bit more complicated when it comes to actually building JBroFuzz. &lt;br /&gt;
&lt;br /&gt;
Click &amp;quot;Finish&amp;quot; &lt;br /&gt;
&lt;br /&gt;
You will see the item &amp;quot;Building workspace (76%) on the bottom right hand side of Eclipse. Once that is complete, you should see the jbrofuzz project on the top left corner of the Package Explorer within Eclipse. &lt;br /&gt;
&lt;br /&gt;
==== Step 3: Building JBroFuzz ====&lt;br /&gt;
&lt;br /&gt;
Within the Package Explorer, expand the jbrofuzz project and double-click on the build.xml file. &lt;br /&gt;
&lt;br /&gt;
Right click on the &amp;quot;build [default]&amp;quot; task within the &amp;quot;Outline&amp;quot; window (typically seen on the right hand side) and select: &lt;br /&gt;
&amp;lt;pre&amp;gt;Run As -&amp;amp;gt; 1. Ant Build [Alt+Shift+X, Q]&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
If the build has been successful, a JBroFuzz.jar file within the the /jar folder would have been created. Following the path conventions above that should be in: &lt;br /&gt;
&amp;lt;pre&amp;gt;C:\root\code\jbrofuzz\jar\JBroFuzz.jar&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
[[Image:013-JBroFuzz-Tutorial.png|Building JBroFuzz within Eclipse]] &lt;br /&gt;
&lt;br /&gt;
=== How to Use JBroFuzz as a Fuzzing Library ===&lt;br /&gt;
&lt;br /&gt;
Quite often what you need to do in terms of fuzzing, far exceeds the User Interface (UI) of JBroFuzz. For this reason, a set of core fuzzing APIs have been made available that can be used for more advanced fuzzing scenarios. &lt;br /&gt;
&lt;br /&gt;
The JBroFuzz.jar standalone archive (made available with every release) carries a core fuzzing library that holds a number of key classes. These are located under: &lt;br /&gt;
&amp;lt;pre&amp;gt;org.owasp.jbrofuzz.core.*;&lt;br /&gt;
-Database.java&lt;br /&gt;
-Fuzzer.java&lt;br /&gt;
-FuzzerBigInteger.java&lt;br /&gt;
-NoSuchFuzzerException.java&lt;br /&gt;
-Prototype.java&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
The class of importance is Fuzzer.java. If you are going to use recursive iterators of great length, there is also FuzzerBigInteger.java. The difference between the two is that Fuzzer.java uses the primitive java data type long (up to 16^16 values) while FuzzerBigInteger.java uses java BigInteger to perform the counting. Naturally, the class FuzzerBigInteger is slower and takes more memory than the Fuzzer class. &lt;br /&gt;
&lt;br /&gt;
Within JBroFuzz a Fuzzer is an instance of a java Iterator. This implies that values can be accessed by simply calling the &amp;lt;code&amp;gt;next()&amp;lt;/code&amp;gt; method once an object has been made available. Typically, a call to &amp;lt;code&amp;gt;hasNext()&amp;lt;/code&amp;gt; should also be performed prior to avoid an exception being thrown. &lt;br /&gt;
&lt;br /&gt;
A Fuzzer can be obtained from the factory method &amp;lt;code&amp;gt;createFuzzer(String, int);&amp;lt;/code&amp;gt; available for every instance of the fuzzing Database. Ergo: &lt;br /&gt;
&lt;br /&gt;
==== A HelloFuzzer Example ====&lt;br /&gt;
&amp;lt;pre&amp;gt;Database myDatabase = new Database();&lt;br /&gt;
&lt;br /&gt;
Fuzzer myFuzzer = myDatabase.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 5);&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
So how do I use the API? Here is a simple HelloFuzzer (file called HelloFuzzer.java) example: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(Fuzzer f = fuzzDB.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 4); f.hasNext();) {&lt;br /&gt;
       // Get the next payload value...&lt;br /&gt;
       System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloFuzzer.java OWASP JBroFuzz Example 1&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
To compile the above use: &lt;br /&gt;
&amp;lt;pre&amp;gt;javac -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar&amp;quot; HelloFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This assumes that you are currently inside the directory where HelloFuzzer.java resides and that the JBroFuzz.jar is located two directories within your current location i.e. in jbrofuzz/jar. In order to run the above compiled HelloFuzzer class issue: &lt;br /&gt;
&amp;lt;pre&amp;gt;java -cp &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Note: The above 2 commands have been crafted in a win32 environment. The process for compiling and running HelloFuzzer.java above is the same in *nix machines. Simply replace the backslash &amp;quot;\&amp;quot; with &amp;quot;/&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
==== Fuzzing Payload Definitions ====&lt;br /&gt;
&lt;br /&gt;
Within the JBroFuzz.jar file, there is a file called fuzzers.jbrf that carries all the fuzzer definitions that you see in the UI payloads tab of JBroFuzz. To view a latest copy of this file you can browse the SVN repository of JBroFuzz: &lt;br /&gt;
&amp;lt;pre&amp;gt;http://jbrofuzz.svn.sourceforge.net/viewvc/jbrofuzz/tar/fuzzers.jbrf?view=log&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
A note here worth mentioning: Files ending in .jbrofuzz are session files saved by users while performing fuzzing operations. Files ending in .jbrf are JBroFuzz system files. Typical examples of .jbrf files are headers.jbrf, as well as fuzzers.jbrf. Both these use an internal proprietary format not to be confused with the .jbrofuzz file format. &lt;br /&gt;
&lt;br /&gt;
Fuzzers belong in categories (1 to many) and each fuzzer carries a set of payloads that define the alphabet of the fuzzer. &lt;br /&gt;
&lt;br /&gt;
Also, you have replacive and recursive fuzzers, zero fuzzers, etc. There are a number of different fuzzer categories. As an example of a fuzzer within the fuzzers.jbrf file, consider the hexadecimal fuzzer: &lt;br /&gt;
&amp;lt;pre&amp;gt;Fuzzer Name: Base16 (HEX)&lt;br /&gt;
Fuzzer Type: Recursive&lt;br /&gt;
Fuzzer Id:   031-B16-HEX&lt;br /&gt;
&lt;br /&gt;
Total Number of Payloads: 16&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Within the fuzzers.jbrf file this fuzzer is defined in plain-text format as follows: &lt;br /&gt;
&amp;lt;pre&amp;gt;R:031-B16-HEX:Base16 (HEX):16&lt;br /&gt;
&amp;amp;gt; Number Systems | Base | Recursive Fuzzers&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
a&lt;br /&gt;
b&lt;br /&gt;
c&lt;br /&gt;
d&lt;br /&gt;
e&lt;br /&gt;
f&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; There is very little preventing you from defining your own fuzzers within this file, by following the file format specified above. You can use the UI to see if they have been loaded successfully. &lt;br /&gt;
&lt;br /&gt;
Further to recursive and replacive fuzzers you also have zero fuzzers (i.e. a zero fuzzer of 1000 will just transmit 1000 requests as they are, without adding any payloads) double fuzzers, cross product fuzzers, etc. &lt;br /&gt;
&lt;br /&gt;
Notice the factory method Database.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 4) yielding: &amp;quot;I want a 4 digit recursive fuzzer (why because NUM-HEX is recursive in its definition, starts with R: instead of P:) of HEX digits.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Thus the above scenario would iterate through all the digits from 0000 to ffff. I wouldn't recommend using the above scenario for such trivial fuzzing capabilities; simply presented as an example of the inner workings of JBroFuzz.jar &lt;br /&gt;
&lt;br /&gt;
==== HelloFuzzer Refined ====&lt;br /&gt;
&lt;br /&gt;
A more detailed code breakdown of the above HelloFuzzer example can be found below: &lt;br /&gt;
&amp;lt;pre&amp;gt;/**&lt;br /&gt;
 * JBroFuzz API Examples 01&lt;br /&gt;
 *&lt;br /&gt;
 * JBroFuzz - A stateless network protocol fuzzer for web applications.&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (C) 2007, 2008, 2009 subere@uncon.org&lt;br /&gt;
 *&lt;br /&gt;
 * This file is part of the JBroFuzz API examples on how to use the &lt;br /&gt;
 * fuzzer libraries included in JBroFuzz.jar.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is free software: you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 * &lt;br /&gt;
 * You should have received a copy of the GNU General Public License&lt;br /&gt;
 * along with JBroFuzz.  If not, see &amp;amp;lt;http://www.gnu.org/licenses/&amp;amp;gt;.&lt;br /&gt;
 * Alternatively, write to the Free Software Foundation, Inc., 51 &lt;br /&gt;
 * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.&lt;br /&gt;
 * &lt;br /&gt;
 * Verbatim copying and distribution of this entire program file is &lt;br /&gt;
 * permitted in any medium without royalty provided this notice &lt;br /&gt;
 * is preserved. &lt;br /&gt;
 * &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import org.owasp.jbrofuzz.core.NoSuchFuzzerException;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Database;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Fuzzer; &lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;In JBroFuzz a Fuzzer is a java Iterator.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;In order to create a Fuzzer, use the factory method&lt;br /&gt;
 * Database.createFuzzer(String, int), passing as arguments&lt;br /&gt;
 * the Fuzzer ID and the specified length as a positive int.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;Be careful to check that the fuzzer ID (labelled as f_ID)&lt;br /&gt;
 * is actually an existing ID from the Database of Fuzzers.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;Expected Output:&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &amp;amp;lt;code&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: 00000&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: 00001&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  ...&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  (a total of 16^5 = 1048576 lines)&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  ...&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: ffffd&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: ffffe&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: fffff&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 * &amp;amp;lt;/code&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;For more information on the Database of Fuzzers, see the&lt;br /&gt;
 * HelloDatabase Class.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * @author subere@uncon.org&lt;br /&gt;
 * @version n/a&lt;br /&gt;
 */&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param args&lt;br /&gt;
	 */&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
		// You have to construct an instance of the fuzzers database&lt;br /&gt;
		Database fuzzDB = new Database();&lt;br /&gt;
		// You have to supply a valid fuzzer ID&lt;br /&gt;
		String f_ID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
		// You have to supply a (+)tive int&lt;br /&gt;
		int f_len = 5;&lt;br /&gt;
		&lt;br /&gt;
		try {&lt;br /&gt;
			&lt;br /&gt;
			for(Fuzzer f = fuzzDB.createFuzzer(f_ID, f_len); f.hasNext();) {&lt;br /&gt;
				&lt;br /&gt;
				// Get the next payload value...&lt;br /&gt;
				System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		} catch (NoSuchFuzzerException e) {&lt;br /&gt;
			&lt;br /&gt;
			System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
==== Hello Database of Fuzzers ====&lt;br /&gt;
&lt;br /&gt;
Having seen how to access a single Fuzzer through the createFuzzer() method available in the Database object. The next question that comes naturally is what are the Fuzzers that are available by default in JBroFuzz? &lt;br /&gt;
&lt;br /&gt;
To answer that, this example focuses more on the database component that we previously initialised, investigating the list of available methods that it offers. &lt;br /&gt;
&lt;br /&gt;
In JBroFuzz, all Fuzzers are stored in a Database object that you will be required to construct in order to access them. &lt;br /&gt;
&amp;lt;pre&amp;gt;/**&lt;br /&gt;
 * JBroFuzz API Examples 02&lt;br /&gt;
 *&lt;br /&gt;
 * JBroFuzz - A stateless network protocol fuzzer for web applications.&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (C) 2007, 2008, 2009 subere@uncon.org&lt;br /&gt;
 *&lt;br /&gt;
 * This file is part of the JBroFuzz API examples on how to use the &lt;br /&gt;
 * fuzzer libraries included in JBroFuzz.jar.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is free software: you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 * &lt;br /&gt;
 * You should have received a copy of the GNU General Public License&lt;br /&gt;
 * along with JBroFuzz.  If not, see &amp;amp;lt;http://www.gnu.org/licenses/&amp;amp;gt;.&lt;br /&gt;
 * Alternatively, write to the Free Software Foundation, Inc., 51 &lt;br /&gt;
 * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.&lt;br /&gt;
 * &lt;br /&gt;
 * Verbatim copying and distribution of this entire program file is &lt;br /&gt;
 * permitted in any medium without royalty provided this notice &lt;br /&gt;
 * is preserved. &lt;br /&gt;
 * &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import org.owasp.jbrofuzz.core.NoSuchFuzzerException;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Database;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Fuzzer; &lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;In JBroFuzz all Fuzzers are stored in a Database&lt;br /&gt;
 * object that you will be required to construct in order&lt;br /&gt;
 * to access them.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;Within the Database, each Fuzzer is a collection of &lt;br /&gt;
 * payloads, which carries a unique ID string value.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;Example ID values are the output of this program:&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &amp;amp;lt;code&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer ID is: 013-LDP-INJ&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	The name of the fuzzer is:			LDAP Injection&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	The id of the fuzzer is:			013-LDP-INJ&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	The of payloads it carries (it's alphabet) is:	20&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	It has as 1st payload:&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *		|&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer ID is: 018-XSS-4IE&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	The name of the fuzzer is:			XSS IE&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	The id of the fuzzer is:			018-XSS-4IE&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	The of payloads it carries (it's alphabet) is:	38&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	It has as 1st payload:&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *		&amp;amp;lt; img src=`x` onrerror= `&amp;amp;nbsp;;; alert(1) ` /&amp;amp;gt;&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * &amp;amp;lt;/code&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;Do not be confused between Prototypes and Fuzzers; &lt;br /&gt;
 * JBroFuzz uses Prototype objects to construct the Fuzzers&lt;br /&gt;
 * that get added into the Database upon initialisation.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;As a result, the getter methods available within a Database&lt;br /&gt;
 * object can carry the name of getAllPrototypeIDs and &lt;br /&gt;
 * getAllFuzzerIDs interchangebly.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * @author subere@uncon.org&lt;br /&gt;
 * @version n/a&lt;br /&gt;
 */&lt;br /&gt;
public class HelloDatabase {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param args&lt;br /&gt;
	 */&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
		// You have to construct an instance of the fuzzers database&lt;br /&gt;
		Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
		// Get a list of all the fuzzer IDs from the database&lt;br /&gt;
		String[] fuzzer_IDs = fuzzDB.getAllPrototypeIDs();&lt;br /&gt;
		&lt;br /&gt;
		System.out.println(&amp;quot;The fuzzer IDs found are:&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		for(String fuzzerID&amp;amp;nbsp;: fuzzer_IDs) {&lt;br /&gt;
			&lt;br /&gt;
			System.out.println(&amp;quot;The fuzzer ID is: &amp;quot; + fuzzerID);&lt;br /&gt;
			&lt;br /&gt;
			// We pass of length of 1, irrelevant if we are&lt;br /&gt;
			// just going to access the first payload&lt;br /&gt;
			// of the fuzzer&lt;br /&gt;
			Fuzzer fuzzer;&lt;br /&gt;
			try {&lt;br /&gt;
				&lt;br /&gt;
				fuzzer = fuzzDB.createFuzzer(fuzzerID, 1);&lt;br /&gt;
				// Normally you should check for fuzzer.hasNext()				&lt;br /&gt;
				String payload = fuzzer.next();&lt;br /&gt;
				&lt;br /&gt;
				System.out.println(&amp;quot;\tThe name of the fuzzer is:\t\t\t&amp;quot; + fuzzer.getName() );&lt;br /&gt;
				System.out.println(&amp;quot;\tThe id of the fuzzer is:\t\t\t&amp;quot; + fuzzer.getId() );&lt;br /&gt;
				System.out.println(&amp;quot;\tThe of payloads it carries (it's alphabet) is:\t&amp;quot; + fuzzDB.getSize(fuzzerID));&lt;br /&gt;
				System.out.println(&amp;quot;\tIt has as 1st payload:\n\t\t&amp;quot; + payload );&lt;br /&gt;
&lt;br /&gt;
			} catch (NoSuchFuzzerException e) {&lt;br /&gt;
				System.out.println(&amp;quot;Could not find the specified fuzzer!&amp;quot;);&lt;br /&gt;
				System.out.println(&amp;quot;Going to print all the fuzzer IDs I know:&amp;quot;);&lt;br /&gt;
				// old vs new for loop&amp;amp;nbsp;:)&lt;br /&gt;
				// in case of an error, print just the &lt;br /&gt;
				// fuzzer IDs, accessed from the DB&lt;br /&gt;
				for(int j = 0; j &amp;amp;lt; fuzzer_IDs.length; j++) {&lt;br /&gt;
					System.out.println(&amp;quot;The fuzzer ID is: &amp;quot; + fuzzer_IDs[j]);&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
==== Methods available within the Fuzzer Class ====&lt;br /&gt;
&lt;br /&gt;
A final example of this section, involves seeing the usage of all the method calls available in the Fuzzer.java class &lt;br /&gt;
&amp;lt;pre&amp;gt;/**&lt;br /&gt;
 * JBroFuzz API Examples 03&lt;br /&gt;
 *&lt;br /&gt;
 * JBroFuzz - A stateless network protocol fuzzer for web applications.&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (C) 2007, 2008, 2009 subere@uncon.org&lt;br /&gt;
 *&lt;br /&gt;
 * This file is part of the JBroFuzz API examples on how to use the &lt;br /&gt;
 * fuzzer libraries included in JBroFuzz.jar.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is free software: you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 * &lt;br /&gt;
 * You should have received a copy of the GNU General Public License&lt;br /&gt;
 * along with JBroFuzz.  If not, see &amp;amp;lt;http://www.gnu.org/licenses/&amp;amp;gt;.&lt;br /&gt;
 * Alternatively, write to the Free Software Foundation, Inc., 51 &lt;br /&gt;
 * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.&lt;br /&gt;
 * &lt;br /&gt;
 * Verbatim copying and distribution of this entire program file is &lt;br /&gt;
 * permitted in any medium without royalty provided this notice &lt;br /&gt;
 * is preserved. &lt;br /&gt;
 * &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import org.owasp.jbrofuzz.core.NoSuchFuzzerException;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Database;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Fuzzer; &lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;Example iterating through all the methods available&lt;br /&gt;
 * in the Fuzzer Object and their respective outputs.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * @author subere@uncon.org&lt;br /&gt;
 * @version n/a&lt;br /&gt;
 */&lt;br /&gt;
public class IndigoFuzzerTests {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param args&lt;br /&gt;
	 */&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
		// You have to construct an instance of the fuzzers database&lt;br /&gt;
		Database fuzzDB = new Database();&lt;br /&gt;
		// You have to supply a valid fuzzer ID&lt;br /&gt;
		String f_ID = &amp;quot;033-B08-OCT&amp;quot;;&lt;br /&gt;
		// You have to supply a (+)tive int&lt;br /&gt;
		int f_len = 5;&lt;br /&gt;
&lt;br /&gt;
		try {&lt;br /&gt;
			&lt;br /&gt;
			Fuzzer f = fuzzDB.createFuzzer(f_ID, f_len);&lt;br /&gt;
&lt;br /&gt;
			while(f.hasNext()) {&lt;br /&gt;
				&lt;br /&gt;
				// Could do this via reflection, but..&lt;br /&gt;
				f.next();&lt;br /&gt;
				// System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
				System.out.println(&amp;quot; The maximum value is: &amp;quot; + f.getMaximumValue());&lt;br /&gt;
&lt;br /&gt;
				System.out.println(&amp;quot; The current value is: &amp;quot; + f.getCurrectValue());&lt;br /&gt;
				&lt;br /&gt;
&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		} catch (NoSuchFuzzerException e) {&lt;br /&gt;
			&lt;br /&gt;
			System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
=== Advanced Fuzzing with the JBroFuzz Library ===&lt;br /&gt;
&lt;br /&gt;
This section covers more advanced APIs that are available under the '''org.owasp.jbrofuzz.core package'''. It should be noted that some of these classes and their corresponding functionality are not used by the JBroFuzz program application. Instead, they are made available for incorporation into other java code that you have perhaps written that requires more specialized type of fuzzing. &lt;br /&gt;
&lt;br /&gt;
==== Fuzzing Really Long Values with Big Integer ====&lt;br /&gt;
&lt;br /&gt;
As stated previously, within JBroFuzz a Fuzzer is a java Iterator. This implies that while fuzzing, we typically keep track of a counter representing the value that we are currently on. Consider the example of HelloFuzzer.java, above: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(Fuzzer f = fuzzDB.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 4); f.hasNext();) {&lt;br /&gt;
       // Get the next payload value...&lt;br /&gt;
       System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloFuzzer.java OWASP JBroFuzz Example 1&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
If we compile this program: &lt;br /&gt;
&amp;lt;pre&amp;gt;javac -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar&amp;quot; HelloFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
and run it: &lt;br /&gt;
&amp;lt;pre&amp;gt;java -cp &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
We are going to see output similar to: &lt;br /&gt;
&amp;lt;pre&amp;gt; The fuzzer payload is: 0000&lt;br /&gt;
 ... (output omitted)&lt;br /&gt;
 The fuzzer payload is: fffd&lt;br /&gt;
 The fuzzer payload is: fffe&lt;br /&gt;
 The fuzzer payload is: ffff&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Now what if we want a hexadecimal fuzzer of length not 4, but, say, 24. Let's try compile and run the above program with a length of 24. Changing the line to: &lt;br /&gt;
&amp;lt;pre&amp;gt;     for(Fuzzer f = fuzzDB.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 24); f.hasNext();) {&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Running this modified version of HelloFuzzer.java, yields: &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;gt;javac -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer.java&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt;java -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Nothing! What is actually happening is JBroFuzz is figuring out that the specified length of the Fuzzer we are about to create is far greater than that of the long java data type. As a result, the Fuzzer is not even entering the iteration mode that is typically expected with methods next() and hasNext(). &lt;br /&gt;
&lt;br /&gt;
That's all great, but we still want a hexadecimal fuzzer, 24 digits long going from: &lt;br /&gt;
&amp;lt;pre&amp;gt;000000000000000000000000&lt;br /&gt;
...to...&lt;br /&gt;
ffffffffffffffffffffffff&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
For this JBroFuzz offers another type of Fuzzer class, that of FuzzerBigInteger. Let's modify the critical line within the original HelloFuzzer.java program that we had: &lt;br /&gt;
&amp;lt;pre&amp;gt;     for(FuzzerBigInteger f = fuzzDB.createFuzzerBigInteger(&amp;quot;031-B16-HEX&amp;quot;, 24); f.hasNext();) {&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
With the entire program becoming: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(FuzzerBigInteger f = fuzzDB.createFuzzerBigInteger(&amp;quot;031-B16-HEX&amp;quot;, 24); f.hasNext();) {&lt;br /&gt;
       // Get the next payload value...&lt;br /&gt;
       System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloFuzzer.java OWASP JBroFuzz Example 1&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Compiling and running this program yields: &lt;br /&gt;
&amp;lt;pre&amp;gt; The fuzzer payload is: 000000000000000000000000&lt;br /&gt;
 The fuzzer payload is: 000000000000000000000001&lt;br /&gt;
 ... (output omitted)&lt;br /&gt;
 The fuzzer payload is: 00000000000000000001a982&lt;br /&gt;
 ... (output omitted)&lt;br /&gt;
 The fuzzer payload is: 00000000000000000001a982&lt;br /&gt;
 The fuzzer payload is: ffffffffffffffffffffffff&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
There are limitations to this class, as governed by the BigInteger class itself. Further information can be found at: &lt;br /&gt;
&amp;lt;pre&amp;gt;http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigInteger.html&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Still, on a virtual windows xp machine with 256Mb of RAM the above code had no problem running to completion. It took some time though.. Characteristics of the windows machine while this iteration was ongoing: The CPU was being utilised at 100% and memory usage was constant at 212 Mb. Overall, a clean sheet for FuzzerBigInteger.java. &lt;br /&gt;
&lt;br /&gt;
==== Using the Power Fuzzer API ====&lt;br /&gt;
&lt;br /&gt;
With web applications, it is often that you find yourself re-using part of, or the entirety of a fuzzing payload in more than one location, as part of the GET, POST, or any other type of request you submit. &lt;br /&gt;
&lt;br /&gt;
For this reason, JBroFuzz offers the PowerFuzzer class: A type of iterator for which you can specify how many copies of the payload you require in each request. &lt;br /&gt;
&lt;br /&gt;
Let's consider the following trivial scenario. You are in need of all hexadecimal values, which are 4-digits long (i.e. 0000 to FFFF) and you are in need of these 5 times for each request. &lt;br /&gt;
&lt;br /&gt;
This scenario is trivial, because typically you can assign the fuzzing payload (i.e. the value you get back from Fuzzer.next() ) to a String variable and re-use it as many times as you see fit. &lt;br /&gt;
&amp;lt;pre&amp;gt; Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzerID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 int length = 4;&lt;br /&gt;
 ....&lt;br /&gt;
     for(Fuzzer f = fuzzDB.createFuzzer(fuzzerID, length); f.hasNext();) {&lt;br /&gt;
          String payload = f.next();&lt;br /&gt;
          ....&lt;br /&gt;
     }&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Using the PowerFuzzer.class, the following HelloPowerFuzzer.java program can be created: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloPowerFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzerID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 int length = 4;&lt;br /&gt;
 int power = 5;&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(PowerFuzzer f = fuzzDB.createPowerFuzzer(fuzzerID, length, power); f.hasNext();) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] identicalElements = f.nextPower();&lt;br /&gt;
&lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem&amp;amp;nbsp;: identicalElements) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloPowerFuzzer.java OWASP JBroFuzz Power Fuzzer Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This program would output the following; no rocket science here: &lt;br /&gt;
&amp;lt;pre&amp;gt;....&lt;br /&gt;
 I have 5 elements: 4817 4817 4817 4817 4817&lt;br /&gt;
 I have 5 elements: 4818 4818 4818 4818 4818&lt;br /&gt;
 I have 5 elements: 4819 4819 4819 4819 4819&lt;br /&gt;
 I have 5 elements: 481a 481a 481a 481a 481a&lt;br /&gt;
 I have 5 elements: 481b 481b 481b 481b 481b&lt;br /&gt;
 I have 5 elements: 481c 481c 481c 481c 481c&lt;br /&gt;
 I have 5 elements: 481d 481d 481d 481d 481d&lt;br /&gt;
 I have 5 elements: 481e 481e 481e 481e 481e&lt;br /&gt;
 I have 5 elements: 481f 481f 481f 481f 481f&lt;br /&gt;
 I have 5 elements: 4820 4820 4820 4820 4820&lt;br /&gt;
 I have 5 elements: 4821 4821 4821 4821 4821&lt;br /&gt;
 I have 5 elements: 4822 4822 4822 4822 4822&lt;br /&gt;
 I have 5 elements: 4823 4823 4823 4823 4823&lt;br /&gt;
 I have 5 elements: 4824 4824 4824 4824 4824&lt;br /&gt;
 I have 5 elements: 4825 4825 4825 4825 4825&lt;br /&gt;
 I have 5 elements: 4826 4826 4826 4826 4826&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Now imagine you need to change the number of elements you obtain back every time. For every second request, you need to obtain back two identical payloads, for every third request, you need to obtain back three payloads and for every fourth request, you need to obtain back four payloads. &lt;br /&gt;
&lt;br /&gt;
The PowerFuzzer class, with the corresponding method '''setPower(int)''' allows you to set how many identical elements you obtain back, without having to worry about the length argument. Below is a class that solves the above scenario: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloPowerFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzerID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 int length = 4;&lt;br /&gt;
 int power = 5;&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(PowerFuzzer f = fuzzDB.createPowerFuzzer(fuzzerID, length, power); f.hasNext();) {&lt;br /&gt;
	 &lt;br /&gt;
	   int currentValue = (int) f.getCurrentValue(); &lt;br /&gt;
	   currentValue&amp;amp;nbsp;%= 4;&lt;br /&gt;
	   switch (currentValue) {&lt;br /&gt;
			case 0: f.setPower(1); break;&lt;br /&gt;
			case 1: f.setPower(2); break;&lt;br /&gt;
			case 2: f.setPower(3); break;&lt;br /&gt;
			default: f.setPower(4); break;&lt;br /&gt;
	   }&lt;br /&gt;
	   &lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] identicalElements = f.nextPower();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem&amp;amp;nbsp;: identicalElements) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloPowerFuzzer.java&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This class has as output: &lt;br /&gt;
&amp;lt;pre&amp;gt; ....&lt;br /&gt;
 I have 1 elements: 22a8&lt;br /&gt;
 I have 2 elements: 22a9 22a9&lt;br /&gt;
 I have 3 elements: 22aa 22aa 22aa&lt;br /&gt;
 I have 4 elements: 22ab 22ab 22ab 22ab&lt;br /&gt;
 I have 1 elements: 22ac&lt;br /&gt;
 I have 2 elements: 22ad 22ad&lt;br /&gt;
 I have 3 elements: 22ae 22ae 22ae&lt;br /&gt;
 I have 4 elements: 22af 22af 22af 22af&lt;br /&gt;
 I have 1 elements: 22b0&lt;br /&gt;
 I have 2 elements: 22b1 22b1&lt;br /&gt;
 I have 3 elements: 22b2 22b2 22b2&lt;br /&gt;
 I have 4 elements: 22b3 22b3 22b3 22b3&lt;br /&gt;
 I have 1 elements: 22b4&lt;br /&gt;
 I have 2 elements: 22b5 22b5&lt;br /&gt;
 I have 3 elements: 22b6 22b6 22b6&lt;br /&gt;
 I have 4 elements: 22b7 22b7 22b7 22b7&lt;br /&gt;
 I have 1 elements: 22b8&lt;br /&gt;
 I have 2 elements: 22b9 22b9&lt;br /&gt;
 ....&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Naturally, the algorithm of the number of elements required can vary based on any number of parameters. The PowerFuzzer class gives you a quick way to control the number of identical payloads you obtain back, without having to worry about creating a data type to store them in. &lt;br /&gt;
&lt;br /&gt;
==== Using the Double Fuzzer API ====&lt;br /&gt;
&lt;br /&gt;
In some cases of fuzzing web applications, a requirement to fuzz two (or more) locations part of the request being submitted to the web server becomes apparent. &lt;br /&gt;
&lt;br /&gt;
The DoubleFuzzer class allows you to create a fuzzer based on two prototype definitions. Similarly to instantiating a Fuzzer through a prototype and a given length, with a DoubleFuzzer, we pass two prototype definitions and two lengths. The corresponding method call available within the '''Database''' class of org.owasp.jbrofuzz.core is: &lt;br /&gt;
&amp;lt;pre&amp;gt;public DoubleFuzzer createDoubleFuzzer(String id1, int length1,  &lt;br /&gt;
								String id2, int length2) throws NoSuchFuzzerException {&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Let's cross-breed some fuzzers, see what results we get back during an iteration. &lt;br /&gt;
&lt;br /&gt;
The first example below, uses two hexadecimal fuzzers of different lengths, as specified by the variables: &lt;br /&gt;
&amp;lt;pre&amp;gt;String fuzzID1 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
String fuzzID2 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
int length1 = 4;&lt;br /&gt;
int length2 = 2;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
As the double fuzzer iteration is taking place, the second fuzzer, defined by the fuzzID2 &amp;amp;amp; length2 loops, starting from 00 and going all the way up to FF. An example output is: &lt;br /&gt;
&amp;lt;pre&amp;gt; I have 2 elements: fefb fb&lt;br /&gt;
 I have 2 elements: fefc fc&lt;br /&gt;
 I have 2 elements: fefd fd&lt;br /&gt;
 I have 2 elements: fefe fe&lt;br /&gt;
 I have 2 elements: feff ff&lt;br /&gt;
 I have 2 elements: ff00 00&lt;br /&gt;
 I have 2 elements: ff01 01&lt;br /&gt;
 I have 2 elements: ff02 02&lt;br /&gt;
 I have 2 elements: ff03 03&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
The complete code listing of HelloDoubleFuzzer.java is: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloDoubleFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzID1 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 String fuzzID2 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 int length1 = 4;&lt;br /&gt;
 int length2 = 2;&lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
     DoubleFuzzer f = fuzzDB.createDoubleFuzzer(fuzzID1, length1, fuzzID2, length2);&lt;br /&gt;
	 &lt;br /&gt;
     while( f.hasNext() ) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] payloads = f.next();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem&amp;amp;nbsp;: payloads) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloDoubleFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
That's simple enough; now let's cross-breed something a bit more exotic: Imagine a 3-digit octal ID value [000 - 777] being submitted inline with, say, a parameter that we want to test for Cross-Site Scripting (XSS). Let's adjust the program above with the corresponding fuzzer IDs of these fuzzers. Remember all the IDs of all the fuzzers can be found in the fuzzers.jbrf file within JBroFuzz.jar: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloDoubleFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzID1 = &amp;quot;033-B08-OCT&amp;quot;;&lt;br /&gt;
 String fuzzID2 = &amp;quot;019-XSS-GEK&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 int length1 = 3;&lt;br /&gt;
 int length2 = 1;&lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
     DoubleFuzzer f = fuzzDB.createDoubleFuzzer(fuzzID1, length1, fuzzID2, length2);&lt;br /&gt;
	 &lt;br /&gt;
     while( f.hasNext() ) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] payloads = f.next();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem&amp;amp;nbsp;: payloads) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloDoubleFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
The output from this program is: &lt;br /&gt;
&amp;lt;pre&amp;gt; I have 2 elements: 000 (1?(1?{a:1?&amp;quot;&amp;quot;[1?&amp;quot;ev\a\l&amp;quot;:0](1?&amp;quot;\a\lert&amp;quot;:0):0}:0).a:0)[1?&amp;quot;\c\a\l\l&amp;quot;:0](content,1?&amp;quot;x\s\s&amp;quot;:0)&lt;br /&gt;
 I have 2 elements: 001 &amp;amp;lt;STYLE TYPE=&amp;quot;text/javascript&amp;quot;&amp;amp;gt;alert('XSS');&amp;amp;lt;/STYLE&amp;amp;gt;&lt;br /&gt;
 I have 2 elements: 002 &amp;amp;lt;SCRIPT SRC=http://ha.ckers.org/xss.js&lt;br /&gt;
 I have 2 elements: 003 &amp;amp;lt;A HREF=&amp;quot;http://google:ha.ckers.org&amp;quot;&amp;amp;gt;XSS&amp;amp;lt;/A&amp;amp;gt;&lt;br /&gt;
 I have 2 elements: 004 &amp;amp;lt;A HREF=&amp;quot;http://ha.ckers.org@google&amp;quot;&amp;amp;gt;XSS&amp;amp;lt;/A&amp;amp;gt;&lt;br /&gt;
 I have 2 elements: 005 &amp;amp;lt;A HREF=&amp;quot;//google&amp;quot;&amp;amp;gt;XSS&amp;amp;lt;/A&amp;amp;gt;&lt;br /&gt;
 ....&lt;br /&gt;
 ...&lt;br /&gt;
 ..&lt;br /&gt;
 .&lt;br /&gt;
 ..&lt;br /&gt;
 ...&lt;br /&gt;
 ....&lt;br /&gt;
 I have 2 elements: 774 &amp;amp;lt;SCRIPT SRC=http://ha.ckers.org/xss.js&lt;br /&gt;
 I have 2 elements: 775 &amp;amp;lt;A HREF=&amp;quot;http://google:ha.ckers.org&amp;quot;&amp;amp;gt;XSS&amp;amp;lt;/A&amp;amp;gt;&lt;br /&gt;
 I have 2 elements: 776 &amp;amp;lt;A HREF=&amp;quot;http://ha.ckers.org@google&amp;quot;&amp;amp;gt;XSS&amp;amp;lt;/A&amp;amp;gt;&lt;br /&gt;
 I have 2 elements: 777 &amp;amp;lt;A HREF=&amp;quot;//google&amp;quot;&amp;amp;gt;XSS&amp;amp;lt;/A&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
With the list stopping iterating at the last element of the greatest of the two fuzzers. &lt;br /&gt;
&lt;br /&gt;
==== Using the Cross Product Fuzzer API ====&lt;br /&gt;
&lt;br /&gt;
A final case of a special Double Fuzzer is the the Cross Product Fuzzer of the payloads of two fuzzers. This type of fuzzing is virtually encountered in username/password login form on the Internet. Let's work on this by example. &lt;br /&gt;
&lt;br /&gt;
Consider your home network router. You recall changing the default password to one of the typical password values that you use. Also, you are not 100% certain about the username for the router either, it is one of the typical admin, user, administrator, root, yoda type values, but you cannot recall which one. Needless to say, you don't know what the username, or password actually is. &lt;br /&gt;
&lt;br /&gt;
So in a mini brute-forcing attack scenario, you have the following list of usernames, out of which one is valid: &lt;br /&gt;
&amp;lt;pre&amp;gt;admin&lt;br /&gt;
administrator&lt;br /&gt;
Administrator&lt;br /&gt;
root&lt;br /&gt;
adminUser&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Also you know that the password is one of the following (Top 10 Threadwatch 2007 passwords): &lt;br /&gt;
&amp;lt;pre&amp;gt;password&lt;br /&gt;
123456&lt;br /&gt;
qwerty&lt;br /&gt;
abc123&lt;br /&gt;
letmein&lt;br /&gt;
monkey&lt;br /&gt;
myspace1&lt;br /&gt;
password1&lt;br /&gt;
blink182&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
The set that contains every possible combination of the two sets is the Cross Product of the list of usernames, times the list of passwords. So manually, (as most people do while locking themselves out) you would try, popular combinations of the above, starting with: &lt;br /&gt;
&amp;lt;pre&amp;gt;admin password&lt;br /&gt;
admin 123456&lt;br /&gt;
admin qwerty&lt;br /&gt;
....&lt;br /&gt;
admin blink182&lt;br /&gt;
administrator password&lt;br /&gt;
administrator 123456&lt;br /&gt;
administrator qwerty&lt;br /&gt;
....&lt;br /&gt;
adminUser password1&lt;br /&gt;
adminUser blink182&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Thus the total number of attempts would be (number of usernames) x (number of passwords). No rocket science here. &lt;br /&gt;
&lt;br /&gt;
JBroFuzz introduces the CrossProductFuzzer class capable of iterating through the cross product of two fuzzers. Let's put it into code; the following program provides a list of all 2-digit octal numbers with every 2-digit binary number. A total of (8 x 8) x (2 x 2) = 256 values. &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloCrossFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzID1 = &amp;quot;033-B08-OCT&amp;quot;;&lt;br /&gt;
 String fuzzID2 = &amp;quot;034-B02-BIN&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 int length1 = 2;&lt;br /&gt;
 int length2 = 2;&lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
     CrossProductFuzzer f = fuzzDB.createCrossFuzzer(fuzzID1, length1, fuzzID2, length2);&lt;br /&gt;
	 &lt;br /&gt;
     while( f.hasNext() ) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] payloads = f.next();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem&amp;amp;nbsp;: payloads) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloCrossFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This program has as output: &lt;br /&gt;
&amp;lt;pre&amp;gt; I have 2 elements: 00 00&lt;br /&gt;
 ...&lt;br /&gt;
 ..&lt;br /&gt;
 .&lt;br /&gt;
 ..&lt;br /&gt;
 ...&lt;br /&gt;
 I have 2 elements: 74 00&lt;br /&gt;
 I have 2 elements: 74 01&lt;br /&gt;
 I have 2 elements: 74 10&lt;br /&gt;
 I have 2 elements: 74 11&lt;br /&gt;
 I have 2 elements: 75 00&lt;br /&gt;
 I have 2 elements: 75 01&lt;br /&gt;
 I have 2 elements: 75 10&lt;br /&gt;
 I have 2 elements: 75 11&lt;br /&gt;
 I have 2 elements: 76 00&lt;br /&gt;
 I have 2 elements: 76 01&lt;br /&gt;
 I have 2 elements: 76 10&lt;br /&gt;
 I have 2 elements: 76 11&lt;br /&gt;
 I have 2 elements: 77 00&lt;br /&gt;
 I have 2 elements: 77 01&lt;br /&gt;
 I have 2 elements: 77 10&lt;br /&gt;
 I have 2 elements: 77 11&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
You can substitute any list of fuzzer ID to the IDs you use in this program. &lt;br /&gt;
&lt;br /&gt;
'''Remember!''' The total number of payloads must not exceed that of the the maximum value of the long primitive java data type ''Long.MAX_VALUE'' which is 2^63 - 1. If you are in need of more than that payloads, you would have to use the big integer implementation of the Fuzzer class, namely: FuzzerBigInteger.java. &lt;br /&gt;
&lt;br /&gt;
== Graphing with JBroFuzz ==&lt;br /&gt;
&lt;br /&gt;
Once a fuzzing session has completed, JBroFuzz offers the ability to generate a number of graphs, using various metrics. This section investigates how to further the graphing functionality available with the application. &lt;br /&gt;
&lt;br /&gt;
=== Customizing the logo on each Graph ===&lt;br /&gt;
&lt;br /&gt;
As of version 2.0, all image icons within JBroFuzz are located within the /icons directory of the application. The particular transparent image file displayed on top right part of the graphs is named: &lt;br /&gt;
&amp;lt;pre&amp;gt;/icons/owasp-med.png&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This file is a 64 x 64 PNG image file. You can replace it with your own file, as follows: &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;gt;ls -l JBroFuzz.jar&lt;br /&gt;
-rw-rw-rw-   1 user     group     4033612 Feb 15 12:33 JBroFuzz.jar&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt;unzip -oq JBroFuzz.jar&lt;br /&gt;
&amp;amp;gt;cd icons&lt;br /&gt;
&amp;amp;gt;mv owasp-med.png file64x64-file.png&lt;br /&gt;
&amp;amp;gt;cd ..&lt;br /&gt;
&amp;amp;gt;zip -r JBroFuzz.zip *&lt;br /&gt;
&amp;amp;gt;mv JBroFuzz.zip JBroFuzz.jar&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This enables you to have your own (company logo) on JBroFuzz graphs. Further to this, a number of other customization options are available, by right clicking on each of the graph generated. &lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP_JBroFuzz]]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_JBroFuzz_Tutorial&amp;diff=80731</id>
		<title>OWASP JBroFuzz Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_JBroFuzz_Tutorial&amp;diff=80731"/>
				<updated>2010-03-30T15:47:35Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Introduction  ==&lt;br /&gt;
&lt;br /&gt;
''“If you can’t fuzz with JBroFuzz, you probably do not want to fuzz!”'' &lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;Old JBroFuzz Motto &amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; The art of teaching, Mark Van Doren said, is the art of assisting discovery. Fuzzing is a representative discipline towards assisting the discovery of security vulnerabilities, that is just beginning to come of age. Over the last two years, through continuous development, JBroFuzz has attempted to expose the intrinsic beauty of the subject: Constantly submit a vast amount of payloads to a service, device or prompt, waiting for the one response that makes all the difference. This is the mentality that JBroFuzz embraces and attempts to offer back to security professionals. &lt;br /&gt;
&lt;br /&gt;
Fuzzing as a concept goes beyond a conventional work flow or a standard methodology. I would argue that to know how to fuzz well, is to master a new language. Thus, similar to the process of learning a programming (or foreign) language, there are three things you must master: &lt;br /&gt;
&lt;br /&gt;
• Grammar: How fuzzing as a process is structured&amp;lt;br&amp;gt; • Vocabulary: How to name fuzzing concepts you want to use&amp;lt;br&amp;gt; • Usage: Ways of achieving everyday effective results with fuzzing&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:001-JBroFuzz-Tutorial.jpg|right|300px|JBroFuzz Splash Screen]]From the pre-existing information available for JBroFuzz, this tutorial focuses on usage: How to best put a fuzzing tool to good use, either via the UI, or using APIs that ''JBroFuzz.jar'' is constituted of. As a result, this document has a small requirement as a caveat; you need to have a beginner level understanding of the Java programming language in order to understand some sections. &lt;br /&gt;
&lt;br /&gt;
There are a number of working examples described here within, which '''grep''' for statements such as “''&amp;lt;nowiki&amp;gt;public static void main(String[] args)&amp;lt;/nowiki&amp;gt;''”. The majority of the content relates to reviewing these examples and putting the Java syntax into a fuzzing perspective. &lt;br /&gt;
&lt;br /&gt;
To summarise, this tutorial focuses on customary and effective usage of fuzzing through the JBroFuzz Java APIs and the respective UI. It is targeting (without attacking them) web applications. Without further redo, let’s get fuzzing! &lt;br /&gt;
&lt;br /&gt;
== JBroFuzz Basic Functionality  ==&lt;br /&gt;
&lt;br /&gt;
This section carries a number of basic fuzzing examples to get you started with JBroFuzz. Overall, even though the actions performed to not produce any amazing fuzzing results, it serves as a starting point in understanding how to perform particular fuzzing operations on web applications. &lt;br /&gt;
&lt;br /&gt;
=== 'Hello Google!' (forget 'Hello World')  ===&lt;br /&gt;
&lt;br /&gt;
As the traditional first program that you learn when indulging in a new programming language, 'Hello World!' represents the norm for understanding the basic output operations and syntax (let alone compiler and execution behaviour) of the language in question. &lt;br /&gt;
&lt;br /&gt;
As with most web application security related tools, when I am given the responsibility to run them, often in order to understand how they work, I would first craft a legitimate, single request to a trusted (to be up and behaving) popular Internet location. Needless, to say this request more than on occasion finds itself on Google servers. &lt;br /&gt;
&lt;br /&gt;
So 'Hello World!' for programming languages seems to transform to 'Hello Google!' for understanding how web application security related tools work. Let us see, how JBroFuzz does it. &lt;br /&gt;
&lt;br /&gt;
• Double-click on JBroFuzz and browse to the 'Fuzzing' tab &lt;br /&gt;
&lt;br /&gt;
JBroFuzz is constituted of tabs, typically located in the bottom or top (if you bother to change the settings) of the main window. &lt;br /&gt;
&lt;br /&gt;
The 'Fuzzing' tab is where you craft your request message to a particular host. Once that is in place, you can select any part of the request and proceed into adding any number of payloads. We shall see how in later sections. &lt;br /&gt;
&lt;br /&gt;
• In the 'URL' field type: http://www.google.com/ http://www.google.com &lt;br /&gt;
&lt;br /&gt;
Unlike conventional URLs, the URL field in JBroFuzz is only used for the underlying protocol (HTTP or HTTPS), host name (e.g. www.yahoo.com) and (optionally) port number. &lt;br /&gt;
&lt;br /&gt;
All remaining information pasted or typed into the 'URL' field will be ignored; you are expected to enter it in the 'Request' field below. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Still, if you want to just copy-paste a URL from a browser, hit [Ctrl+L] while you are not fuzzing, paste the URL value that you have copied from a browser and JBroFuzz will automatically do the work for you. &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Examples of valid URL values to be put in the &lt;br /&gt;
&lt;br /&gt;
Treat the 'URL' and 'Request' fields as the two stages of a 'telnet' session on port 80; you are effectively using the 'URL' field to specify the equivalent of: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;amp;gt;telnet www.google.com 8088&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
As equivalent to: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;http://www.google.com:8088&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
or in the case of HTTPS: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://www.google.com:8088&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Naturally, default ports for HTTP is 80 and HTTPS is 443. &lt;br /&gt;
&lt;br /&gt;
• In the 'Request' field type: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET / HTTP/1.0&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
And press 'Enter' twice &lt;br /&gt;
&lt;br /&gt;
This is where the body of the message you are sending is to be placed. So anything obeying HTTP/S protocol, such as GET and POST requests, header fields and/or HTML content should be included here. &lt;br /&gt;
&lt;br /&gt;
As part of the process of fuzzing web applications with JBroFuzz you need to have done your homework, in terms of providing a base request message. This message is what will be used later on to add payloads to particular sections of the request. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;• Hit 'Start' [Ctrl+Enter]&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
This will instigate the process of sending a single request to the specified host on a given (or default) port, over HTTP or HTTPS. &lt;br /&gt;
&lt;br /&gt;
Once a connection has been established JBroFuzz will proceed to submit the message you have typed into the 'Request' field. &lt;br /&gt;
&lt;br /&gt;
Finally, JBroFuzz will log all data sent and received into a file; accessing this file is typically a process of double clicking on the output line on the table at the bottom section of the 'Fuzzing' tab. &lt;br /&gt;
&lt;br /&gt;
You should see a response received in the bottom part of the 'Fuzzing' panel. Double click (or right click for more options) to see the information exchanged; typically this would be a 302 redirect pointing you to another location. Congratulations, you have just said &amp;quot;Hello&amp;quot; to Google! &lt;br /&gt;
&lt;br /&gt;
[[Image:002-JBroFuzz-Tutorial.png|500px|JBroFuzz Hello Google!]] &lt;br /&gt;
&lt;br /&gt;
Now this would typically be enough under RFC rules, to get a response back; but damn all the bots out here, most websites require further information to respond back. So, in the 'Request' field let's pretend to be a (kind of) legitimate browser by typing: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET / HTTP/1.0&amp;lt;br&amp;gt; Host: www.google.com&amp;lt;br&amp;gt; User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729) JBroFuzz/1.5&amp;lt;br&amp;gt; Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-gb,en;q=0.5Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Not forgetting to end the request typed with two returns: Press 'Enter' twice. Again, you should be able to see a line added with the response received back. &lt;br /&gt;
&lt;br /&gt;
Practice sending single requests to a website of your choice by changing the URL and also the 'Host:' field from the 'Request' above. Also try accessing an HTTPS website. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Alternatively, you can use the shortcut [Ctrl+L] to type in your URL, with the 'Request' field filled automatically, based on the URL you have typed. &amp;lt;/nowiki&amp;gt; &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== HTTP Version Numbers &amp;amp;amp; www.cia.gov Headerless Responses  ===&lt;br /&gt;
&lt;br /&gt;
For web applications, very often ill-defined requests submitted over the Internet, will trigger semi-legitimate responses that actually do not obey HTTP RFC protocol specification. Often, even though this is not the case in this example, these responses can lead to the identification of one or more security vulnerabilities. &lt;br /&gt;
&lt;br /&gt;
In this example we test for the responses received for invalid HTTP version numbers on a particular website, namely www.cia.gov, over https. Now a word of caution here; please do not attempt to fuzz web applications that you do not have the authority to do so, especially over the Internet. &lt;br /&gt;
&lt;br /&gt;
Still, for the purposes of this tutorial exercise, we will subject a web server to no more than a dozen or so requests. These requests would be otherwise identical, if it was not for the HTTP version number incrementing by a value of 1 on each request. &lt;br /&gt;
&lt;br /&gt;
In terms of having the authority to do so, well this is identical to hitting 'Refresh' in your web browser a dozen or so times, while you are browsing to www.cia.gov. I do not consider this remotely close to any form of hacking, cracking, or proper fuzzing; web servers across the globe receive a lot more abuse than this on a daily basis. &lt;br /&gt;
&lt;br /&gt;
Finally, by the time you are reading this, the particular issue described might have been fixed. So here goes: &lt;br /&gt;
&lt;br /&gt;
• Within JBroFuzz, select: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;File -&amp;amp;gt; Open Location [Ctrl+L]&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Type: https://www.cia.gov and hit enter. This is depicted in the following screenshot: &lt;br /&gt;
&lt;br /&gt;
[[Image:003-JBroFuzz-Tutorial.png|JBroFuzz Open Location]] &lt;br /&gt;
&lt;br /&gt;
Hitting 'Enter' should automatically populate the 'URL' field and the 'Request' field within the 'Fuzzing' tab. What you see is the base request that we intend to add fuzzing payloads to. Before we do so, let us make one small alteration first: &lt;br /&gt;
&lt;br /&gt;
• Modify the first line of the 'Request' field to: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET / HTTP/0.0&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Our objective is to enumerate the supported by the web server (in this case www.cia.gov) HTTP version numbers, following the two digit format that it has. We could be a lot more agressive here and test for buffer overflows and all types of injection; that would be out of line without the authority to do so. Instead we are going to see how JBroFuzz will iterate through the values of 0.0 to 1.4 by means of adding a Fuzzer to our base request. &lt;br /&gt;
&lt;br /&gt;
• Highlight the second zero from the line 'GET / HTTP/0.0' and right-click, selecting 'Add'. This is depicted in the screeshot below: &lt;br /&gt;
&lt;br /&gt;
[[Image:004-JBroFuzz-Tutorial.png|400px|Adding a Fuzzer to the HTTP version number]] &lt;br /&gt;
&lt;br /&gt;
• From the appearing 'Add a Fuzzer' window, select as 'Category Name', in the most left column 'Base' and as 'Fuzzer Name' in the middle column 'Base 10 (Decimal) Alphabet. &lt;br /&gt;
&lt;br /&gt;
• Click on 'Add Fuzzer' on the bottom right of the window &lt;br /&gt;
&lt;br /&gt;
[[Image:005-JBroFuzz-Tutorial.png|400px|Adding a Fuzzer]] &lt;br /&gt;
&lt;br /&gt;
This should add a Fuzzer of length 1 that iterates over the decimal (i.e. base 10) numbers 0 to 9. If we have added a hexadecimal Fuzzer instead of a decimal one (i.e. base 16) the iteration would from 0 to F. If we had selected two digits instead of one and proceeded to add a decimal Fuzzer, the iteration would be from: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;00&amp;lt;br&amp;gt; 01&amp;lt;br&amp;gt; ..&amp;lt;br&amp;gt; 98&amp;lt;br&amp;gt; 99&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
From a User Interface (UI) perspective you should see a line added to the 'Added Payloads Table'. &lt;br /&gt;
&lt;br /&gt;
• Click 'Start' [Ctrl+Enter] &lt;br /&gt;
&lt;br /&gt;
This process will send 10 requests to the specified web server changing only first line of the request to: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET / HTTP/0.0...&amp;lt;br&amp;gt; GET / HTTP/0.1...&amp;lt;br&amp;gt; ...&amp;lt;br&amp;gt; GET / HTTP/0.8...&amp;lt;br&amp;gt; GET / HTTP/0.9...&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
While this is ongoing, you can sort the results by 'No' in the 'Output' table in the bottom of the 'Fuzzing' tab. This should enable you to see what request is currently being transmitted and received in real time. &lt;br /&gt;
&lt;br /&gt;
Once complete, change the first line of the 'Request' field to read: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET / HTTP/1.0&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
• Click 'Start' [Ctrl+Enter] &lt;br /&gt;
&lt;br /&gt;
The resulting output should resemble the following screenshot: &lt;br /&gt;
&lt;br /&gt;
[[Image:006-JBroFuzz-Tutorial.png|500px|JBroFuzz Output from a Fuzzing Session]] &lt;br /&gt;
&lt;br /&gt;
Straight away we can notice a difference in the response size: For HTTP version numbers 0.0 to 0.9 we are getting back what seems fairly big in size responses; 32222 bytes in size worth of responses, given that HTTP protocol version 0.0 to 0.8 do not officially exist! &lt;br /&gt;
&lt;br /&gt;
By double-clicking on one of these requests, we can see that the web server in question is responding back with no headers, yet returning a full HTML body; this represents the 32222 bytes of response of data we are receiving back. The following screenshot illustrates this: &lt;br /&gt;
&lt;br /&gt;
[[Image:007-JBroFuzz-Tutorial.png|300px|JBroFuzz Output for a Single Request/Response]] &lt;br /&gt;
&lt;br /&gt;
Using the 'Graphing' tab we can proceed to graph the particular requests and responses for this given session. &lt;br /&gt;
&lt;br /&gt;
• Within the 'Graphing' tab, click 'Start' [Ctrl+Enter]. &lt;br /&gt;
&lt;br /&gt;
• Select the directory corresponding to the Output folder we have used for this fuzzing session. This will typically be the last one. &lt;br /&gt;
&lt;br /&gt;
• Right-click and select 'Graph' &lt;br /&gt;
&lt;br /&gt;
Once complete, browse to the 'Response Size' tab within the 'Graphing' tab, as illustrated in the screenshot below: &lt;br /&gt;
&lt;br /&gt;
[[Image:008-JBroFuzz-Tutorial.png|300px|JBroFuzz Graphing different 'Response Sizes']] &lt;br /&gt;
&lt;br /&gt;
To re-iterate this does not present a security vulnerability in any shape or form; merely the fact that by manipulating HTTP version numbers as part of the request we transmit, we can impact the response that we get back. In this case, what changes is the non-existent header fields, with some HTML content being received back. &lt;br /&gt;
&lt;br /&gt;
If I was to guess what is causing this, I would say that some sort of load balancing or content delivery is not happening as it should when non-existent version numbers are being transmitted. &lt;br /&gt;
&lt;br /&gt;
== Using JBroFuzz with a Generic Proxy  ==&lt;br /&gt;
&lt;br /&gt;
JBrofuzz 2.0 and subsequent releases include generic proxy support. As of this writing, basic authentication is supported with plans to eventually support NTLM and Kerberos authentication as well. We've tried to make the use of a proxy as straight forward as possible. All arguments for the proxy can be passed in the URL field and will take one of the following forms. &lt;br /&gt;
&amp;lt;pre&amp;gt;Without Authentication: &amp;amp;lt;proxy server&amp;amp;gt;:&amp;amp;lt;proxy port&amp;amp;gt;&lt;br /&gt;
With Authentication: &amp;amp;lt;proxy username&amp;amp;gt;:&amp;amp;lt;proxy password&amp;amp;gt;@&amp;amp;lt;proxy server&amp;amp;gt;:&amp;amp;lt;proxy port&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
The structure of the request field and whether the GET parameter contains an absolute URL depends on the proxy you are using. For this reason, you may have to do a bit of trial and error to determine what format(s) your proxy accepts. To make all of this a bit clearer lets look at a couple of examples. &lt;br /&gt;
&lt;br /&gt;
=== Squid Proxy  ===&lt;br /&gt;
&lt;br /&gt;
In the first example, we are fuzzing through a squid proxy that requires ncsa user authentication as shown in the figure below. When producing similar results, its important that you use your own proxy and not the one shown in the figure. This proxy was setup for demonstration purposes, will not accept connections from your IP address, and the credentials will no longer be active. &lt;br /&gt;
&lt;br /&gt;
[[Image:016-JBroFuzz-Tutorial.jpg|503x449px]] &lt;br /&gt;
&lt;br /&gt;
=== Paros Proxy  ===&lt;br /&gt;
&lt;br /&gt;
In the second example, we are fuzzing through a local Paros proxy running on port 8080 that does not require user authentication. Notice the difference in the syntax of the URL field when user authentication is not required. &lt;br /&gt;
&lt;br /&gt;
[[Image:017-JBroFuzz-Tutorial.jpg|503x449px]] &lt;br /&gt;
&lt;br /&gt;
In the third example, we are still fuzzing through Paros, but notice the slight difference in the Request Field. Specifically, pay special attention to the GET line. We are no longer including the fully qualified path. Unlike Squid, Paros will accept both formats. Keep this in mind when you are performing initial testing with JBroFuzz and the proxy of your choice. &lt;br /&gt;
&lt;br /&gt;
[[Image:018-JBroFuzz-Tutorial.jpg|503x449px]]&lt;br /&gt;
&lt;br /&gt;
=== Burp Proxy  ===&lt;br /&gt;
In the final example, we are fuzzing through Burp. Similar to Squid, Burp requires absolute URLs in the request. A successful Burp request is shown below.&lt;br /&gt;
&lt;br /&gt;
[[Image:019-JBroFuzz-Tutorial.jpg|503x449px]]&lt;br /&gt;
&lt;br /&gt;
== Using JBroFuzz with Paros Proxy ==&lt;br /&gt;
&lt;br /&gt;
JBroFuzz is a standalone fuzzer; it can release and create sockets over HTTP and HTTPS, but in order to use JBroFuzz correctly you will have to know what it is that you are fuzzing. &lt;br /&gt;
&lt;br /&gt;
In comes the need for a proxy tool; the opening versions of JBroFuzz actually had a proxy tab that you could use to intercept traffic generated by your web browser. That functionality got removed in an attempt to focus and deliver solely on the fuzzing capabilities of the tool. &lt;br /&gt;
&lt;br /&gt;
This section details how to use JBroFuzz in combination with a client side proxy. The one selected is Paros Proxy, which, despite the fact that it hasn't been updated since 2006 is still a popular tool that you see in web security testing live CDs. You could use any of the other proxy tools available. &lt;br /&gt;
&lt;br /&gt;
=== Winning on a Remix of the Year Award ===&lt;br /&gt;
&lt;br /&gt;
At 17:53, on a frosty winter evening, a message window popped up: &lt;br /&gt;
&amp;lt;pre&amp;gt;17:53 http://www.localhost.com/remixcontest/club/annual2010.html&lt;br /&gt;
17:53 Hey bro, could you cast in a vote here for the Such &amp;amp;amp; Such Remix?&lt;br /&gt;
17:53 Appreciated!&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
A friend in need is a friend indeed, so here goes I thought. Opening up a web browser configured to work with Paros as an intermediate proxy, allowed for the casting of my vote. while keeping a record of each request and reply. &lt;br /&gt;
&lt;br /&gt;
No registration, or any other form of submitting an identifier was needed. The request that Paros stored for the casting of the actual vote was: &lt;br /&gt;
&amp;lt;pre&amp;gt;GET http://www.localhost.com/remixcontest/club/vote.php?onLoad=%5Btype%20Method%5D&amp;amp;amp;id=55 HTTP/1.1&lt;br /&gt;
Host: www.localhost.com&lt;br /&gt;
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729) Paros/3.2.13&lt;br /&gt;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&lt;br /&gt;
Accept-Language: en-gb,en;q=0.5&lt;br /&gt;
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&lt;br /&gt;
Keep-Alive: 300&lt;br /&gt;
Proxy-Connection: keep-alive&lt;br /&gt;
Cookie: PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Paros Proxy actually places the domain (in this case www.localhost.com) with the protocol (i.e. http) in front of the GET request. As a result, you can't open a telnet/netcat session and just copy-paste the above. Similarly when we bring the request into JBroFuzz, a bit of tweaking is required. &lt;br /&gt;
&lt;br /&gt;
*In the URL field, type:&lt;br /&gt;
&amp;lt;pre&amp;gt;http://www.localhost.com&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
In the Request field, let's keep what is of interest: &lt;br /&gt;
&amp;lt;pre&amp;gt;GET /remixcontest/club/vote.php?onLoad=%5Btype%20Method%5D&amp;amp;amp;id=55 HTTP/1.0&lt;br /&gt;
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5&lt;br /&gt;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&lt;br /&gt;
Accept-Language: en-gb,en;q=0.5&lt;br /&gt;
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&lt;br /&gt;
Cookie: PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
No needs for Keep-Alive and Proxy-Connection. Let's simplify the HTTP request by making it a version 1.0 request and getting rid of the Host header as well. Also on the user agent, let us keep that mainstream vanilla: Firefox on Windows (popular browser combination), getting rid of the .NET and Paros additives. &lt;br /&gt;
&lt;br /&gt;
Checking on the website, our Such &amp;amp;amp; Such remix already has about 100 votes or so and the top remix has approximately 310 votes. Let's fuzz this: &lt;br /&gt;
&lt;br /&gt;
*Select 2 of the digits of the cookie value:&lt;br /&gt;
&amp;lt;pre&amp;gt;PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
*Select: Panel -&amp;amp;gt; Add&lt;br /&gt;
&lt;br /&gt;
*In the &amp;quot;Add a Fuzzer&amp;quot; panel, select:&lt;br /&gt;
&amp;lt;pre&amp;gt;Base -&amp;amp;gt; Base16 (HEX)&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
and select &amp;quot;Add Fuzzer&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
This will add a line within the Payloads tab on the right hand side. &lt;br /&gt;
&lt;br /&gt;
Our cookie value above (PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e) is in lowercase, hexadecimal format. Let's make sure the encoding we select is also that. &lt;br /&gt;
&lt;br /&gt;
Within the Payloads tab, click on the encoding drop down menu and select lowercase. Just before clicking &amp;quot;Start&amp;quot;, JBroFuzz should look something like the screenshot below. &lt;br /&gt;
&lt;br /&gt;
[[Image:014-JBroFuzz-Tutorial.png|Adding Votes by iterating through PHPSESSID cookie values]] &lt;br /&gt;
&lt;br /&gt;
== Performing User Enumeration with a Valid Set of Credentials  ==&lt;br /&gt;
&lt;br /&gt;
Often you encounter an application that allows for the enumeration of one or more pages after a user has been successfully granted a set of session credentials. One of the key areas to test from an application specific perspective, relates to the page(s) that provide user account information. &lt;br /&gt;
&lt;br /&gt;
In the following example, we investigate an ASP.NET 2.0 application with a C# back-end. In this, an authenticated user has the option to select to &amp;quot;View My Profile&amp;quot;. This page provides them with account information (including the typical username, email address, further notes) that they can proceed to update and save to the back-end system. &lt;br /&gt;
&lt;br /&gt;
After a user has authenticated, the following URL, gives them access to their profile information stored on the database: &lt;br /&gt;
&amp;lt;pre&amp;gt;http://www.myattackingdomain.com/portal-location/UserInfo.aspx?UserID=23&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Simple investigation confirms that the digits allowed as part of the UserID value are decimal numbers only. Lets feed that information into JBroFuzz. &lt;br /&gt;
&lt;br /&gt;
=== Fuzzing a User ID ===&lt;br /&gt;
&lt;br /&gt;
• Within JBroFuzz, select: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;File -&amp;amp;gt; Open Location [Ctrl+L]&amp;lt;br&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Type: http://www.myattackingdomain.com/portal-location/UserInfo.aspx?UserID=23 and hit enter. This is depicted in the following screenshot: &lt;br /&gt;
&lt;br /&gt;
[[Image:009-JBroFuzz-Tutorial.png|300px|JBroFuzz 'GET' Request with a 'UserID' parameter]] &lt;br /&gt;
&lt;br /&gt;
From the URL the important parameter is the value of the UserID query string (the value 23, above). We want to fuzz that. &lt;br /&gt;
&lt;br /&gt;
• Within the Fuzzing Tab, in the &amp;quot;Request&amp;quot; text area, highlight the above number 23 • Right-click and select &amp;quot;Add&amp;quot; &lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Add a Fuzzer&amp;quot; window that appears, select: &lt;br /&gt;
&lt;br /&gt;
• Category Name: &amp;lt;code&amp;gt;Base&amp;lt;/code&amp;gt; • Fuzzer Name: &amp;lt;code&amp;gt;Base10 (DEC)&amp;lt;/code&amp;gt; • Select &amp;quot;Add Fuzzer&amp;quot; in the bottom right &lt;br /&gt;
&lt;br /&gt;
This would have added a decimal (base 10 fuzzer) of length 2 onto the location. &lt;br /&gt;
&lt;br /&gt;
• You will see a row added within the &amp;quot;Added Fuzzers Table&amp;quot; of the Fuzzing panel. • Click &amp;quot;Start&amp;quot; &amp;lt;code&amp;gt;Ctrl+Enter&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
This will transmit 100 requests to the domain in question, which in this case is assumed: www.myattackingdomain.com. The value being changed within each request will be: &lt;br /&gt;
&amp;lt;pre&amp;gt;• GET /portal-location/UserInfo.aspx?UserID=00 HTTP/1.0&lt;br /&gt;
• GET /portal-location/UserInfo.aspx?UserID=01 HTTP/1.0&lt;br /&gt;
...&lt;br /&gt;
• GET /portal-location/UserInfo.aspx?UserID=98 HTTP/1.0&lt;br /&gt;
• GET /portal-location/UserInfo.aspx?UserID=99 HTTP/1.0&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Done. Let's proceed to graph the responses that we have obtained. Our objective is to understand which two-digit numbers from 00 to 99 correspond to valid user accounts. &lt;br /&gt;
&lt;br /&gt;
=== Graphing Results ===&lt;br /&gt;
&lt;br /&gt;
• Within the &amp;quot;Graphing&amp;quot; tab, click &amp;quot;Start&amp;quot; &amp;lt;code&amp;gt;Ctrl+Enter&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A list of directories will appear on the left-hand side. If you scroll to the bottom of the list you should see the directory corresponding to your fuzzing session, in our case it was (175 2009-06-24 16-18-24) &lt;br /&gt;
&amp;lt;pre&amp;gt;• Right-click on (175 2009-06-24 16-18-24)&lt;br /&gt;
• Click &amp;quot;Graph&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This will generate the graphs in their respective tabs. The question now becomes which graph is of interest for our user enumeration exercise. &lt;br /&gt;
&lt;br /&gt;
By definition enumerating users against an ID value, or any other identifier involves being able to obtain a different response for an existing user to that of a user that is not have a corresponding ID value. &lt;br /&gt;
&lt;br /&gt;
Thus, from the metrics available, the one useful for enumerating users will be that of measuring the &amp;quot;Hamming Distance&amp;quot; between responses received. Based on the JBroFuzz documentation: &lt;br /&gt;
&lt;br /&gt;
'''Fuzzing Hamming Distance ''' &lt;br /&gt;
&amp;lt;pre&amp;gt;A bar chart with the hamming distance of the characters in the response, &lt;br /&gt;
relative to the first response received. Check each character of the first&lt;br /&gt;
response received, against the character at the same position of the&lt;br /&gt;
current response received. If they are not identical, increment the &lt;br /&gt;
hamming distance.&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
As we can see the Fuzzing Hamming Distance (FHD) varies quite a bit from the definition of the normal hamming distance term, used in telecommunications. Still, they share a lot of similarities. &lt;br /&gt;
&lt;br /&gt;
As we can from the above, the first request is critical to calibrating our user enumeration exercise. It represents the value that all other Fuzzing Hamming Distances (FHD) will be measured and normalised towards. For the java-skilled audience, the algorithm is quite trivial, but offers spectacular results in distinguishing responses: &lt;br /&gt;
&amp;lt;pre&amp;gt;in = new BufferedReader(new FileReader(f));&lt;br /&gt;
   58 &lt;br /&gt;
   59 			int counter = 0;&lt;br /&gt;
   60 			int check = 0;&lt;br /&gt;
   61 			int c;&lt;br /&gt;
   62 			while (((c = in.read()) &amp;amp;gt; 0) &amp;amp;amp;&amp;amp;amp; (counter &amp;amp;lt; MAX_CHARS)) {&lt;br /&gt;
   63 &lt;br /&gt;
   64 				// If we are passed &amp;quot;--jbrofuzz--&amp;amp;gt;\n&amp;quot; in the file&lt;br /&gt;
   65 				if (check == END_SIGNATURE.length()) {&lt;br /&gt;
   66 &lt;br /&gt;
   67 					firstSet.append((char) c);&lt;br /&gt;
   68 &lt;br /&gt;
   69 				}&lt;br /&gt;
   70 				// Else find &amp;quot;--jbrofuzz--&amp;amp;gt;\n&amp;quot; using a counter&lt;br /&gt;
   71 				else {&lt;br /&gt;
   72 					// Increment the counter for each success&lt;br /&gt;
   73 					if (c == END_SIGNATURE.charAt(check)) {&lt;br /&gt;
   74 						check++;&lt;br /&gt;
   75 					} else {&lt;br /&gt;
   76 						check = 0;&lt;br /&gt;
   77 					}&lt;br /&gt;
   78 				}&lt;br /&gt;
   79 &lt;br /&gt;
   80 				counter++;&lt;br /&gt;
   81 &lt;br /&gt;
   82 			}&lt;br /&gt;
   83 			in.close();&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Ergo, the corresponding graph is depicted in the screenshot below. The peak graphs correspond to number that if you hover the mouse over will give you the enumeration ID of a valid user. &lt;br /&gt;
&lt;br /&gt;
[[Image:015-JBroFuzz-Tutorial.png|500px|Measuring Hamming Distance for User Enumeration]] &lt;br /&gt;
&lt;br /&gt;
== Eliminating False Positives: LDAP Injection ==&lt;br /&gt;
&lt;br /&gt;
Every now and then a tool (that does not produce false positives) will hit an application reporting back a huge variety of (hopefully not confirmed, but pending further investigation) injection findings. &lt;br /&gt;
&lt;br /&gt;
Due to the limited number of characters required in performing LDAP Injection, such issues will be high on that list. But let's refresh our memory a bit of how LDAP injection works:&lt;br /&gt;
&lt;br /&gt;
http://www.owasp.org/index.php/LDAP_injection&lt;br /&gt;
&lt;br /&gt;
So typically, during an automated scan, negating LDAP cn-type queries would be submitted and their responses noted. Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /myfilelocation.jsp?lang=en&amp;amp;city=user)(sn=*&amp;amp;rid=97 HTTP/1.1&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
vs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /myfilelocation.jsp?lang=en&amp;amp;city=user)!(sn=*&amp;amp;rid=97 HTTP/1.1&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /myfilelocation.jsp?lang=en&amp;amp;city=admin*)((|userpassword=*)&amp;amp;rid=97 HTTP/1.1&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As great as this check might be from an LDAP perspective, it has a high likelihood of generating false positives, due to the character sets being used. Ergo, a protection mechanism (silly worst-case blacklist present for example) would typically hunt down cross-site scripting and sql injection type of characters:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt; &amp;gt; ' etc.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Not considering =, *, or brackets as completely bad (he says). &lt;br /&gt;
&lt;br /&gt;
=== What characters are allowed through? ===&lt;br /&gt;
&lt;br /&gt;
Enough of all that; we want to know what responses are allowed back and what's different about them for all characters being filtered through a black-list.&lt;br /&gt;
&lt;br /&gt;
Let's transform the above GET into the following and proceed to add a single fuzzer that tells us that:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /myfilelocation.jsp?lang=en&amp;amp;city=X&amp;amp;rid=97 HTTP/1.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== JBroFuzz Development Corner  ==&lt;br /&gt;
&lt;br /&gt;
This section presents how to setup and use JBroFuzz as a fuzzing library. Also, it offers an insight in how to setup and compile your own version of JBroFuzz. As different people have different levels of expertise of the java programming language, eclipse, ant and subversion, some of the steps presented herein might be considered basic by advanced developers. &lt;br /&gt;
&lt;br /&gt;
=== Setting up a JBroFuzz Development Environment ===&lt;br /&gt;
&lt;br /&gt;
This section guides you towards setting up a development environment for JBroFuzz. Despite the Operating System (O/S) being windows XP, a similar process can be followed in a number of other O/S. &lt;br /&gt;
&lt;br /&gt;
You will need to have installed: &lt;br /&gt;
&lt;br /&gt;
*Tortoise SVN (using TortoiseSVN-1.6.6.17493-win32-svn-1.6.6.msi) &lt;br /&gt;
*Eclipse Java (using eclipse-java-galileo-SR1-win32.zip)&lt;br /&gt;
&lt;br /&gt;
Optionally, if you don't like building your application through eclipse you could also require to install Apache Ant. &lt;br /&gt;
&lt;br /&gt;
==== Step 1: Obtain the source code ====&lt;br /&gt;
&lt;br /&gt;
JBroFuzz uses SubVersion with the repository being publicly available for download through anonymous access on sourceforge. There is a plan to move it the source to the OWASP Git repository, but until then, use the guidelines below. &lt;br /&gt;
&lt;br /&gt;
[[Image:010-JBroFuzz-Tutorial.png|Tortoise SVN Check out JBroFuzz Source Code]] &lt;br /&gt;
&lt;br /&gt;
Right click on the folder location where you want to download the source code and select: &lt;br /&gt;
&lt;br /&gt;
*SVN Checkout&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;URL of repository&amp;quot;, enter: &lt;br /&gt;
&amp;lt;pre&amp;gt;https://jbrofuzz.svn.sourceforge.net/svnroot/jbrofuzz&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
In the &amp;quot;Checkout directory&amp;quot;, enter the folder location of your choice, in this case: &lt;br /&gt;
&amp;lt;pre&amp;gt;C:\root\code\jbrofuzz&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
In the &amp;quot;Checkout Depth&amp;quot; select: &lt;br /&gt;
&lt;br /&gt;
*Fully recursive&lt;br /&gt;
&lt;br /&gt;
Untick &amp;quot;Omit Externals&amp;quot; (should be unticked by default) &lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Revision&amp;quot; select: &lt;br /&gt;
&lt;br /&gt;
*&amp;quot;Head revision&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Select OK. &lt;br /&gt;
&lt;br /&gt;
This process, once complete will checkout the entirety of the JBroFuzz source code from the SVN repository on sourceforge. &lt;br /&gt;
&lt;br /&gt;
==== Step 2: Configuring a JBroFuzz Project within Eclipse ====&lt;br /&gt;
&lt;br /&gt;
Having obtained the latest copy of the source code, the next step entails importing that source code within the Eclipse IDE. &lt;br /&gt;
&lt;br /&gt;
Within Eclipse, select: &lt;br /&gt;
&amp;lt;pre&amp;gt;File -&amp;amp;gt; New -&amp;amp;gt; Other&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
From the &amp;quot;New&amp;quot; panel that appears, select: &lt;br /&gt;
&amp;lt;pre&amp;gt;Java -&amp;amp;gt; Java Project from Existig Ant Buildfile&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
[[Image:011-JBroFuzz-Tutorial.png|Import JBroFuzz Code into Eclipse from Ant File]] &lt;br /&gt;
&lt;br /&gt;
Select &amp;quot;Next&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
In the next menu, under &amp;quot;Ant buildfile&amp;quot;, select &amp;quot;Browse&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Browse to the location where you have just (step 1) downloaded the source code and select the following file: &lt;br /&gt;
&lt;br /&gt;
*build.xml&lt;br /&gt;
&lt;br /&gt;
The build.xml file is an Ant build file that JBroFuzz uses. &lt;br /&gt;
&lt;br /&gt;
[[Image:012-JBroFuzz-Tutorial.png|Select the Ant File]] &lt;br /&gt;
&lt;br /&gt;
Selecting that file should have populated the &amp;quot;Project name&amp;quot; as jbrofuzz and also given you: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;javac&amp;quot; task found in target &amp;quot;compile&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
MAKE SURE TO TICK: &lt;br /&gt;
&lt;br /&gt;
*&amp;quot;Link to the buildfile in the filesystem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise eclipse will try to replicate the source code within your workspace and that makes the process a tiny bit more complicated when it comes to actually building JBroFuzz. &lt;br /&gt;
&lt;br /&gt;
Click &amp;quot;Finish&amp;quot; &lt;br /&gt;
&lt;br /&gt;
You will see the item &amp;quot;Building workspace (76%) on the bottom right hand side of Eclipse. Once that is complete, you should see the jbrofuzz project on the top left corner of the Package Explorer within Eclipse. &lt;br /&gt;
&lt;br /&gt;
==== Step 3: Building JBroFuzz ====&lt;br /&gt;
&lt;br /&gt;
Within the Package Explorer, expand the jbrofuzz project and double-click on the build.xml file. &lt;br /&gt;
&lt;br /&gt;
Right click on the &amp;quot;build [default]&amp;quot; task within the &amp;quot;Outline&amp;quot; window (typically seen on the right hand side) and select: &lt;br /&gt;
&amp;lt;pre&amp;gt;Run As -&amp;amp;gt; 1. Ant Build [Alt+Shift+X, Q]&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
If the build has been successful, a JBroFuzz.jar file within the the /jar folder would have been created. Following the path conventions above that should be in: &lt;br /&gt;
&amp;lt;pre&amp;gt;C:\root\code\jbrofuzz\jar\JBroFuzz.jar&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
[[Image:013-JBroFuzz-Tutorial.png|Building JBroFuzz within Eclipse]] &lt;br /&gt;
&lt;br /&gt;
=== How to Use JBroFuzz as a Fuzzing Library ===&lt;br /&gt;
&lt;br /&gt;
Quite often what you need to do in terms of fuzzing, far exceeds the User Interface (UI) of JBroFuzz. For this reason, a set of core fuzzing APIs have been made available that can be used for more advanced fuzzing scenarios. &lt;br /&gt;
&lt;br /&gt;
The JBroFuzz.jar standalone archive (made available with every release) carries a core fuzzing library that holds a number of key classes. These are located under: &lt;br /&gt;
&amp;lt;pre&amp;gt;org.owasp.jbrofuzz.core.*;&lt;br /&gt;
-Database.java&lt;br /&gt;
-Fuzzer.java&lt;br /&gt;
-FuzzerBigInteger.java&lt;br /&gt;
-NoSuchFuzzerException.java&lt;br /&gt;
-Prototype.java&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
The class of importance is Fuzzer.java. If you are going to use recursive iterators of great length, there is also FuzzerBigInteger.java. The difference between the two is that Fuzzer.java uses the primitive java data type long (up to 16^16 values) while FuzzerBigInteger.java uses java BigInteger to perform the counting. Naturally, the class FuzzerBigInteger is slower and takes more memory than the Fuzzer class. &lt;br /&gt;
&lt;br /&gt;
Within JBroFuzz a Fuzzer is an instance of a java Iterator. This implies that values can be accessed by simply calling the &amp;lt;code&amp;gt;next()&amp;lt;/code&amp;gt; method once an object has been made available. Typically, a call to &amp;lt;code&amp;gt;hasNext()&amp;lt;/code&amp;gt; should also be performed prior to avoid an exception being thrown. &lt;br /&gt;
&lt;br /&gt;
A Fuzzer can be obtained from the factory method &amp;lt;code&amp;gt;createFuzzer(String, int);&amp;lt;/code&amp;gt; available for every instance of the fuzzing Database. Ergo: &lt;br /&gt;
&lt;br /&gt;
==== A HelloFuzzer Example ====&lt;br /&gt;
&amp;lt;pre&amp;gt;Database myDatabase = new Database();&lt;br /&gt;
&lt;br /&gt;
Fuzzer myFuzzer = myDatabase.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 5);&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
So how do I use the API? Here is a simple HelloFuzzer (file called HelloFuzzer.java) example: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(Fuzzer f = fuzzDB.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 4); f.hasNext();) {&lt;br /&gt;
       // Get the next payload value...&lt;br /&gt;
       System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloFuzzer.java OWASP JBroFuzz Example 1&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
To compile the above use: &lt;br /&gt;
&amp;lt;pre&amp;gt;javac -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar&amp;quot; HelloFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This assumes that you are currently inside the directory where HelloFuzzer.java resides and that the JBroFuzz.jar is located two directories within your current location i.e. in jbrofuzz/jar. In order to run the above compiled HelloFuzzer class issue: &lt;br /&gt;
&amp;lt;pre&amp;gt;java -cp &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Note: The above 2 commands have been crafted in a win32 environment. The process for compiling and running HelloFuzzer.java above is the same in *nix machines. Simply replace the backslash &amp;quot;\&amp;quot; with &amp;quot;/&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
==== Fuzzing Payload Definitions ====&lt;br /&gt;
&lt;br /&gt;
Within the JBroFuzz.jar file, there is a file called fuzzers.jbrf that carries all the fuzzer definitions that you see in the UI payloads tab of JBroFuzz. To view a latest copy of this file you can browse the SVN repository of JBroFuzz: &lt;br /&gt;
&amp;lt;pre&amp;gt;http://jbrofuzz.svn.sourceforge.net/viewvc/jbrofuzz/tar/fuzzers.jbrf?view=log&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
A note here worth mentioning: Files ending in .jbrofuzz are session files saved by users while performing fuzzing operations. Files ending in .jbrf are JBroFuzz system files. Typical examples of .jbrf files are headers.jbrf, as well as fuzzers.jbrf. Both these use an internal proprietary format not to be confused with the .jbrofuzz file format. &lt;br /&gt;
&lt;br /&gt;
Fuzzers belong in categories (1 to many) and each fuzzer carries a set of payloads that define the alphabet of the fuzzer. &lt;br /&gt;
&lt;br /&gt;
Also, you have replacive and recursive fuzzers, zero fuzzers, etc. There are a number of different fuzzer categories. As an example of a fuzzer within the fuzzers.jbrf file, consider the hexadecimal fuzzer: &lt;br /&gt;
&amp;lt;pre&amp;gt;Fuzzer Name: Base16 (HEX)&lt;br /&gt;
Fuzzer Type: Recursive&lt;br /&gt;
Fuzzer Id:   031-B16-HEX&lt;br /&gt;
&lt;br /&gt;
Total Number of Payloads: 16&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Within the fuzzers.jbrf file this fuzzer is defined in plain-text format as follows: &lt;br /&gt;
&amp;lt;pre&amp;gt;R:031-B16-HEX:Base16 (HEX):16&lt;br /&gt;
&amp;amp;gt; Number Systems | Base | Recursive Fuzzers&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
a&lt;br /&gt;
b&lt;br /&gt;
c&lt;br /&gt;
d&lt;br /&gt;
e&lt;br /&gt;
f&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; There is very little preventing you from defining your own fuzzers within this file, by following the file format specified above. You can use the UI to see if they have been loaded successfully. &lt;br /&gt;
&lt;br /&gt;
Further to recursive and replacive fuzzers you also have zero fuzzers (i.e. a zero fuzzer of 1000 will just transmit 1000 requests as they are, without adding any payloads) double fuzzers, cross product fuzzers, etc. &lt;br /&gt;
&lt;br /&gt;
Notice the factory method Database.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 4) yielding: &amp;quot;I want a 4 digit recursive fuzzer (why because NUM-HEX is recursive in its definition, starts with R: instead of P:) of HEX digits.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Thus the above scenario would iterate through all the digits from 0000 to ffff. I wouldn't recommend using the above scenario for such trivial fuzzing capabilities; simply presented as an example of the inner workings of JBroFuzz.jar &lt;br /&gt;
&lt;br /&gt;
==== HelloFuzzer Refined ====&lt;br /&gt;
&lt;br /&gt;
A more detailed code breakdown of the above HelloFuzzer example can be found below: &lt;br /&gt;
&amp;lt;pre&amp;gt;/**&lt;br /&gt;
 * JBroFuzz API Examples 01&lt;br /&gt;
 *&lt;br /&gt;
 * JBroFuzz - A stateless network protocol fuzzer for web applications.&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (C) 2007, 2008, 2009 subere@uncon.org&lt;br /&gt;
 *&lt;br /&gt;
 * This file is part of the JBroFuzz API examples on how to use the &lt;br /&gt;
 * fuzzer libraries included in JBroFuzz.jar.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is free software: you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 * &lt;br /&gt;
 * You should have received a copy of the GNU General Public License&lt;br /&gt;
 * along with JBroFuzz.  If not, see &amp;amp;lt;http://www.gnu.org/licenses/&amp;amp;gt;.&lt;br /&gt;
 * Alternatively, write to the Free Software Foundation, Inc., 51 &lt;br /&gt;
 * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.&lt;br /&gt;
 * &lt;br /&gt;
 * Verbatim copying and distribution of this entire program file is &lt;br /&gt;
 * permitted in any medium without royalty provided this notice &lt;br /&gt;
 * is preserved. &lt;br /&gt;
 * &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import org.owasp.jbrofuzz.core.NoSuchFuzzerException;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Database;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Fuzzer; &lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;In JBroFuzz a Fuzzer is a java Iterator.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;In order to create a Fuzzer, use the factory method&lt;br /&gt;
 * Database.createFuzzer(String, int), passing as arguments&lt;br /&gt;
 * the Fuzzer ID and the specified length as a positive int.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;Be careful to check that the fuzzer ID (labelled as f_ID)&lt;br /&gt;
 * is actually an existing ID from the Database of Fuzzers.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;Expected Output:&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &amp;amp;lt;code&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: 00000&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: 00001&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  ...&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  (a total of 16^5 = 1048576 lines)&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  ...&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: ffffd&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: ffffe&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: fffff&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 * &amp;amp;lt;/code&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;For more information on the Database of Fuzzers, see the&lt;br /&gt;
 * HelloDatabase Class.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * @author subere@uncon.org&lt;br /&gt;
 * @version n/a&lt;br /&gt;
 */&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param args&lt;br /&gt;
	 */&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
		// You have to construct an instance of the fuzzers database&lt;br /&gt;
		Database fuzzDB = new Database();&lt;br /&gt;
		// You have to supply a valid fuzzer ID&lt;br /&gt;
		String f_ID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
		// You have to supply a (+)tive int&lt;br /&gt;
		int f_len = 5;&lt;br /&gt;
		&lt;br /&gt;
		try {&lt;br /&gt;
			&lt;br /&gt;
			for(Fuzzer f = fuzzDB.createFuzzer(f_ID, f_len); f.hasNext();) {&lt;br /&gt;
				&lt;br /&gt;
				// Get the next payload value...&lt;br /&gt;
				System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		} catch (NoSuchFuzzerException e) {&lt;br /&gt;
			&lt;br /&gt;
			System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
==== Hello Database of Fuzzers ====&lt;br /&gt;
&lt;br /&gt;
Having seen how to access a single Fuzzer through the createFuzzer() method available in the Database object. The next question that comes naturally is what are the Fuzzers that are available by default in JBroFuzz? &lt;br /&gt;
&lt;br /&gt;
To answer that, this example focuses more on the database component that we previously initialised, investigating the list of available methods that it offers. &lt;br /&gt;
&lt;br /&gt;
In JBroFuzz, all Fuzzers are stored in a Database object that you will be required to construct in order to access them. &lt;br /&gt;
&amp;lt;pre&amp;gt;/**&lt;br /&gt;
 * JBroFuzz API Examples 02&lt;br /&gt;
 *&lt;br /&gt;
 * JBroFuzz - A stateless network protocol fuzzer for web applications.&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (C) 2007, 2008, 2009 subere@uncon.org&lt;br /&gt;
 *&lt;br /&gt;
 * This file is part of the JBroFuzz API examples on how to use the &lt;br /&gt;
 * fuzzer libraries included in JBroFuzz.jar.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is free software: you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 * &lt;br /&gt;
 * You should have received a copy of the GNU General Public License&lt;br /&gt;
 * along with JBroFuzz.  If not, see &amp;amp;lt;http://www.gnu.org/licenses/&amp;amp;gt;.&lt;br /&gt;
 * Alternatively, write to the Free Software Foundation, Inc., 51 &lt;br /&gt;
 * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.&lt;br /&gt;
 * &lt;br /&gt;
 * Verbatim copying and distribution of this entire program file is &lt;br /&gt;
 * permitted in any medium without royalty provided this notice &lt;br /&gt;
 * is preserved. &lt;br /&gt;
 * &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import org.owasp.jbrofuzz.core.NoSuchFuzzerException;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Database;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Fuzzer; &lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;In JBroFuzz all Fuzzers are stored in a Database&lt;br /&gt;
 * object that you will be required to construct in order&lt;br /&gt;
 * to access them.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;Within the Database, each Fuzzer is a collection of &lt;br /&gt;
 * payloads, which carries a unique ID string value.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;Example ID values are the output of this program:&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &amp;amp;lt;code&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer ID is: 013-LDP-INJ&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	The name of the fuzzer is:			LDAP Injection&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	The id of the fuzzer is:			013-LDP-INJ&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	The of payloads it carries (it's alphabet) is:	20&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	It has as 1st payload:&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *		|&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *  The fuzzer ID is: 018-XSS-4IE&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	The name of the fuzzer is:			XSS IE&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	The id of the fuzzer is:			018-XSS-4IE&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	The of payloads it carries (it's alphabet) is:	38&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *	It has as 1st payload:&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *		&amp;amp;lt; img src=`x` onrerror= `&amp;amp;nbsp;;; alert(1) ` /&amp;amp;gt;&amp;amp;lt;br&amp;amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * &amp;amp;lt;/code&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;Do not be confused between Prototypes and Fuzzers; &lt;br /&gt;
 * JBroFuzz uses Prototype objects to construct the Fuzzers&lt;br /&gt;
 * that get added into the Database upon initialisation.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;As a result, the getter methods available within a Database&lt;br /&gt;
 * object can carry the name of getAllPrototypeIDs and &lt;br /&gt;
 * getAllFuzzerIDs interchangebly.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * @author subere@uncon.org&lt;br /&gt;
 * @version n/a&lt;br /&gt;
 */&lt;br /&gt;
public class HelloDatabase {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param args&lt;br /&gt;
	 */&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
		// You have to construct an instance of the fuzzers database&lt;br /&gt;
		Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
		// Get a list of all the fuzzer IDs from the database&lt;br /&gt;
		String[] fuzzer_IDs = fuzzDB.getAllPrototypeIDs();&lt;br /&gt;
		&lt;br /&gt;
		System.out.println(&amp;quot;The fuzzer IDs found are:&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		for(String fuzzerID&amp;amp;nbsp;: fuzzer_IDs) {&lt;br /&gt;
			&lt;br /&gt;
			System.out.println(&amp;quot;The fuzzer ID is: &amp;quot; + fuzzerID);&lt;br /&gt;
			&lt;br /&gt;
			// We pass of length of 1, irrelevant if we are&lt;br /&gt;
			// just going to access the first payload&lt;br /&gt;
			// of the fuzzer&lt;br /&gt;
			Fuzzer fuzzer;&lt;br /&gt;
			try {&lt;br /&gt;
				&lt;br /&gt;
				fuzzer = fuzzDB.createFuzzer(fuzzerID, 1);&lt;br /&gt;
				// Normally you should check for fuzzer.hasNext()				&lt;br /&gt;
				String payload = fuzzer.next();&lt;br /&gt;
				&lt;br /&gt;
				System.out.println(&amp;quot;\tThe name of the fuzzer is:\t\t\t&amp;quot; + fuzzer.getName() );&lt;br /&gt;
				System.out.println(&amp;quot;\tThe id of the fuzzer is:\t\t\t&amp;quot; + fuzzer.getId() );&lt;br /&gt;
				System.out.println(&amp;quot;\tThe of payloads it carries (it's alphabet) is:\t&amp;quot; + fuzzDB.getSize(fuzzerID));&lt;br /&gt;
				System.out.println(&amp;quot;\tIt has as 1st payload:\n\t\t&amp;quot; + payload );&lt;br /&gt;
&lt;br /&gt;
			} catch (NoSuchFuzzerException e) {&lt;br /&gt;
				System.out.println(&amp;quot;Could not find the specified fuzzer!&amp;quot;);&lt;br /&gt;
				System.out.println(&amp;quot;Going to print all the fuzzer IDs I know:&amp;quot;);&lt;br /&gt;
				// old vs new for loop&amp;amp;nbsp;:)&lt;br /&gt;
				// in case of an error, print just the &lt;br /&gt;
				// fuzzer IDs, accessed from the DB&lt;br /&gt;
				for(int j = 0; j &amp;amp;lt; fuzzer_IDs.length; j++) {&lt;br /&gt;
					System.out.println(&amp;quot;The fuzzer ID is: &amp;quot; + fuzzer_IDs[j]);&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
==== Methods available within the Fuzzer Class ====&lt;br /&gt;
&lt;br /&gt;
A final example of this section, involves seeing the usage of all the method calls available in the Fuzzer.java class &lt;br /&gt;
&amp;lt;pre&amp;gt;/**&lt;br /&gt;
 * JBroFuzz API Examples 03&lt;br /&gt;
 *&lt;br /&gt;
 * JBroFuzz - A stateless network protocol fuzzer for web applications.&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (C) 2007, 2008, 2009 subere@uncon.org&lt;br /&gt;
 *&lt;br /&gt;
 * This file is part of the JBroFuzz API examples on how to use the &lt;br /&gt;
 * fuzzer libraries included in JBroFuzz.jar.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is free software: you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 * &lt;br /&gt;
 * You should have received a copy of the GNU General Public License&lt;br /&gt;
 * along with JBroFuzz.  If not, see &amp;amp;lt;http://www.gnu.org/licenses/&amp;amp;gt;.&lt;br /&gt;
 * Alternatively, write to the Free Software Foundation, Inc., 51 &lt;br /&gt;
 * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.&lt;br /&gt;
 * &lt;br /&gt;
 * Verbatim copying and distribution of this entire program file is &lt;br /&gt;
 * permitted in any medium without royalty provided this notice &lt;br /&gt;
 * is preserved. &lt;br /&gt;
 * &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import org.owasp.jbrofuzz.core.NoSuchFuzzerException;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Database;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Fuzzer; &lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &amp;amp;lt;p&amp;amp;gt;Example iterating through all the methods available&lt;br /&gt;
 * in the Fuzzer Object and their respective outputs.&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * @author subere@uncon.org&lt;br /&gt;
 * @version n/a&lt;br /&gt;
 */&lt;br /&gt;
public class IndigoFuzzerTests {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param args&lt;br /&gt;
	 */&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
		// You have to construct an instance of the fuzzers database&lt;br /&gt;
		Database fuzzDB = new Database();&lt;br /&gt;
		// You have to supply a valid fuzzer ID&lt;br /&gt;
		String f_ID = &amp;quot;033-B08-OCT&amp;quot;;&lt;br /&gt;
		// You have to supply a (+)tive int&lt;br /&gt;
		int f_len = 5;&lt;br /&gt;
&lt;br /&gt;
		try {&lt;br /&gt;
			&lt;br /&gt;
			Fuzzer f = fuzzDB.createFuzzer(f_ID, f_len);&lt;br /&gt;
&lt;br /&gt;
			while(f.hasNext()) {&lt;br /&gt;
				&lt;br /&gt;
				// Could do this via reflection, but..&lt;br /&gt;
				f.next();&lt;br /&gt;
				// System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
				System.out.println(&amp;quot; The maximum value is: &amp;quot; + f.getMaximumValue());&lt;br /&gt;
&lt;br /&gt;
				System.out.println(&amp;quot; The current value is: &amp;quot; + f.getCurrectValue());&lt;br /&gt;
				&lt;br /&gt;
&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		} catch (NoSuchFuzzerException e) {&lt;br /&gt;
			&lt;br /&gt;
			System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
=== Advanced Fuzzing with the JBroFuzz Library ===&lt;br /&gt;
&lt;br /&gt;
This section covers more advanced APIs that are available under the '''org.owasp.jbrofuzz.core package'''. It should be noted that some of these classes and their corresponding functionality are not used by the JBroFuzz program application. Instead, they are made available for incorporation into other java code that you have perhaps written that requires more specialized type of fuzzing. &lt;br /&gt;
&lt;br /&gt;
==== Fuzzing Really Long Values with Big Integer ====&lt;br /&gt;
&lt;br /&gt;
As stated previously, within JBroFuzz a Fuzzer is a java Iterator. This implies that while fuzzing, we typically keep track of a counter representing the value that we are currently on. Consider the example of HelloFuzzer.java, above: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(Fuzzer f = fuzzDB.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 4); f.hasNext();) {&lt;br /&gt;
       // Get the next payload value...&lt;br /&gt;
       System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloFuzzer.java OWASP JBroFuzz Example 1&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
If we compile this program: &lt;br /&gt;
&amp;lt;pre&amp;gt;javac -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar&amp;quot; HelloFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
and run it: &lt;br /&gt;
&amp;lt;pre&amp;gt;java -cp &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
We are going to see output similar to: &lt;br /&gt;
&amp;lt;pre&amp;gt; The fuzzer payload is: 0000&lt;br /&gt;
 ... (output omitted)&lt;br /&gt;
 The fuzzer payload is: fffd&lt;br /&gt;
 The fuzzer payload is: fffe&lt;br /&gt;
 The fuzzer payload is: ffff&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Now what if we want a hexadecimal fuzzer of length not 4, but, say, 24. Let's try compile and run the above program with a length of 24. Changing the line to: &lt;br /&gt;
&amp;lt;pre&amp;gt;     for(Fuzzer f = fuzzDB.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 24); f.hasNext();) {&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Running this modified version of HelloFuzzer.java, yields: &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;gt;javac -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer.java&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt;java -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Nothing! What is actually happening is JBroFuzz is figuring out that the specified length of the Fuzzer we are about to create is far greater than that of the long java data type. As a result, the Fuzzer is not even entering the iteration mode that is typically expected with methods next() and hasNext(). &lt;br /&gt;
&lt;br /&gt;
That's all great, but we still want a hexadecimal fuzzer, 24 digits long going from: &lt;br /&gt;
&amp;lt;pre&amp;gt;000000000000000000000000&lt;br /&gt;
...to...&lt;br /&gt;
ffffffffffffffffffffffff&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
For this JBroFuzz offers another type of Fuzzer class, that of FuzzerBigInteger. Let's modify the critical line within the original HelloFuzzer.java program that we had: &lt;br /&gt;
&amp;lt;pre&amp;gt;     for(FuzzerBigInteger f = fuzzDB.createFuzzerBigInteger(&amp;quot;031-B16-HEX&amp;quot;, 24); f.hasNext();) {&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
With the entire program becoming: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(FuzzerBigInteger f = fuzzDB.createFuzzerBigInteger(&amp;quot;031-B16-HEX&amp;quot;, 24); f.hasNext();) {&lt;br /&gt;
       // Get the next payload value...&lt;br /&gt;
       System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloFuzzer.java OWASP JBroFuzz Example 1&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Compiling and running this program yields: &lt;br /&gt;
&amp;lt;pre&amp;gt; The fuzzer payload is: 000000000000000000000000&lt;br /&gt;
 The fuzzer payload is: 000000000000000000000001&lt;br /&gt;
 ... (output omitted)&lt;br /&gt;
 The fuzzer payload is: 00000000000000000001a982&lt;br /&gt;
 ... (output omitted)&lt;br /&gt;
 The fuzzer payload is: 00000000000000000001a982&lt;br /&gt;
 The fuzzer payload is: ffffffffffffffffffffffff&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
There are limitations to this class, as governed by the BigInteger class itself. Further information can be found at: &lt;br /&gt;
&amp;lt;pre&amp;gt;http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigInteger.html&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Still, on a virtual windows xp machine with 256Mb of RAM the above code had no problem running to completion. It took some time though.. Characteristics of the windows machine while this iteration was ongoing: The CPU was being utilised at 100% and memory usage was constant at 212 Mb. Overall, a clean sheet for FuzzerBigInteger.java. &lt;br /&gt;
&lt;br /&gt;
==== Using the Power Fuzzer API ====&lt;br /&gt;
&lt;br /&gt;
With web applications, it is often that you find yourself re-using part of, or the entirety of a fuzzing payload in more than one location, as part of the GET, POST, or any other type of request you submit. &lt;br /&gt;
&lt;br /&gt;
For this reason, JBroFuzz offers the PowerFuzzer class: A type of iterator for which you can specify how many copies of the payload you require in each request. &lt;br /&gt;
&lt;br /&gt;
Let's consider the following trivial scenario. You are in need of all hexadecimal values, which are 4-digits long (i.e. 0000 to FFFF) and you are in need of these 5 times for each request. &lt;br /&gt;
&lt;br /&gt;
This scenario is trivial, because typically you can assign the fuzzing payload (i.e. the value you get back from Fuzzer.next() ) to a String variable and re-use it as many times as you see fit. &lt;br /&gt;
&amp;lt;pre&amp;gt; Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzerID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 int length = 4;&lt;br /&gt;
 ....&lt;br /&gt;
     for(Fuzzer f = fuzzDB.createFuzzer(fuzzerID, length); f.hasNext();) {&lt;br /&gt;
          String payload = f.next();&lt;br /&gt;
          ....&lt;br /&gt;
     }&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Using the PowerFuzzer.class, the following HelloPowerFuzzer.java program can be created: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloPowerFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzerID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 int length = 4;&lt;br /&gt;
 int power = 5;&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(PowerFuzzer f = fuzzDB.createPowerFuzzer(fuzzerID, length, power); f.hasNext();) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] identicalElements = f.nextPower();&lt;br /&gt;
&lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem&amp;amp;nbsp;: identicalElements) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloPowerFuzzer.java OWASP JBroFuzz Power Fuzzer Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This program would output the following; no rocket science here: &lt;br /&gt;
&amp;lt;pre&amp;gt;....&lt;br /&gt;
 I have 5 elements: 4817 4817 4817 4817 4817&lt;br /&gt;
 I have 5 elements: 4818 4818 4818 4818 4818&lt;br /&gt;
 I have 5 elements: 4819 4819 4819 4819 4819&lt;br /&gt;
 I have 5 elements: 481a 481a 481a 481a 481a&lt;br /&gt;
 I have 5 elements: 481b 481b 481b 481b 481b&lt;br /&gt;
 I have 5 elements: 481c 481c 481c 481c 481c&lt;br /&gt;
 I have 5 elements: 481d 481d 481d 481d 481d&lt;br /&gt;
 I have 5 elements: 481e 481e 481e 481e 481e&lt;br /&gt;
 I have 5 elements: 481f 481f 481f 481f 481f&lt;br /&gt;
 I have 5 elements: 4820 4820 4820 4820 4820&lt;br /&gt;
 I have 5 elements: 4821 4821 4821 4821 4821&lt;br /&gt;
 I have 5 elements: 4822 4822 4822 4822 4822&lt;br /&gt;
 I have 5 elements: 4823 4823 4823 4823 4823&lt;br /&gt;
 I have 5 elements: 4824 4824 4824 4824 4824&lt;br /&gt;
 I have 5 elements: 4825 4825 4825 4825 4825&lt;br /&gt;
 I have 5 elements: 4826 4826 4826 4826 4826&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Now imagine you need to change the number of elements you obtain back every time. For every second request, you need to obtain back two identical payloads, for every third request, you need to obtain back three payloads and for every fourth request, you need to obtain back four payloads. &lt;br /&gt;
&lt;br /&gt;
The PowerFuzzer class, with the corresponding method '''setPower(int)''' allows you to set how many identical elements you obtain back, without having to worry about the length argument. Below is a class that solves the above scenario: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloPowerFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzerID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 int length = 4;&lt;br /&gt;
 int power = 5;&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(PowerFuzzer f = fuzzDB.createPowerFuzzer(fuzzerID, length, power); f.hasNext();) {&lt;br /&gt;
	 &lt;br /&gt;
	   int currentValue = (int) f.getCurrentValue(); &lt;br /&gt;
	   currentValue&amp;amp;nbsp;%= 4;&lt;br /&gt;
	   switch (currentValue) {&lt;br /&gt;
			case 0: f.setPower(1); break;&lt;br /&gt;
			case 1: f.setPower(2); break;&lt;br /&gt;
			case 2: f.setPower(3); break;&lt;br /&gt;
			default: f.setPower(4); break;&lt;br /&gt;
	   }&lt;br /&gt;
	   &lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] identicalElements = f.nextPower();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem&amp;amp;nbsp;: identicalElements) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloPowerFuzzer.java&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This class has as output: &lt;br /&gt;
&amp;lt;pre&amp;gt; ....&lt;br /&gt;
 I have 1 elements: 22a8&lt;br /&gt;
 I have 2 elements: 22a9 22a9&lt;br /&gt;
 I have 3 elements: 22aa 22aa 22aa&lt;br /&gt;
 I have 4 elements: 22ab 22ab 22ab 22ab&lt;br /&gt;
 I have 1 elements: 22ac&lt;br /&gt;
 I have 2 elements: 22ad 22ad&lt;br /&gt;
 I have 3 elements: 22ae 22ae 22ae&lt;br /&gt;
 I have 4 elements: 22af 22af 22af 22af&lt;br /&gt;
 I have 1 elements: 22b0&lt;br /&gt;
 I have 2 elements: 22b1 22b1&lt;br /&gt;
 I have 3 elements: 22b2 22b2 22b2&lt;br /&gt;
 I have 4 elements: 22b3 22b3 22b3 22b3&lt;br /&gt;
 I have 1 elements: 22b4&lt;br /&gt;
 I have 2 elements: 22b5 22b5&lt;br /&gt;
 I have 3 elements: 22b6 22b6 22b6&lt;br /&gt;
 I have 4 elements: 22b7 22b7 22b7 22b7&lt;br /&gt;
 I have 1 elements: 22b8&lt;br /&gt;
 I have 2 elements: 22b9 22b9&lt;br /&gt;
 ....&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Naturally, the algorithm of the number of elements required can vary based on any number of parameters. The PowerFuzzer class gives you a quick way to control the number of identical payloads you obtain back, without having to worry about creating a data type to store them in. &lt;br /&gt;
&lt;br /&gt;
==== Using the Double Fuzzer API ====&lt;br /&gt;
&lt;br /&gt;
In some cases of fuzzing web applications, a requirement to fuzz two (or more) locations part of the request being submitted to the web server becomes apparent. &lt;br /&gt;
&lt;br /&gt;
The DoubleFuzzer class allows you to create a fuzzer based on two prototype definitions. Similarly to instantiating a Fuzzer through a prototype and a given length, with a DoubleFuzzer, we pass two prototype definitions and two lengths. The corresponding method call available within the '''Database''' class of org.owasp.jbrofuzz.core is: &lt;br /&gt;
&amp;lt;pre&amp;gt;public DoubleFuzzer createDoubleFuzzer(String id1, int length1,  &lt;br /&gt;
								String id2, int length2) throws NoSuchFuzzerException {&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Let's cross-breed some fuzzers, see what results we get back during an iteration. &lt;br /&gt;
&lt;br /&gt;
The first example below, uses two hexadecimal fuzzers of different lengths, as specified by the variables: &lt;br /&gt;
&amp;lt;pre&amp;gt;String fuzzID1 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
String fuzzID2 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
int length1 = 4;&lt;br /&gt;
int length2 = 2;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
As the double fuzzer iteration is taking place, the second fuzzer, defined by the fuzzID2 &amp;amp;amp; length2 loops, starting from 00 and going all the way up to FF. An example output is: &lt;br /&gt;
&amp;lt;pre&amp;gt; I have 2 elements: fefb fb&lt;br /&gt;
 I have 2 elements: fefc fc&lt;br /&gt;
 I have 2 elements: fefd fd&lt;br /&gt;
 I have 2 elements: fefe fe&lt;br /&gt;
 I have 2 elements: feff ff&lt;br /&gt;
 I have 2 elements: ff00 00&lt;br /&gt;
 I have 2 elements: ff01 01&lt;br /&gt;
 I have 2 elements: ff02 02&lt;br /&gt;
 I have 2 elements: ff03 03&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
The complete code listing of HelloDoubleFuzzer.java is: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloDoubleFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzID1 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 String fuzzID2 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 int length1 = 4;&lt;br /&gt;
 int length2 = 2;&lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
     DoubleFuzzer f = fuzzDB.createDoubleFuzzer(fuzzID1, length1, fuzzID2, length2);&lt;br /&gt;
	 &lt;br /&gt;
     while( f.hasNext() ) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] payloads = f.next();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem&amp;amp;nbsp;: payloads) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloDoubleFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
That's simple enough; now let's cross-breed something a bit more exotic: Imagine a 3-digit octal ID value [000 - 777] being submitted inline with, say, a parameter that we want to test for Cross-Site Scripting (XSS). Let's adjust the program above with the corresponding fuzzer IDs of these fuzzers. Remember all the IDs of all the fuzzers can be found in the fuzzers.jbrf file within JBroFuzz.jar: &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloDoubleFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzID1 = &amp;quot;033-B08-OCT&amp;quot;;&lt;br /&gt;
 String fuzzID2 = &amp;quot;019-XSS-GEK&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 int length1 = 3;&lt;br /&gt;
 int length2 = 1;&lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
     DoubleFuzzer f = fuzzDB.createDoubleFuzzer(fuzzID1, length1, fuzzID2, length2);&lt;br /&gt;
	 &lt;br /&gt;
     while( f.hasNext() ) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] payloads = f.next();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem&amp;amp;nbsp;: payloads) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloDoubleFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
The output from this program is: &lt;br /&gt;
&amp;lt;pre&amp;gt; I have 2 elements: 000 (1?(1?{a:1?&amp;quot;&amp;quot;[1?&amp;quot;ev\a\l&amp;quot;:0](1?&amp;quot;\a\lert&amp;quot;:0):0}:0).a:0)[1?&amp;quot;\c\a\l\l&amp;quot;:0](content,1?&amp;quot;x\s\s&amp;quot;:0)&lt;br /&gt;
 I have 2 elements: 001 &amp;amp;lt;STYLE TYPE=&amp;quot;text/javascript&amp;quot;&amp;amp;gt;alert('XSS');&amp;amp;lt;/STYLE&amp;amp;gt;&lt;br /&gt;
 I have 2 elements: 002 &amp;amp;lt;SCRIPT SRC=http://ha.ckers.org/xss.js&lt;br /&gt;
 I have 2 elements: 003 &amp;amp;lt;A HREF=&amp;quot;http://google:ha.ckers.org&amp;quot;&amp;amp;gt;XSS&amp;amp;lt;/A&amp;amp;gt;&lt;br /&gt;
 I have 2 elements: 004 &amp;amp;lt;A HREF=&amp;quot;http://ha.ckers.org@google&amp;quot;&amp;amp;gt;XSS&amp;amp;lt;/A&amp;amp;gt;&lt;br /&gt;
 I have 2 elements: 005 &amp;amp;lt;A HREF=&amp;quot;//google&amp;quot;&amp;amp;gt;XSS&amp;amp;lt;/A&amp;amp;gt;&lt;br /&gt;
 ....&lt;br /&gt;
 ...&lt;br /&gt;
 ..&lt;br /&gt;
 .&lt;br /&gt;
 ..&lt;br /&gt;
 ...&lt;br /&gt;
 ....&lt;br /&gt;
 I have 2 elements: 774 &amp;amp;lt;SCRIPT SRC=http://ha.ckers.org/xss.js&lt;br /&gt;
 I have 2 elements: 775 &amp;amp;lt;A HREF=&amp;quot;http://google:ha.ckers.org&amp;quot;&amp;amp;gt;XSS&amp;amp;lt;/A&amp;amp;gt;&lt;br /&gt;
 I have 2 elements: 776 &amp;amp;lt;A HREF=&amp;quot;http://ha.ckers.org@google&amp;quot;&amp;amp;gt;XSS&amp;amp;lt;/A&amp;amp;gt;&lt;br /&gt;
 I have 2 elements: 777 &amp;amp;lt;A HREF=&amp;quot;//google&amp;quot;&amp;amp;gt;XSS&amp;amp;lt;/A&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
With the list stopping iterating at the last element of the greatest of the two fuzzers. &lt;br /&gt;
&lt;br /&gt;
==== Using the Cross Product Fuzzer API ====&lt;br /&gt;
&lt;br /&gt;
A final case of a special Double Fuzzer is the the Cross Product Fuzzer of the payloads of two fuzzers. This type of fuzzing is virtually encountered in username/password login form on the Internet. Let's work on this by example. &lt;br /&gt;
&lt;br /&gt;
Consider your home network router. You recall changing the default password to one of the typical password values that you use. Also, you are not 100% certain about the username for the router either, it is one of the typical admin, user, administrator, root, yoda type values, but you cannot recall which one. Needless to say, you don't know what the username, or password actually is. &lt;br /&gt;
&lt;br /&gt;
So in a mini brute-forcing attack scenario, you have the following list of usernames, out of which one is valid: &lt;br /&gt;
&amp;lt;pre&amp;gt;admin&lt;br /&gt;
administrator&lt;br /&gt;
Administrator&lt;br /&gt;
root&lt;br /&gt;
adminUser&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Also you know that the password is one of the following (Top 10 Threadwatch 2007 passwords): &lt;br /&gt;
&amp;lt;pre&amp;gt;password&lt;br /&gt;
123456&lt;br /&gt;
qwerty&lt;br /&gt;
abc123&lt;br /&gt;
letmein&lt;br /&gt;
monkey&lt;br /&gt;
myspace1&lt;br /&gt;
password1&lt;br /&gt;
blink182&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
The set that contains every possible combination of the two sets is the Cross Product of the list of usernames, times the list of passwords. So manually, (as most people do while locking themselves out) you would try, popular combinations of the above, starting with: &lt;br /&gt;
&amp;lt;pre&amp;gt;admin password&lt;br /&gt;
admin 123456&lt;br /&gt;
admin qwerty&lt;br /&gt;
....&lt;br /&gt;
admin blink182&lt;br /&gt;
administrator password&lt;br /&gt;
administrator 123456&lt;br /&gt;
administrator qwerty&lt;br /&gt;
....&lt;br /&gt;
adminUser password1&lt;br /&gt;
adminUser blink182&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Thus the total number of attempts would be (number of usernames) x (number of passwords). No rocket science here. &lt;br /&gt;
&lt;br /&gt;
JBroFuzz introduces the CrossProductFuzzer class capable of iterating through the cross product of two fuzzers. Let's put it into code; the following program provides a list of all 2-digit octal numbers with every 2-digit binary number. A total of (8 x 8) x (2 x 2) = 256 values. &lt;br /&gt;
&amp;lt;pre&amp;gt;import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloCrossFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzID1 = &amp;quot;033-B08-OCT&amp;quot;;&lt;br /&gt;
 String fuzzID2 = &amp;quot;034-B02-BIN&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 int length1 = 2;&lt;br /&gt;
 int length2 = 2;&lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
     CrossProductFuzzer f = fuzzDB.createCrossFuzzer(fuzzID1, length1, fuzzID2, length2);&lt;br /&gt;
	 &lt;br /&gt;
     while( f.hasNext() ) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] payloads = f.next();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem&amp;amp;nbsp;: payloads) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloCrossFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This program has as output: &lt;br /&gt;
&amp;lt;pre&amp;gt; I have 2 elements: 00 00&lt;br /&gt;
 ...&lt;br /&gt;
 ..&lt;br /&gt;
 .&lt;br /&gt;
 ..&lt;br /&gt;
 ...&lt;br /&gt;
 I have 2 elements: 74 00&lt;br /&gt;
 I have 2 elements: 74 01&lt;br /&gt;
 I have 2 elements: 74 10&lt;br /&gt;
 I have 2 elements: 74 11&lt;br /&gt;
 I have 2 elements: 75 00&lt;br /&gt;
 I have 2 elements: 75 01&lt;br /&gt;
 I have 2 elements: 75 10&lt;br /&gt;
 I have 2 elements: 75 11&lt;br /&gt;
 I have 2 elements: 76 00&lt;br /&gt;
 I have 2 elements: 76 01&lt;br /&gt;
 I have 2 elements: 76 10&lt;br /&gt;
 I have 2 elements: 76 11&lt;br /&gt;
 I have 2 elements: 77 00&lt;br /&gt;
 I have 2 elements: 77 01&lt;br /&gt;
 I have 2 elements: 77 10&lt;br /&gt;
 I have 2 elements: 77 11&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
You can substitute any list of fuzzer ID to the IDs you use in this program. &lt;br /&gt;
&lt;br /&gt;
'''Remember!''' The total number of payloads must not exceed that of the the maximum value of the long primitive java data type ''Long.MAX_VALUE'' which is 2^63 - 1. If you are in need of more than that payloads, you would have to use the big integer implementation of the Fuzzer class, namely: FuzzerBigInteger.java. &lt;br /&gt;
&lt;br /&gt;
== Graphing with JBroFuzz ==&lt;br /&gt;
&lt;br /&gt;
Once a fuzzing session has completed, JBroFuzz offers the ability to generate a number of graphs, using various metrics. This section investigates how to further the graphing functionality available with the application. &lt;br /&gt;
&lt;br /&gt;
=== Customizing the logo on each Graph ===&lt;br /&gt;
&lt;br /&gt;
As of version 2.0, all image icons within JBroFuzz are located within the /icons directory of the application. The particular transparent image file displayed on top right part of the graphs is named: &lt;br /&gt;
&amp;lt;pre&amp;gt;/icons/owasp-med.png&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This file is a 64 x 64 PNG image file. You can replace it with your own file, as follows: &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;gt;ls -l JBroFuzz.jar&lt;br /&gt;
-rw-rw-rw-   1 user     group     4033612 Feb 15 12:33 JBroFuzz.jar&lt;br /&gt;
&lt;br /&gt;
&amp;amp;gt;unzip -oq JBroFuzz.jar&lt;br /&gt;
&amp;amp;gt;cd icons&lt;br /&gt;
&amp;amp;gt;mv owasp-med.png file64x64-file.png&lt;br /&gt;
&amp;amp;gt;cd ..&lt;br /&gt;
&amp;amp;gt;zip -r JBroFuzz.zip *&lt;br /&gt;
&amp;amp;gt;mv JBroFuzz.zip JBroFuzz.jar&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
This enables you to have your own (company logo) on JBroFuzz graphs. Further to this, a number of other customization options are available, by right clicking on each of the graph generated. &lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP_JBroFuzz]]&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_JBroFuzz_Tutorial&amp;diff=78556</id>
		<title>OWASP JBroFuzz Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_JBroFuzz_Tutorial&amp;diff=78556"/>
				<updated>2010-02-18T15:50:55Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: /* Using the Cross Product Fuzzer API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:OWASP JBroFuzz]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
''“If you can’t fuzz with JBroFuzz, you probably do not want to fuzz!”'' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;Old JBroFuzz Motto &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The art of teaching, Mark Van Doren said, is the art of assisting discovery. Fuzzing is a representative discipline towards assisting the discovery of security vulnerabilities, that is just beginning to come of age. Over the last two years, through continuous development, JBroFuzz has attempted to expose the intrinsic beauty of the subject: Constantly submit a vast amount of payloads to a service, device or prompt, waiting for the one response that makes all the difference. This is the mentality that JBroFuzz embraces and attempts to offer back to security professionals. &lt;br /&gt;
&lt;br /&gt;
Fuzzing as a concept goes beyond a conventional work flow or a standard methodology. I would argue that to know how to fuzz well, is to master a new language. Thus, similar to the process of learning a programming (or foreign) language, there are three things you must master: &lt;br /&gt;
&lt;br /&gt;
• Grammar: How fuzzing as a process is structured&amp;lt;br&amp;gt;&lt;br /&gt;
• Vocabulary: How to name fuzzing concepts you want to use&amp;lt;br&amp;gt;&lt;br /&gt;
• Usage: Ways of achieving everyday effective results with fuzzing&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:001-JBroFuzz-Tutorial.jpg|300px|right|JBroFuzz Splash Screen]]From the pre-existing information available for JBroFuzz, this tutorial focuses on usage: How to best put a fuzzing tool to good use, either via the UI, or using APIs that ''JBroFuzz.jar'' is constituted of. As a result, this document has a small requirement as a caveat; you need to have a beginner level understanding of the Java programming language in order to understand some sections. &lt;br /&gt;
&lt;br /&gt;
There are a number of working examples described here within, which '''grep''' for statements such as “''&amp;lt;nowiki&amp;gt;public static void main(String[] args)&amp;lt;/nowiki&amp;gt;''”. The majority of the content relates to reviewing these examples and putting the Java syntax into a fuzzing perspective. &lt;br /&gt;
&lt;br /&gt;
To summarise, this tutorial focuses on customary and effective usage of fuzzing through the JBroFuzz Java APIs and the respective UI. It is targeting (without attacking them) web applications. Without further redo, let’s get fuzzing! &lt;br /&gt;
&lt;br /&gt;
== JBroFuzz Basic Functionality ==&lt;br /&gt;
This section carries a number of basic fuzzing examples to get you started with JBroFuzz. Overall, even though the actions performed to not produce any amazing fuzzing results, it serves as a starting point in understanding how to perform particular fuzzing operations on web applications.&lt;br /&gt;
&lt;br /&gt;
=== 'Hello Google!' (forget 'Hello World') ===&lt;br /&gt;
As the traditional first program that you learn when indulging in a new programming language, 'Hello World!' represents the norm for understanding the basic output operations and syntax (let alone compiler and execution behaviour) of the language in question. &lt;br /&gt;
&lt;br /&gt;
As with most web application security related tools, when I am given the responsibility to run them, often in order to understand how they work, I would first craft a legitimate, single request to a trusted (to be up and behaving) popular Internet location. Needless, to say this request more than on occasion finds itself on Google servers. &lt;br /&gt;
&lt;br /&gt;
So 'Hello World!' for programming languages seems to transform to 'Hello Google!' for understanding how web application security related tools work. Let us see, how JBroFuzz does it. &lt;br /&gt;
&lt;br /&gt;
• Double-click on JBroFuzz and browse to the 'Fuzzing' tab&lt;br /&gt;
&lt;br /&gt;
JBroFuzz is constituted of tabs, typically located in the bottom or top (if you bother to change the settings) of the main window. &lt;br /&gt;
&lt;br /&gt;
The 'Fuzzing' tab is where you craft your request message to a particular host. Once that is in place, you can select any part of the request and proceed into adding any number of payloads. We shall see how in later sections.&lt;br /&gt;
&lt;br /&gt;
• In the 'URL' field type: http://www.google.com/ http://www.google.com&lt;br /&gt;
&lt;br /&gt;
Unlike conventional URLs, the URL field in JBroFuzz is only used for the underlying protocol (HTTP or HTTPS), host name (e.g.  www.yahoo.com) and (optionally) port number.&lt;br /&gt;
&lt;br /&gt;
All remaining information pasted or typed into the 'URL' field will be ignored; you are expected to enter it in the 'Request' field below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Still, if you want to just copy-paste a URL from a browser, hit [Ctrl+L] while you are not fuzzing, paste the URL value that you have copied from a browser and JBroFuzz will automatically do the work for you. &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples of valid URL values to be put in the&lt;br /&gt;
&lt;br /&gt;
Treat the 'URL' and 'Request' fields as the two stages of a 'telnet' session on port 80; you are effectively using the 'URL' field to specify the equivalent of: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;gt;telnet www.google.com 8088&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As equivalent to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
http://www.google.com:8088&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or in the case of HTTPS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
https://www.google.com:8088&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Naturally, default ports for HTTP is 80 and HTTPS is 443.&lt;br /&gt;
&lt;br /&gt;
• In the 'Request' field type: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
GET / HTTP/1.0&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And press 'Enter' twice&lt;br /&gt;
&lt;br /&gt;
This is where the body of the message you are sending is to be placed. So anything obeying HTTP/S protocol, such as GET and POST requests, header fields and/or HTML content should be included here.&lt;br /&gt;
&lt;br /&gt;
As part of the process of fuzzing web applications with JBroFuzz you need to have done your homework, in terms of providing a base request message. This message is what will be used later on to add payloads to particular sections of the request.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;• Hit 'Start' [Ctrl+Enter]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will instigate the process of sending a single request to the specified host on a given (or default) port, over HTTP or HTTPS.&lt;br /&gt;
&lt;br /&gt;
Once a connection has been established JBroFuzz will proceed to submit the message you have typed into the 'Request' field.&lt;br /&gt;
&lt;br /&gt;
Finally, JBroFuzz will log all data sent and received into a file; accessing this file is typically a process of double clicking on the output line on the table at the bottom section of the 'Fuzzing' tab.&lt;br /&gt;
&lt;br /&gt;
You should see a response received in the bottom part of the 'Fuzzing' panel. Double click (or right click for more options) to see the information exchanged; typically this would be a 302 redirect pointing you to another location. Congratulations, you have just said &amp;quot;Hello&amp;quot; to Google! &lt;br /&gt;
&lt;br /&gt;
[[Image:002-JBroFuzz-Tutorial.png|500px|JBroFuzz Hello Google!]]&lt;br /&gt;
&lt;br /&gt;
Now this would typically be enough under RFC rules, to get a response back; but damn all the bots out here, most websites require further information to respond back. So, in the 'Request' field let's pretend to be a (kind of) legitimate browser by typing: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
GET / HTTP/1.0&amp;lt;br&amp;gt;&lt;br /&gt;
Host: www.google.com&amp;lt;br&amp;gt;&lt;br /&gt;
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729) JBroFuzz/1.5&amp;lt;br&amp;gt;&lt;br /&gt;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-gb,en;q=0.5Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Not forgetting to end the request typed with two returns: Press 'Enter' twice. Again, you should be able to see a line added with the response received back. &lt;br /&gt;
&lt;br /&gt;
Practice sending single requests to a website of your choice by changing the URL and also the 'Host:' field from the 'Request' above. Also try accessing an HTTPS website. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Alternatively, you can use the shortcut [Ctrl+L] to type in your URL, with the 'Request' field filled automatically, based on the URL you have typed. &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== HTTP Version Numbers &amp;amp; www.cia.gov Headerless Responses ===&lt;br /&gt;
For web applications, very often ill-defined requests submitted over the Internet, will trigger semi-legitimate responses that actually do not obey HTTP RFC protocol specification. Often, even though this is not the case in this example, these responses can lead to the identification of one or more security vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
In this example we test for the responses received for invalid HTTP version numbers on a particular website, namely www.cia.gov, over https. Now a word of caution here; please do not attempt to fuzz web applications that you do not have the authority to do so, especially over the Internet. &lt;br /&gt;
&lt;br /&gt;
Still, for the purposes of this tutorial exercise, we will subject a web server to no more than a dozen or so requests. These requests would be otherwise identical, if it was not for the HTTP version number incrementing by a value of 1 on each request. &lt;br /&gt;
&lt;br /&gt;
In terms of having the authority to do so, well this is identical to hitting 'Refresh' in your web browser a dozen or so times, while you are browsing to www.cia.gov. I do not consider this remotely close to any form of hacking, cracking, or proper fuzzing; web servers across the globe receive a lot more abuse than this on a daily basis. &lt;br /&gt;
&lt;br /&gt;
Finally, by the time you are reading this, the particular issue described might have been fixed. So here goes:&lt;br /&gt;
&lt;br /&gt;
• Within JBroFuzz, select: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
File -&amp;gt; Open Location [Ctrl+L]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Type: https://www.cia.gov and hit enter. This is depicted in the following screenshot:&lt;br /&gt;
&lt;br /&gt;
[[Image:003-JBroFuzz-Tutorial.png|JBroFuzz Open Location]]&lt;br /&gt;
&lt;br /&gt;
Hitting 'Enter' should automatically populate the 'URL' field and the 'Request' field within the 'Fuzzing' tab. What you see is the base request that we intend to add fuzzing payloads to. Before we do so, let us make one small alteration first:&lt;br /&gt;
&lt;br /&gt;
• Modify the first line of the 'Request' field to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
GET / HTTP/0.0&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Our objective is to enumerate the supported by the web server (in this case www.cia.gov) HTTP version numbers, following the two digit format that it has. We could be a lot more agressive here and test for buffer overflows and all types of injection; that would be out of line without the authority to do so. Instead we are going to see how JBroFuzz will iterate through the values of 0.0 to 1.4 by means of adding a Fuzzer to our base request.&lt;br /&gt;
&lt;br /&gt;
• Highlight the second zero from the line 'GET / HTTP/0.0' and right-click, selecting 'Add'. This is depicted in the screeshot below:&lt;br /&gt;
&lt;br /&gt;
[[Image:004-JBroFuzz-Tutorial.png|400px|Adding a Fuzzer to the HTTP version number]]&lt;br /&gt;
&lt;br /&gt;
• From the appearing 'Add a Fuzzer' window, select as 'Category Name', in the most left column 'Base' and as 'Fuzzer Name' in the middle column 'Base 10 (Decimal) Alphabet.&lt;br /&gt;
&lt;br /&gt;
• Click on 'Add Fuzzer' on the bottom right of the window&lt;br /&gt;
&lt;br /&gt;
[[Image:005-JBroFuzz-Tutorial.png|400px|Adding a Fuzzer]]&lt;br /&gt;
&lt;br /&gt;
This should add a Fuzzer of length 1 that iterates over the decimal (i.e. base 10) numbers 0 to 9. If we have added a hexadecimal Fuzzer instead of a decimal one (i.e. base 16) the iteration would from 0 to F. If we had selected two digits instead of one and proceeded to add a decimal Fuzzer, the iteration would be from:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
00&amp;lt;br&amp;gt;&lt;br /&gt;
01&amp;lt;br&amp;gt;&lt;br /&gt;
..&amp;lt;br&amp;gt;&lt;br /&gt;
98&amp;lt;br&amp;gt;&lt;br /&gt;
99&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From a User Interface (UI) perspective you should see a line added to the 'Added Payloads Table'. &lt;br /&gt;
&lt;br /&gt;
• Click 'Start' [Ctrl+Enter]&lt;br /&gt;
&lt;br /&gt;
This process will send 10 requests to the specified web server changing only first line of the request to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
GET / HTTP/0.0...&amp;lt;br&amp;gt;&lt;br /&gt;
GET / HTTP/0.1...&amp;lt;br&amp;gt;&lt;br /&gt;
...&amp;lt;br&amp;gt;&lt;br /&gt;
GET / HTTP/0.8...&amp;lt;br&amp;gt;&lt;br /&gt;
GET / HTTP/0.9...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While this is ongoing, you can sort the results by 'No' in the 'Output' table in the bottom of the 'Fuzzing' tab. This should enable you to see what request is currently being transmitted and received in real time.&lt;br /&gt;
&lt;br /&gt;
Once complete, change the first line of the 'Request' field to read:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
GET / HTTP/1.0&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
• Click 'Start' [Ctrl+Enter]&lt;br /&gt;
&lt;br /&gt;
The resulting output should resemble the following screenshot:&lt;br /&gt;
&lt;br /&gt;
[[Image:006-JBroFuzz-Tutorial.png|500px|JBroFuzz Output from a Fuzzing Session]]&lt;br /&gt;
&lt;br /&gt;
Straight away we can notice a difference in the response size: For HTTP version numbers 0.0 to 0.9 we are getting back what seems fairly big in size responses; 32222 bytes in size worth of responses, given that HTTP protocol version 0.0 to 0.8 do not officially exist!&lt;br /&gt;
&lt;br /&gt;
By double-clicking on one of these requests, we can see that the web server in question is responding back with no headers, yet returning a full HTML body; this represents the 32222 bytes of response of data we are receiving back. The following screenshot illustrates this:&lt;br /&gt;
&lt;br /&gt;
[[Image:007-JBroFuzz-Tutorial.png|300px|JBroFuzz Output for a Single Request/Response]]&lt;br /&gt;
&lt;br /&gt;
Using the 'Graphing' tab we can proceed to graph the particular requests and responses for this given session. &lt;br /&gt;
&lt;br /&gt;
• Within the 'Graphing' tab, click 'Start' [Ctrl+Enter]. &lt;br /&gt;
&lt;br /&gt;
• Select the directory corresponding to the Output folder we have used for this fuzzing session. This will typically be the last one.&lt;br /&gt;
&lt;br /&gt;
• Right-click and select 'Graph'&lt;br /&gt;
&lt;br /&gt;
Once complete, browse to the 'Response Size' tab within the 'Graphing' tab, as illustrated in the screenshot below:&lt;br /&gt;
&lt;br /&gt;
[[Image:008-JBroFuzz-Tutorial.png|300px|JBroFuzz Graphing different 'Response Sizes']]&lt;br /&gt;
&lt;br /&gt;
To re-iterate this does not present a security vulnerability in any shape or form; merely the fact that by manipulating HTTP version numbers as part of the request we transmit, we can impact the response that we get back. In this case, what changes is the non-existent header fields, with some HTML content being received back.&lt;br /&gt;
&lt;br /&gt;
If I was to guess what is causing this, I would say that some sort of load balancing or content delivery is not happening as it should when non-existent version numbers are being transmitted.&lt;br /&gt;
&lt;br /&gt;
==Using JBroFuzz with Paros Proxy==&lt;br /&gt;
&lt;br /&gt;
JBroFuzz is a standalone fuzzer; it can release and create sockets over HTTP and HTTPS, but in order to use JBroFuzz correctly you will have to know what it is that you are fuzzing. &lt;br /&gt;
&lt;br /&gt;
In comes the need for a proxy tool; the opening versions of JBroFuzz actually had a proxy tab that you could use to intercept traffic generated by your web browser. That functionality got removed in an attempt to focus and deliver solely on the fuzzing capabilities of the tool.&lt;br /&gt;
&lt;br /&gt;
This section details how to use JBroFuzz in combination with a client side proxy. The one selected is Paros Proxy, which, despite the fact that it hasn't been updated since 2006 is still a popular tool that you see in web security testing live CDs. You could use any of the other proxy tools available. &lt;br /&gt;
&lt;br /&gt;
===Winning on a Remix of the Year Award===&lt;br /&gt;
&lt;br /&gt;
At 17:53, on a frosty winter evening, a message window popped up:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
17:53 http://www.localhost.com/remixcontest/club/annual2010.html&lt;br /&gt;
17:53 Hey bro, could you cast in a vote here for the Such &amp;amp; Such Remix?&lt;br /&gt;
17:53 Appreciated!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A friend in need is a friend indeed, so here goes I thought. Opening up a web browser configured to work with Paros as an intermediate proxy, allowed for the casting of my vote. while keeping a record of each request and reply. &lt;br /&gt;
&lt;br /&gt;
No registration, or any other form of submitting an identifier was needed. The request that Paros stored for the casting of the actual vote was:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET http://www.localhost.com/remixcontest/club/vote.php?onLoad=%5Btype%20Method%5D&amp;amp;id=55 HTTP/1.1&lt;br /&gt;
Host: www.localhost.com&lt;br /&gt;
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729) Paros/3.2.13&lt;br /&gt;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&lt;br /&gt;
Accept-Language: en-gb,en;q=0.5&lt;br /&gt;
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&lt;br /&gt;
Keep-Alive: 300&lt;br /&gt;
Proxy-Connection: keep-alive&lt;br /&gt;
Cookie: PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Paros Proxy actually places the domain (in this case www.localhost.com) with the protocol (i.e. http) in front of the GET request. As a result, you can't open a telnet/netcat session and just copy-paste the above. Similarly when we bring the request into JBroFuzz, a bit of tweaking is required. &lt;br /&gt;
&lt;br /&gt;
* In the URL field, type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://www.localhost.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Request field, let's keep what is of interest:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /remixcontest/club/vote.php?onLoad=%5Btype%20Method%5D&amp;amp;id=55 HTTP/1.0&lt;br /&gt;
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5&lt;br /&gt;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&lt;br /&gt;
Accept-Language: en-gb,en;q=0.5&lt;br /&gt;
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&lt;br /&gt;
Cookie: PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No needs for Keep-Alive and Proxy-Connection. Let's simplify the HTTP request by making it a version 1.0 request and getting rid of the Host header as well. Also on the user agent, let us keep that mainstream vanilla: Firefox on Windows (popular browser combination), getting rid of the .NET and Paros additives.&lt;br /&gt;
&lt;br /&gt;
Checking on the website, our Such &amp;amp; Such remix already has about 100 votes or so and the top remix has approximately 310 votes. Let's fuzz this:&lt;br /&gt;
&lt;br /&gt;
* Select 2 of the digits of the cookie value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Select: Panel -&amp;gt; Add&lt;br /&gt;
&lt;br /&gt;
* In the &amp;quot;Add a Fuzzer&amp;quot; panel, select:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Base -&amp;gt; Base16 (HEX)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and select &amp;quot;Add Fuzzer&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
This will add a line within the Payloads tab on the right hand side. &lt;br /&gt;
&lt;br /&gt;
Our cookie value above (PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e) is in lowercase, hexadecimal format. Let's make sure the encoding we select is also that. &lt;br /&gt;
&lt;br /&gt;
Within the Payloads tab, click on the encoding drop down menu and select lowercase. Just before clicking &amp;quot;Start&amp;quot;, JBroFuzz should look something like the screenshot below.&lt;br /&gt;
&lt;br /&gt;
[[Image:014-JBroFuzz-Tutorial.png|Adding Votes by iterating through PHPSESSID cookie values]]&lt;br /&gt;
&lt;br /&gt;
== Performing User Enumeration with a Valid Set of Credentials ==&lt;br /&gt;
Often you encounter an application that allows for the enumeration of one or more pages after a user has been successfully granted a set of session credentials. One of the key areas to test from an application specific perspective, relates to the page(s) that provide user account information.&lt;br /&gt;
&lt;br /&gt;
In the following example, we investigate an ASP.NET 2.0 application with a C# back-end. In this, an authenticated user has the option to select to &amp;quot;View My Profile&amp;quot;. This page provides them with account information (including the typical username, email address, further notes) that they can proceed to update and save to the back-end system.&lt;br /&gt;
&lt;br /&gt;
After a user has authenticated, the following URL, gives them access to their profile information stored on the database:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://www.myattackingdomain.com/portal-location/UserInfo.aspx?UserID=23&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Simple investigation confirms that the digits allowed as part of the UserID value are decimal numbers only. Lets feed that information into JBroFuzz.&lt;br /&gt;
&lt;br /&gt;
===Fuzzing a User ID===&lt;br /&gt;
&lt;br /&gt;
• Within JBroFuzz, select: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
File -&amp;gt; Open Location [Ctrl+L]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Type: http://www.myattackingdomain.com/portal-location/UserInfo.aspx?UserID=23 and hit enter. This is depicted in the following screenshot:&lt;br /&gt;
&lt;br /&gt;
[[Image:009-JBroFuzz-Tutorial.png|300px|JBroFuzz 'GET' Request with a 'UserID' parameter]]&lt;br /&gt;
&lt;br /&gt;
From the URL the important parameter is the value of the UserID query string (the value 23, above). We want to fuzz that.&lt;br /&gt;
&lt;br /&gt;
• Within the Fuzzing Tab, in the &amp;quot;Request&amp;quot; text area, highlight the above number 23&lt;br /&gt;
• Right-click and select &amp;quot;Add&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Add a Fuzzer&amp;quot; window that appears, select:&lt;br /&gt;
&lt;br /&gt;
• Category Name: &amp;lt;code&amp;gt;Base&amp;lt;/code&amp;gt;&lt;br /&gt;
• Fuzzer Name: &amp;lt;code&amp;gt;Base10 (DEC)&amp;lt;/code&amp;gt;&lt;br /&gt;
• Select &amp;quot;Add Fuzzer&amp;quot; in the bottom right&lt;br /&gt;
&lt;br /&gt;
This would have added a decimal (base 10 fuzzer) of length 2 onto the location.&lt;br /&gt;
&lt;br /&gt;
• You will see a row added within the &amp;quot;Added Fuzzers Table&amp;quot; of the Fuzzing panel.&lt;br /&gt;
• Click &amp;quot;Start&amp;quot; &amp;lt;code&amp;gt;Ctrl+Enter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will transmit 100 requests to the domain in question, which in this case is assumed: www.myattackingdomain.com. The value being changed within each request will be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
• GET /portal-location/UserInfo.aspx?UserID=00 HTTP/1.0&lt;br /&gt;
• GET /portal-location/UserInfo.aspx?UserID=01 HTTP/1.0&lt;br /&gt;
...&lt;br /&gt;
• GET /portal-location/UserInfo.aspx?UserID=98 HTTP/1.0&lt;br /&gt;
• GET /portal-location/UserInfo.aspx?UserID=99 HTTP/1.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Done. Let's proceed to graph the responses that we have obtained. Our objective is to understand which two-digit numbers from 00 to 99 correspond to valid user accounts. &lt;br /&gt;
&lt;br /&gt;
===Graphing Results===&lt;br /&gt;
• Within the &amp;quot;Graphing&amp;quot; tab, click &amp;quot;Start&amp;quot; &amp;lt;code&amp;gt;Ctrl+Enter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A list of directories will appear on the left-hand side. If you scroll to the bottom of the list you should see the directory corresponding to your fuzzing session, in our case it was (175 2009-06-24 16-18-24)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
• Right-click on (175 2009-06-24 16-18-24)&lt;br /&gt;
• Click &amp;quot;Graph&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will generate the graphs in their respective tabs. The question now becomes which graph is of interest for our user enumeration exercise.&lt;br /&gt;
&lt;br /&gt;
By definition enumerating users against an ID value, or any other identifier involves being able to obtain a different response for an existing user to that of a user that is not have a corresponding ID value. &lt;br /&gt;
&lt;br /&gt;
Thus, from the metrics available, the one useful for enumerating users will be that of measuring the &amp;quot;Hamming Distance&amp;quot; between responses received. Based on the JBroFuzz documentation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Fuzzing Hamming Distance &amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A bar chart with the hamming distance of the characters in the response, &lt;br /&gt;
relative to the first response received. Check each character of the first&lt;br /&gt;
response received, against the character at the same position of the&lt;br /&gt;
current response received. If they are not identical, increment the &lt;br /&gt;
hamming distance.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As we can see the Fuzzing Hamming Distance (FHD) varies quite a bit from the definition of the normal hamming distance term, used in telecommunications. Still, they share a lot of similarities.&lt;br /&gt;
&lt;br /&gt;
As we can from the above, the first request is critical to calibrating our user enumeration exercise. It represents the value that all other Fuzzing Hamming Distances (FHD) will be measured and normalised towards. For the java-skilled audience, the algorithm is quite trivial, but offers spectacular results in distinguishing responses:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
in = new BufferedReader(new FileReader(f));&lt;br /&gt;
   58 &lt;br /&gt;
   59 			int counter = 0;&lt;br /&gt;
   60 			int check = 0;&lt;br /&gt;
   61 			int c;&lt;br /&gt;
   62 			while (((c = in.read()) &amp;gt; 0) &amp;amp;&amp;amp; (counter &amp;lt; MAX_CHARS)) {&lt;br /&gt;
   63 &lt;br /&gt;
   64 				// If we are passed &amp;quot;--jbrofuzz--&amp;gt;\n&amp;quot; in the file&lt;br /&gt;
   65 				if (check == END_SIGNATURE.length()) {&lt;br /&gt;
   66 &lt;br /&gt;
   67 					firstSet.append((char) c);&lt;br /&gt;
   68 &lt;br /&gt;
   69 				}&lt;br /&gt;
   70 				// Else find &amp;quot;--jbrofuzz--&amp;gt;\n&amp;quot; using a counter&lt;br /&gt;
   71 				else {&lt;br /&gt;
   72 					// Increment the counter for each success&lt;br /&gt;
   73 					if (c == END_SIGNATURE.charAt(check)) {&lt;br /&gt;
   74 						check++;&lt;br /&gt;
   75 					} else {&lt;br /&gt;
   76 						check = 0;&lt;br /&gt;
   77 					}&lt;br /&gt;
   78 				}&lt;br /&gt;
   79 &lt;br /&gt;
   80 				counter++;&lt;br /&gt;
   81 &lt;br /&gt;
   82 			}&lt;br /&gt;
   83 			in.close();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergo, the corresponding graph is depicted in the screenshot below. The peak graphs correspond to number that if you hover the mouse over will give you the enumeration ID of a valid user.&lt;br /&gt;
&lt;br /&gt;
[[Image:015-JBroFuzz-Tutorial.png|500px|Measuring Hamming Distance for User Enumeration]]&lt;br /&gt;
&lt;br /&gt;
== JBroFuzz Development Corner ==&lt;br /&gt;
This section presents how to setup and use JBroFuzz as a fuzzing library. Also, it offers an insight in how to setup and compile your own version of JBroFuzz. As different people have different levels of expertise of the java programming language, eclipse, ant and subversion, some of the steps presented herein might be considered basic by advanced developers.&lt;br /&gt;
&lt;br /&gt;
===Setting up a JBroFuzz Development Environment===&lt;br /&gt;
&lt;br /&gt;
This section guides you towards setting up a development environment for JBroFuzz. Despite the Operating System (O/S) being windows XP, a similar process can be followed in a number of other O/S. &lt;br /&gt;
&lt;br /&gt;
You will need to have installed:&lt;br /&gt;
&lt;br /&gt;
* Tortoise SVN (using TortoiseSVN-1.6.6.17493-win32-svn-1.6.6.msi)&lt;br /&gt;
* Eclipse Java (using eclipse-java-galileo-SR1-win32.zip)&lt;br /&gt;
&lt;br /&gt;
Optionally, if you don't like building your application through eclipse you could also require to install Apache Ant.&lt;br /&gt;
&lt;br /&gt;
====Step 1: Obtain the source code====&lt;br /&gt;
&lt;br /&gt;
JBroFuzz uses SubVersion with the repository being publicly available for download through anonymous access on sourceforge. There is a plan to move it the source to the OWASP Git repository, but until then, use the guidelines below.&lt;br /&gt;
&lt;br /&gt;
[[Image:010-JBroFuzz-Tutorial.png|Tortoise SVN Check out JBroFuzz Source Code]]&lt;br /&gt;
&lt;br /&gt;
Right click on the folder location where you want to download the source code and select: &lt;br /&gt;
&lt;br /&gt;
* SVN Checkout&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;URL of repository&amp;quot;, enter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://jbrofuzz.svn.sourceforge.net/svnroot/jbrofuzz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Checkout directory&amp;quot;, enter the folder location of your choice, in this case:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\root\code\jbrofuzz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Checkout Depth&amp;quot; select:&lt;br /&gt;
&lt;br /&gt;
* Fully recursive&lt;br /&gt;
&lt;br /&gt;
Untick &amp;quot;Omit Externals&amp;quot; (should be unticked by default)&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Revision&amp;quot; select:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Head revision&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Select OK. &lt;br /&gt;
&lt;br /&gt;
This process, once complete will checkout the entirety of the JBroFuzz source code from the SVN repository on sourceforge.&lt;br /&gt;
&lt;br /&gt;
====Step 2: Configuring a JBroFuzz Project within Eclipse====&lt;br /&gt;
&lt;br /&gt;
Having obtained the latest copy of the source code, the next step entails importing that source code within the Eclipse IDE.&lt;br /&gt;
&lt;br /&gt;
Within Eclipse, select:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
File -&amp;gt; New -&amp;gt; Other&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From the &amp;quot;New&amp;quot; panel that appears, select:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Java -&amp;gt; Java Project from Existig Ant Buildfile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:011-JBroFuzz-Tutorial.png|Import JBroFuzz Code into Eclipse from Ant File]]&lt;br /&gt;
&lt;br /&gt;
Select &amp;quot;Next&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In the next menu, under &amp;quot;Ant buildfile&amp;quot;, select &amp;quot;Browse&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Browse to the location where you have just (step 1) downloaded the source code and select the following file:&lt;br /&gt;
&lt;br /&gt;
* build.xml&lt;br /&gt;
&lt;br /&gt;
The build.xml file is an Ant build file that JBroFuzz uses. &lt;br /&gt;
&lt;br /&gt;
[[Image:012-JBroFuzz-Tutorial.png|Select the Ant File]]&lt;br /&gt;
&lt;br /&gt;
Selecting that file should have populated the &amp;quot;Project name&amp;quot; as jbrofuzz and also given you:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;javac&amp;quot; task found in target &amp;quot;compile&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MAKE SURE TO TICK:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Link to the buildfile in the filesystem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise eclipse will try to replicate the source code within your workspace and that makes the process a tiny bit more complicated when it comes to actually building JBroFuzz.&lt;br /&gt;
&lt;br /&gt;
Click &amp;quot;Finish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You will see the item &amp;quot;Building workspace (76%) on the bottom right hand side of Eclipse. Once that is complete, you should see the jbrofuzz project on the top left corner of the Package Explorer within Eclipse.&lt;br /&gt;
&lt;br /&gt;
====Step 3: Building JBroFuzz====&lt;br /&gt;
&lt;br /&gt;
Within the Package Explorer, expand the jbrofuzz project and double-click on the build.xml file.&lt;br /&gt;
&lt;br /&gt;
Right click on the &amp;quot;build [default]&amp;quot; task within the &amp;quot;Outline&amp;quot; window (typically seen on the right hand side) and select:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Run As -&amp;gt; 1. Ant Build [Alt+Shift+X, Q]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the build has been successful, a JBroFuzz.jar file within the the /jar folder would have been created. Following the path conventions above that should be in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\root\code\jbrofuzz\jar\JBroFuzz.jar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:013-JBroFuzz-Tutorial.png|Building JBroFuzz within Eclipse]]&lt;br /&gt;
&lt;br /&gt;
===How to Use JBroFuzz as a Fuzzing Library===&lt;br /&gt;
&lt;br /&gt;
Quite often what you need to do in terms of fuzzing, far exceeds the User Interface (UI) of JBroFuzz. For this reason, a set of core fuzzing APIs have been made available that can be used for more advanced fuzzing scenarios.&lt;br /&gt;
&lt;br /&gt;
The JBroFuzz.jar standalone archive (made available with every release) carries a core fuzzing library that holds a number of key classes. These are located under:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
org.owasp.jbrofuzz.core.*;&lt;br /&gt;
-Database.java&lt;br /&gt;
-Fuzzer.java&lt;br /&gt;
-FuzzerBigInteger.java&lt;br /&gt;
-NoSuchFuzzerException.java&lt;br /&gt;
-Prototype.java&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The class of importance is Fuzzer.java. If you are going to use recursive iterators of great length, there is also FuzzerBigInteger.java. The difference between the two is that Fuzzer.java uses the primitive java data type long (up to 16^16 values) while FuzzerBigInteger.java uses java BigInteger to perform the counting. Naturally, the class FuzzerBigInteger is slower and takes more memory than the Fuzzer class.&lt;br /&gt;
&lt;br /&gt;
Within JBroFuzz a Fuzzer is an instance of a java Iterator. This implies that values can be accessed by simply calling the &amp;lt;code&amp;gt;next()&amp;lt;/code&amp;gt; method once an object has been made available. Typically, a call to &amp;lt;code&amp;gt;hasNext()&amp;lt;/code&amp;gt; should also be performed prior to avoid an exception being thrown.&lt;br /&gt;
&lt;br /&gt;
A Fuzzer can be obtained from the factory method &amp;lt;code&amp;gt;createFuzzer(String, int);&amp;lt;/code&amp;gt; available for every instance of the fuzzing Database. Ergo:&lt;br /&gt;
&lt;br /&gt;
====A HelloFuzzer Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Database myDatabase = new Database();&lt;br /&gt;
&lt;br /&gt;
Fuzzer myFuzzer = myDatabase.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 5);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So how do I use the API? Here is a simple HelloFuzzer (file called HelloFuzzer.java) example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(Fuzzer f = fuzzDB.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 4); f.hasNext();) {&lt;br /&gt;
       // Get the next payload value...&lt;br /&gt;
       System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloFuzzer.java OWASP JBroFuzz Example 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To compile the above use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
javac -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar&amp;quot; HelloFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This assumes that you are currently inside the directory where HelloFuzzer.java resides and that the JBroFuzz.jar is located two directories within your current location i.e. in jbrofuzz/jar. In order to run the above compiled HelloFuzzer class issue:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
java -cp &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: The above 2 commands have been crafted in a win32 environment. The process for compiling and running HelloFuzzer.java above is the same in *nix machines. Simply replace the backslash &amp;quot;\&amp;quot; with &amp;quot;/&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Fuzzing Payload Definitions====&lt;br /&gt;
Within the JBroFuzz.jar file, there is a file called fuzzers.jbrf that carries all the fuzzer definitions that you see in the UI payloads tab of JBroFuzz. To view a latest copy of this file you can browse the SVN repository of JBroFuzz:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://jbrofuzz.svn.sourceforge.net/viewvc/jbrofuzz/tar/fuzzers.jbrf?view=log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A note here worth mentioning: Files ending in .jbrofuzz are session files saved by users while performing fuzzing operations. Files ending in .jbrf are JBroFuzz system files. Typical examples of .jbrf files are headers.jbrf, as well as fuzzers.jbrf. Both these use an internal proprietary format not to be confused with the .jbrofuzz file format.&lt;br /&gt;
&lt;br /&gt;
Fuzzers belong in categories (1 to many) and each fuzzer carries a set of payloads that define the alphabet of the fuzzer.&lt;br /&gt;
&lt;br /&gt;
Also, you have replacive and recursive fuzzers, zero fuzzers, etc. There are a number of different fuzzer categories. As an example of a fuzzer within the fuzzers.jbrf file, consider the hexadecimal fuzzer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fuzzer Name: Base16 (HEX)&lt;br /&gt;
Fuzzer Type: Recursive&lt;br /&gt;
Fuzzer Id:   031-B16-HEX&lt;br /&gt;
&lt;br /&gt;
Total Number of Payloads: 16&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Within the fuzzers.jbrf file this fuzzer is defined in plain-text format as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
R:031-B16-HEX:Base16 (HEX):16&lt;br /&gt;
&amp;gt; Number Systems | Base | Recursive Fuzzers&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
a&lt;br /&gt;
b&lt;br /&gt;
c&lt;br /&gt;
d&lt;br /&gt;
e&lt;br /&gt;
f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There is very little preventing you from defining your own fuzzers within this file, by following the file format specified above. You can use the UI to see if they have been loaded successfully. &lt;br /&gt;
&lt;br /&gt;
Further to recursive and replacive fuzzers you also have zero fuzzers (i.e. a zero fuzzer of 1000 will just transmit 1000 requests as they are, without adding any payloads) double fuzzers, cross product fuzzers, etc. &lt;br /&gt;
&lt;br /&gt;
Notice the factory method Database.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 4) yielding: &amp;quot;I want a 4 digit recursive fuzzer (why because NUM-HEX is recursive in its definition, starts with R: instead of P:) of HEX digits.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Thus the above scenario would iterate through all the digits from 0000 to ffff. I wouldn't recommend using the above scenario for such trivial fuzzing capabilities; simply presented as an example of the inner workings of JBroFuzz.jar&lt;br /&gt;
&lt;br /&gt;
====HelloFuzzer Refined====&lt;br /&gt;
A more detailed code breakdown of the above HelloFuzzer example can be found below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * JBroFuzz API Examples 01&lt;br /&gt;
 *&lt;br /&gt;
 * JBroFuzz - A stateless network protocol fuzzer for web applications.&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (C) 2007, 2008, 2009 subere@uncon.org&lt;br /&gt;
 *&lt;br /&gt;
 * This file is part of the JBroFuzz API examples on how to use the &lt;br /&gt;
 * fuzzer libraries included in JBroFuzz.jar.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is free software: you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 * &lt;br /&gt;
 * You should have received a copy of the GNU General Public License&lt;br /&gt;
 * along with JBroFuzz.  If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.&lt;br /&gt;
 * Alternatively, write to the Free Software Foundation, Inc., 51 &lt;br /&gt;
 * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.&lt;br /&gt;
 * &lt;br /&gt;
 * Verbatim copying and distribution of this entire program file is &lt;br /&gt;
 * permitted in any medium without royalty provided this notice &lt;br /&gt;
 * is preserved. &lt;br /&gt;
 * &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import org.owasp.jbrofuzz.core.NoSuchFuzzerException;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Database;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Fuzzer; &lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &amp;lt;p&amp;gt;In JBroFuzz a Fuzzer is a java Iterator.&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;p&amp;gt;In order to create a Fuzzer, use the factory method&lt;br /&gt;
 * Database.createFuzzer(String, int), passing as arguments&lt;br /&gt;
 * the Fuzzer ID and the specified length as a positive int.&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;p&amp;gt;Be careful to check that the fuzzer ID (labelled as f_ID)&lt;br /&gt;
 * is actually an existing ID from the Database of Fuzzers.&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;p&amp;gt;Expected Output:&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &amp;lt;code&amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: 00000&amp;lt;br&amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: 00001&amp;lt;br&amp;gt;&lt;br /&gt;
 *  ...&amp;lt;br&amp;gt;&lt;br /&gt;
 *  (a total of 16^5 = 1048576 lines)&amp;lt;br&amp;gt;&lt;br /&gt;
 *  ...&amp;lt;br&amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: ffffd&amp;lt;br&amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: ffffe&amp;lt;br&amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: fffff&amp;lt;br&amp;gt;&lt;br /&gt;
 * &amp;lt;/code&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;p&amp;gt;For more information on the Database of Fuzzers, see the&lt;br /&gt;
 * HelloDatabase Class.&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * @author subere@uncon.org&lt;br /&gt;
 * @version n/a&lt;br /&gt;
 */&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param args&lt;br /&gt;
	 */&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
		// You have to construct an instance of the fuzzers database&lt;br /&gt;
		Database fuzzDB = new Database();&lt;br /&gt;
		// You have to supply a valid fuzzer ID&lt;br /&gt;
		String f_ID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
		// You have to supply a (+)tive int&lt;br /&gt;
		int f_len = 5;&lt;br /&gt;
		&lt;br /&gt;
		try {&lt;br /&gt;
			&lt;br /&gt;
			for(Fuzzer f = fuzzDB.createFuzzer(f_ID, f_len); f.hasNext();) {&lt;br /&gt;
				&lt;br /&gt;
				// Get the next payload value...&lt;br /&gt;
				System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		} catch (NoSuchFuzzerException e) {&lt;br /&gt;
			&lt;br /&gt;
			System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Hello Database of Fuzzers====&lt;br /&gt;
Having seen how to access a single Fuzzer through the createFuzzer() method available in the Database object. The next question that comes naturally is what are the Fuzzers that are available by default in JBroFuzz?&lt;br /&gt;
&lt;br /&gt;
To answer that, this example focuses more on the database component that we previously initialised, investigating the list of available methods that it offers. &lt;br /&gt;
&lt;br /&gt;
In JBroFuzz, all Fuzzers are stored in a Database object that you will be required to construct in order to access them.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * JBroFuzz API Examples 02&lt;br /&gt;
 *&lt;br /&gt;
 * JBroFuzz - A stateless network protocol fuzzer for web applications.&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (C) 2007, 2008, 2009 subere@uncon.org&lt;br /&gt;
 *&lt;br /&gt;
 * This file is part of the JBroFuzz API examples on how to use the &lt;br /&gt;
 * fuzzer libraries included in JBroFuzz.jar.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is free software: you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 * &lt;br /&gt;
 * You should have received a copy of the GNU General Public License&lt;br /&gt;
 * along with JBroFuzz.  If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.&lt;br /&gt;
 * Alternatively, write to the Free Software Foundation, Inc., 51 &lt;br /&gt;
 * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.&lt;br /&gt;
 * &lt;br /&gt;
 * Verbatim copying and distribution of this entire program file is &lt;br /&gt;
 * permitted in any medium without royalty provided this notice &lt;br /&gt;
 * is preserved. &lt;br /&gt;
 * &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import org.owasp.jbrofuzz.core.NoSuchFuzzerException;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Database;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Fuzzer; &lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &amp;lt;p&amp;gt;In JBroFuzz all Fuzzers are stored in a Database&lt;br /&gt;
 * object that you will be required to construct in order&lt;br /&gt;
 * to access them.&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;p&amp;gt;Within the Database, each Fuzzer is a collection of &lt;br /&gt;
 * payloads, which carries a unique ID string value.&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;p&amp;gt;Example ID values are the output of this program:&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &amp;lt;code&amp;gt;&lt;br /&gt;
 *  The fuzzer ID is: 013-LDP-INJ&amp;lt;br&amp;gt;&lt;br /&gt;
 *	The name of the fuzzer is:			LDAP Injection&amp;lt;br&amp;gt;&lt;br /&gt;
 *	The id of the fuzzer is:			013-LDP-INJ&amp;lt;br&amp;gt;&lt;br /&gt;
 *	The of payloads it carries (it's alphabet) is:	20&amp;lt;br&amp;gt;&lt;br /&gt;
 *	It has as 1st payload:&amp;lt;br&amp;gt;&lt;br /&gt;
 *		|&amp;lt;br&amp;gt;&lt;br /&gt;
 *  The fuzzer ID is: 018-XSS-4IE&amp;lt;br&amp;gt;&lt;br /&gt;
 *	The name of the fuzzer is:			XSS IE&amp;lt;br&amp;gt;&lt;br /&gt;
 *	The id of the fuzzer is:			018-XSS-4IE&amp;lt;br&amp;gt;&lt;br /&gt;
 *	The of payloads it carries (it's alphabet) is:	38&amp;lt;br&amp;gt;&lt;br /&gt;
 *	It has as 1st payload:&amp;lt;br&amp;gt;&lt;br /&gt;
 *		&amp;lt; img src=`x` onrerror= ` ;; alert(1) ` /&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * &amp;lt;/code&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;p&amp;gt;Do not be confused between Prototypes and Fuzzers; &lt;br /&gt;
 * JBroFuzz uses Prototype objects to construct the Fuzzers&lt;br /&gt;
 * that get added into the Database upon initialisation.&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;p&amp;gt;As a result, the getter methods available within a Database&lt;br /&gt;
 * object can carry the name of getAllPrototypeIDs and &lt;br /&gt;
 * getAllFuzzerIDs interchangebly.&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * @author subere@uncon.org&lt;br /&gt;
 * @version n/a&lt;br /&gt;
 */&lt;br /&gt;
public class HelloDatabase {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param args&lt;br /&gt;
	 */&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
		// You have to construct an instance of the fuzzers database&lt;br /&gt;
		Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
		// Get a list of all the fuzzer IDs from the database&lt;br /&gt;
		String[] fuzzer_IDs = fuzzDB.getAllPrototypeIDs();&lt;br /&gt;
		&lt;br /&gt;
		System.out.println(&amp;quot;The fuzzer IDs found are:&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		for(String fuzzerID : fuzzer_IDs) {&lt;br /&gt;
			&lt;br /&gt;
			System.out.println(&amp;quot;The fuzzer ID is: &amp;quot; + fuzzerID);&lt;br /&gt;
			&lt;br /&gt;
			// We pass of length of 1, irrelevant if we are&lt;br /&gt;
			// just going to access the first payload&lt;br /&gt;
			// of the fuzzer&lt;br /&gt;
			Fuzzer fuzzer;&lt;br /&gt;
			try {&lt;br /&gt;
				&lt;br /&gt;
				fuzzer = fuzzDB.createFuzzer(fuzzerID, 1);&lt;br /&gt;
				// Normally you should check for fuzzer.hasNext()				&lt;br /&gt;
				String payload = fuzzer.next();&lt;br /&gt;
				&lt;br /&gt;
				System.out.println(&amp;quot;\tThe name of the fuzzer is:\t\t\t&amp;quot; + fuzzer.getName() );&lt;br /&gt;
				System.out.println(&amp;quot;\tThe id of the fuzzer is:\t\t\t&amp;quot; + fuzzer.getId() );&lt;br /&gt;
				System.out.println(&amp;quot;\tThe of payloads it carries (it's alphabet) is:\t&amp;quot; + fuzzDB.getSize(fuzzerID));&lt;br /&gt;
				System.out.println(&amp;quot;\tIt has as 1st payload:\n\t\t&amp;quot; + payload );&lt;br /&gt;
&lt;br /&gt;
			} catch (NoSuchFuzzerException e) {&lt;br /&gt;
				System.out.println(&amp;quot;Could not find the specified fuzzer!&amp;quot;);&lt;br /&gt;
				System.out.println(&amp;quot;Going to print all the fuzzer IDs I know:&amp;quot;);&lt;br /&gt;
				// old vs new for loop :)&lt;br /&gt;
				// in case of an error, print just the &lt;br /&gt;
				// fuzzer IDs, accessed from the DB&lt;br /&gt;
				for(int j = 0; j &amp;lt; fuzzer_IDs.length; j++) {&lt;br /&gt;
					System.out.println(&amp;quot;The fuzzer ID is: &amp;quot; + fuzzer_IDs[j]);&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Methods available within the Fuzzer Class====&lt;br /&gt;
A final example of this section, involves seeing the usage of all the method calls available in the Fuzzer.java class&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * JBroFuzz API Examples 03&lt;br /&gt;
 *&lt;br /&gt;
 * JBroFuzz - A stateless network protocol fuzzer for web applications.&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (C) 2007, 2008, 2009 subere@uncon.org&lt;br /&gt;
 *&lt;br /&gt;
 * This file is part of the JBroFuzz API examples on how to use the &lt;br /&gt;
 * fuzzer libraries included in JBroFuzz.jar.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is free software: you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 * &lt;br /&gt;
 * You should have received a copy of the GNU General Public License&lt;br /&gt;
 * along with JBroFuzz.  If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.&lt;br /&gt;
 * Alternatively, write to the Free Software Foundation, Inc., 51 &lt;br /&gt;
 * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.&lt;br /&gt;
 * &lt;br /&gt;
 * Verbatim copying and distribution of this entire program file is &lt;br /&gt;
 * permitted in any medium without royalty provided this notice &lt;br /&gt;
 * is preserved. &lt;br /&gt;
 * &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import org.owasp.jbrofuzz.core.NoSuchFuzzerException;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Database;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Fuzzer; &lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &amp;lt;p&amp;gt;Example iterating through all the methods available&lt;br /&gt;
 * in the Fuzzer Object and their respective outputs.&amp;lt;/p&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * @author subere@uncon.org&lt;br /&gt;
 * @version n/a&lt;br /&gt;
 */&lt;br /&gt;
public class IndigoFuzzerTests {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param args&lt;br /&gt;
	 */&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
		// You have to construct an instance of the fuzzers database&lt;br /&gt;
		Database fuzzDB = new Database();&lt;br /&gt;
		// You have to supply a valid fuzzer ID&lt;br /&gt;
		String f_ID = &amp;quot;033-B08-OCT&amp;quot;;&lt;br /&gt;
		// You have to supply a (+)tive int&lt;br /&gt;
		int f_len = 5;&lt;br /&gt;
&lt;br /&gt;
		try {&lt;br /&gt;
			&lt;br /&gt;
			Fuzzer f = fuzzDB.createFuzzer(f_ID, f_len);&lt;br /&gt;
&lt;br /&gt;
			while(f.hasNext()) {&lt;br /&gt;
				&lt;br /&gt;
				// Could do this via reflection, but..&lt;br /&gt;
				f.next();&lt;br /&gt;
				// System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
				System.out.println(&amp;quot; The maximum value is: &amp;quot; + f.getMaximumValue());&lt;br /&gt;
&lt;br /&gt;
				System.out.println(&amp;quot; The current value is: &amp;quot; + f.getCurrectValue());&lt;br /&gt;
				&lt;br /&gt;
&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		} catch (NoSuchFuzzerException e) {&lt;br /&gt;
			&lt;br /&gt;
			System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Advanced Fuzzing with the JBroFuzz Library===&lt;br /&gt;
&lt;br /&gt;
This section covers more advanced APIs that are available under the &amp;lt;b&amp;gt;org.owasp.jbrofuzz.core package&amp;lt;/b&amp;gt;. It should be noted that some of these classes and their corresponding functionality are not used by the JBroFuzz program application. Instead, they are made available for incorporation into other java code that you have perhaps written that requires more specialized type of fuzzing.&lt;br /&gt;
&lt;br /&gt;
====Fuzzing Really Long Values with Big Integer====&lt;br /&gt;
&lt;br /&gt;
As stated previously, within JBroFuzz a Fuzzer is a java Iterator. This implies that while fuzzing, we typically keep track of a counter representing the value that we are currently on. Consider the example of HelloFuzzer.java, above:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(Fuzzer f = fuzzDB.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 4); f.hasNext();) {&lt;br /&gt;
       // Get the next payload value...&lt;br /&gt;
       System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloFuzzer.java OWASP JBroFuzz Example 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If we compile this program:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
javac -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar&amp;quot; HelloFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and run it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
java -cp &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We are going to see output similar to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 The fuzzer payload is: 0000&lt;br /&gt;
 ... (output omitted)&lt;br /&gt;
 The fuzzer payload is: fffd&lt;br /&gt;
 The fuzzer payload is: fffe&lt;br /&gt;
 The fuzzer payload is: ffff&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now what if we want a hexadecimal fuzzer of length not 4, but, say, 24. Let's try compile and run the above program with a length of 24. Changing the line to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     for(Fuzzer f = fuzzDB.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 24); f.hasNext();) {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Running this modified version of HelloFuzzer.java, yields:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;javac -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer.java&lt;br /&gt;
&lt;br /&gt;
&amp;gt;java -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nothing! What is actually happening is JBroFuzz is figuring out that the specified length of the Fuzzer we are about to create is far greater than that of the long java data type. As a result, the Fuzzer is not even entering the iteration mode that is typically expected with methods next() and hasNext().&lt;br /&gt;
&lt;br /&gt;
That's all great, but we still want a hexadecimal fuzzer, 24 digits long going from:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
000000000000000000000000&lt;br /&gt;
...to...&lt;br /&gt;
ffffffffffffffffffffffff&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this JBroFuzz offers another type of Fuzzer class, that of FuzzerBigInteger. Let's modify the critical line within the original HelloFuzzer.java program that we had:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     for(FuzzerBigInteger f = fuzzDB.createFuzzerBigInteger(&amp;quot;031-B16-HEX&amp;quot;, 24); f.hasNext();) {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the entire program becoming:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(FuzzerBigInteger f = fuzzDB.createFuzzerBigInteger(&amp;quot;031-B16-HEX&amp;quot;, 24); f.hasNext();) {&lt;br /&gt;
       // Get the next payload value...&lt;br /&gt;
       System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloFuzzer.java OWASP JBroFuzz Example 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compiling and running this program yields:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 The fuzzer payload is: 000000000000000000000000&lt;br /&gt;
 The fuzzer payload is: 000000000000000000000001&lt;br /&gt;
 ... (output omitted)&lt;br /&gt;
 The fuzzer payload is: 00000000000000000001a982&lt;br /&gt;
 ... (output omitted)&lt;br /&gt;
 The fuzzer payload is: 00000000000000000001a982&lt;br /&gt;
 The fuzzer payload is: ffffffffffffffffffffffff&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are limitations to this class, as governed by the BigInteger class itself. Further information can be found at:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigInteger.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Still, on a virtual windows xp machine with 256Mb of RAM the above code had no problem running to completion. It took some time though.. Characteristics of the windows machine while this iteration was ongoing: The CPU was being utilised at 100% and memory usage was constant at 212 Mb. Overall, a clean sheet for FuzzerBigInteger.java.&lt;br /&gt;
&lt;br /&gt;
====Using the Power Fuzzer API====&lt;br /&gt;
&lt;br /&gt;
With web applications, it is often that you find yourself re-using part of, or the entirety of a fuzzing payload in more than one location, as part of the GET, POST, or any other type of request you submit.&lt;br /&gt;
&lt;br /&gt;
For this reason, JBroFuzz offers the PowerFuzzer class: A type of iterator for which you can specify how many copies of the payload you require in each request. &lt;br /&gt;
&lt;br /&gt;
Let's consider the following trivial scenario. You are in need of all hexadecimal values, which are 4-digits long (i.e. 0000 to FFFF) and you are in need of these 5 times for each request. &lt;br /&gt;
&lt;br /&gt;
This scenario is trivial, because typically you can assign the fuzzing payload (i.e. the value you get back from Fuzzer.next() ) to a String variable and re-use it as many times as you see fit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzerID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 int length = 4;&lt;br /&gt;
 ....&lt;br /&gt;
     for(Fuzzer f = fuzzDB.createFuzzer(fuzzerID, length); f.hasNext();) {&lt;br /&gt;
          String payload = f.next();&lt;br /&gt;
          ....&lt;br /&gt;
     }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using the PowerFuzzer.class, the following HelloPowerFuzzer.java program can be created:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloPowerFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzerID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 int length = 4;&lt;br /&gt;
 int power = 5;&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(PowerFuzzer f = fuzzDB.createPowerFuzzer(fuzzerID, length, power); f.hasNext();) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] identicalElements = f.nextPower();&lt;br /&gt;
&lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem : identicalElements) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloPowerFuzzer.java OWASP JBroFuzz Power Fuzzer Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This program would output the following; no rocket science here:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
....&lt;br /&gt;
 I have 5 elements: 4817 4817 4817 4817 4817&lt;br /&gt;
 I have 5 elements: 4818 4818 4818 4818 4818&lt;br /&gt;
 I have 5 elements: 4819 4819 4819 4819 4819&lt;br /&gt;
 I have 5 elements: 481a 481a 481a 481a 481a&lt;br /&gt;
 I have 5 elements: 481b 481b 481b 481b 481b&lt;br /&gt;
 I have 5 elements: 481c 481c 481c 481c 481c&lt;br /&gt;
 I have 5 elements: 481d 481d 481d 481d 481d&lt;br /&gt;
 I have 5 elements: 481e 481e 481e 481e 481e&lt;br /&gt;
 I have 5 elements: 481f 481f 481f 481f 481f&lt;br /&gt;
 I have 5 elements: 4820 4820 4820 4820 4820&lt;br /&gt;
 I have 5 elements: 4821 4821 4821 4821 4821&lt;br /&gt;
 I have 5 elements: 4822 4822 4822 4822 4822&lt;br /&gt;
 I have 5 elements: 4823 4823 4823 4823 4823&lt;br /&gt;
 I have 5 elements: 4824 4824 4824 4824 4824&lt;br /&gt;
 I have 5 elements: 4825 4825 4825 4825 4825&lt;br /&gt;
 I have 5 elements: 4826 4826 4826 4826 4826&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now imagine you need to change the number of elements you obtain back every time. For every second request, you need to obtain back two identical payloads, for every third request, you need to obtain back three payloads and for every fourth request, you need to obtain back four payloads. &lt;br /&gt;
&lt;br /&gt;
The PowerFuzzer class, with the corresponding method &amp;lt;b&amp;gt;setPower(int)&amp;lt;/b&amp;gt; allows you to set how many identical elements you obtain back, without having to worry about the length argument. Below is a class that solves the above scenario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloPowerFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzerID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 int length = 4;&lt;br /&gt;
 int power = 5;&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(PowerFuzzer f = fuzzDB.createPowerFuzzer(fuzzerID, length, power); f.hasNext();) {&lt;br /&gt;
	 &lt;br /&gt;
	   int currentValue = (int) f.getCurrentValue(); &lt;br /&gt;
	   currentValue %= 4;&lt;br /&gt;
	   switch (currentValue) {&lt;br /&gt;
			case 0: f.setPower(1); break;&lt;br /&gt;
			case 1: f.setPower(2); break;&lt;br /&gt;
			case 2: f.setPower(3); break;&lt;br /&gt;
			default: f.setPower(4); break;&lt;br /&gt;
	   }&lt;br /&gt;
	   &lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] identicalElements = f.nextPower();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem : identicalElements) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloPowerFuzzer.java&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This class has as output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ....&lt;br /&gt;
 I have 1 elements: 22a8&lt;br /&gt;
 I have 2 elements: 22a9 22a9&lt;br /&gt;
 I have 3 elements: 22aa 22aa 22aa&lt;br /&gt;
 I have 4 elements: 22ab 22ab 22ab 22ab&lt;br /&gt;
 I have 1 elements: 22ac&lt;br /&gt;
 I have 2 elements: 22ad 22ad&lt;br /&gt;
 I have 3 elements: 22ae 22ae 22ae&lt;br /&gt;
 I have 4 elements: 22af 22af 22af 22af&lt;br /&gt;
 I have 1 elements: 22b0&lt;br /&gt;
 I have 2 elements: 22b1 22b1&lt;br /&gt;
 I have 3 elements: 22b2 22b2 22b2&lt;br /&gt;
 I have 4 elements: 22b3 22b3 22b3 22b3&lt;br /&gt;
 I have 1 elements: 22b4&lt;br /&gt;
 I have 2 elements: 22b5 22b5&lt;br /&gt;
 I have 3 elements: 22b6 22b6 22b6&lt;br /&gt;
 I have 4 elements: 22b7 22b7 22b7 22b7&lt;br /&gt;
 I have 1 elements: 22b8&lt;br /&gt;
 I have 2 elements: 22b9 22b9&lt;br /&gt;
 ....&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Naturally, the algorithm of the number of elements required can vary based on any number of parameters. The PowerFuzzer class gives you a quick way to control the number of identical payloads you obtain back, without having to worry about creating a data type to store them in.&lt;br /&gt;
&lt;br /&gt;
====Using the Double Fuzzer API====&lt;br /&gt;
&lt;br /&gt;
In some cases of fuzzing web applications, a requirement to fuzz two (or more) locations part of the request being submitted to the web server becomes apparent. &lt;br /&gt;
&lt;br /&gt;
The DoubleFuzzer class allows you to create a fuzzer based on two prototype definitions. Similarly to instantiating a Fuzzer through a prototype and a given length, with a DoubleFuzzer, we pass two prototype definitions and two lengths. The corresponding method call available within the &amp;lt;b&amp;gt;Database&amp;lt;/b&amp;gt; class of org.owasp.jbrofuzz.core is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public DoubleFuzzer createDoubleFuzzer(String id1, int length1,  &lt;br /&gt;
								String id2, int length2) throws NoSuchFuzzerException {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Let's cross-breed some fuzzers, see what results we get back during an iteration.&lt;br /&gt;
&lt;br /&gt;
The first example below, uses two hexadecimal fuzzers of different lengths, as specified by the variables:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
String fuzzID1 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
String fuzzID2 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
int length1 = 4;&lt;br /&gt;
int length2 = 2;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As the double fuzzer iteration is taking place, the second fuzzer, defined by the fuzzID2 &amp;amp; length2 loops, starting from 00 and going all the way up to FF. An example output is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 I have 2 elements: fefb fb&lt;br /&gt;
 I have 2 elements: fefc fc&lt;br /&gt;
 I have 2 elements: fefd fd&lt;br /&gt;
 I have 2 elements: fefe fe&lt;br /&gt;
 I have 2 elements: feff ff&lt;br /&gt;
 I have 2 elements: ff00 00&lt;br /&gt;
 I have 2 elements: ff01 01&lt;br /&gt;
 I have 2 elements: ff02 02&lt;br /&gt;
 I have 2 elements: ff03 03&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The complete code listing of HelloDoubleFuzzer.java is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloDoubleFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzID1 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 String fuzzID2 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 int length1 = 4;&lt;br /&gt;
 int length2 = 2;&lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
     DoubleFuzzer f = fuzzDB.createDoubleFuzzer(fuzzID1, length1, fuzzID2, length2);&lt;br /&gt;
	 &lt;br /&gt;
     while( f.hasNext() ) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] payloads = f.next();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem : payloads) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloDoubleFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's simple enough; now let's cross-breed something a bit more exotic: Imagine a 3-digit octal ID value [000 - 777] being submitted inline with, say, a parameter that we want to test for Cross-Site Scripting (XSS). Let's adjust the program above with the corresponding fuzzer IDs of these fuzzers. Remember all the IDs of all the fuzzers can be found in the fuzzers.jbrf file within JBroFuzz.jar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloDoubleFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzID1 = &amp;quot;033-B08-OCT&amp;quot;;&lt;br /&gt;
 String fuzzID2 = &amp;quot;019-XSS-GEK&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 int length1 = 3;&lt;br /&gt;
 int length2 = 1;&lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
     DoubleFuzzer f = fuzzDB.createDoubleFuzzer(fuzzID1, length1, fuzzID2, length2);&lt;br /&gt;
	 &lt;br /&gt;
     while( f.hasNext() ) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] payloads = f.next();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem : payloads) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloDoubleFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output from this program is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 I have 2 elements: 000 (1?(1?{a:1?&amp;quot;&amp;quot;[1?&amp;quot;ev\a\l&amp;quot;:0](1?&amp;quot;\a\lert&amp;quot;:0):0}:0).a:0)[1?&amp;quot;\c\a\l\l&amp;quot;:0](content,1?&amp;quot;x\s\s&amp;quot;:0)&lt;br /&gt;
 I have 2 elements: 001 &amp;lt;STYLE TYPE=&amp;quot;text/javascript&amp;quot;&amp;gt;alert('XSS');&amp;lt;/STYLE&amp;gt;&lt;br /&gt;
 I have 2 elements: 002 &amp;lt;SCRIPT SRC=http://ha.ckers.org/xss.js&lt;br /&gt;
 I have 2 elements: 003 &amp;lt;A HREF=&amp;quot;http://google:ha.ckers.org&amp;quot;&amp;gt;XSS&amp;lt;/A&amp;gt;&lt;br /&gt;
 I have 2 elements: 004 &amp;lt;A HREF=&amp;quot;http://ha.ckers.org@google&amp;quot;&amp;gt;XSS&amp;lt;/A&amp;gt;&lt;br /&gt;
 I have 2 elements: 005 &amp;lt;A HREF=&amp;quot;//google&amp;quot;&amp;gt;XSS&amp;lt;/A&amp;gt;&lt;br /&gt;
 ....&lt;br /&gt;
 ...&lt;br /&gt;
 ..&lt;br /&gt;
 .&lt;br /&gt;
 ..&lt;br /&gt;
 ...&lt;br /&gt;
 ....&lt;br /&gt;
 I have 2 elements: 774 &amp;lt;SCRIPT SRC=http://ha.ckers.org/xss.js&lt;br /&gt;
 I have 2 elements: 775 &amp;lt;A HREF=&amp;quot;http://google:ha.ckers.org&amp;quot;&amp;gt;XSS&amp;lt;/A&amp;gt;&lt;br /&gt;
 I have 2 elements: 776 &amp;lt;A HREF=&amp;quot;http://ha.ckers.org@google&amp;quot;&amp;gt;XSS&amp;lt;/A&amp;gt;&lt;br /&gt;
 I have 2 elements: 777 &amp;lt;A HREF=&amp;quot;//google&amp;quot;&amp;gt;XSS&amp;lt;/A&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the list stopping iterating at the last element of the greatest of the two fuzzers.&lt;br /&gt;
&lt;br /&gt;
====Using the Cross Product Fuzzer API====&lt;br /&gt;
&lt;br /&gt;
A final case of a special Double Fuzzer is the the Cross Product Fuzzer of the payloads of two fuzzers. This type of fuzzing is virtually encountered in username/password login form on the Internet. Let's work on this by example.&lt;br /&gt;
&lt;br /&gt;
Consider your home network router. You recall changing the default password to one of the typical password values that you use. Also, you are not 100% certain about the username for the router either, it is one of the typical admin, user, administrator, root, yoda type values, but you cannot recall which one. Needless to say, you don't know what the username, or password actually is. &lt;br /&gt;
&lt;br /&gt;
So in a mini brute-forcing attack scenario, you have the following list of usernames, out of which one is valid:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin&lt;br /&gt;
administrator&lt;br /&gt;
Administrator&lt;br /&gt;
root&lt;br /&gt;
adminUser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also you know that the password is one of the following (Top 10 Threadwatch 2007 passwords):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
password&lt;br /&gt;
123456&lt;br /&gt;
qwerty&lt;br /&gt;
abc123&lt;br /&gt;
letmein&lt;br /&gt;
monkey&lt;br /&gt;
myspace1&lt;br /&gt;
password1&lt;br /&gt;
blink182&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The set that contains every possible combination of the two sets is the Cross Product of the list of usernames, times the list of passwords. So manually, (as most people do while locking themselves out) you would try, popular combinations of the above, starting with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin password&lt;br /&gt;
admin 123456&lt;br /&gt;
admin qwerty&lt;br /&gt;
....&lt;br /&gt;
admin blink182&lt;br /&gt;
administrator password&lt;br /&gt;
administrator 123456&lt;br /&gt;
administrator qwerty&lt;br /&gt;
....&lt;br /&gt;
adminUser password1&lt;br /&gt;
adminUser blink182&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus the total number of attempts would be (number of usernames) x (number of passwords). No rocket science here.&lt;br /&gt;
&lt;br /&gt;
JBroFuzz introduces the CrossProductFuzzer class capable of iterating through the cross product of two fuzzers. Let's put it into code; the following program provides a list of all 2-digit octal numbers with every 2-digit binary number. A total of (8 x 8) x (2 x 2) = 256 values.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloCrossFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzID1 = &amp;quot;033-B08-OCT&amp;quot;;&lt;br /&gt;
 String fuzzID2 = &amp;quot;034-B02-BIN&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 int length1 = 2;&lt;br /&gt;
 int length2 = 2;&lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
     CrossProductFuzzer f = fuzzDB.createCrossFuzzer(fuzzID1, length1, fuzzID2, length2);&lt;br /&gt;
	 &lt;br /&gt;
     while( f.hasNext() ) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] payloads = f.next();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem : payloads) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloCrossFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This program has as output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 I have 2 elements: 00 00&lt;br /&gt;
 ...&lt;br /&gt;
 ..&lt;br /&gt;
 .&lt;br /&gt;
 ..&lt;br /&gt;
 ...&lt;br /&gt;
 I have 2 elements: 74 00&lt;br /&gt;
 I have 2 elements: 74 01&lt;br /&gt;
 I have 2 elements: 74 10&lt;br /&gt;
 I have 2 elements: 74 11&lt;br /&gt;
 I have 2 elements: 75 00&lt;br /&gt;
 I have 2 elements: 75 01&lt;br /&gt;
 I have 2 elements: 75 10&lt;br /&gt;
 I have 2 elements: 75 11&lt;br /&gt;
 I have 2 elements: 76 00&lt;br /&gt;
 I have 2 elements: 76 01&lt;br /&gt;
 I have 2 elements: 76 10&lt;br /&gt;
 I have 2 elements: 76 11&lt;br /&gt;
 I have 2 elements: 77 00&lt;br /&gt;
 I have 2 elements: 77 01&lt;br /&gt;
 I have 2 elements: 77 10&lt;br /&gt;
 I have 2 elements: 77 11&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can substitute any list of fuzzer ID to the IDs you use in this program. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Remember!&amp;lt;/b&amp;gt; The total number of payloads must not exceed that of the the maximum value of the long primitive java data type &amp;lt;i&amp;gt;Long.MAX_VALUE&amp;lt;/i&amp;gt; which is 2^63 - 1. If you are in need of more than that payloads, you would have to use the big integer implementation of the Fuzzer class, namely: FuzzerBigInteger.java.&lt;br /&gt;
&lt;br /&gt;
==Graphing with JBroFuzz==&lt;br /&gt;
&lt;br /&gt;
Once a fuzzing session has completed, JBroFuzz offers the ability to generate a number of graphs, using various metrics. This section investigates how to further the graphing functionality available with the application.&lt;br /&gt;
&lt;br /&gt;
===Customizing the logo on each Graph===&lt;br /&gt;
&lt;br /&gt;
As of version 2.0, all image icons within JBroFuzz are located within the /icons directory of the application. The particular transparent image file displayed on top right part of the graphs is named: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/icons/owasp-med.png&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This file is a 64 x 64 PNG image file. You can replace it with your own file, as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;ls -l JBroFuzz.jar&lt;br /&gt;
-rw-rw-rw-   1 user     group     4033612 Feb 15 12:33 JBroFuzz.jar&lt;br /&gt;
&lt;br /&gt;
&amp;gt;unzip -oq JBroFuzz.jar&lt;br /&gt;
&amp;gt;cd icons&lt;br /&gt;
&amp;gt;mv owasp-med.png file64x64-file.png&lt;br /&gt;
&amp;gt;cd ..&lt;br /&gt;
&amp;gt;zip -r JBroFuzz.zip *&lt;br /&gt;
&amp;gt;mv JBroFuzz.zip JBroFuzz.jar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This enables you to have your own (company logo) on JBroFuzz graphs. Further to this, a number of other customization options are available, by right clicking on each of the graph generated.&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_JBroFuzz_Tutorial&amp;diff=78554</id>
		<title>OWASP JBroFuzz Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_JBroFuzz_Tutorial&amp;diff=78554"/>
				<updated>2010-02-18T15:46:06Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: /* Advanced Fuzzing with the JBroFuzz Library */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:OWASP JBroFuzz]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
''“If you can’t fuzz with JBroFuzz, you probably do not want to fuzz!”'' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;Old JBroFuzz Motto &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The art of teaching, Mark Van Doren said, is the art of assisting discovery. Fuzzing is a representative discipline towards assisting the discovery of security vulnerabilities, that is just beginning to come of age. Over the last two years, through continuous development, JBroFuzz has attempted to expose the intrinsic beauty of the subject: Constantly submit a vast amount of payloads to a service, device or prompt, waiting for the one response that makes all the difference. This is the mentality that JBroFuzz embraces and attempts to offer back to security professionals. &lt;br /&gt;
&lt;br /&gt;
Fuzzing as a concept goes beyond a conventional work flow or a standard methodology. I would argue that to know how to fuzz well, is to master a new language. Thus, similar to the process of learning a programming (or foreign) language, there are three things you must master: &lt;br /&gt;
&lt;br /&gt;
• Grammar: How fuzzing as a process is structured&amp;lt;br&amp;gt;&lt;br /&gt;
• Vocabulary: How to name fuzzing concepts you want to use&amp;lt;br&amp;gt;&lt;br /&gt;
• Usage: Ways of achieving everyday effective results with fuzzing&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:001-JBroFuzz-Tutorial.jpg|300px|right|JBroFuzz Splash Screen]]From the pre-existing information available for JBroFuzz, this tutorial focuses on usage: How to best put a fuzzing tool to good use, either via the UI, or using APIs that ''JBroFuzz.jar'' is constituted of. As a result, this document has a small requirement as a caveat; you need to have a beginner level understanding of the Java programming language in order to understand some sections. &lt;br /&gt;
&lt;br /&gt;
There are a number of working examples described here within, which '''grep''' for statements such as “''&amp;lt;nowiki&amp;gt;public static void main(String[] args)&amp;lt;/nowiki&amp;gt;''”. The majority of the content relates to reviewing these examples and putting the Java syntax into a fuzzing perspective. &lt;br /&gt;
&lt;br /&gt;
To summarise, this tutorial focuses on customary and effective usage of fuzzing through the JBroFuzz Java APIs and the respective UI. It is targeting (without attacking them) web applications. Without further redo, let’s get fuzzing! &lt;br /&gt;
&lt;br /&gt;
== JBroFuzz Basic Functionality ==&lt;br /&gt;
This section carries a number of basic fuzzing examples to get you started with JBroFuzz. Overall, even though the actions performed to not produce any amazing fuzzing results, it serves as a starting point in understanding how to perform particular fuzzing operations on web applications.&lt;br /&gt;
&lt;br /&gt;
=== 'Hello Google!' (forget 'Hello World') ===&lt;br /&gt;
As the traditional first program that you learn when indulging in a new programming language, 'Hello World!' represents the norm for understanding the basic output operations and syntax (let alone compiler and execution behaviour) of the language in question. &lt;br /&gt;
&lt;br /&gt;
As with most web application security related tools, when I am given the responsibility to run them, often in order to understand how they work, I would first craft a legitimate, single request to a trusted (to be up and behaving) popular Internet location. Needless, to say this request more than on occasion finds itself on Google servers. &lt;br /&gt;
&lt;br /&gt;
So 'Hello World!' for programming languages seems to transform to 'Hello Google!' for understanding how web application security related tools work. Let us see, how JBroFuzz does it. &lt;br /&gt;
&lt;br /&gt;
• Double-click on JBroFuzz and browse to the 'Fuzzing' tab&lt;br /&gt;
&lt;br /&gt;
JBroFuzz is constituted of tabs, typically located in the bottom or top (if you bother to change the settings) of the main window. &lt;br /&gt;
&lt;br /&gt;
The 'Fuzzing' tab is where you craft your request message to a particular host. Once that is in place, you can select any part of the request and proceed into adding any number of payloads. We shall see how in later sections.&lt;br /&gt;
&lt;br /&gt;
• In the 'URL' field type: http://www.google.com/ http://www.google.com&lt;br /&gt;
&lt;br /&gt;
Unlike conventional URLs, the URL field in JBroFuzz is only used for the underlying protocol (HTTP or HTTPS), host name (e.g.  www.yahoo.com) and (optionally) port number.&lt;br /&gt;
&lt;br /&gt;
All remaining information pasted or typed into the 'URL' field will be ignored; you are expected to enter it in the 'Request' field below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Still, if you want to just copy-paste a URL from a browser, hit [Ctrl+L] while you are not fuzzing, paste the URL value that you have copied from a browser and JBroFuzz will automatically do the work for you. &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples of valid URL values to be put in the&lt;br /&gt;
&lt;br /&gt;
Treat the 'URL' and 'Request' fields as the two stages of a 'telnet' session on port 80; you are effectively using the 'URL' field to specify the equivalent of: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;gt;telnet www.google.com 8088&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As equivalent to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
http://www.google.com:8088&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or in the case of HTTPS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
https://www.google.com:8088&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Naturally, default ports for HTTP is 80 and HTTPS is 443.&lt;br /&gt;
&lt;br /&gt;
• In the 'Request' field type: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
GET / HTTP/1.0&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And press 'Enter' twice&lt;br /&gt;
&lt;br /&gt;
This is where the body of the message you are sending is to be placed. So anything obeying HTTP/S protocol, such as GET and POST requests, header fields and/or HTML content should be included here.&lt;br /&gt;
&lt;br /&gt;
As part of the process of fuzzing web applications with JBroFuzz you need to have done your homework, in terms of providing a base request message. This message is what will be used later on to add payloads to particular sections of the request.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;• Hit 'Start' [Ctrl+Enter]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will instigate the process of sending a single request to the specified host on a given (or default) port, over HTTP or HTTPS.&lt;br /&gt;
&lt;br /&gt;
Once a connection has been established JBroFuzz will proceed to submit the message you have typed into the 'Request' field.&lt;br /&gt;
&lt;br /&gt;
Finally, JBroFuzz will log all data sent and received into a file; accessing this file is typically a process of double clicking on the output line on the table at the bottom section of the 'Fuzzing' tab.&lt;br /&gt;
&lt;br /&gt;
You should see a response received in the bottom part of the 'Fuzzing' panel. Double click (or right click for more options) to see the information exchanged; typically this would be a 302 redirect pointing you to another location. Congratulations, you have just said &amp;quot;Hello&amp;quot; to Google! &lt;br /&gt;
&lt;br /&gt;
[[Image:002-JBroFuzz-Tutorial.png|500px|JBroFuzz Hello Google!]]&lt;br /&gt;
&lt;br /&gt;
Now this would typically be enough under RFC rules, to get a response back; but damn all the bots out here, most websites require further information to respond back. So, in the 'Request' field let's pretend to be a (kind of) legitimate browser by typing: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
GET / HTTP/1.0&amp;lt;br&amp;gt;&lt;br /&gt;
Host: www.google.com&amp;lt;br&amp;gt;&lt;br /&gt;
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729) JBroFuzz/1.5&amp;lt;br&amp;gt;&lt;br /&gt;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-gb,en;q=0.5Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Not forgetting to end the request typed with two returns: Press 'Enter' twice. Again, you should be able to see a line added with the response received back. &lt;br /&gt;
&lt;br /&gt;
Practice sending single requests to a website of your choice by changing the URL and also the 'Host:' field from the 'Request' above. Also try accessing an HTTPS website. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Alternatively, you can use the shortcut [Ctrl+L] to type in your URL, with the 'Request' field filled automatically, based on the URL you have typed. &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== HTTP Version Numbers &amp;amp; www.cia.gov Headerless Responses ===&lt;br /&gt;
For web applications, very often ill-defined requests submitted over the Internet, will trigger semi-legitimate responses that actually do not obey HTTP RFC protocol specification. Often, even though this is not the case in this example, these responses can lead to the identification of one or more security vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
In this example we test for the responses received for invalid HTTP version numbers on a particular website, namely www.cia.gov, over https. Now a word of caution here; please do not attempt to fuzz web applications that you do not have the authority to do so, especially over the Internet. &lt;br /&gt;
&lt;br /&gt;
Still, for the purposes of this tutorial exercise, we will subject a web server to no more than a dozen or so requests. These requests would be otherwise identical, if it was not for the HTTP version number incrementing by a value of 1 on each request. &lt;br /&gt;
&lt;br /&gt;
In terms of having the authority to do so, well this is identical to hitting 'Refresh' in your web browser a dozen or so times, while you are browsing to www.cia.gov. I do not consider this remotely close to any form of hacking, cracking, or proper fuzzing; web servers across the globe receive a lot more abuse than this on a daily basis. &lt;br /&gt;
&lt;br /&gt;
Finally, by the time you are reading this, the particular issue described might have been fixed. So here goes:&lt;br /&gt;
&lt;br /&gt;
• Within JBroFuzz, select: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
File -&amp;gt; Open Location [Ctrl+L]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Type: https://www.cia.gov and hit enter. This is depicted in the following screenshot:&lt;br /&gt;
&lt;br /&gt;
[[Image:003-JBroFuzz-Tutorial.png|JBroFuzz Open Location]]&lt;br /&gt;
&lt;br /&gt;
Hitting 'Enter' should automatically populate the 'URL' field and the 'Request' field within the 'Fuzzing' tab. What you see is the base request that we intend to add fuzzing payloads to. Before we do so, let us make one small alteration first:&lt;br /&gt;
&lt;br /&gt;
• Modify the first line of the 'Request' field to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
GET / HTTP/0.0&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Our objective is to enumerate the supported by the web server (in this case www.cia.gov) HTTP version numbers, following the two digit format that it has. We could be a lot more agressive here and test for buffer overflows and all types of injection; that would be out of line without the authority to do so. Instead we are going to see how JBroFuzz will iterate through the values of 0.0 to 1.4 by means of adding a Fuzzer to our base request.&lt;br /&gt;
&lt;br /&gt;
• Highlight the second zero from the line 'GET / HTTP/0.0' and right-click, selecting 'Add'. This is depicted in the screeshot below:&lt;br /&gt;
&lt;br /&gt;
[[Image:004-JBroFuzz-Tutorial.png|400px|Adding a Fuzzer to the HTTP version number]]&lt;br /&gt;
&lt;br /&gt;
• From the appearing 'Add a Fuzzer' window, select as 'Category Name', in the most left column 'Base' and as 'Fuzzer Name' in the middle column 'Base 10 (Decimal) Alphabet.&lt;br /&gt;
&lt;br /&gt;
• Click on 'Add Fuzzer' on the bottom right of the window&lt;br /&gt;
&lt;br /&gt;
[[Image:005-JBroFuzz-Tutorial.png|400px|Adding a Fuzzer]]&lt;br /&gt;
&lt;br /&gt;
This should add a Fuzzer of length 1 that iterates over the decimal (i.e. base 10) numbers 0 to 9. If we have added a hexadecimal Fuzzer instead of a decimal one (i.e. base 16) the iteration would from 0 to F. If we had selected two digits instead of one and proceeded to add a decimal Fuzzer, the iteration would be from:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
00&amp;lt;br&amp;gt;&lt;br /&gt;
01&amp;lt;br&amp;gt;&lt;br /&gt;
..&amp;lt;br&amp;gt;&lt;br /&gt;
98&amp;lt;br&amp;gt;&lt;br /&gt;
99&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From a User Interface (UI) perspective you should see a line added to the 'Added Payloads Table'. &lt;br /&gt;
&lt;br /&gt;
• Click 'Start' [Ctrl+Enter]&lt;br /&gt;
&lt;br /&gt;
This process will send 10 requests to the specified web server changing only first line of the request to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
GET / HTTP/0.0...&amp;lt;br&amp;gt;&lt;br /&gt;
GET / HTTP/0.1...&amp;lt;br&amp;gt;&lt;br /&gt;
...&amp;lt;br&amp;gt;&lt;br /&gt;
GET / HTTP/0.8...&amp;lt;br&amp;gt;&lt;br /&gt;
GET / HTTP/0.9...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While this is ongoing, you can sort the results by 'No' in the 'Output' table in the bottom of the 'Fuzzing' tab. This should enable you to see what request is currently being transmitted and received in real time.&lt;br /&gt;
&lt;br /&gt;
Once complete, change the first line of the 'Request' field to read:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
GET / HTTP/1.0&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
• Click 'Start' [Ctrl+Enter]&lt;br /&gt;
&lt;br /&gt;
The resulting output should resemble the following screenshot:&lt;br /&gt;
&lt;br /&gt;
[[Image:006-JBroFuzz-Tutorial.png|500px|JBroFuzz Output from a Fuzzing Session]]&lt;br /&gt;
&lt;br /&gt;
Straight away we can notice a difference in the response size: For HTTP version numbers 0.0 to 0.9 we are getting back what seems fairly big in size responses; 32222 bytes in size worth of responses, given that HTTP protocol version 0.0 to 0.8 do not officially exist!&lt;br /&gt;
&lt;br /&gt;
By double-clicking on one of these requests, we can see that the web server in question is responding back with no headers, yet returning a full HTML body; this represents the 32222 bytes of response of data we are receiving back. The following screenshot illustrates this:&lt;br /&gt;
&lt;br /&gt;
[[Image:007-JBroFuzz-Tutorial.png|300px|JBroFuzz Output for a Single Request/Response]]&lt;br /&gt;
&lt;br /&gt;
Using the 'Graphing' tab we can proceed to graph the particular requests and responses for this given session. &lt;br /&gt;
&lt;br /&gt;
• Within the 'Graphing' tab, click 'Start' [Ctrl+Enter]. &lt;br /&gt;
&lt;br /&gt;
• Select the directory corresponding to the Output folder we have used for this fuzzing session. This will typically be the last one.&lt;br /&gt;
&lt;br /&gt;
• Right-click and select 'Graph'&lt;br /&gt;
&lt;br /&gt;
Once complete, browse to the 'Response Size' tab within the 'Graphing' tab, as illustrated in the screenshot below:&lt;br /&gt;
&lt;br /&gt;
[[Image:008-JBroFuzz-Tutorial.png|300px|JBroFuzz Graphing different 'Response Sizes']]&lt;br /&gt;
&lt;br /&gt;
To re-iterate this does not present a security vulnerability in any shape or form; merely the fact that by manipulating HTTP version numbers as part of the request we transmit, we can impact the response that we get back. In this case, what changes is the non-existent header fields, with some HTML content being received back.&lt;br /&gt;
&lt;br /&gt;
If I was to guess what is causing this, I would say that some sort of load balancing or content delivery is not happening as it should when non-existent version numbers are being transmitted.&lt;br /&gt;
&lt;br /&gt;
==Using JBroFuzz with Paros Proxy==&lt;br /&gt;
&lt;br /&gt;
JBroFuzz is a standalone fuzzer; it can release and create sockets over HTTP and HTTPS, but in order to use JBroFuzz correctly you will have to know what it is that you are fuzzing. &lt;br /&gt;
&lt;br /&gt;
In comes the need for a proxy tool; the opening versions of JBroFuzz actually had a proxy tab that you could use to intercept traffic generated by your web browser. That functionality got removed in an attempt to focus and deliver solely on the fuzzing capabilities of the tool.&lt;br /&gt;
&lt;br /&gt;
This section details how to use JBroFuzz in combination with a client side proxy. The one selected is Paros Proxy, which, despite the fact that it hasn't been updated since 2006 is still a popular tool that you see in web security testing live CDs. You could use any of the other proxy tools available. &lt;br /&gt;
&lt;br /&gt;
===Winning on a Remix of the Year Award===&lt;br /&gt;
&lt;br /&gt;
At 17:53, on a frosty winter evening, a message window popped up:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
17:53 http://www.localhost.com/remixcontest/club/annual2010.html&lt;br /&gt;
17:53 Hey bro, could you cast in a vote here for the Such &amp;amp; Such Remix?&lt;br /&gt;
17:53 Appreciated!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A friend in need is a friend indeed, so here goes I thought. Opening up a web browser configured to work with Paros as an intermediate proxy, allowed for the casting of my vote. while keeping a record of each request and reply. &lt;br /&gt;
&lt;br /&gt;
No registration, or any other form of submitting an identifier was needed. The request that Paros stored for the casting of the actual vote was:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET http://www.localhost.com/remixcontest/club/vote.php?onLoad=%5Btype%20Method%5D&amp;amp;id=55 HTTP/1.1&lt;br /&gt;
Host: www.localhost.com&lt;br /&gt;
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729) Paros/3.2.13&lt;br /&gt;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&lt;br /&gt;
Accept-Language: en-gb,en;q=0.5&lt;br /&gt;
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&lt;br /&gt;
Keep-Alive: 300&lt;br /&gt;
Proxy-Connection: keep-alive&lt;br /&gt;
Cookie: PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Paros Proxy actually places the domain (in this case www.localhost.com) with the protocol (i.e. http) in front of the GET request. As a result, you can't open a telnet/netcat session and just copy-paste the above. Similarly when we bring the request into JBroFuzz, a bit of tweaking is required. &lt;br /&gt;
&lt;br /&gt;
* In the URL field, type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://www.localhost.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Request field, let's keep what is of interest:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /remixcontest/club/vote.php?onLoad=%5Btype%20Method%5D&amp;amp;id=55 HTTP/1.0&lt;br /&gt;
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5&lt;br /&gt;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&lt;br /&gt;
Accept-Language: en-gb,en;q=0.5&lt;br /&gt;
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&lt;br /&gt;
Cookie: PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No needs for Keep-Alive and Proxy-Connection. Let's simplify the HTTP request by making it a version 1.0 request and getting rid of the Host header as well. Also on the user agent, let us keep that mainstream vanilla: Firefox on Windows (popular browser combination), getting rid of the .NET and Paros additives.&lt;br /&gt;
&lt;br /&gt;
Checking on the website, our Such &amp;amp; Such remix already has about 100 votes or so and the top remix has approximately 310 votes. Let's fuzz this:&lt;br /&gt;
&lt;br /&gt;
* Select 2 of the digits of the cookie value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Select: Panel -&amp;gt; Add&lt;br /&gt;
&lt;br /&gt;
* In the &amp;quot;Add a Fuzzer&amp;quot; panel, select:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Base -&amp;gt; Base16 (HEX)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and select &amp;quot;Add Fuzzer&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
This will add a line within the Payloads tab on the right hand side. &lt;br /&gt;
&lt;br /&gt;
Our cookie value above (PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e) is in lowercase, hexadecimal format. Let's make sure the encoding we select is also that. &lt;br /&gt;
&lt;br /&gt;
Within the Payloads tab, click on the encoding drop down menu and select lowercase. Just before clicking &amp;quot;Start&amp;quot;, JBroFuzz should look something like the screenshot below.&lt;br /&gt;
&lt;br /&gt;
[[Image:014-JBroFuzz-Tutorial.png|Adding Votes by iterating through PHPSESSID cookie values]]&lt;br /&gt;
&lt;br /&gt;
== Performing User Enumeration with a Valid Set of Credentials ==&lt;br /&gt;
Often you encounter an application that allows for the enumeration of one or more pages after a user has been successfully granted a set of session credentials. One of the key areas to test from an application specific perspective, relates to the page(s) that provide user account information.&lt;br /&gt;
&lt;br /&gt;
In the following example, we investigate an ASP.NET 2.0 application with a C# back-end. In this, an authenticated user has the option to select to &amp;quot;View My Profile&amp;quot;. This page provides them with account information (including the typical username, email address, further notes) that they can proceed to update and save to the back-end system.&lt;br /&gt;
&lt;br /&gt;
After a user has authenticated, the following URL, gives them access to their profile information stored on the database:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://www.myattackingdomain.com/portal-location/UserInfo.aspx?UserID=23&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Simple investigation confirms that the digits allowed as part of the UserID value are decimal numbers only. Lets feed that information into JBroFuzz.&lt;br /&gt;
&lt;br /&gt;
===Fuzzing a User ID===&lt;br /&gt;
&lt;br /&gt;
• Within JBroFuzz, select: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
File -&amp;gt; Open Location [Ctrl+L]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Type: http://www.myattackingdomain.com/portal-location/UserInfo.aspx?UserID=23 and hit enter. This is depicted in the following screenshot:&lt;br /&gt;
&lt;br /&gt;
[[Image:009-JBroFuzz-Tutorial.png|300px|JBroFuzz 'GET' Request with a 'UserID' parameter]]&lt;br /&gt;
&lt;br /&gt;
From the URL the important parameter is the value of the UserID query string (the value 23, above). We want to fuzz that.&lt;br /&gt;
&lt;br /&gt;
• Within the Fuzzing Tab, in the &amp;quot;Request&amp;quot; text area, highlight the above number 23&lt;br /&gt;
• Right-click and select &amp;quot;Add&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Add a Fuzzer&amp;quot; window that appears, select:&lt;br /&gt;
&lt;br /&gt;
• Category Name: &amp;lt;code&amp;gt;Base&amp;lt;/code&amp;gt;&lt;br /&gt;
• Fuzzer Name: &amp;lt;code&amp;gt;Base10 (DEC)&amp;lt;/code&amp;gt;&lt;br /&gt;
• Select &amp;quot;Add Fuzzer&amp;quot; in the bottom right&lt;br /&gt;
&lt;br /&gt;
This would have added a decimal (base 10 fuzzer) of length 2 onto the location.&lt;br /&gt;
&lt;br /&gt;
• You will see a row added within the &amp;quot;Added Fuzzers Table&amp;quot; of the Fuzzing panel.&lt;br /&gt;
• Click &amp;quot;Start&amp;quot; &amp;lt;code&amp;gt;Ctrl+Enter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will transmit 100 requests to the domain in question, which in this case is assumed: www.myattackingdomain.com. The value being changed within each request will be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
• GET /portal-location/UserInfo.aspx?UserID=00 HTTP/1.0&lt;br /&gt;
• GET /portal-location/UserInfo.aspx?UserID=01 HTTP/1.0&lt;br /&gt;
...&lt;br /&gt;
• GET /portal-location/UserInfo.aspx?UserID=98 HTTP/1.0&lt;br /&gt;
• GET /portal-location/UserInfo.aspx?UserID=99 HTTP/1.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Done. Let's proceed to graph the responses that we have obtained. Our objective is to understand which two-digit numbers from 00 to 99 correspond to valid user accounts. &lt;br /&gt;
&lt;br /&gt;
===Graphing Results===&lt;br /&gt;
• Within the &amp;quot;Graphing&amp;quot; tab, click &amp;quot;Start&amp;quot; &amp;lt;code&amp;gt;Ctrl+Enter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A list of directories will appear on the left-hand side. If you scroll to the bottom of the list you should see the directory corresponding to your fuzzing session, in our case it was (175 2009-06-24 16-18-24)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
• Right-click on (175 2009-06-24 16-18-24)&lt;br /&gt;
• Click &amp;quot;Graph&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will generate the graphs in their respective tabs. The question now becomes which graph is of interest for our user enumeration exercise.&lt;br /&gt;
&lt;br /&gt;
By definition enumerating users against an ID value, or any other identifier involves being able to obtain a different response for an existing user to that of a user that is not have a corresponding ID value. &lt;br /&gt;
&lt;br /&gt;
Thus, from the metrics available, the one useful for enumerating users will be that of measuring the &amp;quot;Hamming Distance&amp;quot; between responses received. Based on the JBroFuzz documentation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Fuzzing Hamming Distance &amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A bar chart with the hamming distance of the characters in the response, &lt;br /&gt;
relative to the first response received. Check each character of the first&lt;br /&gt;
response received, against the character at the same position of the&lt;br /&gt;
current response received. If they are not identical, increment the &lt;br /&gt;
hamming distance.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As we can see the Fuzzing Hamming Distance (FHD) varies quite a bit from the definition of the normal hamming distance term, used in telecommunications. Still, they share a lot of similarities.&lt;br /&gt;
&lt;br /&gt;
As we can from the above, the first request is critical to calibrating our user enumeration exercise. It represents the value that all other Fuzzing Hamming Distances (FHD) will be measured and normalised towards. For the java-skilled audience, the algorithm is quite trivial, but offers spectacular results in distinguishing responses:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
in = new BufferedReader(new FileReader(f));&lt;br /&gt;
   58 &lt;br /&gt;
   59 			int counter = 0;&lt;br /&gt;
   60 			int check = 0;&lt;br /&gt;
   61 			int c;&lt;br /&gt;
   62 			while (((c = in.read()) &amp;gt; 0) &amp;amp;&amp;amp; (counter &amp;lt; MAX_CHARS)) {&lt;br /&gt;
   63 &lt;br /&gt;
   64 				// If we are passed &amp;quot;--jbrofuzz--&amp;gt;\n&amp;quot; in the file&lt;br /&gt;
   65 				if (check == END_SIGNATURE.length()) {&lt;br /&gt;
   66 &lt;br /&gt;
   67 					firstSet.append((char) c);&lt;br /&gt;
   68 &lt;br /&gt;
   69 				}&lt;br /&gt;
   70 				// Else find &amp;quot;--jbrofuzz--&amp;gt;\n&amp;quot; using a counter&lt;br /&gt;
   71 				else {&lt;br /&gt;
   72 					// Increment the counter for each success&lt;br /&gt;
   73 					if (c == END_SIGNATURE.charAt(check)) {&lt;br /&gt;
   74 						check++;&lt;br /&gt;
   75 					} else {&lt;br /&gt;
   76 						check = 0;&lt;br /&gt;
   77 					}&lt;br /&gt;
   78 				}&lt;br /&gt;
   79 &lt;br /&gt;
   80 				counter++;&lt;br /&gt;
   81 &lt;br /&gt;
   82 			}&lt;br /&gt;
   83 			in.close();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergo, the corresponding graph is depicted in the screenshot below. The peak graphs correspond to number that if you hover the mouse over will give you the enumeration ID of a valid user.&lt;br /&gt;
&lt;br /&gt;
[[Image:015-JBroFuzz-Tutorial.png|500px|Measuring Hamming Distance for User Enumeration]]&lt;br /&gt;
&lt;br /&gt;
== JBroFuzz Development Corner ==&lt;br /&gt;
This section presents how to setup and use JBroFuzz as a fuzzing library. Also, it offers an insight in how to setup and compile your own version of JBroFuzz. As different people have different levels of expertise of the java programming language, eclipse, ant and subversion, some of the steps presented herein might be considered basic by advanced developers.&lt;br /&gt;
&lt;br /&gt;
===Setting up a JBroFuzz Development Environment===&lt;br /&gt;
&lt;br /&gt;
This section guides you towards setting up a development environment for JBroFuzz. Despite the Operating System (O/S) being windows XP, a similar process can be followed in a number of other O/S. &lt;br /&gt;
&lt;br /&gt;
You will need to have installed:&lt;br /&gt;
&lt;br /&gt;
* Tortoise SVN (using TortoiseSVN-1.6.6.17493-win32-svn-1.6.6.msi)&lt;br /&gt;
* Eclipse Java (using eclipse-java-galileo-SR1-win32.zip)&lt;br /&gt;
&lt;br /&gt;
Optionally, if you don't like building your application through eclipse you could also require to install Apache Ant.&lt;br /&gt;
&lt;br /&gt;
====Step 1: Obtain the source code====&lt;br /&gt;
&lt;br /&gt;
JBroFuzz uses SubVersion with the repository being publicly available for download through anonymous access on sourceforge. There is a plan to move it the source to the OWASP Git repository, but until then, use the guidelines below.&lt;br /&gt;
&lt;br /&gt;
[[Image:010-JBroFuzz-Tutorial.png|Tortoise SVN Check out JBroFuzz Source Code]]&lt;br /&gt;
&lt;br /&gt;
Right click on the folder location where you want to download the source code and select: &lt;br /&gt;
&lt;br /&gt;
* SVN Checkout&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;URL of repository&amp;quot;, enter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://jbrofuzz.svn.sourceforge.net/svnroot/jbrofuzz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Checkout directory&amp;quot;, enter the folder location of your choice, in this case:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\root\code\jbrofuzz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Checkout Depth&amp;quot; select:&lt;br /&gt;
&lt;br /&gt;
* Fully recursive&lt;br /&gt;
&lt;br /&gt;
Untick &amp;quot;Omit Externals&amp;quot; (should be unticked by default)&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Revision&amp;quot; select:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Head revision&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Select OK. &lt;br /&gt;
&lt;br /&gt;
This process, once complete will checkout the entirety of the JBroFuzz source code from the SVN repository on sourceforge.&lt;br /&gt;
&lt;br /&gt;
====Step 2: Configuring a JBroFuzz Project within Eclipse====&lt;br /&gt;
&lt;br /&gt;
Having obtained the latest copy of the source code, the next step entails importing that source code within the Eclipse IDE.&lt;br /&gt;
&lt;br /&gt;
Within Eclipse, select:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
File -&amp;gt; New -&amp;gt; Other&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From the &amp;quot;New&amp;quot; panel that appears, select:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Java -&amp;gt; Java Project from Existig Ant Buildfile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:011-JBroFuzz-Tutorial.png|Import JBroFuzz Code into Eclipse from Ant File]]&lt;br /&gt;
&lt;br /&gt;
Select &amp;quot;Next&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In the next menu, under &amp;quot;Ant buildfile&amp;quot;, select &amp;quot;Browse&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Browse to the location where you have just (step 1) downloaded the source code and select the following file:&lt;br /&gt;
&lt;br /&gt;
* build.xml&lt;br /&gt;
&lt;br /&gt;
The build.xml file is an Ant build file that JBroFuzz uses. &lt;br /&gt;
&lt;br /&gt;
[[Image:012-JBroFuzz-Tutorial.png|Select the Ant File]]&lt;br /&gt;
&lt;br /&gt;
Selecting that file should have populated the &amp;quot;Project name&amp;quot; as jbrofuzz and also given you:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;javac&amp;quot; task found in target &amp;quot;compile&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MAKE SURE TO TICK:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Link to the buildfile in the filesystem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise eclipse will try to replicate the source code within your workspace and that makes the process a tiny bit more complicated when it comes to actually building JBroFuzz.&lt;br /&gt;
&lt;br /&gt;
Click &amp;quot;Finish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You will see the item &amp;quot;Building workspace (76%) on the bottom right hand side of Eclipse. Once that is complete, you should see the jbrofuzz project on the top left corner of the Package Explorer within Eclipse.&lt;br /&gt;
&lt;br /&gt;
====Step 3: Building JBroFuzz====&lt;br /&gt;
&lt;br /&gt;
Within the Package Explorer, expand the jbrofuzz project and double-click on the build.xml file.&lt;br /&gt;
&lt;br /&gt;
Right click on the &amp;quot;build [default]&amp;quot; task within the &amp;quot;Outline&amp;quot; window (typically seen on the right hand side) and select:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Run As -&amp;gt; 1. Ant Build [Alt+Shift+X, Q]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the build has been successful, a JBroFuzz.jar file within the the /jar folder would have been created. Following the path conventions above that should be in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\root\code\jbrofuzz\jar\JBroFuzz.jar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:013-JBroFuzz-Tutorial.png|Building JBroFuzz within Eclipse]]&lt;br /&gt;
&lt;br /&gt;
===How to Use JBroFuzz as a Fuzzing Library===&lt;br /&gt;
&lt;br /&gt;
Quite often what you need to do in terms of fuzzing, far exceeds the User Interface (UI) of JBroFuzz. For this reason, a set of core fuzzing APIs have been made available that can be used for more advanced fuzzing scenarios.&lt;br /&gt;
&lt;br /&gt;
The JBroFuzz.jar standalone archive (made available with every release) carries a core fuzzing library that holds a number of key classes. These are located under:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
org.owasp.jbrofuzz.core.*;&lt;br /&gt;
-Database.java&lt;br /&gt;
-Fuzzer.java&lt;br /&gt;
-FuzzerBigInteger.java&lt;br /&gt;
-NoSuchFuzzerException.java&lt;br /&gt;
-Prototype.java&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The class of importance is Fuzzer.java. If you are going to use recursive iterators of great length, there is also FuzzerBigInteger.java. The difference between the two is that Fuzzer.java uses the primitive java data type long (up to 16^16 values) while FuzzerBigInteger.java uses java BigInteger to perform the counting. Naturally, the class FuzzerBigInteger is slower and takes more memory than the Fuzzer class.&lt;br /&gt;
&lt;br /&gt;
Within JBroFuzz a Fuzzer is an instance of a java Iterator. This implies that values can be accessed by simply calling the &amp;lt;code&amp;gt;next()&amp;lt;/code&amp;gt; method once an object has been made available. Typically, a call to &amp;lt;code&amp;gt;hasNext()&amp;lt;/code&amp;gt; should also be performed prior to avoid an exception being thrown.&lt;br /&gt;
&lt;br /&gt;
A Fuzzer can be obtained from the factory method &amp;lt;code&amp;gt;createFuzzer(String, int);&amp;lt;/code&amp;gt; available for every instance of the fuzzing Database. Ergo:&lt;br /&gt;
&lt;br /&gt;
====A HelloFuzzer Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Database myDatabase = new Database();&lt;br /&gt;
&lt;br /&gt;
Fuzzer myFuzzer = myDatabase.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 5);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So how do I use the API? Here is a simple HelloFuzzer (file called HelloFuzzer.java) example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(Fuzzer f = fuzzDB.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 4); f.hasNext();) {&lt;br /&gt;
       // Get the next payload value...&lt;br /&gt;
       System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloFuzzer.java OWASP JBroFuzz Example 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To compile the above use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
javac -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar&amp;quot; HelloFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This assumes that you are currently inside the directory where HelloFuzzer.java resides and that the JBroFuzz.jar is located two directories within your current location i.e. in jbrofuzz/jar. In order to run the above compiled HelloFuzzer class issue:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
java -cp &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: The above 2 commands have been crafted in a win32 environment. The process for compiling and running HelloFuzzer.java above is the same in *nix machines. Simply replace the backslash &amp;quot;\&amp;quot; with &amp;quot;/&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Fuzzing Payload Definitions====&lt;br /&gt;
Within the JBroFuzz.jar file, there is a file called fuzzers.jbrf that carries all the fuzzer definitions that you see in the UI payloads tab of JBroFuzz. To view a latest copy of this file you can browse the SVN repository of JBroFuzz:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://jbrofuzz.svn.sourceforge.net/viewvc/jbrofuzz/tar/fuzzers.jbrf?view=log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A note here worth mentioning: Files ending in .jbrofuzz are session files saved by users while performing fuzzing operations. Files ending in .jbrf are JBroFuzz system files. Typical examples of .jbrf files are headers.jbrf, as well as fuzzers.jbrf. Both these use an internal proprietary format not to be confused with the .jbrofuzz file format.&lt;br /&gt;
&lt;br /&gt;
Fuzzers belong in categories (1 to many) and each fuzzer carries a set of payloads that define the alphabet of the fuzzer.&lt;br /&gt;
&lt;br /&gt;
Also, you have replacive and recursive fuzzers, zero fuzzers, etc. There are a number of different fuzzer categories. As an example of a fuzzer within the fuzzers.jbrf file, consider the hexadecimal fuzzer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fuzzer Name: Base16 (HEX)&lt;br /&gt;
Fuzzer Type: Recursive&lt;br /&gt;
Fuzzer Id:   031-B16-HEX&lt;br /&gt;
&lt;br /&gt;
Total Number of Payloads: 16&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Within the fuzzers.jbrf file this fuzzer is defined in plain-text format as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
R:031-B16-HEX:Base16 (HEX):16&lt;br /&gt;
&amp;gt; Number Systems | Base | Recursive Fuzzers&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
a&lt;br /&gt;
b&lt;br /&gt;
c&lt;br /&gt;
d&lt;br /&gt;
e&lt;br /&gt;
f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There is very little preventing you from defining your own fuzzers within this file, by following the file format specified above. You can use the UI to see if they have been loaded successfully. &lt;br /&gt;
&lt;br /&gt;
Further to recursive and replacive fuzzers you also have zero fuzzers (i.e. a zero fuzzer of 1000 will just transmit 1000 requests as they are, without adding any payloads) double fuzzers, cross product fuzzers, etc. &lt;br /&gt;
&lt;br /&gt;
Notice the factory method Database.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 4) yielding: &amp;quot;I want a 4 digit recursive fuzzer (why because NUM-HEX is recursive in its definition, starts with R: instead of P:) of HEX digits.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Thus the above scenario would iterate through all the digits from 0000 to ffff. I wouldn't recommend using the above scenario for such trivial fuzzing capabilities; simply presented as an example of the inner workings of JBroFuzz.jar&lt;br /&gt;
&lt;br /&gt;
====HelloFuzzer Refined====&lt;br /&gt;
A more detailed code breakdown of the above HelloFuzzer example can be found below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * JBroFuzz API Examples 01&lt;br /&gt;
 *&lt;br /&gt;
 * JBroFuzz - A stateless network protocol fuzzer for web applications.&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (C) 2007, 2008, 2009 subere@uncon.org&lt;br /&gt;
 *&lt;br /&gt;
 * This file is part of the JBroFuzz API examples on how to use the &lt;br /&gt;
 * fuzzer libraries included in JBroFuzz.jar.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is free software: you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 * &lt;br /&gt;
 * You should have received a copy of the GNU General Public License&lt;br /&gt;
 * along with JBroFuzz.  If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.&lt;br /&gt;
 * Alternatively, write to the Free Software Foundation, Inc., 51 &lt;br /&gt;
 * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.&lt;br /&gt;
 * &lt;br /&gt;
 * Verbatim copying and distribution of this entire program file is &lt;br /&gt;
 * permitted in any medium without royalty provided this notice &lt;br /&gt;
 * is preserved. &lt;br /&gt;
 * &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import org.owasp.jbrofuzz.core.NoSuchFuzzerException;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Database;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Fuzzer; &lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &amp;lt;p&amp;gt;In JBroFuzz a Fuzzer is a java Iterator.&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;p&amp;gt;In order to create a Fuzzer, use the factory method&lt;br /&gt;
 * Database.createFuzzer(String, int), passing as arguments&lt;br /&gt;
 * the Fuzzer ID and the specified length as a positive int.&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;p&amp;gt;Be careful to check that the fuzzer ID (labelled as f_ID)&lt;br /&gt;
 * is actually an existing ID from the Database of Fuzzers.&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;p&amp;gt;Expected Output:&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &amp;lt;code&amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: 00000&amp;lt;br&amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: 00001&amp;lt;br&amp;gt;&lt;br /&gt;
 *  ...&amp;lt;br&amp;gt;&lt;br /&gt;
 *  (a total of 16^5 = 1048576 lines)&amp;lt;br&amp;gt;&lt;br /&gt;
 *  ...&amp;lt;br&amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: ffffd&amp;lt;br&amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: ffffe&amp;lt;br&amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: fffff&amp;lt;br&amp;gt;&lt;br /&gt;
 * &amp;lt;/code&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;p&amp;gt;For more information on the Database of Fuzzers, see the&lt;br /&gt;
 * HelloDatabase Class.&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * @author subere@uncon.org&lt;br /&gt;
 * @version n/a&lt;br /&gt;
 */&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param args&lt;br /&gt;
	 */&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
		// You have to construct an instance of the fuzzers database&lt;br /&gt;
		Database fuzzDB = new Database();&lt;br /&gt;
		// You have to supply a valid fuzzer ID&lt;br /&gt;
		String f_ID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
		// You have to supply a (+)tive int&lt;br /&gt;
		int f_len = 5;&lt;br /&gt;
		&lt;br /&gt;
		try {&lt;br /&gt;
			&lt;br /&gt;
			for(Fuzzer f = fuzzDB.createFuzzer(f_ID, f_len); f.hasNext();) {&lt;br /&gt;
				&lt;br /&gt;
				// Get the next payload value...&lt;br /&gt;
				System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		} catch (NoSuchFuzzerException e) {&lt;br /&gt;
			&lt;br /&gt;
			System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Hello Database of Fuzzers====&lt;br /&gt;
Having seen how to access a single Fuzzer through the createFuzzer() method available in the Database object. The next question that comes naturally is what are the Fuzzers that are available by default in JBroFuzz?&lt;br /&gt;
&lt;br /&gt;
To answer that, this example focuses more on the database component that we previously initialised, investigating the list of available methods that it offers. &lt;br /&gt;
&lt;br /&gt;
In JBroFuzz, all Fuzzers are stored in a Database object that you will be required to construct in order to access them.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * JBroFuzz API Examples 02&lt;br /&gt;
 *&lt;br /&gt;
 * JBroFuzz - A stateless network protocol fuzzer for web applications.&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (C) 2007, 2008, 2009 subere@uncon.org&lt;br /&gt;
 *&lt;br /&gt;
 * This file is part of the JBroFuzz API examples on how to use the &lt;br /&gt;
 * fuzzer libraries included in JBroFuzz.jar.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is free software: you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 * &lt;br /&gt;
 * You should have received a copy of the GNU General Public License&lt;br /&gt;
 * along with JBroFuzz.  If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.&lt;br /&gt;
 * Alternatively, write to the Free Software Foundation, Inc., 51 &lt;br /&gt;
 * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.&lt;br /&gt;
 * &lt;br /&gt;
 * Verbatim copying and distribution of this entire program file is &lt;br /&gt;
 * permitted in any medium without royalty provided this notice &lt;br /&gt;
 * is preserved. &lt;br /&gt;
 * &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import org.owasp.jbrofuzz.core.NoSuchFuzzerException;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Database;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Fuzzer; &lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &amp;lt;p&amp;gt;In JBroFuzz all Fuzzers are stored in a Database&lt;br /&gt;
 * object that you will be required to construct in order&lt;br /&gt;
 * to access them.&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;p&amp;gt;Within the Database, each Fuzzer is a collection of &lt;br /&gt;
 * payloads, which carries a unique ID string value.&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;p&amp;gt;Example ID values are the output of this program:&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &amp;lt;code&amp;gt;&lt;br /&gt;
 *  The fuzzer ID is: 013-LDP-INJ&amp;lt;br&amp;gt;&lt;br /&gt;
 *	The name of the fuzzer is:			LDAP Injection&amp;lt;br&amp;gt;&lt;br /&gt;
 *	The id of the fuzzer is:			013-LDP-INJ&amp;lt;br&amp;gt;&lt;br /&gt;
 *	The of payloads it carries (it's alphabet) is:	20&amp;lt;br&amp;gt;&lt;br /&gt;
 *	It has as 1st payload:&amp;lt;br&amp;gt;&lt;br /&gt;
 *		|&amp;lt;br&amp;gt;&lt;br /&gt;
 *  The fuzzer ID is: 018-XSS-4IE&amp;lt;br&amp;gt;&lt;br /&gt;
 *	The name of the fuzzer is:			XSS IE&amp;lt;br&amp;gt;&lt;br /&gt;
 *	The id of the fuzzer is:			018-XSS-4IE&amp;lt;br&amp;gt;&lt;br /&gt;
 *	The of payloads it carries (it's alphabet) is:	38&amp;lt;br&amp;gt;&lt;br /&gt;
 *	It has as 1st payload:&amp;lt;br&amp;gt;&lt;br /&gt;
 *		&amp;lt; img src=`x` onrerror= ` ;; alert(1) ` /&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * &amp;lt;/code&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;p&amp;gt;Do not be confused between Prototypes and Fuzzers; &lt;br /&gt;
 * JBroFuzz uses Prototype objects to construct the Fuzzers&lt;br /&gt;
 * that get added into the Database upon initialisation.&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;p&amp;gt;As a result, the getter methods available within a Database&lt;br /&gt;
 * object can carry the name of getAllPrototypeIDs and &lt;br /&gt;
 * getAllFuzzerIDs interchangebly.&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * @author subere@uncon.org&lt;br /&gt;
 * @version n/a&lt;br /&gt;
 */&lt;br /&gt;
public class HelloDatabase {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param args&lt;br /&gt;
	 */&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
		// You have to construct an instance of the fuzzers database&lt;br /&gt;
		Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
		// Get a list of all the fuzzer IDs from the database&lt;br /&gt;
		String[] fuzzer_IDs = fuzzDB.getAllPrototypeIDs();&lt;br /&gt;
		&lt;br /&gt;
		System.out.println(&amp;quot;The fuzzer IDs found are:&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		for(String fuzzerID : fuzzer_IDs) {&lt;br /&gt;
			&lt;br /&gt;
			System.out.println(&amp;quot;The fuzzer ID is: &amp;quot; + fuzzerID);&lt;br /&gt;
			&lt;br /&gt;
			// We pass of length of 1, irrelevant if we are&lt;br /&gt;
			// just going to access the first payload&lt;br /&gt;
			// of the fuzzer&lt;br /&gt;
			Fuzzer fuzzer;&lt;br /&gt;
			try {&lt;br /&gt;
				&lt;br /&gt;
				fuzzer = fuzzDB.createFuzzer(fuzzerID, 1);&lt;br /&gt;
				// Normally you should check for fuzzer.hasNext()				&lt;br /&gt;
				String payload = fuzzer.next();&lt;br /&gt;
				&lt;br /&gt;
				System.out.println(&amp;quot;\tThe name of the fuzzer is:\t\t\t&amp;quot; + fuzzer.getName() );&lt;br /&gt;
				System.out.println(&amp;quot;\tThe id of the fuzzer is:\t\t\t&amp;quot; + fuzzer.getId() );&lt;br /&gt;
				System.out.println(&amp;quot;\tThe of payloads it carries (it's alphabet) is:\t&amp;quot; + fuzzDB.getSize(fuzzerID));&lt;br /&gt;
				System.out.println(&amp;quot;\tIt has as 1st payload:\n\t\t&amp;quot; + payload );&lt;br /&gt;
&lt;br /&gt;
			} catch (NoSuchFuzzerException e) {&lt;br /&gt;
				System.out.println(&amp;quot;Could not find the specified fuzzer!&amp;quot;);&lt;br /&gt;
				System.out.println(&amp;quot;Going to print all the fuzzer IDs I know:&amp;quot;);&lt;br /&gt;
				// old vs new for loop :)&lt;br /&gt;
				// in case of an error, print just the &lt;br /&gt;
				// fuzzer IDs, accessed from the DB&lt;br /&gt;
				for(int j = 0; j &amp;lt; fuzzer_IDs.length; j++) {&lt;br /&gt;
					System.out.println(&amp;quot;The fuzzer ID is: &amp;quot; + fuzzer_IDs[j]);&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Methods available within the Fuzzer Class====&lt;br /&gt;
A final example of this section, involves seeing the usage of all the method calls available in the Fuzzer.java class&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * JBroFuzz API Examples 03&lt;br /&gt;
 *&lt;br /&gt;
 * JBroFuzz - A stateless network protocol fuzzer for web applications.&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (C) 2007, 2008, 2009 subere@uncon.org&lt;br /&gt;
 *&lt;br /&gt;
 * This file is part of the JBroFuzz API examples on how to use the &lt;br /&gt;
 * fuzzer libraries included in JBroFuzz.jar.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is free software: you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 * &lt;br /&gt;
 * You should have received a copy of the GNU General Public License&lt;br /&gt;
 * along with JBroFuzz.  If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.&lt;br /&gt;
 * Alternatively, write to the Free Software Foundation, Inc., 51 &lt;br /&gt;
 * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.&lt;br /&gt;
 * &lt;br /&gt;
 * Verbatim copying and distribution of this entire program file is &lt;br /&gt;
 * permitted in any medium without royalty provided this notice &lt;br /&gt;
 * is preserved. &lt;br /&gt;
 * &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import org.owasp.jbrofuzz.core.NoSuchFuzzerException;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Database;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Fuzzer; &lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &amp;lt;p&amp;gt;Example iterating through all the methods available&lt;br /&gt;
 * in the Fuzzer Object and their respective outputs.&amp;lt;/p&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * @author subere@uncon.org&lt;br /&gt;
 * @version n/a&lt;br /&gt;
 */&lt;br /&gt;
public class IndigoFuzzerTests {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param args&lt;br /&gt;
	 */&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
		// You have to construct an instance of the fuzzers database&lt;br /&gt;
		Database fuzzDB = new Database();&lt;br /&gt;
		// You have to supply a valid fuzzer ID&lt;br /&gt;
		String f_ID = &amp;quot;033-B08-OCT&amp;quot;;&lt;br /&gt;
		// You have to supply a (+)tive int&lt;br /&gt;
		int f_len = 5;&lt;br /&gt;
&lt;br /&gt;
		try {&lt;br /&gt;
			&lt;br /&gt;
			Fuzzer f = fuzzDB.createFuzzer(f_ID, f_len);&lt;br /&gt;
&lt;br /&gt;
			while(f.hasNext()) {&lt;br /&gt;
				&lt;br /&gt;
				// Could do this via reflection, but..&lt;br /&gt;
				f.next();&lt;br /&gt;
				// System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
				System.out.println(&amp;quot; The maximum value is: &amp;quot; + f.getMaximumValue());&lt;br /&gt;
&lt;br /&gt;
				System.out.println(&amp;quot; The current value is: &amp;quot; + f.getCurrectValue());&lt;br /&gt;
				&lt;br /&gt;
&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		} catch (NoSuchFuzzerException e) {&lt;br /&gt;
			&lt;br /&gt;
			System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Advanced Fuzzing with the JBroFuzz Library===&lt;br /&gt;
&lt;br /&gt;
This section covers more advanced APIs that are available under the &amp;lt;b&amp;gt;org.owasp.jbrofuzz.core package&amp;lt;/b&amp;gt;. It should be noted that some of these classes and their corresponding functionality are not used by the JBroFuzz program application. Instead, they are made available for incorporation into other java code that you have perhaps written that requires more specialized type of fuzzing.&lt;br /&gt;
&lt;br /&gt;
====Fuzzing Really Long Values with Big Integer====&lt;br /&gt;
&lt;br /&gt;
As stated previously, within JBroFuzz a Fuzzer is a java Iterator. This implies that while fuzzing, we typically keep track of a counter representing the value that we are currently on. Consider the example of HelloFuzzer.java, above:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(Fuzzer f = fuzzDB.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 4); f.hasNext();) {&lt;br /&gt;
       // Get the next payload value...&lt;br /&gt;
       System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloFuzzer.java OWASP JBroFuzz Example 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If we compile this program:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
javac -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar&amp;quot; HelloFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and run it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
java -cp &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We are going to see output similar to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 The fuzzer payload is: 0000&lt;br /&gt;
 ... (output omitted)&lt;br /&gt;
 The fuzzer payload is: fffd&lt;br /&gt;
 The fuzzer payload is: fffe&lt;br /&gt;
 The fuzzer payload is: ffff&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now what if we want a hexadecimal fuzzer of length not 4, but, say, 24. Let's try compile and run the above program with a length of 24. Changing the line to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     for(Fuzzer f = fuzzDB.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 24); f.hasNext();) {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Running this modified version of HelloFuzzer.java, yields:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;javac -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer.java&lt;br /&gt;
&lt;br /&gt;
&amp;gt;java -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nothing! What is actually happening is JBroFuzz is figuring out that the specified length of the Fuzzer we are about to create is far greater than that of the long java data type. As a result, the Fuzzer is not even entering the iteration mode that is typically expected with methods next() and hasNext().&lt;br /&gt;
&lt;br /&gt;
That's all great, but we still want a hexadecimal fuzzer, 24 digits long going from:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
000000000000000000000000&lt;br /&gt;
...to...&lt;br /&gt;
ffffffffffffffffffffffff&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this JBroFuzz offers another type of Fuzzer class, that of FuzzerBigInteger. Let's modify the critical line within the original HelloFuzzer.java program that we had:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     for(FuzzerBigInteger f = fuzzDB.createFuzzerBigInteger(&amp;quot;031-B16-HEX&amp;quot;, 24); f.hasNext();) {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the entire program becoming:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(FuzzerBigInteger f = fuzzDB.createFuzzerBigInteger(&amp;quot;031-B16-HEX&amp;quot;, 24); f.hasNext();) {&lt;br /&gt;
       // Get the next payload value...&lt;br /&gt;
       System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloFuzzer.java OWASP JBroFuzz Example 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compiling and running this program yields:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 The fuzzer payload is: 000000000000000000000000&lt;br /&gt;
 The fuzzer payload is: 000000000000000000000001&lt;br /&gt;
 ... (output omitted)&lt;br /&gt;
 The fuzzer payload is: 00000000000000000001a982&lt;br /&gt;
 ... (output omitted)&lt;br /&gt;
 The fuzzer payload is: 00000000000000000001a982&lt;br /&gt;
 The fuzzer payload is: ffffffffffffffffffffffff&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are limitations to this class, as governed by the BigInteger class itself. Further information can be found at:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigInteger.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Still, on a virtual windows xp machine with 256Mb of RAM the above code had no problem running to completion. It took some time though.. Characteristics of the windows machine while this iteration was ongoing: The CPU was being utilised at 100% and memory usage was constant at 212 Mb. Overall, a clean sheet for FuzzerBigInteger.java.&lt;br /&gt;
&lt;br /&gt;
====Using the Power Fuzzer API====&lt;br /&gt;
&lt;br /&gt;
With web applications, it is often that you find yourself re-using part of, or the entirety of a fuzzing payload in more than one location, as part of the GET, POST, or any other type of request you submit.&lt;br /&gt;
&lt;br /&gt;
For this reason, JBroFuzz offers the PowerFuzzer class: A type of iterator for which you can specify how many copies of the payload you require in each request. &lt;br /&gt;
&lt;br /&gt;
Let's consider the following trivial scenario. You are in need of all hexadecimal values, which are 4-digits long (i.e. 0000 to FFFF) and you are in need of these 5 times for each request. &lt;br /&gt;
&lt;br /&gt;
This scenario is trivial, because typically you can assign the fuzzing payload (i.e. the value you get back from Fuzzer.next() ) to a String variable and re-use it as many times as you see fit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzerID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 int length = 4;&lt;br /&gt;
 ....&lt;br /&gt;
     for(Fuzzer f = fuzzDB.createFuzzer(fuzzerID, length); f.hasNext();) {&lt;br /&gt;
          String payload = f.next();&lt;br /&gt;
          ....&lt;br /&gt;
     }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using the PowerFuzzer.class, the following HelloPowerFuzzer.java program can be created:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloPowerFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzerID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 int length = 4;&lt;br /&gt;
 int power = 5;&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(PowerFuzzer f = fuzzDB.createPowerFuzzer(fuzzerID, length, power); f.hasNext();) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] identicalElements = f.nextPower();&lt;br /&gt;
&lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem : identicalElements) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloPowerFuzzer.java OWASP JBroFuzz Power Fuzzer Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This program would output the following; no rocket science here:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
....&lt;br /&gt;
 I have 5 elements: 4817 4817 4817 4817 4817&lt;br /&gt;
 I have 5 elements: 4818 4818 4818 4818 4818&lt;br /&gt;
 I have 5 elements: 4819 4819 4819 4819 4819&lt;br /&gt;
 I have 5 elements: 481a 481a 481a 481a 481a&lt;br /&gt;
 I have 5 elements: 481b 481b 481b 481b 481b&lt;br /&gt;
 I have 5 elements: 481c 481c 481c 481c 481c&lt;br /&gt;
 I have 5 elements: 481d 481d 481d 481d 481d&lt;br /&gt;
 I have 5 elements: 481e 481e 481e 481e 481e&lt;br /&gt;
 I have 5 elements: 481f 481f 481f 481f 481f&lt;br /&gt;
 I have 5 elements: 4820 4820 4820 4820 4820&lt;br /&gt;
 I have 5 elements: 4821 4821 4821 4821 4821&lt;br /&gt;
 I have 5 elements: 4822 4822 4822 4822 4822&lt;br /&gt;
 I have 5 elements: 4823 4823 4823 4823 4823&lt;br /&gt;
 I have 5 elements: 4824 4824 4824 4824 4824&lt;br /&gt;
 I have 5 elements: 4825 4825 4825 4825 4825&lt;br /&gt;
 I have 5 elements: 4826 4826 4826 4826 4826&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now imagine you need to change the number of elements you obtain back every time. For every second request, you need to obtain back two identical payloads, for every third request, you need to obtain back three payloads and for every fourth request, you need to obtain back four payloads. &lt;br /&gt;
&lt;br /&gt;
The PowerFuzzer class, with the corresponding method &amp;lt;b&amp;gt;setPower(int)&amp;lt;/b&amp;gt; allows you to set how many identical elements you obtain back, without having to worry about the length argument. Below is a class that solves the above scenario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloPowerFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzerID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 int length = 4;&lt;br /&gt;
 int power = 5;&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(PowerFuzzer f = fuzzDB.createPowerFuzzer(fuzzerID, length, power); f.hasNext();) {&lt;br /&gt;
	 &lt;br /&gt;
	   int currentValue = (int) f.getCurrentValue(); &lt;br /&gt;
	   currentValue %= 4;&lt;br /&gt;
	   switch (currentValue) {&lt;br /&gt;
			case 0: f.setPower(1); break;&lt;br /&gt;
			case 1: f.setPower(2); break;&lt;br /&gt;
			case 2: f.setPower(3); break;&lt;br /&gt;
			default: f.setPower(4); break;&lt;br /&gt;
	   }&lt;br /&gt;
	   &lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] identicalElements = f.nextPower();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem : identicalElements) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloPowerFuzzer.java&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This class has as output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ....&lt;br /&gt;
 I have 1 elements: 22a8&lt;br /&gt;
 I have 2 elements: 22a9 22a9&lt;br /&gt;
 I have 3 elements: 22aa 22aa 22aa&lt;br /&gt;
 I have 4 elements: 22ab 22ab 22ab 22ab&lt;br /&gt;
 I have 1 elements: 22ac&lt;br /&gt;
 I have 2 elements: 22ad 22ad&lt;br /&gt;
 I have 3 elements: 22ae 22ae 22ae&lt;br /&gt;
 I have 4 elements: 22af 22af 22af 22af&lt;br /&gt;
 I have 1 elements: 22b0&lt;br /&gt;
 I have 2 elements: 22b1 22b1&lt;br /&gt;
 I have 3 elements: 22b2 22b2 22b2&lt;br /&gt;
 I have 4 elements: 22b3 22b3 22b3 22b3&lt;br /&gt;
 I have 1 elements: 22b4&lt;br /&gt;
 I have 2 elements: 22b5 22b5&lt;br /&gt;
 I have 3 elements: 22b6 22b6 22b6&lt;br /&gt;
 I have 4 elements: 22b7 22b7 22b7 22b7&lt;br /&gt;
 I have 1 elements: 22b8&lt;br /&gt;
 I have 2 elements: 22b9 22b9&lt;br /&gt;
 ....&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Naturally, the algorithm of the number of elements required can vary based on any number of parameters. The PowerFuzzer class gives you a quick way to control the number of identical payloads you obtain back, without having to worry about creating a data type to store them in.&lt;br /&gt;
&lt;br /&gt;
====Using the Double Fuzzer API====&lt;br /&gt;
&lt;br /&gt;
In some cases of fuzzing web applications, a requirement to fuzz two (or more) locations part of the request being submitted to the web server becomes apparent. &lt;br /&gt;
&lt;br /&gt;
The DoubleFuzzer class allows you to create a fuzzer based on two prototype definitions. Similarly to instantiating a Fuzzer through a prototype and a given length, with a DoubleFuzzer, we pass two prototype definitions and two lengths. The corresponding method call available within the &amp;lt;b&amp;gt;Database&amp;lt;/b&amp;gt; class of org.owasp.jbrofuzz.core is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public DoubleFuzzer createDoubleFuzzer(String id1, int length1,  &lt;br /&gt;
								String id2, int length2) throws NoSuchFuzzerException {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Let's cross-breed some fuzzers, see what results we get back during an iteration.&lt;br /&gt;
&lt;br /&gt;
The first example below, uses two hexadecimal fuzzers of different lengths, as specified by the variables:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
String fuzzID1 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
String fuzzID2 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
int length1 = 4;&lt;br /&gt;
int length2 = 2;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As the double fuzzer iteration is taking place, the second fuzzer, defined by the fuzzID2 &amp;amp; length2 loops, starting from 00 and going all the way up to FF. An example output is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 I have 2 elements: fefb fb&lt;br /&gt;
 I have 2 elements: fefc fc&lt;br /&gt;
 I have 2 elements: fefd fd&lt;br /&gt;
 I have 2 elements: fefe fe&lt;br /&gt;
 I have 2 elements: feff ff&lt;br /&gt;
 I have 2 elements: ff00 00&lt;br /&gt;
 I have 2 elements: ff01 01&lt;br /&gt;
 I have 2 elements: ff02 02&lt;br /&gt;
 I have 2 elements: ff03 03&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The complete code listing of HelloDoubleFuzzer.java is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloDoubleFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzID1 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 String fuzzID2 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 int length1 = 4;&lt;br /&gt;
 int length2 = 2;&lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
     DoubleFuzzer f = fuzzDB.createDoubleFuzzer(fuzzID1, length1, fuzzID2, length2);&lt;br /&gt;
	 &lt;br /&gt;
     while( f.hasNext() ) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] payloads = f.next();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem : payloads) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloDoubleFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's simple enough; now let's cross-breed something a bit more exotic: Imagine a 3-digit octal ID value [000 - 777] being submitted inline with, say, a parameter that we want to test for Cross-Site Scripting (XSS). Let's adjust the program above with the corresponding fuzzer IDs of these fuzzers. Remember all the IDs of all the fuzzers can be found in the fuzzers.jbrf file within JBroFuzz.jar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloDoubleFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzID1 = &amp;quot;033-B08-OCT&amp;quot;;&lt;br /&gt;
 String fuzzID2 = &amp;quot;019-XSS-GEK&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 int length1 = 3;&lt;br /&gt;
 int length2 = 1;&lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
     DoubleFuzzer f = fuzzDB.createDoubleFuzzer(fuzzID1, length1, fuzzID2, length2);&lt;br /&gt;
	 &lt;br /&gt;
     while( f.hasNext() ) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] payloads = f.next();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem : payloads) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloDoubleFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output from this program is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 I have 2 elements: 000 (1?(1?{a:1?&amp;quot;&amp;quot;[1?&amp;quot;ev\a\l&amp;quot;:0](1?&amp;quot;\a\lert&amp;quot;:0):0}:0).a:0)[1?&amp;quot;\c\a\l\l&amp;quot;:0](content,1?&amp;quot;x\s\s&amp;quot;:0)&lt;br /&gt;
 I have 2 elements: 001 &amp;lt;STYLE TYPE=&amp;quot;text/javascript&amp;quot;&amp;gt;alert('XSS');&amp;lt;/STYLE&amp;gt;&lt;br /&gt;
 I have 2 elements: 002 &amp;lt;SCRIPT SRC=http://ha.ckers.org/xss.js&lt;br /&gt;
 I have 2 elements: 003 &amp;lt;A HREF=&amp;quot;http://google:ha.ckers.org&amp;quot;&amp;gt;XSS&amp;lt;/A&amp;gt;&lt;br /&gt;
 I have 2 elements: 004 &amp;lt;A HREF=&amp;quot;http://ha.ckers.org@google&amp;quot;&amp;gt;XSS&amp;lt;/A&amp;gt;&lt;br /&gt;
 I have 2 elements: 005 &amp;lt;A HREF=&amp;quot;//google&amp;quot;&amp;gt;XSS&amp;lt;/A&amp;gt;&lt;br /&gt;
 ....&lt;br /&gt;
 ...&lt;br /&gt;
 ..&lt;br /&gt;
 .&lt;br /&gt;
 ..&lt;br /&gt;
 ...&lt;br /&gt;
 ....&lt;br /&gt;
 I have 2 elements: 774 &amp;lt;SCRIPT SRC=http://ha.ckers.org/xss.js&lt;br /&gt;
 I have 2 elements: 775 &amp;lt;A HREF=&amp;quot;http://google:ha.ckers.org&amp;quot;&amp;gt;XSS&amp;lt;/A&amp;gt;&lt;br /&gt;
 I have 2 elements: 776 &amp;lt;A HREF=&amp;quot;http://ha.ckers.org@google&amp;quot;&amp;gt;XSS&amp;lt;/A&amp;gt;&lt;br /&gt;
 I have 2 elements: 777 &amp;lt;A HREF=&amp;quot;//google&amp;quot;&amp;gt;XSS&amp;lt;/A&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the list stopping iterating at the last element of the greatest of the two fuzzers.&lt;br /&gt;
&lt;br /&gt;
===Using the Cross Product Fuzzer API===&lt;br /&gt;
&lt;br /&gt;
A final case of a special Double Fuzzer is the the Cross Product Fuzzer of the payloads of two fuzzers. This type of fuzzing is virtually encountered in username/password login form on the Internet. Let's work on this by example.&lt;br /&gt;
&lt;br /&gt;
Consider your home network router. You recall changing the default password to one of the typical password values that you use. Also, you are not 100% certain about the username for the router either, it is one of the typical admin, user, administrator, root, yoda type values, but you cannot recall which one. Needless to say, you don't know what the username, or password actually is. &lt;br /&gt;
&lt;br /&gt;
So in a mini brute-forcing attack scenario, you have the following list of usernames, out of which one is valid:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin&lt;br /&gt;
administrator&lt;br /&gt;
Administrator&lt;br /&gt;
root&lt;br /&gt;
adminUser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also you know that the password is one of the following (Top 10 Threadwatch 2007 passwords):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
password&lt;br /&gt;
123456&lt;br /&gt;
qwerty&lt;br /&gt;
abc123&lt;br /&gt;
letmein&lt;br /&gt;
monkey&lt;br /&gt;
myspace1&lt;br /&gt;
password1&lt;br /&gt;
blink182&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The set that contains every possible combination of the two sets is the Cross Product of the list of usernames, times the list of passwords. So manually, (as most people do while locking themselves out) you would try, popular combinations of the above, starting with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
admin password&lt;br /&gt;
admin 123456&lt;br /&gt;
admin qwerty&lt;br /&gt;
....&lt;br /&gt;
admin blink182&lt;br /&gt;
administrator password&lt;br /&gt;
administrator 123456&lt;br /&gt;
administrator qwerty&lt;br /&gt;
....&lt;br /&gt;
adminUser password1&lt;br /&gt;
adminUser blink182&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus the total number of attempts would be (number of usernames) x (number of passwords). No rocket science here.&lt;br /&gt;
&lt;br /&gt;
JBroFuzz introduces the CrossProductFuzzer class capable of iterating through the cross product of two fuzzers. Let's put it into code; the following program provides a list of all 2-digit octal numbers with every 2-digit binary number. A total of (8 x 8) x (2 x 2) = 256 values.&lt;br /&gt;
&lt;br /&gt;
==Graphing with JBroFuzz==&lt;br /&gt;
&lt;br /&gt;
Once a fuzzing session has completed, JBroFuzz offers the ability to generate a number of graphs, using various metrics. This section investigates how to further the graphing functionality available with the application.&lt;br /&gt;
&lt;br /&gt;
===Customizing the logo on each Graph===&lt;br /&gt;
&lt;br /&gt;
As of version 2.0, all image icons within JBroFuzz are located within the /icons directory of the application. The particular transparent image file displayed on top right part of the graphs is named: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/icons/owasp-med.png&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This file is a 64 x 64 PNG image file. You can replace it with your own file, as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;ls -l JBroFuzz.jar&lt;br /&gt;
-rw-rw-rw-   1 user     group     4033612 Feb 15 12:33 JBroFuzz.jar&lt;br /&gt;
&lt;br /&gt;
&amp;gt;unzip -oq JBroFuzz.jar&lt;br /&gt;
&amp;gt;cd icons&lt;br /&gt;
&amp;gt;mv owasp-med.png file64x64-file.png&lt;br /&gt;
&amp;gt;cd ..&lt;br /&gt;
&amp;gt;zip -r JBroFuzz.zip *&lt;br /&gt;
&amp;gt;mv JBroFuzz.zip JBroFuzz.jar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This enables you to have your own (company logo) on JBroFuzz graphs. Further to this, a number of other customization options are available, by right clicking on each of the graph generated.&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_JBroFuzz_Tutorial&amp;diff=78553</id>
		<title>OWASP JBroFuzz Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_JBroFuzz_Tutorial&amp;diff=78553"/>
				<updated>2010-02-18T14:28:11Z</updated>
		
		<summary type="html">&lt;p&gt;Yiannis: /* Advanced Fuzzing with the JBroFuzz Library */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:OWASP JBroFuzz]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
''“If you can’t fuzz with JBroFuzz, you probably do not want to fuzz!”'' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;Old JBroFuzz Motto &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The art of teaching, Mark Van Doren said, is the art of assisting discovery. Fuzzing is a representative discipline towards assisting the discovery of security vulnerabilities, that is just beginning to come of age. Over the last two years, through continuous development, JBroFuzz has attempted to expose the intrinsic beauty of the subject: Constantly submit a vast amount of payloads to a service, device or prompt, waiting for the one response that makes all the difference. This is the mentality that JBroFuzz embraces and attempts to offer back to security professionals. &lt;br /&gt;
&lt;br /&gt;
Fuzzing as a concept goes beyond a conventional work flow or a standard methodology. I would argue that to know how to fuzz well, is to master a new language. Thus, similar to the process of learning a programming (or foreign) language, there are three things you must master: &lt;br /&gt;
&lt;br /&gt;
• Grammar: How fuzzing as a process is structured&amp;lt;br&amp;gt;&lt;br /&gt;
• Vocabulary: How to name fuzzing concepts you want to use&amp;lt;br&amp;gt;&lt;br /&gt;
• Usage: Ways of achieving everyday effective results with fuzzing&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:001-JBroFuzz-Tutorial.jpg|300px|right|JBroFuzz Splash Screen]]From the pre-existing information available for JBroFuzz, this tutorial focuses on usage: How to best put a fuzzing tool to good use, either via the UI, or using APIs that ''JBroFuzz.jar'' is constituted of. As a result, this document has a small requirement as a caveat; you need to have a beginner level understanding of the Java programming language in order to understand some sections. &lt;br /&gt;
&lt;br /&gt;
There are a number of working examples described here within, which '''grep''' for statements such as “''&amp;lt;nowiki&amp;gt;public static void main(String[] args)&amp;lt;/nowiki&amp;gt;''”. The majority of the content relates to reviewing these examples and putting the Java syntax into a fuzzing perspective. &lt;br /&gt;
&lt;br /&gt;
To summarise, this tutorial focuses on customary and effective usage of fuzzing through the JBroFuzz Java APIs and the respective UI. It is targeting (without attacking them) web applications. Without further redo, let’s get fuzzing! &lt;br /&gt;
&lt;br /&gt;
== JBroFuzz Basic Functionality ==&lt;br /&gt;
This section carries a number of basic fuzzing examples to get you started with JBroFuzz. Overall, even though the actions performed to not produce any amazing fuzzing results, it serves as a starting point in understanding how to perform particular fuzzing operations on web applications.&lt;br /&gt;
&lt;br /&gt;
=== 'Hello Google!' (forget 'Hello World') ===&lt;br /&gt;
As the traditional first program that you learn when indulging in a new programming language, 'Hello World!' represents the norm for understanding the basic output operations and syntax (let alone compiler and execution behaviour) of the language in question. &lt;br /&gt;
&lt;br /&gt;
As with most web application security related tools, when I am given the responsibility to run them, often in order to understand how they work, I would first craft a legitimate, single request to a trusted (to be up and behaving) popular Internet location. Needless, to say this request more than on occasion finds itself on Google servers. &lt;br /&gt;
&lt;br /&gt;
So 'Hello World!' for programming languages seems to transform to 'Hello Google!' for understanding how web application security related tools work. Let us see, how JBroFuzz does it. &lt;br /&gt;
&lt;br /&gt;
• Double-click on JBroFuzz and browse to the 'Fuzzing' tab&lt;br /&gt;
&lt;br /&gt;
JBroFuzz is constituted of tabs, typically located in the bottom or top (if you bother to change the settings) of the main window. &lt;br /&gt;
&lt;br /&gt;
The 'Fuzzing' tab is where you craft your request message to a particular host. Once that is in place, you can select any part of the request and proceed into adding any number of payloads. We shall see how in later sections.&lt;br /&gt;
&lt;br /&gt;
• In the 'URL' field type: http://www.google.com/ http://www.google.com&lt;br /&gt;
&lt;br /&gt;
Unlike conventional URLs, the URL field in JBroFuzz is only used for the underlying protocol (HTTP or HTTPS), host name (e.g.  www.yahoo.com) and (optionally) port number.&lt;br /&gt;
&lt;br /&gt;
All remaining information pasted or typed into the 'URL' field will be ignored; you are expected to enter it in the 'Request' field below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Still, if you want to just copy-paste a URL from a browser, hit [Ctrl+L] while you are not fuzzing, paste the URL value that you have copied from a browser and JBroFuzz will automatically do the work for you. &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples of valid URL values to be put in the&lt;br /&gt;
&lt;br /&gt;
Treat the 'URL' and 'Request' fields as the two stages of a 'telnet' session on port 80; you are effectively using the 'URL' field to specify the equivalent of: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;gt;telnet www.google.com 8088&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As equivalent to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
http://www.google.com:8088&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or in the case of HTTPS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
https://www.google.com:8088&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Naturally, default ports for HTTP is 80 and HTTPS is 443.&lt;br /&gt;
&lt;br /&gt;
• In the 'Request' field type: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
GET / HTTP/1.0&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And press 'Enter' twice&lt;br /&gt;
&lt;br /&gt;
This is where the body of the message you are sending is to be placed. So anything obeying HTTP/S protocol, such as GET and POST requests, header fields and/or HTML content should be included here.&lt;br /&gt;
&lt;br /&gt;
As part of the process of fuzzing web applications with JBroFuzz you need to have done your homework, in terms of providing a base request message. This message is what will be used later on to add payloads to particular sections of the request.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;• Hit 'Start' [Ctrl+Enter]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will instigate the process of sending a single request to the specified host on a given (or default) port, over HTTP or HTTPS.&lt;br /&gt;
&lt;br /&gt;
Once a connection has been established JBroFuzz will proceed to submit the message you have typed into the 'Request' field.&lt;br /&gt;
&lt;br /&gt;
Finally, JBroFuzz will log all data sent and received into a file; accessing this file is typically a process of double clicking on the output line on the table at the bottom section of the 'Fuzzing' tab.&lt;br /&gt;
&lt;br /&gt;
You should see a response received in the bottom part of the 'Fuzzing' panel. Double click (or right click for more options) to see the information exchanged; typically this would be a 302 redirect pointing you to another location. Congratulations, you have just said &amp;quot;Hello&amp;quot; to Google! &lt;br /&gt;
&lt;br /&gt;
[[Image:002-JBroFuzz-Tutorial.png|500px|JBroFuzz Hello Google!]]&lt;br /&gt;
&lt;br /&gt;
Now this would typically be enough under RFC rules, to get a response back; but damn all the bots out here, most websites require further information to respond back. So, in the 'Request' field let's pretend to be a (kind of) legitimate browser by typing: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
GET / HTTP/1.0&amp;lt;br&amp;gt;&lt;br /&gt;
Host: www.google.com&amp;lt;br&amp;gt;&lt;br /&gt;
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729) JBroFuzz/1.5&amp;lt;br&amp;gt;&lt;br /&gt;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-gb,en;q=0.5Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Not forgetting to end the request typed with two returns: Press 'Enter' twice. Again, you should be able to see a line added with the response received back. &lt;br /&gt;
&lt;br /&gt;
Practice sending single requests to a website of your choice by changing the URL and also the 'Host:' field from the 'Request' above. Also try accessing an HTTPS website. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Alternatively, you can use the shortcut [Ctrl+L] to type in your URL, with the 'Request' field filled automatically, based on the URL you have typed. &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== HTTP Version Numbers &amp;amp; www.cia.gov Headerless Responses ===&lt;br /&gt;
For web applications, very often ill-defined requests submitted over the Internet, will trigger semi-legitimate responses that actually do not obey HTTP RFC protocol specification. Often, even though this is not the case in this example, these responses can lead to the identification of one or more security vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
In this example we test for the responses received for invalid HTTP version numbers on a particular website, namely www.cia.gov, over https. Now a word of caution here; please do not attempt to fuzz web applications that you do not have the authority to do so, especially over the Internet. &lt;br /&gt;
&lt;br /&gt;
Still, for the purposes of this tutorial exercise, we will subject a web server to no more than a dozen or so requests. These requests would be otherwise identical, if it was not for the HTTP version number incrementing by a value of 1 on each request. &lt;br /&gt;
&lt;br /&gt;
In terms of having the authority to do so, well this is identical to hitting 'Refresh' in your web browser a dozen or so times, while you are browsing to www.cia.gov. I do not consider this remotely close to any form of hacking, cracking, or proper fuzzing; web servers across the globe receive a lot more abuse than this on a daily basis. &lt;br /&gt;
&lt;br /&gt;
Finally, by the time you are reading this, the particular issue described might have been fixed. So here goes:&lt;br /&gt;
&lt;br /&gt;
• Within JBroFuzz, select: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
File -&amp;gt; Open Location [Ctrl+L]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Type: https://www.cia.gov and hit enter. This is depicted in the following screenshot:&lt;br /&gt;
&lt;br /&gt;
[[Image:003-JBroFuzz-Tutorial.png|JBroFuzz Open Location]]&lt;br /&gt;
&lt;br /&gt;
Hitting 'Enter' should automatically populate the 'URL' field and the 'Request' field within the 'Fuzzing' tab. What you see is the base request that we intend to add fuzzing payloads to. Before we do so, let us make one small alteration first:&lt;br /&gt;
&lt;br /&gt;
• Modify the first line of the 'Request' field to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
GET / HTTP/0.0&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Our objective is to enumerate the supported by the web server (in this case www.cia.gov) HTTP version numbers, following the two digit format that it has. We could be a lot more agressive here and test for buffer overflows and all types of injection; that would be out of line without the authority to do so. Instead we are going to see how JBroFuzz will iterate through the values of 0.0 to 1.4 by means of adding a Fuzzer to our base request.&lt;br /&gt;
&lt;br /&gt;
• Highlight the second zero from the line 'GET / HTTP/0.0' and right-click, selecting 'Add'. This is depicted in the screeshot below:&lt;br /&gt;
&lt;br /&gt;
[[Image:004-JBroFuzz-Tutorial.png|400px|Adding a Fuzzer to the HTTP version number]]&lt;br /&gt;
&lt;br /&gt;
• From the appearing 'Add a Fuzzer' window, select as 'Category Name', in the most left column 'Base' and as 'Fuzzer Name' in the middle column 'Base 10 (Decimal) Alphabet.&lt;br /&gt;
&lt;br /&gt;
• Click on 'Add Fuzzer' on the bottom right of the window&lt;br /&gt;
&lt;br /&gt;
[[Image:005-JBroFuzz-Tutorial.png|400px|Adding a Fuzzer]]&lt;br /&gt;
&lt;br /&gt;
This should add a Fuzzer of length 1 that iterates over the decimal (i.e. base 10) numbers 0 to 9. If we have added a hexadecimal Fuzzer instead of a decimal one (i.e. base 16) the iteration would from 0 to F. If we had selected two digits instead of one and proceeded to add a decimal Fuzzer, the iteration would be from:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
00&amp;lt;br&amp;gt;&lt;br /&gt;
01&amp;lt;br&amp;gt;&lt;br /&gt;
..&amp;lt;br&amp;gt;&lt;br /&gt;
98&amp;lt;br&amp;gt;&lt;br /&gt;
99&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From a User Interface (UI) perspective you should see a line added to the 'Added Payloads Table'. &lt;br /&gt;
&lt;br /&gt;
• Click 'Start' [Ctrl+Enter]&lt;br /&gt;
&lt;br /&gt;
This process will send 10 requests to the specified web server changing only first line of the request to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
GET / HTTP/0.0...&amp;lt;br&amp;gt;&lt;br /&gt;
GET / HTTP/0.1...&amp;lt;br&amp;gt;&lt;br /&gt;
...&amp;lt;br&amp;gt;&lt;br /&gt;
GET / HTTP/0.8...&amp;lt;br&amp;gt;&lt;br /&gt;
GET / HTTP/0.9...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While this is ongoing, you can sort the results by 'No' in the 'Output' table in the bottom of the 'Fuzzing' tab. This should enable you to see what request is currently being transmitted and received in real time.&lt;br /&gt;
&lt;br /&gt;
Once complete, change the first line of the 'Request' field to read:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
GET / HTTP/1.0&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
• Click 'Start' [Ctrl+Enter]&lt;br /&gt;
&lt;br /&gt;
The resulting output should resemble the following screenshot:&lt;br /&gt;
&lt;br /&gt;
[[Image:006-JBroFuzz-Tutorial.png|500px|JBroFuzz Output from a Fuzzing Session]]&lt;br /&gt;
&lt;br /&gt;
Straight away we can notice a difference in the response size: For HTTP version numbers 0.0 to 0.9 we are getting back what seems fairly big in size responses; 32222 bytes in size worth of responses, given that HTTP protocol version 0.0 to 0.8 do not officially exist!&lt;br /&gt;
&lt;br /&gt;
By double-clicking on one of these requests, we can see that the web server in question is responding back with no headers, yet returning a full HTML body; this represents the 32222 bytes of response of data we are receiving back. The following screenshot illustrates this:&lt;br /&gt;
&lt;br /&gt;
[[Image:007-JBroFuzz-Tutorial.png|300px|JBroFuzz Output for a Single Request/Response]]&lt;br /&gt;
&lt;br /&gt;
Using the 'Graphing' tab we can proceed to graph the particular requests and responses for this given session. &lt;br /&gt;
&lt;br /&gt;
• Within the 'Graphing' tab, click 'Start' [Ctrl+Enter]. &lt;br /&gt;
&lt;br /&gt;
• Select the directory corresponding to the Output folder we have used for this fuzzing session. This will typically be the last one.&lt;br /&gt;
&lt;br /&gt;
• Right-click and select 'Graph'&lt;br /&gt;
&lt;br /&gt;
Once complete, browse to the 'Response Size' tab within the 'Graphing' tab, as illustrated in the screenshot below:&lt;br /&gt;
&lt;br /&gt;
[[Image:008-JBroFuzz-Tutorial.png|300px|JBroFuzz Graphing different 'Response Sizes']]&lt;br /&gt;
&lt;br /&gt;
To re-iterate this does not present a security vulnerability in any shape or form; merely the fact that by manipulating HTTP version numbers as part of the request we transmit, we can impact the response that we get back. In this case, what changes is the non-existent header fields, with some HTML content being received back.&lt;br /&gt;
&lt;br /&gt;
If I was to guess what is causing this, I would say that some sort of load balancing or content delivery is not happening as it should when non-existent version numbers are being transmitted.&lt;br /&gt;
&lt;br /&gt;
==Using JBroFuzz with Paros Proxy==&lt;br /&gt;
&lt;br /&gt;
JBroFuzz is a standalone fuzzer; it can release and create sockets over HTTP and HTTPS, but in order to use JBroFuzz correctly you will have to know what it is that you are fuzzing. &lt;br /&gt;
&lt;br /&gt;
In comes the need for a proxy tool; the opening versions of JBroFuzz actually had a proxy tab that you could use to intercept traffic generated by your web browser. That functionality got removed in an attempt to focus and deliver solely on the fuzzing capabilities of the tool.&lt;br /&gt;
&lt;br /&gt;
This section details how to use JBroFuzz in combination with a client side proxy. The one selected is Paros Proxy, which, despite the fact that it hasn't been updated since 2006 is still a popular tool that you see in web security testing live CDs. You could use any of the other proxy tools available. &lt;br /&gt;
&lt;br /&gt;
===Winning on a Remix of the Year Award===&lt;br /&gt;
&lt;br /&gt;
At 17:53, on a frosty winter evening, a message window popped up:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
17:53 http://www.localhost.com/remixcontest/club/annual2010.html&lt;br /&gt;
17:53 Hey bro, could you cast in a vote here for the Such &amp;amp; Such Remix?&lt;br /&gt;
17:53 Appreciated!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A friend in need is a friend indeed, so here goes I thought. Opening up a web browser configured to work with Paros as an intermediate proxy, allowed for the casting of my vote. while keeping a record of each request and reply. &lt;br /&gt;
&lt;br /&gt;
No registration, or any other form of submitting an identifier was needed. The request that Paros stored for the casting of the actual vote was:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET http://www.localhost.com/remixcontest/club/vote.php?onLoad=%5Btype%20Method%5D&amp;amp;id=55 HTTP/1.1&lt;br /&gt;
Host: www.localhost.com&lt;br /&gt;
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729) Paros/3.2.13&lt;br /&gt;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&lt;br /&gt;
Accept-Language: en-gb,en;q=0.5&lt;br /&gt;
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&lt;br /&gt;
Keep-Alive: 300&lt;br /&gt;
Proxy-Connection: keep-alive&lt;br /&gt;
Cookie: PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Paros Proxy actually places the domain (in this case www.localhost.com) with the protocol (i.e. http) in front of the GET request. As a result, you can't open a telnet/netcat session and just copy-paste the above. Similarly when we bring the request into JBroFuzz, a bit of tweaking is required. &lt;br /&gt;
&lt;br /&gt;
* In the URL field, type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://www.localhost.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the Request field, let's keep what is of interest:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /remixcontest/club/vote.php?onLoad=%5Btype%20Method%5D&amp;amp;id=55 HTTP/1.0&lt;br /&gt;
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5&lt;br /&gt;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&lt;br /&gt;
Accept-Language: en-gb,en;q=0.5&lt;br /&gt;
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&lt;br /&gt;
Cookie: PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No needs for Keep-Alive and Proxy-Connection. Let's simplify the HTTP request by making it a version 1.0 request and getting rid of the Host header as well. Also on the user agent, let us keep that mainstream vanilla: Firefox on Windows (popular browser combination), getting rid of the .NET and Paros additives.&lt;br /&gt;
&lt;br /&gt;
Checking on the website, our Such &amp;amp; Such remix already has about 100 votes or so and the top remix has approximately 310 votes. Let's fuzz this:&lt;br /&gt;
&lt;br /&gt;
* Select 2 of the digits of the cookie value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Select: Panel -&amp;gt; Add&lt;br /&gt;
&lt;br /&gt;
* In the &amp;quot;Add a Fuzzer&amp;quot; panel, select:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Base -&amp;gt; Base16 (HEX)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and select &amp;quot;Add Fuzzer&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
This will add a line within the Payloads tab on the right hand side. &lt;br /&gt;
&lt;br /&gt;
Our cookie value above (PHPSESSID=ab6afb883dbgf8084f6dcf1eafdb225e) is in lowercase, hexadecimal format. Let's make sure the encoding we select is also that. &lt;br /&gt;
&lt;br /&gt;
Within the Payloads tab, click on the encoding drop down menu and select lowercase. Just before clicking &amp;quot;Start&amp;quot;, JBroFuzz should look something like the screenshot below.&lt;br /&gt;
&lt;br /&gt;
[[Image:014-JBroFuzz-Tutorial.png|Adding Votes by iterating through PHPSESSID cookie values]]&lt;br /&gt;
&lt;br /&gt;
== Performing User Enumeration with a Valid Set of Credentials ==&lt;br /&gt;
Often you encounter an application that allows for the enumeration of one or more pages after a user has been successfully granted a set of session credentials. One of the key areas to test from an application specific perspective, relates to the page(s) that provide user account information.&lt;br /&gt;
&lt;br /&gt;
In the following example, we investigate an ASP.NET 2.0 application with a C# back-end. In this, an authenticated user has the option to select to &amp;quot;View My Profile&amp;quot;. This page provides them with account information (including the typical username, email address, further notes) that they can proceed to update and save to the back-end system.&lt;br /&gt;
&lt;br /&gt;
After a user has authenticated, the following URL, gives them access to their profile information stored on the database:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://www.myattackingdomain.com/portal-location/UserInfo.aspx?UserID=23&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Simple investigation confirms that the digits allowed as part of the UserID value are decimal numbers only. Lets feed that information into JBroFuzz.&lt;br /&gt;
&lt;br /&gt;
===Fuzzing a User ID===&lt;br /&gt;
&lt;br /&gt;
• Within JBroFuzz, select: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
File -&amp;gt; Open Location [Ctrl+L]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Type: http://www.myattackingdomain.com/portal-location/UserInfo.aspx?UserID=23 and hit enter. This is depicted in the following screenshot:&lt;br /&gt;
&lt;br /&gt;
[[Image:009-JBroFuzz-Tutorial.png|300px|JBroFuzz 'GET' Request with a 'UserID' parameter]]&lt;br /&gt;
&lt;br /&gt;
From the URL the important parameter is the value of the UserID query string (the value 23, above). We want to fuzz that.&lt;br /&gt;
&lt;br /&gt;
• Within the Fuzzing Tab, in the &amp;quot;Request&amp;quot; text area, highlight the above number 23&lt;br /&gt;
• Right-click and select &amp;quot;Add&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Add a Fuzzer&amp;quot; window that appears, select:&lt;br /&gt;
&lt;br /&gt;
• Category Name: &amp;lt;code&amp;gt;Base&amp;lt;/code&amp;gt;&lt;br /&gt;
• Fuzzer Name: &amp;lt;code&amp;gt;Base10 (DEC)&amp;lt;/code&amp;gt;&lt;br /&gt;
• Select &amp;quot;Add Fuzzer&amp;quot; in the bottom right&lt;br /&gt;
&lt;br /&gt;
This would have added a decimal (base 10 fuzzer) of length 2 onto the location.&lt;br /&gt;
&lt;br /&gt;
• You will see a row added within the &amp;quot;Added Fuzzers Table&amp;quot; of the Fuzzing panel.&lt;br /&gt;
• Click &amp;quot;Start&amp;quot; &amp;lt;code&amp;gt;Ctrl+Enter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will transmit 100 requests to the domain in question, which in this case is assumed: www.myattackingdomain.com. The value being changed within each request will be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
• GET /portal-location/UserInfo.aspx?UserID=00 HTTP/1.0&lt;br /&gt;
• GET /portal-location/UserInfo.aspx?UserID=01 HTTP/1.0&lt;br /&gt;
...&lt;br /&gt;
• GET /portal-location/UserInfo.aspx?UserID=98 HTTP/1.0&lt;br /&gt;
• GET /portal-location/UserInfo.aspx?UserID=99 HTTP/1.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Done. Let's proceed to graph the responses that we have obtained. Our objective is to understand which two-digit numbers from 00 to 99 correspond to valid user accounts. &lt;br /&gt;
&lt;br /&gt;
===Graphing Results===&lt;br /&gt;
• Within the &amp;quot;Graphing&amp;quot; tab, click &amp;quot;Start&amp;quot; &amp;lt;code&amp;gt;Ctrl+Enter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A list of directories will appear on the left-hand side. If you scroll to the bottom of the list you should see the directory corresponding to your fuzzing session, in our case it was (175 2009-06-24 16-18-24)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
• Right-click on (175 2009-06-24 16-18-24)&lt;br /&gt;
• Click &amp;quot;Graph&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will generate the graphs in their respective tabs. The question now becomes which graph is of interest for our user enumeration exercise.&lt;br /&gt;
&lt;br /&gt;
By definition enumerating users against an ID value, or any other identifier involves being able to obtain a different response for an existing user to that of a user that is not have a corresponding ID value. &lt;br /&gt;
&lt;br /&gt;
Thus, from the metrics available, the one useful for enumerating users will be that of measuring the &amp;quot;Hamming Distance&amp;quot; between responses received. Based on the JBroFuzz documentation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Fuzzing Hamming Distance &amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A bar chart with the hamming distance of the characters in the response, &lt;br /&gt;
relative to the first response received. Check each character of the first&lt;br /&gt;
response received, against the character at the same position of the&lt;br /&gt;
current response received. If they are not identical, increment the &lt;br /&gt;
hamming distance.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As we can see the Fuzzing Hamming Distance (FHD) varies quite a bit from the definition of the normal hamming distance term, used in telecommunications. Still, they share a lot of similarities.&lt;br /&gt;
&lt;br /&gt;
As we can from the above, the first request is critical to calibrating our user enumeration exercise. It represents the value that all other Fuzzing Hamming Distances (FHD) will be measured and normalised towards. For the java-skilled audience, the algorithm is quite trivial, but offers spectacular results in distinguishing responses:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
in = new BufferedReader(new FileReader(f));&lt;br /&gt;
   58 &lt;br /&gt;
   59 			int counter = 0;&lt;br /&gt;
   60 			int check = 0;&lt;br /&gt;
   61 			int c;&lt;br /&gt;
   62 			while (((c = in.read()) &amp;gt; 0) &amp;amp;&amp;amp; (counter &amp;lt; MAX_CHARS)) {&lt;br /&gt;
   63 &lt;br /&gt;
   64 				// If we are passed &amp;quot;--jbrofuzz--&amp;gt;\n&amp;quot; in the file&lt;br /&gt;
   65 				if (check == END_SIGNATURE.length()) {&lt;br /&gt;
   66 &lt;br /&gt;
   67 					firstSet.append((char) c);&lt;br /&gt;
   68 &lt;br /&gt;
   69 				}&lt;br /&gt;
   70 				// Else find &amp;quot;--jbrofuzz--&amp;gt;\n&amp;quot; using a counter&lt;br /&gt;
   71 				else {&lt;br /&gt;
   72 					// Increment the counter for each success&lt;br /&gt;
   73 					if (c == END_SIGNATURE.charAt(check)) {&lt;br /&gt;
   74 						check++;&lt;br /&gt;
   75 					} else {&lt;br /&gt;
   76 						check = 0;&lt;br /&gt;
   77 					}&lt;br /&gt;
   78 				}&lt;br /&gt;
   79 &lt;br /&gt;
   80 				counter++;&lt;br /&gt;
   81 &lt;br /&gt;
   82 			}&lt;br /&gt;
   83 			in.close();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergo, the corresponding graph is depicted in the screenshot below. The peak graphs correspond to number that if you hover the mouse over will give you the enumeration ID of a valid user.&lt;br /&gt;
&lt;br /&gt;
[[Image:015-JBroFuzz-Tutorial.png|500px|Measuring Hamming Distance for User Enumeration]]&lt;br /&gt;
&lt;br /&gt;
== JBroFuzz Development Corner ==&lt;br /&gt;
This section presents how to setup and use JBroFuzz as a fuzzing library. Also, it offers an insight in how to setup and compile your own version of JBroFuzz. As different people have different levels of expertise of the java programming language, eclipse, ant and subversion, some of the steps presented herein might be considered basic by advanced developers.&lt;br /&gt;
&lt;br /&gt;
===Setting up a JBroFuzz Development Environment===&lt;br /&gt;
&lt;br /&gt;
This section guides you towards setting up a development environment for JBroFuzz. Despite the Operating System (O/S) being windows XP, a similar process can be followed in a number of other O/S. &lt;br /&gt;
&lt;br /&gt;
You will need to have installed:&lt;br /&gt;
&lt;br /&gt;
* Tortoise SVN (using TortoiseSVN-1.6.6.17493-win32-svn-1.6.6.msi)&lt;br /&gt;
* Eclipse Java (using eclipse-java-galileo-SR1-win32.zip)&lt;br /&gt;
&lt;br /&gt;
Optionally, if you don't like building your application through eclipse you could also require to install Apache Ant.&lt;br /&gt;
&lt;br /&gt;
====Step 1: Obtain the source code====&lt;br /&gt;
&lt;br /&gt;
JBroFuzz uses SubVersion with the repository being publicly available for download through anonymous access on sourceforge. There is a plan to move it the source to the OWASP Git repository, but until then, use the guidelines below.&lt;br /&gt;
&lt;br /&gt;
[[Image:010-JBroFuzz-Tutorial.png|Tortoise SVN Check out JBroFuzz Source Code]]&lt;br /&gt;
&lt;br /&gt;
Right click on the folder location where you want to download the source code and select: &lt;br /&gt;
&lt;br /&gt;
* SVN Checkout&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;URL of repository&amp;quot;, enter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://jbrofuzz.svn.sourceforge.net/svnroot/jbrofuzz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Checkout directory&amp;quot;, enter the folder location of your choice, in this case:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\root\code\jbrofuzz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Checkout Depth&amp;quot; select:&lt;br /&gt;
&lt;br /&gt;
* Fully recursive&lt;br /&gt;
&lt;br /&gt;
Untick &amp;quot;Omit Externals&amp;quot; (should be unticked by default)&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Revision&amp;quot; select:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Head revision&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Select OK. &lt;br /&gt;
&lt;br /&gt;
This process, once complete will checkout the entirety of the JBroFuzz source code from the SVN repository on sourceforge.&lt;br /&gt;
&lt;br /&gt;
====Step 2: Configuring a JBroFuzz Project within Eclipse====&lt;br /&gt;
&lt;br /&gt;
Having obtained the latest copy of the source code, the next step entails importing that source code within the Eclipse IDE.&lt;br /&gt;
&lt;br /&gt;
Within Eclipse, select:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
File -&amp;gt; New -&amp;gt; Other&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From the &amp;quot;New&amp;quot; panel that appears, select:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Java -&amp;gt; Java Project from Existig Ant Buildfile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:011-JBroFuzz-Tutorial.png|Import JBroFuzz Code into Eclipse from Ant File]]&lt;br /&gt;
&lt;br /&gt;
Select &amp;quot;Next&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In the next menu, under &amp;quot;Ant buildfile&amp;quot;, select &amp;quot;Browse&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Browse to the location where you have just (step 1) downloaded the source code and select the following file:&lt;br /&gt;
&lt;br /&gt;
* build.xml&lt;br /&gt;
&lt;br /&gt;
The build.xml file is an Ant build file that JBroFuzz uses. &lt;br /&gt;
&lt;br /&gt;
[[Image:012-JBroFuzz-Tutorial.png|Select the Ant File]]&lt;br /&gt;
&lt;br /&gt;
Selecting that file should have populated the &amp;quot;Project name&amp;quot; as jbrofuzz and also given you:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;javac&amp;quot; task found in target &amp;quot;compile&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MAKE SURE TO TICK:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Link to the buildfile in the filesystem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Otherwise eclipse will try to replicate the source code within your workspace and that makes the process a tiny bit more complicated when it comes to actually building JBroFuzz.&lt;br /&gt;
&lt;br /&gt;
Click &amp;quot;Finish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You will see the item &amp;quot;Building workspace (76%) on the bottom right hand side of Eclipse. Once that is complete, you should see the jbrofuzz project on the top left corner of the Package Explorer within Eclipse.&lt;br /&gt;
&lt;br /&gt;
====Step 3: Building JBroFuzz====&lt;br /&gt;
&lt;br /&gt;
Within the Package Explorer, expand the jbrofuzz project and double-click on the build.xml file.&lt;br /&gt;
&lt;br /&gt;
Right click on the &amp;quot;build [default]&amp;quot; task within the &amp;quot;Outline&amp;quot; window (typically seen on the right hand side) and select:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Run As -&amp;gt; 1. Ant Build [Alt+Shift+X, Q]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the build has been successful, a JBroFuzz.jar file within the the /jar folder would have been created. Following the path conventions above that should be in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\root\code\jbrofuzz\jar\JBroFuzz.jar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:013-JBroFuzz-Tutorial.png|Building JBroFuzz within Eclipse]]&lt;br /&gt;
&lt;br /&gt;
===How to Use JBroFuzz as a Fuzzing Library===&lt;br /&gt;
&lt;br /&gt;
Quite often what you need to do in terms of fuzzing, far exceeds the User Interface (UI) of JBroFuzz. For this reason, a set of core fuzzing APIs have been made available that can be used for more advanced fuzzing scenarios.&lt;br /&gt;
&lt;br /&gt;
The JBroFuzz.jar standalone archive (made available with every release) carries a core fuzzing library that holds a number of key classes. These are located under:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
org.owasp.jbrofuzz.core.*;&lt;br /&gt;
-Database.java&lt;br /&gt;
-Fuzzer.java&lt;br /&gt;
-FuzzerBigInteger.java&lt;br /&gt;
-NoSuchFuzzerException.java&lt;br /&gt;
-Prototype.java&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The class of importance is Fuzzer.java. If you are going to use recursive iterators of great length, there is also FuzzerBigInteger.java. The difference between the two is that Fuzzer.java uses the primitive java data type long (up to 16^16 values) while FuzzerBigInteger.java uses java BigInteger to perform the counting. Naturally, the class FuzzerBigInteger is slower and takes more memory than the Fuzzer class.&lt;br /&gt;
&lt;br /&gt;
Within JBroFuzz a Fuzzer is an instance of a java Iterator. This implies that values can be accessed by simply calling the &amp;lt;code&amp;gt;next()&amp;lt;/code&amp;gt; method once an object has been made available. Typically, a call to &amp;lt;code&amp;gt;hasNext()&amp;lt;/code&amp;gt; should also be performed prior to avoid an exception being thrown.&lt;br /&gt;
&lt;br /&gt;
A Fuzzer can be obtained from the factory method &amp;lt;code&amp;gt;createFuzzer(String, int);&amp;lt;/code&amp;gt; available for every instance of the fuzzing Database. Ergo:&lt;br /&gt;
&lt;br /&gt;
====A HelloFuzzer Example====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Database myDatabase = new Database();&lt;br /&gt;
&lt;br /&gt;
Fuzzer myFuzzer = myDatabase.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 5);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So how do I use the API? Here is a simple HelloFuzzer (file called HelloFuzzer.java) example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(Fuzzer f = fuzzDB.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 4); f.hasNext();) {&lt;br /&gt;
       // Get the next payload value...&lt;br /&gt;
       System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloFuzzer.java OWASP JBroFuzz Example 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To compile the above use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
javac -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar&amp;quot; HelloFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This assumes that you are currently inside the directory where HelloFuzzer.java resides and that the JBroFuzz.jar is located two directories within your current location i.e. in jbrofuzz/jar. In order to run the above compiled HelloFuzzer class issue:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
java -cp &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: The above 2 commands have been crafted in a win32 environment. The process for compiling and running HelloFuzzer.java above is the same in *nix machines. Simply replace the backslash &amp;quot;\&amp;quot; with &amp;quot;/&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Fuzzing Payload Definitions====&lt;br /&gt;
Within the JBroFuzz.jar file, there is a file called fuzzers.jbrf that carries all the fuzzer definitions that you see in the UI payloads tab of JBroFuzz. To view a latest copy of this file you can browse the SVN repository of JBroFuzz:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://jbrofuzz.svn.sourceforge.net/viewvc/jbrofuzz/tar/fuzzers.jbrf?view=log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A note here worth mentioning: Files ending in .jbrofuzz are session files saved by users while performing fuzzing operations. Files ending in .jbrf are JBroFuzz system files. Typical examples of .jbrf files are headers.jbrf, as well as fuzzers.jbrf. Both these use an internal proprietary format not to be confused with the .jbrofuzz file format.&lt;br /&gt;
&lt;br /&gt;
Fuzzers belong in categories (1 to many) and each fuzzer carries a set of payloads that define the alphabet of the fuzzer.&lt;br /&gt;
&lt;br /&gt;
Also, you have replacive and recursive fuzzers, zero fuzzers, etc. There are a number of different fuzzer categories. As an example of a fuzzer within the fuzzers.jbrf file, consider the hexadecimal fuzzer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fuzzer Name: Base16 (HEX)&lt;br /&gt;
Fuzzer Type: Recursive&lt;br /&gt;
Fuzzer Id:   031-B16-HEX&lt;br /&gt;
&lt;br /&gt;
Total Number of Payloads: 16&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Within the fuzzers.jbrf file this fuzzer is defined in plain-text format as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
R:031-B16-HEX:Base16 (HEX):16&lt;br /&gt;
&amp;gt; Number Systems | Base | Recursive Fuzzers&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
a&lt;br /&gt;
b&lt;br /&gt;
c&lt;br /&gt;
d&lt;br /&gt;
e&lt;br /&gt;
f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There is very little preventing you from defining your own fuzzers within this file, by following the file format specified above. You can use the UI to see if they have been loaded successfully. &lt;br /&gt;
&lt;br /&gt;
Further to recursive and replacive fuzzers you also have zero fuzzers (i.e. a zero fuzzer of 1000 will just transmit 1000 requests as they are, without adding any payloads) double fuzzers, cross product fuzzers, etc. &lt;br /&gt;
&lt;br /&gt;
Notice the factory method Database.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 4) yielding: &amp;quot;I want a 4 digit recursive fuzzer (why because NUM-HEX is recursive in its definition, starts with R: instead of P:) of HEX digits.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Thus the above scenario would iterate through all the digits from 0000 to ffff. I wouldn't recommend using the above scenario for such trivial fuzzing capabilities; simply presented as an example of the inner workings of JBroFuzz.jar&lt;br /&gt;
&lt;br /&gt;
====HelloFuzzer Refined====&lt;br /&gt;
A more detailed code breakdown of the above HelloFuzzer example can be found below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * JBroFuzz API Examples 01&lt;br /&gt;
 *&lt;br /&gt;
 * JBroFuzz - A stateless network protocol fuzzer for web applications.&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (C) 2007, 2008, 2009 subere@uncon.org&lt;br /&gt;
 *&lt;br /&gt;
 * This file is part of the JBroFuzz API examples on how to use the &lt;br /&gt;
 * fuzzer libraries included in JBroFuzz.jar.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is free software: you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 * &lt;br /&gt;
 * You should have received a copy of the GNU General Public License&lt;br /&gt;
 * along with JBroFuzz.  If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.&lt;br /&gt;
 * Alternatively, write to the Free Software Foundation, Inc., 51 &lt;br /&gt;
 * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.&lt;br /&gt;
 * &lt;br /&gt;
 * Verbatim copying and distribution of this entire program file is &lt;br /&gt;
 * permitted in any medium without royalty provided this notice &lt;br /&gt;
 * is preserved. &lt;br /&gt;
 * &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import org.owasp.jbrofuzz.core.NoSuchFuzzerException;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Database;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Fuzzer; &lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &amp;lt;p&amp;gt;In JBroFuzz a Fuzzer is a java Iterator.&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;p&amp;gt;In order to create a Fuzzer, use the factory method&lt;br /&gt;
 * Database.createFuzzer(String, int), passing as arguments&lt;br /&gt;
 * the Fuzzer ID and the specified length as a positive int.&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;p&amp;gt;Be careful to check that the fuzzer ID (labelled as f_ID)&lt;br /&gt;
 * is actually an existing ID from the Database of Fuzzers.&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;p&amp;gt;Expected Output:&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &amp;lt;code&amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: 00000&amp;lt;br&amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: 00001&amp;lt;br&amp;gt;&lt;br /&gt;
 *  ...&amp;lt;br&amp;gt;&lt;br /&gt;
 *  (a total of 16^5 = 1048576 lines)&amp;lt;br&amp;gt;&lt;br /&gt;
 *  ...&amp;lt;br&amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: ffffd&amp;lt;br&amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: ffffe&amp;lt;br&amp;gt;&lt;br /&gt;
 *  The fuzzer payload is: fffff&amp;lt;br&amp;gt;&lt;br /&gt;
 * &amp;lt;/code&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;p&amp;gt;For more information on the Database of Fuzzers, see the&lt;br /&gt;
 * HelloDatabase Class.&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * @author subere@uncon.org&lt;br /&gt;
 * @version n/a&lt;br /&gt;
 */&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param args&lt;br /&gt;
	 */&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
		// You have to construct an instance of the fuzzers database&lt;br /&gt;
		Database fuzzDB = new Database();&lt;br /&gt;
		// You have to supply a valid fuzzer ID&lt;br /&gt;
		String f_ID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
		// You have to supply a (+)tive int&lt;br /&gt;
		int f_len = 5;&lt;br /&gt;
		&lt;br /&gt;
		try {&lt;br /&gt;
			&lt;br /&gt;
			for(Fuzzer f = fuzzDB.createFuzzer(f_ID, f_len); f.hasNext();) {&lt;br /&gt;
				&lt;br /&gt;
				// Get the next payload value...&lt;br /&gt;
				System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		} catch (NoSuchFuzzerException e) {&lt;br /&gt;
			&lt;br /&gt;
			System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Hello Database of Fuzzers====&lt;br /&gt;
Having seen how to access a single Fuzzer through the createFuzzer() method available in the Database object. The next question that comes naturally is what are the Fuzzers that are available by default in JBroFuzz?&lt;br /&gt;
&lt;br /&gt;
To answer that, this example focuses more on the database component that we previously initialised, investigating the list of available methods that it offers. &lt;br /&gt;
&lt;br /&gt;
In JBroFuzz, all Fuzzers are stored in a Database object that you will be required to construct in order to access them.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * JBroFuzz API Examples 02&lt;br /&gt;
 *&lt;br /&gt;
 * JBroFuzz - A stateless network protocol fuzzer for web applications.&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (C) 2007, 2008, 2009 subere@uncon.org&lt;br /&gt;
 *&lt;br /&gt;
 * This file is part of the JBroFuzz API examples on how to use the &lt;br /&gt;
 * fuzzer libraries included in JBroFuzz.jar.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is free software: you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 * &lt;br /&gt;
 * You should have received a copy of the GNU General Public License&lt;br /&gt;
 * along with JBroFuzz.  If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.&lt;br /&gt;
 * Alternatively, write to the Free Software Foundation, Inc., 51 &lt;br /&gt;
 * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.&lt;br /&gt;
 * &lt;br /&gt;
 * Verbatim copying and distribution of this entire program file is &lt;br /&gt;
 * permitted in any medium without royalty provided this notice &lt;br /&gt;
 * is preserved. &lt;br /&gt;
 * &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import org.owasp.jbrofuzz.core.NoSuchFuzzerException;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Database;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Fuzzer; &lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &amp;lt;p&amp;gt;In JBroFuzz all Fuzzers are stored in a Database&lt;br /&gt;
 * object that you will be required to construct in order&lt;br /&gt;
 * to access them.&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;p&amp;gt;Within the Database, each Fuzzer is a collection of &lt;br /&gt;
 * payloads, which carries a unique ID string value.&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;p&amp;gt;Example ID values are the output of this program:&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &amp;lt;code&amp;gt;&lt;br /&gt;
 *  The fuzzer ID is: 013-LDP-INJ&amp;lt;br&amp;gt;&lt;br /&gt;
 *	The name of the fuzzer is:			LDAP Injection&amp;lt;br&amp;gt;&lt;br /&gt;
 *	The id of the fuzzer is:			013-LDP-INJ&amp;lt;br&amp;gt;&lt;br /&gt;
 *	The of payloads it carries (it's alphabet) is:	20&amp;lt;br&amp;gt;&lt;br /&gt;
 *	It has as 1st payload:&amp;lt;br&amp;gt;&lt;br /&gt;
 *		|&amp;lt;br&amp;gt;&lt;br /&gt;
 *  The fuzzer ID is: 018-XSS-4IE&amp;lt;br&amp;gt;&lt;br /&gt;
 *	The name of the fuzzer is:			XSS IE&amp;lt;br&amp;gt;&lt;br /&gt;
 *	The id of the fuzzer is:			018-XSS-4IE&amp;lt;br&amp;gt;&lt;br /&gt;
 *	The of payloads it carries (it's alphabet) is:	38&amp;lt;br&amp;gt;&lt;br /&gt;
 *	It has as 1st payload:&amp;lt;br&amp;gt;&lt;br /&gt;
 *		&amp;lt; img src=`x` onrerror= ` ;; alert(1) ` /&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * &amp;lt;/code&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;p&amp;gt;Do not be confused between Prototypes and Fuzzers; &lt;br /&gt;
 * JBroFuzz uses Prototype objects to construct the Fuzzers&lt;br /&gt;
 * that get added into the Database upon initialisation.&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * &amp;lt;p&amp;gt;As a result, the getter methods available within a Database&lt;br /&gt;
 * object can carry the name of getAllPrototypeIDs and &lt;br /&gt;
 * getAllFuzzerIDs interchangebly.&amp;lt;/p&amp;gt;&lt;br /&gt;
 * &lt;br /&gt;
 * @author subere@uncon.org&lt;br /&gt;
 * @version n/a&lt;br /&gt;
 */&lt;br /&gt;
public class HelloDatabase {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param args&lt;br /&gt;
	 */&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
		// You have to construct an instance of the fuzzers database&lt;br /&gt;
		Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
		// Get a list of all the fuzzer IDs from the database&lt;br /&gt;
		String[] fuzzer_IDs = fuzzDB.getAllPrototypeIDs();&lt;br /&gt;
		&lt;br /&gt;
		System.out.println(&amp;quot;The fuzzer IDs found are:&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		for(String fuzzerID : fuzzer_IDs) {&lt;br /&gt;
			&lt;br /&gt;
			System.out.println(&amp;quot;The fuzzer ID is: &amp;quot; + fuzzerID);&lt;br /&gt;
			&lt;br /&gt;
			// We pass of length of 1, irrelevant if we are&lt;br /&gt;
			// just going to access the first payload&lt;br /&gt;
			// of the fuzzer&lt;br /&gt;
			Fuzzer fuzzer;&lt;br /&gt;
			try {&lt;br /&gt;
				&lt;br /&gt;
				fuzzer = fuzzDB.createFuzzer(fuzzerID, 1);&lt;br /&gt;
				// Normally you should check for fuzzer.hasNext()				&lt;br /&gt;
				String payload = fuzzer.next();&lt;br /&gt;
				&lt;br /&gt;
				System.out.println(&amp;quot;\tThe name of the fuzzer is:\t\t\t&amp;quot; + fuzzer.getName() );&lt;br /&gt;
				System.out.println(&amp;quot;\tThe id of the fuzzer is:\t\t\t&amp;quot; + fuzzer.getId() );&lt;br /&gt;
				System.out.println(&amp;quot;\tThe of payloads it carries (it's alphabet) is:\t&amp;quot; + fuzzDB.getSize(fuzzerID));&lt;br /&gt;
				System.out.println(&amp;quot;\tIt has as 1st payload:\n\t\t&amp;quot; + payload );&lt;br /&gt;
&lt;br /&gt;
			} catch (NoSuchFuzzerException e) {&lt;br /&gt;
				System.out.println(&amp;quot;Could not find the specified fuzzer!&amp;quot;);&lt;br /&gt;
				System.out.println(&amp;quot;Going to print all the fuzzer IDs I know:&amp;quot;);&lt;br /&gt;
				// old vs new for loop :)&lt;br /&gt;
				// in case of an error, print just the &lt;br /&gt;
				// fuzzer IDs, accessed from the DB&lt;br /&gt;
				for(int j = 0; j &amp;lt; fuzzer_IDs.length; j++) {&lt;br /&gt;
					System.out.println(&amp;quot;The fuzzer ID is: &amp;quot; + fuzzer_IDs[j]);&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Methods available within the Fuzzer Class====&lt;br /&gt;
A final example of this section, involves seeing the usage of all the method calls available in the Fuzzer.java class&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * JBroFuzz API Examples 03&lt;br /&gt;
 *&lt;br /&gt;
 * JBroFuzz - A stateless network protocol fuzzer for web applications.&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright (C) 2007, 2008, 2009 subere@uncon.org&lt;br /&gt;
 *&lt;br /&gt;
 * This file is part of the JBroFuzz API examples on how to use the &lt;br /&gt;
 * fuzzer libraries included in JBroFuzz.jar.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is free software: you can redistribute it and/or modify&lt;br /&gt;
 * it under the terms of the GNU General Public License as published by&lt;br /&gt;
 * the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 * &lt;br /&gt;
 * JBroFuzz is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.&lt;br /&gt;
 * &lt;br /&gt;
 * You should have received a copy of the GNU General Public License&lt;br /&gt;
 * along with JBroFuzz.  If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.&lt;br /&gt;
 * Alternatively, write to the Free Software Foundation, Inc., 51 &lt;br /&gt;
 * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.&lt;br /&gt;
 * &lt;br /&gt;
 * Verbatim copying and distribution of this entire program file is &lt;br /&gt;
 * permitted in any medium without royalty provided this notice &lt;br /&gt;
 * is preserved. &lt;br /&gt;
 * &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
import org.owasp.jbrofuzz.core.NoSuchFuzzerException;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Database;&lt;br /&gt;
import org.owasp.jbrofuzz.core.Fuzzer; &lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &amp;lt;p&amp;gt;Example iterating through all the methods available&lt;br /&gt;
 * in the Fuzzer Object and their respective outputs.&amp;lt;/p&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * @author subere@uncon.org&lt;br /&gt;
 * @version n/a&lt;br /&gt;
 */&lt;br /&gt;
public class IndigoFuzzerTests {&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param args&lt;br /&gt;
	 */&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
		// You have to construct an instance of the fuzzers database&lt;br /&gt;
		Database fuzzDB = new Database();&lt;br /&gt;
		// You have to supply a valid fuzzer ID&lt;br /&gt;
		String f_ID = &amp;quot;033-B08-OCT&amp;quot;;&lt;br /&gt;
		// You have to supply a (+)tive int&lt;br /&gt;
		int f_len = 5;&lt;br /&gt;
&lt;br /&gt;
		try {&lt;br /&gt;
			&lt;br /&gt;
			Fuzzer f = fuzzDB.createFuzzer(f_ID, f_len);&lt;br /&gt;
&lt;br /&gt;
			while(f.hasNext()) {&lt;br /&gt;
				&lt;br /&gt;
				// Could do this via reflection, but..&lt;br /&gt;
				f.next();&lt;br /&gt;
				// System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
				System.out.println(&amp;quot; The maximum value is: &amp;quot; + f.getMaximumValue());&lt;br /&gt;
&lt;br /&gt;
				System.out.println(&amp;quot; The current value is: &amp;quot; + f.getCurrectValue());&lt;br /&gt;
				&lt;br /&gt;
&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		} catch (NoSuchFuzzerException e) {&lt;br /&gt;
			&lt;br /&gt;
			System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Advanced Fuzzing with the JBroFuzz Library===&lt;br /&gt;
&lt;br /&gt;
This section covers more advanced APIs that are available under the &amp;lt;b&amp;gt;org.owasp.jbrofuzz.core package&amp;lt;/b&amp;gt;. It should be noted that some of these classes and their corresponding functionality are not used by the JBroFuzz program application. Instead, they are made available for incorporation into other java code that you have perhaps written that requires more specialized type of fuzzing.&lt;br /&gt;
&lt;br /&gt;
====Fuzzing Really Long Values with Big Integer====&lt;br /&gt;
&lt;br /&gt;
As stated previously, within JBroFuzz a Fuzzer is a java Iterator. This implies that while fuzzing, we typically keep track of a counter representing the value that we are currently on. Consider the example of HelloFuzzer.java, above:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(Fuzzer f = fuzzDB.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 4); f.hasNext();) {&lt;br /&gt;
       // Get the next payload value...&lt;br /&gt;
       System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloFuzzer.java OWASP JBroFuzz Example 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If we compile this program:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
javac -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar&amp;quot; HelloFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and run it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
java -cp &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We are going to see output similar to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 The fuzzer payload is: 0000&lt;br /&gt;
 ... (output omitted)&lt;br /&gt;
 The fuzzer payload is: fffd&lt;br /&gt;
 The fuzzer payload is: fffe&lt;br /&gt;
 The fuzzer payload is: ffff&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now what if we want a hexadecimal fuzzer of length not 4, but, say, 24. Let's try compile and run the above program with a length of 24. Changing the line to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     for(Fuzzer f = fuzzDB.createFuzzer(&amp;quot;031-B16-HEX&amp;quot;, 24); f.hasNext();) {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Running this modified version of HelloFuzzer.java, yields:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;javac -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer.java&lt;br /&gt;
&lt;br /&gt;
&amp;gt;java -classpath &amp;quot;.\jbrofuzz\jar\JBroFuzz.jar;.&amp;quot; HelloFuzzer&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nothing! What is actually happening is JBroFuzz is figuring out that the specified length of the Fuzzer we are about to create is far greater than that of the long java data type. As a result, the Fuzzer is not even entering the iteration mode that is typically expected with methods next() and hasNext().&lt;br /&gt;
&lt;br /&gt;
That's all great, but we still want a hexadecimal fuzzer, 24 digits long going from:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
000000000000000000000000&lt;br /&gt;
...to...&lt;br /&gt;
ffffffffffffffffffffffff&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this JBroFuzz offers another type of Fuzzer class, that of FuzzerBigInteger. Let's modify the critical line within the original HelloFuzzer.java program that we had:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     for(FuzzerBigInteger f = fuzzDB.createFuzzerBigInteger(&amp;quot;031-B16-HEX&amp;quot;, 24); f.hasNext();) {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the entire program becoming:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(FuzzerBigInteger f = fuzzDB.createFuzzerBigInteger(&amp;quot;031-B16-HEX&amp;quot;, 24); f.hasNext();) {&lt;br /&gt;
       // Get the next payload value...&lt;br /&gt;
       System.out.println(&amp;quot; The fuzzer payload is: &amp;quot; + f.next());&lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloFuzzer.java OWASP JBroFuzz Example 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compiling and running this program yields:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 The fuzzer payload is: 000000000000000000000000&lt;br /&gt;
 The fuzzer payload is: 000000000000000000000001&lt;br /&gt;
 ... (output omitted)&lt;br /&gt;
 The fuzzer payload is: 00000000000000000001a982&lt;br /&gt;
 ... (output omitted)&lt;br /&gt;
 The fuzzer payload is: 00000000000000000001a982&lt;br /&gt;
 The fuzzer payload is: ffffffffffffffffffffffff&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are limitations to this class, as governed by the BigInteger class itself. Further information can be found at:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigInteger.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Still, on a virtual windows xp machine with 256Mb of RAM the above code had no problem running to completion. It took some time though.. Characteristics of the windows machine while this iteration was ongoing: The CPU was being utilised at 100% and memory usage was constant at 212 Mb. Overall, a clean sheet for FuzzerBigInteger.java.&lt;br /&gt;
&lt;br /&gt;
====Using the Power Fuzzer API====&lt;br /&gt;
&lt;br /&gt;
With web applications, it is often that you find yourself re-using part of, or the entirety of a fuzzing payload in more than one location, as part of the GET, POST, or any other type of request you submit.&lt;br /&gt;
&lt;br /&gt;
For this reason, JBroFuzz offers the PowerFuzzer class: A type of iterator for which you can specify how many copies of the payload you require in each request. &lt;br /&gt;
&lt;br /&gt;
Let's consider the following trivial scenario. You are in need of all hexadecimal values, which are 4-digits long (i.e. 0000 to FFFF) and you are in need of these 5 times for each request. &lt;br /&gt;
&lt;br /&gt;
This scenario is trivial, because typically you can assign the fuzzing payload (i.e. the value you get back from Fuzzer.next() ) to a String variable and re-use it as many times as you see fit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzerID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 int length = 4;&lt;br /&gt;
 ....&lt;br /&gt;
     for(Fuzzer f = fuzzDB.createFuzzer(fuzzerID, length); f.hasNext();) {&lt;br /&gt;
          String payload = f.next();&lt;br /&gt;
          ....&lt;br /&gt;
     }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using the PowerFuzzer.class, the following HelloPowerFuzzer.java program can be created:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloPowerFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzerID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 int length = 4;&lt;br /&gt;
 int power = 5;&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(PowerFuzzer f = fuzzDB.createPowerFuzzer(fuzzerID, length, power); f.hasNext();) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] identicalElements = f.nextPower();&lt;br /&gt;
&lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem : identicalElements) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloPowerFuzzer.java OWASP JBroFuzz Power Fuzzer Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This program would output the following; no rocket science here:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
....&lt;br /&gt;
 I have 5 elements: 4817 4817 4817 4817 4817&lt;br /&gt;
 I have 5 elements: 4818 4818 4818 4818 4818&lt;br /&gt;
 I have 5 elements: 4819 4819 4819 4819 4819&lt;br /&gt;
 I have 5 elements: 481a 481a 481a 481a 481a&lt;br /&gt;
 I have 5 elements: 481b 481b 481b 481b 481b&lt;br /&gt;
 I have 5 elements: 481c 481c 481c 481c 481c&lt;br /&gt;
 I have 5 elements: 481d 481d 481d 481d 481d&lt;br /&gt;
 I have 5 elements: 481e 481e 481e 481e 481e&lt;br /&gt;
 I have 5 elements: 481f 481f 481f 481f 481f&lt;br /&gt;
 I have 5 elements: 4820 4820 4820 4820 4820&lt;br /&gt;
 I have 5 elements: 4821 4821 4821 4821 4821&lt;br /&gt;
 I have 5 elements: 4822 4822 4822 4822 4822&lt;br /&gt;
 I have 5 elements: 4823 4823 4823 4823 4823&lt;br /&gt;
 I have 5 elements: 4824 4824 4824 4824 4824&lt;br /&gt;
 I have 5 elements: 4825 4825 4825 4825 4825&lt;br /&gt;
 I have 5 elements: 4826 4826 4826 4826 4826&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now imagine you need to change the number of elements you obtain back every time. For every second request, you need to obtain back two identical payloads, for every third request, you need to obtain back three payloads and for every fourth request, you need to obtain back four payloads. &lt;br /&gt;
&lt;br /&gt;
The PowerFuzzer class, with the corresponding method &amp;lt;b&amp;gt;setPower(int)&amp;lt;/b&amp;gt; allows you to set how many identical elements you obtain back, without having to worry about the length argument. Below is a class that solves the above scenario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloPowerFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzerID = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 int length = 4;&lt;br /&gt;
 int power = 5;&lt;br /&gt;
&lt;br /&gt;
 try {&lt;br /&gt;
     for(PowerFuzzer f = fuzzDB.createPowerFuzzer(fuzzerID, length, power); f.hasNext();) {&lt;br /&gt;
	 &lt;br /&gt;
	   int currentValue = (int) f.getCurrentValue(); &lt;br /&gt;
	   currentValue %= 4;&lt;br /&gt;
	   switch (currentValue) {&lt;br /&gt;
			case 0: f.setPower(1); break;&lt;br /&gt;
			case 1: f.setPower(2); break;&lt;br /&gt;
			case 2: f.setPower(3); break;&lt;br /&gt;
			default: f.setPower(4); break;&lt;br /&gt;
	   }&lt;br /&gt;
	   &lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] identicalElements = f.nextPower();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem : identicalElements) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloPowerFuzzer.java&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This class has as output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ....&lt;br /&gt;
 I have 1 elements: 22a8&lt;br /&gt;
 I have 2 elements: 22a9 22a9&lt;br /&gt;
 I have 3 elements: 22aa 22aa 22aa&lt;br /&gt;
 I have 4 elements: 22ab 22ab 22ab 22ab&lt;br /&gt;
 I have 1 elements: 22ac&lt;br /&gt;
 I have 2 elements: 22ad 22ad&lt;br /&gt;
 I have 3 elements: 22ae 22ae 22ae&lt;br /&gt;
 I have 4 elements: 22af 22af 22af 22af&lt;br /&gt;
 I have 1 elements: 22b0&lt;br /&gt;
 I have 2 elements: 22b1 22b1&lt;br /&gt;
 I have 3 elements: 22b2 22b2 22b2&lt;br /&gt;
 I have 4 elements: 22b3 22b3 22b3 22b3&lt;br /&gt;
 I have 1 elements: 22b4&lt;br /&gt;
 I have 2 elements: 22b5 22b5&lt;br /&gt;
 I have 3 elements: 22b6 22b6 22b6&lt;br /&gt;
 I have 4 elements: 22b7 22b7 22b7 22b7&lt;br /&gt;
 I have 1 elements: 22b8&lt;br /&gt;
 I have 2 elements: 22b9 22b9&lt;br /&gt;
 ....&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Naturally, the algorithm of the number of elements required can vary based on any number of parameters. The PowerFuzzer class gives you a quick way to control the number of identical payloads you obtain back, without having to worry about creating a data type to store them in.&lt;br /&gt;
&lt;br /&gt;
====Using the Double Fuzzer API====&lt;br /&gt;
&lt;br /&gt;
In some cases of fuzzing web applications, a requirement to fuzz two (or more) locations part of the request being submitted to the web server becomes apparent. &lt;br /&gt;
&lt;br /&gt;
The DoubleFuzzer class allows you to create a fuzzer based on two prototype definitions. Similarly to instantiating a Fuzzer through a prototype and a given length, with a DoubleFuzzer, we pass two prototype definitions and two lengths. The corresponding method call available within the &amp;lt;b&amp;gt;Database&amp;lt;/b&amp;gt; class of org.owasp.jbrofuzz.core is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public DoubleFuzzer createDoubleFuzzer(String id1, int length1,  &lt;br /&gt;
								String id2, int length2) throws NoSuchFuzzerException {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Let's cross-breed some fuzzers, see what results we get back during an iteration.&lt;br /&gt;
&lt;br /&gt;
The first example below, uses two hexadecimal fuzzers of different lengths, as specified by the variables:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
String fuzzID1 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
String fuzzID2 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
int length1 = 4;&lt;br /&gt;
int length2 = 2;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As the double fuzzer iteration is taking place, the second fuzzer, defined by the fuzzID2 &amp;amp; length2 loops, starting from 00 and going all the way up to FF. An example output is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 I have 2 elements: fefb fb&lt;br /&gt;
 I have 2 elements: fefc fc&lt;br /&gt;
 I have 2 elements: fefd fd&lt;br /&gt;
 I have 2 elements: fefe fe&lt;br /&gt;
 I have 2 elements: feff ff&lt;br /&gt;
 I have 2 elements: ff00 00&lt;br /&gt;
 I have 2 elements: ff01 01&lt;br /&gt;
 I have 2 elements: ff02 02&lt;br /&gt;
 I have 2 elements: ff03 03&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The complete code listing of HelloDoubleFuzzer.java is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloDoubleFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzID1 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 String fuzzID2 = &amp;quot;031-B16-HEX&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 int length1 = 4;&lt;br /&gt;
 int length2 = 2;&lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
     DoubleFuzzer f = fuzzDB.createDoubleFuzzer(fuzzID1, length1, fuzzID2, length2);&lt;br /&gt;
	 &lt;br /&gt;
     while( f.hasNext() ) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] payloads = f.next();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem : payloads) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloDoubleFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's simple enough; now let's cross-breed something a bit more exotic: Imagine a 3-digit octal ID value [000 - 777] being submitted inline with, say, a parameter that we want to test for Cross-Site Scripting (XSS). Let's adjust the program above with the corresponding fuzzer IDs of these fuzzers. Remember all the IDs of all the fuzzers can be found in the fuzzers.jbrf file within JBroFuzz.jar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import org.owasp.jbrofuzz.core.*;&lt;br /&gt;
&lt;br /&gt;
public class HelloDoubleFuzzer {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
 Database fuzzDB = new Database();&lt;br /&gt;
 &lt;br /&gt;
 String fuzzID1 = &amp;quot;033-B08-OCT&amp;quot;;&lt;br /&gt;
 String fuzzID2 = &amp;quot;019-XSS-GEK&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 int length1 = 3;&lt;br /&gt;
 int length2 = 1;&lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
     DoubleFuzzer f = fuzzDB.createDoubleFuzzer(fuzzID1, length1, fuzzID2, length2);&lt;br /&gt;
	 &lt;br /&gt;
     while( f.hasNext() ) {&lt;br /&gt;
       // Get the next payload in an array of length[power]&lt;br /&gt;
	   String [] payloads = f.next();&lt;br /&gt;
	   &lt;br /&gt;
	    // f.getPower() == identicalElements.length, always&lt;br /&gt;
		System.out.print(&amp;quot; I have &amp;quot; + f.getPower() + &amp;quot; elements: &amp;quot;);&lt;br /&gt;
		// System.out.println(currentValue);&lt;br /&gt;
	   &lt;br /&gt;
	   for(String elem : payloads) {&lt;br /&gt;
		&lt;br /&gt;
	     System.out.print(elem + &amp;quot; &amp;quot;);&lt;br /&gt;
	   }&lt;br /&gt;
	   System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
	   &lt;br /&gt;
     }&lt;br /&gt;
   } catch (NoSuchFuzzerException e) {&lt;br /&gt;
       System.out.println(&amp;quot;Could not find fuzzer &amp;quot; + e.getMessage());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
} // HelloDoubleFuzzer.java&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output from this program is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 I have 2 elements: 000 (1?(1?{a:1?&amp;quot;&amp;quot;[1?&amp;quot;ev\a\l&amp;quot;:0](1?&amp;quot;\a\lert&amp;quot;:0):0}:0).a:0)[1?&amp;quot;\c\a\l\l&amp;quot;:0](content,1?&amp;quot;x\s\s&amp;quot;:0)&lt;br /&gt;
 I have 2 elements: 001 &amp;lt;STYLE TYPE=&amp;quot;text/javascript&amp;quot;&amp;gt;alert('XSS');&amp;lt;/STYLE&amp;gt;&lt;br /&gt;
 I have 2 elements: 002 &amp;lt;SCRIPT SRC=http://ha.ckers.org/xss.js&lt;br /&gt;
 I have 2 elements: 003 &amp;lt;A HREF=&amp;quot;http://google:ha.ckers.org&amp;quot;&amp;gt;XSS&amp;lt;/A&amp;gt;&lt;br /&gt;
 I have 2 elements: 004 &amp;lt;A HREF=&amp;quot;http://ha.ckers.org@google&amp;quot;&amp;gt;XSS&amp;lt;/A&amp;gt;&lt;br /&gt;
 I have 2 elements: 005 &amp;lt;A HREF=&amp;quot;//google&amp;quot;&amp;gt;XSS&amp;lt;/A&amp;gt;&lt;br /&gt;
 ....&lt;br /&gt;
 ...&lt;br /&gt;
 ..&lt;br /&gt;
 .&lt;br /&gt;
 ..&lt;br /&gt;
 ...&lt;br /&gt;
 ....&lt;br /&gt;
 I have 2 elements: 774 &amp;lt;SCRIPT SRC=http://ha.ckers.org/xss.js&lt;br /&gt;
 I have 2 elements: 775 &amp;lt;A HREF=&amp;quot;http://google:ha.ckers.org&amp;quot;&amp;gt;XSS&amp;lt;/A&amp;gt;&lt;br /&gt;
 I have 2 elements: 776 &amp;lt;A HREF=&amp;quot;http://ha.ckers.org@google&amp;quot;&amp;gt;XSS&amp;lt;/A&amp;gt;&lt;br /&gt;
 I have 2 elements: 777 &amp;lt;A HREF=&amp;quot;//google&amp;quot;&amp;gt;XSS&amp;lt;/A&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the list stopping iterating at the last element of the greatest of the two fuzzers.&lt;br /&gt;
&lt;br /&gt;
==Graphing with JBroFuzz==&lt;br /&gt;
&lt;br /&gt;
Once a fuzzing session has completed, JBroFuzz offers the ability to generate a number of graphs, using various metrics. This section investigates how to further the graphing functionality available with the application.&lt;br /&gt;
&lt;br /&gt;
===Customizing the logo on each Graph===&lt;br /&gt;
&lt;br /&gt;
As of version 2.0, all image icons within JBroFuzz are located within the /icons directory of the application. The particular transparent image file displayed on top right part of the graphs is named: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/icons/owasp-med.png&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This file is a 64 x 64 PNG image file. You can replace it with your own file, as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;ls -l JBroFuzz.jar&lt;br /&gt;
-rw-rw-rw-   1 user     group     4033612 Feb 15 12:33 JBroFuzz.jar&lt;br /&gt;
&lt;br /&gt;
&amp;gt;unzip -oq JBroFuzz.jar&lt;br /&gt;
&amp;gt;cd icons&lt;br /&gt;
&amp;gt;mv owasp-med.png file64x64-file.png&lt;br /&gt;
&amp;gt;cd ..&lt;br /&gt;
&amp;gt;zip -r JBroFuzz.zip *&lt;br /&gt;
&amp;gt;mv JBroFuzz.zip JBroFuzz.jar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This enables you to have your own (company logo) on JBroFuzz graphs. Further to this, a number of other customization options are available, by right clicking on each of the graph generated.&lt;/div&gt;</summary>
		<author><name>Yiannis</name></author>	</entry>

	</feed>