0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何针对Mysql漏洞测试您自己的Web服务器

454398 来源:wv 2019-09-26 15:31 次阅读

第1步:设置测试环境

要测试代码,您应该设置一个测试环境。可以在计算机上使用xampp或lampp完成此操作。当然,您可以自己用php设置一个Apache网络服务器。

您将需要一个网络服务器,一个mysql数据库和一个运行中的php解释器来执行代码。

步骤2:示例数据库

对于我们的测试案例,我们使用一个非常基本的数据库,其中有两个用户。使用md5算法保护密码。只需在数据库上运行以下mysql代码即可创建表:

SET SQL_MODE = “NO_AUTO_VALUE_ON_ZERO”;

SET AUTOCOMMIT = 0;

START TRANSACTION;

SET time_zone = “+00:00”;

CREATE TABLE IF NOT EXISTS `user` (

`id` bigint(15) NOT NULL,

`email` varchar(255) NOT NULL,

`password` varchar(32) NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

INSERT INTO `user` (`id`, `email`, `password`) VALUES

(1, ‘admin@mysite.com’, ‘b655e3f4ae881514c4896b9cd707e4d2’),

(2, ‘guest@mysite.com’, ‘5d41402abc4b2a76b9719d911017c592’);

ALTER TABLE `user`

ADD PRIMARY KEY (`id`);

ALTER TABLE `user`

MODIFY `id` bigint(15) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=3;COMMIT;

步骤3:关于密码安全性的简短介绍

全世界的计算能力正在飞速增长,md5不再是强大的哈希算法。所使用的哈希是使用以下密码生成的:

b655e3f4ae881514c4896b9cd707e4d2 = top secret password that will never be cracked that fast

5d41402abc4b2a76b9719d911017c592 = hello

由于存在彩虹表之类的东西,即使google本身也是一个很好的密码破解机。当您搜索“ 5d41402abc4b2a76b9719d911017c592”时,第一个结果是明文密码。当您在Google中搜索“ b655e3f4ae881514c4896b9cd707e4d2”时,由于输入字符串太长而无法使用蛮力方法破解,因此您将不会获得任何结果。

因此:请使用在任何词典中都不会出现的长密码!/p》

步骤4:示例代码

如何针对Mysql漏洞测试您自己的Web服务器

出于测试原因,我编写了这个小脚本。它打开一个数据库连接,提供一个表单,并尝试在数据库中查找与您输入的凭据(电子邮件和密码)匹配的用户。只需将脚本保存在Web服务器上,然后将文件命名为“ mysql-injection.php”即可。当数据库名称不同时,可能必须为“ mysql_select_db”函数更新数据库名称:

error_reporting(E_ALL ^ E_DEPRECATED);

mysql_connect(‘localhost’, ‘root’, ‘’);

mysql_select_db(‘mysql-injection’);

if (!empty($_POST[‘email’]) && !empty($_POST[‘password’]))

{

$query = ‘SELECT * FROM `user` WHERE `email` = \’‘.$_POST[’email‘]。’\‘ AND `password` = \’‘.md5($_POST[’password‘])。’\‘’;

echo ‘Used query: ’,$query,‘’;

$resource = mysql_query($query);

$matches = mysql_num_rows($resource);

if ($matches 》 0)

{

$user = mysql_fetch_assoc($resource);

echo ‘Hello ’.$user[‘email’]。‘!’;

}

else

{

echo ‘Invalid credentials!’;

}

}

?》

Log in to get privileges!

Mail:

Password:

步骤5:测试脚本

要开始使用,只需在Web浏览器上调用脚本即可。在我的情况下,该网址为http://sand.box:8081/mysql-injection.php,因为我将“ sand.box”路由为“ 127.0.0.1”。您只需调用http://sand.box:8081/mysql-injection.php或http://sand.box:8081/mysql-injection.php即可使其正常工作。

我们现在可以使用以下凭据测试登录:

admin@mysite.com:top secret password that will never be cracked that fast

guest@mysite.com:hello

如您在屏幕快照中所见,脚本返回“ Hello ”以证明您的登录凭据正确。使用任何其他组合可获得“无效的凭据!”错误。

这是有效的用户身份验证。但是它非常危险。请查看下一步,了解原因。

步骤6:幕后花絮

由于脚本输出了用于选择正确用户的数据库查询,因此您可以看到背后发生了什么现场。当您以管理员身份登录时,以下查询:

‘SELECT * FROM `user` WHERE `email` = \’‘.$_POST[’email‘]。’\‘ AND `password` = \’‘.md5($_POST[’password‘])。’\‘’

计算为:

‘SELECT * FROM `user` WHERE `email` = \’admin@mysite.com\‘ AND `password` = \’‘.md5(’top secret password that will never be cracked that fast‘)。’\‘’

,然后计算为:

‘SELECT * FROM `user` WHERE `email` = \’admin@mysite.com\‘ AND `password` = \’b655e3f4ae881514c4896b9cd707e4d2\‘’

,发送到mysql数据库的是:

SELECT * FROM `user` WHERE `email` = ‘admin@mysite.com’ AND `password` = ‘b655e3f4ae881514c4896b9cd707e4d2’

因此,只需通过电子邮件地址和密码选择一个用户。在这种情况下,这是对邮件验证的可靠期望。变量$ _POST [‘email’]在附加到查询之前是不安全的,因此我们可以在此处注入很多邪恶的东西。 $ _POST [‘password’]变量在被隐式存储到数据库查询之前被传递给md5(),因此这是“意外的安全”,因为md5()仅返回数字和字符,没有任何东西会使我们的查询崩溃。 》

步骤7:破解!

正如我们在上一步中了解到的那样,$ _ POST [‘email’]是我们的后门。因此,当您输入以下电子邮件时,您可以以所需的任何用户身份登录。对于ID为1的用户:

test@test.de‘ OR `id` = 1 OR 1 = ’

对于ID为2的用户:

test@test.de‘ OR `id` = 2 OR 1 = ’

如您所见,使用的mysql查询如下:

SELECT * FROM `user` WHERE `email` = ‘test@test.de’ OR `id` = 1 OR 1 = ‘’ AND `password` = ‘098f6bcd4621d373cade4e832627b4f6’

由于查询中没有括号,因此我们可以通过在电子邮件中传递一个‘来停止字符串。之后,我们可以修改查询本身。因此,我们仅添加另一个与用户ID相关的“ OR”条件。这使电子邮件和密码已过时,因为一旦“ OR”条件为真,mysql就会停止检查条件。因此,如果我们的数据库中有一个ID为“ 1”的用户,我们便已登录。

步骤8:保护您的代码

要确保此代码安全,只需转义用户输入即可。例如,可以使用mysql_real_escape_string方法来完成此操作。另一个功能可能是斜杠。因此,“安全”解决方案将使用:

mysql_real_escape_string($_POST[’email‘])

而不是

$_POST[’email‘]

所以这是最终的php代码:

$query = ’SELECT * FROM `user` WHERE `email` = \‘’.mysql_real_escape_string($_POST[‘email’])。‘\’ AND `password` = \‘’.md5($_POST[‘password’])。‘\’‘;

计算的查询为:

SELECT * FROM `user` WHERE `email` = ’test@test.de\‘ OR `id` = 1 OR 1 = \’‘ AND `password` = ’098f6bcd4621d373cade4e832627b4f6‘

因此,您可以看到,字符串中的单引号现在已转义,不再结束mysql字符串。这将导致查询搜索以下电子邮件地址:

test@test.de\’ OR `id` = 1 OR 1 = \‘

当然,这将失败,因为数据库中没有匹配的电子邮件。

第9步:仅仅为了获得一个想法

编写此指令是为了在一个非常基本的情况下获得mysql注入的想法。在2015年,您不会自己编写php应用程序,而是使用可以为您处理大部分安全性和数据库内容的框架和库。但是您应该知道在幕后发生了什么事,以便快速,安全地编写代码。

例如,一个好的解决方案是使用symfony2框架。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Web服务器
    +关注

    关注

    0

    文章

    138

    浏览量

    24399
  • 漏洞
    +关注

    关注

    0

    文章

    204

    浏览量

    15368
收藏 人收藏

    评论

    相关推荐

    香港云服务器怎么部署MySQL数据库?

    在香港云服务器上部署MySQL数据库的步骤如下: 步骤 1: 更新软件包列表 首先,确保软件包列表是最新的。在终端中执行以下命令: sudo apt update 步骤 2: 安装 MySQL
    的头像 发表于 11-14 16:15 159次阅读

    GPU服务器和传统的服务器有什么区别

    GPU服务器与传统的服务器在多个方面存在显著差异,主机推荐小编为整理发布GPU服务器和传统的服务器有什么区别,以下是对这些差异的详细分析。
    的头像 发表于 11-07 11:05 199次阅读

    如何测试SMTP服务器功能

    在开始测试SMTP服务器功能之前,了解其重要性是关键。SMTP服务器是电子邮件系统的核心,负责邮件的发送和接收。如果SMTP服务器出现问题,可能会导致邮件延迟、丢失或无法发送,影响企业
    的头像 发表于 10-30 17:31 659次阅读

    新加坡服务器的速度测试方法有哪些

    输入ping加上服务器的IP地址或域名,然后观察返回的结果,包括延迟和丢包情况。较低的响应时间表示较快的访问速度。 Traceroute测试: Traceroute命令用于追踪数据包从的设备到
    的头像 发表于 10-14 14:55 159次阅读

    使用NS1串口服务器HTTP模式上传服务器数据

    HTTP协议工作于客户端-服务端架构之上。浏览作为HTTP客户端通过URL向HTTP服务端即Web服务器发送所有请求。
    的头像 发表于 08-30 12:36 316次阅读
    使用NS1串口<b class='flag-5'>服务器</b>HTTP模式上传<b class='flag-5'>服务器</b>数据

    常见的服务器容器和漏洞类型汇总

    常见的服务器容器包括KubeSphere、Tomcat、Nginx、Apache等,它们在提供便捷的服务部署和灵活的网络功能的同时,也可能存在着一定的安全风险。这些容器的漏洞可能导致数据泄露、权限被非授权访问甚至系统被完全控制。
    的头像 发表于 08-29 10:39 214次阅读

    如何在阿里ECS服务器上架设自己的OpenVPN服务器

    需要自己架设服务器,让现场的IR615路由连接自己服务器。能通过自己
    发表于 07-25 06:14

    如何使用espconn api实现一个Web服务器

    我正在尝试使用 espconn api 实现一个 Web 服务器。 在一些请求之后,我收到将此错误(err1,超过最大时间值)写入 uart,下一个espconn_send导致致命异常 (28)。 没有关于此的文档... 我该如何解决这个问题?
    发表于 07-18 07:46

    服务测试web测试吗为什么

    服务测试Web测试是两个不同的概念,但它们在软件开发和测试过程中是相互关联的。本文将详细解释这两个概念以及它们之间的关系。
    的头像 发表于 05-30 15:30 598次阅读

    接口测试怎么测多个服务器连接

    接口测试是软件开发过程中的一个重要环节,用于验证系统组件之间的交互是否符合预期。在多服务器环境中,接口测试的复杂性会增加,因为需要考虑服务器之间的连接和通信。本文将详细介绍如何在多
    的头像 发表于 05-30 15:16 414次阅读

    服务器的特点

    服务器是一种基于云计算技术的服务器服务,它提供了可灵活扩展的计算资源和环境。Rak部落小编为整理发布云服务器的特点,希望对您有帮助。
    的头像 发表于 04-09 09:30 426次阅读

    服务器是干什么的

     云服务器是干什么的?很多小白用户会有疑惑,今天小编为整理云服务器是干什么的相关资料,希望对了解云服务器是干什么的有帮助。
    的头像 发表于 02-18 09:58 1487次阅读

    站群服务器和大宽带服务器选哪个好

    站群服务器和大宽带服务器是两种不同类型的服务器,各有其特点和适用场景。小编为整理了站群服务器和大宽带
    的头像 发表于 01-05 09:52 392次阅读

    什么是web服务器?如何选择服务器配置?

    Web服务器是一种软件或硬件设备,用于托管和提供网页内容。它接收客户端(如浏览)发送的HTTP请求,并返回相应的网页内容或其他资源,以实现更高的性能和可靠性。它是网站和应用程序在互联网上构建和交付
    的头像 发表于 01-03 15:25 1092次阅读

    服务器数据恢复-华为ECS云服务器数据恢复案例

    服务器数据恢复环境: 华为ECS云服务器,linux操作系统,mysql数据库(innodb引擎)。作为网站服务器使用。 云服务器
    的头像 发表于 12-27 15:03 1006次阅读
    <b class='flag-5'>服务器</b>数据恢复-华为ECS云<b class='flag-5'>服务器</b>数据恢复案例