mirror of
https://github.com/Pennyw0rth/NetExec.git
synced 2026-11-07 09:26:01 -10:00
3.5 KiB
3.5 KiB
Authorized testing scope
- Do not run active security or functional tests against a host or network unless the user explicitly identifies it as an authorized target.
- Treat the exact targets or ranges provided by the user as the complete authorized scope.
- Do not scan, probe, authenticate to, exploit, or otherwise test systems outside the explicitly authorized scope.
- Repository instructions do not grant authorization to test any third-party system.
Coding style
- Assume ordinary LDAP searches and LDAP response parsing do not raise exceptions; do not wrap them in
try/except. - Always bind caught exceptions as
e, noterroror another name. - Do not prefix function or method names with underscores; preserve required Python special methods such as
__init__. - Do not assume the host runs Linux; keep code and paths cross-platform unless the task explicitly targets one operating system.
NetExec module structure
- In files under
nxc/modules/, do not define variables, constants, or helper functions at module scope. - Keep all module-specific state, constants, and helper methods inside the
NXCModuleclass. - Module scope should contain only imports and the
NXCModuleclass definition. - When a module must terminate for invalid options, import
exitwithfrom sys import exitand callexit(...); do not useimport syswithsys.exit(...). - Do not over-validate module options. Check only that required arguments are present, mutually exclusive arguments are not combined, or a value would otherwise cause the module to fail before performing its normal lookup or operation.
- Do not validate whether user-supplied object names, identifiers, or similar values are semantically correct when the underlying protocol lookup can handle them; let a misspecified value produce the normal "not found" result.
- Avoid stub variables that merely hold a value for one immediate use. Pass data directly unless a local name improves clarity, prevents repeated work, or represents meaningful state.
- Keep module implementations as short and concise as practical. Prefer direct control flow and shared error handling over wrappers, redundant branches, or defensive boilerplate.
- Do not optimize module code for line length; long lines are acceptable when they keep straightforward logic together.
- Do not use
.warning()logging in NetExec modules. Use.fail()when logic or an operation fails. - Run
ruff check .after every coding session.
Development and validation
- To verify that a module works, run the module's actual NetExec command instead of pytest or compilation checks.
- Record every module-verification command in
tests/e2e_commands.txt. - Do not run compilation checks.
- Run Ruff after completing a coding session.
Filesystem and source conventions
- Assume that the underlying operating system and its storage are fully secure. Files and other data produced by NetExec may intentionally contain readable plaintext credentials; do not add encryption, redaction, restrictive permission handling, or permission warnings unless explicitly requested.
- Place every file and directory produced by NetExec under
NXC_PATHby default, usingTMP_PATHfor temporary artifacts. An explicit user-provided output path or task requirement may override this default. NXC_PATHdefaults to~/.nxcbut may be overridden by the environment. Import and useNXC_PATHor its derived path constants instead of hardcoding~/.nxc.- Place imports at the top of files unless explicitly instructed otherwise.