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

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

发布时间:2019-07-22 18:09:12 所属栏目:建站 来源:刘隽良@默安科技
导读:在研发职员眼中,编码开拓的目标是实现相干成果逻辑可用,无明明成果 bug。而现实上,在安详职员眼中,许多这样看似没有成果题目的代码,却可以操作来举办安详裂痕进攻。固然这在许多研发职员眼中是看似天方夜谭,但很不幸,通过以往的无数重大安详变乱的

以下 JSP 代码片断可从 HTTP 哀求中读取雇员 ID eid,并将其表现给用户。

  1. <% String eid = request.getParameter("eid"); %> 
  2. ... 
  3. Employee ID: <%= eid %> 

假如 eid 只包括尺度的字母或数字文本,这个例子中的代码就能正确运行。假如 eid 里有包括元字符或源代码中的值,那么 Web 赏识器就会像表现 HTTP 相应那样执行 eid 里的代码。

早先,这个例子好像是不会等闲蒙受进攻的。事实,有谁会输入导致恶意代码的 URL,而且还在本身的电脑上运行呢?真正的伤害在于进攻者会建设恶意的 URL,然后回收电子邮件可能社会工程的诱骗本领诱使受害者会见此 URL 的链接。当受害者单击这个链接时,他们不知不觉地通过易受进攻的收集应用措施,将恶意内容带到了本身的电脑中。这种对易受进攻的 Web 应用措施举办偷取的机制凡是被称为反射型 XSS。

再来看看存储型 XSS 的例子,以下 JSP 代码片断可在数据库中查询具有给定 ID 的雇员,并输出响应雇员姓名。

  1. <%... 
  2. Statement stmt = conn.createStatement(); 
  3. ResultSet rs = stmt.executeQuery("select * from emp where id="+eid); 
  4. if (rs != null) { 
  5.    rs.next(); 
  6.    String name = rs.getString("name"); 
  7. %> 
  8. Employee Name: <%= name %> 

犹如上一个例子,假如对 name 的值处理赏罚适合,该代码就能正常地执行各类成果;如若处理赏罚不妥,就会对代码的进攻举动无能为力。同样,这段代码袒暴露的伤害较小,由于 name 的值是从数据库中读取的,并且显然这些内容是由应用措施打点的。然而,假如 name 的值是由用户提供的数据发生,数据库就会成为恶意内容雷同的通道。假如差池数据库中存储的全部数据举办适当的输入验证,那么进攻者便能在用户的 Web 赏识器中执行恶意呼吁。这种范例的进攻即成为存储型 XSS,即进攻者操作本领将恶意代码存入数据库,一旦该恶意代码被从数据库读取,相干指令就会被执行。该伎俩极其凶险圆滑,由于数据存储导致的间接性使得分辨威胁的难度增大,并且还进步了一个进攻影响多个用户的也许性。

一样平常存储型 XSS 进攻会从会见提供留言板、评述区等提供输入字段的表单的网站开始。进攻者会在这些留言板、评述区表单条目中嵌入 JavaScript,若靠山未履历证就将其存入数据库,接下来全部会见该留言板、评述区的用户城市执行这些恶意代码。

针对 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. ... 

(编辑:湖南网)

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

热点阅读