Top

  1. 部署 SQL 注入靶场
  2. MySQL 基础
  3. MySQL 常用函数

1 部署 SQL 注入靶场

1.1 问题

本例要求掌握 SQL 注入靶场的部署安装过程,在虚拟机环境下完成。

1)安装服务器系统 Windows Server 2008 R2

2)安装 PHP 调试环境的程序集成包 phpStudy

3)安装 Web 安全渗透测试靶场 Pikachu、SQLi-Labs、CMS

4)安装 Kali Linux

5)访问靶场 Pikachu、SQLi-Labs、CMS

1.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:安装服务器系统 Windows Server 2008 R2

1)安装并打开 VMware Workstation,如图 - 1 所示。

CASE - 图1

图 - 1

2)创建 Windows Server 2008 R2 虚拟机,配置内存 2G、硬盘 500G、网络适配器 NAT,如图 - 2 所示。

CASE - 图2

图 - 2

3)在 “选择要安装的操作系统” 界面,选择 Windows Server 2008 R2 standard(完全安装),如图 - 3 所示。

CASE - 图3

图 - 3

4)在 “您想将 Windows 安装在何处?” 界面,创建 2 个分区并格式化,选中 “分区 2” 进行安装,如图 - 4 所示。

CASE - 图4

图 - 4

5)进入系统后,安装 VMware tools(增强工具),如图 - 5 所示。

CASE - 图5

图 - 5

步骤二:安装 PHP 调试环境的程序集成包 phpStudy

1)安装 Microsoft Visual C++ 2008 Redistributable,如图 - 6 所示。

CASE - 图6

图 - 6

2)安装 phpStudy 到 “D:\phpStudy” 文件夹下,如图 - 7 所示。

CASE - 图7

图 - 7

3)单击 “是” 进行初始化,如图 - 8 所示。

CASE - 图8

图 - 8

4)切换版本为 “php-5.2.17 + Apache”,配置运行模式为 “系统服务”,如图 - 9 所示。

CASE - 图9

图 - 9

5)依次单击 “其他选项菜单 — phpStudy 设置”,勾选 “允许目录列表”,如图 - 10 所示。

CASE - 图10

图 - 10

步骤三:安装 Web 安全渗透测试靶场 Pikachu、SQLi-Labs、news

1)解压 news 靶场文件至 “D:\phpStudy\WWW” 文件夹下,如图 - 11 所示。

注意:本案例以 news 靶场为例,可参照来部署 Pikachu、SQLi-Labs 靶场。

CASE - 图11

图 - 11

2)修改 “D:\phpStudy\WWW\news\include\database.inc.php” 配置数据库连接配置用户名 root 密码 root,如图 - 12 所示。

注意:

Pikachu 靶场数据库连接,配置 D:\phpStudy\WWW\pikachu\inc\config.inc.php

SQLi-Labs 靶场数据库连接,配置 D:\phpStudy\WWW\sqli-labs\sql-connections\db-creds.inc。

CASE - 图12

图 - 12

3)打开 “phpStudy 管理窗口 — MySQL 管理器 — phpMyAdmin” 数据库管理工具,导入数据库“D:\phpStudy\WWW\news\news.sql”,如图 - 13 所示。

注意:

Pikachu 靶场数据库初始化,访问http://IP 地址 / pikachu/install.php

SQLi-Labs 靶场数据库初始化,访问http://IP 地址 / sqli-labs/sql-connections/setup-db.php。

CASE - 图13

图 - 13

4)安装 Firefox 火狐浏览器,按默认安装即可,如图 - 14 所示。

CASE - 图14

图 - 14

5)打开 Firefox 浏览器,输入本机 IP 地址访问靶场网站,如图 - 15 所示。

注意:本案例电脑 IP 地址为 192.168.60.128,需要根据你实际部署的环境调整。

CASE - 图15

图 - 15

6)单击 news 链接,打开靶场页面,如图 - 16 所示。

CASE - 图16

图 - 16

步骤四:安装 Kali Linux

1)创建 Debian10.x 64 虚拟机,并安装 Kaki Linux,如图 - 17 所示。

CASE - 图17

图 - 17

2)开机后,按默认选择 “Graphical install”(图形界面安装)回车并开始安装,如图 - 18 所示。

CASE - 图18

图 - 18

3)在 “磁盘分区” 界面,点选 “是” 以将改动写入磁盘,如图 - 19 所示。

CASE - 图19

图 - 19

4)在 “安装 GRUB 启动引导器” 界面,选择“/dev/sda”, 如图 - 20 所示。

CASE - 图20

图 - 20

5)安装成功后,输入刚才创建的用户名和密码登录,如图 - 21 所示。

CASE - 图21

图 - 21

步骤五:访问靶场 Pikachu、SQLi-Labs、CMS

1)打开浏览器,输入靶机 IP 地址访问靶场网站,如图 - 22 所示。

注意:本案例电脑 IP 地址为 192.168.60.128,需要根据你实际部署的环境调整。

CASE - 图22

图 - 22

2)打开 news 靶场页面,如图 - 23 所示。

CASE - 图23

图 - 23

3)打开 Pikachu 靶场页面,如图 - 24 所示。

CASE - 图24

图 - 24

4)打开 SQLi-Labs 靶场页面,如图 - 25 所示。

CASE - 图25

图 - 25

2 MySQL 基础

2.1 问题

本例要求使用 MySQL 语句进行数据库操作,相关说明如下:

1)连接到本机数据库服务

2)查询当前服务器上所有数据库名称

3)查询 pikachu 数据库中所有表的名称

4)查询 pikachu.users 表中所有记录信息

5)查询 pikachu.member 表中所有男生的记录信息

6)查询 pikachu.member 表中手机号码是 136 开头的记录信息

2.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:连接到本机数据库服务

  1. 1. Microsoft Windows \[版本 6.1.7601\]
  2. 2. 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
  3. 4. C:\Users\Administrator>d:
  4. 6. D:\\>cd phpStudy\MySQL\bin
  5. 8. D:\phpStudy\MySQL\bin>mysql.exe -uroot -proot
  6. 9. Welcome to the MySQL monitor. Commands end with ; or \g.
  7. 10. Your MySQL connection id is 82
  8. 11. Server version: 5.5.53 MySQL Community Server (GPL)
  9. 13. Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
  10. 15. Oracle is a registered trademark of Oracle Corporation and/or its
  11. 16. affiliates. Other names may be trademarks of their respective
  12. 17. owners.
  13. 19. Type 'help;' or '\\h' for help. Type '\\c' to clear the current input statement.
  14. 21. mysql>

步骤二:查询当前服务器上所有数据库名称

  1. 1. mysql> show databases;
  2. 2. +--------------------+
  3. 3. | Database |
  4. 4. +--------------------+
  5. 5. | information_schema |
  6. 6. | challenges |
  7. 7. | mysql |
  8. 8. | news |
  9. 9. | performance_schema |
  10. 10. | pikachu |
  11. 11. | security |
  12. 12. | test |
  13. 13. +--------------------+
  14. 14. 8 rows in set (0.00 sec)
  15. 16. mysql>

步骤三:查询 pikachu 数据库中所有表的名称

  1. 1. mysql> use pikachu;
  2. 2. Database changed
  3. 3. mysql> show tables;
  4. 4. +-------------------+
  5. 5. | Tables\_in\_pikachu |
  6. 6. +-------------------+
  7. 7. | httpinfo |
  8. 8. | member |
  9. 9. | message |
  10. 10. | users |
  11. 11. | xssblind |
  12. 12. +-------------------+
  13. 13. 5 rows in set (0.00 sec)
  14. 15. mysql>

步骤四:查询 pikachu.users 表中所有记录信息

  1. 1. mysql> select * from pikachu.user;
  2. 2. ERROR 1146 (42S02): Table 'pikachu.user' doesn't exist
  3. 3. mysql> select * from pikachu.users;
  4. 4. +----+----------+----------------------------------+-------+
  5. 5. | id | username | password | level |
  6. 6. +----+----------+----------------------------------+-------+
  7. 7. | 1 | admin | e10adc3949ba59abbe56e057f20f883e | 1 |
  8. 8. | 2 | pikachu | 670b14728ad9902aecba32e22fa4f6bd | 2 |
  9. 9. | 3 | test | e99a18c428cb38d5f260853678922e03 | 3 |
  10. 10. +----+----------+----------------------------------+-------+
  11. 11. 3 rows in set (0.00 sec)
  12. 13. mysql>

步骤五:查询 pikachu.member 表中所有男生的记录信息

  1. 1. mysql> select * from pikachu.member;
  2. 2. +----+----------+----------------------------------+------+-------------+-----------------------+-------------------+
  3. 3. | id | username | pw | sex | phonenum | address | email |
  4. 4. +----+----------+----------------------------------+------+-------------+-----------------------+-------------------+
  5. 5. | 1 | vince | e10adc3949ba59abbe56e057f20f883e | boy | 18626545453 | chain | vince@pikachu.com |
  6. 6. | 2 | allen | e10adc3949ba59abbe56e057f20f883e | boy | 13676767767 | nba 76 | allen@pikachu.com |
  7. 7. | 3 | kobe | e10adc3949ba59abbe56e057f20f883e | boy | 15988767673 | nba lakes | kobe@pikachu.com |
  8. 8. | 4 | grady | e10adc3949ba59abbe56e057f20f883e | boy | 13676765545 | nba hs | grady@pikachu.com |
  9. 9. | 5 | kevin | e10adc3949ba59abbe56e057f20f883e | boy | 13677676754 | Oklahoma City Thunder | kevin@pikachu.com |
  10. 10. | 6 | lucy | e10adc3949ba59abbe56e057f20f883e | girl | 12345678922 | usa | lucy@pikachu.com |
  11. 11. | 7 | lili | e10adc3949ba59abbe56e057f20f883e | girl | 18656565545 | usa | lili@pikachu.com |
  12. 12. +----+----------+----------------------------------+------+-------------+-----------------------+-------------------+
  13. 13. 7 rows in set (0.00 sec)
  14. 15. mysql> select * from pikachu.member where sex="boy";
  15. 16. +----+----------+----------------------------------+-----+-------------+-----------------------+-------------------+
  16. 17. | id | username | pw | sex | phonenum | address | email |
  17. 18. +----+----------+----------------------------------+-----+-------------+-----------------------+-------------------+
  18. 19. | 1 | vince | e10adc3949ba59abbe56e057f20f883e | boy | 18626545453 | chain | vince@pikachu.com |
  19. 20. | 2 | allen | e10adc3949ba59abbe56e057f20f883e | boy | 13676767767 | nba 76 | allen@pikachu.com |
  20. 21. | 3 | kobe | e10adc3949ba59abbe56e057f20f883e | boy | 15988767673 | nba lakes | kobe@pikachu.com |
  21. 22. | 4 | grady | e10adc3949ba59abbe56e057f20f883e | boy | 13676765545 | nba hs | grady@pikachu.com |
  22. 23. | 5 | kevin | e10adc3949ba59abbe56e057f20f883e | boy | 13677676754 | Oklahoma City Thunder | kevin@pikachu.com |
  23. 24. +----+----------+----------------------------------+-----+-------------+-----------------------+-------------------+
  24. 25. 5 rows in set (0.00 sec)
  25. 27. mysql>

步骤六:查询 pikachu.member 表中手机号码是 136 开头的记录信息

  1. 1. mysql> select * from pikachu.member where phonenum like "136%";
  2. 2. +----+----------+----------------------------------+-----+-------------+-----------------------+-------------------+
  3. 3. | id | username | pw | sex | phonenum | address | email |
  4. 4. +----+----------+----------------------------------+-----+-------------+-----------------------+-------------------+
  5. 5. | 2 | allen | e10adc3949ba59abbe56e057f20f883e | boy | 13676767767 | nba 76 | allen@pikachu.com |
  6. 6. | 4 | grady | e10adc3949ba59abbe56e057f20f883e | boy | 13676765545 | nba hs | grady@pikachu.com |
  7. 7. | 5 | kevin | e10adc3949ba59abbe56e057f20f883e | boy | 13677676754 | Oklahoma City Thunder | kevin@pikachu.com |
  8. 8. +----+----------+----------------------------------+-----+-------------+-----------------------+-------------------+
  9. 9. 3 rows in set (0.00 sec)
  10. 11. mysql>

3 MySQL 常用函数

3.1 问题

本例要求使用 MySQL 函数进行数据库高级操作,相关说明如下:

1)查询当前数据库名称的长度

2)查询当前数据库名称的第 2、3 个字符

3)查询 pikachu.member 表中所有用户姓名,并拼接成一行

4)如果用户 “lili” 在 pikachu.member 表中返回“666”,否则返回“555”

3.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:查询当前数据库名称的长度

  1. 1. mysql> select database();
  2. 2. +------------+
  3. 3. | database() |
  4. 4. +------------+
  5. 5. | pikachu |
  6. 6. +------------+
  7. 7. 1 row in set (0.00 sec)
  8. 9. mysql> select length(database());
  9. 10. +--------------------+
  10. 11. | length(database()) |
  11. 12. +--------------------+
  12. 13. | 7 |
  13. 14. +--------------------+
  14. 15. 1 row in set (0.00 sec)
  15. 17. mysql>

步骤二:查询当前数据库名称的第 2、3 个字符

  1. 1. mysql> select substr(database(),2,2);
  2. 2. +------------------------+
  3. 3. | substr(database(),2,2) |
  4. 4. +------------------------+
  5. 5. | ik |
  6. 6. +------------------------+
  7. 7. 1 row in set (0.00 sec)
  8. 9. mysql>

步骤三:查询 pikachu.member 表中所有用户姓名,并拼接成一行

  1. 1. mysql> select username from pikachu.member;
  2. 2. +----------+
  3. 3. | username |
  4. 4. +----------+
  5. 5. | vince |
  6. 6. | allen |
  7. 7. | kobe |
  8. 8. | grady |
  9. 9. | kevin |
  10. 10. | lucy |
  11. 11. | lili |
  12. 12. +----------+
  13. 13. 7 rows in set (0.00 sec)
  14. 15. mysql> select group_concat(username) from pikachu.member;
  15. 16. +----------------------------------------+
  16. 17. | group_concat(username) |
  17. 18. +----------------------------------------+
  18. 19. | vince,allen,kobe,grady,kevin,lucy,lili |
  19. 20. +----------------------------------------+
  20. 21. 1 row in set (0.00 sec)
  21. 23. mysql>

步骤四:如果用户 “lili” 在 pikachu.member 表中返回“666”,否则返回“555”

  1. 1. mysql> select if('lili' in (select username from pikachu.member),666,555);
  2. 2. +-------------------------------------------------------------+
  3. 3. | if('lili' in (select username from pikachu.member),666,555) |
  4. 4. +-------------------------------------------------------------+
  5. 5. | 666 |
  6. 6. +-------------------------------------------------------------+
  7. 7. 1 row in set (0.00 sec)
  8. 9. mysql>

https://tts.tmooc.cn/ttsPage/NTD/NTDTN202109/INJECTION/DAY01/CASE/01/index.html