PHP 网站搭建和 SQLMAP 工具使用
实验目的
- 了解搭建网站的一般流程,学习使用 PHPStudy 来搭建网站。
- 了解 SQLMap 工具的原理和应用,利用 sqlmap 寻找数据库的注入漏洞。
实验内容
- 使用 PhpStudy 和金戈企业建站框架搭建网站服务。
- 使用 sqlmap 工具扫描该网站,寻找 sql 漏洞利用点。
实验环境
实验要求
- 将服务器的端口更换为 8080,域名修改为
www.test.com
。网站搭建成功后,通过在浏览器中访问www.test.com
访问这个网站。 - 通过端口扫描工具扫描整个网站所开设的端口。看网站是否在 8080 端口提供服务。
根据实验指导书进行操作
实验步骤和结果
网站准备
-
安装 PHPStudy
- 点击桌面上的 phpstudysetup 安装包,并为其指定一个合适的解压位置。等待其安装完毕
-
配置 PHPStudy
- 设置好网站目录、端口,然后点击 “应用”。Apache 会重启
- 设置好网站目录、端口,然后点击 “应用”。Apache 会重启
-
配置域名
- 从主界面中进入站点域名管理界面。
- 配置好域名后,点击 “新增”。
- 修改 hosts 文件,将刚刚起好的域名解析到本地
- 测试访问效果
-
将网站切换到 8080 端口上
-
打开域名管理界面,把域名改为要求的
www.test.com
,端口设为8080
,然后点击修改。 -
相应的 host 中的域名要变一下。
-
Apache 中的 httpd 端口也要修改。
-
此时再直接输入
www.test.com
就进不去了,得加上端口号才可以访问那个网站。 -
此时进行端口扫描,会发现网站的 8080 端口是开启的。
192.168.235.138 是 web 服务器的 ip 地址
-
SQLMap 初使用
Sqlmap 是一款由 Python 语言开发的自动化 SQL 注入工具,其主要功能是扫描、发现并利用给定的 URL 的 SQL 注入漏洞。
本次我们使用 Sqlmap 工具寻找前一步搭建好的网站系统的 SQL 注入漏洞。
-
首先找到一处注入点
ry.php?ry_id=?
。用引号测试下 GET 参数的情况。发现返回了空白页面而没有报错。推断可能存在注入漏洞 -
上工具,首先测试该链接有无注入漏洞,用
-u url
命令sqlmap -u <url>
-
SQLmap 工具输出表明
ry.php
页面存在 GET 参数ry_id
注入漏洞,基于报错的注入,基于时间的盲注,联合注入方法均有效。还探测到了服务器的后端使用了 php5.4.45,Apache2.4.23,使用 MySQL 数据库版本高于 4.1,操作系统为 Windows。 -
接下来使用
–dbs
选项来查找在该服务器上运行的所有数据库的名称列表。相当于执行了一次show databases
的命令。sqlmap -u <url> --dbs
- 找到了 5 个数据库。对照服务器上的数据库列表,发现确实有这些数据库。
-
接下来,使用
--current-user
选项查找当前数据库的用户。sqlmap -u <url> --current-user
- 是
root@localhost
,权限相当大,可以想象这个数据库中拥有相当重要的数据。
- 是
-
用
--tables
选项查看jnng
数据库中的所有表。相当于执行了一次show tables
命令。-D
选项确定数据库名称。sqlmap -u <url> -D jnng --tables
- root 表应该有比较有趣的东西。一会可以看看。
-
用
--columns
选项列出表的字段。-T
确定表名。sqlmap -u <url> -D jnng -T root --columns
- 发现了疑似用户名和密码的字段
root_name
和root_pass
,接下来我们要拿到这几个字段。
- 发现了疑似用户名和密码的字段
-
使用–dump 选项导出字段。-C 选项确定要导出的字段名。SQLmap 还会自动发现密码 hash 字段并自动使用内建的字典进行破解。
sqlmap -u <url> -D jnng -T root -C root_id,root_name,root_pass --dump
-
使用密码登录后台
www.test.com/isadmin/login.php
,发现可以登录,证明前一步从数据库取得的数据是正确的。后台网页显示有问题,但是没有报密码错误,证明可以登上
-
看看别的地方
附录(可选)
其他难点和坑点
- phpstudy 包含了 php5,6 和 7 三个版本,每个版本需要安装不同的 VC 运行库
- php5.3、5.4 和 apache 都是用 vc9 编译,电脑必须安装 vc9 运行库才能运行。
- php5.5、5.6 是 vc11 编译,如用 php5.5、5.6 必须安装 vc11 运行库。
- php7.0、7.1 是 vc14 编译,如用 php7.0、7.1 及以上版本必须安装 vc14 运行库。
- 利用 phpstudy 所建的网站文件夹及路径不能带有任何空格。
- 想要用别的虚拟机访问 windows server 服务器,需要在 server 端将防火墙配置好,具体是开启 80 端口、开启 ICMPv4-in,此时能 ping 通就差不多可以了。
- 这个网站还有 XSS 漏洞
怎么修复这个注入点
查看发生问题的 ry.php
源码。发现这样一段
1 | $ry_id = $_GET['ry_id']; |
root_alli
函数中直接进行了条件拼接
1 | $result = $conn->query('SELECT * FROM '.$tab.' where '.$zn.' = '.$in); |
GET 的 ry_id
未经过滤直接传入 root_alli
,造成了 SQL 语句的拼接。
解决方案:先过滤(my_yz()
调用了 addslashes
—— 常用的过滤操作)
1 | $ry_id = my_yz($ry_id); |