为了满足群员没日没夜的复读需求,特写了个简单的机器人,用于负责自动禁言
SELECT * FROM data WHERE qun = "群号" AND time >= 20分钟前的时间戳 ;
SELECT * FROM data WHERE qun = "群号" AND time >= 20分钟前的时间戳 AND msg = '遍历的消息';
看起来没有任何问题对吧?
实际上问题大得很呢。
由于机器人故意使用了sql语句拼接的方式,如果在msg,也就是消息那边做手脚,那么有没有可能性混淆甚至修改sql语句为自己想要的呢?
在最早的版本当中,对msg没有做任何处理,这也是最容易注入的版本
比方说,我们发送的消息是%' OR time < 1569334920 AND QQ = '834047409
我们看起来它没有任何问题,但在机器人执行的时候,问题就大了
通过对 单引号的混淆 ,我们成功的修改了sql语句
在机器人禁言的第5步骤,使用的语句变成了SELECT * FROM data WHERE qun = "707671481" AND time >= 1569334120 AND msg = '%' OR time < 1569334920 AND QQ = '834047409';
这个语句的含义就和原来完全不一样了
由于 msg = '%' 这个语句的存在,使前面检索出来的所有记录全为空了,也就是说没有检索到任何一条记录,等同于前面的语句全部作废,生效的只有后面的 time < 1569334920 AND QQ = '834047409'
这是个什么意思?
意思就是,找出3分钟前834047409这个QQ号所发送的所有消息,由于已经制定了时间戳,所以肯定满足180s这个条件,这个哥们就被立竿见影的禁言了。
本文作者:卖女孩的小火柴 - 搬砖中
本文链接:https://www.shinenet.cn/archives/49.html
最后修改时间:2019-12-23 19:33:56
本站未注明转载的文章均为原创,并采用 CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!