加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

从三类常见高危漏洞 洞见那些“风平浪静”的代码

发布时间:2019-07-23 04:41:40 所属栏目:建站 来源:刘隽良@默安科技
导读:副标题#e# 在研发人员眼中,编码开发的目的是实现相关功能逻辑可用,无明显功能 bug。而实际上,在安全人员眼中,很多这样看似没有功能问题的代码,却可以利用来进行安全漏洞攻击。虽然这在很多研发人员眼中是看似天方夜谭,但很不幸,通过以往的无数重大安

针对 XSS 的防护,主要手段在于用户输入数据的验证,包括:

  • 严格校验用户输入的数据,必须对所有输入中的 script、iframe 等字样进行严格的检查和 html escape 转义。这里的输入不仅仅是用户可以直接交互的输入接口,也包括 HTTP 请求中的 cookie 中的变量,HTTP 请求头部中的变量等。
  • 校验数据类型,验证其格式、长度、范围和内容。
  • 客户端,服务端进行双重校验。
  • 对输出的数据也要检查,因为数据库里的值有可能会在一个大网站的多处都有输出,所以即使在输入做了编码等操作,在各处的输出点时也要进行安全检查。

三、任意命令执行

任意命令执行漏洞指的是 Web 应用程序未检测用户输入的合法性,直接传入程序中调用系统命令的函数中如: system(),eval(),exec(),从而可能会导致攻击者通过构造恶意参数,在服务器上执行任意命令。

攻击者通过构造恶意代码,执行任意命令可获取服务器权限,导致服务器上的重要数据,如:程序代码、数据库信息、文档资料等泄露。

举例来说,下面这段来自系统实用程序的代码根据系统属性 APPHOME 来决定其安装目录,然后根据指定目录的相对路径执行一个初始化脚本。

  1. ... 
  2. String home = System.getProperty("APPHOME");    
  3. String cmd = home + INITCMD; 
  4. java.lang.Runtime.getRuntime().exec(cmd); 

该代码使得攻击者可通过修改系统属性 APPHOME 从而控制 INITCMD 的路径指向,从而提高自己在应用程序中的权限,继而随心所欲地执行命令。由于程序不会验证从环境中读取的值,所以如果攻击者能够控制系统属性 APPHOME 的值,他们就能欺骗应用程序去运行恶意代码从而取得系统控制权。

再看一个例子,下面的代码来自一个管理 Web 应用程序,旨在使用户能够使用一个围绕 rman 实用程序的批处理文件封装器来启动 Oracle 数据库备份,然后运行一个 cleanup.bat 脚本来删除一些临时文件。脚本 rmanDB.bat 接受单个命令行参数,该参数指定了要执行的备份类型。由于访问数据库受限,所以应用程序执行备份需要具有较高权限的用户。

  1. ... 
  2. String btype = request.getParameter("backuptype"); 
  3. String cmd = new String("cmd.exe /K 
  4. "c:utilrmanDB.bat "+btype+"&&c:utilcleanup.bat"") 
  5. System.Runtime.getRuntime().exec(cmd); 
  6. ... 

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读