标题说明了一切。我可以在node-js程序中使用哪些代码来打破chroot?
我正在使用它作为输入助手程序。输入助手程序在Chromebook上由crouton创建的chroot内运行。但是,我希望输入助手能够突破linux chroot,进入我的chromebook的根目录,这样我就可以运行“adb”命令与Android子系统进行交互。 (点击屏幕区域等)
我已经找到了在Python和C ++中实现它的方法,但不是NodeJS。
答案 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脚本用作帮助程序。