Updated requirements and added check for WinRM

Since Nmap reports WinRM as HTTP, the port scan plugins now do a few additional checks on ports 5985 and 5986 to avoid running needless HTTP plugins if the services are just WinRM.

Updated the project dependencies to match.
This commit is contained in:
Tib3rius 2022-08-07 14:10:31 -04:00
parent 28521f6e00
commit ef53ebb01d
4 changed files with 30 additions and 3 deletions

View File

@ -1,6 +1,6 @@
from autorecon.plugins import PortScan
from autorecon.config import config
import re
import re, requests
class AllTCPPortScan(PortScan):
@ -33,7 +33,18 @@ class AllTCPPortScan(PortScan):
if match:
target.info('Discovered open port {bmagenta}tcp/' + match.group(1) + '{rst} on {byellow}' + target.address + '{rst}', verbosity=1)
service = target.extract_service(line)
if service:
# Check if HTTP service appears to be WinRM. If so, override service name as wsman.
if service.name == 'http' and service.port in [5985, 5986]:
wsman = requests.get(('https' if service.secure else 'http') + '://' + target.address + ':' + str(service.port) + '/wsman', verify=False)
if wsman.status_code == 405:
service.name = 'wsman'
wsman = requests.post(('https' if service.secure else 'http') + '://' + target.address + ':' + str(service.port) + '/wsman', verify=False)
else:
if wsman.status_code == 401:
service.name = 'wsman'
services.append(service)
else:
break

View File

@ -22,5 +22,17 @@ class QuickTCPPortScan(PortScan):
process, stdout, stderr = await target.execute('nmap {nmap_extra} -sV -sC --version-all' + traceroute_os + ' -oN "{scandir}/_quick_tcp_nmap.txt" -oX "{scandir}/xml/_quick_tcp_nmap.xml" {address}', blocking=False)
services = await target.extract_services(stdout)
for service in services:
# Check if HTTP service appears to be WinRM. If so, override service name as wsman.
if service.name == 'http' and service.port in [5985, 5986]:
wsman = requests.get(('https' if service.secure else 'http') + '://' + target.address + ':' + str(service.port) + '/wsman', verify=False)
if wsman.status_code == 405:
service.name = 'wsman'
wsman = requests.post(('https' if service.secure else 'http') + '://' + target.address + ':' + str(service.port) + '/wsman', verify=False)
else:
if wsman.status_code == 401:
service.name = 'wsman'
await process.wait()
return services

View File

@ -10,9 +10,11 @@ packages = [
]
[tool.poetry.dependencies]
python = "^3.7"
python = "^3.8"
appdirs = "^1.4.4"
colorama = "^0.4.4"
colorama = "^0.4.5"
impacket = "^0.10.0"
requests = "^2.28.1"
toml = "^0.10.2"
Unidecode = "^1.3.1"

View File

@ -1,4 +1,6 @@
appdirs
colorama
impacket
requests
toml
unidecode