Skip to content

Commit 01b2b3e

Browse files
authored
Add script to calculate hash of favicon.ico for Shodan (#13)
* Add script to calculate hash of favicon.ico * Remove '\n' * Change variable name
1 parent d3bbb9b commit 01b2b3e

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

Diff for: src/scripts/recon/shodan_favicon_hash/__main__.py

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#!/usr/bin/env python3
2+
3+
from base64 import encodebytes
4+
5+
from mmh3 import hash
6+
from requests import get
7+
from requests.exceptions import RequestException
8+
9+
from src.core.base.recon import ReconRunner, PossibleKeys
10+
from src.core.utils.response import ScriptResponse
11+
from src.core.utils.validators import validate_kwargs
12+
13+
14+
class Runner(ReconRunner):
15+
def __init__(self, logger: str = __name__):
16+
super(Runner, self).__init__(logger)
17+
18+
@validate_kwargs(PossibleKeys.KEYS)
19+
def run(self, *args, **kwargs):
20+
"""
21+
Returns hash of favicon.ico of given url.
22+
:param args: args from core runner
23+
:param kwargs: kwargs from core runner
24+
:return: ScriptResponse message
25+
"""
26+
url = kwargs.get("url")
27+
28+
try:
29+
response = get(f"{url}/favicon.ico")
30+
except RequestException as req_err:
31+
return ScriptResponse.error(
32+
result=None,
33+
message=f"Can't connect to {url}!"
34+
f"Error message: {req_err}",
35+
)
36+
37+
favicon = encodebytes(response.content)
38+
favicon_hash = hash(favicon)
39+
40+
return ScriptResponse.success(
41+
result=favicon_hash,
42+
message=f"Successfully made favicon hash of {url}! "
43+
f"Use https://www.shodan.io/search?query=http.favicon.hash:{favicon_hash}",
44+
)
+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
certifi==2020.6.20
2+
chardet==3.0.4
3+
idna==2.10
4+
mmh3==2.5.1
5+
pkg-resources==0.0.0
6+
requests==2.24.0
7+
urllib3==1.25.9

0 commit comments

Comments
 (0)