mirror of
https://github.com/peass-ng/PEASS-ng.git
synced 2026-03-12 21:23:13 -07:00
106 lines
4.8 KiB
C#
106 lines
4.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
|
|
namespace winPEAS.Tests
|
|
{
|
|
[TestClass]
|
|
public class ArgumentParsingTests
|
|
{
|
|
private static bool InvokeIsNetworkTypeValid(string arg)
|
|
{
|
|
var method = typeof(winPEAS.Checks.Checks).GetMethod("IsNetworkTypeValid", BindingFlags.NonPublic | BindingFlags.Static);
|
|
Assert.IsNotNull(method, "IsNetworkTypeValid method not found.");
|
|
return (bool)method.Invoke(null, new object[] { arg });
|
|
}
|
|
|
|
/// <summary>
|
|
/// Resets all public static Checks fields that arg parsing can mutate, then
|
|
/// invokes Program.Main with the supplied args followed by "--help" so execution
|
|
/// returns immediately after parsing without running any actual system checks.
|
|
/// </summary>
|
|
private static void ParseOnly(params string[] args)
|
|
{
|
|
// Reset every field that Checks.Run() can modify during arg parsing.
|
|
winPEAS.Checks.Checks.IsDomainEnumeration = false;
|
|
winPEAS.Checks.Checks.IsNoColor = false;
|
|
winPEAS.Checks.Checks.DontCheckHostname = false;
|
|
winPEAS.Checks.Checks.Banner = true;
|
|
winPEAS.Checks.Checks.IsDebug = false;
|
|
winPEAS.Checks.Checks.IsLinpeas = false;
|
|
winPEAS.Checks.Checks.IsLolbas = false;
|
|
winPEAS.Checks.Checks.IsNetworkScan = false;
|
|
winPEAS.Checks.Checks.SearchProgramFiles = false;
|
|
winPEAS.Checks.Checks.NetworkScanOptions = string.Empty;
|
|
winPEAS.Checks.Checks.PortScannerPorts = null;
|
|
winPEAS.Checks.Checks.LinpeasUrl = "https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh";
|
|
winPEAS.Checks.Checks.MaxRegexFileSize = 1000000;
|
|
|
|
var argsWithHelp = args.Concat(new[] { "--help" }).ToArray();
|
|
Program.Main(argsWithHelp);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ShouldAcceptValidNetworkTypes()
|
|
{
|
|
Assert.IsTrue(InvokeIsNetworkTypeValid("-network=auto"));
|
|
Assert.IsTrue(InvokeIsNetworkTypeValid("-network=10.10.10.10"));
|
|
Assert.IsTrue(InvokeIsNetworkTypeValid("-network=10.10.10.10/24"));
|
|
Assert.IsTrue(InvokeIsNetworkTypeValid("-network=10.10.10.10,10.10.10.20"));
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ShouldRejectInvalidNetworkTypes()
|
|
{
|
|
Assert.IsFalse(InvokeIsNetworkTypeValid("-network="));
|
|
Assert.IsFalse(InvokeIsNetworkTypeValid("-network=10.10.10.999"));
|
|
Assert.IsFalse(InvokeIsNetworkTypeValid("-network=10.10.10.10/64"));
|
|
Assert.IsFalse(InvokeIsNetworkTypeValid("-network=999.999.999.999/24"));
|
|
Assert.IsFalse(InvokeIsNetworkTypeValid("-network=not-an-ip"));
|
|
}
|
|
|
|
// -- Space-separated argument normalisation tests --
|
|
|
|
[TestMethod]
|
|
public void NetworkFlag_SpaceSeparated_Netmask_SetsIsNetworkScan()
|
|
{
|
|
ParseOnly("-network", "10.0.0.0/24");
|
|
Assert.IsTrue(winPEAS.Checks.Checks.IsNetworkScan,
|
|
"-network 10.0.0.0/24 (space-separated) should set IsNetworkScan");
|
|
Assert.AreEqual("10.0.0.0/24", winPEAS.Checks.Checks.NetworkScanOptions);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void NetworkFlag_SpaceSeparated_Auto_SetsIsNetworkScan()
|
|
{
|
|
ParseOnly("-network", "auto");
|
|
Assert.IsTrue(winPEAS.Checks.Checks.IsNetworkScan,
|
|
"-network auto (space-separated) should set IsNetworkScan");
|
|
Assert.IsTrue(string.Equals("auto", winPEAS.Checks.Checks.NetworkScanOptions, StringComparison.OrdinalIgnoreCase),
|
|
"-network auto (space-separated) should set IsNetworkScan");
|
|
}
|
|
|
|
[TestMethod]
|
|
public void NetworkFlag_EqualsSeparated_Netmask_SetsIsNetworkScan()
|
|
{
|
|
ParseOnly("-network=10.0.0.0/24");
|
|
Assert.IsTrue(winPEAS.Checks.Checks.IsNetworkScan,
|
|
"-network=10.0.0.0/24 (equals-separated) should set IsNetworkScan");
|
|
Assert.AreEqual("10.0.0.0/24", winPEAS.Checks.Checks.NetworkScanOptions);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void NetworkAndPortsFlags_SpaceSeparated_BothParsedCorrectly()
|
|
{
|
|
ParseOnly("-network", "auto", "-ports", "80,443");
|
|
Assert.IsTrue(winPEAS.Checks.Checks.IsNetworkScan,
|
|
"-network auto -ports 80,443 should set IsNetworkScan");
|
|
var ports = winPEAS.Checks.Checks.PortScannerPorts?.ToList();
|
|
Assert.IsNotNull(ports, "PortScannerPorts should not be null");
|
|
CollectionAssert.AreEquivalent(new List<int> { 80, 443 }, ports);
|
|
}
|
|
}
|
|
}
|