具有自攻擊性的代碼
發(fā)表時(shí)間:2024-02-23 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]具有自攻擊性的代碼 寫(xiě)出這類(lèi)代碼的程序員如果被點(diǎn)破那么一定會(huì)被認(rèn)為是大腦進(jìn)水,但是這類(lèi)的代碼已經(jīng)漫天飛舞甚至成為葉子認(rèn)為攻擊網(wǎng)站的最好手段之一,現(xiàn)看下面的一段代碼:<%set dbr = server.createobject("adodb.recordset")dbr....
具有自攻擊性的代碼 寫(xiě)出這類(lèi)代碼的程序員如果被點(diǎn)破那么一定會(huì)被認(rèn)為是大腦進(jìn)水,但是這類(lèi)的代碼已經(jīng)漫天飛舞甚至成為葉子認(rèn)為攻擊網(wǎng)站的最好手段之一,現(xiàn)看下面的一段代碼:
<%set dbr = server.createobject("adodb.recordset")
dbr.open "SELECT * from testapp where id="& request("id") ,session("DS"),1,1
for i = 1 to dbr.recordcount %>
<%=dbr("id")%>-<%=dbr("title")%><br>
dbr.movenext
next
dbr.close
set dbr=nothing %>
這段代碼是根據(jù)輸入ID返回ID相關(guān)的標(biāo)題名稱(chēng),相應(yīng)的數(shù)據(jù)庫(kù)構(gòu)造腳本為
CREATE TABLE [dbo].[testapp] (
[id] [int] NOT NULL , [title] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
但是這個(gè)腳本并沒(méi)有任何的安全檢查功能,這樣的腳本就是一個(gè)系統(tǒng)漏洞,先看一下正常腳本的執(zhí)行情況:在瀏覽器中正常的敲入地址http://127.0.0.1/testapp/index.asp?id=5
將看到正常的顯示結(jié)果
圖-2 但如果輸入特殊的請(qǐng)求,如http://127.0.0.1/testapp/index.asp?id=5;update%20testapp%20set%20id=id%2b%201
這時(shí)候這段代碼中瀏覽器并沒(méi)有任何顯示
圖-3
好象什么都沒(méi)有執(zhí)行,實(shí)際上在內(nèi)部數(shù)據(jù)就已經(jīng)變化了,看下面的SQL SERVER的屏幕執(zhí)行前的數(shù)據(jù)如圖
圖-4 執(zhí)行后的數(shù)據(jù),
如圖
圖-5 可見(jiàn)表中數(shù)據(jù)ID列全部增加了1,正符合在連接地址欄中巧入的連接http://127.0.0.1/testapp/index.asp?id=5;update%20testapp%20set%20id=id%2b%201
其實(shí)對(duì)這個(gè)連接解碼再結(jié)合程序可以得到SQL語(yǔ)句 SELECT * from testapp where id=5;update testapp set id=id + 1 連接中的%20是空格的16進(jìn)制代碼%2b是“+”的十六進(jìn)制代碼
因此組成了以上語(yǔ)句。由于其中分號(hào)的作用SQL SERVER將一行SQL語(yǔ)句分解成若干行語(yǔ)句執(zhí)行因此在執(zhí)行過(guò)SELECT * from testapp where id=5語(yǔ)句后再次執(zhí)行update testapp set id=id + 1語(yǔ)句使ID列增加1 這個(gè)后部的update testapp set id=id + 1也可以根據(jù)攻擊的需要替換成delete 以及 insert甚至在權(quán)限允許的條件下可以使用xp_cmdshell執(zhí)行CMD命令。