asp個人首頁安全總結(jié)
發(fā)表時間:2023-07-03 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]前言: 最近在做畢業(yè)設(shè)計, 一同學(xué)問我asp做的站應(yīng)該注意哪些安全問題, 我納悶了好久, 我自己都沒考慮這個問題的, 哎, 這同學(xué)也太認(rèn)真了!想一想大家努力學(xué)習(xí)了html, javascript,...
前言:
最近在做畢業(yè)設(shè)計, 一同學(xué)問我asp做的站應(yīng)該注意哪些安全問題, 我納悶了好久, 我自己都沒考慮這個問題的, 哎, 這同學(xué)也太認(rèn)真了!想一想大家努力學(xué)習(xí)了html, javascript, asp后, 是不是都想自己做個個人主頁掛到網(wǎng)上呢, 是不是搞了半天就做了幾個頁面出來了, 最后還是到網(wǎng)上找一有后臺的改改, 掛網(wǎng)上去了。 這下就應(yīng)該注意一下常見的安全漏洞了, 雖然都比較老, 可是新手根本不知道有這回事所以老犯這個錯誤的。 于是根據(jù)自己以前改別人系統(tǒng)的經(jīng)驗(yàn), 總結(jié)了下, 也算是對他的交代, 嘿嘿, 新手進(jìn)來, 菜鳥飄過, 還是那句話。 自己不知道, 并不表示不存在!下面以我改的主頁來說明下!
1爆庫
原理:
"%5c"暴庫法, 它不是網(wǎng)頁本身的漏洞, 而是利用了iis解碼方式中的一個特性, 如果iis安全設(shè)置不周全, 而網(wǎng)頁設(shè)計者未考慮IIS錯誤, 就會被人利用。 為何要用"%5c"?它實(shí)際上是"\"的十六進(jìn)制代碼, 也就是"\"的另一種表示法。 當(dāng)我們把"/"換成十六進(jìn)制寫法"%5c"時, ie不會對此進(jìn)行轉(zhuǎn)換。 地址中的"%5c"被原樣提交了.當(dāng)iis收到后解析時, 又會將%5c還原成"\",所有調(diào)用數(shù)據(jù)庫的連接文件中都有Server.MapPath方法的作用是將網(wǎng)站中的相對路徑轉(zhuǎn)變成物理上的絕對路徑。 為何要這樣?因?yàn)檫B接數(shù)據(jù)庫時, 須指明它的絕對路徑。
也就是說網(wǎng)址目錄只表示從根目錄起的相對位置。 當(dāng)Server.MapPath方法將相對路徑轉(zhuǎn)為真實(shí)路徑時, 它實(shí)際是三部分路徑加在一起得到真實(shí)路徑的:網(wǎng)頁目前執(zhí)行時所在的相對路徑, 也就是從網(wǎng)站物理根目錄起的相對路徑, 設(shè)置過iis的人都會知道, 每一個網(wǎng)站, 都必須指定它在硬盤上的物理目錄, Server.MapPath方法正是通過把"網(wǎng)站根目錄的物理地址+完整的相對路徑", 從而得到真實(shí)的物理路徑。 在這里, IIS以"\"表示真實(shí)路徑的目錄關(guān)系, 而以"/"表示虛擬路徑, 這可能就是IE會自動把我們地址中的"\"轉(zhuǎn)為"/"的原因, 在iis中, "/"和"\"代表著不同的意義, 遇到了"\"時, 認(rèn)為它已到了根目錄所在的物理路徑, 不再往上解析, 而這個路徑是不存在的, 數(shù)據(jù)庫連接當(dāng)然會失敗, 于是IIS會報錯, 并給出錯誤原因。
我們只有在數(shù)據(jù)庫相對地址和它的目錄絕對地址之間使用"\"("%5c"), 才能達(dá)到目的。 即是在最右邊第一個/處使用%5c成功可能性是最大的.
conn.asp(數(shù)據(jù)庫連接文件)暴庫大法, 如果說第一種暴庫法是利用了絕對路徑出錯, 那么, 這種暴庫法就是利用了相對路徑出錯。 一般來說, 只要conn.asp不在根目錄的系統(tǒng), 而調(diào)用文件在根目錄, 就會出現(xiàn)這種問題。 當(dāng)然這種說法也是經(jīng)驗(yàn)性的, 準(zhǔn)確的說就是, conn.asp與調(diào)用它的文件, 如果相對位置改變了, 就會報錯, 暴出數(shù)據(jù)庫路徑。
利用:
下面是我自己的電腦上測試:訪問
http://localhost/198816/index.asp, 正常訪問,
然后將url改成http://localhost/198816%5cindex.asp, 出現(xiàn)如下錯誤:
Microsoft JET Database Engine (0x80004005)
找不到文件 'E:\10\data.mdb'。
/data.asp, 第 11 行
看這里爆庫出現(xiàn)了, 得到了數(shù)據(jù)庫名字和路徑;
我們可以將其下載,
在ie輸入http://localhost/198816/data.mdb, 出現(xiàn)下載頁面。
下載了數(shù)據(jù)庫之后, 如果數(shù)據(jù)庫有密碼, 使用access密碼破解器, 不要幾秒就可以得到密碼, 下面就可以瀏覽所有數(shù)據(jù)庫的內(nèi)容了, 一般后臺密碼都是MD5加密的, 可以直接上MD5網(wǎng)站破解出來!如果無法查詢到, 那就是運(yùn)氣問題了, 如果你肉雞夠好夠多, 那就慢慢暴力破解吧!不過暴力破解好象沒有誰會這樣做!
Conn爆庫也類似!
防范方法:
在數(shù)據(jù)庫連接文件中加入容錯語句即可, 我在data.asp的開頭加入了,
On Error Resume Next
再在結(jié)尾加入錯誤處理語句,
If Err Then
err.Clear
Set Conn = Nothing
Response.Write "fuck!"
Response.End
End If
現(xiàn)在再去爆庫, 你發(fā)現(xiàn)頁面只輸出了fuck!爆庫不成功!
下面我們說說即使存在爆庫, 在別人知道你數(shù)據(jù)庫路徑的情況下, 別人也無法下載你的數(shù)據(jù)庫!
2數(shù)據(jù)庫安全
asp結(jié)合access數(shù)據(jù)庫是最常見的, access數(shù)據(jù)庫最大的缺點(diǎn)就是容易被搜索到, 然后被下載, 而暴露帳號和密碼, 防止數(shù)據(jù)庫被下載的常見方法有如下幾種, 如果你有更好的方法請告訴我。 我也是菜鳥·~~~~:
1. 將數(shù)據(jù)庫改成自己都無法記住的BT名字。 這種方法對爆庫沒用, 而且使用google也有可能搜到數(shù)據(jù)庫路徑。
2. 在數(shù)據(jù)庫名字中加#號或者%24=$等特區(qū)字符, 利用URL編碼特性防止下載。
3. 去掉后綴, 不要擴(kuò)展名, 系統(tǒng)有可以解析成路徑, 從而無法下載, 當(dāng)然XP下測試是可以下載的, 我的格式是fat32。 其他系統(tǒng)沒測試, 有人測試了告訴我下, 謝謝!
4. 加系統(tǒng)文件的后綴, 如后綴改為.db, .temp等。 聽說系統(tǒng)是不允許下載這些后綴的文件的!
5. 在數(shù)據(jù)庫中建立一個nodown的表, 建立一個字段數(shù)據(jù)類型選擇ole對象。
6. 網(wǎng)絡(luò)上最常見的方法是, 把數(shù)據(jù)庫后綴改為asp等系統(tǒng)可以解析的后綴。
第6個是網(wǎng)絡(luò)上使用的最多的方法, 但是也不是完美的, 如果別人可以通過留言等其他方法向數(shù)據(jù)庫提交數(shù)據(jù), 那就危險了, 如果別人提交<%execute(request("a"))%>到數(shù)據(jù)庫, 那么訪問數(shù)據(jù)庫就可以執(zhí)行了此語句, 這樣可以執(zhí)行提交的任意代碼。
當(dāng)然這個也是可以消除的, 我們可以通過在ole對象中加入如<%loop <%loop <%1=2<%2=1這樣的語句, 讓asp出錯來防止下載。 實(shí)現(xiàn)這種效果我采用兩種方法實(shí)現(xiàn)過, 一.
建立一個nodown的表, nodown的字段, 類型選擇ole對象, 然后建立一個文本文件。 里面的內(nèi)容為<%loop <%loop <%1=2<%2=1, 然后打開nodown表, 選擇nodown字段, 右擊選擇插入對象, 選擇由文件創(chuàng)建, 瀏覽對位到剛才建立的文本文件, 加入nodown表中, 然后把數(shù)據(jù)庫改為asp后綴, 在訪問, 發(fā)現(xiàn)出現(xiàn)如下錯誤:
Active Server Pages, ASP 0116 (0x80004005)
Script 塊缺少腳本關(guān)閉標(biāo)記(% >)。
/198816/dataasp.asp, 第 577 行
說明成功實(shí)現(xiàn)。 這里nodown表一定要在其他表的前面, 注意了!(我也不知道需要不需要)。
二.
使用asp代碼, 向數(shù)據(jù)庫中增加nodown的表和字段, 代碼如下:
<%
db="data.mdb" ‘這里改成數(shù)據(jù)庫的地址
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ù)庫的問題, 就是刪除掉大量數(shù)據(jù)后, 數(shù)據(jù)庫大小并沒有改變, 這里只要使用工具-〉數(shù)據(jù)庫實(shí)用工具-〉壓縮和修復(fù)數(shù)據(jù)庫, 就可以了!
我的設(shè)置如下:
密碼設(shè)置復(fù)雜點(diǎn), 并且MD5加密, 使用第一種方法加入nodwon表和字段, 數(shù)據(jù)庫后綴改為asp, 名字改為%24#$%da#%ta@##%conn#.asp.
我覺得對于個人主頁來說, 已經(jīng)比較安全了, 但是安全不是絕對的.
3萬能密碼
這個就是傳說中的'or'='or'了, 雖然危害很大, 可直接饒過后臺驗(yàn)證, 進(jìn)入后臺, 但是確實(shí)是到處可見。
原理:
如都輸入'or'='or'則如下語句為真,
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”
從而返回真, 跳過認(rèn)證。
利用:
后臺帳號和密碼都或使用一下一種:
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:最短的萬能登陸密碼 'or'1
12:'or 1 or'或'or''=''or'
還有其他很多!
防范:
有方法是過濾掉單引號, 好象其他數(shù)據(jù)庫里面還要過濾到單引號的其他編碼。 如:
dim name,Pass
name=replace(trim(request.Form("name")),"'","")
Pass=md5(replace(trim(request.form("Pass")),"'",""))
我的登陸驗(yàn)證還采用了,
ivcode=trim(request.form("ivcode")), ivcode是寫在配置asp文件中的變量, 這樣安全更好了, 即使知道密碼, 存在這個漏洞, 不知道定義的ivcode值, 一樣無法登陸后臺!
4上傳
上傳這個漏洞比較難以理解, 也許大家是多抓包, 改包, nc上傳不太熟悉, 多練習(xí)幾次就可以了。 個人主頁中有可以會用到上傳各種文件, 如rar, gif, swf, 等這樣必須為這些文件分類存放, 這樣在上傳時選擇上傳類型, 傳遞想對類型的路徑給上傳頁面, 大家是不是都很熟悉, 呵呵, 其實(shí)這樣就形成了上傳漏洞了!
原理:
一、 FilePath.此為變量, 為上傳頁面?zhèn)鬟f到保存頁面的變量, 這里我們就可以修改其值該為asp□, 然后利用服務(wù)器在讀取這段變量時, 因?yàn)?ldquo;□”是二進(jìn)制的00, 服務(wù)器認(rèn)為該變量語句已經(jīng)結(jié)束了, 于是“□”后面的字符也就被忽略掉了, 這樣一來, 上傳的文件就保存為了asp后綴了。
二、FileName.這里指可以上傳修改了后綴為aaspsp ccerer等類型的asp文件, 而饒過過濾和認(rèn)證.得到shell., 還有通過很多方法饒過認(rèn)證。 還是那句話, 我們不知道的并不表示不存在。
利用:
可以采取用WinSock抓包, 然后用記事本保存提交數(shù)據(jù)并增加、修改相關(guān)內(nèi)容, 再用WinHex修改空格為二進(jìn)制, 最后用NC提交.建議使用上傳工具直接上傳!免的修改包的麻煩!
防范:
一. 路徑定義為常量.
二. 過濾服務(wù)器可以解吸的文件類型, 并且檢測到上傳危險文件則停止上傳, 并且定義只可以上傳的類型!
5注入
首先我們在IE的“Internet選項→高級”中有一個“顯示友好HTTP錯誤信息”的選項, 取消前面的鉤。 這樣才可以顯示注入!SQL注入的漏洞通常是由于程序員對它不了解, 設(shè)計程序時某個參數(shù)過濾不嚴(yán)格所致。 通常通過在如show.asp?id=79后加單引號, 如果出錯則初步認(rèn)定存在注入, 然后加and 1=1 ;and 1=2, 這里分辨兩次提交的頁面有不同沒?如果有不同則判定存在漏洞!當(dāng)然也有字符型和搜索型的, 原理都差不多。 網(wǎng)上說的太多了, 我就不重復(fù)了, 防范也一般網(wǎng)上都有防范注入的代碼, 下過來, 包含到需要放注入的頁面即可!
6跨站
一般都是帶有象JAVAScript等這類腳本代碼, 這樣在服務(wù)里一旦被執(zhí)行就形成了所謂的跨站攻擊了。 一般來說對于人機(jī)交互行比較高的程序, 比如論壇, 留言版這類程序都比較容易存在跨站script攻擊。 所謂跨站腳本漏洞其實(shí)就是Html的注入問題, 惡意用戶的輸入沒有經(jīng)過嚴(yán)格的控制進(jìn)入了數(shù)據(jù)庫最終顯示給來訪的用戶, 導(dǎo)致可以在來訪用戶的瀏覽器里以瀏覽用戶的身份執(zhí)行HTml代碼.如<script>alert(’xss’)</script> <img class='lazy' data-original="javascript:alert(/xss/)" width=100>, 這樣的代碼如果過濾的不是很好的話, 直接放入數(shù)據(jù)庫, 再在瀏覽器里顯示出來, 就構(gòu)成了跨站。 個人主頁用的最多的是自己寫的留言本了, 這里如果不加任何的過濾就直接放入數(shù)據(jù)庫, 那么就構(gòu)成了跨站, 通過<iframe src=”馬地址”>就可以直接掛馬!
防堵跨站漏洞, 阻止攻擊者利用在被攻擊網(wǎng)站上發(fā)布跨站攻擊語句, 不可以信任用戶提交的任何內(nèi)容, 首先代碼里對用戶輸入的地方和變量都需要仔細(xì)檢查長度和對”<”,”>”,”;”,”’”等字符做過濾;其次任何內(nèi)容寫到頁面之前都必須加以encode, 避免不小心把html tag弄出來。 這一個層面做好, 至少可以堵住超過一半的XSS攻擊。 所以防范數(shù)據(jù)的轉(zhuǎn)換和過濾是可以在3個地方進(jìn)行轉(zhuǎn)換的, 在接受數(shù)據(jù)的時候可以轉(zhuǎn)換下, 在進(jìn)入數(shù)據(jù)庫的時候可以轉(zhuǎn)換下, 在輸出數(shù)據(jù)的時候也可以轉(zhuǎn)換下.所以我們寫留言本的時候, 建議所有數(shù)據(jù)直接通過htmlencode轉(zhuǎn)化再放入數(shù)據(jù)庫, 這樣就萬無一失了.
7session安全
在計算機(jī)專業(yè)術(shù)語中, Session是指一個終端用戶與交互系統(tǒng)進(jìn)行通信的時間間隔, 通常指從注冊進(jìn)入系統(tǒng)到注銷退出系統(tǒng)之間所經(jīng)過的時間。 具體到Web中的Session指的就是用戶在瀏覽某個網(wǎng)站時, 從進(jìn)入網(wǎng)站到瀏覽器關(guān)閉所經(jīng)過的這段時間, 也就是用戶瀏覽這個網(wǎng)站所花費(fèi)的時間。 因此從上述的定義中我們可以看到, Session實(shí)際上是一個特定的時間概念。 一般來說, 后臺管理員在登錄頁面輸入賬號密碼后, 程序會拿著他提交的用戶名密碼去數(shù)據(jù)庫的管理員表里面找, 如果有這個人的賬號密碼就認(rèn)為你是管理員, 然后給你一個表示你身份的Session值;或者程序先把你的用戶名密碼提取出來, 然后到數(shù)據(jù)庫的管理員表里面取出管理員的賬號密碼來和你提交的相比較, 如果相等, 就跟上面一樣給你個表示你身份的Sesion值。 然后你進(jìn)入任何一個管理頁面它都要首先驗(yàn)證你的Session值, 如果是管理員就讓你通過, 不是的話就引導(dǎo)你回到登錄頁面或者出現(xiàn)一些奇奇怪怪的警告, 這些都跟程序員的個人喜好有關(guān)。 個人主頁很少使用cookie驗(yàn)證了吧?因?yàn)閟ession驗(yàn)證比較安全, 也比較方便。 但是session也可以欺騙的, 只是局限性比較大。
我們自己寫的個人主頁后臺這里最需要注意的就是session的安全了, 每個頁面都要加上判斷是否存在session的語句, 最好是把這個放到一個頁面, 在后臺每個頁面都連接進(jìn)來, 或則出現(xiàn)直接輸入后臺頁面就可以操作后臺, 那就后臺的驗(yàn)證白做了!這里要最要注意的就是上傳頁面的驗(yàn)證了。 一定要判斷session驗(yàn)證了沒, 否則別人直接輸入上傳頁面就可以直接上傳文件, 那你就等著中馬吧!
后記:
asp個人主頁安全的一些問題基本都提到了, 對我們自己寫一個自己的主頁以及修改別人的系統(tǒng)已經(jīng)足夠了, 但
上面是電腦上網(wǎng)安全的一些基礎(chǔ)常識,學(xué)習(xí)了安全知識,幾乎可以讓你免費(fèi)電腦中毒的煩擾。