-
-
[分享]Tcsec安全研究院|postgreSQL与Mysql利用的一些差异
-
发表于: 2022-11-17 10:38 683
-
在之前的某云sql挑战赛中,发现psql的特性与其他数据库有些许不同。经过事后的一些研究,发现一些有趣的特性,特此分享给各位。(本次分享测试的postgresql版本为 v14.5)。
·单引号的特性
在postgresql官方文档中记录着一个单引号的特性,如下:
简单理解就是一个字符串常量可以用单引号和换行符分割,经过测试,发现以下语法均支持。
小结:由于语法结构的特殊性,一些语义分析的waf可能不能正常识别该语法。说明可以利用该语法特性混淆绕过一些waf的检测。
双引号的特性
在postgresql官方文档中,双引号被用于解决关键字和用户定义的冲突问题,假如用户需要新建一个user表:
以上报错的主要原因为:user是关键字。postgresql可通过双引号包裹的形式用于区分用户定义和内置关键字之间的区别,当然列名也同样可以用双引号包裹。
但是这个特性是有什么用呢?双引号包裹的字符并不是字符串,不能使用字符串的各种编码以及函数。
直到在官方文档中发现一个内置的编码格式,支持双引号包裹的特殊型,unicode编码,支持3种unicode格式:
这样就可用于表名、字段名关键字的绕过。
数字的特性
在测试过程中发现一个有趣的现象:数字+关键字的情况下,关键字依旧会高亮显示。
通过这一特征我们作出猜测:关键字能不能正常识别呢?
经过大量的测试,最终发现在一个正常语法结构支持出现数字的地方,假如后面有关键字,删除空格就不会受影响,举例如下:
小结:简单来说就是在语法正确的情况下,数字和关键字之间的空格可删除(是数字+关键字的情况,不可调换)。
XML的函数
在postgresql官方文档中,XML存在几个特殊的函数 query_to_xml 、table_to_xml、database_to_xml , 官方文档用法如下:
table_to_xml 可通过传入表名直接查询数据,返回数据格式为XML格式。
query_to_xml 可通过传入查询语句,返回数据格式为XML格式。
database_to_xml 可直接查询所有用户表的数据。
其中最值得注意的是这些函数传入的参数都是字符串,而且还支持各种字符串的函数和编码格式。
这里只简单列举几个用法,该特性可用于过一些未过滤的xml函数关键字的waf。
总结
postgresql还有很多不同于其他数据库的特性,官方文档中也还有很多其他有意思的函数,本文只简单的分析研究院发现的4个比较有用、又不同于其他数据库的性质或者函数,希望以后能跟大家分享更多有意思的性质。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)