CTF/WRITEUP
-
[DarkCON CTF] WarmupCTF/WRITEUP 2021. 2. 25. 21:59
Orignial Writeup github.com/white-l0tus/2021_CTF/blob/main/DarkCON/Warmup/Writeup_KO.md Info 30 solves / 482 points warm up yourself and get the flag! Summary double free tcache poisoning hook overwrite File Arch : x86-64 Library : dynamically linked (libc6_2.27-3ubuntu1.2_amd64) Checksec CANARY : Enabled FORTIRY : Disabled NX : Enabled PIE : Disabled RELRO : Partial Description 전형적인 menu 형식의 문제..
-
[DarkCON CTF] Easy-ROPCTF/WRITEUP 2021. 2. 25. 19:09
Original Writeup github.com/white-l0tus/2021_CTF/blob/main/DarkCON/Easy-ROP/Writeup_KO.md Info 84 solves / 441 points Welcome to the world of pwn!!! This should be a good entry level warmup challenge !! Enjoy getting the shell Summary stack buffer overflow ret2libc ret2syscall File Arch : x86-64 Library : statically linked Checksec CANARY : Enabled FORTIRY : Disabled NX : Enabled PIE : Disabled ..
-
[DiceCTF 2021] babyropCTF/WRITEUP 2021. 2. 6. 12:59
Disassembly 디스어셈블리 undefined8 main(void) { char *s; write(1, "Your name: ", 0xb); gets(&s); return 0; } gets로 인해 스택 버퍼 오버플로우가 발생한다. Return-to-csu RTC를 이용해 gets와 write의 라이브러리 주소를 구하자. 알아낸 주소를 바탕으로 라이브러리 버전을 알아낸 후, system과 binsh 문자열의 주소를 구해 system("/bin/sh")를 호출하면 문제를 해결할 수 있다. Code 더보기 from pwn import * binary = "./babyrop" lib = "./libc6_2.31-0ubuntu9.2_amd64.so" server = "dicec.tf" port = 31924..
-
[0x41414141 CTF] BabyheapCTF/WRITEUP 2021. 2. 3. 01:12
Summary 개요 Unsorted bin attack으로 libc address leak Tcache dup으로 __free_hook에 heap 할당 oneshot gadget으로 hook Overwrite Disassembly 디스어셈블리 undefined8 main(void) { int32_t iVar1; undefined8 uVar2; int64_t in_FS_OFFSET; undefined var_dh; int32_t var_ch; int64_t var_8h; var_8h = *(int64_t *)(in_FS_OFFSET + 0x28); ignore_me_init_buffering(); puts("You can never miss the chance to have a baby heap chall..
-
[0x41414141 CTF] Faking till you're MakingCTF/WRITEUP 2021. 2. 2. 19:42
Disassembly 디스어셈블리 #!/bin/bash `pwd`/PoW if [ $? == 0 ]; then echo "\n" `pwd`/vuln fi main.sh는 PoW 이후 vuln을 실행한다. undefined8 main(void) { void *buf; undefined auStack88 [64]; char *s; void *ptr; setvbuf(_reloc.stdout, 0, 2, 0); printf(0x200c, sh); malloc(1); read(0, &buf, 0x50); ptr = auStack88; free(ptr); s = (char *)malloc(0x30); fgets(s, 0x404, _reloc.stdin); return 0; } vuln은 함수 sh의 주소를 출력하고..
-
[0x41414141 CTF] Moving signalsCTF/WRITEUP 2021. 2. 2. 17:34
Disassembly 디스어셈블리 주어진 바이너리는 짧은 명령어들로 구성되어 있다. 'pop rax; ret'과 'syscall'이 눈에 띈다. "/bin/sh" 문자열이 바이너리 상에 존재한다. Sigreturn Oriented Programming 버퍼 오버플로우가 발생하고 rax를 제어할 수 있으므로 원하는 syscall을 호출할 수 있다. sigreturn을 통해 레지스터의 값을 조작해서 execve("/bin/sh", 0, 0)을 호출하면 문제를 해결할 수 있다. Code 더보기 from pwn import * binary = "./moving-signals" server = "185.172.165.118" port = 2525 # context.log_level = 'debug' context..
-
[0x41414141 CTF] echoCTF/WRITEUP 2021. 2. 2. 17:27
Disassembly 디스어셈블리 main은 echo를 호출하고 exit로 프로세스를 종료한다. void main(void) { echo(); exit(0); } echo는 0x300 바이트 만큼 값을 읽어오고, 이를 출력하는 역할을 한다. void echo(void) { int sz = read(0, [rbp-0x180], 0x300); write(1, [rbp-0x180], sz); } 사용할 만한 라이브러리는 없고, NX가 켜져있으니 레지스터를 조작해 syscall을 통해 공격하는 수밖에 없다. Sigreturn Oriented Programming rax에 원하는 값을 넣기 위해서는 write 함수의 리턴값을 이용할 필요가 있다. 공격은 세 단계로 이루어진다. 스택 버퍼 오버플로우를 이용해 RET..