일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- webhacking.kr문제풀이
- web
- 파이썬웹
- 해커
- 백준
- 코로나
- rev-basic-6
- vscode
- 취약점점검
- 리버싱
- 장고vscode
- 해킹문제
- Django
- 웹해킹
- 모세포
- 해킹
- reversing
- AndroidOS
- djangovscode
- jango
- 바이러스
- csaw
- 코로나바이러스
- rev-basic-4
- dreamhack
- 파이썬
- basic4
- 장고
- csaw 2018
- rev-basic-3
- Today
- Total
목록분류 전체보기 (43)
Kilkat
main.cpp// main.cpp#include #include #include "RWXChecker.h"int main() { // RWX 메모리 영역을 찾고 exploit 실행 find_rwx_memory(); std::cout RWXChecker.cpp// RWXChecker.cpp#include "RWXChecker.h"#include "exploit.h"#include void find_rwx_memory() { SYSTEM_INFO sysInfo; GetSystemInfo(&sysInfo); LPVOID address = sysInfo.lpMinimumApplicationAddress; MEMORY_BASIC_INFORMATION mbi; int ..
function Convert-HexStringToByteArray { param ([string]$hexString) $hexString = $hexString -replace "\\x", "" if ($hexString.Length % 2 -ne 0) { throw "16진수 문자열의 길이가 홀수입니다. 유효한 16진수 문자열이어야 합니다." } $bytes = @() for ($i = 0; $i -lt $hexString.Length; $i += 2) { $hexPair = $hexString.Substring($i, 2) if ($hexPair -notmatch '^[0-9A-Fa-f]{2}$') { ..
function Convert-HexStringToByteArray { param ([string]$hexString) $hexString = $hexString -replace "\\x", "" if ($hexString.Length % 2 -ne 0) { throw "16진수 문자열의 길이가 홀수입니다. 유효한 16진수 문자열이어야 합니다." } $bytes = @() for ($i = 0; $i -lt $hexString.Length; $i += 2) { $hexPair = $hexString.Substring($i, 2) if ($hexPair -notmatch '^[0-9A-Fa-f]{2}$') { ..

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..
import osimport threadingdef attack_file(directory, filename, counter, limit): filepath = os.path.join(directory, filename) malicious_content = "test" while True: if os.path.exists(filepath): try: with open(filepath, "w") as f: f.write(malicious_content) with counter.get_lock(): counter.value += 1 ..

해결과정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..