Get all discovered credentials from various services
(self)
| 835 | handler.wfile.write(json.dumps({"status": "error", "message": str(e)}).encode('utf-8')) |
| 836 | |
| 837 | def get_all_credentials(self): |
| 838 | """Get all discovered credentials from various services""" |
| 839 | credentials = {} |
| 840 | |
| 841 | # Define credential files |
| 842 | cred_files = { |
| 843 | 'ssh': self.shared_data.sshfile, |
| 844 | 'smb': self.shared_data.smbfile, |
| 845 | 'telnet': self.shared_data.telnetfile, |
| 846 | 'ftp': self.shared_data.ftpfile, |
| 847 | 'sql': self.shared_data.sqlfile, |
| 848 | 'rdp': self.shared_data.rdpfile |
| 849 | } |
| 850 | |
| 851 | def _normalize_keys(row): |
| 852 | normalized = {} |
| 853 | for key, value in row.items(): |
| 854 | if key is None: |
| 855 | continue |
| 856 | normalized_key = key.strip().lower() |
| 857 | if normalized_key: |
| 858 | normalized[normalized_key] = value |
| 859 | return normalized |
| 860 | |
| 861 | def _first_present(row, normalized_row, *keys): |
| 862 | for key in keys: |
| 863 | if key in row and row[key] not in (None, ''): |
| 864 | return row[key] |
| 865 | |
| 866 | normalized_key = key.strip().lower() |
| 867 | if normalized_key in normalized_row and normalized_row[normalized_key] not in (None, ''): |
| 868 | return normalized_row[normalized_key] |
| 869 | return '' |
| 870 | |
| 871 | for service, filepath in cred_files.items(): |
| 872 | try: |
| 873 | if os.path.exists(filepath): |
| 874 | creds = [] |
| 875 | with open(filepath, 'r', encoding='utf-8', errors='ignore') as f: |
| 876 | reader = csv.DictReader(f) |
| 877 | for row in reader: |
| 878 | normalized_row = _normalize_keys(row) |
| 879 | |
| 880 | ip_value = _first_present( |
| 881 | row, |
| 882 | normalized_row, |
| 883 | 'IP Address', 'IP', 'Target', 'target_ip', 'ip address' |
| 884 | ) |
| 885 | user_value = _first_present( |
| 886 | row, |
| 887 | normalized_row, |
| 888 | 'Username', 'User', 'Login', 'Account', 'user name' |
| 889 | ) |
| 890 | password_value = _first_present( |
| 891 | row, |
| 892 | normalized_row, |
| 893 | 'Password', 'Pass', 'Credential' |
| 894 | ) |
no test coverage detected