본문 바로가기

Wargame Write-Up/HackCTF69

(HackCTF) childheap writeup unsigned __int64 Malloc() { int v0; // ebx int v2; // [rsp+0h] [rbp-20h] BYREF int v3; // [rsp+4h] [rbp-1Ch] BYREF unsigned __int64 v4; // [rsp+8h] [rbp-18h] v4 = __readfsqword(0x28u); printf("index: "); __isoc99_scanf("%d", &v2); if ( v2 4 ) exit(1); printf("size: "); __isoc99_scanf("%d", &v3); if ( v3 128 ) exit(1); v0 = v2; *(&ptr + v0) = malloc(v3); if ( !*(&ptr + v2).. 2022. 2. 10.
(HackCTF) j0n9hyun’s secret writeup int __cdecl main_(int argc, const char **argv, const char **envp) { __int64 v3; // rdx int v4; // edx int v5; // ecx int v6; // er8 int v7; // er9 int v9; // [rsp+Ch] [rbp-4h] setvbuf(off_6CA748, 0LL, 2LL, 0LL); setvbuf(off_6CA740, 0LL, 2LL, 0LL); setvbuf(off_6CA738, 0LL, 2LL, 0LL); top_secret = open("top_secret", 'r', v3); printf("input name: "); scanf("%s", &input, v4, v5, v6, v7); v9 = read(t.. 2022. 2. 9.
(HackCTF) babyheap writeup malloc, free, show 3 가지 메뉴가 있는 전형적인 heap chall 이다. chunk 는 순서대로 6개 할당할 수 있다. unsigned __int64 Show() { int v1; // [rsp+4h] [rbp-Ch] BYREF unsigned __int64 v2; // [rsp+8h] [rbp-8h] v2 = __readfsqword(0x28u); printf("index: "); _isoc99_scanf("%d", &v1); puts((&ptr)[v1]); return __readfsqword(0x28u) ^ v2; show() 에서 인덱스를 검사하지 않는다. 사실 어셈으로 보면 있는데, 로직을 이상하게 짜놔서 검사를 안하는 것이나 다름없다. 할당 기회가 6번밖에 없으니, 이건 fa.. 2022. 2. 8.
[HackCTF] (Pwnable) pzshell 풀이 pzshell 위 쉘코드 + 내가입력한 opcode 8byte 를 붙여 xor 부터 실행시켜준다. 필터링하는 키워드는 \x0f\x05 이다. ezshell과 다른 점은, rdx 를 초기화하지 않고, si 에 0xdef1 을 넣어준다는 것 이다. 쉘코드+2 으로 점프하므로, rdx 에는 xor rbp,rbp 의 주소부터 저장되어있다. 그래서, xchg ? 으로 si 와 rdx 를 바꾼 뒤, read syscall 으로 쉘코드를 새로 입력받는다. 이 때. syscall 을 필터링하지 않으므로 자유롭게 사용할 수 있다. 또한 seccomp 설정에서, fork, vfork, clone, creat, ptrace, prctl, execve, execveat 가 필터링되어 있으므로, ORW 를 사용해 문제를 풀어야.. 2021. 10. 6.