使用NodeJS打破chroot

时间:2017-11-25 14:06:48

标签: node.js chroot

标题说明了一切。我可以在node-js程序中使用哪些代码来打破chroot?

我正在使用它作为输入助手程序。输入助手程序在Chromebook上由crouton创建的chroot内运行。但是,我希望输入助手能够突破linux chroot,进入我的chromebook的根目录,这样我就可以运行“adb”命令与Android子系统进行交互。 (点击屏幕区域等)

我已经找到了在Python和C ++中实现它的方法,但不是NodeJS。

2 个答案:

答案 0 :(得分:0)

好的,我在这里通过模仿这个Perl脚本的代码了解了如何:http://pentestmonkey.net/blog/chroot-breakout-perl

NodeJS版本如下:(请注意,它确实需要root访问权限)

var fs = require("fs");
var posix = require("posix"); // run "npm install --save posix" first

function EscapeCHRoot() {
    var dir = "./tempChRoot";

    // create subfolder to be our new root
    if (!fs.existsSync(dir)){
        fs.mkdirSync(dir);
    }

    // change root to the subdirectory (letting us break out, ie. use "..")
    posix.chroot(dir);

    // change current-directory, all the way up to host's root
    for (var i = 0; i < 100; i++) {
        process.chdir("..");
    }

    // change root to host's root folder, completing break-out process
    posix.chroot(".");
}

但是,上面的代码确实需要更改&#34; posix&#34;使用前的npm模块。这是因为&#34; posix&#34;默认情况下,每当运行chroot时,模块都会将工作目录更改为chroot目录(这会阻止chroot breakout工作)。因此,我们需要编辑代码,以便省略change-directory调用。

为此,打开&#34; node_modules / posix / src / posix.cc&#34;,并注释掉这些行

// proper order is to first chdir() and then chroot()
if (chdir(*dir_path)) {
    return Nan::ThrowError(Nan::ErrnoException(errno, "chroot: chdir: ", ""));
}

然后运行&#34; npm install&#34;在其文件夹中。

那应该是它。现在运行EscapeCHRoot()函数应该正确转义,之后允许代码访问主机系统的文件。

答案 1 :(得分:0)

对于其他在该主题上搜索的人,我还发现了如何在Python中进行chroot转义。在这种情况下,我们不需要弄乱任何外部文件,因为Python解释器提供了os.fchdir()命令,可让您在放置os.chroot(".")之后将“当前目录”还原到上面的chroot文件夹中。在下面。

import os

# store reference to original root, so we can return to it later
real_root = os.open("/", os.O_RDONLY)

# create subfolder to be our new root
if not os.path.exists("/tempChRoot"):
  os.makedirs("/tempChRoot")

# change root to the new subfolder
os.chroot("/tempChRoot")

# change current-directory back to original root
os.fchdir(real_root)

# change current-directory, all the way up to host's root
for i in range(100):
  os.chdir("..")

# change root to host's root folder, completing break-out process
os.chroot(".")
os.close(real_root)

# launch new (out of chroot) shell
os.system("bash") # alternative: "sh"

我目前在我的输入辅助程序中使用NodeJS chroot转义,并且当我在crouton中打开外壳并且想要访问其chroot之外的文件时,此Python脚本用作帮助程序。