Skip to content

Commit 9e6c83c

Browse files
Merge pull request #1380 from domwhewell-sage/code_repository_regex
New Module: Code Repository
2 parents 30f72d7 + 17bb580 commit 9e6c83c

File tree

3 files changed

+108
-0
lines changed

3 files changed

+108
-0
lines changed

bbot/core/flags.py

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
"service-enum": "Identifies protocols running on open ports",
1515
"slow": "May take a long time to complete",
1616
"social-enum": "Enumerates social media",
17+
"repo-enum": "Enumerates code repositories",
1718
"subdomain-enum": "Enumerates subdomains",
1819
"subdomain-hijack": "Detects hijackable subdomains",
1920
"web-basic": "Basic, non-intrusive web scan functionality",

bbot/modules/code_repository.py

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import re
2+
from bbot.modules.base import BaseModule
3+
4+
5+
class code_repository(BaseModule):
6+
watched_events = ["URL_UNVERIFIED"]
7+
produced_events = ["CODE_REPOSITORY"]
8+
meta = {"description": "Look for code repository links in webpages"}
9+
flags = ["passive", "safe", "repo-enum"]
10+
11+
# platform name : (regex, case_sensitive)
12+
code_repositories = {
13+
"git": [
14+
(r"github.com/[a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+", False),
15+
(r"gitlab.(?:com|org)/[a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+", False),
16+
],
17+
"docker": (r"hub.docker.com/r/[a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+", False),
18+
}
19+
20+
scope_distance_modifier = 1
21+
22+
async def setup(self):
23+
self.compiled_regexes = {}
24+
for k, v in self.code_repositories.items():
25+
if isinstance(v, list):
26+
self.compiled_regexes[k] = [(re.compile(pattern), c) for pattern, c in v]
27+
else:
28+
pattern, c = v
29+
self.compiled_regexes[k] = (re.compile(pattern), c)
30+
return True
31+
32+
async def handle_event(self, event):
33+
for platform, regexes in self.compiled_regexes.items():
34+
if not isinstance(regexes, list):
35+
regexes = [regexes]
36+
for regex, case_sensitive in regexes:
37+
for match in regex.finditer(event.data):
38+
url = match.group()
39+
if not case_sensitive:
40+
url = url.lower()
41+
repo_event = self.make_event(
42+
{"url": f"https://{url}"},
43+
"CODE_REPOSITORY",
44+
tags=platform,
45+
source=event,
46+
)
47+
repo_event.scope_distance = event.scope_distance
48+
await self.emit_event(repo_event)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
from .base import ModuleTestBase
2+
3+
4+
class TestCodeRepository(ModuleTestBase):
5+
targets = ["http://127.0.0.1:8888"]
6+
modules_overrides = ["httpx", "excavate", "code_repository"]
7+
8+
async def setup_after_prep(self, module_test):
9+
expect_args = {"method": "GET", "uri": "/"}
10+
respond_args = {
11+
"response_data": """
12+
<html>
13+
<a href="https://github.com/blacklanternsecurity/bbot"/>
14+
<a href="https://gitlab.com/blacklanternsecurity/bbot"/>
15+
<a href="https://gitlab.org/blacklanternsecurity/bbot"/>
16+
<a href="https://hub.docker.com/r/blacklanternsecurity/bbot"/>
17+
</html>
18+
"""
19+
}
20+
module_test.set_expect_requests(expect_args=expect_args, respond_args=respond_args)
21+
22+
def check(self, module_test, events):
23+
assert 4 == len([e for e in events if e.type == "CODE_REPOSITORY"])
24+
assert 1 == len(
25+
[
26+
e
27+
for e in events
28+
if e.type == "CODE_REPOSITORY"
29+
and "git" in e.tags
30+
and e.data["url"] == "https://github.com/blacklanternsecurity/bbot"
31+
]
32+
)
33+
assert 1 == len(
34+
[
35+
e
36+
for e in events
37+
if e.type == "CODE_REPOSITORY"
38+
and "git" in e.tags
39+
and e.data["url"] == "https://gitlab.com/blacklanternsecurity/bbot"
40+
]
41+
)
42+
assert 1 == len(
43+
[
44+
e
45+
for e in events
46+
if e.type == "CODE_REPOSITORY"
47+
and "git" in e.tags
48+
and e.data["url"] == "https://gitlab.org/blacklanternsecurity/bbot"
49+
]
50+
)
51+
assert 1 == len(
52+
[
53+
e
54+
for e in events
55+
if e.type == "CODE_REPOSITORY"
56+
and "docker" in e.tags
57+
and e.data["url"] == "https://hub.docker.com/r/blacklanternsecurity/bbot"
58+
]
59+
)

0 commit comments

Comments
 (0)