전체 글

전체 글

    2월 초에 쓰는 일기

    자체평가 : ★★★★☆ 일이 다소 바쁜 와중에도 열공 하고 있긴 하다. 리버싱 공부를 계획했는데, 크립토로 살짝 빠졌다. 요즘엔 리버싱보다 크립토 공부를 더 많이 하는 것 같다. 드림핵 컨텐츠 위주로 공부하고 있었는데, 역시 만능인 곳은 없나보다. 어쩌다보니 알게된 cryptohack이 크립토 분야에 있어서는 아주 체계적으로 공부할 수 있는 것 같다. (강추!) 약간 무지성 문제가 많은 리버싱보다는 훨씬 도움이 되는 것 같기도 하고. 하지만 목표 달성이라는 관점에서 드림핵 문제를 좀 풀어야하긴 하는데, 다소 시간이 오래 걸릴 것 같다. 포너블쪽은... 진행이 안된다. 사실 리버싱 + 크립토 공부 때문에 못하고 있다는게 더 맞는 것 같다. 조금 여유가 생기면 다시 시작해야겠다. 작년부터 기다렸던 일인데, ..

    BB CTF 2023 - Medium pwn

    1. intro 2. code 및 분석 2.1. code 2.1.1. main int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { puts("Hi! I am the Stack Oracle.\n"); while ( 1 ) gimme_pointer("Hi! I am the Stack Oracle.\n", argv); } 2.1.2. gimme_pointer unsigned __int64 gimme_pointer() { const void *v1; // [rsp+8h] [rbp-28h] BYREF char buf[24]; // [rsp+10h] [rbp-20h] BYREF unsigned __int64 v3; // [rsp..

    BB CTF 2023 - Easy pwn

    1. intro 초보를 위한 낮은 난이도의 CTF. DICE CTF에서 내상을 입고 BB CTF에서 약간 회복했다. 2. code 및 분석 2.1. code int __cdecl main(int argc, const char **argv, const char **envp) { char buf[8]; // [rsp+8h] [rbp-28h] BYREF char command[24]; // [rsp+10h] [rbp-20h] BYREF unsigned __int64 v6; // [rsp+28h] [rbp-8h] v6 = __readfsqword(0x28u); strcpy(command, "ls"); puts("Hi! would you like me to ls the current directory?"); re..

    DiceCTF 2023 - pwn/bop

    1. intro 한 문제 풀고 나머지는 좌절한 CTF... 2. code 및 분석 2.1. code __int64 __fastcall main(int a1, char **a2, char **a3) { char v4[32]; // [rsp+0h] [rbp-20h] BYREF setbuf(stdin, 0LL); setbuf(stdout, 0LL); setbuf(stderr, 0LL); printf("Do you bop? "); return gets(v4); } 2.2. 분석 코드는 참 간결했다. 출력 하나하고 gets로 값을 받아들인다. 3. 취약점 확인 및 공격 준비 3.1. 취약점 buffer overflow 3.2. 공격 준비 ida로 파일을 열었을 때 바로 보이는 함수가 seccomp 였다. 그래서 ..

    Modular Inverting

    1. intro 2. code 및 분석 2.1. code N/A 2.2. 분석 역함수다! 우리는 유한체가 더하거나 곱해도 항상 Fp 유한체의 다른 요소임을 알 수 있었다. 유한체의 모든 요소 g는 g * d ≡ 1 (mod p)를 만족하는 d를 가진다. 이를 g의 곱셈역라고 한다. 예를 들어 7 * 8 = 56 ≡ 1 (mod 11) 이다. 그렇다면 3 * d ≡ 1 (mod 13) 을 만족하는 곱셈역는 무엇인가? 페르마의 소정리가 어떻게 곱셈역을 구하는데 도움이 되는지 생각해보자. 3. exploit 3.1. 페르마의 소정리 활용 페르마의 소정리는 앞서 공부한 것과 같이 p가 소수면 a^(p - 1) mod p = 1 이는 곧 a^(p - 1) mod p = 1 mod p a^(p - 1) * p^(-..

    PWN wargame 모음 (및 느낀점)

    https://wyv3rn.tistory.com/notice/418 PWN wargame 모음 (및 느낀점) 직접 풀어본 사이트들만 모았다. 그렇기에 천천히 추가될 예정. * H4CKINGGA.ME https://h4ckingga.me/ H4CKING GAME h4ckingga.me 국내 유명 hacker groop인 H4C의 war game site. 문제가 그리 많지도 않고, 난이도가 그리 wyv3rn.tistory.com 로 이동했다.

    Basic RCE L04

    1. intro 2. code 및 분석 2.1. code N/A 2.2. 분석 이번에는 바이너리를 실행해봤다. 정상이라는 문구만 반복적으로 출력된다. 그냥 ida로 열어서 graph overview부터 봤다. 일단 이것도 대놓고 있다;;; 3. exploit 3e8 m.s sleep 과 함께 chkesp 함수와 IsDebuggerPresent 함수를 실행하며 esi, esp를 지속적으로 비교해서 디버거가 실행 중인지 확인한다.

    Basic RCE L03

    1. intro 2. code 및 분석 2.1. code N/A 2.2. 분석 포기하지 않고 이번에도 ida로 까봤다. 잘 실행된다 ㅋㅋㅋ 문제에서는 비주얼베이직에서 스트링 비교 함수 이름을 묻는다. 검색하면 안돼? StrComp function (Visual Basic for Applications) | Microsoft Learn StrComp function (Visual Basic for Applications) Office VBA reference topic learn.microsoft.com 안됨 ㅋㅋㅋㅋ 분석해보자 함수부터 봤는데 으음? 비교 함수가 그냥 대놓고 있네? 3. exploit 원래 의도는 이게 아니었을거다 ㅋㅋㅋ ida에서 프로세스 트리를 좀 봤다. 여기서와 같이, ebp - 5..

    Basic RCE L02

    1. intro 2. code 및 분석 2.1. code N/A 2.2. 분석 와... 이럴수도 있구나... 파일을 ida로 열었더니 데이터들이 손상된건 알겠지만, 파일 길이가 영 이상하다. PE 구조에 대해서 조금 검색해봤는데, .text .data .rsrc .reloc 뒤에는 해당 섹션의 시작점 및 크기가 적혀있다고 한다. 딱 하나만 보자면 .text 영역의 값은 아래와 같다. 여기서 두번째줄 오른쪽 8바이트를 보면 00 02 00 00 00 04 00 00 이 있는데, 이는 0x400이 시작점이고 그 크기가 0x200 이라는 의미이다. 즉, text 영역만 봐도 0x600까지는 데이터가 있어야 한다는 말이다. 그래서 혹시나하여 hex editor로 파일을 열어봤더니 역시 뒤에 데이터가 더 있었다...

    Basic RCE L01

    1. intro 2. code 및 분석 2.1. code 대충 트리만 보자. 2.2. 분석 잠시 쉬었다가 다시 하는 리버싱. 추천 받아서 한번 풀어본다. 두번째 loc_401021 에서 eax와 esi를 비교해서 jz 즉, 같으면 loc_40103D로 분기해서 messagebox를 띄워준다. 그게 아니라면 에러 메시지와 함께 loc_401050으로 점프해서 종료된다. 3. exploit 문제에서는 GetDriveTypeA의 return 값을 묻고 있다. 비교 구문에서 esi의 값을 보았더니 0x00401003 이길래 앞에 dec eax가 2개 있어서 0x00401005를 키로 넣었는데 안되네? 10진수로 넣었는데도 안되네? 그냥 5를 넣었더니 되네? 뭐지?