mirror of
https://github.com/lanjelot/patator
synced 2024-11-12 01:10:42 +00:00
New skip action
This commit is contained in:
parent
2692d6a5c9
commit
d96663bc3d
43
patator.py
43
patator.py
@ -1406,7 +1406,8 @@ class Controller:
|
||||
builtin_actions = (
|
||||
('ignore', 'do not report'),
|
||||
('retry', 'try payload again'),
|
||||
('free', 'dismiss future similar payloads'),
|
||||
('skip', 'skip keyword value'),
|
||||
('free', 'skip parameter value'),
|
||||
('quit', 'terminate execution now'),
|
||||
)
|
||||
|
||||
@ -1587,6 +1588,7 @@ Please read the README inside for more examples and usage information.
|
||||
self.ns = manager.Namespace()
|
||||
self.ns.actions = {}
|
||||
self.ns.free_list = []
|
||||
self.ns.skip_list = []
|
||||
self.ns.paused = False
|
||||
self.ns.quit_now = False
|
||||
self.ns.start_time = 0
|
||||
@ -1745,12 +1747,10 @@ Please read the README inside for more examples and usage information.
|
||||
actions[action] = opts
|
||||
return actions
|
||||
|
||||
def check_free(self, payload):
|
||||
# free_list: 'host=10.0.0.1', 'user=anonymous', 'host=10.0.0.7,user=test', ...
|
||||
for m in self.ns.free_list:
|
||||
args = m.split(',', 1)
|
||||
for arg in args:
|
||||
k, v = arg.split('=', 1)
|
||||
def should_free(self, payload):
|
||||
# free_list: [[('host', '10.0.0.1')], [('user', 'anonymous')], [('host', '10.0.0.7'),('user','test')], ...
|
||||
for l in self.ns.free_list:
|
||||
for k, v in l:
|
||||
if payload[k] != v:
|
||||
break
|
||||
else:
|
||||
@ -1759,9 +1759,24 @@ Please read the README inside for more examples and usage information.
|
||||
return False
|
||||
|
||||
def register_free(self, payload, opts):
|
||||
self.ns.free_list += [','.join('%s=%s' % (k, payload[k]) for k in opts.split('+'))]
|
||||
self.ns.free_list += [[(k, payload[k]) for k in opts.split('+')]]
|
||||
logger.debug('free_list updated: %s' % self.ns.free_list)
|
||||
|
||||
def should_skip(self, prod):
|
||||
# skip_list: [[(0, '10.0.0.1')], [(1, 'anonymous')], [(0, '10.0.0.7'), (1, 'test')], ...
|
||||
for l in self.ns.skip_list:
|
||||
for k, v in l:
|
||||
if prod[k] != v:
|
||||
break
|
||||
else:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def register_skip(self, prod, opts):
|
||||
self.ns.skip_list += [[(k, prod[k]) for k in map(int, opts.split('+'))]]
|
||||
logger.debug('skip_list updated: %s' % self.ns.skip_list)
|
||||
|
||||
def fire(self):
|
||||
logger.info('Starting %s at %s' % (__banner__, strftime('%Y-%m-%d %H:%M %Z', localtime())))
|
||||
|
||||
@ -2058,7 +2073,13 @@ Please read the README inside for more examples and usage information.
|
||||
logger.debug('product: %s' % prod)
|
||||
prod_str = ':'.join(prod)
|
||||
|
||||
if self.check_free(payload):
|
||||
if self.should_free(payload):
|
||||
logger.debug('skipping')
|
||||
report_queue.put(('skip', prod_str, None, 0))
|
||||
continue
|
||||
|
||||
if self.should_skip(prod):
|
||||
logger.debug('skipping')
|
||||
report_queue.put(('skip', prod_str, None, 0))
|
||||
continue
|
||||
|
||||
@ -2118,6 +2139,10 @@ Please read the README inside for more examples and usage information.
|
||||
self.register_free(payload, actions['free'])
|
||||
break
|
||||
|
||||
if 'skip' in actions:
|
||||
self.register_skip(prod, actions['skip'])
|
||||
break
|
||||
|
||||
if 'fail' in actions:
|
||||
break
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user