[Dreamhack] stacknote
문제 링크 https://dreamhack.io/wargame/challenges/1997 문제 설명 usually notes are stored in the heap, but this time it’s stored in the stack. 문제 분석 하나의 노트는 다음과 같은 구조를 가지며, main 함수의 스택 영역에 총 10개(0~9 인덱스)...
문제 링크 https://dreamhack.io/wargame/challenges/1997 문제 설명 usually notes are stored in the heap, but this time it’s stored in the stack. 문제 분석 하나의 노트는 다음과 같은 구조를 가지며, main 함수의 스택 영역에 총 10개(0~9 인덱스)...
__printf_arginfo_table, __printf_function_table 조작을 통한 임의 코드 실행 연관 문제 Dreamhack wheat-and-barley 필요 조건 임의 주소 쓰기를 통해 libc의 __printf_arginfo_table, __printf_function_table을 덮어쓸 수 있어야 함. AAW 후 ...
문제 링크 https://dreamhack.io/wargame/challenges/2146 문제 설명 You reap what you sow. 문제 분석 stdout (_IO_2_1_stdout) 으로부터 최대 0x2000만큼 떨어진 위치에 총 2번의 임의 값 쓰기가 가능하다. stdout과 가까운 위치에 __printf_function_...
카테고리 Web 문제 분석 및 풀이 처음 접속하면 인증 코드를 입력해야 하는데, 웹 페이지의 주석을 보면 인증 코드의 sha256 해시 값이 적혀 있다. 이를 구글에 검색해보면 magic hash table에 등록되어 있는 값이므로, 이를 이용하면 인증 코드를 통과할 수 있다. 이후 pdf 파일을 업로드할 수 있는데, pdf 구조에 대한 검사와 확...
카테고리 Pwnable 문제 분석 및 풀이 서버에 처음 접속하면 회원가입 기능과 로그인 기능이 있는데, 회원가입 기능은 아래와 같다. unsigned __int64 SignUp() { ... printf("[*] New ID: "); fgets(s, 32, stdin); s[strcspn(s, "\n")] = 0; printf("[...
카테고리 Pwnable 문제 분석 및 풀이 펌웨어를 업로드, 적용 및 조회할 수 있는 바이너리이다. 그 중 업로드 기능을 보면 다음과 같다. unsigned __int64 upload() { __int16 v1; // [rsp+0h] [rbp-1040h] __int16 v2; // [rsp+2h] [rbp-103Eh] __int16 v3;...
카테고리 Web 문제 분석 및 풀이 웹 상에 xlsx(엑셀) 파일을 업로드할 수 있고, 그 파일을 파싱하여 첫 번째 셀의 내용을 출력해준다. Dockerfile을 보면, Spreadsheet::ParseXLSX 0.27 버전을 사용하고 있음을 알 수 있다. CVE-2024-23525 취약점은 Spreadsheet::ParseXLSX 0.30 버전 이...
카테고리 Crypto 문제 분석 및 풀이 AES CTR 모드를 사용해 메시지를 암호화하는데, 두 번의 암호화 과정에 동일한 key와 nonce를 사용하여 암호화한다. key = get_random_bytes(16) nonce = get_random_bytes(8) secret_message = gen_random_string(16).encode() ...
카테고리 Web 문제 분석 및 풀이 임의 파일을 업로드할 수 있는 웹페이지이다. 하지만 파일 내용에 숫자와 알파벳이 포함되지 않는 파일만 업로드할 수 있다. 아래와 같은 php 파일을 업로드한다. <?= $_="{"; $_=($_^"<").($_^">;").($_^"/"); ${'_'.$_}["_"](${'_'.$_}["__"]); ...
카테고리 Pwnable 문제 분석 및 풀이 GLibc의 stdout에 최대 0xe0바이트만큼을 입력한 후 puts 함수가 호출된다. stdout을 원하는 대로 덮어쓸 수 있으므로 FSOP를 이용한다. GLibc 2.35버전이므로, 함수 포인터 호출이 대부분 제거된 상태이다. 따라서 _IO_FILE의 _wide_data와 _IO_wide_jumps를 ...