secator 0.5.1__py3-none-any.whl → 0.5.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of secator might be problematic. Click here for more details.

secator/tasks/httpx.py CHANGED
@@ -31,6 +31,7 @@ class httpx(Http):
31
31
  'cdn': {'is_flag': True, 'default': False, 'help': 'CDN detection'},
32
32
  'debug_resp': {'is_flag': True, 'default': False, 'help': 'Debug response'},
33
33
  'vhost': {'is_flag': True, 'default': False, 'help': 'Probe and display server supporting VHOST'},
34
+ 'store_responses': {'is_flag': True, 'short': 'sr', 'default': CONFIG.http.store_responses, 'help': 'Save HTTP responses'}, # noqa: E501
34
35
  'screenshot': {'is_flag': True, 'short': 'ss', 'default': False, 'help': 'Screenshot response'},
35
36
  'system_chrome': {'is_flag': True, 'default': False, 'help': 'Use local installed Chrome for screenshot'},
36
37
  'headless_options': {'is_flag': False, 'short': 'ho', 'default': None, 'help': 'Headless Chrome additional options'},
@@ -55,6 +56,7 @@ class httpx(Http):
55
56
  THREADS: 'threads',
56
57
  TIMEOUT: 'timeout',
57
58
  USER_AGENT: OPT_NOT_SUPPORTED,
59
+ 'store_responses': 'sr',
58
60
  }
59
61
  opt_value_map = {
60
62
  DELAY: lambda x: str(x) + 's' if x else None,
@@ -71,15 +73,10 @@ class httpx(Http):
71
73
  debug_resp = self.get_opt_value('debug_resp')
72
74
  if debug_resp:
73
75
  self.cmd = self.cmd.replace('-silent', '')
74
- if CONFIG.http.store_responses:
75
- self.output_response_path = f'{self.reports_folder}/response'
76
- self.output_screenshot_path = f'{self.reports_folder}/screenshot'
77
- os.makedirs(self.output_response_path, exist_ok=True)
78
- os.makedirs(self.output_screenshot_path, exist_ok=True)
79
- self.cmd += f' -sr -srd {self.reports_folder}'
80
-
81
- # Remove screenshot bytes and body bytes when screenshot
82
76
  screenshot = self.get_opt_value('screenshot')
77
+ store_responses = self.get_opt_value('store_responses')
78
+ if store_responses or screenshot:
79
+ self.cmd += f' -srd {self.reports_folder}/.outputs'
83
80
  if screenshot:
84
81
  self.cmd += ' -esb -ehb'
85
82
 
@@ -98,8 +95,15 @@ class httpx(Http):
98
95
 
99
96
  @staticmethod
100
97
  def on_end(self):
101
- if CONFIG.http.store_responses:
102
- if os.path.exists(self.output_response_path + '/index.txt'):
103
- os.remove(self.output_response_path + '/index.txt')
104
- if os.path.exists(self.output_screenshot_path + '/index.txt'):
105
- os.remove(self.output_screenshot_path + '/index_screenshot.txt')
98
+ store_responses = self.get_opt_value('store_responses')
99
+ response_dir = f'{self.reports_folder}/.outputs'
100
+ if store_responses:
101
+ index_rpath = f'{response_dir}/response/index.txt'
102
+ index_spath = f'{response_dir}/screenshot/index_screenshot.txt'
103
+ index_spath2 = f'{response_dir}/screenshot/screenshot.html'
104
+ if os.path.exists(index_rpath):
105
+ os.remove(index_rpath)
106
+ if os.path.exists(index_spath):
107
+ os.remove(index_spath)
108
+ if os.path.exists(index_spath2):
109
+ os.remove(index_spath2)
secator/tasks/katana.py CHANGED
@@ -29,7 +29,8 @@ class katana(HttpCrawler):
29
29
  opts = {
30
30
  'headless': {'is_flag': True, 'short': 'hl', 'help': 'Headless mode'},
31
31
  'system_chrome': {'is_flag': True, 'short': 'sc', 'help': 'Use local installed chrome browser'},
32
- 'form_extraction': {'is_flag': True, 'short': 'fx', 'help': 'Detect forms'}
32
+ 'form_extraction': {'is_flag': True, 'short': 'fx', 'help': 'Detect forms'},
33
+ 'store_responses': {'is_flag': True, 'short': 'sr', 'default': CONFIG.http.store_responses, 'help': 'Store responses'}
33
34
  }
34
35
  opt_key_map = {
35
36
  HEADER: 'headers',
@@ -50,7 +51,8 @@ class katana(HttpCrawler):
50
51
  RETRIES: 'retry',
51
52
  THREADS: 'concurrency',
52
53
  TIMEOUT: 'timeout',
53
- USER_AGENT: OPT_NOT_SUPPORTED
54
+ USER_AGENT: OPT_NOT_SUPPORTED,
55
+ 'store_responses': 'sr'
54
56
  }
55
57
  opt_value_map = {
56
58
  DELAY: lambda x: int(x) if isinstance(x, float) else x
@@ -107,14 +109,16 @@ class katana(HttpCrawler):
107
109
  debug_resp = self.get_opt_value('debug_resp')
108
110
  if debug_resp:
109
111
  self.cmd = self.cmd.replace('-silent', '')
110
- if CONFIG.http.store_responses:
111
- self.cmd += f' -sr -srd {self.reports_folder}'
112
+ store_responses = self.get_opt_value('store_responses')
113
+ if store_responses:
114
+ self.cmd += f' -srd {self.reports_folder}/.outputs'
112
115
 
113
116
  @staticmethod
114
117
  def on_item(self, item):
115
118
  if not isinstance(item, Url):
116
119
  return item
117
- if CONFIG.http.store_responses and os.path.exists(item.stored_response_path):
120
+ store_responses = self.get_opt_value('store_responses')
121
+ if store_responses and os.path.exists(item.stored_response_path):
118
122
  with open(item.stored_response_path, 'r', encoding='latin-1') as fin:
119
123
  data = fin.read().splitlines(True)
120
124
  first_line = data[0]
@@ -126,5 +130,7 @@ class katana(HttpCrawler):
126
130
 
127
131
  @staticmethod
128
132
  def on_end(self):
129
- if CONFIG.http.store_responses and os.path.exists(self.reports_folder + '/index.txt'):
130
- os.remove(self.reports_folder + '/index.txt')
133
+ store_responses = self.get_opt_value('store_responses')
134
+ index_rpath = f'{self.reports_folder}/.outputs/index.txt'
135
+ if store_responses and os.path.exists(index_rpath):
136
+ os.remove(index_rpath)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: secator
3
- Version: 0.5.1
3
+ Version: 0.5.2
4
4
  Summary: The pentester's swiss knife.
5
5
  Project-URL: Homepage, https://github.com/freelabz/secator
6
6
  Project-URL: Issues, https://github.com/freelabz/secator/issues
@@ -83,8 +83,8 @@ secator/tasks/gf.py,sha256=WlhoEyL6xE79w6nE5XNSXHs-jVeO10njqJxBF8w20sA,945
83
83
  secator/tasks/gospider.py,sha256=_UlTb9G5Ss8D68NT53s0_rI6TnG00Ph0yxWyHic7cKs,2172
84
84
  secator/tasks/grype.py,sha256=n60Zs9d1NWJFHQ0DwIZib5wu3xH-tV2RzgLYwuQSTo4,2413
85
85
  secator/tasks/h8mail.py,sha256=hZBpfV6M1mbpD_PbDHxLI5HMvqAvTeY_W0lbkq3Hugo,2037
86
- secator/tasks/httpx.py,sha256=ugk4AOIqhvT5-HVhlRsQw_oF2BGovgHlS-_D9wav8wo,3972
87
- secator/tasks/katana.py,sha256=3JHtvxoSxJtju9xqvQptVaYXKnLLlCkOn6oY0A8h7wM,4371
86
+ secator/tasks/httpx.py,sha256=O4jkee6So9MSyHTb7n_owFiL3OMO0697uxDq7ULbq5s,4108
87
+ secator/tasks/katana.py,sha256=edsjIVj8sh5_ubCB5AFjANwute0Uv4Vdry0XB10xE1Q,4677
88
88
  secator/tasks/maigret.py,sha256=PZDTICJ4LZF3joKe-dXu2alffakD_1sxBuNEUBtJDm4,2098
89
89
  secator/tasks/mapcidr.py,sha256=7aa2WXQATWgIQo5oA12URjAg80L6MFMGdxScxls8DuA,980
90
90
  secator/tasks/msfconsole.py,sha256=Cm0vzOFff17C4M1YjkgU6T7Jc5-ClBK0Qi_529qVRb0,6065
@@ -94,8 +94,8 @@ secator/tasks/nuclei.py,sha256=lKZYPVcnCYomd830-ZCOz4fyc8xAKjNDuKayyz0BPek,3507
94
94
  secator/tasks/searchsploit.py,sha256=tIqCwYFIyHIgJbtcTL56PXqd-MCvoXOpvSDgoK_dxzc,2953
95
95
  secator/tasks/subfinder.py,sha256=cpFyFCpVaDZ3QAjNId26ezOwntn3CA5Uk-AC2l0mo0E,1087
96
96
  secator/tasks/wpscan.py,sha256=UVWnBPOQ1RDB2wzMswWR6vc6cucYgHtuJ8pLZoqCM40,5434
97
- secator-0.5.1.dist-info/METADATA,sha256=wEJx34zkxon4GAdURXZBuEjQTWzeTuz-LvLPXReNgtM,14095
98
- secator-0.5.1.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
99
- secator-0.5.1.dist-info/entry_points.txt,sha256=lPgsqqUXWgiuGSfKy-se5gHdQlAXIwS_A46NYq7Acic,44
100
- secator-0.5.1.dist-info/licenses/LICENSE,sha256=19W5Jsy4WTctNkqmZIqLRV1gTDOp01S3LDj9iSgWaJ0,2867
101
- secator-0.5.1.dist-info/RECORD,,
97
+ secator-0.5.2.dist-info/METADATA,sha256=ZMQMB3C0AM0JpSqfAwOHOMYvUJPytL6pJvOg60ozofg,14095
98
+ secator-0.5.2.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
99
+ secator-0.5.2.dist-info/entry_points.txt,sha256=lPgsqqUXWgiuGSfKy-se5gHdQlAXIwS_A46NYq7Acic,44
100
+ secator-0.5.2.dist-info/licenses/LICENSE,sha256=19W5Jsy4WTctNkqmZIqLRV1gTDOp01S3LDj9iSgWaJ0,2867
101
+ secator-0.5.2.dist-info/RECORD,,