【问题标题】:SQL Server database injectionSQL Server 数据库注入
【发布时间】:2016-10-05 06:08:57
【问题描述】:

我在 asp 中有一个带有 SQL Server 后端数据库的简单 Web 应用程序。登录页面有一个注入点,我可以通过通常的方式绕过登录 ' ' 或 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_account 是列,tblCustomers 是表名。

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

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

我将非常感谢您对此提供的任何帮助。谢谢。

【问题讨论】:

  • 使第一个查询不允许登录。即代替“or 1 = 1”写“and 1
  • 谢谢马克。我试过你的建议。 ` 和 1
  • 那么我将其添加为答案,如果您接受,谢谢;)
  • 尝试union select 1,1,1,1(并再次)计算select 中的字段数。无法保证成功,因为页面可能会在第一行之后停止阅读。
  • 嗨,Alex,您建议的查询给了我一个错误 Syntax error converting the varchar value 'abraham' to a column of data type int 我希望第一列 cust_id 是数据类型 int。另外,我想提一下,错误页面是一个传统的“页面未显示”,并且包含某处的信息以及 POST 请求详细信息

标签: sql sql-server sql-injection penetration-testing


【解决方案1】:

使第一个查询不允许登录。即代替“or 1 = 1”写“and 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 2010-11-29
    • 2018-04-17
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多