-
Notifications
You must be signed in to change notification settings - Fork 1
/
BurpImportExtension.cs
140 lines (120 loc) · 4.78 KB
/
BurpImportExtension.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/******************************************************************
* Licensed Materials - Property of HCL
* (c) Copyright HCL Technologies Ltd. 2015, 2022.
* Note to U.S. Government Users Restricted Rights.
******************************************************************/
using System;
using System.IO;
using System.Threading;
using System.Windows.Forms;
using AppScan;
using AppScan.Extensions;
namespace BurpTrafficImporter
{
class BurpImportExtension : IExtensionLogic, IExtensionSDKLogic
{
private Form mainForm;
SynchronizationContext _uiContext;
BurpImportForm _bif;
private IAppScan _appScan;
public void Load(IAppScan appScan, IAppScanGui appScanGui, string extensionDir)
{
appScanGui.ExtensionsMenu.Add(new MenuItem<EventArgs>("Import Burp Traffic",ImportBurpTraffic));
appScanGui.MainFormStarted += AppScanGuiOnMainFormStarted;
_uiContext = SynchronizationContext.Current;
_bif = new BurpImportForm(mainForm, appScan);
_appScan = appScan;
}
private void AppScanGuiOnMainFormStarted(object sender, MainFormStartedEventArgs mainFormStartedEventArgs)
{
mainForm = (Form)(mainFormStartedEventArgs.MainForm);
}
private void ImportBurpTraffic(EventArgs args)
{
_bif = new BurpImportForm(mainForm, _appScan);
_bif.FormClosed += BifOnFormClosed;
_uiContext.Send(delegate
{
//This executes on the ui thread
_bif.Show(mainForm);
}, null);
}
private void BifOnFormClosed(object sender, FormClosedEventArgs formClosedEventArgs)
{
if (_bif.ShouldImport)
{
string exdFile = string.Empty;
try
{
_uiContext.Send(delegate
{
if (_bif.SetStartingPointUrl)
{
_appScan.Scan.ScanData.Config.StartingUrl = _bif.StartingPointUrl;
}
foreach (string domain in _bif.AdditionalDomains)
{
_appScan.Scan.ScanData.Config.AdditionalServers.Add(domain);
}
BurpToExd b2e = new BurpToExd();
exdFile = Path.GetFileNameWithoutExtension(_bif.BurpTrafficFile);
exdFile += ".converted.exd";
exdFile = Path.Combine(_appScan.AppScanTempDir, exdFile);
b2e.Convert(_bif.BurpTrafficFile, exdFile);
using (FileStream fs = new FileStream(exdFile, FileMode.Open))
{
_appScan.Scan.RequestRecorder.ImportRecordedRequests(fs, true);
_appScan.Scan.RequestRecorder.Analyse();
_appScan.Scan.AnalysisEnded += (o,e) =>
{
ClearFiles(exdFile);
};
}
}, null);
}
catch (Exception e)
{
MessageBox.Show(e.Message, "Error");
ClearFiles(exdFile);
}
}
}
private void ClearFiles(string exdFile)
{
if (File.Exists(exdFile))
{
File.Delete(exdFile);
}
if (File.Exists(_bif.BurpTrafficFile))
{
File.Delete(_bif.BurpTrafficFile);
}
_bif.BurpTrafficFile = string.Empty;
}
public ExtensionVersionInfo GetUpdateData(Edition edition, Version targetAppVersion)
{
return null;
}
public void Init(IAppScan appScan, string extensionDir)
{
}
public void Run(object data)
{
}
public ConfigurationErrorCode SetConfiguration(string configurationItemName, object value)
{
return ConfigurationErrorCode.NoError;
}
public ConfigurationErrorCode GetConfiguration(string configurationItemName, out object value)
{
value = null;
return ConfigurationErrorCode.NoError;
}
public ConfigurationErrorCode GetConfigurationMinimumMaximumValue(string configurationItemName, out object minValue, out object maxValue)
{
minValue = null;
maxValue = null;
return ConfigurationErrorCode.NoError;
}
}
}