얼마 전 진행된 HTB Business CTF 2023에서 Hypercraft라는 문제를 풀었습니다.
어떤 식으로 풀었는지 안 까먹으려고... 간단하게 내용을 정리해봅니다.
굳이 밑에 안 읽고 gist만 보셔도...?
https://gist.github.com/dustty0/f8c501d805441f399aec3c08ebe7c787

문제에서는 위와 같은 이메일이 주어집니다.

이메일의 첨부파일에는 위와 같은 HTML이 있고, HTML 내의 스크립트가 아래와 같은 압축 파일을 생성합니다.

[TOP SECRET] Arodorian Hypercraft.pdf.js 라는 파일의 내용은 다음과 같습니다.

https://gist.github.com/dustty0/f8c501d805441f399aec3c08ebe7c787#file-top-secret-arodorian-hypercraft-pdf-js
의미 없는 주석을 제거하고, 그냥 JS 직접 실행해서 난독화된 내용을 풀면 다음 스테이지의 페이로드를 얻을 수 있습니다.

https://gist.github.com/dustty0/f8c501d805441f399aec3c08ebe7c787#file-stage1-js
첫 번째 JS는 다음 JS 코드를 실행합니다.

https://gist.github.com/dustty0/f8c501d805441f399aec3c08ebe7c787#file-stage2-js

https://gist.github.com/dustty0/f8c501d805441f399aec3c08ebe7c787#file-ynvjonvw-txt
var ynvjonvw를 확인하면, 다음 페이로드를 알아낼 수 있습니다.
https://gist.github.com/dustty0/f8c501d805441f399aec3c08ebe7c787#file-stage3-ps1

Stage 3은 위와 같은 Powershell 스크립트입니다.
-EXEcU bypass 플래그를 제외하고 해당 명령어를 실행하면... 그냥 다음 스테이지를 얻을 수 있습니다...
https://gist.github.com/dustty0/f8c501d805441f399aec3c08ebe7c787#file-stage4-ps1

직전과 동일하게 난독화된 Powershell 스크립트입니다.
대충 필요 없는 부분을 날리고, 플래그를 출력해주는 스크립트만 남기면 다음과 같습니다.
https://gist.github.com/dustty0/f8c501d805441f399aec3c08ebe7c787#file-flag-ps1
SET-ItEM ("VAr"+"Ia"+"B"+"le:4z0") ([TypE]("{2}{3}{1}{0}" -f'odinG','.enC','sYSTEm.T','ext') ) ;
function UYc`xq (${TN`me},${Chk`go`Iul}) {
for (${eum`lMx`NyUg} = 0; ${eu`mL`MxNYug} -lt ${T`NME}."c`OUnt"; ${Eu`MLMx`NyUG}++) {
${T`NME}[${eUM`lM`XnyuG}] = (${t`NmE}[${eUm`Lmx`N`yuG}] -bxor ${c`HKGo`iUl})
}
return ( gEt-vaRIAble ("4"+"Z0") -VaL)::"As`Cii"."gETs`T`RIng"(${tN`Me})
}
(&("{2}{1}{0}" -f 'q', 'cx', 'UY') ([System.Byte[]] @(0x97,0x8b,0x9d,0xa4,0xb3,0xef,0xab,0xac,0x80,0xb0,0xb9,0x80,0xb3,0xeb,0x86,0xec,0xad,0xac,0x80,0xb6,0x91,0x80,0xab,0xb7,0xeb,0xab,0x80,0xee,0xa2)) 223)
HTB{l0ts_of_l4Y3rs_iN_th4t_1}
잘봤습니다. 좋은 글 감사합니다.