Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
TwoMillion-Machine-Writeup — From deobfuscating code.js to root, CVE-2023-0386 | Kitploit
도구/GitHubGitHub/anxs3c/twomillion-machine-writeup
Privilege EscalationReconnaissanceExploitationLateral MovementReverse EngineeringWeb Application ExploitationCTFPenetration TestingLearning & EducationLabs & Practice
GitHubanxs3c/twomillion-machine-writeup

TwoMillion-Machine-Writeup

2개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

From deobfuscating code.js to root, 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 파일에 난독화된 코드가 포함되어 있음을 발견했습니다:

root@kitploit:~
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가 생성되었습니다:


root@kitploit:~
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() 함수를 의심했습니다.

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

root@kitploit:~
$username = $json->username;

exec("/usr/bin/cat /var/www/html/VPN/user/$username.ovpn");

이 엔드포인트 POST /api/v1/admin/vpn/generate는 취약했으며, OS 명령 주입이 성공적으로 수행되었습니다.




초기 액세스: OS 명령 주입을 통한 리버스 셸 (base64 우회)

제한을 우회하기 위한 페이로드 인코딩

애플리케이션에 특수 문자를 차단하는 제한이 있었기 때문에, 이 제한을 우회하기 위해 리버스 셸 페이로드 명령을 base64로 인코딩했습니다.


인코딩된 페이로드 주입

username 매개변수에 페이로드를 주입하고, 디코딩 및 실행을 위해 base64 -d | bash로 파이프했습니다:


Netcat 리스너


초기 액세스 획득

페이로드가 성공적으로 실행되어 www-data user 권한으로 리버스 셸을 반환했습니다.


횡적 이동

다양한 기법을 사용하여 www-data user에서 admin user로의 횡적 이동을 시도했습니다.

/var/www/html 디렉터리를 조사하던 중 데이터베이스 자격 증명이 포함된 .env 파일을 발견했습니다:


발견된 비밀번호는 SSH 및 MySQL 인증을 위해 성공적으로 재사용되었습니다.

SSH

MySQL


OS 권한 상승

admin 사용자로 초기 액세스 권한을 얻은 후, 잠재적인 권한 상승 벡터를 식별하기 위해 시스템 열거를 수행했습니다.

SUID 바이너리, capabilities, sudo 권한, cron 작업과 같은 가장 흔한 권한 상승 기법을 모두 시도했지만 아무것도 작동하지 않았습니다. 그래서 PATH 하이재킹이나 민감한 변수가 있는지 환경 변수를 확인했고, /var/mail/admin을 가리키는 MAIL variable을 발견했습니다.


메일 내용을 확인했고, admin에게 OverlayFS/FUSE 취약점에 대비해 커널을 패치하라는 경고가 있었음을 확인했습니다.


커널 버전

OS 버전

커널은 전혀 업데이트되지 않았으며, 이는 관리자가 보안 경고를 무시했거나 잊어버렸음을 확인시켜 줍니다.

커널 열거 결과 버전 5.15.70-051570-generic이 확인되었으며, 이는 CVE-2023-0386 OverlayFS/FUSE 로컬 권한 상승에 취약합니다.

취약점이 확인됨에 따라 공개된 POC 익스플로잇을 확보했습니다.

POC를 클론한 후 대상 머신으로 전송했습니다.

그런 다음 이를 실행하여 root 액세스 권한을 성공적으로 획득했습니다.


공격 체인



참고 자료

CVE-2023-0386 - CVE-2023-0386 - OS 명령 주입



고지 사항: 이 머신은 승인된 침투 테스트 환경에서 루팅되었습니다.

도구 다운로드
단계기법대상결과
1. 정찰포트 스캔22 (SSH), 80 (HTTP)서비스 발견
경로 탐색/invite초대 페이지 발견
JS 난독화 해제inviteapi.min.jsAPI 엔드포인트 노출
2. 초기 액세스초대 코드 생성POST /api/v1/invite/generate유효한 초대 코드
등록POST /api/v1/user/register표준 사용자 생성
3. 웹 권한 상승API 열거GET /api/v1Admin 엔드포인트 발견
수직 권한 상승PUT /api/v1/admin/settings/updateis_admin: 0 -> 1
4. 시스템 액세스명령 주입POST /api/v1/admin/vpn/generateusername=test;id;
리버스 셸Base64 인코딩 페이로드www-data 셸
5. 횡적 이동파일 발견/var/www/html/.envadmin:SuperDuperPass123
SSH 재사용ssh [email protected]admin 사용자 액세스
6. Root 권한 상승커널 열거uname -r -> 5.15.70CVE-2023-0386 식별됨
이메일 경고/var/mail/adminOverlayFS/FUSE 확인됨
익스플로잇 실행./fuse && ./expRoot 셸