API/API_Response.asp变量username未经过滤传值,带入sql执行,导致注入产生。 If CheckPost() Then Select Case Act Case "checkname" '触发注入 Checkname() CheckPost()函数原型在行73-96,username由此获取值,代码如下: XmlDoc.documentElement.selectSingleNode("username") Checkname()函数在行233-254,代码如下: Sub Checkname() Dim UserEmail Dim Temp_tr,i,Rs,Sql UserEmail = Trim(XmlDoc.documentElement.selectSingleNode("email").text) If Messenge<>"" Then '输出错误信息 Status = 1 Exit Sub End If Sql="select UserName,Email From FS_ME_Users where UserName = '"& UserName &"'" '在此带入sql执行 Set Rs = User_Conn.Execute(Sql) If Not Rs.Eof And Not Rs.Bof Then Messenge = "您填写的用户名已经被注册。" Status = 1 Exit Sub Else Status = 0 Messenge = "验证通过。" End If Rs.Close Set Rs = Nothing End Sub 利用的关键在于让CheckPost()为真,代码如下: Dim NewMd5,OldMd5 NewMd5 = Md5(UserName&API_SysKey,16) 'Const API_SysKey = "API_TEST" OldMd5 = Md5(UserName&API_SysKey,16) If Syskey=NewMd5 or...
API/API_Response.asp变量username未经过滤传值,带入sql执行,导致注入产生。 If CheckPost() Then Select Case Act Case "checkname" '触发注入 Checkname() CheckPost()函数原型在行73-96,username由此获取值,代码如下: XmlDoc.documentElement.selectSingleNode("username") Checkname()函数在行233-254,代码如下: Sub Checkname() Dim UserEmail Dim Temp_tr,i,Rs,Sql UserEmail = Trim(XmlDoc.documentElement.selectSingleNode("email").text) If Messenge<>"" Then '输出错误信息 Status = 1 Exit Sub End If Sql="select UserName,Email From FS_ME_Users where UserName = '"& UserName &"'" '在此带入sql执行 Set Rs = User_Conn.Execute(Sql) If Not Rs.Eof And Not Rs.Bof Then Messenge = "您填写的用户名已经被注册。" Status = 1 Exit Sub Else Status = 0 Messenge = "验证通过。" End If Rs.Close Set Rs = Nothing End Sub 利用的关键在于让CheckPost()为真,代码如下: Dim NewMd5,OldMd5 NewMd5 = Md5(UserName&API_SysKey,16) 'Const API_SysKey = "API_TEST" OldMd5 = Md5(UserName&API_SysKey,16) If Syskey=NewMd5 or Syskey=OldMd5 Then CheckPost = True Else Status = 1 Messenge = Messenge & "<li>请求数据验证不通过,请与管理员联系。" End If API_SysKey在Api_Config.asp里16行被设置 Const API_SysKey = "API_TEST" 把注入语句 & API_SysKey 进行一次md5加密之后的16位hash,赋值给syskey就可以了。 4.0 sp5[mssql] 对变量username进行相关的过滤处理。