Wargame

    [pwnable.xyz] All Clear

    🧡 Good Game 😀 실제 플레이 시간: 12 days

    [pwnable.xyz] fishing - thread

    🧡 fishing 설명 pwnable.xyz 문제 중에 재미있게 푼 문제가 있어서 소개해보려고 한다. binary를 봐보도록 하자. undefined8 main(void) { undefined4 uVar1; setup(); banner(); do { show_menu(); uVar1 = read_int(); switch(uVar1) { default: err("Invalid choice"); break; case 1: add_group_member(); break; case 2: modify_group_member(); break; case 3: write_in_book(); break; case 4: go_fishing(); break; case 5: stop_fishing(); break; case ..

    [pwnable.xyz] Heap - House of Force 복습 (note v3)

    🧡 note v3 binary House of Force 복습 문제 😍 void make_note(void) { size_t __nbytes; undefined4 *puVar1; void *__buf; ssize_t sVar2; uint local_24; local_24 = 0; while( true ) { if (9 < local_24) { puts("Notebook full"); return; } if (*(long *)(notes + (long)(int)local_24 * 8) == 0) break; local_24 = local_24 + 1; } printf("Size: "); __nbytes = readint(); puVar1 = (undefined4 *)malloc(__nbytes + 0x10..

    [pwnable.xyz] executioner v2 삽질

    🧡 Differences from v1 이번에는 POW에 사용하는 값이 0이면 안된다. 🧡 waste of time 🙄 문제를 풀고 다른 분들의 풀이를 봤는데 0x80000000과 짝수를 곱하면 0이 된다는 사실을 이용하여 다들 sleep(0)으로 우회하는 방법을 사용하셨더라.. 나는 조금 다른 방법으로 풀었는데 1000000번 연산을 하여 곱한 값들중 가장 낮은 값을 선택하는 방법으로 풀이를 진행하였다. 그래도.. 문제 없이 풀 수 있었다 :D

    [pwnable.xyz] executioner trick(?)

    🧡 executioner 문제 소개 int __cdecl main(int argc, const char **argv, const char **envp) { _QWORD *v4; // rax int i; // [rsp+0h] [rbp-20h] int fd; // [rsp+4h] [rbp-1Ch] setup(); solve_pow(); puts("Shellcode executioner"); fd = open("/dev/urandom", 0); if ( fd != -1 ) { read(fd, key, 0x7FuLL); close(fd); printf("Input: ", key); read(0, inpt, 0x7FuLL); for ( i = 0; i < strlen(inpt); ++i ) inpt[i] ^= k..

    [pwnable.xyz] Free spirit trick 소개

    🧡 Free spirit trick 소개 Free spirit을 풀다가 xmm0 레지스터 관련 재미있는 기법을 알게 된 것 같아서 소개를 해보려고 한다. 🧡 Floating-point instructions 먼저 xmm 종류 레지스터는 SIMD 연산을 할 때 사용하는 레지스터 이다. SSE Instruction에는 다음과 같은 종류가 있다. 여기서 문제 사용되는 Instruction은 movdqu이다. movdqu는 Move Unaligned Double Quadword 인데 Floating-Point 연산시 사용되는 어셈이다. 이 instruction의 특징을 살펴보자. 🧡 xmm register 사실 트릭 자체는 간단하다. 이렇게 [rsp+0x10] 위치에 'A' 8개, 'B' 8개가 들어가 있다. ..

    [pwnable.xyz] 목표

    Do not share solutions or flags publicly. 라는 rule에 따라 write-up은 공개하지 않습니다. 목표는 All-Clear 입니다.

    [HackCTF] wishlist (500p) 풀이 및 알게 된 점

    풀이 canary는 없고 Partial RELRO만 걸려있다. (stripped binary) input 함수에서 값을 입력받고 add_wish, view_wish, delete_wish 함수를 실행한다. input 함수에서는 BOF가 발생한다. buf는 0x10칸이지만 0x20칸을 입력받으므로 SFP와 RET를 덮을 수 있다. 새로 알게 된 기법 - Stack Pivoting Stack Pivoting은 SFP와 RET를 덮을 수 있을 때 사용할 수 있는 공격 기법이다. Stack Pivoting은 크게 2단계로 나뉜다. stage #1 - RBP Control 보통 read 함수와 같은 입력 함수는 RBP를 기준으로 입력을 받는다. BOF에서 SFP를 임의 주소로 덮고 RET를 입력 함수의 인자가 세..