Skip to content

Commit

Permalink
PingCastle 3.2 beta1
Browse files Browse the repository at this point in the history
  • Loading branch information
vletoux committed Jan 24, 2024
1 parent 51412bf commit 85f8db6
Show file tree
Hide file tree
Showing 36 changed files with 1,053 additions and 96 deletions.
2 changes: 2 additions & 0 deletions ADWS/ADItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,8 @@ static ADItem()
public string[] Keywords { get; set; }
[ADAttributeAttribute("gPLink", ADAttributeValueKind.StringValue)]
public string GPLink { get; set; }
[ADAttributeAttribute("lastLogon", ADAttributeValueKind.DateValue)]
public DateTime LastLogon { get; set; }
[ADAttributeAttribute("lastLogonTimestamp", ADAttributeValueKind.DateValue)]
public DateTime LastLogonTimestamp { get; set; }
[ADAttributeAttribute("lDAPDisplayName", ADAttributeValueKind.StringValue)]
Expand Down
17 changes: 13 additions & 4 deletions ADWS/ADWSConnection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -239,11 +239,20 @@ public override void Enumerate(string distinguishedName, string filter, string[]
{
Console.WriteLine("Warning: unable to process element (" + ex.Message + ")\r\n" + item.OuterXml);
Trace.WriteLine("Warning: unable to process element\r\n" + item.OuterXml);
Trace.WriteLine("Exception: " + ex.Message);
Trace.WriteLine(ex.StackTrace);
Trace.WriteLine("Exception: " + ex.ToString());
}
if (aditem != null)
callback(aditem);
if (aditem != null)
{
try
{
callback(aditem);
}
catch
{
Trace.WriteLine("Exception while working on " + aditem.DistinguishedName);
throw;
}
}
}
}
}
Expand Down
16 changes: 13 additions & 3 deletions ADWS/LDAPConnection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -119,11 +119,21 @@ private void EnumerateInternalWithLDAP(string distinguishedName, string filter,
{
Console.WriteLine("Warning: unable to process element (" + ex.Message + ")\r\n" + sr.Path);
Trace.WriteLine("Warning: unable to process element\r\n" + sr.Path);
Trace.WriteLine("Exception: " + ex.Message);
Trace.WriteLine(ex.StackTrace);
Trace.WriteLine("Exception: " + ex.ToString());
}

if (aditem != null)
callback(aditem);
{
try
{
callback(aditem);
}
catch
{
Trace.WriteLine("Exception while working on " + aditem.DistinguishedName);
throw;
}
}
numberOfObjectAlreadyExtracted++;
}
Trace.WriteLine("[" + DateTime.Now.ToLongTimeString() + "]Enumeration successful");
Expand Down
37 changes: 35 additions & 2 deletions Data/HealthcheckData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,8 @@ public class HealthCheckGroupMemberData
public bool IsInProtectedUser { get; set; }

public string Email { get; set; }

public string Class { get; set; }
}

[DebuggerDisplay("{GroupName}")]
Expand Down Expand Up @@ -811,7 +813,7 @@ public HealthcheckOSVersionData()
public HealthcheckOSVersionData(PingCastle.ADWS.ADItem x)
{
IsServer = x.OperatingSystem.Contains("Server");
IsLTSC = x.OperatingSystem.Contains("LTSC") || x.OperatingSystem.Contains("LTSB");
IsLTSC = x.OperatingSystem.IndexOf("LTSC", StringComparison.OrdinalIgnoreCase) >= 0 || x.OperatingSystem.IndexOf("LTSB", StringComparison.OrdinalIgnoreCase) >= 0;
OSVersion = x.OperatingSystemVersion;
data = new HealthcheckAccountData();
data.DotNotRecordDetail = true;
Expand Down Expand Up @@ -1006,6 +1008,22 @@ public enum SMBSecurityModeEnum
SmbSigningRequired = 4,
}

[DebuggerDisplay("{DCName}")]
public class HealthcheckDCRPCInterface
{
[XmlAttribute]
public string IP { get; set; }

[XmlAttribute]
public string Interface { get; set; }

[XmlAttribute]
public int OpNum { get; set; }

[XmlAttribute]
public string Function { get; set; }
}

[DebuggerDisplay("{DCName}")]
public class HealthcheckDomainController
{
Expand Down Expand Up @@ -1079,6 +1097,11 @@ public class HealthcheckDomainController
[XmlAttribute]
[DefaultValue(false)]
public bool WebClientEnabled { get; set; }

[XmlAttribute]
public DateTime AdminLocalLogin { get; set; }

public List<HealthcheckDCRPCInterface> RPCInterfacesOpen { get; set; }
}

[XmlType("delegation")]
Expand Down Expand Up @@ -1165,10 +1188,20 @@ public static void UseDateInFileName()

public string GetHumanReadableFileName()
{
return "ad_hc_" + DomainFQDN + (UseDateInFileNameValue ? "_" + GenerationDate.ToString("yyyyMMddTHHmmss") : null) + ".html";
return GetHumanReadableFileName(DomainFQDN, GenerationDate);
}

public string GetMachineReadableFileName()
{
return GetMachineReadableFileName(DomainFQDN, GenerationDate);
}

public static string GetHumanReadableFileName(string DomainFQDN, DateTime GenerationDate)
{
return "ad_hc_" + DomainFQDN + (UseDateInFileNameValue ? "_" + GenerationDate.ToString("yyyyMMddTHHmmss") : null) + ".html";
}

public static string GetMachineReadableFileName(string DomainFQDN, DateTime GenerationDate)
{
return "ad_hc_" + DomainFQDN + (UseDateInFileNameValue ? "_" + GenerationDate.ToString("yyyyMMddTHHmmss") : null) + ".xml";
}
Expand Down
27 changes: 24 additions & 3 deletions Exports/ExportComputers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,14 +47,15 @@ public override void Export(string filename)
header.AddRange(hcprop);
header.Add("OperatingSystem");
header.Add("OperatingSystemVersion");
header.Add("IsCluster");
header.Add("PC OS 1");
header.Add("PC OS 2");
header.Add("LAPS last update (legacy LAPS)");
header.Add("LAPS last update (Ms LAPS)");

sw.WriteLine(string.Join("\t", header.ToArray()));


WorkOnReturnedObjectByADWS callback =
(ADItem x) =>
{
Expand Down Expand Up @@ -100,6 +101,26 @@ public override void Export(string filename)
data.Add(string.Empty);
data.Add(string.Empty);
}
if (x.ServicePrincipalName != null)
{
bool isCluster = false;
if (x.ServicePrincipalName != null)
{
foreach (var sp in x.ServicePrincipalName)
{
if (sp.StartsWith("MSClusterVirtualServer/"))
{
isCluster = true;
break;
}
}
}
data.Add(isCluster.ToString());
}
else
{
data.Add(false.ToString());
}
if (lapsAnalyzer.LegacyLAPSIntId != 0 && x.ReplPropertyMetaData != null && x.ReplPropertyMetaData.ContainsKey(lapsAnalyzer.LegacyLAPSIntId))
{
var dd = x.ReplPropertyMetaData[lapsAnalyzer.LegacyLAPSIntId];
Expand Down
6 changes: 5 additions & 1 deletion Exports/ExportUsers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ public override void Export(string filename)
header.Add("lastLogonTimestamp");
header.Add("pwdLastSet");
header.Add("whenCreated");
header.Add("whenChanged");
header.Add("objectClass");
header.Add("userAccountControl");
header.AddRange(hcprop);
Expand All @@ -66,6 +67,7 @@ public override void Export(string filename)
data.Add(x.LastLogonTimestamp.ToString("u"));
data.Add(x.PwdLastSet.ToString("u"));
data.Add(x.WhenCreated.ToString("u"));
data.Add(x.WhenChanged.ToString("u"));
data.Add(x.Class);
data.Add(x.UserAccountControl.ToString());
foreach (var p in hcprop)
Expand All @@ -77,7 +79,9 @@ public override void Export(string filename)
};

DisplayAdvancement("Starting");
adws.Enumerate(domainInfo.DefaultNamingContext, HealthcheckAnalyzer.userFilter, HealthcheckAnalyzer.userProperties, callback, "SubTree");
var properties = new List<string>(HealthcheckAnalyzer.userProperties);
properties.Add("whenChanged");
adws.Enumerate(domainInfo.DefaultNamingContext, HealthcheckAnalyzer.userFilter, properties.ToArray(), callback, "SubTree");
DisplayAdvancement("Done");
}
}
Expand Down
1 change: 1 addition & 0 deletions Graph/Reporting/ReportGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -585,6 +585,7 @@ private HealthCheckGroupMemberData BuildMemberDetail(ADWebService adws, HealthCh
member.PwdLastSet = x.PwdLastSet;
member.LastLogonTimestamp = x.LastLogonTimestamp;
member.Email = x.Mail;
member.Class = x.Class;

if ((x.UserAccountControl & 0x00000002) != 0)
data.NumberOfMemberDisabled++;
Expand Down
Loading

0 comments on commit 85f8db6

Please sign in to comment.