SQL注入简介

一、简介
SQL 注入攻击(SQL Injection),简称注入攻击、SQL 注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞。由于在设计程序时,忽略了对输入字符串中夹带的 SQL 指令的检查,被数据库误认为是正常的 SQL 指令而运行,进而使数据库受到攻击,可能导致数据被窃取、更改、删除,甚至执行系统命令等,以及进一步导致网站被嵌入恶意代码、被植入后门程序等危害。
常见发生位置
URL 参数提交,主要为 GET 请求参数
表单提交,主要是 POST 请求、也包括 GET 请求
Cookie 参数提交
HTTP 请求头部的一些可修改的值,比如 Referer、User_Agent 等
一些边缘的输入点,比如 mp3 文件、图片文件的一些文件信息等
防御措施
使用预编译语句: 一般来说,防御 SQL 注入的最佳方式,就是使用预编译语句,绑定变量,对现有代码的改动量较大。
使用存储过程: 使用安全的存储过程可在一定程度上对抗 SQL 注入,但要注意采用此种方法无法保证 100% 安全。
严格检查用户数据: 对用户传入的数据类型及内容进行严格的检查。对数据类型检查,如利用 ID 查询时判断是否为整型,输入邮箱时判断邮箱格式,输入时间、日期等必须严格按照时间、时期格式等;对数据内容进行检查,如严格检测用户提交数据中是否包含敏感字符或字符串,是否匹配某种注入规则,严格转义特殊字符等。此种方法虽然便于实施,但容易产生误报和漏报,且容易被绕过。
其他: 使用安全的编码函数、统一各数据层编码格式(如统一使用 UTF-8 格式等)、严格限制数据库用户权限、定期进行代码黑盒白盒扫描、避免将错误信息显示到页面等。

二、分类
按照注入点类型分类
1、数字注入点
许多网页链接有类似的结构 http://xxx.com/users.php?id=1 基于此种形式的注入,一般被叫做数字型注入点,缘由是其注入点 id 类型为数字,在大多数的网页中,诸如 查看用户个人信息,查看文章等,大都会使用这种形式的结构传递id等信息,交给后端,查询出数据库中对应的信息,返回给前台。这一类的 SQL 语句原型大概为 select * from 表名 where id=1 若存在注入,我们可以构造出类似与如下的sql注入语句进行爆破:select * from 表名 where id=1 and 1=1
2、字符型注入点
网页链接有类似的结构 http://xxx.com/users.php?name=admin 这种形式,其注入点 name 类型为字符类型,所以叫字符型注入点。这一类的 SQL 语句原型大概为 select * from 表名 where name=‘admin’ 值得注意的是这里相比于数字型注入类型的sql语句原型多了引号,可以是单引号或者是双引号。若存在注入,我们可以构造出类似与如下的sql注入语句进行爆破:select * from 表名 where name=‘admin’ and 1=1 ’ 我们需要将这些烦人的引号给处理掉。
3、搜索性注入点
这是一类特殊的注入类型。这类注入主要是指在进行数据搜索时没过滤搜索参数,一般在链接地址中有 “keyword=关键字” 有的不显示在的链接地址里面,而是直接通过搜索框表单提交。此类注入点提交的 SQL 语句,其原形大致为:select * from 表名 where 字段 like ‘%关键字%’ 若存在注入,我们可以构造出类似与如下的sql注入语句进行爆破:select * from 表名 where 字段 like ‘%测试%’ and ‘%1%’=’%1%’。

按照数据提交方式分类
1、GET注入
提交数据的方式是 GET , 注入点的位置在 GET 参数部分。比如有这样的一个链接http://xxx.com/news.php?id=1, id 是注入点。
2、POST 注入
使用 POST 方式提交数据,注入点位置在 POST 数据部分,常发生在表单中。
3、Cookie 注入
HTTP 请求的时候会带上客户端的 Cookie, 注入点存在 Cookie 当中的某个字段中。
4、HTTP 头部注入
注入点在 HTTP 请求头部的某个字段中。比如存在 User-Agent 字段中。严格讲的话,Cookie 其实应该也是算头部注入的一种形式。因为在 HTTP 请求的时候,Cookie 是头部的一个字段。

按照执行效果分类
1、基于布尔的盲注
即可以根据返回页面判断条件真假的注入
2、基于时间的盲注
即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断
3、基于错误的盲注
即页面会返回错误信息,或者把注入的语句结果直接返回在页面中
4、联合查询注入
可以使用union的情况下的注入
5、堆查询注入
可以同时执行多条语句的执行时的注入
6、宽字节注入
利用gbk多字节编码,两字节代表一个汉字

三、成因
OWASP年度TOP10安全问题中,注入漏洞排名第一,SQL攻击因为其造成的严重危害性,所以常年稳居OWASP TOP10榜首。
SQL 注入攻击(SQL Injection),简称注入攻击、SQL 注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞。由于在设计程序时,忽略了对输入字符串中夹带的 SQL 指令的检查,被数据库误认为是正常的 SQL 指令而运行,进而使数据库受到攻击,可能导致数据被窃取、更改、删除,甚至执行系统命令等,以及进一步导致网站被嵌入恶意代码、被植入后门程序等危害。
SQL注入成因:
1、不正当的类型处理
2、不安全的数据库配置
3、不合理的查询集处理
4、不当的错误处理
5、转义字符处理不合适
6、多个提交处理不当
可能存在SQL注入的地方:
1、任何客户端可控,传递到服务器的变量
2、必须带有参数传递,参数值带入到数据库查询
3、服务器没有进行过滤或者过滤不严格

四、危害
SQL注入危害:
1、数据库信息泄露:数据库中存放的用户隐私信息的泄露
2、网页篡改:通过操作数据库对特定网页进行篡改
3、网站被挂马,传播恶意文件:修改数据库一些特定的值,嵌入网马链接,进行挂马攻击
4、数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员账户被篡改
5、服务器被远程控制,安装后门:经由数据库服务器提供的操作系统支持,得以修改或控制操作系统
6、破坏硬盘数据,瘫痪系统

五、环境
目标靶机:OWASP-Broken
测试渗透机:Kali-Linux
sqlmap工具

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值