[dreamhack] Tool: pwntools
2022. 3. 27. 16:43
Study/System Hacking
pwntools의 등장 배경 익스플로잇 코드를 작성할 때 자주 사용되는 함수들을 반복적으로 구현하는 것은 비효율적이다. 좀 더 간편하고 효율적으로 익스플로잇 코드를 작성하기 위해 만든 것이 바로 pwntools 파이썬 모듈이다. - 초기 익스플로잇 스크립트 #!/usr/bin/env python2 import socket # Remote host and port RHOST = "127.0.0.1" RPORT = 31337 # Make TCP connection s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((RHOST, RPORT)) # Build payload payload = "" payload += "Socket script" pa..
[dreamhack] Tool: gdb
2022. 3. 26. 16:21
Study/System Hacking
gdb & pwndbg 예제 코드 // Name: debugee.c // Compile: gcc -o debugee debugee.c -no-pie #include int main(void) { int sum = 0; int val1 = 1; int val2 = 2; sum = val1 + val2; printf("1 + 2 = %d\\n", sum); return 0; } 리눅스는 실행파일의 형식으로 ELF(Executable and Linkable Format)를 규정하고 있다. ELF는 크게 헤더와 여러 섹션들로 구성되어 있는데 헤더에는 실행에 필요한 여러 정보가 적혀 있고 섹션들에는 컴파일된 기계어 코드, 프로그램 문자열을 비롯한 여러 데이터가 포함되어 있다. ELF의 헤더 중에 진입점(Entry..
[dreamhack] x86 Assembly
2022. 3. 26. 03:22
Study/System Hacking
어셈블리어와 x86-64 어셈블리 언어 컴퓨터의 기계어와 치환되는 언어로 기계어가 여러 종류 있다면 어셈블리어도 그만큼 다양하게 존재한다. ISA에는 IA-32, x86-64, ARM 등등 여러 종류가 있는데 이 종류만큼의 어셈블리어가 존재하는 것이다. 드림핵에서는 x86-64 어셈블리 언어만 다룬다. x86-64 어셈블리 언어 기본 구조 명령어(Operation Code, Opcode) + 피연산자(Operand) 명령어 명령 코드 데이터 이동(Data Transfer) mov, lea 산술 연산(Arithmetic) inc, dec, add, sub 논리 연산(Logical) and, or, xor, not 비교(Comparison) cmp, test 분기(Branch) jmp, je, jg 스택(S..
[dreamhack] Linux Memory Layout
2022. 3. 25. 18:52
Study/System Hacking
리눅스 프로세스의 메모리 구조 세그먼트 세그먼트는 적재되는 데이터의 종류별로 메모리의 구역을 나눈 것으로 용도에 따라 5가지로 구분한다. 코드 세그먼트 데이터 세그먼트 BSS 세그먼트 스택 세그먼트 힙 세그먼트 메모리의 구역을 나누면 운영체제가 용도에 따라 적절한 접근권한을 설정할 수 있다는 장점이 있다. 접근권한에는 읽기, 쓰기, 실행이 존재하고 CPU는 부여된 권한에 대해서만 행동할 수 있다. ex) 데이터 세그먼트는 프로그램이 실행되면서 사용되는 데이터가 적재된다. CPU는 해당 메모리에서 값을 읽어와야 하므로 읽기 권한이 주어진다. 대신 이곳의 데이터는 실행 대상이 아니기 때문에 실행 권한이 주어지지 않는다. 코드 세그먼트 실행 가능한 기계 코드가 위치하는 영역으로 텍스트 세그먼트(Text Seg..
[dreamhack] Computer Architecture
2022. 3. 25. 14:57
Study/System Hacking
컴퓨터 구조와 명령어 집합 구조 컴퓨터 구조 컴퓨터가 잘 작동할 수 있게 고안한 컴퓨터 도면으로 아래와 같은 것들이 있다. 컴퓨터의 기능 구조에 대한 설계 명령어 집합구조 마이크로 아키텍처 기타 하드웨어 및 컴퓨팅 방법에 대한 설계 폰 노이만 구조 오늘 날 현대 컴퓨터의 구조로 연산, 제어, 저장 세 가지의 핵심 기능이 실행될 수 있는 컴퓨터 구조다. 중앙처리장치(Central Processing Unit, CPU), 기억장치(memory), 버스(bus)로 구성된다. 중앙처리장치(Central Processing Unit, CPU) CPU는 컴퓨터의 두뇌로 RAM에서 코드를 가져오고, 실행하고, 결과를 저장하는 일련의 모든 과정을 수행한다. CPU에는 산술 논리 연산을 처리하는 ALU, 제어장치인 CU..
[dreamhack] XSS-2
2022. 3. 11. 01:15
Study/Web Hacking
XSS-1과 마찬가지로 XSS 취약점을 찾고 flag를 획득하자. XSS-1과 똑같이 vuln, memo, flag 페이지가 존재한다. 제공된 소스 코드도 vuln에서 param을 return하는 코드가 빠진 거 외엔 XSS-1과 다를 게 없다. #!/usr/bin/python3 from flask import Flask, request, render_template from selenium import webdriver import urllib import os app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open("./flag.txt", "r").read() except: FLAG = "[**FLAG**]" def read_ur..
[dreamhack] XSS-1
2022. 3. 10. 23:48
Study/Web Hacking
XSS 취약점을 이용해서 flag를 획득해야 한다. 아래는 문제 페이지다. vuln(xss) page, memo, flag 세 가지의 페이지가 존재한다. 제공된 문제 소스 코드를 통해서 XSS 취약점이 존재하는 곳을 알아봤다. @app.route("/vuln") def vuln(): param = request.args.get("param", "") return param memo_text = "" @app.route("/memo") def memo(): global memo_text text = request.args.get("memo", "") memo_text += text + "\n" return render_template("memo.html", memo=memo_text) vuln과 memo는..
[dreamhack] session-basic
2022. 1. 25. 22:17
Study/Web Hacking
admin 계정으로 로그인해서 flag를 획득해야 하는 문제다. 이번 문제에서는 cookie와 session으로 인증 상태를 관리하고 있다. 따라서 admin으로 로그인하려면 admin의 session_id가 필요하다. 일단 이전 실습에서처럼 guest 계정으로 로그인했다. 그리고 cookie를 보면 새로운 session_id가 생성된 것을 확인할 수 있다. 이 session_id는 guest 계정을 인증해주는 key다. 위에서 value 값을 admin의 seesion_id로 바꿔주면 admin 계정으로 로그인이 가능할 거 같다. 문제 파일에 있는 소스코드는 아래와 같다. users 배열에 사용자 계정이 있고, session_storage 배열이 있다. login에 관련된 코드를 보면 로그인에 성공할 ..
[dreamhack] cookie
2022. 1. 25. 12:33
Study/Web Hacking
admin으로 로그인해서 flag를 획득해야 하는 문제다. 문제 페이지에 접속하면 다음과 같다. 로그인 페이지는 아래와 같고, guest로 로그인해봤다. guest/guest로 로그인했더니 guest 계정으로 로그인 되었다. 이 상태에서 cookie를 확인해보면 username으로 guest가 추가된 것을 볼 수 있다. 여기서 guest를 admin으로 바꾸고 페이지를 새로고침하면, admin으로 로그인 할 수 있다. flag는 DH{7952074b69ee388ab45432737f9b0c56} cookie의 개념을 잘 이해하고 취약점을 알고 있으면 해결할 수 있는 문제였다. https://dreamhack.io/wargame/challenges/6/ cookie 쿠키로 인증 상태를 관리하는 간단한 로그인..