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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
userland-exec — Userland exec PoC to be used as attack vector technique | Kitploit
도구/GitHubGitHub/hardenedlinux/userland-exec
ExploitationIDS/IPS EvasionPost-ExploitationBinary AnalysisRed Teaming
GitHubhardenedlinux/userland-exec

userland-exec

Userland exec PoC to be used as attack vector technique

저장소 보기
146144개월 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Userland Exec

Userland exec는 현재 주소 공간 내의 기존 프로세스 이미지를 새 이미지로 교체합니다. 시스템 호출 execve의 동작을 모방하지만, 프로세스 이미지를 설명하는 프로세스 구조는 변경되지 않은 채 유지됩니다. 즉, 시스템 유틸리티가 보고하는 프로세스 이름은 이전 프로세스 이름을 유지합니다.

이 기법은 임의 코드 실행을 획득한 후 은닉(stealth)을 달성하는 데 사용할 수 있습니다. 또한 noexec 파티션에 저장된 바이너리를 실행하는 데에도 사용할 수 있습니다.

최초의 userland exec는 grugq가 만들었습니다. 이 저장소는 해당 기법에 대한 포괄적인 블로그 설명을 포함하는 Rapid7 Mettle 라이브러리에서 많은 영감을 받았습니다.

처음에는 이 저장소의 코드 중 상당 부분이 Mettle 라이브러리를 모방했지만, 이후 SELinux 검증을 우회하기 위한 추가적인 복잡성을 포함하도록 확장되었습니다.

SELinux 검증 우회

SELinux에는 execmem 검증이 포함되어 있으며, 이는 다음을 보장합니다:

  • 한 번 쓰기 가능했던 페이지는 실행 가능해질 수 없습니다(즉, mprotect를 사용하여 PROT_WRITE를 PROT_EXEC로 변경하는 것은 허용되지 않습니다).
  • 어떤 페이지도 쓰기 가능하면서 동시에 실행 가능할 수 없습니다(W ^ X 정책).

mprotect 우회

mprotect를 우회하려면 임시 파일을 생성해야 합니다. 이는 memfd_create를 munmap 및 mmap과 결합하여 사용함으로써 달성할 수 있으며, 이를 통해 mprotect 시스템 호출을 완전히 피할 수 있습니다.

W ^ X 우회

elf_debugger.c 예제는 모든 ELF에 실행 가능하면서도 쓰기 가능한 PT_LOAD 영역이 포함되어 있음을 보여줍니다. 이 영역은 실행 중에 프로그램 정보를 로드하는 데 필요합니다. 이 문제를 해결하기 위해 bypass_wx.c 구현이 만들어졌습니다. 이 설계는:

  • 페이지를 실행 가능으로 표시합니다.
  • 이 페이지에 대한 쓰기 시도 시 SIGSEGV 신호를 트리거합니다.
  • 신호를 가로채 페이지 보호를 동적으로 PROT_EXEC에서 PROT_WRITE로 변경합니다.

테스트

빌드 및 사용법

이 섹션에서는 Android 및 x86 머신용 빌드 방법을 설명합니다. 계속하기 전에 libelf가 설치되어 있는지 확인하십시오.

x86

빌드

root@kitploit:~
mkdir build && cd build
cmake ..
make

사용법

root@kitploit:~
desktop % strace ./uexec hello others args here 2>&1 | grep exec
execve("./uexec", ["./uexec", "hello", "others", "args", "here"], 0x7ffc34ec02f0 /* 54 vars */) = 0
desktop % strace bash -c ./hello 2>&1 | grep exec
execve("/usr/bin/bash", ["bash", "-c", "./hello"], 0x7ffebecc3130 /* 54 vars */) = 0
newfstatat(AT_FDCWD, "/desktop/userland-exec/build", {st_mode=S_IFDIR|0755, st_size=4096, ...}, 0) = 0
newfstatat(AT_FDCWD, "/desktop/userland-exec", {st_mode=S_IFDIR|0755, st_size=4096, ...}, 0) = 0
execve("./hello", ["./hello"], 0x5fb22658e2a0 /* 54 vars */) = 0

디버그 빌드

root@kitploit:~
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
make

Android

빌드

root@kitploit:~
mkdir build && cd build
cmake -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake \
      -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-30 ..
make

사용법

root@kitploit:~
desktop % adb push uexec hello /data/local/tmp
uexec: 1 file pushed, 0 skipped. 113.9 MB/s (22912 bytes in 0.000s)
hello: 1 file pushed, 0 skipped. 184.9 MB/s (6936 bytes in 0.000s)
2 files pushed, 0 skipped. 0.3 MB/s (29848 bytes in 0.090s)

desktop % adb shell
dm3q:/ $ cd /data/local/tmp
dm3q:/data/local/tmp $ chmod +x uexec
dm3q:/data/local/tmp $ ./hello
Hello World
dm3q:/data/local/tmp $ ./uexec hello
Hello World
dm3q:/data/local/tmp $

문제 해결

CentOS에서는 libc 라이브러리가 비정상적인 동작을 보일 수 있습니다. 이 문제를 해결하기 위해 어셈블리로 작성된 간단한 "Hello, World" 프로그램인 hello_nolibc.s가 제공됩니다. 이 예제는 cmake와 함께 libc에 링크하지 않고 프로그램을 빌드하고 실행하는 방법을 보여줍니다.

CMAKE가 4.0 이상인 경우 빌드에 -DCMAKE_POLICY_VERSION_MINIMUM=3.5를 추가할 수 있습니다.

라이선스

이 저장소는 GPL-3.0 라이선스를 사용합니다.

도구 다운로드
OS아키텍처결과
Ubuntu 24.04x86_64성공
Archlinux 6.12.4x86_64성공
CentOSx86_64성공
Raspberry Pi OSarm64성공
S23 Android 14arm64성공