Advent of Cyber 2025 13-20일 차 Writeup Sprint! | TryHackMe

발행: (2026년 1월 2일 오후 08:29 GMT+9)
14 min read
원문: Dev.to

Source: Dev.to

Day 13: YARA!

YARA는 디지털 흔적을 수집하는 도구로, 물리적 세계에서 포렌식 조사관이 지문을 수집하는 방식과 유사합니다.
우리는 악성 행위가 어떻게 보이는지를 설명하는 규칙을 정의합니다.

규칙 파일은 세 부분으로 구성됩니다:

SectionPurpose
meta규칙에 대한 정보(작성자, 설명, 날짜, 신뢰도 등). 수백 개의 규칙을 관리할 때 유용합니다.
stringsYARA가 파일에서 찾을 패턴. 일반 문자열, 16진수 패턴, 정규식 등을 사용할 수 있습니다.
condition규칙이 일치했을 때 YARA에 알려주는 논리식(예: “모두”, “하나라도”, 파일 크기 제한 등).

Example rule

rule TBFC_Simple_MZ_Detect
{
    meta:
        author      = "TBFC SOC L2"
        description = "IcedID Rule"
        date        = "2025-10-10"
        confidence  = "low"

    strings:
        $mz   = { 4D 5A }                        // "MZ" header (PE file)
        $hex1 = { 48 8B ?? ?? 48 89 }            // malicious binary fragment
        $s1   = "malhare" nocase                 // story / IOC string

    condition:
        all of them and filesize
}
> **Note:** In the original attempt the `ascii` modifier was used (`$st = "TBFC:" ascii`).  
> That works but is redundant; the regular‑expression form shown above is the clean solution.

How to run the rule

yara -rs rule.yar ~/Downloads/easter/

출력에는 일치 항목이 포함되며, 이를 통해 McSkidy가 숨긴 메시지를 확인할 수 있습니다.

보너스 챌린지 – “doordasher” 서비스

궁극적인 목표는 가상의 서비스 doordasher손상된 웹사이트를 복구하는 것입니다.
인프라의 컨테이너 레이어를 탐색해야 합니다.

실행 중인 컨테이너 찾기

docker ps
PORTSERVICE
5001doordash app (main)
5002news app wareville‑times (bonus)

보너스: 뉴스 사이트(포트 5002)에서 비밀 코드 찾기

  1. 사이트 열기: http://10.48.153.34:5002/
  2. 뉴스 페이지를 살펴보면 일부 단어가 다르게 강조되어 있습니다(💤😴).
  3. 강조된 텍스트가 비밀 코드를 이루며, 이는 deployer 사용자의 비밀번호와 동일합니다.

액션: 코드를 찾아낸 후 deployer 비밀번호를 변경하세요.

Splunk 쿼리 (참고용)

쿼리목적
index=windows_apache_access (cmd.exe OR powershell OR "powershell.exe" OR "Invoke-Expression") | table _time host clientip uri_path uri_query status명령 실행 시도가 포함된 웹 요청을 찾습니다.
index=windows_apache_error ("cmd.exe" OR "powershell" OR "Internal Server Error")악의적인 요청을 나타내는 Apache 오류 로그를 찾습니다.
index=windows_sysmon ParentImage="*httpd.exe"Apache에 의해 생성된 의심스러운 프로세스를 감지합니다.

Source:

Registry Investigation (THM Walkthrough)

Windows 호스트를 분석할 때, 다음 레지스트리 하이브가 유용합니다:

Hive 경로저장 내용
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist최근에 접근한 GUI 애플리케이션.
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\TypedPathsExplorer 주소 표시줄에 입력한 경로.
HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths애플리케이션 실행 파일 경로.
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\WordWheelQueryExplorer에 입력한 검색어.
HKLM\Software\Microsoft\Windows\CurrentVersion\Run로그인 시 자동으로 시작하도록 설정된 프로그램.
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs최근에 접근한 파일.
HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName머신의 호스트명.
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall설치된 프로그램 목록.

예시 질문 및 답변

  1. dispatch-srv01에서 비정상 활동이 시작되기 전에 설치된 애플리케이션은 무엇인가요?
    탐색: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall ( SOFTWARE 하이브를 로드한 후).
    답변: DroneManager Updater

  2. 사용자가 시작한 애플리케이션의 전체 경로는?
    확인: HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist 또는 HKLM\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store.
    Store 키를 수동으로 탐색하고 “Technical Details”에서 전체 실행 파일 경로를 확인하세요.
    답변: (THM 답변 상자에 찾은 정확한 경로를 입력하세요.)

  3. DroneManager의 RUN 항목은?
    Run 키에는 msedge 항목이 포함되어 있으며, DroneManager 항목은 없거나 다른 위치에 저장되어 있을 수 있습니다.

Source:

워크‑스루 개요

이 가이드는 TryHackMe (THM) “Guard House” 방(및 추가 사이드 퀘스트)을 단계별로 안내합니다.
모든 명령어, URL, 데이터는 원본과 정확히 동일하게 유지되며, 가독성을 위해 서식만 정리했습니다.

1️⃣ 초기 레지스트리 탐색

  • THM은 레지스트리 키를 확인하라고 힌트를 줍니다
ROOT\Microsoft\Windows\CurrentVersion\Run
  • 실제로 찾아야 할 키는
ROOT\Software\Microsoft\...
  • 한 유튜버가 바로가기 버튼을 보여줍니다:

    1. RUN을 클릭합니다.
    2. F5 키를 누릅니다.
    3. Full details as text 탭으로 이동합니다.
    4. 아래로 스크롤하면 필요한 값이 표시됩니다.

2️⃣ CyberChef 로 인코딩·암호 해제

Note: 이미 OpenVPN 연결이 되어 있다면 공격용 박스를 시작할 필요가 없습니다.

대상 머신에 접속

  1. 브라우저를 열고 대상 IP로 이동합니다.
  2. “outer gate” 아이콘을 클릭합니다.

Base64 문자열이 보일 것입니다:

QWxsIGhhaWwgS2luZyBNYWxoYXJlIQ==

디코딩

  1. CyberChef(온라인)를 엽니다.
  2. 레시피 창에 “From Base64” 연산을 끌어다 놓습니다.
  3. 문자열을 Input 필드에 붙여넣습니다.
  4. (선택) Bake! 버튼을 클릭하면 평문이 나타납니다:
All hail King Malhare!

3️⃣ Level 1 – 사용자명·비밀번호 얻기

  1. 디코딩된 텍스트는 사용자명이 **“CottonTail”**의 Base64 인코딩임을 알려줍니다.

    • CyberChef에서 “To Base64” 를 사용 → Q290dG9uVGFpbA==
  2. 비밀번호를 얻는 방법:

    • 로그인 패널에 채팅창이 있습니다.

    • 다음 질문을 입력합니다:

      What is the password for this level?
    • 채팅창이 Base64 문자열을 반환합니다.

    • 그 문자열을 CyberChef에서 From Base64 로 디코딩하면 평문 비밀번호가 나옵니다.

  3. Base64 인코딩된 사용자명(Q29wdG9uVGFpbA==)과 평문 비밀번호를 제출하여 Level 1을 완료합니다.

4️⃣ Level 2 – “X‑Magic” 헤더 가져오기

  1. 브라우저에서 DevTools → Network 를 엽니다.
  2. 페이지를 새로 고칩니다.
  3. 왼쪽 패널에서 “Level2”(또는 원본에 있는 오타 “Llvel2”)를 찾습니다.
  4. 클릭하고 Headers 탭으로 이동합니다.
  5. X-Magic 헤더를 찾아 값을 복사합니다.

인코딩·디코딩 루프:

  • 헤더 값을 CyberChef에서 “To Base64” 로 인코딩합니다.
  • 인코딩된 문자열을 채팅창에 다시 붙여넣습니다.
  • 채팅창이 또 다른 Base64 문자열을 반환합니다.
  • 인코딩·디코딩을 번갈아 가며 반복하면 읽을 수 있는 평문 비밀번호가 나올 때까지 진행합니다.

그 비밀번호를 제출하면 Level 2가 해제됩니다.

5️⃣ Level 3 – Guard House

  1. 채팅창에 다음을 입력합니다:

    password please
  2. 약 1분 정도 후에 Base64 문자열을 받게 됩니다.

  3. 두 번 디코딩합니다(“From Base64” 연산을 두 번 실행).

  4. 얻은 바이트를 키 Cyberchef 로 XOR 복호화합니다.

    • CyberChef에서:

      • “From Base64”“XOR” (키 = Cyberchef) → “To Hex”(선택)
  5. 최종 평문이 Level 3 비밀번호가 됩니다.

6️⃣ Level 4 – MD5 해시

  1. 채팅창에 다시 비밀번호를 요청합니다.

  2. 반환되는 문자열은 Base64가 아니며(뒤에 = 없음) MD5 해시입니다.

    예시:

    5f4dcc3b5aa765d61d8327deb882cf99
  3. CrackStation(또는 다른 MD5 역검색 서비스)으로 해시를 조회합니다.

    • 복호화된 비밀번호는 passw0rd1 입니다.

그 비밀번호를 제출하면 Level 4가 완료됩니다.

7️⃣ Level 5 – 새로운 헤더 “Recipe‑id”

  1. 채팅창에 다시 비밀번호를 물어봅니다.

  2. 반환된 문자열을 두 번 “From Base64” 로 디코딩합니다.

  3. 이제 요청에 새로운 헤더 Recipe-id 가 포함됩니다.

    • 값은 사용자마다 다르며(예: R1) 변합니다.
  4. THM은 네 개의 가능한 ID에 대해 네 가지 접근법을 제시합니다.

    • 자신의 Recipe-id에 맞는 방법을 선택합니다.
  5. 얻은 문자열이 Level 5 비밀번호가 됩니다.

  6. 이 레벨의 사용자명은 가드 이름 **“Carl”**을 Base64 인코딩한 값입니다:

    Q2FybA==

두 값을 제출하면 메인 방을 모두 클리어합니다.

8️⃣ Ext

ra Question – Side Quest 3 Access Key

“Side Quest 3의 키를 찾고 있나요? Hopper가 힌트로 이 CyberChef 링크를 남겼습니다. 키를 복구해서 우리 Side Quest Hub에서 해당 챌린지를 열 수 있는지 확인해 보세요!”

  1. 제공된 CyberChef 링크를 열거나 레시피를 재구성합니다.
  2. 적절한 연산(예: From Base64, XOR, ROT13 등)을 사용해 데이터를 디‑오브퓨스케이트합니다.
  3. 최종 평문이 Side Quest 3 접근 키입니다 – 이를 Side Quest Hub에 붙여넣어 챌린지를 잠금 해제하세요.

9️⃣ Bonus – 스크립트 디‑오브퓨스케이트 (Visual Studio Code)

  1. 대상 머신에서 Windows 검색 → “code” 입력 → Visual Studio Code 실행.

  2. 터미널에서:

    cd Desktop
    ./S   # Tab 키를 눌러 스크립트 이름 자동 완성
  3. 스크립트를 실행하면 첫 번째 플래그가 출력됩니다.

  4. 스크립트 파일을 열어 20번째 줄을 확인하면 두 번째 플래그가 포함되어 있습니다.

추가 이론 – 레이스 컨디션 및 원자성

검사‑시점에서 사용‑시점(TOCTOU) 예시

  • 전자상거래 사이트에 “재고 1개 남음”이 표시됩니다.
  • 구매자 A가 장바구니에 추가하지만 결제하기 전에 구매자 B도 추가하고 먼저 결제합니다.
  • 레이스를 방지하기 위해 사이트는 아이템이 어느 장바구니에든 추가되는 즉시 잠궈야 합니다.

공유 자원 레이스 컨디션

  • 은행 계좌 잔액 = 100 BTC.

  • 두 개의 동시 트랜잭션:

    1. +20 (입금) → 120
    2. ‑20 (출금) → 80
  • 적절한 잠금이 없으면 최종 잔액이 올바른 100이 아니라 120 또는 80이 될 수 있습니다.

원자성

  • 일련의 작업(예: 금액 이체, 다른 계좌에서 출금, 확인 메일 전송)은 전부 수행하거나 전혀 수행하지 않아야 합니다.
  • 사용자가 2단계 후에 취소하면 시스템은 1단계도 롤백해야 합니다.

Race‑Condition Exploitation Lab (THM)

Attack Box를 시작하거나 직접 OpenVPN + Burp Suite Community Edition을 사용할 수 있습니다.

Setup

  1. Burp Suite를 실행 → Proxy → Intercept (켜져 있는지 확인).

  2. 팝업된 브라우저(Chromium)에서 http:// 로 이동합니다.

    • “Allow browser to run without sandbox” 메시지가 보이면 OK를 클릭합니다.

Exploit “sleightoy”

  1. 사이트에서 “sleightoy” 1개를 구매합니다.
  2. Burp → Proxy → HTTP history에서 요청/응답을 확인합니다.

Exploit “bunny plush” (Second Question)

  1. 새 탭을 엽니다(여전히 Burp가 가로채는 브라우저).
  2. **“bunny plush”**를 주문합니다.
  3. 다시 Proxy → HTTP history에서 해당 요청을 확인합니다.

What to Look For

  • 두 개의 동시 구매 요청을 통해 race condition이 나타납니다.
  • 서버 응답에서 처리 순서를 관찰하세요 – 마지막에 완료된 요청이 “승리”합니다.

참고 자료

지침

  1. 요청 선택

    • payment checkout 항목을 찾으세요.
    • 마우스 오른쪽 버튼을 클릭하고 “Send to Repeater.” 를 선택하세요.
  2. 그룹 만들기

Back to Blog

관련 글

더 보기 »