SQL注入概述

SQL注入即通过将SQL命令插入到WEB表单提交等地方,最终达到欺骗服务器执行恶意的SQL命令,从而进一步入侵服务器。

注入分类

按查询字段分类

  • 字符型:当输入的参数为字符串时,被称为字符型
  • 数字型:当输入的参数为整型时,可以认为是数字型注入

按照注入方法

  • Union注入
  • 报错注入
  • 布尔注入
  • 时间注入
  • 堆叠注入

靶场搭建

环境:WindowsServer2022虚拟机

工具:

小皮phpstudy https://www.xp.cn/

靶机 https://github.com/Audi-1/sqli-labs

虚拟机网络设置与关闭防火墙

在VMware中,我们将虚拟机设置为桥接模式,然后我们可以通过ipconfig查看到我们的ip地址

然后我们需要将环境的防火墙关闭,否则外部无法访问

image-20230329214327554

PHP环境搭建

由于我们靶场环境是php5.x的版本,而我们下载安装后的phpstudy版本为7.x,因此建议对其进行降级。

接着我们将我们下载好的靶场,解压复制到小皮的网站目录下(图中“打开根目录”)

image-20230329214745153

为了方便我们管理页面,我们把靶场改名为sqli。然后我们开启Apache和MySQL,在实体机浏览器中打开我们上面通过ipconfig查询到的IP地址,如果出现下面页面证明PHP环境搭建完成

image-20230329220440790

我们在地址后面加上我们目录的名字,例如10.0.0.218/sqli就可以打开我们的靶场。

连接数据库

在我们构建完PHP环境后,还需要将我们靶机的数据库连接到MySQL服务。

在靶机的目录下找到sql-connections,用任意编辑器打开db-creds.inc

image-20230330003754838

修改用户名密码,如果你的小皮没有修改过MySQL的账户密码,则应该都是root。修改完成后保存,打开我们的页面,点击Setup/reset Database for labs,如果页面出现大部分的successfully则表明数据已经插入到数据库。

至此,我们的靶场环境就搭建完成了。

Docker搭建靶场

感觉在WindowsServer虚拟机上使用还是太“重”了,然后就想用docker搭建,研究了半天搭建PHP web项目,结果发现已经有成品在Docker Hub上,社区的力量还是强大。

拉取镜像

1
docker pull acgpiano/sqli-labs

根据镜像提供的指令,执行

1
docker run -dt --name sqli-lab -p [PORT1]:80 -p [POST2]:3306 acgpiano/sqli-labs:latest

[POST1]处修改成本地空闲端口即可,为Web服务。[POST2]为MySQL服务。

打开127.0.0.1:[POST1],选择Setup/reset Database for labs初始化Database

image-20230406184158775

接着我们还需要设置MySQL允许远程连接,以便我们在主机学习MySQL的结构时使用。

首先我们需要进入Docker的Shell内,执行以下指令进入MySQL

1
mysql -u root -p

切换到MySQL Database

1
use mysql;

开启远程访问权限

1
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '[PASSWORD]';

[PASSWORD]修改成远程连接的密码。此处的密码不会影响本地连接的密码。

在你的数据库管理工具中测试

image-20230406190326338