일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Rookiss
- pwn
- anti
- shellcraft
- Toddler's Bottle
- Bottle
- string
- BOF
- Bug
- Read
- format
- TUCTF
- shellcode
- ASM
- pwnable
- FSB
- CTF
- picoCTF
- toddler
- writeup
- rev
- CANARY
- PMA
- Reverse
- pwnable.kr
- pico
- 2018
- reversing
- practicalmalwareanalysis
- Leak
- Today
- Total
목록pwn (22)
제리의 블로그
are you root? - Points: 550 - (Solves: 253) DescriptionCan you get root access through this service and get the flag? Connect with nc 2018shell2.picoctf.com 41208. Source.HintIf only the program used calloc to zero out the memory..auth.c#include #include #include #include typedef enum auth_level { ANONYMOUS = 1, GUEST = 2, USER = 3, ADMIN = 4, ROOT = 5 } auth_level_t; struct user { char *name; a..
SECCON 2018 qualsClassic Pwn121 pt 197 Solvers 요약canary 가 없는 BOF 문제였으며fastcall 방식의 함수 호출규약을 따르기 때문에 gadget 을 모은 다음libc 주소를 leak 하고one_gadget 을 사용하여 쉘을 획득한다. leak 과 쉘 획득을 위한 공격을 동시에 하기 위해서는main 함수로 return 하도록chaining 을 통해 loop 를 만들어 준다. Description Host: classic.pwn.seccon.jp Port: 17354 classic libc-2.23.so $ sha1sum * aa9e979fd5c597526ef30c003bffee474b314e22 classic 56d992a0342a67a887b8dcaae381..
echo back - Points: 500 - (Solves: 206) 요약본 Writeup 은 포맷 스트링(FSB)를 다룹니다. 문제에서 바이너리와 접속정보가 주어집니다.소스 코드가 없기 때문에 바이너리를 분석해야 합니다. 바이너리엔 FSB 취약점이 있었고system() 함수가 사용되고 있었습니다. 사용자 정의 함수 vuln() 함수는read(0, buf, 0x7f);printf(buf);puts("\n");위와 같은 코드로 구성되어 있었습니다. FSB 를 이용하여GOT Overwrite 를 합니다.puts@GOT 를 0x080485E1 로 덮어서 loop 를 만들어주고printf@GOT 를 system@plt 로 만들어준 다음 변수 buf 에 "/bin/sh" 를 넣으면printf 함수가 system..
authenticate - Points: 350 - (Solves: 462) 요약본 Writeup 은 Format String Bug (FSB) 를 다룹니다. Description 을 보면바이너리와 소스코드를 제공합니다. 취약점은 소스코드에서 55번째 줄에서FSB 취약점이 있고플래그는 23번째 줄의 read_flag() 함수에서 출력해주고 있다. 플래그를 보기 위해서는0(거짓)으로 초기화되어있는 전역변수 authenticated 를1(참)로 변조해야만 합니다. Description Can you authenticate to this service and get the flag? Connect with nc 2018shell2.picoctf.com 52918. Source. Source #include #..
echooo - Points: 300 - (Solves: 816)요약본 Writeup 은 Format String Bug (FSB) 를 다룹니다. Description 을 보면소스코드와 바이너리가 제공됩니다. 소스코드의 37번째 줄에서 FSB 취약점이 있습니다.printf 에 넘겨지는 인자들이 스택을 통해 들어간다는 것을 통해스택의 값을 leak 할 수 있는 취약점입니다. 지역변수 flag 를 알아내야 하는데그 주소를 가리키고 있는 flag_ptr 가 존재한다는 것을 소스코드에서 알 수 있습니다.디버깅을 통해 몇번째에 있는지 확인해보니8번째라는 것을 알아냈습니다. printf 에 8번째 값을 넘기면서 문자열 출력하도록 하면 플래그가 나옵니다. Description This program prints an..
got-shell? - Points: 350 - (Solves: 430)요약 본 문제는 GOT Overwrite 문제입니다. 문제 서버에 접속해보면 address 와 value 를 입력받습니다.auth.c 소스코드를 확인해보니 16진수 값으로 입력받은 두 값을 이용해서특정 위치의 값을 덮어씌울 수 있었습니다. GOT Overwrite 가 일어날 조건도 충족하고 있으므로타겟을 puts 로 잡고 win() 함수로 덮어씌우면쉘을 획득하여 플래그를 확인하는 문제였습니다. Description Can you authenticate to this service and get the flag? Connect to it with nc 2018shell2.picoctf.com 54664. Source Writeup # ..
요약4바이트 길이의 canary 값이 고정되어 있기 때문에 1바이트씩 '\x00' 부터 '\xff' 까지 넣어봐서 "stack smash" 가 뜨는지 확인하면 "4xV," 가 canary 임을 알 수 있고 이제 RET에 flag를 출력해주는 함수 elf.sym.win 로 덮어씌워주면 해결된다. from pwn import * import string import sys #context.log_level = 'error' e = ELF('./vuln') CANARY = '4xV,' CANARY_LEN = len(CANARY) print(CANARY_LEN) len = 32 + CANARY_LEN + 0x10 + 4 #for c in range(0x100): p = process('./vuln') p.rec..
programSource #include #include #include #include #include #define BUFSIZE 148 #define FLAGSIZE 128 void vuln(char *buf){ gets(buf); puts(buf); } int main(int argc, char **argv){ setvbuf(stdout, NULL, _IONBF, 0); // Set the gid to the effective gid // this prevents /bin/sh from dropping the privileges gid_t gid = getegid(); setresgid(gid, gid, gid); char buf[BUFSIZE]; puts("Enter a string!"); vu..
요약이 문제는 c 언어 라이브러리의 srand, rand 에 대한 문제로seed 값을 알아낼 수 있다면 풀 수 있습니다. 바이너리를 리버싱해보면현재 시간을 이용하여 seed 를 넣고 있다는 것을 알 수 있으므로같은 seed 값을 넣고 난수 생성을 100번 해주면 되는 문제입니다. writeup evenMoreLucky_exploit# nc 167.99.143.206 65032 Hello, there! What is your name? j3rrry I am glad to know you, j3rrry! Server time: 153761 If you guess the next 100 random numbers I shall give you the flag! What number am I thinking o..
요약이 문제는 c 라이브러리의 rand() 함수의 seed 값을 BOF 를 이용하여 덮어씌우고100개의 rand() 값을 맞추는 문제입니다. 입력받은 name 을 strcpy 로 스택영역에 복사하는데입력 길이 제한이 없기 때문에 overflow 하여 seed 값으로 이용되는 지역변수를 덮어씌워줍니다. 그 후부터는 seed 값을 알게된 셈이므로rand() 값을 100번 인증하면 됩니다. writeup lucky_exploit# nc 167.99.143.206 65031 Hello, there! What is your name? j3rrry I am glad to know you, j3rrry! If you guess the next 100 random numbers I shall give you the f..