[Mitigation] Stack Canary
·
Hacking/Pwnable
Definition | 정의스택 버퍼와 반환 주소 사이에 임의의 값을 삽입하여 함수의 에필로그에서 해당 값의 변조를 확인하는 보호기법만약, 스택 카나리의 값이 변조되었다면 프로세스는 강제 종료됨 스택 버퍼오버플로우로 반환 주소를 덮으면서, 스택 카나리의 값을 덮는 것을 피할 수 없음→ 에필로그에서 변조가 확인되며 해커가 실행 흐름을 가져올 수 없음 카나리를 잘못 덮어쓰면 stack smashing detected라는 경고와 함께 종료된다 카나리 정적 분석스택 카나리를 만드는 과정이 프롤로그에, 변조를 확인하는 과정이 에필로그에 추가됨프롤로그mov rax,QWORD PTR fs:0x28mov QWORD PTR [rbp-0x8],raxxor eax,eaxlea rax,[rbp-0x10]..
함수의 프롤로그 & 에필로그
·
CS/Computer Architecture
.text:00401000 55 push ebp.text:00401001 8B EC mov ebp, esp.text:00401003 68 F8 20 40 00 push offset Buffer ; "Hello World :)".text:00401008 FF 15 B0 20 40 00 call ds:__imp__puts.text:0040100E 83 C4 04 add esp, 4.text:00401011 FF ..
Register
·
CS/Computer Architecture
General-Purpose register여러가지 목적이나 용도로 사용하는 레지스터프로그래머가 자유롭게 조작 할 수 있음일종의 변수라고 생각할 수 있음인텔의 공식 문서에 따르면 32비트의 시스템의 경우 8개가 존재인텔의 공식 문서에 따르면 64비트의 시스템의 경우 16개가 존재용도나 목적이 정해져있지 않음 (그렇지만 일반적으로 어떠할 때 사용한다는 것은 존재함)* RAX, RBX, RCX, RDX 2byte 중 상위 1byte에 접근할 수 있음더보기[ 범용 레지스터의 용도/목적 ] 실질적으로 정해져있는 것은 아니지만 주로 사용함EAX : 피연산자와 연산 결과의 저장소EBX : data segment 안의 데이터를 가리키는 포인터ECX : 문자열 처리나 루프를 위한 카운터EDX : I/O 포인터ESI :..
[Assembly] Intel vs AT&T
·
CS/Computer Architecture
어셈블리어 : 기계어와 일대일 대응되는 저급 언어IntelAT&Tmov eax, 1movl $1, %eaxlea ecx, [ebx+eax*2]leal (%ebx, %eax,2), %ecx같은 문법이 Intel과 AT&T인가에 따라 달라짐 더보기[ 어셈블리의 피연산자 ] 상수, 레지스터, 메모리 셋 중 하나이다 메모리에 접근하려면TYPE PTR [레지스터 or 상수] 형태이다 ex) QWORD PTR [rax+8]접미사mov eax, 1movl $1, %eax intel의 경우 단순 명령어만 적지만, AT&T의 경우 해당 명령어가 어떤 크기의 명령어인지 나타낸다예시를 보면, eax는 4바이트이므로 long이다. [b] byte : 1byte[w] word : 2byte[l] long(double word)..
CPU Scheduling
·
CS/OS
Scheduling MetricsTurnaround time\[T_{turnaround} = T_{completion} - T_{arrival}\]프로세스가 생성된 시간부터 종료된 시간까지 걸린 시간으로 기다린 시간까지 포함Response time\[T_{response} = T_{firstrun} - T_{arrival}\]처음 실행때까지 걸린 시간 / 즉 요청을 보낸 후 처음 프로세스가 실행된 시간  Workload Assumptions cpu의 운영 방식을 가정하면서 가장 효율적인 CPU scheduling 방식이 무엇인지 찾아보고자 한다.Each job runs for the same amount of time ( 모든 프로세스가 같은 시간이 소요됨 )All jobs arrive at the sa..
[Reversing] patch
·
Hacking/Wargame
문제 : https://dreamhack.io/wargame/challenges/49/ patchflag를 그리는 루틴을 분석하고 가려진 flag를 보이게 해주세요. Reference GDI+ - Win32 apps | Microsoft Docs Graphics Functions - Win32 apps | Microsoft Docs File — x64dbg documentationdreamhack.io플래그에 현재 선을 긋는 코드가 추가되어 있는 것으로 추정됨Static Analysisint __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd){ HCURSOR CursorW; // rax..
[Cryptography] Textbook-CBC
·
Hacking/Wargame
문제 : https://dreamhack.io/wargame/challenges/175 Textbook-CBCDescription 드림이가 AES 플래그 서버를 운영하고 있어요. 무엇이든 암호화하고 복호화 할 수 있다던데... 플래그를 획득해주세요! References https://dreamhack.io/lecture/courses/74dreamhack.io Code Analysisfrom Crypto.Util.Padding import pad, unpadfrom random import choices, randintfrom Crypto.Cipher import AESBLOCK_SIZE = 16flag = open("flag", "rb").read()key = bytes(randint(0, 255) f..
[Reversing] Reversing Basic Challenge #1
·
Hacking/Wargame
문제 : https://dreamhack.io/wargame/challenges/15 rev-basic-1Reversing Basic Challenge #1 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출dreamhack.io #0과 문제 자체는 같은데, 약간 다른 방식으로 풀어봤다처음 봤을 때 잘못건들여서 main을 못 찾아서, 아예 Correct를 중심으로 찾아봄 Reversing* Correct와 같은 문자열들은 어셈블리로 변환된다고 해서 바뀌지 않기 때문에 Sequence of Byte(Alt+B)로 검색해서 찾음Correct를 볼 수 있다crtl + x로 이를 ..
[Reversing] Reversing Basic Challenge #0
·
Hacking/Wargame
문제 : https://dreamhack.io/wargame/challenges/14 rev-basic-0Reversing Basic Challenge #0 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출dreamhack.io Code Analysis입력해서 correct가 뜨는 문자열을 찾으면 된다ReversingIDA로 메인 함수를 보면int __fastcall main(int argc, const char **argv, const char **envp){ char v4[256]; // [rsp+20h] [rbp-118h] BYREF memset(v4, 0, si..
[Pwnable] bof
·
Hacking/Wargame
문제 : https://dreamhack.io/wargame/challenges/1111 bofDescription Buffer overflow is one of the basics of pwnable 🐱 The path of the flag file is /home/bof/flag.dreamhack.io  문제 파일을 받으면이렇게 파일이 존재한다.딱히 소스코드가 없기 때문에 디버거로 분석해야할 것으로 보임 실행파일이 bof일 것으로 추정되기 때문에, 리눅스에서 실행 권한 변경해서 bof를 실행해줬다.실행 파일 찾기도커 파일을 열어보면 해당 빌드 정보가 들어가 있다.FROM ubuntu:22.04@sha256:2b7412e6465c3c7fc5bb21d3e6f1917c167358449fecac8176c6..