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\bin
8. D:\phpStudy\MySQL\bin>mysql.exe -uroot -proot
9. Welcome to the MySQL monitor. Commands end with ; or \g.
10. Your MySQL connection id is 82
11. 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 its
16. affiliates. Other names may be trademarks of their respective
17. 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 changed
3. 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 exist
3. 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