【bugku_writeup】web25 SQL约束攻击

本文探讨了SQL注入时如何利用字符串长度比较和INSERT截断特性,通过注册新用户绕过系统限制,实现管理员权限登录。实例展示了如何利用空格和特定字符组合获取flag的过程。

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

基础知识:基于约束的SQL注入

1.数据库字符串比较:在数据库对字符串进行比较时,如果两个字符的长度不一样,则会将较短的字符串末尾填充空格,使两个字符串的长度一致.

比如这两条语句

select * from admin where username='vampire'

select *from admin where username='vampire '

他们的查询结果是一致的.

2.INSERT截断: 这是数据库的另一个特性,当设计一字段时,我们都必须对其设定一个最大长度,比如CHAR(255),VARCHAR(20),但是当长度超过限制的时候,数据库就会将其截断,只保留限定的长度.(注意这里我们为什么需要insert注入:空格之后一定需要再跟一个或多个任意字符,防止程序在检查用户名是否已经存在时匹配到目标用户)

利用:

假设注=已有一个用户admin password

当我们注册新用户admin                                                 ’    123456时

数据就会保存有

admin password

admin 123456

此时,登录admin便可使用admin 123456

解题思路

发现要注册

注册完后可以登录,但提示想要获取flag的话需要管理员身份,猜测管理员用户名为admin

重新注册

admin                  1   //空格是为了截断,1是为了与原有的admin不冲突,不会显示已注册的提示,但是保存时则是admin

123456aA

使用admin 123456aA登录,得到flag

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值