Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
TwoMillion-Machine-Writeup — 코드.js 난독화 해제부터 루트 권한 획득까지, CVE-2023-0386 | Kitploit
도구/GitHubGitHub/anxs3c/twomillion-machine-writeup
Privilege EscalationReconnaissanceExploitationLateral MovementReverse EngineeringWeb Application ExploitationCTFPenetration TestingLearning & EducationLabs & Practice
GitHubanxs3c/twomillion-machine-writeup
173개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

TwoMillion-Machine-Writeup

코드.js 난독화 해제부터 루트 권한 획득까지, CVE-2023-0386

저장소 보기

머신 정보

TwoMillion은 HackTheBox에서 사용자 200만 명 달성을 기념하기 위해 출시된 Easy 난이도의 Linux 머신입니다. 이 머신은 예전에 해킹 가능했던 초대 코드가 포함된 구버전 HackTheBox 플랫폼을 갖추고 있습니다. 초대 코드를 해킹한 후 플랫폼에 계정을 생성할 수 있습니다. 이 계정을 사용하여 다양한 API 엔드포인트를 열거할 수 있으며, 그중 하나를 사용하여 사용자를 Administrator로 승격할 수 있습니다. 관리자 권한을 획득한 사용자는 admin VPN 생성 엔드포인트에서 명령 주입을 수행하여 시스템 셸을 얻을 수 있습니다. .env 파일에서 데이터베이스 자격 증명이 발견되며, 비밀번호 재사용으로 인해 공격자는 머신에서 admin 사용자로 로그인할 수 있습니다. 시스템 커널이 오래된 것으로 확인되었고, CVE-2023-0386을 사용하여 root 셸을 얻을 수 있습니다.

스캔 결과

포트서비스세부 정보
22/tcpsshsyn-ack ttl 63 OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu Linux; protocol 2.0)
80/tcphttpsyn-ack ttl 63 nginx 2million.htb

호스트 설정

2million.htb를 /etc/hots 파일에 추가했습니다.


경로 탐색

gobuster를 사용하여 2million.htb에 대해 경로 탐색을 수행했습니다.

열거 중에 /invite 엔드포인트를 발견했습니다.


/invite 페이지로 이동한 후


페이지를 검사하는 동안 inviteapi.min.js라는 JavaScript 파일에 난독화된 코드가 포함되어 있음을 발견했습니다:

eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1 i(4){h 8={"4":4};$.9({a:"7",5:"6",g:8,b:\'/d/e/n\',c:1(0){3.2(0)},f:1(0){3.2(0)}})}1 j(){$.9({a:"7",5:"6",b:\'/d/e/k/l/m\',c:1(0){3.2(0)},f:1(0){3.2(0)}})}',24,24,'response|function|log|console|code|dataType|json|POST|formData|ajax|type|url|success|api/v1|invite|error|data|var|verifyInviteCode|makeInviteCode|how|to|generate|verify'.split('|'),0,{}))

난독화 해제

de4js를 사용하여 코드의 난독화를 해제했으며, 그 결과 다음과 같은 읽기 쉬운 JavaScript가 생성되었습니다:


function verifyInviteCode(code) {
    var formData = {
        "code": code
    };
    $.ajax({
        type: "POST",
        dataType: "json",
        data: formData,
        url: '/api/v1/invite/verify',
        success: function (response) {
            console.log(response)
        },
        error: function (response) {
            console.log(response)
        }
    })
}

function makeInviteCode() {
    $.ajax({
        type: "POST",
        dataType: "json",
        url: '/api/v1/invite/how/to/generate',
        success: function (response) {
            console.log(response)
        },
        error: function (response) {
            console.log(response)
        }
    })
}

makeInviteCode() : 새 초대 코드를 생성합니다
verefyInviteCode(code) : 코드가 유효한지 확인합니다

이해를 돕기 위해 검증 요청을 가로챘습니다:


API는 JSON 응답을 사용합니다


초대 코드 생성 및 ROT13 복호화

브라우저 콘솔로 이동하여 makeInviteCode()를 실행했습니다.


데이터가 ROT13 암호로 암호화되어 있음을 확인했습니다.


복호화 후 /api/v1/invite/generate 엔드포인트를 발견했고, 그다음 초대 코드를 생성했습니다.


Base64 복호화

키
2F4BN-YI8OH-B0SCL-L8OE6 키가 입력되었고 성공적으로 승인되었습니다.

등록

홈 페이지

액세스 페이지
이 사이트의 많은 페이지가 제대로 작동하지 않지만, 액세스 페이지에서 흥미로운 일이 벌어집니다

API 엔드포인트 열거
connection pack 버튼을 클릭하여 VPN 파일을 업로드하고 GET 요청을 인터셉트했습니다.


그런 다음 사용 가능한 API 엔드포인트를 열거하기 위해 verbose 및 silent 옵션을 사용하여 curl 요청을 실행했습니다.



서버는 API 엔드포인트 목록을 JSON으로 응답했습니다.

admin은 GET, POST, PUT 메서드를 가진 3개의 API 엔드포인트를 가지고 있었습니다.

admin 엔드포인트 /api/v1/admin/vpn/generate로 admin 키를 생성하려고 시도했지만, admin이 아니었기 때문에 키가 생성되지 않았으며, 첫 번째 admin 엔드포인트 /api/v1/admin/auth가 이를 확인해 주었습니다.





웹 애플리케이션 수직 권한 상승: 현재 표준 사용자를 administrator로 승격


Content-Type: application/json 및 필수 매개변수와 함께 올바른 PUT 요청 형식을 발견한 후, 내 사용자를 administrator로 성공적으로 승격했습니다.











OS 명령 주입

username 필드에 ;whoami;를 주입했고, 관리자 전용 기능에서 흔히 사용되며 적절한 검증이 부족한 경우가 많은 PHP의 exec() 또는 system() 함수를 의심했습니다.

예를 들어, 취약한 코드는 아마 다음과 같았을 것입니다:

$username = $json->username;
도구 다운로드