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 所示。

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

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

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

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

图 - 5
步骤二:安装 PHP 调试环境的程序集成包 phpStudy
1)安装 Microsoft Visual C++ 2008 Redistributable,如图 - 6 所示。

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

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

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

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

图 - 10
步骤三:安装 Web 安全渗透测试靶场 Pikachu、SQLi-Labs、news
1)解压 news 靶场文件至 “D:\phpStudy\WWW” 文件夹下,如图 - 11 所示。
注意:本案例以 news 靶场为例,可参照来部署 Pikachu、SQLi-Labs 靶场。

图 - 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。

图 - 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。

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

图 - 14
5)打开 Firefox 浏览器,输入本机 IP 地址访问靶场网站,如图 - 15 所示。
注意:本案例电脑 IP 地址为 192.168.60.128,需要根据你实际部署的环境调整。

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

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

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

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

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

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

图 - 21
步骤五:访问靶场 Pikachu、SQLi-Labs、CMS
1)打开浏览器,输入靶机 IP 地址访问靶场网站,如图 - 22 所示。
注意:本案例电脑 IP 地址为 192.168.60.128,需要根据你实际部署的环境调整。

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

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

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

图 - 25
2 MySQL 基础
2.1 问题
本例要求使用 MySQL 语句进行数据库操作,相关说明如下:
1)连接到本机数据库服务
2)查询当前服务器上所有数据库名称
3)查询 pikachu 数据库中所有表的名称
4)查询 pikachu.users 表中所有记录信息
5)查询 pikachu.member 表中所有男生的记录信息
6)查询 pikachu.member 表中手机号码是 136 开头的记录信息
2.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:连接到本机数据库服务
1. Microsoft Windows \[版本 6.1.7601\]2. 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。4. C:\Users\Administrator>d:6. D:\\>cd phpStudy\MySQL\bin8. D:\phpStudy\MySQL\bin>mysql.exe -uroot -proot9. Welcome to the MySQL monitor. Commands end with ; or \g.10. Your MySQL connection id is 8211. Server version: 5.5.53 MySQL Community Server (GPL)13. Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.15. Oracle is a registered trademark of Oracle Corporation and/or its16. affiliates. Other names may be trademarks of their respective17. owners.19. Type 'help;' or '\\h' for help. Type '\\c' to clear the current input statement.21. mysql>
步骤二:查询当前服务器上所有数据库名称
1. mysql> show databases;2. +--------------------+3. | Database |4. +--------------------+5. | information_schema |6. | challenges |7. | mysql |8. | news |9. | performance_schema |10. | pikachu |11. | security |12. | test |13. +--------------------+14. 8 rows in set (0.00 sec)16. mysql>
步骤三:查询 pikachu 数据库中所有表的名称
1. mysql> use pikachu;2. Database changed3. mysql> show tables;4. +-------------------+5. | Tables\_in\_pikachu |6. +-------------------+7. | httpinfo |8. | member |9. | message |10. | users |11. | xssblind |12. +-------------------+13. 5 rows in set (0.00 sec)15. mysql>
步骤四:查询 pikachu.users 表中所有记录信息
1. mysql> select * from pikachu.user;2. ERROR 1146 (42S02): Table 'pikachu.user' doesn't exist3. mysql> select * from pikachu.users;4. +----+----------+----------------------------------+-------+5. | id | username | password | level |6. +----+----------+----------------------------------+-------+7. | 1 | admin | e10adc3949ba59abbe56e057f20f883e | 1 |8. | 2 | pikachu | 670b14728ad9902aecba32e22fa4f6bd | 2 |9. | 3 | test | e99a18c428cb38d5f260853678922e03 | 3 |10. +----+----------+----------------------------------+-------+11. 3 rows in set (0.00 sec)13. mysql>
步骤五:查询 pikachu.member 表中所有男生的记录信息
1. mysql> select * from pikachu.member;2. +----+----------+----------------------------------+------+-------------+-----------------------+-------------------+3. | id | username | pw | sex | phonenum | address | email |4. +----+----------+----------------------------------+------+-------------+-----------------------+-------------------+5. | 1 | vince | e10adc3949ba59abbe56e057f20f883e | boy | 18626545453 | chain | vince@pikachu.com |6. | 2 | allen | e10adc3949ba59abbe56e057f20f883e | boy | 13676767767 | nba 76 | allen@pikachu.com |7. | 3 | kobe | e10adc3949ba59abbe56e057f20f883e | boy | 15988767673 | nba lakes | kobe@pikachu.com |8. | 4 | grady | e10adc3949ba59abbe56e057f20f883e | boy | 13676765545 | nba hs | grady@pikachu.com |9. | 5 | kevin | e10adc3949ba59abbe56e057f20f883e | boy | 13677676754 | Oklahoma City Thunder | kevin@pikachu.com |10. | 6 | lucy | e10adc3949ba59abbe56e057f20f883e | girl | 12345678922 | usa | lucy@pikachu.com |11. | 7 | lili | e10adc3949ba59abbe56e057f20f883e | girl | 18656565545 | usa | lili@pikachu.com |12. +----+----------+----------------------------------+------+-------------+-----------------------+-------------------+13. 7 rows in set (0.00 sec)15. mysql> select * from pikachu.member where sex="boy";16. +----+----------+----------------------------------+-----+-------------+-----------------------+-------------------+17. | id | username | pw | sex | phonenum | address | email |18. +----+----------+----------------------------------+-----+-------------+-----------------------+-------------------+19. | 1 | vince | e10adc3949ba59abbe56e057f20f883e | boy | 18626545453 | chain | vince@pikachu.com |20. | 2 | allen | e10adc3949ba59abbe56e057f20f883e | boy | 13676767767 | nba 76 | allen@pikachu.com |21. | 3 | kobe | e10adc3949ba59abbe56e057f20f883e | boy | 15988767673 | nba lakes | kobe@pikachu.com |22. | 4 | grady | e10adc3949ba59abbe56e057f20f883e | boy | 13676765545 | nba hs | grady@pikachu.com |23. | 5 | kevin | e10adc3949ba59abbe56e057f20f883e | boy | 13677676754 | Oklahoma City Thunder | kevin@pikachu.com |24. +----+----------+----------------------------------+-----+-------------+-----------------------+-------------------+25. 5 rows in set (0.00 sec)27. mysql>
步骤六:查询 pikachu.member 表中手机号码是 136 开头的记录信息
1. mysql> select * from pikachu.member where phonenum like "136%";2. +----+----------+----------------------------------+-----+-------------+-----------------------+-------------------+3. | id | username | pw | sex | phonenum | address | email |4. +----+----------+----------------------------------+-----+-------------+-----------------------+-------------------+5. | 2 | allen | e10adc3949ba59abbe56e057f20f883e | boy | 13676767767 | nba 76 | allen@pikachu.com |6. | 4 | grady | e10adc3949ba59abbe56e057f20f883e | boy | 13676765545 | nba hs | grady@pikachu.com |7. | 5 | kevin | e10adc3949ba59abbe56e057f20f883e | boy | 13677676754 | Oklahoma City Thunder | kevin@pikachu.com |8. +----+----------+----------------------------------+-----+-------------+-----------------------+-------------------+9. 3 rows in set (0.00 sec)11. mysql>
3 MySQL 常用函数
3.1 问题
本例要求使用 MySQL 函数进行数据库高级操作,相关说明如下:
1)查询当前数据库名称的长度
2)查询当前数据库名称的第 2、3 个字符
3)查询 pikachu.member 表中所有用户姓名,并拼接成一行
4)如果用户 “lili” 在 pikachu.member 表中返回“666”,否则返回“555”
3.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:查询当前数据库名称的长度
1. mysql> select database();2. +------------+3. | database() |4. +------------+5. | pikachu |6. +------------+7. 1 row in set (0.00 sec)9. mysql> select length(database());10. +--------------------+11. | length(database()) |12. +--------------------+13. | 7 |14. +--------------------+15. 1 row in set (0.00 sec)17. mysql>
步骤二:查询当前数据库名称的第 2、3 个字符
1. mysql> select substr(database(),2,2);2. +------------------------+3. | substr(database(),2,2) |4. +------------------------+5. | ik |6. +------------------------+7. 1 row in set (0.00 sec)9. mysql>
步骤三:查询 pikachu.member 表中所有用户姓名,并拼接成一行
1. mysql> select username from pikachu.member;2. +----------+3. | username |4. +----------+5. | vince |6. | allen |7. | kobe |8. | grady |9. | kevin |10. | lucy |11. | lili |12. +----------+13. 7 rows in set (0.00 sec)15. mysql> select group_concat(username) from pikachu.member;16. +----------------------------------------+17. | group_concat(username) |18. +----------------------------------------+19. | vince,allen,kobe,grady,kevin,lucy,lili |20. +----------------------------------------+21. 1 row in set (0.00 sec)23. mysql>
步骤四:如果用户 “lili” 在 pikachu.member 表中返回“666”,否则返回“555”
1. mysql> select if('lili' in (select username from pikachu.member),666,555);2. +-------------------------------------------------------------+3. | if('lili' in (select username from pikachu.member),666,555) |4. +-------------------------------------------------------------+5. | 666 |6. +-------------------------------------------------------------+7. 1 row in set (0.00 sec)9. mysql>
https://tts.tmooc.cn/ttsPage/NTD/NTDTN202109/INJECTION/DAY01/CASE/01/index.html
