明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

具有自攻擊性的代碼

[摘要]具有自攻擊性的代碼 寫(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命令。





標(biāo)簽:具有自攻擊性的代碼