Sql注入的基础

什么是SQL注入

官方一点的解释:
攻击者利用web应用程序对用户输入验证上的疏忽,在输入的数据中包含对某些数据库系统有特殊意义的符号或命令,让攻击者有机会直接对后台数据系统下达指令,,进而实现对后台数据库乃至整个应用系统的入侵。
简单解释
由于代码的不完全或者是存在一些不安全的过滤,导致用户在输入的时候带入了不安全的数据(非法数据);比如说单引号、双引号、联合查询、盲注、闭合等等,然后在输入的时候就可以输入非法的数据

SQL注入的原理

服务端没有过滤用户输入的恶意数据,直接把用户输入的数据当作SQL语句来执行,从而影响了数据库安全和平台的安全。
存在两个条件
1.用户能够控制输入
2.原本程序要执行的sql语句,拼接了用户输入的恶意数据

SQL注入过程

在这里插入图片描述
1.攻击者访问有SQL注入漏洞的网站寻找注入点
2.攻击者构造注入语句,注入语句和程序中的sql语句结合生成新的sql语句
3.新的sql语句被提交到数据库中进行处理
4.数据库执行了新的sql语句,引发sql注入攻击

SQL注入带来的危害

  1. 绕过登录验证:使用万能密码登录网站后台等
  2. 获取敏感数据:获取网站管理源账号密码等
  3. 文件系统操作:列目录,读取、写入文件等
  4. 注册表操作: 读取、写入、删除注册表等
  5. 执行系统命令:远程执行命令

判断一个HTTP请求是否存在SQL注入的方式:

  1. 经典:and 1=1|and2>1|'or 1=1 |or 1<1

  2. 数据库函数:sleep(4)=1 | length(user())>3—通过时间的盲注在这里插入图片描述

  3. 特殊符号:单引号、双引号----可以使用这两个来进行闭合

  4. 商用的扫描器

刚刚提到的’or 1=1其实可以算的上是一个万能米啊登录,它的用法可以写成
select username,password from users where username ='texvalue'or 1=1 -- ' and pasword = 'texvalue2'

–注释符号后面是有一个空格的,不可以忽略

这里的or它遵循的是如果第一个是对的,那么就不会执行后面的那个,如果第一个是错的,那么就是执行后面正确的。而1=1就是恒为真值的,所以不论是错的,空的,,后面都是保证是真的,所以都是可以执行的。

SQL注入分类

按照注入点类型分类
  • 数字型(整数)注入:提交的id直接进入到数据库中,不需要加入单引号
  • 字符型注入:提交的数据使用符号啊来进行包裹,比如说单引号,双引号。

它俩最简单的区分方式就是查看时否有单引号进行包裹,有的话就是字符型,没有的就是数字型

按照注入技术(执行效果)分类
  • 基于布尔的盲注:利用报错信息来判断查询的值时真是假;当判断条件为真的时候,会显示一个结果,如何返回的值为假的时候,会显示另一种结果,所以返回的查询值必须存在真和假
  • 基于时间的盲注:不能跟据页面的返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(也就时页面上面转圈圈的时间)来判断
  • 基于报错的注入:根据页面的报错信息,并且让报错信息中包含所需要的结果。
  • 联合查询注入:使用union的情况下注入
  • 堆查询注入:同时执行多条语句的注入

SQL漏洞形成的原因

动态字符串构建引起
  • 不正确的处理转义字符(宽字节注入)
  • 不正确的处理错误(报错泄露信息)
  • 不正确的处理联合查询
  • 不正确的处理多次提交(二次注入)
后台存在问题
  • 后台没有过滤或者编码了用户数据
  • 数据库可以拼接用户传递的恶意代码
错误处理不当
  • 详细的内部错误消息显示给用户或者攻击者
  • 错误信息可以直接给攻击者i共下一步攻击的帮助。
不安全的数据库配置

没有修改默认账户的名称,比如说
SQL Server默认的数据库系统管理员账户是-sa
MySQL中默认使用的账户名称是-root和anonymous
Oracle在创建数据库的时候通常默认会创建SYS,SYSTEMS DBSNMP和OUTLN账户

寻找SQL注入点

1.GET方法

get方法是一种请求服务器的http方法,使用这种方法的时候,信息包含在URL中;比如说,在点击链接的时候会使用这种方法。
get请求方法的格式

?text=value 1&cat= value2&num=value3...

修改的方式

  • 浏览器的导航栏中直接修改就可以操作这些参数
  • HackBar插件
2.POST方法

post是一种用于向web服务器发送信息的http方法
数据信息无法在URL中看到,所以一般可以发送字节大的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值