一、目的
了解SQL注入的危害
了解SQL的基本原理和SQL语句的SELECT/UPDATE/INSERT等用法
熟悉靶场Pikachu的安装和使用
掌握SQL注入的数字型注入攻击
掌握SQL注入的字符型注入攻击
掌握UNION语句进一步扩大攻击范围
了解SQL攻击的防御方法
二、漏洞原理
漏洞原理
在动态网站中,往往需要用户传递参数到服务器,这些参数往往需要和数据库进行交互;当服务端没有对参数进行安全过滤时,攻击者在参数中加入恶意的SQL语句结构,便编造成了SQL注入漏洞,被攻击者利用来攻击系统和网站。
攻击者在提交请求时将SQL语句插入到请求内容中,程序本身对用户输入内容未经处理,同时而未对恶意用户插入的SQL语句进行过滤,导致SQL语句直接被服务端执行。
漏洞类型
在SQL注入漏洞中,注入类型分为三种:数字型、字符型、搜索型
数字型
在 Web 端中经常能看到是例如http://xxx.com/news.php?id=1
这种形式,其注入点 id 类型为数字,所以叫数字型注入点。
这一类的 SQL 语句结构通常为 select * from news where id=1
,如果攻击者将参数id的值改为1 or 1=1
,那么程序中拼接的sql语句则为:select * from news where id=1 or 1=1
,因此参数改变了原有的SQL语句结构,导致了SQL注入漏洞攻击。
字符型
在 Web 端中也经常能看到例如http://xxx.com/news.php?name=admin
这种形式的URL地址,其注入点 name 类型为字符类型,所以叫字符型注入点。这一类的 SQL 语句结构通常为
select * from 表名 where name='admin'
当攻击者在参数值admin
尾部加入攻击代码' or 1=1
,那么拼接出来的sql注入语句为:
select * from news where chr='admin' or 1=1 '
这样SQL语句同样也会被改变,当然攻击者也不仅仅使用这么简单的攻击代码,通常还会使用一些更加复杂的攻击代码,例如
admin' union select 1,2,3,4 or '1'='1
在程序中拼接SQL语句之后,则变成了
select * from news where chr='admin' union select 1,2,3,4 or '1'='1'
这样就可以使用union结构将攻击者所感兴趣的内容返回回来
搜索型
很多时候我们会看到网站有个站内搜索的功能,搜索功能往往需要和数据库进行交互,因此也会存在SQL注入漏洞风险,搜索型SQL注入的特点是攻击代码中有两个%
,如下图所示
在上图中可以看到,这个地方原本是用来搜索相关用户名的,当攻击代码为
%xxxx% or 1=1 #%'
所有的用户都在下方展示了出来,在命令行里我们可以这样搜索:
SQL注入的防御
不要使用动态SQL,避免将用户提供的输入直接放入SQL语句中;最好使用准备好的语句和参数化查询(PDO预处理),这样更安全;限制数据库权限和特权,将数据库用户的功能设置为最低要求;这将限制攻击者在设法获取访问权限时可以执行的操作。
防范文件
直接下载相关防范注入文件,通过incloude包含放在网站配置文件里面.
函数过滤
如果id是否为数字,直接将数据类型转换为整型,如下代码所示
$id=intval($_GET['id']);
字符型使用函数过滤
$name = addslashes($_GET['name']);
过滤后单引号会自动转义,因此SQL语句结构不会被改
三、SQL注入攻击pikachu靶场
1.下载并解压缩xampp到C盘根目录,然后运行xampp-control.exe
注意:
- 可能需要运行库: 微软常用运行库合集.zip
- 如果本机已经安装了PHP/MySQL, WEB服务器,可能会端口冲突
2.下载并解压缩pikachu靶场文件到 xampp路径的htdocs目录下
3.在xampp-control面板中启动Apache, MySql
4.浏览器运行: http://127.0.0.1/pikachu
5.SQL注入攻击实验
注意:
需要安装Firefox浏览器
需要配置Firefox的代理
需要运行BurpSuite,并进行抓包,然后修改包,然后放包。
1.数字型注入:
2.字符型注入:
3.搜索型注入:
四、总结
1.SQL注入的原理
SQL注入就是通过web表单吧SQL命令提交到web应用程序,由于程序没有细致的过滤用户输入的数据,造成字符串拼接,进而恶意的SQL语句被执行,造成数据库信息泄露,网页篡改,数据库被恶意操作等
2.SQL注入的危害
- 数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。
- 网页篡改:通过操作数据库对特定网页进行篡改。
- 网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。
- 数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员账户被窜改。
- 服务器被远程控制,被安装后门。 经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
- 破坏硬盘数据,瘫痪全系统。
3.SQL注入的防御措施有哪些
- 对用户进行分级管理,严格控制用户的权限;
- 在书写SQL语言时,禁止将变量直接写入到SQL语句,必须通过设置相应的参数来传递相关的变量;
- 在具体检查输入或提交的变量时,对于单引号、双引号、冒号等字符进行转换或者过滤:
- 使用安全参数;
- 通过专业的扫描工具,可以及时的扫描到系统存在的相应漏洞;
- 多层验证;
- 数据库信息加密。