/// <summary> /// /// </summary> /// <param name="plugin"></param> /// <param name="InjectCodeConfig"></param> public HttpInjectCode(IPlugin plugin, InjectCodeConfig injectCodeConfig) { this.plugin = plugin; this.injectCodeConfig = injectCodeConfig; // Verifying plugin parameters if (plugin == null) { throw new Exception("Plugin configuration is invalid"); } if (plugin.Config == null) { throw new Exception("Plugin configuration is invalid"); } if (plugin.Config.PluginBaseDir == null) { throw new Exception("Plugin.Config.ApplicationBaseDir is invalid"); } }
public Plugin_HttpInjectCode(PluginProperties pluginProperties) { this.InitializeComponent(); // Textbox OnFocus/OnFocusLost custom implementations. this.tb_RequestedUrlRegex.GotFocus += this.TextBoxGotFocus; this.tb_RequestedUrlRegex.LostFocus += this.TextBoxLostFocus; this.tb_RequestedUrlRegex.Text = this.watermarkHttpRegex; this.tb_RequestedUrlRegex.ForeColor = System.Drawing.Color.LightGray; this.dgv_InjectionTriggerURLs.AutoGenerateColumns = false; DataGridViewTextBoxColumn columnRequestedScheme = new DataGridViewTextBoxColumn(); columnRequestedScheme.DataPropertyName = "RequestedScheme"; columnRequestedScheme.Name = "RequestedScheme"; columnRequestedScheme.HeaderText = "Scheme"; columnRequestedScheme.ReadOnly = true; columnRequestedScheme.Visible = false; columnRequestedScheme.Width = 0; this.dgv_InjectionTriggerURLs.Columns.Add(columnRequestedScheme); DataGridViewTextBoxColumn columnRequestedHost = new DataGridViewTextBoxColumn(); columnRequestedHost.DataPropertyName = "RequestedHostRegex"; columnRequestedHost.Name = "RequestedHostRegex"; columnRequestedHost.HeaderText = "Requested host"; columnRequestedHost.ReadOnly = true; columnRequestedHost.Width = 200; this.dgv_InjectionTriggerURLs.Columns.Add(columnRequestedHost); DataGridViewTextBoxColumn columnRequestedPath = new DataGridViewTextBoxColumn(); columnRequestedPath.DataPropertyName = "RequestedPathRegex"; columnRequestedPath.Name = "RequestedPathRegex"; columnRequestedPath.HeaderText = "Requested path"; columnRequestedPath.ReadOnly = true; columnRequestedPath.Width = 200; this.dgv_InjectionTriggerURLs.Columns.Add(columnRequestedPath); DataGridViewTextBoxColumn columnTag = new DataGridViewTextBoxColumn(); columnTag.DataPropertyName = "Tag"; columnTag.Name = "Tag"; columnTag.HeaderText = "Tag"; columnTag.ReadOnly = true; columnTag.Width = 100; this.dgv_InjectionTriggerURLs.Columns.Add(columnTag); DataGridViewTextBoxColumn columnPosition = new DataGridViewTextBoxColumn(); columnPosition.DataPropertyName = "Position"; columnPosition.Name = "Position"; columnPosition.HeaderText = "Position"; columnPosition.ReadOnly = true; columnPosition.Width = 100; this.dgv_InjectionTriggerURLs.Columns.Add(columnPosition); DataGridViewTextBoxColumn columnReplacementResource = new DataGridViewTextBoxColumn(); columnReplacementResource.DataPropertyName = "InjectionCodeFile"; columnReplacementResource.Name = "InjectionCodeFile"; columnReplacementResource.HeaderText = "Injection code file"; columnReplacementResource.ReadOnly = true; columnReplacementResource.Width = 350; columnReplacementResource.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; this.dgv_InjectionTriggerURLs.Columns.Add(columnReplacementResource); this.injectCodeRecords = new BindingList <InjectCodeRecord>(); this.dgv_InjectionTriggerURLs.DataSource = this.injectCodeRecords; // Verify passed parameter(s) if (pluginProperties == null) { throw new Exception("Parameter PluginParameters is null"); } if (pluginProperties.HostApplication == null) { throw new Exception("Parameter HostApplication is null"); } if (pluginProperties.ApplicationBaseDir == null) { throw new Exception("Parameter ApplicationBaseDir is null"); } if (pluginProperties.PluginBaseDir == null) { throw new Exception("Parameter PluginBaseDir is null"); } // Plugin configuration this.pluginProperties = pluginProperties; this.pluginProperties.PluginName = "HTTP inject code"; this.pluginProperties.PluginType = "Intrusive"; this.pluginProperties.AttackServiceDependency = "HttpsReverseProxy"; this.pluginProperties.PluginDescription = "Inject custom code into server response"; this.pluginProperties.Ports = new Dictionary <int, IpProtocols>(); // Set inject code config file path this.injectCodeConfigFilePath = Path.Combine(this.pluginProperties.HostApplication.HostWorkingDirectory, @"attackservices\HttpReverseProxy\plugins\injectcode\plugin.config"); this.injectCodeConfig = new InjectCodeConfig() { InjectCodeConfigFilePath = this.injectCodeConfigFilePath, IsDebuggingOn = this.Config.HostApplication.IsDebuggingOn, BasisDirectory = this.Config.PluginBaseDir }; // Populate position combobox this.cb_injectPosition.Items.Add(new ComboboxItem("<html>", "html")); this.cb_injectPosition.Items.Add(new ComboboxItem("</html>", "/html")); this.cb_injectPosition.Items.Add(new ComboboxItem("<head>", "head")); this.cb_injectPosition.Items.Add(new ComboboxItem("</head>", "/head")); this.cb_injectPosition.Items.Add(new ComboboxItem("<body>", "body")); this.cb_injectPosition.Items.Add(new ComboboxItem("</body>", "/body")); this.cb_injectPosition.SelectedIndex = 0; // Instantiate infrastructureLayer layer this.infrastructureLayer = new InjectCode.Infrastructure.HttpInjectCode(this, this.injectCodeConfig); }