SQL Server 数据库注入

SQL Server database injection

提问人:Tim 提问时间:6/5/2016 最后编辑:marc_sTim 更新时间:6/6/2016 访问量:218

问:

我在asp中有一个简单的web应用程序,带有SQL Server后端数据库。登录页面有一个注入点,我可以通过通常的登录方式绕过登录 ' ' 或 1=1 '。现在,我能够使用 GROUP BY 和 HAVING 语句枚举数据库中的列。我能够枚举抛给我的错误中的信息。

` ' or '1' = '1' GROUP BY tblCustomers.cust_id, tblCustomers.cust_name, tblCustomers.cust_password, tblCustomers.cust_account  
HAVING 1=1 --  `

我正处于学习阶段,我发现 , , , 是列,是表名。cust_idcust_namecust_passwordcust_accounttblCustomers

我还能够使用 AND 语句和 convert 函数来枚举一些信息。我使用的命令是,我再次能够获取错误中的信息。' or '1' = '1' and 1 =convert(int,@@version)--

现在,我怎样才能将条目转储到数据库中,至少知道客户名称和密码?我尝试了用分号分隔的堆栈查询,但在执行第一个查询后,即 ' OR 1=1 我只是登录,看不到任何输出,因为他们没有其他参数,我无法在页面上的其他任何地方输出它(没有参数,他们的只是一个空白页登录后)。UNION SELECT不起作用,因为我无法猜测第一个SELECT语句及其退出。 有什么功能可以帮助我转储客户名称和密码吗?

我将不胜感激任何帮助。谢谢。

sql sql-server sql-injection 渗透测试

评论

0赞 6/5/2016
使第一个查询禁止登录。即,将“或 1 = 1”改为“和 1 < 1”,然后是下一个语句。如果我理解正确,你可以在哪里注入,登录将失败,你会得到你的转储(希望如此,但取决于你正在摆弄的门户)。编辑:顺便说一句,如果您希望查询失败,为什么要输入正确的用户/pwd 组合?+你可以弄清楚登录查询,它应该非常简单(用户名和密码,也许?
0赞 Tim 6/6/2016
谢谢马克。我尝试了你的建议。' 和 1<1 ;SELECT * from tblCustomers '这次登录失败,它再次将我带回登录提示。它只是一个学习 Web 应用程序,因此一旦能够登录,就绝对没有更多了。
0赞 6/6/2016
然后,我添加此作为答案,如果您接受;)谢谢
0赞 Alex Kudryashev 6/6/2016
尝试(再次)计算 中的字段数。不能保证成功,因为页面可能会在第一行后停止阅读。union select 1,1,1,1select
0赞 Tim 6/6/2016
嗨,亚历克斯,您建议的查询给了我一个错误,我希望第一列的数据类型为 int。另外,我想提一下,错误页面是一个传统的“未显示页面”,并且包含某处的信息以及 POST 请求详细信息Syntax error converting the varchar value 'abraham' to a column of data type intcust_id

答:

0赞 user2299169 6/6/2016 #1

使第一个查询禁止登录。即,将“或 1 = 1”改为“和 1 < 1”,然后是下一个语句。如果我理解正确,你可以在哪里注入,登录将失败,你会得到你的转储(希望如此,但取决于你正在摆弄的门户)。编辑:顺便说一句,如果您希望查询失败,为什么要输入正确的用户/pwd 组合?+你可以弄清楚登录查询,它应该非常简单(用户名和密码,也许?