Nicolas, On Fri, Mar 13, 2009 at 6:56 PM, Nicolas Rotta <[email protected]> wrote: > List, > I've been working on this plug-in and it is now ready for your > testing and comments.
Thank you very much for your contribution, the plugin looks
*really* nice. Here are some comments:
- The plugin worked, but it had a bug, where it flagged something as
existant, when it really was not. So I added a 404 check:
if relative_distance( response.getBody(),
original_response.getBody() ) < 0.70\
and not self.is404( response ):
- I created a test script for the plugin (test scripts are located in
"scripts/"), to test the plugin against our test environment which is
available here [0]. If you are interested, I can send you a virtual
machine, with the test environment setup ready to run.
The version I modified of slash.py is attached, together with the
"script-slash.w3af" file. Please review my changes, and commit these
two files to the SVN.
> It is my first contribution to the project, so don't
> be so harsh on me.
We aren't harsh, we just try to keep high standards =)
> Please, pay special attention to the relative_distance
> function usage.
The relative_distance method sucks, I'll replace it's name and
usage by something more meaningful like "are_different()".
Regarding the next task, if you have any doubts, just start a new
thread right here :)
[0] https://w3af.svn.sourceforge.net/svnroot/w3af/extras/testEnv/
Cheers,
>
> Cheers,
> Nicolas Rotta
>
> ------------------------------------------------------------------------------
> Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
> powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
> easily build your RIAs with Flex Builder, the Eclipse(TM)based development
> software that enables intelligent coding and step-through debugging.
> Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
> _______________________________________________
> W3af-develop mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/w3af-develop
>
>
--
Andrés Riancho
http://www.bonsai-sec.com/
http://w3af.sourceforge.net/
'''
slash.py
Copyright 2006 Andres Riancho
This file is part of w3af, w3af.sourceforge.net .
w3af is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation version 2 of the License.
w3af is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with w3af; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
'''
import core.controllers.outputManager as om
# options
from core.data.options.option import option
from core.data.options.optionList import optionList
import core.data.kb.knowledgeBase as kb
from core.controllers.basePlugin.baseDiscoveryPlugin import baseDiscoveryPlugin
from core.controllers.w3afException import w3afException
from core.controllers.misc.levenshtein import relative_distance
from core.data.db.temp_persist import disk_list
class slash( baseDiscoveryPlugin ):
'''
Identify if the resource http://host.tld/spam/ and http://host.tld/spam are the same.
@author: Nicolas Rotta ( [email protected] )
'''
def __init__( self ):
baseDiscoveryPlugin.__init__( self )
self._already_visited = disk_list()
def discover( self, fuzzableRequest ):
'''
Generates a new URL by adding or substracting the '/' character.
@parameter fuzzableRequest: A fuzzableRequest instance that contains (among other things) the URL to test.
'''
self._fuzzableRequests = []
self.is404 = kb.kb.getData( 'error404page', '404' )
url = fuzzableRequest.getURL()
if url not in self._already_visited:
self._already_visited.append( url )
om.out.debug( 'slash plugin is testing: "' + fuzzableRequest.getURI() + '".' )
fr = self._get_fuzzed_request( fuzzableRequest )
original_response = self._urlOpener.GET( fuzzableRequest.getURL(), useCache = True )
targs = ( fr, original_response )
self._tm.startFunction( target = self._do_request, args = targs , ownerObj = self )
self._tm.join( self )
self._already_visited.append( fr.getURI() )
return self._fuzzableRequests
def _get_fuzzed_request( self, fuzzableRequest ):
'''
Generate a new Url by adding or substracting the '/' character.
@param fuzzableRequest: The original fuzzableRequest
@return: The modified fuzzableRequest.
'''
fr = fuzzableRequest.copy()
if ( fuzzableRequest.getURL().endswith( '/' ) ):
fr.setURL( fuzzableRequest.getURL().rstrip( '/' ) )
else:
fr.setURL( fuzzableRequest.getURL() + '/' )
return fr
def _do_request( self, fuzzableRequest, original_response ):
'''
Sends the request.
@parameter fuzzableRequest: The fuzzable request object to modify.
@parameter original_response: The response for the original request that was sent.
'''
try:
response = self._urlOpener.GET( fuzzableRequest.getURI(), useCache = True )
except KeyboardInterrupt, e:
raise e
else:
if relative_distance( response.getBody(), original_response.getBody() ) < 0.70\
and not self.is404( response ):
self._fuzzableRequests.extend( self._createFuzzableRequests( response ) )
om.out.debug( 'slash plugin found new URI: "' + fuzzableRequest.getURI() + '".' )
def getOptions( self ):
'''
@return: A list of option objects for this plugin.
'''
ol = optionList()
return ol
def setOptions( self, OptionList ):
'''
This method sets all the options that are configured using the user interface
generated by the framework using the result of getOptions().
@parameter OptionList: A dictionary with the options for the plugin.
@return: No value is returned.
'''
pass
def getPluginDeps( self ):
'''
@return: A list with the names of the plugins that should be runned before the
current one.
'''
return []
def getLongDesc( self ):
'''
@return: A DETAILED description of the plugin functions and features.
'''
return '''
Identify if the resource http://host.tld/spam/ and http://host.tld/spam are the same.
'''
script-slash.w3af
Description: Binary data
------------------------------------------------------------------------------ Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are powering Web 2.0 with engaging, cross-platform capabilities. Quickly and easily build your RIAs with Flex Builder, the Eclipse(TM)based development software that enables intelligent coding and step-through debugging. Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
_______________________________________________ W3af-develop mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/w3af-develop
