Wargame & CTF/선린 고등해커 2회(4)
-
[선린 고등해커 2회 예선] FFFFFMMMMTTT
선린 고등해커 2회 예선 - FFFFFMMMMTTTSummary64bitformat string bugAnalysisint __cdecl __noreturn main(int argc, const char **argv, const char **envp) { char s; // [rsp+0h] [rbp-1A0h] unsigned __int64 v4; // [rsp+198h] [rbp-8h] v4 = __readfsqword(0x28u); init(); while ( 1 ) { memset(&s, 0, 0x190uLL); read(0, &s, 0x190uLL); printf(&s, &s); } }printf에서 포멧스트링버그가 터진다. %p를 사용해서 read의 주소를 가지고 올 수 있다.Exploitfr..
2020.02.29 -
[선린 고등해커 2회 본선] simple
선린 고등해커 2회 본선 simpleSummary64bitsyscall1 byte overwriteAnalysisint __cdecl main(int argc, const char **argv, const char **envp) { char buf; // [rsp+0h] [rbp-30h] alarm(0x3Cu); read(0, &buf, 0x400uLL); return 0; }이 문제만 풀었다면 상받는거라서 너무 아쉬웠다 ㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜ alarm에 syscall이 들어가는것을 몰라서 못풀었다...read로 buf에 입력을 받아서 오버플로우가 생긴다.진짜 쓸만한 함수가 하나도 없다. alarm, read, __libc_csu_init정도? return to csu로 rdi, rsi, rdx에 값을..
2019.12.01 -
[선린 고등해커 2회 예선] PPP
선린 고등해커 2회 예선 PPPSummaryc++ropAnalysismainint __cdecl main(int argc, const char **argv, const char **envp) { __int64 v3; // rax char v5; // [rsp+20h] [rbp-30h] int v6; // [rsp+4Ch] [rbp-4h] v6 = 0; setvbuf(stdout, 0LL, 2, 0LL); setvbuf(stdin, 0LL, 2, 0LL); v3 = std::operator
2019.11.19 -
[선린 고등해커 2회 예선] easy_bof
선린 고등해커 2회 예선 easy_bofSummary64bitstack canaryAnalysismain__int64 __fastcall main(__int64 a1, char **a2, char **a3) { char v4; // [rsp+0h] [rbp-110h] __int64 v5; // [rsp+108h] [rbp-8h] sub_C33(a1, a2, a3); sub_B00(&v5); puts("This is warming up! :)"); puts("So ezpzezpz ~~~~~\n"); do print(); while ( sub_D67((__int64)&v4) ); return 0LL; }sub_D67int __fastcall sub_D67(__int64 a1) { int result; /..
2019.11.13