SQL注入的原理以及攻防实战
概要:首先回应一下之前的个人博客网站搭建,由于经过了期末考试以及14天的军训,由于时间原因没有时间去迁移实验室电脑上的数据,同时因为一些bug的原因,所以暂缓更新,接下来将会是一系列网络安全的相关知识。
1. SQL 注入漏洞简介
1漏洞描述
Web 程序代码中对于用户提交的参数未做过滤就直接放到 SQL 语句中执
行,导致参数中的特殊字符打破了 SQL 语句原有逻辑,黑客可以利用该漏洞执
行任意 SQL 语句,如查询数据、下载数据、写入 webshell 、执行系统命令以
及绕过登录限制等。
2测试方法
在发现有可控参数的地方使用 sqlmap 进行 SQL 注入的检查或者利用,
也可以使用其他的 SQL 注入工具,简单点的可以手工测试,利用单引号、 and
1=1 和 and 1=2 以及字符型注入进行判断!推荐使用 burpsuite 的 sqlmap 插
件,这样可以很方便,鼠标右键就可以将数据包直接发送到 sqlmap 里面进行检
测了!
3修复建议
代码层最佳防御 sql 漏洞方案:采用 sql 语句预编译和绑定变量,是防御
sql 注入的最佳方法。
( 1 )所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使
用参数而不是将用户输入变量嵌入到 SQL 语句中。当前几乎所有的数据库系统
都提供了参数化 SQL 语句执行接口,使用此接口可以非常有效的防止 SQL 注
入攻击。
( 2 )对进入数据库的特殊字符( ’ <>&*; 等)进行转义处理,或编码转换。
( 3 )确认每种数据的类型,比如数字型的数据就必须是数字,数据库中的存
储字段必须对应为 int 型。
( 4 )数据长度应该严格规定,能在一定程度上防止比较长的 SQL 注入语句
无法正确执行。
( 5 )网站每个数据层的编码统一,建议全部使用 UTF-8 编码,上下层编码
不一致有可能导致一些过滤模型被绕过。
( 6 )严格限制网站用户的数据库的操作权限,给此用户提供仅仅能够满足其
工作的权限,从而最大限度的减少注入攻击
对数据库的危害。
( 7 )避免网站显示 SQL 错误信息,比如类型错误、字段不匹配等,防止攻
击者利用这些错误信息进行一些判断。
2.SQL注入的练习靶场以及对应工具
sqlmap的安装:
这里采用burp suite的内置sqlmap插件去使用
靶场的安装:
这里采用暗月老师的一个集成靶场去练习相关内容
PS:需要资料可以联系我。
3.SQL注入的知识点:
1原理分析:如果没有过滤的话。某些拼接的SQL语句可以直接对数据库进行操作。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6UaMdv8c-1690019560846)(C:\Users\86133\AppData\Roaming\Typora\typora-user-images\image-20230722165918445.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U7uFg6VS-1690019560847)(C:\Users\86133\AppData\Roaming\Typora\typora-user-images\image-20230722170308498.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C9SODavr-1690019560847)(C:\Users\86133\AppData\Roaming\Typora\typora-user-images\image-20230722170554424.png)]
一些简单的判断方法:
回显是指页面有数据 信息返回
id =1 and 1=1
id = 1 and 1=2
id = 1 or 1=1
id = ‘1’ or ‘1’=‘1’
id=" 1 "or “1”=“1”
无回显是指 根据输入的语句 页面没有任何变化,或者没有数据库中的内容显示
到网页中.
vince’ and ‘1’='1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ymhAXJQh-1690019560848)(C:\Users\86133\AppData\Roaming\Typora\typora-user-images\image-20230722171409558.png)]
vince’ and ‘1’='2
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ynfnrKFF-1690019560848)(C:\Users\86133\AppData\Roaming\Typora\typora-user-images\image-20230722171503271.png)]
PS:如果出现上述情况则表示可能存在SQL注入漏洞
4.SQL注入的分类
4.1按照sqlmap中的分类:
UNION query SQL injection(可联合查询注入)
Stacked queries SQL injection(可多语句查询注入)堆叠查询Boolean-based blind SQL injection(布尔型注入)
Error-based SQL injection(报错型注入)
Time-based blind SQL injection(基于时间延迟注入)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Aay0JLm3-1690019560848)(C:\Users\86133\AppData\Roaming\Typora\typora-user-images\image-20230722172539128.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-evQbDlM3-1690019560849)(C:\Users\86133\AppData\Roaming\Typora\typora-user-images\image-20230722173803326.png)]
4.2 接受请求类型区分
GET 注入
GET 请求的参数是放在 URL 里的,GET 请求的 URL 传参有长度限制 中文需要
URL 编码
POST 注入
POST 请求参数是放在请求 body 里的,长度没有限制
COOKIE 注入
cookie 参数放在请求头信息,提交的时候 服务器会从请求头获取
总结
本次的内容就到这里
RL 里的,GET 请求的 URL 传参有长度限制 中文需要
URL 编码
POST 注入
POST 请求参数是放在请求 body 里的,长度没有限制
COOKIE 注入
cookie 参数放在请求头信息,提交的时候 服务器会从请求头获取
总结
本次的内容就到这里
声明:本文章仅供个人学习使用。