Estoy tratando de encontrar cómo explotar mi código SQL

3

Estoy tratando de encontrar una manera de explotar mi procedimiento almacenado para probar problemas de seguridad, específicamente he estado probando la inyección basada en el truncamiento de SQL, pero no tuve éxito hasta ahora; No creo que sea necesariamente porque el código es inmune a la inyección de SQL, pero tal vez porque mis casos de prueba no fueron exhaustivos, ¿es este código explotable? Ejemplo?

USE [MyDB]
GO
SET ANSI_NULLS ON

GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[sp_mySP]       
    @Myfirst nvarchar(10),
      @Mysecond nvarchar(400)

AS
BEGIN
DECLARE @SQLString nvarchar(MAX);
DECLARE @ParmDefinition nvarchar(MAX);
      SET NOCOUNT ON;      
      SET @SQLString =  N'insert into MyTable (Myfirst, Mysecond) values (@first,@second)';
      SET @ParmDefinition = N'@first nvarchar(10),@second nvarchar(400)';

      exec sp_executesql
            @SQLString,@ParmDefinition,
            @first = @Myfirst,
            @second = @Mysecond;
END

Para el registro, aquí está el código .NET que accede a la base de datos, sin embargo, quiero que el procedimiento almacenado sea seguro por sí mismo sin suposiciones sobre la función de llamada.

           cmd = new SqlCommand("sp_mySP", Con); //The SQL Command

        cmd.CommandType = CommandType.StoredProcedure;

        //Parameters
        SqlParameter first = new SqlParameter("@Myfirst", SqlDbType.NVarChar, 10);
        SqlParameter second= new SqlParameter("@Mysecond", SqlDbType.NVarChar, 400);
        first.Value = "value-here";// <-- Definitely not the test cases I used
        second.Value = "value-here";

        cmd.Parameters.Add(first);
        cmd.Parameters.Add(second);        

        Con.Open();
        cmd.ExecuteScalar();
    
pregunta Orca 17.03.2011 - 10:32
fuente

2 respuestas

2

Sí, lo que tienes es seguro. Suponiendo que los datos en MyTable no se "ejecuten" de ninguna manera tampoco.

Si tuviera que seleccionar la columna MyFirst o MySecond de MyTable y luego pasarla a EXEC sin usar la sintaxis de parámetros que describió anteriormente, eso sería malo. Básicamente, nunca pase una entrada de cadena por parte del usuario como el primer parámetro a EXEC o sp_executesql.

    
respondido por el CodeNaked 24.03.2011 - 00:27
fuente
6

¿El ataque de inyección de SQL de truncamiento solo se aplica a construcciones de consultas dinámicas / concatenadas?

    
respondido por el TobyS 17.03.2011 - 15:49
fuente

Lea otras preguntas en las etiquetas