コード例 #1
0
        protected override string GetVersion()
        {
            AuditEnvironment.ProcessExecuteStatus process_status;
            string process_output;
            string process_error;

            AuditEnvironment.Execute(ApplicationBinary.FullName, "-v", out process_status, out process_output, out process_error);
            if (process_status == AuditEnvironment.ProcessExecuteStatus.Completed && (process_output.Contains("nginx version: ") || process_error.Contains("nginx version: ")))
            {
                if (!string.IsNullOrEmpty(process_error) && string.IsNullOrEmpty(process_output))
                {
                    process_output = process_error;
                }
                this.Version            = process_output.Substring("nginx version: ".Length);
                this.VersionInitialised = true;
                this.AuditEnvironment.Success("Got Nginx version {0}.", this.Version);
                return(this.Version);
            }
            else if (process_output.Contains("nginx version: ") || process_error.Contains("nginx version: "))
            {
                if (!string.IsNullOrEmpty(process_error) && string.IsNullOrEmpty(process_output))
                {
                    process_output = process_error;
                }
                this.Version            = process_output.Substring("nginx version: ".Length);
                this.VersionInitialised = true;
                this.AuditEnvironment.Success("Got Nginx version {0}.", this.Version);
                return(this.Version);
            }
            else
            {
                throw new Exception(string.Format("Did not execute process {0} successfully or could not parse output. Process output: {1}.\nProcess error: {2}.", ApplicationBinary.Name, process_output, process_error));
            }
        }
コード例 #2
0
ファイル: MySQLServer.cs プロジェクト: wizard2773/DevAudit
        protected override string GetVersion()
        {
            Stopwatch sw = new Stopwatch();

            sw.Start();
            AuditEnvironment.ProcessExecuteStatus process_status;
            string process_output;
            string process_error;

            AuditEnvironment.Execute(this.ApplicationBinary.FullName, "-V", out process_status, out process_output, out process_error);
            sw.Stop();
            if (process_status == AuditEnvironment.ProcessExecuteStatus.Completed)
            {
                string v0 = process_output.Substring(process_output.IndexOf("Ver") + 4);
                string v1 = v0.Substring(0, v0.IndexOf(" "));
                this.Version            = new string(v1.TakeWhile(v => char.IsDigit(v) || v == '.').ToArray());
                this.VersionInitialised = true;
                this.AuditEnvironment.Success("Got {0} version {1} in {2} ms.", this.ApplicationLabel, this.Version, sw.ElapsedMilliseconds);
                return(this.Version);
            }
            else
            {
                throw new Exception(string.Format("Did not execute process {0} successfully. Error: {1}.", this.ApplicationBinary.Name, process_error));
            }
        }
コード例 #3
0
        //Get list of installed programs from 3 registry locations.
        public override IEnumerable <Package> GetPackages(params string[] o)
        {
            var wmi = AuditEnvironment.Execute("wmic", "product get name,version", out var process_status, out var process_output, out var process_error);

            if (process_status != AuditEnvironment.ProcessExecuteStatus.Completed)
            {
                throw new Exception("The wmic command did not execute successfully.");
            }
            var lines = process_output.Split(AuditEnvironment.LineTerminator.ToCharArray());
            var regex = new Regex(@"(\S.+)\s+\d(\S+)", RegexOptions.Compiled);

            foreach (var s in lines.Skip(1))
            {
                var m = regex.Match(s);
            }
            throw new NotImplementedException();
        }
コード例 #4
0
        public override IEnumerable <Package> GetPackages(params string[] o)
        {
            Stopwatch      sw        = new Stopwatch();
            List <Package> packages  = new List <Package>();
            string         command   = @"dpkg-query";
            string         arguments = @"-W -f  '${package} ${version} ${architecture}|'";
            Regex          process_output_pattern = new Regex(@"^(\S+)\s(\S+)\s(\S+)$", RegexOptions.Compiled);

            AuditEnvironment.ProcessExecuteStatus process_status;
            string process_output, process_error;

            sw.Start();
            if (AuditEnvironment.Execute(command, arguments, out process_status, out process_output, out process_error))
            {
                string[] p = process_output.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                for (int i = 0; i < p.Count(); i++)
                {
                    if (string.IsNullOrEmpty(p[i]) || string.IsNullOrWhiteSpace(p[i]))
                    {
                        continue;
                    }
                    Match m = process_output_pattern.Match(p[i].Trim());
                    if (!m.Success)
                    {
                        sw.Stop();
                        this.AuditEnvironment.Error(this.AuditEnvironment.Here(), "Could not parse dpkg command output at row {0}: {1}.", i, p[i]);
                        throw new Exception(string.Format("Could not parse dpkg command output at row {0}: {1}.", i, p[i]));
                    }
                    else
                    {
                        packages.Add(new Package(this.PackageManagerId, m.Groups[1].Value, m.Groups[2].Value, null, null, m.Groups[3].Value));
                    }
                }
                sw.Stop();
                this.AuditEnvironment.Info("Retrieved {0} packages from {1} package manager in {2} ms.", packages.Count, this.PackageManagerLabel, sw.ElapsedMilliseconds);
            }
            else
            {
                sw.Stop();
                throw new Exception(string.Format("Error running {0} {1} command in audit environment: {2} {3}.", command,
                                                  arguments, process_error, process_output));
            }

            return(packages);
        }
コード例 #5
0
        protected override string GetVersion()
        {
            AuditEnvironment.ProcessExecuteStatus process_status;
            string process_output;
            string process_error;

            AuditEnvironment.Execute(ApplicationBinary.FullName, "-v", out process_status, out process_output, out process_error);
            if (process_status == AuditEnvironment.ProcessExecuteStatus.Completed)
            {
                if (!string.IsNullOrEmpty(process_error) && string.IsNullOrEmpty(process_output))
                {
                    process_output = process_error;
                }
                this.Version            = process_output.Split(Environment.NewLine.ToCharArray())[0];
                this.VersionInitialised = true;
                return(this.Version);
            }
            else
            {
                throw new Exception(string.Format("Did not execute process {0} successfully. Error: {1}.", ApplicationBinary.Name, process_error));
            }
        }
コード例 #6
0
ファイル: SSHDServer.cs プロジェクト: JacobJacob/DevAudit
        protected override string GetVersion()
        {
            Stopwatch sw = new Stopwatch();

            sw.Start();
            this.AuditEnvironment.Status("Scanning {0} version.", this.ApplicationLabel);
            AuditEnvironment.ProcessExecuteStatus process_status;
            string process_output;
            string process_error;

            AuditEnvironment.Execute(this.ApplicationBinary.FullName, "-?", out process_status, out process_output, out process_error);
            if (process_status == AuditEnvironment.ProcessExecuteStatus.Completed)
            {
                if (!string.IsNullOrEmpty(process_error) && string.IsNullOrEmpty(process_output))
                {
                    process_output = process_error;
                }
                this.Version = process_output.Split("\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)[1];
                sw.Stop();
                this.AuditEnvironment.Success("Got {0} version {1} in {2} ms.", this.ApplicationLabel, this.Version, sw.ElapsedMilliseconds);
                this.VersionInitialised = true;
                return(this.Version);
            }
            else if (!string.IsNullOrEmpty(process_error) && string.IsNullOrEmpty(process_output) && process_error.Contains("unknown option"))
            {
                this.Version = process_error.Split("\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)[1];
                sw.Stop();
                this.AuditEnvironment.Success("Got {0} version {1} in {2} ms.", this.ApplicationLabel, this.Version, sw.ElapsedMilliseconds);
                this.VersionInitialised = true;
                return(this.Version);
            }
            else
            {
                sw.Stop();
                throw new Exception(string.Format("Did not execute process {0} successfully. Error: {1}.", this.ApplicationBinary.Name, process_error));
            }
        }