목록CTF (7)
Pwnstar
hack the box에서 sick rop와 상당히 비슷한 문제여서 별 생각 안하고 빨리 풀 수 있었던 것 같다. 어셈블리어로 작성된 바이너리인데, __int64 main() { size_t v0; // rax char buf; // [rsp+0h] [rbp-1F4h] write(::buf, 31uLL); v0 = read(&buf, 800uLL); return write(&buf, v0); } 다행히 보호기법은 하나도 걸려있지 않고, seccomp도 없다. 다만 rax를 설정할 수 있는 가젯이 없어서 write함수의 return값을 이용해서 설정해줘야 한다. 설명할 것은 별로 없고, 처음 입력 때에 뒤에 SROP를 위한 값들을 미리 넣어주고, 두 번째 입력때에 dummy를 15개 넣어주면 srop가 가..
가위바위보 게임인데 요...문제는 쉬웠다. 그래도 라업을 작성하는 이유는 재밌어서...? 카나리가 없는게 참 다행이다. main __int64 __usercall main@(char **a1@, char **a2@, __int64 a3@) { char v3; // ST0F_1 __int64 v5; // [rsp-8h] [rbp-8h] __asm { endbr64 } v5 = a3; printf_("How about a friendly game of Rock-Paper-Scissors? [y/n]: ", a1, a2); v3 = getchar_(); getchar_(); if ( v3 == 'y' ) play_game((__int64)&v5, (__int64)a1); else puts_(); return ..
요즘 주말마다 공부할 겸 한 문제라도 풀어보자라는 마인드로 CTF를 하나씩 참가하고 있는데, 계속 포너블만 조지다보니 그래도 조금씩 풀 수 있는 문제가 늘어나는 것 같다. 일요일에는 보통 데이트를 해서 토요일 하루만 빡세게 푸는데, 이번 씨텦에서 난이도가 높은 문제는 하나도 못풀어서 좀 아쉽다...그래도 5문제 정도 풀었는데, 너무 쉬운 문제나, 기록할만하지 않은 문제는 빼고 라업을 작성해야겠다. 쉬운 난이도 문제 두 개는 다 패스하기로 했다. 너무 쉬웠음; 중간 난이도 문제들이 적당히 어렵고 재밌었는데 sort it 부터 보자. 64비트 바이너리에 보호기법이 전부 걸려있다. 실행을 해 보면 단어들을 알파벳 순서대로 나열하라고 한다. // local variable allocation has failed..
좀 아쉬움이 많이 남는 CTF였다. 건드리면서 거의 다 풀었다고 생각한 문제들이 많았는데 결국 푼거는 이 한문제밖에 없다. 그래도 비교적 빨리 풀어서 기분은 좋았다. 가젯찾기 좀 힘든 문제였음. checksec got overwrite는 가능하고, NX bit만 걸려있다. main int __cdecl main(int argc, const char **argv, const char **envp) { __int128 v4; // [rsp+0h] [rbp-10h] v4 = 0uLL; printf("n = ", argv, envp, 0LL, 0LL); __isoc99_scanf("%d", &v4); if ( (signed int)v4 > 255 ) exit(1); *((_QWORD *)&v4 + 1) = ca..
좀 까다로운 힙 문제였다. 까나리와 NX bit 그리고 Full relro가 걸려있다. malloc_hook이나 free_hook을 덮으면 된다. main void __fastcall __noreturn main(__int64 a1, char **a2, char **a3) { signed int v3; // [rsp+Ch] [rbp-4h] setbuf(stdout, 0LL); setbuf(stdin, 0LL); setbuf(stderr, 0LL); sub_401211(); printf("%s", "To get started, first tell us how big your notebook will be: "); size = input_size(); table = malloc(8 * size); memse..
며칠 전 주말에 진행되었던 csaw ctf에 나왔던 bard's fail이라는 문제를 풀어보면서 라업을 써 보려고 한다. 그 당시에 못풀어서 아쉬움이 좀 남았다. 구조가 조금 복잡하게 되어 있으니 자세하게 분석해 보자. IDA로 분석하며 함수 이름들을 임의로 바꾸어놨다. main함수(0x40107B)__int64 __fastcall main(__int64 a1, char **a2, char **a3) { puts("*** Welcome to the Bards' Fail! ***\n"); puts("Ten bards meet in a tavern."); puts("They form a band."); puts("You wonder if those weapons are real, or just props....
오늘 개최했던 sstf의 playground에서 나온 문제 중 하나인 eat the pie의 라이트업을 작성하려고 한다. 비록 대회가 끝나고 나서 푼 문제이긴 하지만 나름 되게 재밌게 풀어서 라업을 작성해놓고 싶다. 보호기법 32비트인데 모든 보호기법이 다 걸려있다;; pie가 걸려있으니 이게 핵심일듯 하다. 우선 IDA로 디컴파일된 코드를 한번 보자. 메인함수는 별 것 없고, pwnme함수가 핵심이다. IDA void __noreturn pwnme() { int buf[4]; // [esp+4h] [ebp-34h] unsigned int (*v1)(); // [esp+14h] [ebp-24h] unsigned int (*v2)(); // [esp+18h] [ebp-20h] unsigned int (*v..