さて、私はどのようにここでは、この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(".");
}
しかし、上記のコードでは、使用前に "posix" npmモジュールを変更する必要があります。これはchrootが実行されるたびに(chroot breakoutが動作しないようにする)、 "posix"モジュールはデフォルトでchrootディレクトリに作業ディレクトリを変更するからです。そのため、コードを編集して、ディレクトリの変更呼び出しを取り除く必要があります。次に、この、オープン "node_modules/POSIX/SRC/posix.cc" を行うには
、およびこれらの線
// proper order is to first chdir() and then chroot()
if (chdir(*dir_path)) {
return Nan::ThrowError(Nan::ErrnoException(errno, "chroot: chdir: ", ""));
}
をコメントアウトそのフォルダ内の "NPMインストール" を実行します。
これはそうです。 EscapeCHRoot()関数を実行すると正しくエスケープするようになり、後でコードがホストシステムのファイルにアクセスできるようになりました。
C++でネイティブノードモジュールを作成しようとしましたか? – Ankur
@Ankurいいえ、しかし私は "posix"ノードモジュールを使ってそれを行う方法を見つけました。 (小さな変更) – Venryx
また、なぜdownvotes?これは本当のプロジェクトの正当な質問です:https://github.com/Venryx/InputAssistant – Venryx