返回旧版| 微信建站| 建站之家论坛| 我要建站 | 建站学习 | 加入收藏
asp基础当前位置:首页 > HTML教程 > asp基础 > 正文

Web源码安全审计之ASP篇(下)

发布时间:2014-01-05 22:39:00   来源:   点击:

 六.Cookies欺骗(Cookies Spoofing)
   概述:在只对用户做Cookies验证的系统中,通过修改Cookies的内容来得到相应的用户权限登录。Cookies欺骗在入侵中经常用到,通过修改Cookies的内容来得到相应的用户权限登录,从而达到攻击的目的。
   漏洞原理:到底什么是Cookies,它有什么作用呢?Cookies是一种能够让网站服务器把少量数据储存到客户端的硬盘或内存,或是从客户端的硬盘读取数据的一种技术。Cookies是当你浏览某网站时,由Web服务器置于你硬盘上的一个非常小的文本文件,它可以记录你的用户ID、密码、浏览过的网页、停留的时间等信息。
   漏洞代码:接下来还是以自由动力文章系统做案例,访问后台文件UploadSoft.asp必须通过授权验证,此程序通过Cookies验证造成了安全隐患。没设置Cookies之前如图所示

Web源码安全审计之ASP篇(下)
关键代码如下:
  1. <
  2. if session("AdminName")="" and request.Cookies("asp163")("UserName")="" then 
  3.         response.Write("请登录后再使用本功能!") 
  4.     else 
  5.         select case upload_type 
  6.             case 0 
  7.                 call upload_0()  '使用化境无组件上传类 
  8.             case else 
  9.                 response.write "本系统未开放插件功能" 
  10.                 response.end 
  11.         end select 
  12. end if 
  13. %> 
   代码中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"))%>
   Request方法获取的参数file没经过安全处理,被Execute方法执行了。
   漏洞利用:若某个应用程序不存在上传漏洞,那么攻击者可以上传个正常图片格式的文件,文件中包换ASP脚本代码,这时候就可以用本地包含漏洞去执行图片中的ASP代码。如下图所示

Web源码安全审计之ASP篇(下)
如果jpg里写入的ASP小马,那就可以轻松得到一个WebShell。
漏洞修复:尽量系统指定执行文件,不要让客户端提交参数,实在需要动态改变参数,可以辅助一个匹配文件,若客户端提交的参数在文件中出现,则可以执行,否则不允许继续执行

八.路径操控(Path Manipulation)
概述:用户输入控制 file system 操作所用的路径,借此攻击者可以访问或修改其他受保护的系统资源。
漏洞原理:当满足以下两个条件时,就会产生path manipulation 错误:
1. 攻击者能够指定某一 file system操作中所使用的路径。
2. 攻击者可以通过指定特定资源来获取某种权限,而这种权限在一般情况下是不可能获得的。
漏洞代码:下面以经典的Ewebeditor编辑器做分析,在编辑器文件管理处存在一个路径操控漏洞,攻击者可以指定路径的读取范围,造成安全隐患。

  1. <
  2. Function InitParam() 
  3.     sStyleID = Trim(Request("id")) 
  4.     sUploadDir = "" 
  5.     If IsNumeric(sStyleID) = True Then 
  6.         sSql = "select S_UploadDir from eWebEditor_Style where S_ID=" & sStyleID 
  7.         oRs.Open sSql, oConn, 0, 1 
  8.         If Not oRs.Eof Then 
  9.             sUploadDir = oRs(0) 
  10.         End If 
  11.         oRs.Close 
  12.     End If 
  13.     If sUploadDir = "" Then 
  14.         sStyleID = "" 
  15.     Else 
  16.         sUploadDir = Replace(sUploadDir, "", "/") 
  17.         If Right(sUploadDir, 1) <> "/" Then 
  18.             sUploadDirsUploadDir = sUploadDir & "/" 
  19.         End If 
  20.     End If 
  21.     sCurrDir = sUploadDir 
  22.   
  23.     ' 样式下的目录 
  24.     sDir = Trim(Request("dir")) 
  25.     If sDir <> "" Then 
  26.         If CheckValidDir(Server.Mappath(sUploadDir & sDir)) = True Then 
  27.             sCurrDir = sUploadDir & sDir & "/" 
  28.         Else 
  29.             sDir = "" 
  30.         End If 
  31.     End If 
  32. End Function 
  33. %> 

    若攻击者想利用此漏洞需要满足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中经典验证来源的代码做分析
  1.  <
  2. Dim From_url , Serv_url 
  3.     From_url = Cstr(Request.ServerVariables("HTTP_REFERER")) 
  4.     Serv_url = Cstr(Request.ServerVariables("SERVER_NAME")) 
  5.     If Mid(From_url,8,Len(Serv_url)) <> Serv_url then 
  6.         Response.Write "非法链接!" 
  7.         Response.End 
  8.     End if 
  9. %> 

上述代码中2个判断的值均来自客户端环境变量,判断思路是目标地址和来源地址的域名是否一致,不一致则认为是非法访问,这段代码常用于防盗链模块中。

漏洞利用:用法HTTP代理软件构造一个特定的数据包,在HTTP头加上Referer 。如下图所示

Web源码安全审计之ASP篇(下)
漏洞修复:验证数据来源的真实性还是应该放在服务端,Request变量获取的值都是不可靠的。
十一.代码注入(Code Injection)
    概述:许多现代编程语言都允许动态解析源代码指令。 如果程序员需要由用户提供的指令对数据操作,这种情况下可以应用这种功能。当然,我们更愿意利用底层语言构造,而不是通过执行代码来解析用户输入。 由用户提供的指令预期执行一些无害的操作,例如,对当前的用户对象进行简单计算或修改用户对象的状态,等等。然而,如果程序员不够细心,用户指定的操作范围可能会超出程序员最初的设想。
    漏洞原理:ASP应用程序中若存在Eval ,Execute ,ExecuteGlobal 函数使用时,要格外注意它们的使用环境,若从外部获取参数,没有经过安全处理 就会造成安全隐患。Eval() 计算表达式的值,并且返回一个结果,Execute() 执行一个或多个指定的语句。多个语句间用冒号(:)隔开 ,ExecuteGlobal() 在全局名字空间中执行一个或多个指定的语句。
漏洞代码:
<%=Eval(Request("parma"))%>
   上述代码用户提交parma的方法有GET,POST,COOKIE三种,攻击者可以精心构造出ASP的小马提交就可以执行,安全隐患相当大,在源码审计的过程中要额外注意它们的使用。
漏洞利用:
Web源码安全审计之ASP篇(下)
    若攻击者给parma参数值等于VB里的Now()函数,就会把当前的时间输出出来,这里代码用Eval函数执行的,若是Execute 和 ExecuteGlobal函数则不会输出到网页中。
漏洞修复:谨慎使用此三个函数,若需要动态执行,则只让用户输入和本地文件中匹配的字符,若不匹配则不可以执行

十二.XML中的XPATH注入(Xpath Injection)
    概述:Xml文档存储数据时,若查询数据不经过安全过滤也会和关系型数据库一样,产生注入漏洞,在这里我们总结成XPATH注入漏洞,在这里它更像是ACCESS数据库。
漏洞原理: 如同Access数据库一样,XML文档只是保存数据用的,若程序对用户提交的数据没有经过安全处理,则会导致安全问题,在这里最常见的莫过于经典的万能密码。
漏洞代码:

  1. function SelectXmlNodeText(elementname,elementpass) 
  2.     On Error Resume Next 
  3.     elementname="//"&"root/row[name='"&elementname&"' and password='"&elementpass&"']" 
  4.     temp =  XMLMorntekDocument.selectSingleNode(elementname).text 
  5.     If temp <> "" Then 
  6.         Session("UserName") = "asp163" 
  7.         Response.Write("Welcome , Sysadmin") 
  8.     Else 
  9.         Response.Redirect("/admin/Login.asp") 
  10.     end if 
  11. end function   
  12. ConnectXml("../admin.xml") 
  13. Call SelectXmlNodeText(Request("name"),Request("pass")) 
  14. %> 

上述代码实现的是一个后台管理验证的功能,admin.xml文件位于站点根目录之外,无法用Http方式下载。程序对Request对象获取来的数据没有经过安全过滤,导致了经典万能密码绕过漏洞。
漏洞利用:

Web源码安全审计之ASP篇(下)
    攻击者提交Name和Pass都是“'or '1'='1”时候,XML查询节点就变成 “//root/row[name=''or '1'='1' and password=''or '1'='1']” OR语句 发挥了重大作用,只要一个条件为真就可以满足绕过的条件。
漏洞修复:和SQL注射一样,需要对客户端提交过来的数据进行过滤,在本案例中可以过滤掉单引号即可。
十三.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数据库,则漏洞危害性更大。
漏洞代码:
  1. <
  2. Set rs = Server.CreateObject("ADODB.RecordSet") 
  3. sqlString="SELECT * FROM News WHERE Id=" & Request.QueryString("id") 
  4. rs.Open sqlString, Conn, 1, 1 
  5. %> 

漏洞利用:

Web源码安全审计之ASP篇(下)
   漏洞修复:对获取的数字型变量用Clng函数转换,对于字符型用Replace函数过滤单引号。
0x03 总结:
     ASP经过这么多年还能屹立不倒,除了本身易学易用性之外,还有搭配的ACCESS数据库方便移植的特性,让很多程序员在选择为中小网站做开发的时候首选ASP。掌握这些ASP漏洞对于开发者来说是相当有必要的,只有这样才能写出更强大安全的应用程序,才能促进整个互联网的安全与开放
版权所有:郑州腾石网络科技有限公司 备案信息:豫ICP备18019117号
站长QQ:2863868475 业务合作咨询:15137100750(同微信)
本站所有投放的广告是有其他网站提供,不代表本站立场,同时网站首页广告位对外出租详情咨询本站站长!同时欢迎广大站长加入个人建站团队
  • 建站客服
  • CMS仿站
  • CMS学习
  • 技术交流群:336572814