Пример #1
0
 internal static void StopWorkFlowScans()
 {
     try
     {
         ScannerThread.Abort();
     }
     catch { }
     WorkflowScannerWindow.UpdateScanStatusInUi(false, "Scan stopped");
 }
Пример #2
0
 internal static void OpenWindow()
 {
     if (!IsWindowOpen())
     {
         OpenWorkflowScanner = new WorkflowScannerWindow();
         OpenWorkflowScanner.Show();
     }
     OpenWorkflowScanner.Activate();
 }
Пример #3
0
 internal static void MarkWorkFlowEnd()
 {
     if (CurrentWorkFlowStartIndex > 0)
     {
         if (Config.LastProxyLogId >= CurrentWorkFlowStartIndex)
         {
             WorkFlows.Add(new int[] { CurrentWorkFlowStartIndex, Config.LastProxyLogId });
             WorkflowScannerWindow.UpdateWorkflowEntryInUi(WorkFlows[WorkFlows.Count - 1], CurrentWorkFlowName);
         }
         CurrentWorkFlowStartIndex = -1;
         CurrentWorkFlowName       = "";
     }
 }
Пример #4
0
        internal static void CheckWorkflowRequest(Session Sess)
        {
            if (CurrentWorkFlowStartIndex < 1)
            {
                return;
            }

            lock (Hosts)
            {
                if (!Hosts.Contains(Sess.Request.BaseUrl))
                {
                    Hosts.Add(Sess.Request.BaseUrl);
                    WorkflowScannerWindow.UpdateWorkflowHostEntryInUi(Sess.Request.BaseUrl);
                }
            }
        }
Пример #5
0
 static void DoScan()
 {
     try
     {
         List <int[]>  WorkFlowMarkers = new List <int[]>();
         List <string> HostsToScan     = new List <string>();
         lock (WorkFlows)
         {
             foreach (int[] Marker in WorkFlows)
             {
                 WorkFlowMarkers.Add(Marker);
             }
             WorkFlows.Clear();
         }
         lock (AllowedHosts)
         {
             foreach (string Host in AllowedHosts)
             {
                 HostsToScan.Add(Host);
             }
             AllowedHosts.Clear();
         }
         foreach (int[] Marker in WorkFlowMarkers)
         {
             Analysis.LogAnalyzer Analyzer = new Analysis.LogAnalyzer();
             Dictionary <string, Analysis.LogAssociations> AssociationsDict = Analyzer.Analyze(Marker[0], Marker[1], "Proxy");
             foreach (string Ua in AssociationsDict.Keys)
             {
                 ScanAssociation(AssociationsDict[Ua], HostsToScan, Marker);
             }
         }
         WorkflowScannerWindow.UpdateScanStatusInUi(false, "Scan complete");
     }
     catch (ThreadAbortException) { }
     catch (Exception Exp)
     {
         IronException.Report("Error scanning workflows", Exp);
     }
 }
Пример #6
0
 static void ScanAssociation(Analysis.LogAssociations Association, List <string> HostsToScan, int[] Marker)
 {
     if (Association.NonIgnorableCount > 0)
     {
         int Index = 0;
         foreach (int Id in Association.LogIds)
         {
             Analysis.LogAssociation Asso = Association.GetAssociation(Id);
             if (!Asso.IsIgnorable && HostsToScan.Contains(Asso.DestinationLog.Request.BaseUrl))
             {
                 Scanner S = new Scanner(Asso.DestinationLog.Request);
                 if (S.BaseRequest.File.Length == 0 && S.BaseRequest.Query.Count == 0 && S.BaseRequest.UrlPathParts.Count > 1)
                 {
                     S.InjectUrl();
                 }
                 S.InjectQuery();
                 if (S.BaseRequest.BodyType == BodyFormatType.Soap ||
                     S.BaseRequest.BodyType == BodyFormatType.Json ||
                     S.BaseRequest.BodyType == BodyFormatType.Multipart ||
                     S.BaseRequest.BodyType == BodyFormatType.Xml)
                 {
                     S.BodyFormat = FormatPlugin.Get(S.BaseRequest.BodyType);
                 }
                 S.InjectBody();
                 S.CheckAll();
                 if (S.InjectionPointsCount > 0)
                 {
                     S.WorkFlowLogAssociations = Association;
                     S.IndexOfRequestToScanInWorkFlowLogAssociations = Index;
                     WorkflowScannerWindow.UpdateScanStatusInUi(true, string.Format("Scanning Request no.{0} in workflow between logs {1}-{2}", Index, Marker[0], Marker[1]));
                     S.Scan();
                 }
                 Index++;
             }
         }
     }
 }