82 lines
3.3 KiB
Python
82 lines
3.3 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import re
|
|
from os import listdir
|
|
from os.path import isdir
|
|
from audit.system.plugins.localaccount import profile, password_quality
|
|
|
|
|
|
class LocalAccount:
|
|
def __init__(self, arguments):
|
|
self._profile = profile()
|
|
self._passwd_quality = password_quality()
|
|
self._reports = dict()
|
|
|
|
# Create the report
|
|
self._constructReports()
|
|
|
|
def runAudit(self):
|
|
print("Running test for Local account")
|
|
self._analyzingProfile()
|
|
self._analyzingPasswordQuality()
|
|
|
|
def getReports(self) -> dict:
|
|
return self._reports
|
|
|
|
def _analyzingProfile(self):
|
|
# Check if the file exist
|
|
path = self._profile['filename']
|
|
try:
|
|
with open(path, 'rb') as fdata:
|
|
self._parseFile(fdata)
|
|
except FileNotFoundError:
|
|
self._reports['localaccount']['profile']['error'] = \
|
|
f'File {path} not found'
|
|
|
|
def _parseFile(self, fdata):
|
|
data = fdata.read()
|
|
lines = data.splitlines()
|
|
lineFound = None
|
|
found = False
|
|
|
|
for line in lines:
|
|
line = line.decode('utf-8')
|
|
|
|
grFlag = re.search(f"^{self._profile['flag']}", line)
|
|
if grFlag:
|
|
found = True
|
|
lineFound = line
|
|
if found:
|
|
self._reports['profile']['vulnerabilities'] = dict()
|
|
self._reports['profile']['vulnerabilities'][self._profile['flag']] = dict()
|
|
self._reports['profile']['vulnerabilities'][self._profile['flag']]["result"] = "success"
|
|
self._reports['profile']['vulnerabilities'][self._profile['flag']]['level'] = self._profile['level']
|
|
self._reports['profile']['vulnerabilities'][self._profile['flag']]["description"] = self._profile['description']
|
|
self._reports['profile']['vulnerabilities'][self._profile['flag']]["flagFound"] = lineFound
|
|
else:
|
|
self._reports['profile']['vulnerabilities'] = dict()
|
|
self._reports['profile']['vulnerabilities'][self._profile['flag']] = dict()
|
|
self._reports['profile']['vulnerabilities'][self._profile['flag']]["result"] = "failed"
|
|
self._reports['profile']['vulnerabilities'][self._profile['flag']]['level'] = self._profile['level']
|
|
self._reports['profile']['vulnerabilities'][self._profile["flag"]]["recommand_value"] = self._profile["value"]
|
|
self._reports['profile']['vulnerabilities'][self._profile['flag']]["description"] = self._profile['description']
|
|
self._reports['profile']['vulnerabilities'][self._profile['flag']]["flag"] = self._profile['flag']
|
|
|
|
def _analyzingPasswordQuality(self):
|
|
pass
|
|
|
|
def _constructReports(self):
|
|
"""
|
|
Construct dictionary for result of the tests
|
|
Each entry contains:
|
|
Key:
|
|
- filename: filename of the test
|
|
- line: line of the test
|
|
- parse: Display the line where the vulnerabilites has been found
|
|
- description: description of the vulnerability
|
|
- level: high, medium or low
|
|
"""
|
|
self._reports['profile'] = dict()
|
|
self._reports['profile']['filename'] = self._profile['filename']
|
|
self._reports['pwd_quality'] = dict()
|