list SMB shares
Project description
smbls
This is a simple Impacket-based tool to check a set of credentials against many Windows hosts and get permission for SMB shares.
For the input, you give it a list of IPs/hostnames and a set of credentials, which are the domain, username, and either password or LM/NTLM hashes. The output is a JSON array of host information, including errors, SMB metadata, and information about each share, including whether the account has read access.
There are already many ways to do this. This tool was written to perform in large, heterogeneous networks where existing tools ended up being slow or unreliable in practice. It performs well in this environment because:
- It's reliable due to comprehensive error checking and simple code
- It's very fast due to parallelization
- The output is JSON
The main limitation is that it does not check whether a share is writeable or not, because the known way to do that requires attempting to write to it.
Install
pip install smbls
Alternatively, you can just drop smbls/__init__.py as smbls.py
on a box with python3.9+ and Impacket installed and run that.
Usage
Create targets file:
$ printf '10.0.0.1\n10.0.0.2\n...' > targets.txt
Or for CIDR notation, consider
$ nmap -sL -n 10.0.0.0/24 | awk '/scan report for/{print $5}' > targets.txt
For a single-user scan:
$ smbls -c exampledomain/exampleuser:examplepassword targets.txt -o out.json
Or for a multi-user scan:
1. create creds file:
$ echo 'exampledomain/exampleuser:examplepassword' > creds.txt
$ echo 'localhost/exampleuser#aad3b435b51404eeaad3b435b51404ee:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' >> creds.txt
2. run scan:
$ smbls -C creds.txt targets.txt -O example_dir
Output parsing
Here are some shell-based examples.
Get list of targets with admin access:
jq -r '.[]|select(.admin)|.info.getServerDNSHostName' out.json
Get list of share names:
jq -r '.[].shares[]?|.name' out.json | sort -iu
Find hosts with given share name:
# Search for D drives
jq -r 'path(..|select(.name?==$name))[0]' out.json --arg name D
List hosts with corresponding readable shares:
jq -r '[.[] | select(.shares) | {ip: (.info.getRemoteHost), host: (.info.getServerDNSHostName), readshares: [.shares[] | select(.access != "") | {name: .name, type: .type, remark: .remark}]} | select(.readshares != [])]' out.json
# With less output
jq -r '.[] | select(.shares) | {host: (.info.getServerDNSHostName), readshares: [.shares[] | select(.access != "") | .name]} | select(.readshares != [])' out.json
# Excluding print$ and IPC$ shares:
jq -r '.[] | select(.shares) | {host: (.info.getServerDNSHostName), readshares: [.shares[] | select(.access != "" and ([.name] | inside($badsharenames) | not)) | .name]} | select(.readshares != [])' --argjson badsharenames '["print$", "IPC$"]' out.json
List hosts that failed auth:
jq -r 'path(.[]|select(.errtype == "auth"))[0]' out.json
List hosts that had a connection error (to remove them from future scans):
jq -r 'path(.[]|select(.errtype == "conn"))[0]' out.json
Get results for hosts that succeeded auth:
jq -r '.[]|select(.errtype == "")' out.json
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file smbls-1.1.0.tar.gz
.
File metadata
- Download URL: smbls-1.1.0.tar.gz
- Upload date:
- Size: 6.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b06de7dc1a53e531c2e5f2e97de6b9e06277d5b7d5bd56a1ca13548226f5e2a4 |
|
MD5 | 5c818854523aad3362221346e43cdb91 |
|
BLAKE2b-256 | 67b4a96d5c6fe1e50c129b2605e2aa9ca63cdbfb1f33891189aaf20779f4ad79 |
File details
Details for the file smbls-1.1.0-py3-none-any.whl
.
File metadata
- Download URL: smbls-1.1.0-py3-none-any.whl
- Upload date:
- Size: 6.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d94cfe50a0c076c4fda9d49075cbb14b2593dc2eef30c513f3e7819f05921bd9 |
|
MD5 | c225f5c27f8cd246d23d099d806150c3 |
|
BLAKE2b-256 | 8313118de3ade8e2ffa81cc44dafba2f250b113293133de9e798ef5bcce555c5 |