背景知识

    最近,我遇到了一段有趣的代码,他尝试一切可能来保护数据库的访问安全,例如每当新用户进行注册,将运行以下代码:

    sql约束攻击(SKCTF管理系统) - 图1

    为了验证登录信息,将用到下列代码:

    sql约束攻击(SKCTF管理系统) - 图2

    攻击手段

    首先在处理sql中的字符串时,字符串末尾的空格符都会被删除,换句话来说,”vampire”与”vampire “(有空格)几乎是等效的,这在绝大多数情况下是正确的,例如where子句中的字符串或insert语句中的字符串。

    例如,下列语句的查询结果,与使用用户名”vampire”进行查询时的结果是一样的

    sql约束攻击(SKCTF管理系统) - 图3

    究其原因是因为在字符串比较过程中,内部在比较之前先进行了补充,使其长度一致再进行比较。

    下面在本地复现一遍

    sql约束攻击(SKCTF管理系统) - 图4

    sql约束攻击(SKCTF管理系统) - 图5

    这样我们就达到越权的目的。



    sql约束攻击的条件:

    sql约束攻击(SKCTF管理系统) - 图6

    回到题目

    sql约束攻击(SKCTF管理系统) - 图7