动易网站管理系统是一个采用 ASP 和 MSSQL 等其他多种数据库构建的高效网站内容管理解决方案产品。
Count\Counter.asp文件第19行
```
Mozilla=replace(Request.ServerVariables("HTTP_USER_AGENT"),"'","")
Mozilla=left(Mozilla,100)
Agent=Request.ServerVariables("HTTP_USER_AGENT")
Agent=Split(Agent,";")
BcType=0
If Instr(Agent(1),"U") Or Instr(Agent(1),"I") Then BcType=1
If InStr(Agent(1),"MSIE") Then BcType=2
Select Case BcType
Case 0:
Browser="其它"
System="其它"
Case 1:
Ver=Mid(Agent(0),InStr(Agent(0),"/")+1)
Ver=Mid(Ver,1,InStr(Ver," ")-1)
Browser="Netscape"&Ver
System=Mid(Agent(0),InStr(Agent(0),"(")+1)
case 2:
Browser=Agent(1)
System=Agent(2)
System=Replace(System,")","")
End Select
System=Replace(Replace(Replace(Replace(Replace(Replace(System," ",""),"Win","Windows"),"NT5.0","2000"),"NT5.1","XP"),"NT5.2","2003"),"dowsdows","dows")
Browser=Replace(Browser," ","")
System=Left(System,20)
Browser=Left(Browser,20)
```
我们看到Agent没有经过过滤,只用’;’分割,判断了 Agent(1)是不是包含了"MSIE"就把BcType的值设置为2,于是Browser=Agent(1) ,在后面进行了替换Browser中的空格,而且只取前20个数据,在第302调用AddNum过程:
```
AddNum Browser,"PE_StatBrowser","TBrowser","TBrwNum"
```
343行的AddNum过程如下:
```
Sub AddNum(Data,TableName,CompareField,AddField)
Dim RowCount
conn_counter.execute "update "&TableName&" set ["&AddField&"]=["&AddField&"]+1 where "&CompareField&"='"&Data&"'", RowCount
If RowCount = 0 Then conn_counter.execute "insert into "&TableName&" ("&CompareField&",["&AddField&"]) values ('"&Data&"',1)"
End Sub
```
可以看出Data是没有经过任何过滤就放入了数据库的。于是注入成立。
测试方法:由于Browser限制了20个字符,除去必须有的字符和闭合,就只有13个字符(纯语句)可以利用。可以执行 MSIE’WHERE USER=0—得到当前数据库的用户名
动易网站管理系统
对于没有做好过滤的部分,进行严格的过滤以及修补工作。
暂无评论