Archivo para inyección

Los 25 errores de programación más peligrosos

Posted in Tecnología with tags , , , on 14 enero, 2009 by febrer

Un grupo internacional de expertos (Instituto SANS) , ha publicado la lista de los 25 errores de programación más importantes. El grupo incluye, entre otros, al ministerio de seguridad interior de EEUU y NSA, la organización japonesa IPA y empresas privadas como Microsoft y Symantec.

Entre estos errores estan los relacionados con la validación de datos introducidos en formularios por el usuario, que llevan a los ataques vía SQL-Injection o Cross-Site Scripting.

Estos errores han sido los causantes de 1.5 millones de vulnerabilidades durante el 2008, que han posibilitado que muchas de los ordenadores utilizados para visitar los sitios afectados se conviertan en zombis.

Ésta es la lista de errores traducida por Andrés Panitsch: 
http://desdesarrollodesoftware.blogspot.com/2009/01/errores-de-programacin-los-25-ms.html

Fuente original: Instituto SANS, y detalle de vulnerabilidades.

Ataques por inyección de código en URL

Posted in Programación with tags , , on 24 julio, 2008 by febrer

¿Quién no está sufriendo últimamente ataques de Inyección de SQL en URL?

Si te ha pasado como a mí, que tienes desarrollos antiguos en ASP contra SQL Server, y has sufrido alguna inyección del tipo: http://www.mitxatxidominio.com/mipaginitamalprogramada.asp?miparam=23;DECLARE%20@S%20VARCHAR(4000);SET%20@S=CAST(0x4445434C41524520405420564152434…txurro que te crio. Y si encima has tenido la mala suerte de no hacer un cast del request con cint y te la han colao ….., te habrás encontrado con código basura en todos los campos de texto de la base de datos.

Para limpiar la “mierda” de tu servidor, este es el procedimiento almacenado que he utilizado (es un procedimiento para realizar sustituciones de cadenas en todos los campos de texto de todas las tablas de tu BD) (USALO CON PRECAUCIÓN, Y RECETA MÉDICA):

CREATE PROC SearchAndReplace
(
@SearchStr nvarchar(100),
@ReplaceStr nvarchar(100)
)
AS
BEGIN

— Copyright 2002 Narayana Vyas Kondreddi. All rights reserved.
— Purpose: To search all columns of all tables for a given search string and replace it with another string
— Written by: Narayana Vyas Kondreddi
— Modificación: Juan Carlos Febrer
— Site: http://vyaskn.tripod.com
— Tested on: SQL Server 7.0 and SQL Server 2000 and SQL Server 2005
— Date modified: 2nd November 2002 13:50 GMT 

SET NOCOUNT ON

DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110), @SQL nvarchar(4000), @RCTR int
SET @TableName = ”
SET @SearchStr2 = QUOTENAME(‘%’ + @SearchStr + ‘%’,””)
SET @RCTR = 0

WHILE @TableName IS NOT NULL
BEGIN
SET @ColumnName = ”
SET @TableName =
(
SELECT MIN(QUOTENAME(TABLE_SCHEMA) + ‘.’ + QUOTENAME(TABLE_NAME))
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = ‘BASE TABLE’
AND QUOTENAME(TABLE_SCHEMA) + ‘.’ + QUOTENAME(TABLE_NAME) > @TableName
AND OBJECTPROPERTY(
OBJECT_ID(
QUOTENAME(TABLE_SCHEMA) + ‘.’ + QUOTENAME(TABLE_NAME)
), ‘IsMSShipped’
) = 0
)

WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
BEGIN
SET @ColumnName =
(
SELECT MIN(QUOTENAME(COLUMN_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2)
AND TABLE_NAME = PARSENAME(@TableName, 1)
AND DATA_TYPE IN (‘char’, ‘varchar’, ‘nchar’, ‘nvarchar’, ‘ntext’, ‘text’)
AND QUOTENAME(COLUMN_NAME) > @ColumnName
)

IF @ColumnName IS NOT NULL
BEGIN
SET @SQL= ‘UPDATE ‘ + @TableName +
‘ SET ‘ + @ColumnName
+ ‘ = REPLACE(cast(‘ + @ColumnName + ‘ as varchar(8000)), ‘
+ QUOTENAME(@SearchStr, ””) + ‘, ‘ + QUOTENAME(@ReplaceStr, ””) +
‘) WHERE ‘ + @ColumnName + ‘ LIKE ‘ + @SearchStr2
EXEC (@SQL)
SET @RCTR = @RCTR + @@ROWCOUNT
END
END
END

SELECT ‘Replaced ‘ + CAST(@RCTR AS varchar) + ‘ occurence(s)’ AS ‘Outcome’
END

 

Esta es una versión modificada de la realizada por Narayana Vyas Kondreddi que permite buscar y sustituir también en los campos “ntext” y “text” (memo).

Si deseas más información sobre este tipo de ataques, te recomiendo:

-Técnicas avanzadas en ataques Blind SQL Inyección (Chema Alonso)
-Protegerse de las inyecciones SQL por URL (Rodrigo Corral)
-Gustavo Velez (SkunkWorks)