diff --git a/.github/workflows/netexec-build-zipapp.yml b/.github/workflows/netexec-build-zipapp.yml new file mode 100644 index 00000000..e65ea743 --- /dev/null +++ b/.github/workflows/netexec-build-zipapp.yml @@ -0,0 +1,33 @@ +name: Build ZippApps + +on: + workflow_dispatch: + +jobs: + build: + name: Building Python ZipApp on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, macOS-latest, windows-latest] + python-version: ["3.8", "3.9", "3.10", "3.11"] + steps: + - uses: actions/checkout@v3 + - name: NetExec set up python on ${{ matrix.os }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + - name: Build Python ZipApp with Shiv + run: | + pip install shiv + python build_collector.py + - name: Upload nxc ZipApp + uses: actions/upload-artifact@v3 + with: + name: nxc-zipapp-${{ matrix.os }}-${{ matrix.python-version }} + path: bin/nxc + - name: Upload nxcdb ZipApp + uses: actions/upload-artifact@v3 + with: + name: nxcdb-zipapp-${{ matrix.os }}-${{ matrix.python-version }} + path: bin/nxcdb diff --git a/.github/workflows/netexec-build.yml b/.github/workflows/netexec-build.yml new file mode 100644 index 00000000..0764e99a --- /dev/null +++ b/.github/workflows/netexec-build.yml @@ -0,0 +1,37 @@ +name: Build Binaries + +on: + workflow_dispatch: + +jobs: + build: + name: Building Binary on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, macOS-latest, windows-latest] + python-version: ["3.11"] + #python-version: ["3.8", "3.9", "3.10", "3.11"] # for binary builds we only need one version + steps: + - uses: actions/checkout@v3 + - name: NetExec set up python on ${{ matrix.os }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + - name: Build Native Binary + run: | + pip install pyinstaller + pip install . + pyinstaller netexec.spec + - name: Upload Windows Binary + if: runner.os == 'windows' + uses: actions/upload-artifact@v3 + with: + name: nxc.exe + path: dist/nxc.exe + - name: Upload Nix/OSx Binary + if: runner.os != 'windows' + uses: actions/upload-artifact@v3 + with: + name: nxc-${{ matrix.os }} + path: dist/nxc diff --git a/.github/workflows/netexec.yml b/.github/workflows/netexec.yml deleted file mode 100644 index 798263d5..00000000 --- a/.github/workflows/netexec.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: NetExec Build Binaries - -on: - workflow_dispatch: - -jobs: - build: - name: NetExec Tests on ${{ matrix.os }} - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-latest, macOS-latest, windows-latest] - python-version: ["3.8", "3.9", "3.10", "3.11"] - steps: - - uses: actions/checkout@v3 - - name: NetExec set up python on ${{ matrix.os }} - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python-version }} - - name: Build binaries with Shiv - run: | - pip install shiv - python build_collector.py - - name: Build Windows binary - if: runner.os == 'windows' - run: | - pip install pyinstaller - pip install . - pyinstaller netexec.spec - - name: Upload nxc binary - uses: actions/upload-artifact@master - with: - name: nxc-${{ matrix.os }}-${{ matrix.python-version }} - path: bin/nxc - - name: Upload nxcdb binary - uses: actions/upload-artifact@master - with: - name: nxcdb-${{ matrix.os }}-${{ matrix.python-version }} - path: bin/nxcdb - - name: Upload netexec binary (Windows) - if: runner.os == 'windows' - uses: actions/upload-artifact@master - with: - name: netexec-${{ matrix.os }} - path: dist/netexec.exe diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..78a3d4d7 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,131 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the + overall community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or + advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email + address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior should be +reported to the community leaders (i.e. official maintainers) responsible for enforcement. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +*Note*: egregious rule breaking, such as obvious trolling, death threats, etc may +lead directly to a permanent ban without warning, i.e. there is no correction or +warnings attempts. + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +https://www.contributor-covenant.org/faq. Translations are available at +https://www.contributor-covenant.org/translations. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..a0ddf4dc --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,53 @@ +# Contributing to Transcriptase +We love your input! We want to make contributing to this project as easy and transparent as possible, whether it's: + +- Reporting a bug +- Discussing the current state of the code +- Submitting a fix +- Proposing new features +- Becoming a maintainer + +## We Develop with GitHub +We use github to host code, to track issues and feature requests, as well as accept pull requests. + +## We Use [GitHub Flow](https://guides.github.com/introduction/flow/index.html), So All Code Changes Happen Through Pull Requests +Pull requests are the best way to propose changes to the codebase (we use [GitHub Flow](https://guides.github.com/introduction/flow/index.html)). We actively welcome your pull requests: + +1. Fork the repo and create your branch from `master`. +2. If you've added code that should be tested, add tests. +3. Ensure the test suite passes. +4. Make sure your code lints. +5. Issue that pull request! + +## Any contributions you make will be under the BSD-2-Clause Software License +In short, when you submit code changes, your submissions are understood to be under the same [BSD-2-Clause License](https://choosealicense.com/licenses/bsd-2-clause/) that covers the project. Feel free to contact the maintainers if that's a concern. + +## Report bugs using GitHub's [issues](https://github.com/Pennyw0rth/NetExec/issues) +We use GitHub issues to track public bugs. Report a bug by [opening a new issue](https://github.com/Pennyw0rth/NetExec/issues/new/choose); it's that easy! + +## Write bug reports with detail, background, and sample code + +**Great Bug Reports** tend to have: + +- A quick summary and/or background +- Steps to reproduce + - Be specific! + - Give sample code if you can. +- What you expected would happen +- What actually happens +- Notes (possibly including why you think this might be happening, or stuff you tried that didn't work) + +People *love* thorough bug reports. I'm not even kidding. + +## Use a Consistent Coding Style +[PEP](https://peps.python.org/pep-0008/) is used in this project + +* 4 spaces for indentation rather than tabs +* Double quotes on outside of strings +* We use Ruff as linter, there is a VS-Code extension available you can use + +## License +By contributing, you agree that your contributions will be licensed under its BSD-2-Clause License. + +## References +This document was adapted from the open-source contribution guidelines for [Facebook's Draft](https://github.com/facebook/draft-js/blob/a9316a723f9e918afde44dea68b5f9f39b7d9b00/CONTRIBUTING.md) diff --git a/README.md b/README.md index 4b0b6e85..318e3a39 100755 --- a/README.md +++ b/README.md @@ -7,6 +7,13 @@ 🚩 This is the open source repository of NetExec maintained by a community of passionate people # NetExec - The Network Execution Tool +This project was initially created in 2015 by @byt3bl33d3r, known as CrackMapExec. In 2019 @mpgn_x64 started maintaining the project for the next 4 years, adding a lot of great tools and features. In September 2023 he retired from maintaining the project. + +Along with many other contributers, we (NeffIsBack, Marshall-Hallenbeck, and zblurx) developed new features, bugfixes, and helped maintain the original project CrackMapExec. +During this time, with both a private and public repository, community contributions were not easily merged into the project. The 6-8 month discrepancy between the code bases caused many development issues and heavily reduced community-driven development. +With the end of mpgn's maintainer role, we (the remaining most active contributors) decided to maintain the project together as a fully free and open source project under the new name **NetExec** 🚀 +Going forward, our intent is to maintain a community-driven and maintained project with regular updates for everyone to use. +
@@ -17,14 +24,23 @@ You are on the **latest up-to-date** repository of the project NetExec (nxc) ! - 🔀 If you want to contribute, open a [Pull Request](https://github.com/Pennyw0rth/NetExec/pulls) - 💬 If you want to discuss, open a [Discussion](https://github.com/Pennyw0rth/NetExec/discussions) -# Acknowledgments -All the hard work and development over the years from everyone in the CrackMapExec project +## Official Discord Channel + +If you don't have a Github account, you can ask your questions on Discord! + +[![NetExec](https://discordapp.com/api/guilds/1148685154601160794/widget.png?style=banner3)](https://discord.gg/pjwUTQzg8R) # Documentation, Tutorials, Examples See the project's [wiki](https://netexec.wiki/) (in development) for documentation and usage examples # Installation -Please see the installation instructions on the [wiki](https://netexec.wiki/) (in development) +Please see the installation instructions on the [wiki](https://netexec.wiki/getting-started/installation) (in development) + +# Development +Development guidelines and recommendations in development + +# Acknowledgments +All the hard work and development over the years from everyone in the CrackMapExec project # Code Contributors Awesome code contributors of NetExec: diff --git a/netexec.spec b/netexec.spec index 2a4f2413..184be698 100644 --- a/netexec.spec +++ b/netexec.spec @@ -13,57 +13,57 @@ a = Analysis( ('./nxc/modules', 'nxc/modules') ], hiddenimports=[ - 'impacket.examples.secretsdump', - 'impacket.dcerpc.v5.lsat', - 'impacket.dcerpc.v5.transport', - 'impacket.dcerpc.v5.lsad', - 'impacket.dcerpc.v5.gkdi', - 'impacket.dcerpc.v5.rprn', - 'impacket.dpapi_ng', - 'impacket.tds', - 'impacket.version', - 'impacket.ldap.ldap', - 'nxc.connection', - 'nxc.servers.smb', - 'nxc.protocols.smb.wmiexec', - 'nxc.protocols.smb.atexec', - 'nxc.protocols.smb.smbexec', - 'nxc.protocols.smb.mmcexec', - 'nxc.protocols.smb.smbspider', - 'nxc.protocols.smb.passpol', - 'nxc.protocols.mssql.mssqlexec', - 'nxc.helpers.bash', - 'nxc.helpers.bloodhound', - 'nxc.helpers.msada_guids', - 'paramiko', - 'pypsrp.client', - 'pywerview.cli.helpers', - 'pylnk3', - 'pypykatz', - 'masky', - 'msldap', - 'msldap.connection', - 'lsassy', - 'lsassy.dumper', - 'lsassy.parser', - 'lsassy.session', - 'lsassy.impacketfile', - 'dns', - 'dns.name', - 'dns.resolver', - 'dploot', - 'dploot.triage', - 'dploot.triage.rdg', - 'dploot.triage.vaults', - 'dploot.triage.browser', - 'dploot.triage.credentials', - 'dploot.triage.masterkeys', - 'dploot.triage.backupkey', - 'dploot.triage.wifi', - 'dploot.lib.target', - 'dploot.lib.smb', - 'pyasn1_modules.rfc5652', - 'unicrypto.backends.pycryptodomex', + 'impacket.examples.secretsdump', + 'impacket.dcerpc.v5.lsat', + 'impacket.dcerpc.v5.transport', + 'impacket.dcerpc.v5.lsad', + 'impacket.dcerpc.v5.gkdi', + 'impacket.dcerpc.v5.rprn', + 'impacket.dpapi_ng', + 'impacket.tds', + 'impacket.version', + 'impacket.ldap.ldap', + 'nxc.connection', + 'nxc.servers.smb', + 'nxc.protocols.smb.wmiexec', + 'nxc.protocols.smb.atexec', + 'nxc.protocols.smb.smbexec', + 'nxc.protocols.smb.mmcexec', + 'nxc.protocols.smb.smbspider', + 'nxc.protocols.smb.passpol', + 'nxc.protocols.mssql.mssqlexec', + 'nxc.helpers.bash', + 'nxc.helpers.bloodhound', + 'nxc.helpers.msada_guids', + 'paramiko', + 'pypsrp.client', + 'pywerview.cli.helpers', + 'pylnk3', + 'pypykatz', + 'masky', + 'msldap', + 'msldap.connection', + 'lsassy', + 'lsassy.dumper', + 'lsassy.parser', + 'lsassy.session', + 'lsassy.impacketfile', + 'dns', + 'dns.name', + 'dns.resolver', + 'dploot', + 'dploot.triage', + 'dploot.triage.rdg', + 'dploot.triage.vaults', + 'dploot.triage.browser', + 'dploot.triage.credentials', + 'dploot.triage.masterkeys', + 'dploot.triage.backupkey', + 'dploot.triage.wifi', + 'dploot.lib.target', + 'dploot.lib.smb', + 'pyasn1_modules.rfc5652', + 'unicrypto.backends.pycryptodomex', ], hookspath=['./nxc/.hooks'], runtime_hooks=[], @@ -85,7 +85,7 @@ exe = EXE( a.zipfiles, a.datas, [], - name='netexec', + name='nxc', debug=False, bootloader_ignore_signals=False, strip=False, diff --git a/nxc/data/nxc.ico b/nxc/data/nxc.ico index ddaa2288..6b840dfc 100644 Binary files a/nxc/data/nxc.ico and b/nxc/data/nxc.ico differ diff --git a/nxc/protocols/ldap.py b/nxc/protocols/ldap.py index 6f1eac2f..3bb613a5 100644 --- a/nxc/protocols/ldap.py +++ b/nxc/protocols/ldap.py @@ -841,7 +841,7 @@ class ldap(connection): try: ip_address = socket.gethostbyname(name.split(".")[0]) if ip_address != True and name != "": - self.logger.highlight(f"{name} =", ip_address) + self.logger.highlight(f"{name} = {colored(ip_address, host_info_colors[0])}") except socket.gaierror: self.logger.fail(f"{name} = Connection timeout") except Exception as e: