记录一次心脏滴血靶场实验过程

此文主要从几个方面记录本次心脏滴血的实验过程:

  1. 心脏滴血的攻击原理和效果

  2. 心脏滴血攻击过程复现

  3. 实验结果和现象分析

  4. 实验过程中遇到的问题以及解决方案

https://blog.csdn.net/caozhk/article/details/23738971

https://blog.csdn.net/yaofeiNO1/article/details/54428021

https://www.cnblogs.com/shengguang/p/11044899.html

1、心脏滴血的攻击原理和效果

1.1 攻击原理

心脏滴血攻击面向支持扩展心跳机制OpenSSL环境

​ a. OpenSSL环境:OpenSSL是SSL协议以及一系列加密算法的开源实现。

​ b. 扩展心跳机制:TLS(安全传输协议)位于传输层和应用层之间,提供数据安全加密。TLS心跳指的是用户向服务器发送数据包,服务器返回一个相同的数据包以确定彼此在线,以支持持续通信功能。DTLS(Datagram Transport Layer Security)数据包传输层安全协议。TLS不能用来保证UDP上传输的数据的安全,因此Datagram TLS试图在现存的TLS协议架构上提出扩展,使之支持UDP,即成为TLS的一个支持数据报传输的版本。DTLS1.0基于TLS1.1,DTLS1.2基于TLS1.2。

心脏滴血攻击的本质是内存缓冲区溢出漏洞

​ a. 用户向服务器发送的心跳数据中用两个字节表明有效负载数据长度,而服务器端OpenSSL将根据这个有效负载长度构造一个新的数据包会送给客户端用户。

​ b. OpenSSL在实现TLS和DTLS的心跳处理逻辑时,存在编码缺陷。OpenSSL的心跳处理逻辑没有检测心跳包中的长度字段是否和后续的数据字段相符合。这就可能造成缓冲区溢出,被攻击者利用。

​ c. 心脏出血漏洞主要通过攻击者模拟向服务器端发送自己编写的Heartbeat心跳数据包,主要是HeartbeatMessage的长度与payload的length进行匹配,若payload_length长度大于HeartbeatMessage的length,则会在服务器返回的response响应包中产生数据溢出,造成有用数据泄露。

1.2 攻击效果

攻击者可以利用缓冲区溢出,构造异常的数据包,来获取心跳数据所在的内存区域的后续数据。这些数据中可能包含了证书私钥,用户名,用户密码,用户邮箱等敏感信息。该漏洞允许攻击者从内存中读取多达64KB的数据。

2、心脏滴血攻击过程复现

2.1 实验环境

OpenSSL客户端:win10物理机

OpenSSL服务端:Ubuntu16.04虚拟机(Vmware+win10物理主机);OpenSSL初始版本1.0.2f

环境搭建目标:需要在虚拟机中搭建一个通过https安全协议的数据交互网站,同时虚拟机中的OpenSSL版本为含有心脏出血漏洞的版本。通过客户端即物理机命令行中运行心脏出血漏洞检测POC代码。

2.2 实验靶场环境搭建

2.2.1 更换OpenSSL版本

心脏出血漏洞必须在含有心跳扩展漏洞没有被修复的OpenSSL版本中存在。目前存在OpenSSL心血漏洞的OpenSSL版本有OpenSSL1.0.1,1.0.1a,1.0.1b,1.0.1c,1.0.1d,1.0.1e,1.0.1f,Beta 1 of OpenSSL1.0.2等。由于1.0.1f以及之后的OpenSSL可能被修复,因此实验过程我选择更为保守的1.0.1d版本的OpenSSL。

查看当前的OpenSSL版本;发现当前版本为1.0.2f
openssl version
安装指定版本OpenSSL,如1.0.1d
sudo apt-get install make
wget https://www.openssl.org/source/openssl-1.0.1d.tar.gz
tar -xzvf openssl-1.0.1d.tar.gz
cd openssl-1.0.1d
sudo ./config
sudo make install
sudo ln -sf /usr/local/ssl/bin/openssl `which openssl` (This will create a sym link to the new binaries), 这一步可能失败,替换 ‘which openssl’ 为 /usr/local/bin/openssl 再试一次
openssl version -v
2.2.2 搭建Web环境(单独安装Linux)

由于需要在虚拟机中搭建一个通过https安全协议的数据交互网站,OpenSSL只是一个通信协议,并不能直接被用来检测心脏滴血漏洞。因此需要配置Linux网站环境。这里我选用的是LAMP环境(Linux操作系统,Apache网络服务器,MySQL数据库,Perl、PHP或者Python 编程语言)。

网上有一键安装LAMP环境的安装方法。这里为了更好的了解LAMP的工作原理和相关组件之间的关系,我选择手动单独安装各个LAMP组件。

a. 安装Apache

首先安装Apache:

sudo apt-get install apache2

Apache启动和停止相关命令为:

启动:sudo apache2 start
停止:sudo apache2 stop
重新启动:sudo apache2 restart

验证Apache2是否安装成功的方法:浏览器中输入网址localhost查看是否为Apache it works的展示页面。

开启SSL模块:

sudo a2enmod ssl

创建证书:由于我们搭建环境主要为我们检测漏洞使用,所以我们只需要创建自签名证书即可。

sudo mkdir /etc/apache2/ssl
sudo /usr/sbin/make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem
b. 编辑https配置

添加监听端口。编辑Apache端口配置(/etc/apache2/ports.conf)如果SSL缺省时加入443端口Listen 443。

设置site-enabled。安装完后,会在/etc/apache2/sites-available目录下生成一个缺省的default-ssl.conf文件。创建一个链接到sites-enabled目录:

ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/001-ssl

修改配置文件。确认HTTP监听端口是否为80:

gedit /etc/apache2/sites-enabled/000-default.conf
c. 重启Apache服务
service apache2 stop
service apache2 start
d. 安装PHP5.6
sudo apt-get install php5.6
sudo apt-get install php5-gd

让Apache支持php5.6:

sudo apt-get install libapache2-mod-php5.6
e. 安装MySQL数据库

在这之前可以参考更换镜像源为国内清华或阿里源,增加下载速度。Linux系统换源

更新appt-get,防止直接安装MySQL有的软件包无法下载:

sudo apt-get update

安装MySQL客户端和服务端,软件安装中会让你输入root用户的密码,输入密码确认密码之后完成安装。

sudo apt-get install mysql-server mysql-client

判断MySQL数据库是否安装成功,下述命令查看是否处于运行状态。

sudo service mysql restart
sudo service mysql status

让Apache支持MySQL:

sudo apt-get install libapache2-mod-auth-pgsql
tips:这里我没有找到libapache2-mod-auth-mysql模块,然后就用pgsql替代了,结果可行。

让PHP支持MySQL,这里我在Linux安装了PHP5.6用于本次实验。

sudo apt-get install php5.6-mysql

登录MySQL数据库,输入mysql的root用户密码:

mysql -u root -p

由于心脏出血漏洞主要由于心跳机制的边界检测问题,所以我们要查看自己安装的openssl有没有开启心跳扩展机制:

/usr/bin/openssl s_client -connect 192.168.220.156/login.php:443 -tlsextdebug 2>&1| grep ‘TLS’
f. 测试环境是否搭建成功

使用gedit在“/var/www”下创建info.php文件,在其中编辑下述内容,然后在URL中访问该文件,即可验证。

<?php
phpinfo()
?>
2.2.3 写一个简单的Web登陆网站
a. 创建数据库
mysql -u root -p;之后输入mysql密码
create database web1;
use web1;
create table test(user varchar(15),password varchar(16));
create table flag();
b. 在/var/www/html/目录下编写登陆界面index.html:
<!DOCTYPE HTML>
<html><head><meta charset="utf-8"><title>test heartbleed</title></head><body style="background-color: #006400"><h2 align="center" style="color: white">login system</h2><form align="center" action="login.php" method="post" enctype="multipart/form-data"><p style="width: 100%;height: 30px;display: block;line-height: 200px;text-align: center;color:white;font-size:16px;">account:<input type="text" name="user" value="" max="10"></p><p style="width: 100%;height: 30px;display: block;line-height: 200px;text-align: center;color:white;font-size:16px;">password:<input type="password" name="pass" value="" min="6" max="16"></p><p style="width: 100%;height: 30px;display: block;line-height: 200px;text-align: center;"><input type="submit" name="submit" value="login"></p></form></body>
</html>
c. 编写后台处理程序login.php:
<?php
$mysql_server_name='localhost';
$mysql_username='root';
$mysql_password='leeham';
$mysql_database='web1';
$conn=mysqli_connect($mysql_server_name,$mysql_username,$mysql_password,$mysql_database);
if(!$conn)
{die("error:".mysqli_connect_error());
}$user=$_POST['user'];
$pass=$_POST['pass'];
#$user="admin";
#$pass="admin";
echo $user;
echo $pass;
$sql="select * from test where user='$user' and password='$pass'";
$res=mysqli_query($conn,$sql);
$row=mysqli_fetch_array($res,MYSQLI_NUM);
if(!is_null($row))
{for($i=0;$i<count($row);$i++){echo $row[$i];echo "<br>";}
}
else
{echo "登录失败!";
}
?>
d. 本地测试Web

在URL中输入localhost即可测试本地搭建结果。

e. 外部测试

在进行攻击实验之前,需要保证外部物理机可以访问虚拟机内部的网站,因此需要关闭内部Linux的防火墙,然后查看虚拟机IP,以及监听该服务的端口号。从而测试内部网络服务是否能被外部访问,这里我从物理主机访问外部的方式为:

http://192.168.220.156:443

2.3 实验攻击过程

由于HeartBleed漏洞已经比较成熟,因此大多检测方法已经工具化,如线上平台检测法、已写好的POC或打包好的可执行程序等。

我尝试了上述的三种方法以及nmap。其中第一种未果,其他的测试结果截图为:


3、实验结果和现象分析

结果并不想其他文章中描述的那样,更换了OpenSSL之后就可以成功复现心脏滴血漏洞,这里分析的几个原因有:

  • 这些测试工具直接可以保证通信过程中使用的是HTTPS嘛?而不是HTTP?
  • 可能是OpenSSL版本的更换只生效于应用层,而没有在内核层产生作用?

4、实验过程中遇到的问题和解决方案

Q:PHP代码不能被浏览器正确解析执行

A:PHP代码中的空格和TAB,以及各种空白,导致PHP代码不能正确运行。于是我将所有的代码都重新整理了一下,就可以了。但是目前并没有找到合理解释这个现象的原因。并且我并没有忘掉分号或者括号。

Q:无法连接MySQL数据库,PHP代码执行到连接数据库的时候会出错

A:是因为第一遍安装LAMP环境的时候,没有找到Apache支持Mysql的模块就没有安装,后来找了libapache2-mod-auth-pgsql模块,OK。

记录一次心脏滴血靶场实验过程相关推荐

  1. 一次心脏滴血漏洞的bug处理过程

    一个p2p平台,一次内部安全事件的处理过程,一个关乎投资人利益的网络投资平台,一个无知者无畏的年代.口口声声对外宣称安全.可靠.高收益.-- [步骤] 1.对应用https的系统进行ssl协议已公开漏 ...

  2. “心脏滴血漏洞”测评经验分享

    "心脏滴血漏洞"测评经验分享 1 前言 1.1 编写目的 经验分析贴,赚C币买文章: 1.2 读者对象 本文档读者对象为:测评相关工程师.项目管理者.测试工程师.质量管理人员.文档 ...

  3. 脑电实验注意事项及实验过程中伪迹识别

    点击上面"脑机接口社区"关注我们 更多技术干货第一时间送达 Rose分享一篇群友 Tina关于脑电实验的学习笔记,感谢脑机社区群友Tina的分享. 实验前准备 1.填写被试信息及知 ...

  4. tensorflow 实验过程可重复

    在做科研时使用tensorflow作为算法开发工具.后来有了更好用的pytorch之后,由于很多基础代码都是用tensorflow编写的,所以,就没有转到pytorch上来. 最近在写论文,比较重视算 ...

  5. kali实验过程与结果讲解

    kali实验过程与结果讲解(学习) 前期准备:打开虚拟机,开启完毕后会显示服务器的ip 1. 收集此服务器的信息. 1) 开放的端口及服务 nmap 192.168.100.100 通过命令查看目标I ...

  6. “心脏滴血”漏洞复现

    "心脏滴血"简介: Heartbleed漏洞是由于未能在memcpy()调用受害用户输入内容作为长度参数之前正确进行边界检查.攻击者可以追踪OpenSSL所分配的64KB缓存.将超 ...

  7. 心脏滴血漏洞利用(CVE-2014-0160)

    0x00 前置知识 心脏滴血漏洞复现(CVE-2014-0160) - 知乎 1.心脏滴血简介 心脏出血漏洞"是指openssl这个开源软件中的一个漏洞,因为该软件使用到一个叫做heartb ...

  8. Lab1实验过程及心得体会

    实验过程 1 Magic Squares 检验矩阵是否是幻方矩阵.首先要检验文本中输入数据是否满足规范(包括是否构成方阵.是否按要求将数据以制表符隔开.是否包含小数和负数.是否有非法字符等),在满足规 ...

  9. Arduino小白学习记录:双色LED灯实验

    目录 一.介绍 二.材料准备 三.实验原理 四.实验过程 五.代码 六.效果展示 七.总结分析 一.介绍 双色发光二极管(LED)能够发出两种不同颜色的光,通常是红的和绿色的,而不是仅有一种颜色.它采 ...

  10. 心脏滴血漏洞复现(CVE-2014-0160)

    漏洞范围: OpenSSL1.0.1版本 漏洞成因: Heartbleed漏洞是由于未能在memcpy()调用受害用户输入内容作为长度参数之前正确进行边界检查.攻击者可以追踪OpenSSL所分配的64 ...

最新文章

  1. 刷手支付已来,亚马逊技术专利曝光,不侵犯隐私、秒速支付
  2. [裴礼文数学分析中的典型问题与方法习题参考解答]5.1.21
  3. Exchange 2013/2016动态通讯组成员查询
  4. java启动子线程过多导致卡死_java线程基础巩固---多Product多Consumer之间的通讯导致出现程序假死的原因分析...
  5. 浅析Java.lang.Runtime类
  6. 家装强电弱电布线图_强弱电布线注意事项,强弱电布线的4个讲究!
  7. AsyncTask的理解
  8. CodeForces - 1305D Kuroni and the Celebration(思维,互动题)
  9. iOS应用内付费(IAP)开发步骤列表
  10. MUI框架:移动端底部固定mui-bar-tab布局 - 案例篇
  11. 话里话外:企业ERP实施的前前后后(二)
  12. 2017计算机基础教学大纲,2017级大学计算机基础教学大纲
  13. Window系统 安装TFLearn
  14. 宇电智能调节仪AIBUS 及MODBUS 通讯协议说明V8.0
  15. dll文件懒加载_模块已加载,但对dllregisterServer的调用失败
  16. 小组取什么名字好_学习小组起什么名字比较好
  17. pe修改服务器2003密码,PE修改Windows密码
  18. 关于Windows系统问题
  19. 长沙理工大学计算机赞教授,大学IT达人在全国大赛获金奖 刷新了湖南省最好成绩...
  20. 男人女人应该不要随便离婚

热门文章

  1. 微信小程序实现音乐搜索页面
  2. 试玩网站搭建讲解入门篇
  3. 星门跳跃-rqnoj-341
  4. 通常环境光照度参照表
  5. 【清单】边角知识清单
  6. TorchScript的TracedModule和ScriptModule的区别
  7. Anbox安卓apk应用安装及使用说明和常见问题
  8. java实现Word文件转换成PDF
  9. 跨境支付产品:现钞与现汇
  10. html+css+js制作点名器