
Webmin 1.890~1.920 버전의 간단한 C 기반 취약점
소개:
Webmin Exploit은 Webmin 서비스에 대한 표적형 익스플로잇으로, 이전 버전의 Webmin에서 악용될 수 있습니다. 이 익스플로잇은 다양한 기법을 사용하여 악성 코드를 실행하고 대상 시스템에 대한 무단 액세스를 획득합니다.
여기에는 다음이 포함됩니다:
C와 어셈블리 코드를 모두 사용하여 대상 시스템에서 명령을 실행합니다.
역디버깅(anti-debugging), XOR 복호화, execve 및 prctl과 같은 시스템 콜을 활용하여 리버스 셸을 생성합니다.
기능: 역디버깅: ptrace 시스템 콜을 사용하여 익스플로잇의 디버깅을 방지합니다.
XOR 복호화: kthreadd 및 /bin/sh와 같은 암호화된 문자열을 XOR 암호화를 사용하여 메모리에서 복호화합니다.
prctl 시스템 콜: 프로세스 이름을 kthreadd로 변경하여 프로세스 목록에서 익스플로잇을 숨깁니다.
execve 시스템 콜: 대상 시스템에서 /bin/sh 리버스 셸을 실행하여 전체 시스템 액세스 권한을 얻습니다.
C와 어셈블리의 결합: 이 익스플로잇은 C의 유연성과 맞춤형 시스템 콜을 위한 어셈블리 언어의 강력함을 결합합니다.
요구 사항: 운영 체제: Linux 또는 모든 Unix 기반 배포판.
필요한 라이브러리:
클라이언트와 서버 간의 연결을 설정하기 위한 libcurl.
익스플로잇 컴파일을 위한 GCC.
C에서 curl 라이브러리를 로드하기 위한 -lcurl 라이브러리.
사용 방법: 환경 설정: execve와 같은 일부 작업은 상승된 권한이 필요하므로 루트 권한이 있는지 확인하세요.
필요한 라이브러리를 설치합니다:
sudo apt-get install libcurl4-openssl-dev
익스플로잇 컴파일: webmin_exploit.c 파일을 머신에 다운로드합니다.
PIE(Position Independent Executable)를 비활성화하려면 -no-pie 옵션을 사용하여 GCC로 익스플로잇 코드를 컴파일합니다:
gcc -no-pie webmin_exploit.c -o webExploit -lcurl
참고: PIE 관련 문제가 발생하면 위와 같이 -no-pie를 사용해야 합니다.
익스플로잇 실행: 익스플로잇 설정 구성: 코드에서 대상 URL, LHOST(로컬 호스트) 및 LPORT(로컬 포트)를 필요에 따라 수정합니다.
익스플로잇 실행: 컴파일 후 대상 머신에서 익스플로잇을 실행합니다:
./webExploit 리버스 셸 수신:
익스플로잇이 성공적으로 실행되면 LHOST 및 LPORT(예: 192.168.0.174:4444)로 리버스 셸 연결을 설정해야 합니다.
Netcat 또는 유사한 도구를 사용하여 지정된 포트에서 수신 대기 중인지 확인하세요:
nc -lvnp 4444
기술 분석: 코드의 주요 명령어: 역디버깅: ptrace 시스템 콜을 사용하여 gdb와 같은 도구가 익스플로잇을 디버깅하지 못하도록 합니다. 이로 인해 분석가가 익스플로잇을 리버스 엔지니어링하기가 더 어려워집니다.
XOR 복호화: kthreadd 및 /bin/sh 문자열은 키 0x41(ASCII 'A')로 바이너리에서 XOR 암호화됩니다. 이 문자열은 런타임에 메모리에서 복호화됩니다.
시스템 콜:
prctl(PR_SET_NAME, "kthreadd"): 프로세스 이름을 kthreadd로 변경하여 익스플로잇이 탐지를 피하도록 돕습니다.
execve("/bin/sh"): /bin/sh로 리버스 셸을 실행하여 공격자에게 시스템에 대한 전체 액세스 권한을 부여합니다.
핵심 명령어: mov: 레지스터에 값을 로드합니다.
xor: 데이터에 대해 XOR 연산을 수행합니다.
syscall: 셸 생성 및 프로세스 이름 변경을 위해 execve 및 prctl과 같은 시스템 콜을 실행합니다.
lea: 주소를 레지스터에 로드합니다.
문제 해결: 컴파일 중 문제가 발생하면 PIE(Position Independent Executable)를 비활성화하기 위해 -no-pie 플래그를 사용하고 있는지 다시 확인하세요.
문제가 지속되면 개발 환경에 필요한 라이브러리가 최신 상태인지 확인하세요.
경고: 이 익스플로잇은 테스트 환경에서만 사용하세요. 라이브 시스템이나 테스트할 명시적 권한이 없는 시스템에서 이 익스플로잇을 실행하지 마세요.
리버스 셸이 성공적으로 연결될 수 있도록 필요한 경우 대상 머신의 방화벽을 비활성화하세요.
Netcat 또는 유사한 도구를 사용하여 포트에서 수신 대기 중인지 확인하여 리버스 셸 연결을 포착하세요.