Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
OffensiveRust — 레드 팀 작전을 위한 Rust 무기화. | Kitploit
도구/GitHubGitHub/trickster0/offensiverust
Privilege EscalationExploitationIDS/IPS EvasionReverse EngineeringShellcodePost-ExploitationMalware AnalysisCommand and ControlLearning & EducationRed TeamingPayload DevelopmentBinary Exploitation
3.0k343213년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
GitHubtrickster0/offensiverust

OffensiveRust

레드 팀 작전을 위한 Rust 무기화.

저장소 보기

OffensiveRust

OffensiveRust

임플란트 개발 및 일반적인 공격 작업을 위해 Rust를 무기화하는 실험입니다.

목차

  • OffensiveRust
    • 왜 Rust인가?
    • 이 저장소의 예제
    • 이 저장소의 예제 컴파일하기
    • 이 저장소의 예제 컴파일하기
    • 크로스 컴파일
    • 실행 파일 크기 최적화
    • 내가 빠지기 쉬웠던 함정
    • 흥미로운 Rust 라이브러리
    • Ops
    • Rust로 만든 다른 프로젝트
    • 도움이 될 수 있는 Rust 프로젝트

왜 Rust인가?

  • C/C++ 같은 언어보다 빠릅니다.
  • 다목적 언어이며 훌륭한 커뮤니티를 보유하고 있습니다.
  • Cargo라는 놀라운 내장 의존성 빌드 관리 도구가 있습니다.
  • LLVM 기반이므로 정적 AV 탐지를 우회하는 데 매우 좋은 후보입니다.
  • *nix/MacOS에서 Windows로 크로스 컴파일하는 것이 매우 쉽습니다. mingw 툴체인만 설치하면 되지만, 특정 라이브러리는 다른 OS에서 성공적으로 컴파일되지 않을 수 있습니다.

이 저장소의 예제

이 저장소의 예제 컴파일하기

이 저장소는 바이너리를 제공하지 않습니다. 직접 컴파일해야 합니다.

Rust 설치
간단히 바이너리를 다운로드하여 설치하세요.

이 저장소는 Windows 10에서 컴파일되었으므로 Windows 10을 사용하는 것이 좋습니다. 언급한 대로 OpenSSL 바이너리는 OpenSSL과 perl 설치가 필요한 의존성 문제가 있습니다. TCP SSL 클라이언트/서버의 경우, 실행할 호스트의 의존성 때문에 정적 빌드를 권장합니다. 프로젝트를 생성하려면 다음을 실행하세요:
cargo new <name> 그러면 다음과 같은 구조의 프로젝트 폴더가 자동으로 생성됩니다:```bash
project ├── Cargo.toml └── src └── main.rs

root@kitploit:~
Cargo.toml은 의존성과 컴파일 구성을 포함하는 파일입니다.
main.rs는 잠재적인 라이브러리 디렉토리와 함께 컴파일될 메인 파일입니다.

프로젝트를 컴파일하려면 프로젝트 디렉토리로 이동하여 다음을 실행하십시오:  
`cargo build`

이것은 기본 도구 체인을 사용합니다.
최종 "릴리스" 버전을 빌드하려면 다음을 실행하십시오:  
`cargo build --release`

정적 바이너리의 경우, 빌드 명령 전에 터미널에서 다음을 실행하십시오:  
`"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"`  
`set RUSTFLAGS=-C target-feature=+crt-static`

코드가 작성된 방식대로 읽기 어렵다면,  
프로젝트 디렉토리 내에서 아래 명령을 사용하여 더 나은 방식으로 포맷할 수도 있습니다.  
`cargo fmt`

일부 예제는 최신 기능을 갖춘 Rust의 nightly 빌드가 필요하여 컴파일되지 않고 오류가 발생할 수 있습니다.  
설치하려면 다음을 실행하십시오:  
`rustup default nightly`



의존성 또는 [Crates](https://crates.io/)라고 불리는 것들을 찾을 수 있는 가장 쉬운 장소입니다.

## 크로스 컴파일

크로스 컴파일을 하려면 [여기](https://rust-lang.github.io/rustup/cross-compilation.html)의 지침을 따라야 합니다.
다른 도구 체인을 설치하면 아래 명령으로 크로스 컴파일할 수 있습니다.  
`cargo build --target <toolchain>`  

시스템에 설치된 도구 체인을 확인하려면 다음을 실행하십시오:  
`rustup toolchain list`  

시스템에 설치할 수 있는 모든 도구 체인을 확인하려면 다음을 실행하십시오:  
`rustup target list`  

새로운 도구 체인을 설치하려면 다음을 실행하십시오:  
`rustup target add <toolchain_name>`  


## 실행 파일 크기 최적화

이 [리포지토리](https://github.com/johnthagen/min-sized-rust)에는 파일 크기를 줄이기 위한 많은 구성 옵션과 아이디어가 포함되어 있습니다.
정적 바이너리는 일반적으로 상당히 큽니다.

## 제가 빠졌던 함정들

\0 바이트에 주의하십시오. 메모리의 문자열에 대해 이를 잊지 마십시오. 많은 시간을 소비했지만 windbg가 항상 해결하는 데 도움이 되었습니다.


## 흥미로운 Rust 라이브러리

- WINAPI  
- [WINAPI2](https://github.com/MauriceKayser/rs-winapi2)  
- Windows - Microsoft의 공식 라이브러리로, 저는 많이 사용해보지 못했습니다.

## OPSEC

- Rust가 좋은 장점을 가지고 있음에도 불구하고, 익숙해지기가 상당히 어렵고 직관적이지 않습니다.  
- LLVM으로 인해 셸코드 생성도 또 다른 문제입니다. 이 문제를 해결할 몇 가지 방법을 찾았습니다.  
[Donut](https://github.com/TheWover/donut)은 때때로 작동하는 셸코드를 생성하지만, 프로젝트가 어떻게 만들어졌는지에 따라 작동하지 않을 수도 있습니다.  
일반적으로 셸코드 생성을 위해 만들어진 도구는 모든 코드를 .text 세그먼트에 호스팅하도록 제작되어야 하며,  
이는 이 놀라운 [리포지토리](https://github.com/b1tg/rust-windows-shellcode)로 이어집니다.  
이 프로젝트에는 성공적인 셸코드 생성을 위해 코드를 구조화하는 방법을 보여주는 셸코드 샘플이 있습니다.  
또한 이 프로젝트에는 바이너리의 .text 세그먼트를 가져와 일부 패치를 실행한 후 셸코드를 덤프하는 셸코드 생성기도 있습니다.  
이 프로젝트는 특정 위치에서 바이너리를 가져오므로, 바이너리 경로를 인수로 받는 포크를 만들었습니다 [여기](https://github.com/trickster0/rust-windows-shellcode-custom).  
- 모든 디버그 심볼을 제거하더라도 Rust는 여전히 바이너리에 홈 디렉토리 참조를 유지할 수 있습니다. 이를 제거하기 위해 찾은 유일한 방법은 다음 플래그를 전달하는 것입니다: `--remap-path-prefix {홈 디렉토리}={임의 식별자}`. bash 변수를 사용하여 홈 디렉토리를 가져오고 무작위 자리 표시자를 생성할 수 있습니다: `--remap-path-prefix "$HOME"="$RANDOM"`. ([Yamakadi](https://github.com/yamakadi) 제공)
- 위 사항에 대해 홈 디렉토리 정보를 제거하는 또 다른 방법은 Cargo.toml 상단에 다음을 추가하는 것입니다:  
`cargo-features = ["strip"]` .  
Rust는 기본적으로 바이너리에 많은 것을 문자열로 남겨두기 때문에, 저는 주로 이 [cargo.toml](../master/cargo.toml)을 사용하여 이를 방지하고 크기도 줄입니다.  
빌드 명령은 다음과 같습니다:  
`cargo build --release -Z build-std=std,panic_abort -Z build-std-features=panic_immediate_abort --target x86_64-pc-windows-msvc`
- [Yamakadi]는 또한 가져온 라이브러리에 따라 스트리핑이 홈 디렉토리를 숨기는 데 항상 일관적이지 않다고 지적했습니다. 따라서 그의 경로 재매핑 솔루션과 위의 cargo를 조합하여 사용하는 것이 가장 좋습니다. 잠재적으로 제대로 스트립되지 않은 문자열이 있는지, 작업에 실행하기 전에 바이너리를 확인하고 주의하십시오.

## Rust로 만든 다른 프로젝트들

- [UDPlant](https://github.com/trickster0/UDPlant) - 기본적으로 UDP 리버스 셸  
- [EDR Detector](https://github.com/trickster0/EDR_Detector) - 설치된 .sys 파일에 따라 시스템의 EDR을 감지합니다.  
- [Lenum](https://github.com/trickster0/Lenum) - 간단한 유닉스 열거 도구

## 도움이 될 수 있는 Rust 프로젝트

- [houdini](https://github.com/yamakadi/houdini) - 실행 파일이 자체 삭제되도록 도와줍니다.
도구 다운로드
파일설명
Allocate_With_Syscallsntapi 라이브러리를 사용하여 NTDLL 함수를 직접 호출합니다.
Create_DLLDLL을 만들고 메시지 상자를 띄웁니다. Rust가 이를 완전히 지원하지는 않으므로, Rust DLL에는 main 함수가 없어 약간 문제가 생길 수 있습니다.
DeviceIoControl드라이버 핸들을 열고 DeviceIoControl을 실행합니다.
EnableDebugPrivileges현재 프로세스에서 SeDebugPrivilege를 활성화합니다.
Shellcode_Local_inject포인터를 캐스팅하여 로컬 프로세스에서 직접 셸코드를 실행합니다.
Execute_With_CMDRust를 통해 명령어를 전달하여 cmd를 실행합니다.
ImportedFunctionCalldbghelp에서 minidump를 가져와 실행합니다.
Kernel_Driver_Exploit간단한 버퍼 오버플로우를 위한 커널 드라이버 익스플로잇입니다.
Named_Pipe_Client명명된 파이프 클라이언트입니다.
Named_Pipe_Server명명된 파이프 서버입니다.
PEB_WalkWindows API를 동적으로 해석하고 호출합니다.
Process_Injection_CreateThreadCreateThread로 실행 중인 프로세스에 프로세스 인젝션을 수행합니다.
Process_Injection_CreateRemoteThreadCreateRemoteThread로 원격 프로세스에 프로세스 인젝션을 수행합니다.
Process_Injection_Self_EnumSystemGeoIDEnumSystemsGeoID API 호출을 사용하여 셸코드를 실행하는 셀프 인젝터입니다.
Unhooking후킹 해제 호출입니다.
asm_syscall어셈블리를 통해 PEB 주소를 획득합니다.
base64_system_enumBase64 인코딩/디코딩 문자열입니다.
http-https-requests인증서 검사를 무시하고 GET/POST를 위한 HTTP/S 요청입니다.
patch_etwETW 패치입니다.
ppid_spoof생성된 프로세스의 부모 프로세스를 스푸핑합니다.
tcp_ssl_client인증서 검사를 무시하는 SSL을 사용한 TCP 클라이언트입니다. (컴파일을 위해 openssl과 perl 설치 필요)
tcp_ssl_server포트 매개변수가 있는 TCP 서버입니다. (컴파일을 위해 openssl과 perl 설치 필요)
wmi_execute호스트의 AV/EDR을 얻기 위해 WMI 쿼리를 실행합니다.
Windows.h+ Bindings이 파일은 Windows.h 구조체와 Microsoft에서 공식적으로 문서화되지 않은 완전한 맞춤형 LDR, PEB 등을 포함합니다. 파일 상단에 include!("../bindings.rs");를 추가하십시오.
UUID_Shellcode_ExecutionUUID 배열에서 힙 공간으로 셸코드를 심고 EnumSystemLocalesA 콜백을 사용하여 셸코드를 실행합니다.
AMSI Bypass로컬 프로세스에서 AMSI 우회
Injection_AES_LoaderAES 복호화와 함께 NtTestAlert 인젝션
Litcrypt_String_EncryptionLitcrypt 크레이트를 사용하여 리터럴 문자열을 저장 및 메모리에서 암호화하여 정적 AV를 차단합니다.
Api Hookingdetour 라이브러리를 사용한 API 후킹
memfd_creatememfd_create 기법을 사용하여 메모리에서 페이로드 실행 (Linux용)
RC4_EncryptionRC4 복호화된 셸코드
Steal Token프로세스에서 토큰 탈취
Keyboard HookingSetWindowsHookEx로 키보드 후킹을 통한 키로깅
memN0ps arsenal: shellcode_runner_classic-rsntapi를 사용한 클래식 셸코드 실행기/인젝터
memN0ps arsenal: dll_injector_classic-rswindows-sys를 사용한 클래식 DLL 인젝션
memN0ps arsenal: module_stomping-rswindows-sys를 사용한 모듈 스톰핑 / 모듈 오버로딩 / DLL 할로잉
memN0ps arsenal: obfuscate_shellcode-rs간단한 셸코드 XOR 및 AES 난독화 도구
memN0ps arsenal: process_hollowing-rsntapi를 사용한 프로세스 할로잉
memN0ps arsenal: rdi-rswindows-sys를 사용한 리플렉티브 DLL 인젝션
memN0ps: eagle-rsRusty Rootkit: winapi 및 ntapi를 사용한 Red Teamer용 Windows 커널 드라이버 (Rust)
memN0ps: psyscalls-rswinapi를 사용한 Rusty 병렬 시스템 콜 라이브러리
memN0ps: mmapper-rswinapi를 사용한 Rusty 수동 매퍼
memN0ps: srdi-rswindows-sys를 사용한 Rusty 셸코드 리플렉티브 DLL 인젝션
memN0ps: mordor-rs - freshycalls_syswhisperswindows-sys를 사용한 Rusty FreshyCalls / SysWhispers1 / SysWhispers2 / SysWhispers3 라이브러리
memN0ps: mordor-rs - hells_halos_tartarus_gatewindows-sys를 사용한 Rusty Hell's Gate / Halo's Gate / Tartarus' Gate 라이브러리
memN0ps: pemadness-rswindows-sys를 사용한 Rusty Portable Executable 파싱 라이브러리 (PE 파싱 라이브러리)
memN0ps: mimiRust@ThottySploit가 Rust로 만든 Mimikatz. 원저자가 GitHub 계정을 삭제하여 커뮤니티 사용을 위해 업로드되었습니다.
memN0ps and trickster0: ekko-rsRusty Ekko - windows-sys를 사용한 Rust의 Sleep 난독화.