[FBCTF2019]Products-Manager
考点:
- 基于约束的SQL攻击
- 数据库字符串比较
- INSERT截断
给了源码,分析一下的话,footer.php没有东西,index.php也差不多
但是db.php里面的:
1 | /* |
SQL语言,有一些插入的数据,可以发现flag在facebook里面,那基本上就是用一些手段讲facebook的密码套出来,或是直接修改
知识点:
1.数据库字符串比较
在数据库对字符串进行比较时,如果两个字符串的长度不一样,则会将较短的字符串末尾填充空格,使两个字符串的长度一致,比如,字符串A:[String]和字符串B:[String2]进行比较时,由于String2比String多了一个字符串,这时MySQL会将字符串A填充为[String ],即在原来字符串后面加了一个空格,使两个字符串长度一致。
如下两条查询语句:
select * from users where username=’Dumb’
select * from users where username=’Dumb ‘
它们的查询结果是一致的,即第二条查询语句中Dumb后面的空格并没有对查询有任何影响。因为在MySQL把查询语句里的username和数据库里的username值进行比较时,它们就是一个字符串的比较操作,符合上述特征。
2. INSERT截断
这是数据库的另一个特性,当设计一个字段时,我们都必须对其设定一个最大长度,比如CHAR(10),VARCHAR(20)等等。但是当实际插入数据的长度超过限制时,数据库就会将其进行截断,只保留限定的长度。
这里已经知道了那个定义的长度64,我可以用
1 | facebook 123 |
注册一个,insert会截断64位(空格也算)之后的字符,但是空格又会在比较时自动对齐,就不用理会