Tweets by @buherablog
profile for buherator at IT Security Stack Exchange, Q&A for IT security professionals

A BitBetyár Blog

Túljártál a nagyokosok eszén? Küldd be a mutatványodat! (e-mail a buherator gmailkomra jöhet)

Full-Disclosure / Névjegy / Coming out


Promó

H.A.C.K.

Címkék

0day (110) adobe (87) adobe reader (21) anonymous (26) apple (60) az olvasó ír (49) blackhat (20) botnet (22) bug (200) buherablog (44) buhera sörözés (39) bukta (49) deface (38) dns (22) dos (29) esemény (82) facebook (26) firefox (64) flash (33) gondolat (31) google (59) google chrome (36) hacktivity (37) hírek (117) incidens (224) internet explorer (88) iphone (35) java (50) jog (22) kína (21) kriptográfia (68) kultúra (21) linux (24) malware (43) microsoft (142) móka (48) mozilla (23) office (26) oracle (40) os x (43) patch (197) php (20) politika (31) privacy (58) programozás (22) safari (34) sql injection (62) windows (85) xss (77) Címkefelhő

Licensz

Creative Commons Licenc

SQL Server csonkolásos támadás

2007.07.22. 08:49 | buherator | Szólj hozzá!

Néhányan úgy gondolják, hogy a tárolt eljárások használata egyúttal biztonságot is jelent az adatbázist használó alkalmazások számára. Ezt a tévhitet eloszlatandó, lássuk hogyan lehet kihasználni az SQL Server automatikus adatcsonkolási tulajdonságát egy rosszul megírt tárolt eljárás esetében!

Tegyük fel, hogy a programozó a QUOTENAME vagy a REPLACE T-SQL függvényt használja az aposztrófok/idézőjelek kicserélésére (ezzel próbálva megakadályozni egy SQL Injection támadást) mielőtt a felhasználótól érkező fix (pontosabban maximalizált) szélességű adatokat beszúrná a megfelelő táblába.

A használt eljárás nézzen ki mondjuk így:

ALTER PROCEDURE sp_setPassword

@username varchar(25),
@old varchar(25),
@new varchar(25)

AS

DECLARE @quoted_username varchar(25)
DECLARE @quoted_oldpw varchar(25)
DECLARE @quoted_newpw varchar(25)
DECLARE @command varchar(250)

-- a változók csak 25 karaktert képesek tárolni
-- megj.: a quotename() 52 karaktert ad vissza
-- ha az összes karakter aposztróf!

SET @quoted_username = QUOTENAME(@username, '''')
SET @quoted_oldpw = QUOTENAME(@old, '''')
SET @quoted_newpw = QUOTENAME(@new, '''')


SET @command= 'update Users set password=' + @quoted_newpw +
' where username=' + @quoted_username +
' AND password = ' + @quoted_oldpw
EXEC (@command)
GO


Mi van akkor, ha a felhasználó által megadott jelszó éppen 24 karakter hoszzú: ajelszo24karakterhosszuu ?

Mivel az SQL Server 2004 SP1 és 2005 SP4 csendben levágja az adat végét, ha az már nem fér be a megfelelő bufferbe, a @quoted_username vátozo értéke 'ajelszo24karakterhosszuu lesz!

Ezek után a lefuttatott kérés így fog kinézni:

update users set password='ajleszo24karakterhosszuu where username=' <Ide jöhet az SQL Injection>


Készült Ronald posztja alapján, az eredeti cikket Bala Neerumalla írta.

Címkék: sql injection sql server sql truncation

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.