一个Docker容器化的https://github.com/koseven/koseven[koseven]示例,用于演示CVE-2019-8979,这是一个影响3.3.10之前版本的SQL注入漏洞。 该示例实际上来自https://koseven.dev/documentation/orm/examples/simple[文档],我只是添加了Docker部分和PoC漏洞利用。
= CVE-2019-8979 此SQL注入问题最初由第三方https://github.com/koseven/koseven/issues/323[报告]并于2019年2月27日在主分支修复,但开发者忘记发布包含该修复的新版本。 因此,当时最新的稳定版本(于2018年11月20日发布的https://github.com/koseven/koseven/releases/tag/3.3.9[koseven-3.3.9])仍然易受攻击,直到https://github.com/koseven/koseven/releases/tag/3.3.10[koseven-3.3.10]于2020年10月12日发布,起因是https://elttam.com[elttam]在2020年10月10日注意到此事并私下向核心开发者披露了这一疏忽。
= 限制
虽然可以从MySQL获取诸如current_user()、database()或information_schema中的表和列名等信息,但由于strtoupper()在ORDER BY方向输入上被https://github.com/koseven/koseven/blob/3.3.9/modules/database/classes/Kohana/Database/Query/Builder.php#L236[调用],可能无法从其他表中检索数据。
这是因为当MySQL运行在数据目录位于大小写敏感文件系统的操作系统上时,数据库和表名是大小写敏感的。 因此,此SQL注入只有在以下情况下才可能完全利用:
lower_case_table_names的值为> 0更多信息请参见https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html[标识符大小写敏感性]。
= 演示
[#img-demo] [link=https://asciinema.org/a/uQYxQn4vbB6XRFjf8pdIGbmAr] image::https://asciinema.org/a/uQYxQn4vbB6XRFjf8pdIGbmAr.png[Demo,200,200]