基于约束的sql攻击
首先我们先了解一下几个知识点:
1. 在INSERT中,SQL会根据varchar(n)来限制字符串的最大长度。如果字符串的长度大于“n”个字符的话,那么仅使用字符串的前“n”个字符。(这里我们就可以考虑如果我们故意超出规定长度会怎么样?)
2. 在SQL中执行字符串处理时,字符串末尾的空格符将会被删除(结合上面的这里应该就可以构造出payload了)。也有特殊情况,比如LIKE。
现在我们思考
现在一个表里已经有了admin用户
用户名varchar(30)
再插入一个admin (25个空格) 1
因为限制长度30位
所以会只存入前30位 这样就可以创建admin用户
这就是基于约束的sql攻击,我们来看一个例题
--------------------------------------------------------------------------------------
我们查看发现是这样一个页面
我们先注册了一个账号,然后登录发现
那他的这里应该是想我们以admin身份登录
我们尝试一下注册admin账号
这里既然提示admin存在
结合这里题目基于约束的攻击
我们根据攻击原理注册账号
admin 1/Aaaaaaa1
发现成功 然后以admin登录得到flag
防范:
服务端检测输入数据长度