# MySQL File priv to SSRF/RCE {{#include ../../../banners/hacktricks-training.md}} **이 문서는 [https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/](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 내에서 호출할 수 있습니다. 이 기술은 여러 조건이 충족되는 경우 UDF를 통해 네트워크/HTTP 요청을 실행할 수 있게 해줍니다. 여기에는 `@@plugin_dir`에 대한 쓰기 접근, `file_priv`가 `Y`로 설정, `secure_file_priv`가 비활성화되어야 합니다. 예를 들어, `lib_mysqludf_sys` 라이브러리 또는 HTTP 요청을 가능하게 하는 다른 UDF 라이브러리를 로드하여 SSRF를 수행할 수 있습니다. 라이브러리는 서버로 전송되어야 하며, 이는 라이브러리의 내용을 hex 또는 base64로 인코딩한 후 적절한 디렉토리에 작성하여 달성할 수 있습니다. `@@plugin_dir`가 쓰기 불가능한 경우, 특히 MySQL 버전이 `v5.0.67` 이상인 경우 프로세스가 달라집니다. 이러한 경우에는 쓰기 가능한 대체 경로를 사용해야 합니다. 이러한 프로세스의 자동화는 UDF 주입을 지원하는 SQLMap과 같은 도구를 통해 용이해질 수 있으며, 블라인드 SQL 주입의 경우 출력 리디렉션 또는 DNS 요청 밀반입 기술을 활용할 수 있습니다. {{#include ../../../banners/hacktricks-training.md}}