悲哀的數據庫注入替換

    最近 網站的數據庫被注入了代碼,同事要我搞個SQL給他,
    剛好自己收藏下, 免得以後在寫,最好是不要用了

    廢話少說 ,上碼
   
    以下sql語句針對於數據庫列後邊注入代碼的情況.
        nvarchar 類型的替換方式
     
        update tablexxx

set columns=replace(columns , substring(columns , charindex('</a' , columns),len(columns)-charindex('</a' , columns)+1),'')

where  charindex('</a' , columns),len(columns) >0 

       text , ntext 類型的替換方式

       

       (1)當字段長度小於8000
       update test set textdemo=replace(convert(varchar(8000),textdemo),

substring(textdemo , charindex('<div class="wxmsjhqx"' , textdemo),len(convert(varchar(8000),textdemo))-charindex('<div class="wxmsjhqx">' , textdemo)+1),'') 

where  charindex('<div class="wxmsjhqx"' , textdemo) >0

       (2)大於 小於 8000多可以用
        

declare @s_str varchar(8000) ,@d_str varchar(8000)

--要替換的字符串

select @s_str ='要替換的字符串',

@d_str=''

 declare @ptrval varbinary(16) ,@str int ,@rplen int 

declare cur cursor for select textptr(textdemo),

charindex('<div class="wxmsjhqx">' ,textdemo)-1,

len(@s_str)

from test where textdemo like '%<div class="wxmsjhqx">%'

open cur

 fetch next from cur into @ptrval ,@str ,@rplen

  while(@@fetch_status =0)

    begin

      declare @sql nvarchar(1000)

      set @sql = 'UPDATETEXT test.textdemo @ptrval '+ltrim(@str)+' '+ltrim(@rplen)+' N'''''

      exec sp_executesql @sql ,N'@ptrval varbinary(16)' ,@ptrval

      print @rplen

      print @str

      print @ptrval

      fetch next from cur into @ptrval ,@str ,@rplen

    end

close cur 

deallocate cur

   

     數據 表 

     CREATE TABLE [dbo].[test](

[id] [int] IDENTITY(1,1) NOT NULL,

[mytext] [nvarchar](3000) COLLATE Chinese_PRC_CI_AS NULL,

[textdemo] [text] COLLATE Chinese_PRC_CI_AS NULL

     ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]



     語句比較簡單。


      


     


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章