[드림핵] Dream Beginners

큐가·2025년 3월 6일
1

드림핵

목록 보기
1/5

1. Introduction to Dreamhack

해킹

  • 취약점 찾아내는 단계
  • 공격하는 단계

웹해킹

  • 웹을 대상으로 하는 해킹, 관련 기술

시스템해킹(포너블, 소프트웨어 해킹)

  • 소프트웨어의 취약점을 찾아서 이를 공격하는 해킹
  • 리버스 엔지니어링(리버싱): 프로그램을 역으로 분석하여 작동 원리를 알아내는 기술

2. Wargame

워게임

  • 의도적으로 취약점이 존재하도록 설계된 모의 해킹 환경
  • 카테고리로는 포너블, 웹, 리버싱, 암호학, 포렌식, misc 등이 있다.

플래그(Flag)

  • 공격 대상인 시스템에 존재하는 파일
  • CTF(Capture The Flag): 플래그의 내용이 공격자가 제출해야 하는 답안이다. 해킹 방어 대회에서 많이 쓰는 형식이다.
  • 드림핵에서 사용하는 플래그는 보통 DH{} 형식의 중괄호 사이에 보통 해시값(숫자와 abcdef로 이루어져있는)이 들어있는 형태를 플래그로 사용하지만, 여기에는 문제 출제자가 하고 싶은 말이 들어갈 수도 있고, 때로는 예상치 못한 형태일 수도 있다.

라이트업

  • 워게임이나 CTF에서 플래그를 찾는 과정에서 문제 풀이 과정을 정리한 것.
  • 문제를 풀 때 순차적으로 풀이자가 하는 일 체크리스트
  1. 주어진 문제가 어떤 프로그램/서비스인지 이해했다. - 풀이 없이 수행
  2. 취약점(또는 이상한 부분)이 무엇인지 파악했다.
  3. 찾은 취약점을 어떻게 공략/공격하면 될지 구상이 되었다.
  4. 풀이에 필요한 코드나 페이로드를 작성했다

실습: Welcome-Beginners

https://dreamhack.io/wargame/challenges/812

풀이
1. 터미널 창 실행
2. vm 접속 후 드림핵에서 제공하는 nc 명령어 입력
3. 입력창에 'Dreamhack' 입력
4. Welcome Beginners!가 출력되면 성공이다.
5. DH{}의 내용을 복사하여 드림핵에 입력

3. 컴퓨터 과학 기초

컴퓨터 과학

  • 컴퓨터를 이용한 모든 작업과 그 기반 이론을 연구하는 학문(코딩, 계산 이론, 알고리즘, 소프트웨어 설계, 네트워크 등도 포함)

해킹

  • 컴퓨터 과학 지식을 응용하여 프로그램이나 시스템의 취약점을 발견하고 공격하는 행위
  • 해킹을 공부하기 위해서는 컴퓨터 과학에 대한 기본적인 지식이 필요함.

비트와 바이트

  • 여러 개의 비트로 구성된 이진 데이터에서 가장 왼쪽에 있는 비트를 MSB(Most Significant Bit, 최상위 비트), 가장 오른쪽에 있는 비트를 LSB(Least Significant Bit, 최하위 비트)라고 한다.
  • 바이트 오더링: 2바이트 이상의 데이터는 메모리에 연속적으로 저장되는데, 이때 각 바이트가 메모리에 정렬되는 방식을 뜻한다. 바이트 오더링은 빅 엔디안(Big Endian)과 리틀 엔디안(Little Endian)이 있다. 바잍 오더링으로 메모리를 정렬할 때는 비트의 순서가 아닌 바이트의 순서를 고려하는 것이므로 바이트 내 비트의 순서는 동일하고 바이트의 순서만 달라진다.
  • 빅 엔디안: 큰 바이트부터 낮은 주소에 저장된다. 네트워크 상에서 데잍를 전송할 때 따른다.
  • 리틀 엔디안: 작은 바이트부터 낮은 주소에 저장된다. 개인용 컴퓨터 및 서버 환경에서 사용되므로 리틀 엔디안 방식을 잘 알고 있어야 한다.
  • 빅 엔디안과 리틀 엔디안을 설명할 때 이용되는 MSB와 LSB에서 B는 bit가 아닌 byte를 의미한다.
  • 데이터가 어떤 바이트 오더링으로 메모리에 저장되었는지 고려하는 것이 중요하다.

시프트 연산자

  • x<<n: 비트를 n만큼 왼쪽으로 이동하고 오른쪽 빈칸은 모두 0으로 채운다. x * 2^n이라는 뜻이다.
  • x>>n: 비트를 n만큼 오른쪽으로 이동하고 왼쪽 빈칸은 가장 왼쪽에 있던 비트와 동일한 비트값으로 채운다.(양수는 양수, 음수는 음수로 부호사 유지된다.) x/(2^n)이라는 뜻이다.
  • x>>>n: 비트를 n만큼 오른쪽으로 이동하고 왼쪽 빈칸은 모두 0으로 채운다.(음수는 부호가 유지되지 않는다.)

인고딩, 디코딩

  • 인코딩: 데이터의 크기를 줄이거나 컴퓨터어로 변환하는 등 데이터를 특정한 형식으로 변환하는 것. 암호화와 비슷하지만 인코딩은 누구나 원문을 구할 수 있다는 차이점이 있음.
  • 디코딩: 인코딩된 데이터에서 원래의 값을 구하는 것.

Base64 인코딩

운영체제

  • 응용 프로그램: 사용자가 원하는 작업을 수행할 수 있도록 사용자를 위해 특정한 기능을 수행하는 프로그램.
  • 운영체제: 응용 프로그램의 동작을 수행하고, 응용 프로그램에게 시스템 자원을 할당하는 등의 복잡한 관리 작업을 수행하는 소프트웨어. 컴퓨터 하드웨어와 사용자/응용 프로그램 사이에서 중재자 역할을 함.
  • 운영체제는 CPU스케줄링, 메모리 공간 분배 및 관리, 컴퓨터와 입출력 장치 사이에 정보 교환 과정 관리, 사용자와 컴퓨터 사이 인터페이스 역할

커널과 셸

  • 커널: 하드웨어 관리를 실제로 수행하는 프로그램
  • 셸: 사용자와 운영체제의 커널 사이에서 사용자가 운영체제에 명령을 내릴 수 있도록 인터페이스 역할을 함. 명령어를 해석하여 사용자와 운영체제가 소통할 수 있도록 함.
  • 셰을 획득하는 것을 시스템 해킹의 성공으로 여김.

실습: 64se64

https://dreamhack.io/wargame/challenges/872

풀이
1. 문제 파일을 다운 받아 html 코드를 열었다.
2. 코드에서 name="64se64_encoding"를 통해 Base64 인고딩 방식으로 된 텍스트라는 것을 유추하고 인코딩된 텍스트를 다시 디코딩하였다.
3. 디코딩을 하였더니 파이썬 코드라는 것을 알게 되었다.(#!/usr/bin/env python3를 통해 알게 됨)
4. 파이썬 코드를 그대로 실행하였더니 터미널에 플래그가 출력되었다.

profile
대학교 2학년, 컴퓨터학과

0개의 댓글