MySQL File priv to SSRF/RCE

HackTricks 지원하기

이 내용은 https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/의 MySQL/MariaDB/Percona 기술 요약입니다.

SQL 함수에 의한 서버 측 요청 위조 (SSRF)

SQL Out of Band 데이터 유출 탐색에서 LOAD_FILE() 함수는 네트워크 요청을 시작하는 데 일반적으로 사용됩니다. 그러나 이 함수는 작동하는 운영 체제와 데이터베이스의 시작 구성에 의해 제한됩니다.

secure_file_priv 전역 변수가 설정되지 않은 경우 기본값은 /var/lib/mysql-files/로, 빈 문자열("")로 설정되지 않는 한 이 디렉토리에 대한 파일 접근이 제한됩니다. 이 조정은 데이터베이스의 구성 파일이나 시작 매개변수에서 수정이 필요합니다.

secure_file_priv가 비활성화("")되고 필요한 파일과 file_priv 권한이 부여된 경우, 지정된 디렉토리 외부의 파일을 읽을 수 있습니다. 그러나 이러한 함수가 네트워크 호출을 할 수 있는 능력은 운영 체제에 크게 의존합니다. Windows 시스템에서는 운영 체제가 UNC 명명 규칙을 이해하기 때문에 UNC 경로에 대한 네트워크 호출이 가능하며, 이는 NTLMv2 해시 유출로 이어질 수 있습니다.

이 SSRF 방법은 TCP 포트 445로 제한되며 포트 번호 수정을 허용하지 않지만, 전체 읽기 권한으로 공유에 접근하는 데 사용될 수 있으며, 이전 연구에서 입증된 바와 같이 해시를 훔쳐 추가적인 악용을 할 수 있습니다.

사용자 정의 함수(UDF)를 통한 원격 코드 실행 (RCE)

MySQL 데이터베이스는 외부 라이브러리 파일에서 사용자 정의 함수(UDF)를 사용할 수 있습니다. 이러한 라이브러리가 특정 디렉토리 내에서 또는 시스템의 $PATH에 접근 가능하다면 MySQL 내에서 호출할 수 있습니다.

이 기술은 @@plugin_dir에 대한 쓰기 접근, file_privY로 설정되고 secure_file_priv가 비활성화된 경우에 UDF를 통해 네트워크/HTTP 요청을 실행할 수 있게 해줍니다.

예를 들어, lib_mysqludf_sys 라이브러리 또는 HTTP 요청을 가능하게 하는 다른 UDF 라이브러리를 로드하여 SSRF를 수행할 수 있습니다. 라이브러리는 서버로 전송되어야 하며, 이는 라이브러리의 내용을 hex 또는 base64 인코딩한 후 적절한 디렉토리에 작성하여 달성할 수 있습니다.

@@plugin_dir가 쓰기 불가능한 경우, 특히 MySQL 버전이 v5.0.67 이상인 경우 프로세스가 달라집니다. 이러한 경우에는 쓰기 가능한 대체 경로를 사용해야 합니다.

이러한 프로세스의 자동화는 UDF 주입을 지원하는 SQLMap과 같은 도구를 통해 가능하며, 블라인드 SQL 주입의 경우 출력 리디렉션 또는 DNS 요청 밀반입 기술을 활용할 수 있습니다.

HackTricks 지원하기

Last updated