SQL注入二阶注入
🪕

SQL注入二阶注入

Published
Category
渗透测试
Subcategory
渗透测试方法与策略
Tags
SQL注入
二阶注入
Author
KK
Notes
🙎
一阶注射是指输入的注射语句对WEB 直接产生了影响,出现了结果;
🙎
二阶注入类似存储型XSS,是指输入提交的语句,无法直接对WEB 应用程序产生影响,通过其它的辅助间接的对WEB 产生危害,这样的就被称为是二阶注入。
 

二次排序注入思路:

  1. 黑客通过构造数据的形式,在浏览器或者其他软件中提交HTTP 数据报文请求到服务端进行处理,提交的数据报文请求中可能包含了黑客构造的SQL 语句或者命令。
  1. 服务端应用程序会将黑客提交的数据信息进行存储,通常是保存在数据库中,保存的数据信息的主要作用是为应用程序执行其他功能提供原始输入数据并对客户端请求做出响应。
  1. 黑客向服务端发送第二个与第一次不相同的请求数据信息。
  1. 服务端接收到黑客提交的第二个请求信息后,为了处理该请求,服务端会查询数据库中已经存储的数据信息并处理,从而导致黑客在第一次请求中构造的SQL 语句或者命令在服务端环境中执行。
  1. 服务端返回执行的处理结果数据信息,黑客可以通过返回的结果数据信息判断二次注入漏洞利用是否成功。此例子中我们的步骤是注册一个 admin’#的账号,接下来登录该帐号后进行修改密码。此时修改的就是 admin的密码。Sql 语句变为 UPDATE users SET passwd="New_Pass" WHERE username =' admin' # ' AND password=' , 也就是执行了 UPDATE users SET passwd="New_Pass" WHERE username ='admin'
 

步骤演示:

  1. 初始数据库为
    1. notion image
  1. 注册admin’#账号
    1. 注意此时的数据库中出现了admin’#的用户,同时admin 的密码为123
      注意此时的数据库中出现了admin’#的用户,同时admin 的密码为123
  1. 登录admin’#,并修改密码
    1. 可以看到admin 的密码已经修改为1111
      可以看到admin 的密码已经修改为1111
       

      举例说明一:

      • 首先,攻击者将恶意代码插入到数据库中。例如,攻击者在一个留言板网站上发布一条评论,评论内容可能包含以下恶意代码:
      正常的评论内容'; DROP TABLE users; --
      • 服务器将评论内容存储在数据库中,此时恶意代码还未生效。
      • 然后,当其他用户访问留言板时,服务器将从数据库中检索所有评论并显示在页面上。在这个过程中,服务器会执行 SQL 查询,如:
      SELECT * FROM comments;
      • 当服务器执行这个查询时,之前存储的恶意代码也会被执行。在本例中,恶意代码将导致 "users" 表被删除。这就是二次注入的过程。
       

      举例说明二:

      • 步骤1:攻击者更改用户名
        • 攻击者将自己的用户名更改为以下内容:
      normaluser'; DROP TABLE posts;--
      • 在这个例子中,攻击者在原始用户名后面添加了一段恶意SQL代码,目的是删除名为“posts”的数据表。分号(;)用于在SQL中分隔多个语句,而"--"表示注释,使得后面的任何文本都不会被执行。
      • 步骤2:管理员查看用户列表
        • 当管理员查看用户列表时,应用程序会从数据库中获取所有用户名并显示。如果没有正确处理用户输入,应用程序可能会执行类似以下的查询:
      SELECT * FROM users WHERE username = 'normaluser'; DROP TABLE posts;--'
      在这个查询中,攻击者插入的恶意代码被触发,导致“posts”数据表被删除。
       

      举例说明三:

      • 攻击者首先通过正常途径发表一条评论,但评论的内容包含恶意SQL代码。例如:
      Nice post!') UNION SELECT username, password FROM users WHERE '1'='1
      • 网站在显示评论时,会从数据库中检索评论,通常类似这样的查询:
      SELECT author, comment FROM comments WHERE post_id = X
      • 当检索到攻击者发表的评论时,恶意的SQL代码将与原始查询结合,形成一个联合查询,如下所示:
      SELECT author, comment FROM comments WHERE post_id = X AND comment = 'Nice post!') UNION SELECT username, password FROM users WHERE '1'='1'
      • 结果是,网站将显示攻击者插入的恶意评论,但在后台,数据库实际上执行了一个额外的查询,泄露了所有用户名和密码。这些敏感信息可能被攻击者用于进一步攻击,例如尝试登录其他用户的账户。