Example #1
0
        /// <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");
            }
        }
Example #2
0
        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);
        }