일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- csaw
- rev-basic-3
- 해킹
- 해킹문제
- 웹해킹
- csaw 2018
- dreamhack
- webhacking.kr문제풀이
- 리버싱
- web
- 파이썬
- rev-basic-4
- reversing
- 장고
- 백준
- Django
- vscode
- jango
- 코로나바이러스
- rev-basic-6
- 모세포
- 바이러스
- 취약점점검
- 코로나
- 파이썬웹
- AndroidOS
- djangovscode
- basic4
- 해커
- 장고vscode
- Today
- Total
목록Security/reverse engineering (11)
Kilkat

365일을 코드 패치 하여 짧은 시간안에 Flag를 획득해야 하는 것으로 예상됨 DIE를 사용하여 파일을 확인해보면, ELF 64비트 바이너리인 것을 확인할 수 있음 ghidra를 통해 디컴파일 하면 entry에 FUN_004012b 함수가 존재하는 것을 확인할 수 있음 FUN_004012b 함수로 진입하면 문제 해결을 위한 핵심 로직이 존재하고, 첫 if문 분기 위의 FUN_004010a0이 존재함 FUN_004012b 함수를 확인해보면, sleep에 파라미터인 0xe10 값을 넣고 있는 것을 확인할 수 있고, 0xe10 == 3600 이므로 1시간을 의미함따라서 해당 값을 0으로 변경하여 패치하면 짧은 시간안에 Flag를 출력할 수 있을 것으로 예상됨 성공!

문제 설명을 확인해보니 특정 조건에 맞춰서 DLL을 로드하면 Flag를 획득할 수 있을 것으로 예상됨 첨부된 dll을 확인해보면 64비트 C++로 짜여진 DLL인 것을 확인할 수 있음 FUN_1800011a0에서 Call 되고 있는 function들을 확인해보면 GetModuleFileNameA, PathFindFileNameA, strncmp, MessageBoxA와 같은 Function들을 호출하고 있는 것을 확인할 수 있음strncmp의 경우 문자열을 비교하는 함수일테니 해당 함수를 중점으로 확인해보면 될 것 같음 GetModuleFileNameA를 사용하여 호출된 프로세스의 Full Path를 반환하며, 해당 값을 PathFindFileNameA 함수를 사용하여 local_2d8 변수에 저장하는 ..

문제 설명을 확인해보면 6자리의 숫자로 이루어진 보안 메일을 해결하면 Flag를 획득할 수 있을 것으로 예상됨 secure-mail.html 브라우저로 열어서 확인해보면 최대 6자리의 비밀번호를 검증하는 로직으로 구성된 것을 확인할 수 있음 vscode로 secure-mail.html 열어서 코드를 확인해보면 onclick에 존재하는 _0x9a220 function이 존재하는데, 내용은 난독화 되어 있어서 확인이 힘듦따라서 6자리 숫자로 이루어진 비밀번호 조합을 brute force하여 Flag를 획득하는 방법으로 진행함 (function bruteForceBirthdayPassword() { let foundPassword = false; const startYear = 1990; const en..

해결과정main 함수를 디컴파일하면 위와 같음핵심이 되는 if문의 sub_140001000을 디컴파일하여 살펴보면 아래와 같음 for문을 0x12(18)번 수행하며, if문에서 byte_140003020[*(unsigned __int8 *)(a1+i)] != byte_140003000[ i ] 두 값이 같지 않다면 0을 반환하고 같다면 1을 반환하는 형식으로 구성되어 있음 byte_140003020의 값이 byte_140003000에 몇번째에 존재하는지 뽑아서 해당 10진수 값을 ASCII로 변환하면 문제 해결이 가능해 보임 해결arr1 = [0x00, 0x4D, 0x51, 0x50, 0xEF, 0xFB, 0xC3, 0xCF, 0x92, 0x45, 0x4D, 0xCF, 0xF5, 0x04, 0x40, 0..

해결과정ida에서 main 함수를 f5를 눌러 decompile을 수행함 if 구문을 통해서 sub_140001000 함수를 통해서 값을 비교하고 있음 해당 함수를 확인해보면 16 * (a1 + i)의 경우 a * 2^n == a > 4 로 변경이 가능함(a1 + i) -> byte_14003000[ i ]에서 값을 가져와서 (a1 + i) > 4 연산 후 나오는 데이터를 ASCII로 변환해주면 될것으로 생각됨 풀이arr = [0x24, 0x27, 0x13, 0xC6, 0xC6, 0x13, 0x16, 0xE6, 0x47, 0xF5, 0x26, 0x96, 0x47, 0xF5, 0x46, 0x27, 0x13, 0x26, 0x26, 0xC6, 0x56, 0xF5, 0xC3, 0xC3, 0xF5, 0xE3, 0..

ida로 f5를 눌러 디컴파일을 수행하면 다음과 같이 main function의 코드를 확인할 수 있음 프로그램 동작 로직을 분석하면 다음과 같음1. 사용자 입력값 대기2. 사용자 입력값 비교3. Correct 출력 or Wrong 출력 if구문에서 사용자 입력값과 비교를 하는 function(sub_7FF62D5D1000)을 따라가보면 다음과 같음사용자 입력값과 XOR연산을 통해 값을 byte_7FF62D5D3000[i] 값과 비교하고 있음 byte_7FF62D5D3000을 확인해보면 49h ~ dup(0)까지 데이터가 포함되어 있는 것을 확인 가능함 XOR의 특성인 a ^(xor) b = c, c ^(xor) b = a 해당 내용이 성립하는 것을 활용하여 복호화 시킬 수 있음(byte_7FF62D5D..

프로그램 실행시 사용자 입력을 기다리고, 입력값이 틀리면 system date가 출력됨 ghidra를 사용하여 decompile로 main을 확인해보면 아래와 같은 로직으로 구성되어 있는것을 확인할 수 있음- 성공시 쉘 획득 or 실패시 date 출력- 가장 핵심이 되는 부분은 사용자 입력값을 받는 0x18(dec=24) 값과, if 구문에서 비교 대상이 되는 해당 주소(-0x350c4512)임 if 구문에서 비교 대상이 되는 -0x350c4512 주소를 확인해보면 다음과 같음 최종 목표는 /bin/bash 쉘을 획득하는 것이 목표이기 때문에 입력값 0x18(24) 바이트 중 20바이트를 null 값으로 채운 후 if 구문에서 값 비교가 되는 0xcaf3baee 값을 넣어서 exploit 코드를 구성하면..
#define _GNU_SOURCE#include#includetypedef int(*orig_getchar_ftype)(void);int getchar(){ orig_getchar_ftype orig_getchar; orig_getchar = (orig_getchar_ftype)dlsym(RTLD_NEXT, "getchar"); puts("hooked success!!"); return orig_getchar();} sudo gcc -o hook.so -fPIC --shared hook.c #includeint main(){ getchar(); return 0;} export LD_PRELOAD=/path *절대 경로 https://umbu..
목표: strncmp 취약점을 이용해 flag값을 가져오기 사용 프로그램: vmware 64bit (kali linux 64bit), peda 문제: 공주대학교 영재교육원CTF 문제컴퓨터 환경: kali linux(64bit) 문제풀이 우선 되게 재밌었던 문제였다. 리눅스로 풀어야 하는 리버싱 문제여서 되게 재밌게 풀은것 같다. 우선 문제가 어떻게 작동하는지 알기 위해서 kali linux에 옮겨서 실행을 시켜봅니다.그럼 이렇게 ?????를 출력을 하고 그다음에 Pass code를 입력하는 창이 나오게 됩니다. 우선 Pass code를 모르는 상황이기 때문에 아무값이나 넣어 봤습니다. 그러니 바로 Who are U.라고 너 누구냐 라는 값을 출력하는데... 이제 저 값이 flag로 바뀌게끔 만들어보죠 g..
목표: 시리얼값 찾는 법을 알기2 JNB의 역할을 알기 사용 프로그램: ollydbg110문제: 코드엔진 advance 03.exe컴퓨터 환경: 윈도우10 64bit 우선 프로그램이 어떻게 동작하는지 알기 위해서 프로그램을 실행시켜 봤습니다.실행시켜보니 뭔가 태양권 같은? 사진과 저번 03basic.exe 문제와는 다르게 이번엔 Name칸과 Serial칸이 추가가 되어서 난이도가 한층 올라간걸 느낄수 있었다. 우선 Name엔 CodeEngn을 넣고 Serial에는 아무런 값이나 넣어서 실행시켜 봤습니다.매정한 녀석... 바로 틀렸다는 메세지 박스를 뿜어냅니다...여기서 우리는 advance 03.exe 이라는 이 프로그램이 어떻게 작동하는지 알수 있게 되었습니다. 1. Name과 Serial 입력2. 틀..