[Mitigation] NX
·
Hacking/Pwnable
Definition | 정의No-eXecute의 약자로, 실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 분리하는 보호기법 코드 영역에 쓰기 권한이 있으면 공격자가 코드르 수정하여 원하는 코드가 실행되게 할 수 있음스택, 데이터1 영역에 실행권한이 있으면 스택에 쉘 코드를 넣어 코드가 실행될 수 있음이러한 상황을 막기 위해 NX가 적용됨 보호기법들마다, 적용되는 단계가 다르다NX bit의 경우 CPU에서 지원해줌NX 확인하기gdb의 vmmappwndbg> vmmapLEGEND: STACK | HEAP | CODE | DATA | RWX | RODATA Start End Perm Size Offset File 0x40000..
[Pwnable] Return to Shellcode
·
Hacking/Wargame
문제 : https://dreamhack.io/wargame/challenges/352/ Return to ShellcodeDescription Exploit Tech: Return to Shellcode에서 실습하는 문제입니다.dreamhack.ioEnvironment Arch: amd64-64-little RELRO: Full RELRO Stack: Canary found NX: NX unknown - GNU_STACK missing PIE: PIE enabled Stack: Executable RWX: Has RWX segmentsRELRO, Canary를 확인할 수 있음또한, stack이 현재 executab..
[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]..
[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..
gdb를 pwntools와 디버깅하기
·
Hacking/Pwnable
pwntools의 입력 값을 해당 프로세스 (혹은 서버)에 준 채로 디버깅을 하고 싶을 때 사용한다작성한 payload가 이상해서 사용해보려고 한다 gdb (process 이름) -p (pwntools로 작성한 코드의 pid) 이런식으로 작성해도 됨 나는 안됨 gdb attach   payload를 보내기 전에 gdb.attech(process 변수 이름)코드를 추가해준다  현재 오류를 살펴보면zombie 프로세스를 연결했다는 점이 가장 중요하다 즉, 해당 프로세스가 gdb랑 연결된 후에 그냥 종료되었기 때문이라는 것그래서 pause() 명령어를 추가해주었다 gdb.attach(p)pause() 이렇게 하면이렇게 하면 디버거가 정상적으로 붙어 payload를 확인할 수 있다. 디버거 무한로딩이상하게 c를..
[IDA Pro] 사용법 정리
·
Hacking/Window
IDA란?디스어셈블러의 일종으로 바이너리 파일(exe)를 어셈블리 파일로 바꾸어주는 툴ida 사용하면서 자주 쓰는 기능 & 유용한 기능들에 대해서 설명해보려고 함!현재 버전은 IDA 8.3Pseudo Code & AssemblyGraph view둘 다 어셈블리어를 보여주는 viewspace로 view 버전을 바꿔줄 수 있음 Pseudo Codeassembly view에서 pseudo code로 보고싶다면 tap으로 볼 수 있음 SynchronizeAssembly와 Pseudo Code가 각각 어떤 부분을 가리키는지 눈으로 스페이스와 탭을 번갈아가며 확인하기는 쉽지 않아서 synchronize를 해서 보면 Pseudo code가 해당 부분에 어떤 어셈블리와 대응되는지 볼 수 있다우클릭 → Synchroni..