ssp_001
·
Write-up/DreamHack
프로그램은 i386, 즉 32비트 아키텍처를 사용중이다. 문제는 카나리 값이 일치하는지 확인하는 SSP 방어 기법을 우회하여 익스플로잇 및 쉘 획득 후 flag값을 얻는 것이 목표이다. checksec으로 보안 적용 상태를 확인해보면 카나리 값이 적용되어있는 것을 확인할 수 있다. 값을 입력받는 read와 scanf가 여러개 있지만, read는 정의한 문자열의 크기 만큼만 읽는다. 반면 scanf는 문자열 크기에 대해 제한이 없으므로 공백 문자만 피하면 되겠다. 즉, case P를 공략할 것이다. name_len을 입력받고 name_len만큼 name에 읽어들이니 case E를 사용할 수도 있을 것 같다. get_shell() 함수가 존재하니 쉘코드는 만들지 않아도 될 것 같다. 해당 함수를 실행시키면..
Return to Shellcode
·
Write-up/DreamHack
보호 기법 확인은 checksec RELRO, Canary, NX, PIE 등의 보호 기법 적용 여부 확인이 가능하다.여기서는 카나리 값이 설정되어있다. 주어진 프로그램의 코드를 확인해보자. 입력이 2번이다. 첫번째 입력을 0x100만큼 read하고, 입력받은 값을 바로 뒤에서 출력한다.첫번째 입력애서 RET까지 조작할 수 있으면 좋겠지만, 카나리 조작되면 값이 조작되면 __stack_chk_fail 함수가 프로세스를 강제 종료 시킨다. 그렇다면 카나리 값을 알아내야 할텐데, 0x100만큼 출력을 하니 여기서 카나리 값을 릭 시킬 수 있지 않을까?두번째 입력은 널문자가 나오기 전까지 계속 입력받으므로 이 입력을 통해 반환 주소를 덮을 수 있겠다. 첫번째 printf 입력에서 카나리 구하고 쉘 코드 주입..
basic_exploitation_001
·
Write-up/DreamHack
32비트 아키텍처에서 작동하는 서버의 프로그램을 익스플로잇한다. 버퍼에 128바이트를 할당했다. 문자열은 gets 로 받는다. read_flag() 가 존재하는 것을 보아 저걸 실행 시키면 되는 듯하다. gets 함수의 인자로 전달되는 것은 메모리 주소 값이다. 엔터(\n)가 입력될 때까지 입력한 값들을 인자로 주어진 메모리 주소에 저장한다. 값을 입력해보면 오버플로우 취약점이 존재하는 것을 확인할 수 있다.코어 덤프를 확인하려 했는데 그새 리눅스가 꺼졌던 탓인가, ulimit가 0으로 설정되어있어서 다시 풀어주었다. 근데 주어진 프로그램에 디버거를 쓰면 된다는 것을 깨달아서 ... 프로그램을 확인해줍니다.disass main으로 어셈블리어를 출력하면, ebp-0x80이 buf의 주소인 것을 확인할 수 ..
basic_exploitation_000
·
Write-up/DreamHack
서버는 32비트 인텔 아키텍처를 사용하고, 리틀 엔디언이다. 어떤 프로그램인지 실행부터 해보려고 했는데, 실행에 필요한 파일이 없다?고 떠서 코드부터 확인해보았다.30초 타임아웃이 존재한다.main 함수를 보면 128바이트의 버퍼를 정의했는데, scanf에서 141바이트 만큼 문자열을 받는다. 버퍼 오버플로우 취약점이 존재하는 것을 확인했다. 버퍼의 위치 확인을 위해서 disass 로 main을 까보자buf가 ebp-0x80에 위치한 것을 확인했다.어셈블리를 배운지 얼마 안되어서 다 이해할 순 없었는데, scanf()를 콜하는 부분 직전이 들어갈 인자를 스택에 push하는 부분으로 이해했기 때문에 ebp-0x80이 버퍼의 위치라고 생각했다. *디버그 화면에서 x/s 0x8048699 처럼 입력하면 문자..
Return Address Overwrite
·
Write-up/DreamHack
스택 버퍼 오버 플로우와 관련한 문제이다. // Name: rao.c// Compile: gcc -o rao rao.c -fno-stack-protector -no-pie#include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0);}void get_shell() { // 공격을 통해 실행하고자 하는 함수 char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL);}int main() { char buf[0x28]; // 40 바이트 init(); printf("Input: "); scanf("%s", buf); return ..
shell_basic
·
Write-up/DreamHack
쉘코드에 대해 학습한지 얼마되지 않아 용어가 헷갈리는 상태이다......'main 함수가 아닌 다른 함수들은 execve, execveat 시스템 콜을 사용하지 못하도록 하며, 풀이와 관련이 없는 함수입니다.' 가 이해가 안가서 main함수에서만 execve를 실행할 수 있다는 건줄 알고 execve 쉘코드로 짜고있었다...뭔가 이상해서 확인해보니 주어진 코드파일에서 main 말고 나머지 함수들은 execve를 사용하지 못하도록 하는 함수라는 것이었으며즉, execve와 execveat은 이 문제 풀 때 쓰지 말라는 것이었다. 주어진 코드는 아래와 같다.보면서 한눈에 이해가 안된 부분은 주석처리로 적어두었다. // Compile: gcc -o shell_basic shell_basic.c -lsecco..
addtion-quiz, flag-shop
·
Write-up/DreamHack
addition-quiz프로그램 소스코드는 아래와 같다.// Name: chall.c// Compile Option: gcc chall.c -o chall -fno-stack-protector#include #include #include #include #include #include #define FLAG_SIZE 0x45void alarm_handler() { puts("TIME OUT"); exit(1);}void initialize() { // 입출력 버퍼링 OFF. _IONBF : 데이터가 I/O 하는 즉시 처리 setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, ala..
[DH] Exercise : GDB
·
Write-up/DreamHack
VM으로 드래그앤드롭하면서 문제가 있었던 건지 허가 거부가 자꾸 떴다.문제 해설에서는 정상적으로 실행되는 듯하여 권한 문제로 생각해 chmod +x로 실행 권한을 줘보았다. 정상적으로 돌아간다. 문제를 확인하자면flag1은 flag_1()이 반환하는 값으로, 해당 함수가 실행된 직후의 rax값이다.flag2는 flag_2()을 실행하면 얻을 수 있고, flag_2()( 실행을 위해서는 0x401179 주소에 위치한 명령어가 실행될 때 rax 값이 0이어야한다. 플래그 형태는 DH{flag1-flag2}이다. 먼저 b flag_1로 중단점부터 만들어주고 run한다. flag_1()에 도달하고 멈춘다. 결과는 위와 같이 뜨는데, flag_1이 반환하는 값이라고 했다. DISASM을 보면 flag_1 함수에 ..
워게임은 아니고 그냥 퀴즈 풀이
·
Write-up
1. 함수 프롤로그2. esi = 0xf 3. rdi = 0x4005004, write_n 호출 5. 함수 에필로그 1. 함수 프롤로그2. rbp-0x8에 저장. rdi에서 8바이트 참조. 0x400500 (0x3037207964343372)3. rbp-0xc에 저장. esi에서 4바이트 참조 0xf4. rdx = 05. edx에 rbp-0xc 값 저장. edx = 0xf6. rsi에 rbp-0x8값 저장. rsi = 0x400500 (0x3037207964343372)7. rdi = 0x1. write 인자값으로 넘어감8. rax = 0x1. write함수 호출 요청9. syscall10. 함수 에필로그 -> write(rdi, rsi, rdx) 인자로 넘어감 [0x1, 0x400500, 0xf]순서..
[2026 Hacktheon] Write-up
·
Write-up
말로만 듣다가 처음으로 참가해본 CTF다!! 동아리 분들과 참가했다2학년이 되면서 뭐라도 해야겠다는 생각으로 포렌식을 시작했는데, 인터넷에 검색했을땐 분명 포렌식 분야가 있었던 것 같은데... 없을 줄은 몰랐다. 짐이 되지 않기 위해서 두 문제는 풀기!!가 목표였는데, 그나마 이것저것 하다가 마주친 리버싱이 승산이 있을 것 같아 리버싱 문제를 풀어보았다. 리버싱 두문제와 misc 한문제를 물고 늘어져보았다. 결국 최종적으로 한 문제 밖에 풀지 못했지만!!... 스코어보드에 쌓이는 속도를 보고 열심히 공부해야겠다는 생각이 들었었다. 아좌잣... Recover It!prob라는 파일 하나만 달랑 주길래 뭔가 했다. 문제로 주어진 파일을 확인하면 ELF 파일이다. IDA로 프로그램을 확인해본다.main 함수..
[DH] Digital Forensics Specialist Path 워게임 풀이3
·
Write-up/DreamHack
boot_time풀이 시간 20260322 20:29 - 21:45Hint. PC가 마지막으로 부팅된 시간 Flag. DH{yyyy_MM_dd_hh_mm_ss} 마운트 부터 해준다.PC가 마지막으로 부팅된 시간이라면 이벤트 로그를 분석하면 될 것 같다. 이벤트로그는 [root]\System32\winevt\Logs에 위치하고 Logs 디렉토리 전체 추출해준다. 시스템 부팅과 관련된 EventID를 사용해야할 것 같은데, 이벤트 로그가 초견이라 뭘 써야할지 감이 잘 오지않는다...이벤트 로그를 공부하다가 스쳐지나가듯 본 4608을 사용하면 될 듯 한데, 혹시 몰라서 부팅 관련 EventID를 구글링해보았다. 제일 많이 보이는게 6005로 이벤트 로그 서비스 시작, 부팅시 기록 이라는 설명이었다.일단 이벤트..
[DH] Digital Forensics Specialist Path 워게임 풀이2
·
Write-up/DreamHack
Find the USB풀이 시간 260322 00:00 - 00:53Hint. Windows 레지스트리를 분석. 사건 발생 2024.04Flag. DH{VID_PID_DeviceSerialNumber} 디스크 파일을 받아주고 먼저 마운트를 해준다. 검색을 위해 Autopsy를 쓸까 했는데, 그냥 FTK Imager로 진행했다. 레지스트리 정보가 저장되는 [root]:\Users\victim\NTUSER.DAT, [root]:\Users\victim\AppData\Loca\Microsoft\Windows\UsrClass.dat, [root]:\Windows\System32\config의 SAM, DEFAULT, SECURITY, SOFTWARE, SYSTEM에 있는 파일들을 .LOG1, .LOG2와 함께 ..
[DH] Digital Forensics Specialist Path 워게임 풀이1
·
Write-up/DreamHack
png_and_png_and_png_and_png제목에 힌트가 있다고 했으니 png가 4개 겹쳐진 문제일까?헤더는 png로 멀쩡하다.푸터 시그니처를 검색해주니 8개가 나오는 것을 확인했다. 네?하나씩 파일을 새로 만들어주면 플래그를 확인할 수 있다. VBR주어진 VBR을 분석하고 플래그를 찾으라고한다. Flag는 DH{(A+B+C)} (더한 후 10진수 변환 필요)A : 1(FAT32)/2(NTFS), B : 볼륨 크기, C : 볼륨 시리얼 번호 이다. 받은 파일을 HxD로 열어본다.File System Type 위치에 디코드된 채인 FAT32를 확인할 수 있다. → A = 1볼륨 시리얼 넘버는 파일 시스템 종류의 윗줄에 존재한다. → C = 0x0EA8EE8A볼륨의 크기는 Total Sector 32..
[DH] 포렌식 Lv.1 모음
·
Write-up/DreamHack
보호되어 있는 글입니다.
[H4CKING GAME] 포렌식 맨땅에 헤딩해보기 1~4
·
Write-up/H4CKING GAME
보호되어 있는 글입니다.