实用指南站
霓虹主题四 · 更硬核的阅读氛围

SQL注入提权技巧实战解析

发布时间:2025-12-16 18:37:48 阅读:358 次

SQL注入提权的基本原理

在企业办公网络环境中,数据库常作为后台核心服务运行。一旦Web应用存在SQL注入漏洞,攻击者不仅能读取数据,还可能通过提权操作获取更高权限,甚至控制整个数据库服务器。

提权的本质是利用数据库系统中的高权限账户或可执行函数,将原本受限的查询权限提升为系统命令执行权限。例如,MySQL中的LOAD_FILEINTO OUTFILE功能,或SQL Server的xp_cmdshell存储过程,都是常见的提权入口。

MySQL下的提权路径

假设某公司内部OA系统使用MySQL数据库,且登录接口未对输入做过滤。攻击者通过单引号闭合语句构造注入点:

' UNION SELECT 1,2,'' INTO OUTFILE 'C:/xampp/htdocs/shell.php'-- 

这行代码将一段PHP一句话木马写入Web目录。前提是当前数据库用户具有文件写入权限,并且知道Web路径。如果成功,访问shell.php并传入cmd参数即可执行系统命令。

更进一步,若MySQL以管理员身份运行,可通过UDF(用户定义函数)提权。下载特定版本的udf.dll,导入后创建自定义函数调用系统命令:

CREATE FUNCTION sys_exec RETURNS INTEGER SONAME 'udf.dll';

之后便可直接执行SELECT sys_exec('net user admin 123456 /add');添加系统账户。

SQL Server的xp_cmdshell启用

很多企业使用MSSQL作为后台数据库。默认情况下xp_cmdshell被禁用,但具备sa权限的用户可以重新开启:

EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;

一旦开启,后续就可以直接执行操作系统命令:

EXEC xp_cmdshell 'ipconfig';

在内网环境中,这一步极为危险。攻击者能探测其他主机、横向移动,甚至通过DNS隧道外传数据。

Oracle中的JAVA提权

部分金融或大型企业的办公系统采用Oracle数据库。其内置JAVA支持可被滥用。当具备DBA权限时,可通过加载JAVA类实现命令执行:

call dbms_java.grant_permission('SCOTT', 'java.io.FilePermission', '<<ALL FILES>>', 'execute');

随后编写JAVA函数调用Runtime.getRuntime().exec()来运行系统指令。这类手法隐蔽性强,日志记录不易追踪。

防范思路不能只靠补丁

某地税务系统曾因一个未过滤的报表参数导致全量纳税人信息泄露。事后复盘发现,虽然数据库打了最新补丁,但应用层仍存在联合查询注入。

真正有效的防护来自多层设计:Web应用必须使用预编译语句(Prepared Statement),禁止字符串拼接SQL;数据库账户应遵循最小权限原则,绝不使用root或sa直接连接;文件读写权限严格限制,避免Web目录可写。

运维人员定期检查数据库中是否存在异常函数或存储过程,比如突然出现的sys_exec、cmd_exec等自定义项,往往是已被入侵的信号。