Merge remote-tracking branch 'origin/master'

# Conflicts:
#	common/request.py
This commit is contained in:
Jing Ling
2020-08-26 23:31:30 +08:00
5 changed files with 39 additions and 30 deletions
+2 -2
View File
@@ -95,9 +95,9 @@ pipenv run python oneforall.py --target example.com run
``` ```
3. 开启爆破模块运行(使用massdns进行爆破,网络占用极大,可能会阻塞网络) 3. 开启爆破模块运行(使用massdns进行爆破,网络占用极大,可能会阻塞网络)
```bash ```bash
python3 run python oneforall.py --target example.com --burte True run python3 run python oneforall.py --target example.com --brute True run
# or # or
pipenv run python oneforall.py --target example.com --burte True run pipenv run python oneforall.py --target example.com --brute True run
``` ```
</details> </details>
+17 -13
View File
@@ -113,6 +113,14 @@ def get_jump_urls(history):
return urls return urls
def get_progress_bar(total):
bar = tqdm.tqdm()
bar.total = total
bar.desc = 'Request Progress'
bar.ncols = 80
return bar
def get(url, resp_queue, session): def get(url, resp_queue, session):
timeout = settings.request_timeout_second timeout = settings.request_timeout_second
redirect = settings.request_allow_redirect redirect = settings.request_allow_redirect
@@ -132,16 +140,13 @@ def request(urls_queue, resp_queue, session):
urls_queue.task_done() urls_queue.task_done()
def progress(urls, resp_queue): def progress(bar, total, urls_queue):
bar = tqdm.tqdm()
bar.total = len(urls)
bar.desc = 'Request Progress'
bar.ncols = 80
while True: while True:
done = resp_queue.qsize() remaining = urls_queue.qsize()
done = total - remaining
bar.n = done bar.n = done
bar.update() bar.update()
if done == bar.total: if remaining == 0:
break break
@@ -163,17 +168,16 @@ def bulk_request(urls):
resp_queue = Queue() resp_queue = Queue()
for url in urls: for url in urls:
urls_queue.put(url) urls_queue.put(url)
total = len(urls)
session = get_session() session = get_session()
thread_count = req_thread_count() thread_count = req_thread_count()
bar = get_progress_bar(total)
progress_thread = Thread(target=progress, name='ProgressThread', progress_thread = Thread(target=progress, args=(bar, total, urls_queue))
args=(urls, resp_queue), daemon=True)
progress_thread.start() progress_thread.start()
for i in range(thread_count): for _ in range(thread_count):
request_thread = Thread(target=request, name=f'RequestThread-{i}', request_thread = Thread(target=request, args=(urls_queue, resp_queue, session))
args=(urls_queue, resp_queue, session),
daemon=True)
request_thread.start() request_thread.start()
urls_queue.join() urls_queue.join()
+12 -6
View File
@@ -719,11 +719,17 @@ def get_url_resp(url):
def decode_resp_text(resp): def decode_resp_text(resp):
content = resp.content
if not content:
return str('')
try: try:
text = resp.text(encoding='utf-8', errors='strict') # 先尝试用utf-8严格解码 # 先尝试用utf-8严格解码
except UnicodeError: content = str(content, encoding='utf-8', errors='strict')
except (LookupError, TypeError, UnicodeError):
try: try:
text = resp.text(encoding='gb18030', errors='strict') # 再尝试用gb18030严格解码 # 再尝试用gb18030严格解码
except UnicodeError: content = str(content, encoding='gb18030', errors='strict')
text = resp.text(encoding=None, errors='ignore') # 最后尝试自动解码 except (LookupError, TypeError, UnicodeError):
return text # 最后尝试自动解码
content = str(content, errors='replace')
return content
+7 -8
View File
@@ -83,14 +83,14 @@ class Takeover(Module):
utils.save_data(self.path, data) utils.save_data(self.path, data)
def compare(self, subdomain, cname, responses): def compare(self, subdomain, cname, responses):
domain_resp = self.get('http://' + subdomain, check=False) domain_resp = self.get('http://' + subdomain, check=False, ignore=True)
cname_resp = self.get('http://' + cname, check=False) cname_resp = self.get('http://' + cname, check=False, ignore=True)
if domain_resp is None or cname_resp is None: if domain_resp is None or cname_resp is None:
return return
for resp in responses: for resp in responses:
if resp in domain_resp.text and resp in cname_resp.text: if resp in domain_resp.text and resp in cname_resp.text:
logger.log('ALERT', f'{subdomain}Subdomain takeover threat found') logger.log('ALERT', f'{subdomain} takeover threat found')
self.results.append([subdomain, cname]) self.results.append([subdomain, cname])
break break
@@ -142,13 +142,13 @@ class Takeover(Module):
# 创建待检查的子域队列 # 创建待检查的子域队列
for domain in self.subdomains: for domain in self.subdomains:
self.subdomainq.put(domain) self.subdomainq.put(domain)
# 进度线程
progress_thread = Thread(target=self.progress)
progress_thread.start()
# 检查线程 # 检查线程
for _ in range(self.thread): for _ in range(self.thread):
check_thread = Thread(target=self.check, daemon=True) check_thread = Thread(target=self.check)
check_thread.start() check_thread.start()
# 进度线程
progress_thread = Thread(target=self.progress, daemon=True)
progress_thread.start()
self.subdomainq.join() self.subdomainq.join()
self.save() self.save()
@@ -164,4 +164,3 @@ class Takeover(Module):
if __name__ == '__main__': if __name__ == '__main__':
fire.Fire(Takeover) fire.Fire(Takeover)
+1 -1
View File
@@ -8,7 +8,7 @@ Example
from oneforall import OneForAll from oneforall import OneForAll
if __name__ == '__main__': if __name__ == '__main__':
test = OneForAll(target='mi.com') test = OneForAll(target='freebuf.com')
test.brute = True test.brute = True
test.req = True test.req = True
test.takeover = True test.takeover = True