MySQL攻击次数

本文深入探讨了MySQL数据库的两种常见安全漏洞:二次注入与约束攻击。通过实例详细讲解了这两种注入方式的工作原理及如何利用。二次注入发生在过滤不严格的情况下,而约束攻击则利用了表结构的设计缺陷。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL注入总结

二次注入

简介
在第一次进行数据库插入数据的时候,过滤不严格,在写入数据库的时候还是保留了原来的数据,但是数据本身还是恶意数据。在将数据存入到了数据库中之后,开发者就认为数据是可信的。在下一次进行需要进行查询的时候,直接从数据库中取出了脏数据,没有进行进一步的检验和处理,这样就会造成SQL的二次注入。比如在第一次插入数据的时候,数据中带有单引号,直接插入到了数据库中;然后在下一次使用中在拼凑的过程中,就形成了二次注入。

例子
select * from users where username =’$_SESSION[‘username’]’

登录/注册处的SQL语句都经过了addslashes函数、单引号闭合的处理,且无编码产生的问题。

对于上述举的语句我们可以先注册一个名为admin’ # 的用户名,因为在注册进行了单引号的转义,故我们并不能直接进行insert注入,最终将我们的用户名存储在了服务器中

注意:反斜杠转义掉了单引号,在mysql中得到的数据并没有反斜杠的存在

在我们进行登录操作的时候,我们用注册的admin’ # 登录系统,并将用户部分数据存储在对于的SESSION中,

如$_SESSION[‘username’]。

上述的$_SESSION[‘username’]并没有经过处理,直接拼接到了SQL语句之中,就会造成SQL注入,最终的语句为:

select * from users where username ='admin' #'

简单的说此种注入一般会在有魔术引号的地方比较的多,常用的利用方式是先创建一个新的用户,然后更改用户密码把管理员的密码更改掉。

约束攻击

产生原因:

1.创建表格的语句限制了长度

2.超过了限制长度,mysql会截取限制长度的内容进行插入

3.而对于SELECT查询请求,若查询的数据超过限制长度,也不会进行截取操作,这就产生了一个问题

4.通常对于注册处的代码来说,需要先判断注册的用户名是否存在,再进行插入数据操作。

5.如我们注册一个username=admin[25个空格]x&password=123456的账号,服务器会先查询admin[25个空格]x的用户是否存在,若存在,则不能注册。若不存在,则进行插入数据的操作。

6.而此处我们限制了username与password字段长度最大为25,所以我们实际插入的数据为username=admin[20个空格]&password=123456。

7.接着进行登录的时,我们使用:username=admin&password=123456进行登录,即可成功登录admin的账号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值