exploitfarm 2.2.5__tar.gz → 2.2.7__tar.gz
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.
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/PKG-INFO +4 -14
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/__init__.py +1 -1
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/local_executor.py +1 -1
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/tui/config.py +1 -1
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/xfarm.py +19 -10
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm.egg-info/PKG-INFO +4 -14
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm.egg-info/SOURCES.txt +2 -4
- exploitfarm-2.2.7/exploitfarm.egg-info/entry_points.txt +2 -0
- exploitfarm-2.2.7/pyproject.toml +43 -0
- exploitfarm-2.2.5/MANIFEST.in +0 -1
- exploitfarm-2.2.5/requirements.txt +0 -16
- exploitfarm-2.2.5/setup.py +0 -37
- exploitfarm-2.2.5/xfarm +0 -6
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/README.md +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/__main__.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/_init_exposed.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/attack_storage.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/autotune.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/connection.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/core_orchestration.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/models/__init__.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/models/client.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/models/dbtypes.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/models/enums.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/models/exploit.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/models/exploit_template.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/models/flags.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/models/groups.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/models/response.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/models/service.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/models/submitter.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/models/teams.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/team_provider.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/tui/__init__.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/tui/exploitdownload.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/tui/exploitinit.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/tui/group_prejoin.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/tui/group_select.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/tui/login.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/tui/shared_attack_group.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/tui/startxploit.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/tui/template.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/utils/__init__.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/utils/cmd.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/utils/config.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/utils/exploit.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/utils/paths.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/utils/reqs.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/utils/templates.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/utils/threadpool.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/utils/windows_close_fix.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm/xploit.py +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm.egg-info/dependency_links.txt +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm.egg-info/requires.txt +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/exploitfarm.egg-info/top_level.txt +0 -0
- {exploitfarm-2.2.5 → exploitfarm-2.2.7}/setup.cfg +0 -0
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: exploitfarm
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.7
|
|
4
4
|
Summary: Exploit Farm client
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
Author-email: Pwnzer0tt1 <pwnzer0tt1@poliba.it>
|
|
6
|
+
License-Expression: GPL-3.0-or-later
|
|
7
|
+
Project-URL: Homepage, https://github.com/pwnzer0tt1/exploitfarm
|
|
8
8
|
Classifier: Programming Language :: Python :: 3
|
|
9
|
-
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
10
9
|
Classifier: Operating System :: OS Independent
|
|
11
10
|
Requires-Python: >=3.10
|
|
12
11
|
Description-Content-Type: text/markdown
|
|
@@ -25,15 +24,6 @@ Requires-Dist: aiohttp>=3.14.3
|
|
|
25
24
|
Requires-Dist: textual>=8.2.8
|
|
26
25
|
Requires-Dist: typer>=0.27.2
|
|
27
26
|
Requires-Dist: platformdirs>=4.11.7
|
|
28
|
-
Dynamic: author
|
|
29
|
-
Dynamic: author-email
|
|
30
|
-
Dynamic: classifier
|
|
31
|
-
Dynamic: description
|
|
32
|
-
Dynamic: description-content-type
|
|
33
|
-
Dynamic: home-page
|
|
34
|
-
Dynamic: requires-dist
|
|
35
|
-
Dynamic: requires-python
|
|
36
|
-
Dynamic: summary
|
|
37
27
|
|
|
38
28
|
# ExploitFarm Python Library and CLI
|
|
39
29
|
|
|
@@ -538,7 +538,7 @@ class LocalExecutor(BaseExecutor):
|
|
|
538
538
|
|
|
539
539
|
try:
|
|
540
540
|
handle = msvcrt.get_osfhandle(proc.stdout.fileno())
|
|
541
|
-
avail = wintypes.DWORD()
|
|
541
|
+
avail = wintypes.DWORD() # pylint: disable=no-value-for-parameter # stub omits the default
|
|
542
542
|
res = ctypes.windll.kernel32.PeekNamedPipe(handle, None, 0, None, ctypes.byref(avail), None)
|
|
543
543
|
if res and avail.value > 0:
|
|
544
544
|
chunk = os.read(proc.stdout.fileno(), min(avail.value, 4096))
|
|
@@ -268,7 +268,7 @@ def inital_config_setup(config: ClientConfig, interactive: bool = True) -> bool:
|
|
|
268
268
|
):
|
|
269
269
|
if not interactive:
|
|
270
270
|
print(
|
|
271
|
-
"[bold red]Missing configuration, set it with 'xfarm config'
|
|
271
|
+
"[bold red]Missing configuration, set it with 'xfarm config edit'[/]"
|
|
272
272
|
)
|
|
273
273
|
exit(1)
|
|
274
274
|
if not _run_setup_config(config):
|
|
@@ -118,13 +118,13 @@ def handle_service_not_found(exploit_config: ExploitConfig):
|
|
|
118
118
|
close_cli()
|
|
119
119
|
print(
|
|
120
120
|
f"[bold red]Service {escape(str(exploit_config.service))} not found "
|
|
121
|
-
"use 'xfarm
|
|
121
|
+
"use 'xfarm edit'[/]"
|
|
122
122
|
)
|
|
123
123
|
decision = typer.confirm(
|
|
124
|
-
"Do you want to
|
|
124
|
+
"Do you want to run 'xfarm edit' now?", default=True
|
|
125
125
|
)
|
|
126
126
|
if decision:
|
|
127
|
-
|
|
127
|
+
_exploit_setup(True)
|
|
128
128
|
restart_program()
|
|
129
129
|
|
|
130
130
|
|
|
@@ -230,8 +230,8 @@ def initial_setup(login=True, require_running=False):
|
|
|
230
230
|
return connection
|
|
231
231
|
|
|
232
232
|
|
|
233
|
-
@config.command(help="Edit the client settings")
|
|
234
|
-
def
|
|
233
|
+
@config.command(name="edit", help="Edit the client settings")
|
|
234
|
+
def config_edit(
|
|
235
235
|
address: str = typer.Option(None, help="The address of the server"),
|
|
236
236
|
port: int = typer.Option(None, help="The port of the server"),
|
|
237
237
|
nickname: str = typer.Option(None, help="The nickname of this client"),
|
|
@@ -347,7 +347,7 @@ def start(
|
|
|
347
347
|
if not initial_setup(require_running=True):
|
|
348
348
|
print(
|
|
349
349
|
"[bold red]Can't connect to the server! "
|
|
350
|
-
"The server is needed to start the exploit! Configure with 'xfarm config'[/]"
|
|
350
|
+
"The server is needed to start the exploit! Configure with 'xfarm config edit'[/]"
|
|
351
351
|
)
|
|
352
352
|
close_cli()
|
|
353
353
|
|
|
@@ -967,14 +967,14 @@ def template_edit(
|
|
|
967
967
|
|
|
968
968
|
|
|
969
969
|
@app.command(help="Edit the exploit config")
|
|
970
|
-
def edit(
|
|
970
|
+
def edit(
|
|
971
971
|
name: Optional[str] = typer.Option(None, help="The name of the exploit"),
|
|
972
972
|
service: Optional[UUID] = typer.Option(None, help="The service of the exploit"),
|
|
973
973
|
language: Optional[Language] = typer.Option(
|
|
974
974
|
None, help="The language of the exploit"
|
|
975
975
|
),
|
|
976
976
|
):
|
|
977
|
-
|
|
977
|
+
_exploit_setup(True, name, service, language)
|
|
978
978
|
|
|
979
979
|
|
|
980
980
|
@app.command(help="Commit and push the current version of the exploit to the server")
|
|
@@ -1313,6 +1313,15 @@ def init(
|
|
|
1313
1313
|
language: Optional[Language] = typer.Option(
|
|
1314
1314
|
None, help="The language of the exploit"
|
|
1315
1315
|
),
|
|
1316
|
+
):
|
|
1317
|
+
_exploit_setup(False, name, service, language)
|
|
1318
|
+
|
|
1319
|
+
|
|
1320
|
+
def _exploit_setup(
|
|
1321
|
+
edit: bool,
|
|
1322
|
+
name: Optional[str] = None,
|
|
1323
|
+
service: Optional[UUID] = None,
|
|
1324
|
+
language: Optional[Language] = None,
|
|
1316
1325
|
):
|
|
1317
1326
|
connection = initial_setup(login=False)
|
|
1318
1327
|
templates = []
|
|
@@ -1352,7 +1361,7 @@ def init(
|
|
|
1352
1361
|
if final_status == 0:
|
|
1353
1362
|
print(
|
|
1354
1363
|
f"[bold green]Exploit configuration {'created' if not edit else 'edited'} locally![/]\n"
|
|
1355
|
-
"[bold yellow]Use 'xfarm
|
|
1364
|
+
"[bold yellow]Use 'xfarm push' or 'xfarm start' to upload it to the backend.[/]"
|
|
1356
1365
|
)
|
|
1357
1366
|
elif final_status == 99:
|
|
1358
1367
|
print(
|
|
@@ -1401,7 +1410,7 @@ def init(
|
|
|
1401
1410
|
expl_conf.write()
|
|
1402
1411
|
print(
|
|
1403
1412
|
f"[bold green]Exploit configuration {'created' if not edit else 'edited'} locally![/]\n"
|
|
1404
|
-
"[bold yellow]Use 'xfarm
|
|
1413
|
+
"[bold yellow]Use 'xfarm push' or 'xfarm start' to upload it to the backend.[/]"
|
|
1405
1414
|
)
|
|
1406
1415
|
|
|
1407
1416
|
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: exploitfarm
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.7
|
|
4
4
|
Summary: Exploit Farm client
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
Author-email: Pwnzer0tt1 <pwnzer0tt1@poliba.it>
|
|
6
|
+
License-Expression: GPL-3.0-or-later
|
|
7
|
+
Project-URL: Homepage, https://github.com/pwnzer0tt1/exploitfarm
|
|
8
8
|
Classifier: Programming Language :: Python :: 3
|
|
9
|
-
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
10
9
|
Classifier: Operating System :: OS Independent
|
|
11
10
|
Requires-Python: >=3.10
|
|
12
11
|
Description-Content-Type: text/markdown
|
|
@@ -25,15 +24,6 @@ Requires-Dist: aiohttp>=3.14.3
|
|
|
25
24
|
Requires-Dist: textual>=8.2.8
|
|
26
25
|
Requires-Dist: typer>=0.27.2
|
|
27
26
|
Requires-Dist: platformdirs>=4.11.7
|
|
28
|
-
Dynamic: author
|
|
29
|
-
Dynamic: author-email
|
|
30
|
-
Dynamic: classifier
|
|
31
|
-
Dynamic: description
|
|
32
|
-
Dynamic: description-content-type
|
|
33
|
-
Dynamic: home-page
|
|
34
|
-
Dynamic: requires-dist
|
|
35
|
-
Dynamic: requires-python
|
|
36
|
-
Dynamic: summary
|
|
37
27
|
|
|
38
28
|
# ExploitFarm Python Library and CLI
|
|
39
29
|
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
MANIFEST.in
|
|
2
1
|
README.md
|
|
3
|
-
|
|
4
|
-
setup.py
|
|
5
|
-
xfarm
|
|
2
|
+
pyproject.toml
|
|
6
3
|
exploitfarm/__init__.py
|
|
7
4
|
exploitfarm/__main__.py
|
|
8
5
|
exploitfarm/_init_exposed.py
|
|
@@ -17,6 +14,7 @@ exploitfarm/xploit.py
|
|
|
17
14
|
exploitfarm.egg-info/PKG-INFO
|
|
18
15
|
exploitfarm.egg-info/SOURCES.txt
|
|
19
16
|
exploitfarm.egg-info/dependency_links.txt
|
|
17
|
+
exploitfarm.egg-info/entry_points.txt
|
|
20
18
|
exploitfarm.egg-info/requires.txt
|
|
21
19
|
exploitfarm.egg-info/top_level.txt
|
|
22
20
|
exploitfarm/models/__init__.py
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=77"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "exploitfarm"
|
|
7
|
+
# Replaced with the release tag by CI (.github/workflows/release.yml)
|
|
8
|
+
version = "2.2.7"
|
|
9
|
+
description = "Exploit Farm client"
|
|
10
|
+
readme = "README.md"
|
|
11
|
+
authors = [{ name = "Pwnzer0tt1", email = "pwnzer0tt1@poliba.it" }]
|
|
12
|
+
license = "GPL-3.0-or-later"
|
|
13
|
+
requires-python = ">=3.10"
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Programming Language :: Python :: 3",
|
|
16
|
+
"Operating System :: OS Independent",
|
|
17
|
+
]
|
|
18
|
+
dependencies = [
|
|
19
|
+
"requests>=2.34.2",
|
|
20
|
+
"urllib3>=2.7.0",
|
|
21
|
+
"python-dateutil>=2.9.0.post0",
|
|
22
|
+
"pydantic>=2",
|
|
23
|
+
"typing-extensions>=4.16.0",
|
|
24
|
+
"fasteners>=0.20",
|
|
25
|
+
"toml>=0.10.2",
|
|
26
|
+
"psutil>=7.2.2",
|
|
27
|
+
"dirhash>=0.5.0",
|
|
28
|
+
"requests-toolbelt>=1.0.0",
|
|
29
|
+
"python-socketio[asyncio_client]>=5.16.4",
|
|
30
|
+
"aiohttp>=3.14.3",
|
|
31
|
+
"textual>=8.2.8",
|
|
32
|
+
"typer>=0.27.2",
|
|
33
|
+
"platformdirs>=4.11.7",
|
|
34
|
+
]
|
|
35
|
+
|
|
36
|
+
[project.urls]
|
|
37
|
+
Homepage = "https://github.com/pwnzer0tt1/exploitfarm"
|
|
38
|
+
|
|
39
|
+
[project.scripts]
|
|
40
|
+
xfarm = "exploitfarm.xfarm:run"
|
|
41
|
+
|
|
42
|
+
[tool.setuptools.packages.find]
|
|
43
|
+
include = ["exploitfarm*"]
|
exploitfarm-2.2.5/MANIFEST.in
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
include requirements.txt
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
requests>=2.34.2
|
|
2
|
-
urllib3>=2.7.0
|
|
3
|
-
python-dateutil>=2.9.0.post0
|
|
4
|
-
pydantic>=2
|
|
5
|
-
typing-extensions>=4.16.0
|
|
6
|
-
fasteners>=0.20
|
|
7
|
-
toml>=0.10.2
|
|
8
|
-
psutil>=7.2.2
|
|
9
|
-
dirhash>=0.5.0
|
|
10
|
-
requests-toolbelt>=1.0.0
|
|
11
|
-
python-socketio[asyncio_client]>=5.16.4
|
|
12
|
-
aiohttp>=3.14.3
|
|
13
|
-
textual>=8.2.8
|
|
14
|
-
typer>=0.27.2
|
|
15
|
-
platformdirs>=4.11.7
|
|
16
|
-
|
exploitfarm-2.2.5/setup.py
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import setuptools
|
|
2
|
-
|
|
3
|
-
with open("README.md", "r", encoding="utf-8") as fh:
|
|
4
|
-
long_description = fh.read()
|
|
5
|
-
|
|
6
|
-
with open("requirements.txt", "r", encoding="utf-8") as f:
|
|
7
|
-
required = [
|
|
8
|
-
ele.strip()
|
|
9
|
-
for ele in f.read().splitlines()
|
|
10
|
-
if not ele.strip().startswith("#") and ele.strip() != ""
|
|
11
|
-
]
|
|
12
|
-
|
|
13
|
-
VERSION = "2.2.5"
|
|
14
|
-
|
|
15
|
-
setuptools.setup(
|
|
16
|
-
name="exploitfarm",
|
|
17
|
-
version=VERSION
|
|
18
|
-
if "{" not in VERSION
|
|
19
|
-
else "0.0.0", # uv pip install -U . --no-cache-dir for testing
|
|
20
|
-
author="Pwnzer0tt1",
|
|
21
|
-
author_email="pwnzer0tt1@poliba.it",
|
|
22
|
-
scripts=["xfarm"],
|
|
23
|
-
py_modules=["exploitfarm"],
|
|
24
|
-
install_requires=required,
|
|
25
|
-
include_package_data=True,
|
|
26
|
-
description="Exploit Farm client",
|
|
27
|
-
long_description=long_description,
|
|
28
|
-
long_description_content_type="text/markdown",
|
|
29
|
-
url="https://github.com/pwnzer0tt1/exploitfarm",
|
|
30
|
-
packages=setuptools.find_packages(),
|
|
31
|
-
classifiers=[
|
|
32
|
-
"Programming Language :: Python :: 3",
|
|
33
|
-
"License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)",
|
|
34
|
-
"Operating System :: OS Independent",
|
|
35
|
-
],
|
|
36
|
-
python_requires=">=3.10",
|
|
37
|
-
)
|
exploitfarm-2.2.5/xfarm
DELETED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|