SQL注入概要

文章介绍了SQL注入的原理,包括漏洞描述、测试方法和修复建议。提到了使用sqlmap等工具进行检测,最佳防御方案是采用SQL语句预编译和绑定变量。还讨论了SQL注入的练习资源、知识点,如联合查询注入、布尔型注入等,并区分了GET、POST和COOKIE类型的注入。最后,文章提供了一些防止SQL错误信息泄露和权限限制的措施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 参数放在请求头信息,提交的时候 服务器会从请求头获取

总结

本次的内容就到这里

声明:本文章仅供个人学习使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值