- removed throwing exceptions in Chrome, Opera

This commit is contained in:
makikvues 2021-02-02 17:19:31 +01:00
parent 86bf58f45c
commit 80288c568a
3 changed files with 78 additions and 73 deletions

View File

@ -313,10 +313,7 @@ namespace winPEAS.KnownFileCreds.Browsers.Chrome
database.CloseDatabase(); database.CloseDatabase();
} }
} }
else
{
throw new FileNotFoundException("Cannot find chrome logins file");
}
return result; return result;
} }
} }

View File

@ -6,8 +6,8 @@ using System.Text.RegularExpressions;
using winPEAS.Checks; using winPEAS.Checks;
using winPEAS.Helpers; using winPEAS.Helpers;
using winPEAS.KnownFileCreds.Browsers.Models; using winPEAS.KnownFileCreds.Browsers.Models;
using winPEAS._3rdParty.MicroJson;
using winPEAS._3rdParty.SQLite; using winPEAS._3rdParty.SQLite;
using System.Web.Script.Serialization;
namespace winPEAS.KnownFileCreds.Browsers.Firefox namespace winPEAS.KnownFileCreds.Browsers.Firefox
{ {
@ -230,92 +230,103 @@ namespace winPEAS.KnownFileCreds.Browsers.Firefox
public override IEnumerable<CredentialModel> GetSavedCredentials() public override IEnumerable<CredentialModel> GetSavedCredentials()
{ {
var logins = new List<CredentialModel>();
string signonsFile = null; string signonsFile = null;
string loginsFile = null; string loginsFile = null;
bool signonsFound = false; bool signonsFound = false;
bool loginsFound = false; bool loginsFound = false;
string[] dirs = Directory.GetDirectories(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Mozilla\\Firefox\\Profiles"));
var logins = new List<CredentialModel>(); try
if (dirs.Length == 0)
return logins;
foreach (string dir in dirs)
{ {
string[] files = Directory.GetFiles(dir, "signons.sqlite"); string[] dirs = Directory.GetDirectories(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Mozilla\\Firefox\\Profiles"));
if (files.Length > 0)
if (dirs.Length == 0)
{ {
signonsFile = files[0]; return logins;
signonsFound = true;
} }
// find &quot;logins.json"file foreach (string dir in dirs)
files = Directory.GetFiles(dir, "logins.json");
if (files.Length > 0)
{ {
loginsFile = files[0]; string[] files = Directory.GetFiles(dir, "signons.sqlite");
loginsFound = true; if (files.Length > 0)
}
if (loginsFound || signonsFound)
{
FFDecryptor.NSS_Init(dir);
break;
}
}
if (signonsFound)
{
SQLiteDatabase database = new SQLiteDatabase("Data Source=" + signonsFile + ";");
string query = "SELECT encryptedUsername, encryptedPassword, hostname FROM moz_logins";
DataTable resultantQuery = database.ExecuteQuery(query);
if (resultantQuery.Rows.Count > 0)
{
foreach (DataRow row in resultantQuery.Rows)
{ {
string encryptedUsername = row["encryptedUsername"] is System.DBNull ? string.Empty : (string)row["encryptedUsername"]; signonsFile = files[0];
string encryptedPassword = row["encryptedPassword"] is System.DBNull ? string.Empty : (string)row["encryptedPassword"]; signonsFound = true;
string hostname = row["hostname"] is System.DBNull ? string.Empty : (string)row["hostname"]; }
string username = FFDecryptor.Decrypt(encryptedUsername); // find &quot;logins.json"file
string password = FFDecryptor.Decrypt(encryptedPassword); files = Directory.GetFiles(dir, "logins.json");
if (files.Length > 0)
{
loginsFile = files[0];
loginsFound = true;
}
if (loginsFound || signonsFound)
{
FFDecryptor.NSS_Init(dir);
break;
}
}
if (signonsFound)
{
SQLiteDatabase database = new SQLiteDatabase("Data Source=" + signonsFile + ";");
string query = "SELECT encryptedUsername, encryptedPassword, hostname FROM moz_logins";
DataTable resultantQuery = database.ExecuteQuery(query);
if (resultantQuery.Rows.Count > 0)
{
foreach (DataRow row in resultantQuery.Rows)
{
string encryptedUsername = row["encryptedUsername"] is System.DBNull ? string.Empty : (string)row["encryptedUsername"];
string encryptedPassword = row["encryptedPassword"] is System.DBNull ? string.Empty : (string)row["encryptedPassword"];
string hostname = row["hostname"] is System.DBNull ? string.Empty : (string)row["hostname"];
string username = FFDecryptor.Decrypt(encryptedUsername);
string password = FFDecryptor.Decrypt(encryptedPassword);
logins.Add(new CredentialModel
{
Username = username,
Password = password,
Url = hostname
});
}
database.CloseDatabase();
}
}
if (loginsFound)
{
FFLogins ffLoginData;
using (StreamReader sr = new StreamReader(loginsFile))
{
string json = sr.ReadToEnd();
ffLoginData = new JavaScriptSerializer().Deserialize<FFLogins>(json);
}
foreach (Browsers.Firefox.LoginData loginData in ffLoginData.logins)
{
string username = Browsers.Firefox.FFDecryptor.Decrypt(loginData.encryptedUsername);
string password = Browsers.Firefox.FFDecryptor.Decrypt(loginData.encryptedPassword);
logins.Add(new CredentialModel logins.Add(new CredentialModel
{ {
Username = username, Username = username,
Password = password, Password = password,
Url = hostname Url = loginData.hostname
}); });
} }
database.CloseDatabase();
} }
} }
catch (Exception e)
if (loginsFound)
{ {
FFLogins ffLoginData;
using (StreamReader sr = new StreamReader(loginsFile))
{
string json = sr.ReadToEnd();
ffLoginData = new JsonSerializer().Deserialize<Browsers.Firefox.FFLogins>(json);
}
foreach (Browsers.Firefox.LoginData loginData in ffLoginData.logins)
{
string username = Browsers.Firefox.FFDecryptor.Decrypt(loginData.encryptedUsername);
string password = Browsers.Firefox.FFDecryptor.Decrypt(loginData.encryptedPassword);
logins.Add(new CredentialModel
{
Username = username,
Password = password,
Url = loginData.hostname
});
}
} }
return logins; return logins;
} }
} }

View File

@ -57,10 +57,7 @@ namespace winPEAS.KnownFileCreds.Browsers.Opera
database.CloseDatabase(); database.CloseDatabase();
} }
} }
else
{
throw new FileNotFoundException("Cannot find Opera logins file");
}
return result; return result;
} }
} }