
1. 기본 개념
0) nmap
-v: 상세 출력
1) Node.js
: 백엔트 자바스크립트 런타임 환경. 자바스크립트를 브라우저 밖(=서버)에서 실행하게 해주는 환경을 뜻함.
- 오픈소스
- 크로스 플랫폼 지원
*크로스 플랫폼: 하나의 프로그램, 앱, 게임, 코드가 여러 os에서 동시 실행/개발 가능한 것
Node.js의 전역변수)
https://nodejs.org/api/globals.html
Global objects | Node.js v25.9.0 Documentation
Global objects#These objects are available in all modules.The following variables may appear to be global but are not. They exist only in the scope of CommonJS modules:The objects listed here are specific to Node.js. There are built-in objects that are par
nodejs.org
*전역변수 = Global
내장 객체)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects
Standard built-in objects - JavaScript | MDN
developer.mozilla.org
*내장 객체 = built-in objects
=> require은 global scope에 포함되지 않음!! => 고로 특정 환경에서는 접근 불가 할 수 있음,,
=> 대신 process 객체는 가능할지도~ => procwaa: 현재 실행 중인 Node 프로세스의 정보를 가진 객채.
=> process.mainModule: 메인 프로그램 모듈 객체. = 템플릿 샌드박스 밖에서 실행된 진짜 Node 앱의 본체에 가까움.
즉 메인 앱 객체엔 여전히 require이 남아있을 수도 있다~는 걸 활용하는 것임.
2) Express
: Node.js 위에서 웹 서버를 쉽게 만들어주는 웹 애플리케이션 프레임워크.
- express를 통해 기존 Node.js 단독보다 더 쉽고, 확장된 기능을 볼 수 있다!
*프레임워크: 개발을 위해 준비된 틀
3) Template Engine
: 웹 페이지에서 동적으로 생성된 콘텐츠를 표시해줌. 템플릿 파일 내부 변수들을 실제 값으로 치환해서, 그 결과를 클라이언트에게 보여줌.
취약점: SSTI = server side template injection)
: 공격자가 템플릿 내부에 악성 입력값 삽입 -> 서버에서 명령 실행하게 하는 취약점.
> ssti 취약점 존재 여부 확인은? 핵트릭스로!!
https://hacktricks.wiki/en/pentesting-web/ssti-server-side-template-injection/index.html
SSTI (Server Side Template Injection) - HackTricks
Learn & practice AWS Hacking: HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)...
hacktricks.wiki

익스플로잇)
{{this.push "return require('child_process').exec('whoami');"}}- {{ }}: template 문법. 안의 내용 해석/실행 함.
- this: 현재 template 실행 context 객체.
- push: 템플릿 내부 엔진 동작에, 실행될 문자열 넣기
- require: 다른 코드를 불러오는 함수
- child_process: os 명령어 실행 기능이 있는 모듈
- exec: 명령어를 실행.
4) url encoding = url 인코딩
: 문자 -> 아스키로 인코딩하는 과정
- 표준 128자인 아스키 문자 집합에 속하지 않는 예약 문자들(=reserved characters)이 나올 경우 인코딩이 필요.
- 인코딩/디코딩은 Burp Suite로 가능함!!
- url에서 인자로 사용되기 때문에 url인코딩이라 부름. %사용.
*예약 문자: 특정 의미를 가지는 특수 문자들.
2. 문제 풀이
일단 nmap.

ssh는 지금 당장 가진 인증 정보가 없다면 패스해주자.
웹 사이트먼저 접속 ㄱ.
이메일 입력란이 보인다. 입력하면 바로 아래 문자로 뜸.


여기에 대한 취약점을 찾아야 할 것 같다,, 그럼 우선 사용 서비스부터 알자. 요 아이콘 클릭.

당장은 하나만 뜸.

여기서 막 입력값 주고 하니 다른 것도 뜬다.

이제 Node.js를 쓰는 건 앎.
우린 SSTI 취약점을 활용할 것이니, 그 취약점이 있는지부터 알아보자. 핵트릭스에 확인 방법이 보임.
우선 첫 입력값. 이 경우는 실패.

다음은 성공임. 보면 입력을 받긴 함 에러는 나도.
여기서 주위깊게 봐야하는 POINT는?
> 서버 실행 경로: /root/Backend
> 사용 템플릿 엔진: Handlebars

이제 난 이 사이트가 핸들바 템플릿을 사용해 입력을 처리함을 알았으니, 그에 대한 익스플로잇을 진행하고 싶음.
이때도 역시나 핵트릭스 사이트를 활용할 거임.
SSTI 페이지 들어가서 옆 카테고리 중 핸들바를 클릭 ㄱ.

여기 나오는 익스플로잇 코드를 그대로 쓰자.

위 코드를 그대로 복사해, Burp Suite를 키고 디코더를 통해 인코딩 해줌. 형식은 url로.


그리고 Proxy에서 open browser해서, 입력 줘 봄.

그럼 post로 하나 보이는데, 여기서 우클릭 후 리피터로 보내줌. (=ctrl + R)

그리고 email 파라미터 값을 이전 건 지우고(내가 입력한 부분만) 인코딩 한 내용 그대~로 복붙해줌.


그리고 send 클릭해서, response 확인.

에러가 뜸! 왜일까? 보통 Node.js에서 require은 잘 됨. But, 이 환경이 (이 샌드박스에서는) 템플릿 엔진 내부 제한된 실행 공간으로, require변수 자체가 아예 존재하지 않아 보임.
즉 require을 직접적으로 쓰진 못하고, 다른 방법이 필요.
여기서 나오는 해결책이 process를 쓰는 것이다. Node.js에는 대표적으로 전역에서 접근 가능한 게 있는데, 그중 process는 거의~ 항상 존재한다고 함.
고로 얘를 일단 넣어보자.

결과가 잘 뜸! 얘를 활용하면 될 듯.

한 단계씩 되나 안 되나 점검해줌.


걍 다 잘 되는 거 같아 바로 명령어 넣기 ㄱ.

root라 뜬다. ㅇㅋ. 이제 그냥 바로 shell 처럼 쓰면 될 듯.




flag를 획득했다~





'Hack The Box > Lab' 카테고리의 다른 글
| Ignition - curl (0) | 2026.05.02 |
|---|---|
| Environment (0) | 2026.05.02 |
| Funnel - 터널링 & PostgreSQL & ss (0) | 2026.05.02 |
| Three - awscli & reverse shell & subdomains (0) | 2026.04.30 |
| Responder - NTLM & winRM & LFI & RFI (0) | 2026.04.30 |