SQL 注入基础知识
本章所讲内容:
- PHPStudy 环境搭建
- DVWA 靶场搭建
- Sqli-labs 靶场搭建
- 手工测试工具 hackbar 安装
- SQL 语言解析
1、PHPStudy 环境搭建
PHPStudy 简介:该程序包集成最新的 Apache+PHP+MySQL,一次性安装,无须配置即可使用,是非常方便、好用的 PHP 调试环境,该程序不仅包括 PHP 调试环境,还包括了开发工具、开发手册等·总之学习 PHP 只需一个包。对学习 PHP 的新手来说,WINDOWS 下环境配置是一件很困难的事;对老手来说也是一件烦琐的事。因此无论你是新手还是老手,该程序包都是一个不错的选择。
PHPStudy 官网:http://www.phpstudy.net/
各种版本下载界面:
1.2 PHPStudy 工具介绍
双击打开安装程序,并完成安装
网站目录:/phpstudy 安装目录/www/站点域名/ 点击启动,如下图:
测试访问:
2、DVWA 靶场搭建
DVWA 简介:DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的 PHP/MySQL Web 应用,旨在为安全专业人员测试自己的专业技能和工具提供合法的环境,帮助 web 开发者更好的理解 web 应用安全防范的过程。
Damn Vulnerable Web Application #特别容易受攻击的 web 应用程序
DVWA 是 randomstorm 的一个开源项目,需要注意的是,代码分为四种安全级别:Low,Medium,
High,Impossible。初学者可以通过比较四种级别的代码,也有一些 PHP 代码审计的内容。官方网站:http://www.dvwa.co.uk/
下载 DVWA 完成后并解压,然后放到网站根目录上;
打开网站根目录,把解压后的 DVWA-master 包放到此目录下,最好把文件名改成DVWA方便记忆
进入 DVWA 的配置目录下,把 config.inc.php.dist 模板配置文件复制一份,并命名为 config.inc.php
打开config.inc.php,修改如下内容
打开 config.inc.php 文件:修改一下标红内容:
$_DVWA[ ‘recaptcha_public_key’ ] = ‘’;
$_DVWA[ ‘recaptcha_private_key’ ] = ‘’;
为:添加上谷歌开源免费验证码 reCAPTCHA 的公钥和私钥
$_DVWA[ ‘recaptcha_public_key’ ] = ‘6LdK7xITAAzzAAJQTfL7fu6I-0aPl8KHHieAT_yJg’;
$_DVWA[ ‘recaptcha_private_key’ ] = ‘6LdK7xITAzzAAL_uw9YXVUOPoIHPZLfw2K1n5NVQ’;
reCAPTCHA 计划是由卡内基梅隆大学所发展的系统,主要目的是利用 CAPTCHA 技术来帮助典籍数位化的进行,这个计划将由书本扫描下来无法准确的被光学文字辨识技术识别的文字显示在 CAPTCHA 问题中,让人类在回答 CAPTCHA 问题时用人脑加以识别。
扩展:大家可以自己去 google 注册验证码,https://www.google.com/recaptcha/admin/create
修改 MySQL 登录密码为 123456 方法:
后期登录:
http://127.0.0.1/DVWA/setup.php
检查报错 注意修改
打开php.ini,这里显示是开启的
正确修改方式:
在phpstudy_pro\Extensions\php下修改allow_url_include为On
修改完毕要重启 apache ,重新访问http://127.0.0.1/DVWA/setup.php,创建数据库
登录网址:http://127.0.0.1/DVWA/login.php
dvwa 的登录界面的默认用户名:admin,密码: password;
C:\phpstudy_pro\Extensions\MySQL5.7.26\bin 记得找到 mysql 的位置 加入到环境变量
cmd命令行登陆 MySQL
mysql -uroot -p123456
查看数据库
show databases;
3、Sqli-labs 靶场搭建
sqli-labs 简介:Sqli-labs 是一个印度程序员写的,用来学习 sql 注入的一个实验平台;
下载地址:https://github.com/Audi-1/sqli-labs
php 版本一定要设置成 7 以下,7 之后的 mysql 都改成了mysqli了,
把下载好的软件包放到网站根目录:
把 C:\phpstudy\WWW\sqli-labs\sql-connections 路径下的 db-creds.inc 文件里面的改:
$dbpass =’ ‘改为$dbpass =’ 123456 ‘ ;
然后打开网站:http://127.0.0.1/sqli-labs/
第一次点击 setup/reset Database for labs,重置一下数据库;该环境就搭建好了;
php 版本为 7 以上 要加个 mysqli ,这里建议直接用 php5.4 以上
- 手工测试工具 hackbar 安装
hackbar 简介:Hackbar 是一个 Firefox 的插件,它的功能类似于地址栏,但是它里面的数据不受服务器的相应触发的重定向等其它变化的影响。这个 Hackbar 可以帮助你在测试 SQL 注入,XSS 漏洞和网站的安全性,主要是帮助开发人员做代码的安全审计,检查代码,寻找安全漏洞。
目前的 hackbar 已经收费了,因此老师给大家找了一个免费版的;下载地址:https://github.com/HCTYMFF/hackbar2.1.3
打开火狐浏览器,点击附加组件,如图:
装好之后,按 F12 快捷键:查看是否安装成功;
- SQL 语言解析
5.1 什么是 SQL 注入
SQL 注入的核心思想:黑客在正常的需要调用数据库数据的 URL 后面构造一段数据库查询代码,然后根据返回的结果,从而获得想要的某些数据。
所谓 SQL 注入,就是通过把 SQL 命令插入到 Web 表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行指定的 SQL 语句。具体来说,它是利用现有应用程序,将 SQL 语句注入到后台数据库引擎执行的能力,它可以通过在 Web 表单中输入 SQL 语句得到一个存在安全漏洞的网站上的数据,而不是按照设计者意图去执行 SQL 语句。
SQL 注入攻击指的是通过构建特殊的输入作为参数传入 Web 应用程序,而这些输入大都是 SQL 语法里的一些组合,通过执行 SQL 语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。根据相关技术原理,SQL 注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。
基于此,SQL 注入的产生原因通常表现在以下几方面:
①不当的类型处理;
②不安全的数据库配置;
③不合理的查询集处理;
④不当的错误处理;
⑤转义字符处理不合适; ⑥多个提交处理不当。
SQL 注入漏洞(SQL injection)是 Web 层面最高危的漏洞之一,曾连续 3 年在 OWASP 年度十大漏洞中排名第一。
5.2 MySQL 简介
SQL 结构化查询语言,绝大多数关系型数据库(MySQL、Access、Oracle 等)都采用 SQL 进行查询、管理及常用操作。
MySQL 是被广泛使用的一种开源数据库,官方网站 www.mysql.com
5.3 MySQL 基本操作(所有演示都在 PHPstudy 里面的 mysql 命令行里面演示)
1.点击 PHPstudy 的其他选项菜单—-2.MySQL 工具—-3.MySQL 命令行—-4.输入密码 123456—5.进入 MySQL 命令行
在 MySQL 中所有的语句后面都要加上“;” 表示结束。
select version(); #查看 mysql 版本
select user(); #查看当前用户
select database(); #查看当前打开的数据库
show databases; #查看 MySQL 中共包含了哪些数据库
use dvwa; #打开 test 数据库
show tables; #显示数据库中的表
咱们创建个表 1:
mysql> create table hack
-> (
-> id int,
-> username varchar(30), -> password varchar(30)
-> );
向表 1 中添加记录:
insert into hack values(1,’admin’, ‘123456’)
insert into hack values(2,’boss’, ‘123456’);
要注意语法错误问题 不能空格
创建表 2:
mysql> create table news
-> (
-> id int,
-> title varchar(50)
-> );
要注意语法错误问题
2 中添加记录:
insert into news values(1,’web’);
select 查询:
select * from hack; #显示 hack 表中的所有记录
select * from hack where id=1; #从 hack 表中查找满足条件 id=1 的记录
select username,password from hack where id=1;
#从 hack 表中查找满足条件 id=1 的记录,并只显示 username 和 password 字段内容
select * from hack where id=1 and username=”admin”;
#从 hack 表中查找同时满足条件 id=1 以及 username=“admin”的记录
select * from hack where id=2 or username=”boss”;
#从 hack 表中查找同时满足条件 id=2 或者 username=“boss”的记录
select from news where id=1 and exists (select from hack);
#通过 exists()函数判断 hack 表是否存在
select * from news where id=1 and exists (select username from hack);
#通过 exists()函数判断 hack 表中是否存在 username 字段
不存在的话会报错
select * from hack order by id; #按照 hack 表中的 id 列升序排序
select username,password from hack order by 2;
#按照查询结果中的第 2 列(即 password 列)升序排序
union select 联合查询:
union 联合查询可以一次性执行两个或多个查询,并将它们的结果组合在一起输出显示。
union 联合查询的基本规则: 所有查询中的列数必须相同
select from news union select from hack; #字段数不匹配,查询报错 select from news union select username,password from hack; #查询正常 select from hack union select 1,id,title from news; #查询正常
单行注释:
#,以“#”号开头,直到该行行尾,全部都是注释内容;
— ,以“— ”号开头,直到该行行尾,全部都是注释内容。(“— ”与注释内容之间要加有空格)多行注释:
/……/,“/”用于注释文字的开头,“/”用于注释文字的结尾。
select from hack; #union select 1,id,title from news; select from hack; — union select 1,id,title from news;
删除表
drop table hack;
总结: 1、PHPStudy 环境搭建
- DVWA 靶场搭建
- Sqli-labs 靶场搭建
- 手工测试工具 hackbar 安装
- SQL 语言解析