SQL注入介绍

注意:仅供参考使用,切勿在未授权的网站做测试!!!

什么是SQL注入

SQL注入是一种web应用代码的漏洞,黑客可以构造特殊请求请求使web应用执行带有附件条件的sql语句。

SQL注入漏洞原理

B/S架构的安全性较低,且被广泛应用于编程中再加上部分程序员缺乏安全意识,在编码过程中没有加入对用户输入的信息做合法性判断的程序导致注入漏洞存在。
注入语句的结构:合法sql语句+用户输入的可控语句

如何判断注入点?

一、手工确认
1、网址后面加上?id=1单引号’然后回车,如果出现包含敏感信息的报错界面说明存在注入点。
在这里插入图片描述
2、网址/?id=1’ or 1=1出现报错并且包含大量敏感数据,说明存在注入漏洞。在这里插入图片描述
二、使用sqlmap工具验证
通用的验证语句:sqlmap.py --batch -f --banner --flush-session -u “url”
在这里插入图片描述
在这里插入图片描述

三、代码审计方式
查看源代码分析是否有漏洞存在,一般常见的是php中使用get,post等方式获取id,如 i d = id= id=_get[‘id’]

SQL注入流程图

在这里插入图片描述

MySQL常用函数

在这里插入图片描述

手工注入演示

一、union注入查询
1、查询网站所有数据库名称
步骤一:先判断有多少参数可以被获取
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200910104947449.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nL

可以看到当取值为4时报错,说明猜测结果超出了实际值,接下来再用3来做测试观察结果
在这里插入图片描述

说明该网站可以被获取的参数有3个。
步骤二:判断注入位置
在这里插入图片描述
说明2和3处存在注入点
步骤三:在2处插入语句,通过注入语句得到所有数据库名称,语句:网址/?id=-1’ union select 1,(select group_concat(schema_name) from information_schema.schemata),3–+
在这里插入图片描述
2、查询某个库中所有表名称,语句:?id=-1’ union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=‘challenges’),3–+
在这里插入图片描述
3查询当前数据库版本号
在这里插入图片描述

使用sqlmap注入

查询数据库当前用户名称
在这里插入图片描述
在这里插入图片描述

sql注入分类

1、union联合查询:select中有order by 时不能重复出现union字段,如果select后面有limit限制语句那么在限制语句后面也不能出现union。
2、报错注入:正常请求id=1后面加入’会报错,防护等级不高的网站会直接在报错页面附带数据库信息。
3、布尔盲注:即便存在漏洞也不会因为在url中添加‘之类的符号而回显错误信息之类的内容,所以只能通过一步步猜解来根据页面返回的布尔值来判断自己的猜测是否正确。
4、时间盲注:和布尔一样即使有漏洞也不会根据输入的字符返回相应的值,所有可以通过在语句中加sleep()函数来做页面延迟,如果符合条件页面会根据设定的时间延迟返回,也是一个步步猜解过程,盲注一般会采用工具效率更高,但准确度不好说。
5、宽字节注入:防护较高的网站会把’转义成\来避免SQL注入,绕过的方法是将id=1‘换成id=%df’。因为%df和\组合在一起会被系统视为汉字字符(宽字节类型),自动将 \无视掉可以正常注入。
6、二次编码注入:urlcode()函数与PHP本身处理编码时存在配合失误的问题,可利用这个漏洞来注入。
7、二次注入:听起来和二次编码注入差不多,但是实际区别很大。二次注入分为两步,首先在原有合法数据中插入恶意数据再把它引入数据库,然后在开发者看来这组进入的数据是正常的并不会去做过滤校验,当下一次攻击者查询时就会被恶意字符带出想要得到的数据。

SQL注入的危害

1、非法窃取数据库中的信息;
2、对数据库进行增删改查操作;
3、在存在目录写入权限的网站上传木马、篡改网页、发布违法信息;
4、远程控制服务器创建后门;
5、提权,获得更高的用户权限甚至管理员权限,绕过登录,添加用户,调整用户权限,拥有更高级的操作功能;
6、在有读写文件的权限下,用into outfile向服务器目录写入shell和读取网站源码、配置信息。达到getshell和获取敏感数据的目的;
7、破坏硬盘数据。

SQL注入防御

以下方法只能是对已知漏洞进行防护,未知漏洞还有很多,防御手法也需要与时俱进。
1、基于攻击特征匹配过滤,如单引号,%df之类。
2、对用户输入字符进行转义,合法的不会影响结果,非法的会直接拒绝。
3、写代码时严格定义数据类型。
4、严格限制数据库访问权限。
5、去除代码中的敏感信息,即使报错也不会泄露内容。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值