第一章、SQL注入基础

一、sql注入原理

SQL注入就是把SQL命令插入到Web表单然后提交到所在页面请求(查询字符串),从而达到欺骗服务器执行恶意的SQL命令。

它是利用现在已有的应用程序,将SQL语句插入到数据库中执行,程序没有细致过滤用户输入的数据,从而导致非法数据进入系统。

二、注入的产生条件

1、参数用户可控:前端传给后端的参数内容是用户可以控制的。

2、参数带入数据库查询:传入的参数拼接到SQL语句,且带入参数库查询。

三、SQL注入的危害

1、数据库信息泄露:数据库中存放的用户的隐私信息的泄露。

2、网页篡改:通过操作数据库对特定网页进行篡改。

3、数据库被恶意操作︰数据库服务器被攻击,数据库的系统管理员帐户被窜改。

4、服务器被远程控制︰被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。

四、sql注入类型分类

1、注入点参数类型

        1)、数字型注入:当输入参数为数字类型时,例如页码,ID等,存在注入时则为数字类型的注入。

        2)、字符型注入:当输入参数为字串类型时,则为字串类型的输入,其与数字类型的注入的区别在于注入时需要使用引号来闭合。

        3)、搜索型注入:这是一类特殊的注入类型。这类注入主要是指在进行数据搜索时没过滤搜索参数,一般在链接地址中有 "keyword=关键字" 有的不显示在的链接地址里面,而是直接通过搜索框表单提交。

2、提交方式类型

        1)、GET注入:GET注入是最简单的注入,不需要额外的工具。GET提交数据的方式的特点是将用户操作生成的语句直接显示在url上,常见于不需要保密传输的页面。

        2)、POST注入:使用POST提交的页面通常需要一定的保密性,常见于用户登录页面,用户操作生成的语句会存在于表单中,需通过抓包获取,常用抓包工具BurpSuite。抓取数据包后,可以通过修改提交的内容,结合网站页面反馈,判断是否可进行注入。

        3)、Cookie注入:Cookie存在用户本地客户端的数据集合,HTTP 请求表单中会带上客户端的 Cookie, 注入点存在于Cookie 当中的字段中。和POST一样,Cookie也要通过抓包来查看。

        4)、Http头注入:HTTP头注入是指攻击者通过在HTTP头中注入恶意的SQL语句,从而获得对数据库的访问权限。攻击者通过修改HTTP头中的User-Agent、Referer等字段来实现SQL注入攻击。

3、注入点反馈类型

        1)、联合查询注入:联合查询适合于有显示位的注入,即页面某个位置会根据我们输入的数据的变化而变化。

        2)、报错注入:数据库在执行SQL语句时,会先对SQL进行检测,如果SQL语句存在问题,会将报错的语句反馈到页面中。可以构造恶意的SQL,触发数据库的报错,而在报错的信息中就存在我们想要获取的信息。常用的报错函数:updatexml()、extractvalue()、floor()。

updatexml():这个函数实际上是去更新了XML文档,但是我们在XML文档路径的位置里面写入了子查询,我们输入特殊字符,然后就因为不符合输入规则报错了,但是报错的时候其实已经执行了那个子查询代码

extractvalue():是mysql对xml文档数据进行查询的xpath函数,只适用于MySQL 5.1以上版本,且只回显32位字符

floor():mysqk中用来取整的函数,并且没有版本和字符限制

        3)、布尔盲注:sql服务器不会直接反馈查询内容,而是通过反馈一个布尔参数给网站服务器,然后再由网站服务器将内容反馈到浏览器,而布尔类型只有两个参数,ture和false,此时可通过配合猜解函数如if(),ascii(),length(),left(),substr()等,来判断注入操作的效果。

if():if(expr1,expr2,expr3):判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句

left():left(a,b),从左截取a的前b位,正确返回1错误返回0

ascii():将某个字符串转化为ascii值

length():返回字符串的长度

substr():截取字符串

        4)、时间延时盲注:不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。常用的延时函数:sleep()、waitfor delay '0:0:0'

sleep():为mysql睡眠函数,可以使查询数据时回显数据的响应时间增长,使用方法如sleep(5),这里的5为睡眠时间,页面返回将延时5秒

waitfor delay '0:0:0' :是SQLServer中Transact-SQL提供的一个流程控制语句。它的作用就是等待特定时间,然后继续执行后续的语句。它包含一个参数delay,用来指定等待的时间。使用方法如waitfor delay '0:0:5',这里的5为等待时间,页面返回将等待5秒。

        5)、堆叠注入:mysql数据库sql语句的默认结束符是以";"号结尾,在执行多条sql语句时就要使用结束符隔开,而堆叠注入就是通过结束符来执行多条sql语句。

五、防范措施

1、使用参数化查询,可防止sql注入攻击,并提高代码的可读性和可维护性。

2、输入验证和过滤,可防止恶意输入和错误数据导致的安全漏洞和应用程序错误。

3、使用存储过程,存储过程是一组预定义的sql语句集合,可以在数据库中进行重复性和复杂性的操作。

4、最小权限原则,是一种安全性原则,指的是为了保护敏感数据和系统资源,用户被授予最小必须的权限,也就意味着用户只能访问和执行他们工作所需的数据库对象和操作,而不是拥有对整个数据库的完全访问权限。

5、使用准备语句,是一种预编译的sql语句,它可以提高数据库操作的性能和安全性,同时能防止sql注入攻击。

6、使用安全的数据库连接,可以保护数据库免受恶意攻击和数据泄露。

7、使用防火墙和入侵检测系统,为了保护计算机网络免受未授权的访问和恶意攻击。

总结

本篇文章主要讲解一下SQL注入的整体框架,从漏洞原理——漏洞危害——漏洞分类——漏洞防范措施,包括我个人对漏洞的理解,之后会继续围绕SQL注入分类进行漏洞复现,谢谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值