2010-05-27 33 views
0

我们对使用MS SQL数据库的简单asp应用程序执行笔测试。对于使用动态构建查询的身份验证来说,似乎只是转义单个qoutes。 当我们使用Unicode引号如%uFFO7,%u02b9等时,我们能够成功注入SQL注入。 想要了解它是更多的一种配置问题的IIS服务器无法Unicode编码的字符或验证函数来逃避单引号的方式写的问题的原因是什么?IIS 6.0服务器和Unicode字符

+0

你需要添加一个攻击的例子,目前还不清楚你在做什么。 '%uXXXX'不是一个有效的URL编码的Unicode字符,它是JavaScript'escape()'函数生成的自定义格式,绝不应该使用它。 – bobince 2010-05-27 11:57:49

回答

0

你有没有ASP代码的例子?据我了解,编码是由IIS完成的,但这是为了运输而且不会被看到,所以它们的转义函数可能有缺陷。如果他们构建动态SQL字符串而不是使用存储过程(在任何情况下都不关心引号,但会将其作为文字字符接受),则这一点尤其正确。

+0

在前面的问题中,一个更正的数据库不是MS SQL,而是Oracle。 期间从帕罗采取的帖子内容开发是 __DIRTY = 1&__ SENTITY = __ ISPOPUP = 1&__ ISWIZARDSTEP = 0&__ ISRETURN = 0&__ VIEWSTATE =登录=真AccessibleMode =假FromLogin = 1&提交按钮=提交+查询和用户名=用户%uFF07 + - 和密码=密码 的查询我使用NetMon捕获数据库服务器 从用户处选择Usr_Id,Usr_Status其中User_Name ='user' - '和Usr_Password ='password' 因此字符%uFF07被解释为引用。 – Srikanth 2010-05-28 04:55:52

+0

好的,所以不是SQL Server,而是Oracle。用“存储过程”代替“包”,你就在同一个地方:从你的ASP代码构建动态SQL字符串有点危险,只是因为你指出的漏洞。 你可以发布处理查询字符串输入的代码部分吗? – 2010-06-07 15:42:25