hacktricks/network-services-pentesting/pentesting-dns.md

17 KiB
Raw Blame History

53 - DNSのペンテスト

ゼロからヒーローまでAWSハッキングを学ぶ htARTEHackTricks AWS Red Team Expert

HackTricksをサポートする他の方法

脆弱性評価とペネトレーションテストのための即座に利用可能なセットアップ。20以上のツールと機能を備えた完全なペンテストをどこからでも実行します。私たちはペンテスターを置き換えるのではなく、彼らに時間を戻し、より深く掘り下げたり、シェルをポップしたり、楽しんだりするためのカスタムツール、検出、およびエクスプロイトモジュールを開発しています。

{% embed url="https://pentest-tools.com/" %}

基本情報

ドメインネームシステムDNSはインターネットの電話帳です。人間はnytimes.comやespn.comなどのドメイン名を通じてオンライン情報にアクセスします。WebブラウザはインターネットプロトコルIPアドレスを介して対話します。DNSはドメイン名をIPアドレスに変換して、ブラウザがインターネットリソースを読み込めるようにします。
ここから。

デフォルトポート: 53

PORT     STATE SERVICE  REASON
53/tcp   open  domain  Microsoft DNS 6.1.7601 (1DB15D39) (Windows Server 2008 R2 SP1)
5353/udp open  zeroconf udp-response
53/udp   open  domain  Microsoft DNS 6.1.7601 (1DB15D39) (Windows Server 2008 R2 SP1)

異なるDNSサーバー

  • DNSルートサーバー

  • 最上位ドメインTLDの責任はDNSルートサーバーによって保持されます。これらのサーバーは、名前サーバーが応答しない場合にのみクエリされ、ドメインとIPアドレスをリンクしてユーザーとインターネットコンテンツとの中央インターフェースとして機能します。これらのサーバーの運用は、世界中に13台存在するICANNインターネット割り当て名前および番号協会によって調整されます。

  • 権威あるネームサーバー

  • 特定のゾーンに対する権限を持つのは権威あるネームサーバーであり、それらの責任範囲内のクエリに対するバインディング回答を提供します。これらのサーバーがクエリに応答できない場合、ルートネームサーバーが責任を引き継ぎます。

  • 非権威あるネームサーバー

  • 特定のDNSゾーンの責任を持たないのは非権威あるネームサーバーです。代わりに、彼らは再帰的または繰り返し的なクエリを通じてDNSゾーンの情報を取得します。

  • キャッシュDNSサーバー

  • キャッシュDNSサーバーは、他の名前サーバーからの情報を一定期間キャッシュし、この保存期間は権威あるネームサーバーによって設定されます。

  • フォワーディングサーバー

  • フォワーディングサーバーは、DNSクエリを別のサーバーに転送する唯一の機能を果たします。

  • リゾルバ

  • コンピュータやルーターでローカルに名前解決を行うリゾルバは、権威あるDNSサーバーとは見なされません。

列挙

バナー取得

DNSには取得する「バナー」がありません。最も近い相当物は、ほとんどのBINDネームサーバーで機能するversion.bind. CHAOS TXTのマジッククエリです。
digを使用してこのクエリを実行できます:

dig version.bind CHAOS TXT @DNS

もし機能しない場合は、リモートサーバーのバージョンを特定するためにフィンガープリント技術を使用できます -- fpdns ツールがその1つのオプションですが、他にもあります。

nmap スクリプトでもバナーを取得できます:

--script dns-nsid

任意のレコード

ANY レコードは、DNSサーバーにすべての利用可能なエントリを返すように要求します。それが開示することを意図しているエントリをすべて返します。

dig any victim.com @<DNS_IP>

ゾーン転送

この手順は Asynchronous Full Transfer Zone (AXFR) と略されます。

dig axfr @<DNS_IP> #Try zone transfer without domain
dig axfr @<DNS_IP> <DOMAIN> #Try zone transfer guessing the domain
fierce --domain <DOMAIN> --dns-servers <DNS_IP> #Will try toperform a zone transfer against every authoritative name server and if this doesn'twork, will launch a dictionary attack

より詳しい情報

dig ANY @<DNS_IP> <DOMAIN>     #Any information
dig A @<DNS_IP> <DOMAIN>       #Regular DNS request
dig AAAA @<DNS_IP> <DOMAIN>    #IPv6 DNS request
dig TXT @<DNS_IP> <DOMAIN>     #Information
dig MX @<DNS_IP> <DOMAIN>      #Emails related
dig NS @<DNS_IP> <DOMAIN>      #DNS that resolves that name
dig -x 192.168.0.2 @<DNS_IP>   #Reverse lookup
dig -x 2a00:1450:400c:c06::93 @<DNS_IP> #reverse IPv6 lookup

#Use [-p PORT]  or  -6 (to use ivp6 address of dns)

自動化

for sub in $(cat <WORDLIST>);do dig $sub.<DOMAIN> @<DNS_IP> | grep -v ';\|SOA' | sed -r '/^\s*$/d' | grep $sub | tee -a subdomains.txt;done

dnsenum --dnsserver <DNS_IP> --enum -p 0 -s 0 -o subdomains.txt -f <WORDLIST> <DOMAIN>

nslookupの使用

nslookup
> SERVER <IP_DNS> #Select dns server
> 127.0.0.1 #Reverse lookup of 127.0.0.1, maybe...
> <IP_MACHINE> #Reverse lookup of a machine, maybe...

便利なMetasploitモジュール

auxiliary/gather/enum_dns #Perform enumeration actions

便利なnmapスクリプト

#Perform enumeration actions
nmap -n --script "(default and *dns*) or fcrdns or dns-srv-enum or dns-random-txid or dns-random-srcport" <IP>

DNS - 逆BF

dnsrecon -r 127.0.0.0/24 -n <IP_DNS>  #DNS reverse of all of the addresses
dnsrecon -r 127.0.1.0/24 -n <IP_DNS>  #DNS reverse of all of the addresses
dnsrecon -r <IP_DNS>/24 -n <IP_DNS>   #DNS reverse of all of the addresses
dnsrecon -d active.htb -a -n <IP_DNS> #Zone transfer

{% hint style="info" %} 内部IPアドレスに解決されるサブドメインを見つけることができる場合、そのIP範囲を持つNSsに逆DNS BFを実行してみるべきです。 {% endhint %}

これを行うための別のツール:https://github.com/amine7536/reverse-scan

逆IP範囲をクエリすることができますhttps://bgp.he.net/net/205.166.76.0/24#_dnsこのツールはBGPでも役立ちます

DNS - サブドメインBF

dnsenum --dnsserver <IP_DNS> --enum -p 0 -s 0 -o subdomains.txt -f subdomains-1000.txt <DOMAIN>
dnsrecon -D subdomains-1000.txt -d <DOMAIN> -n <IP_DNS>
dnscan -d <domain> -r -w subdomains-1000.txt #Bruteforce subdomains in recursive way, https://github.com/rbsec/dnscan

Active Directory サーバー

dig -t _gc._tcp.lab.domain.com
dig -t _ldap._tcp.lab.domain.com
dig -t _kerberos._tcp.lab.domain.com
dig -t _kpasswd._tcp.lab.domain.com

nslookup -type=srv _kerberos._tcp.<CLIENT_DOMAIN>
nslookup -type=srv _kerberos._tcp.domain.com

nmap --script dns-srv-enum --script-args "dns-srv-enum.domain='domain.com'"

DNSSec

DNSSec

#Query paypal subdomains to ns3.isc-sns.info
nmap -sSU -p53 --script dns-nsec-enum --script-args dns-nsec-enum.domains=paypal.com ns3.isc-sns.info

IPv6

サブドメインのIPv6を収集するために "AAAA" リクエストを使用したブルートフォース。

dnsdict6 -s -t <domain>

IPv6 addresses

IPv6 addresses are 128 bits long, compared to the 32 bits of IPv4 addresses. This makes brute-forcing reverse DNS infeasible due to the vast address space. However, tools like dnsrecon can help automate the process by querying DNS servers for PTR records associated with IPv6 addresses.

dnsrevenum6 pri.authdns.ripe.net 2001:67c:2e8::/48 #Will use the dns pri.authdns.ripe.net

DNS再帰DDoS

もしDNS再帰が有効になっている場合、攻撃者はUDPパケットでoriginスプーフィングして、DNSがレスポンスを被害者サーバーに送信するようにすることができます。攻撃者は、ANYまたはDNSSECレコードタイプを悪用することができます。なぜなら、これらはより大きなレスポンスを持つことが一般的だからです。
DNSが再帰をサポートしているかどうかを確認する方法は、ドメイン名をクエリし、レスポンスにフラグ "ra"再帰可能)が含まれているかどうかを確認することです:

dig google.com A @<IP>

利用不可:

利用可能:

脆弱性評価および侵入テストのための即座に利用可能なセットアップ。レコンからレポート作成まで、20以上のツールと機能で完全なペンテストをどこからでも実行します。私たちはペンテスターを置き換えるのではなく、カスタムツール、検出、およびエクスプロイトモジュールを開発して、彼らにより深く掘り下げ、シェルをポップし、楽しんでもらえる時間を与えます。

{% embed url="https://pentest-tools.com/" %}

存在しないアカウントへのメール

ターゲットドメイン内の無効なアドレスに送信されたメールによってトリガーされた配信不能通知NDNの調査を通じて、貴重な内部ネットワークの詳細がしばしば開示されます。

提供される配信不能レポートには、次の情報が含まれます:

  • 生成サーバーは server.example.com として識別されました。
  • user@example.com に対するエラーコード #550 5.1.1 RESOLVER.ADR.RecipNotFound; not found での失敗通知が返されました。
  • 元のメッセージヘッダーには内部IPアドレスとホスト名が開示されました。
The original message headers were modified for anonymity and now present randomized data:

Generating server: server.example.com

user@example.com
#550 5.1.1 RESOLVER.ADR.RecipNotFound; not found ##

Original message headers:

Received: from MAILSERVER01.domain.example.com (192.168.1.1) by
mailserver02.domain.example.com (192.168.2.2) with Microsoft SMTP Server (TLS)
id 14.3.174.1; Mon, 25 May 2015 14:52:22 -0700
Received: from filter.example.com (203.0.113.1) by
MAILSERVER01.domain.example.com (192.168.1.1) with Microsoft SMTP Server (TLS)
id 14.3.174.1; Mon, 25 May 2015 14:51:22 -0700
X-ASG-Debug-ID: 1432576343-0614671716190e0d0001-zOQ9WJ
Received: from gateway.domainhost.com (gateway.domainhost.com [198.51.100.37]) by
filter.example.com with ESMTP id xVNPkwaqGgdyH5Ag for user@example.com; Mon,
25 May 2015 14:52:13 -0700 (PDT)
X-Envelope-From: sender@anotherdomain.org
X-Apparent-Source-IP: 198.51.100.37

設定ファイル

host.conf
/etc/resolv.conf
/etc/bind/named.conf
/etc/bind/named.conf.local
/etc/bind/named.conf.options
/etc/bind/named.conf.log
/etc/bind/*

危険な設定を行う際のBindサーバーの構成:

オプション 説明
allow-query DNSサーバーにリクエストを送信することが許可されているホストを定義します。
allow-recursion DNSサーバーに再帰的なリクエストを送信することが許可されているホストを定義します。
allow-transfer DNSサーバーからゾーン転送を受信することが許可されているホストを定義します。
zone-statistics ゾーンの統計データを収集します。

参考文献

HackTricks Automatic Commands

Protocol_Name: DNS    #Protocol Abbreviation if there is one.
Port_Number:  53     #Comma separated if there is more than one.
Protocol_Description: Domain Name Service        #Protocol Abbreviation Spelled out

Entry_1:
Name: Notes
Description: Notes for DNS
Note: |
#These are the commands I run every time I see an open DNS port

dnsrecon -r 127.0.0.0/24 -n {IP} -d {Domain_Name}
dnsrecon -r 127.0.1.0/24 -n {IP} -d {Domain_Name}
dnsrecon -r {Network}{CIDR} -n {IP} -d {Domain_Name}
dig axfr @{IP}
dig axfr {Domain_Name} @{IP}
nslookup
SERVER {IP}
127.0.0.1
{IP}
Domain_Name
exit

https://book.hacktricks.xyz/pentesting/pentesting-dns

Entry_2:
Name: Banner Grab
Description: Grab DNS Banner
Command: dig version.bind CHAOS TXT @DNS

Entry_3:
Name: Nmap Vuln Scan
Description: Scan for Vulnerabilities with Nmap
Command: nmap -n --script "(default and *dns*) or fcrdns or dns-srv-enum or dns-random-txid or dns-random-srcport" {IP}

Entry_4:
Name: Zone Transfer
Description: Three attempts at forcing a zone transfer
Command: dig axfr @{IP} && dix axfr @{IP} {Domain_Name} && fierce --dns-servers {IP} --domain {Domain_Name}


Entry_5:
Name: Active Directory
Description: Eunuerate a DC via DNS
Command: dig -t _gc._{Domain_Name} && dig -t _ldap._{Domain_Name} && dig -t _kerberos._{Domain_Name} && dig -t _kpasswd._{Domain_Name} && nmap --script dns-srv-enum --script-args "dns-srv-enum.domain={Domain_Name}"

Entry_6:
Name: consolesless mfs enumeration
Description: DNS enumeration without the need to run msfconsole
Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/dns/dns_amp; set RHOSTS {IP}; set RPORT 53; run; exit' && msfconsole -q -x 'use auxiliary/gather/enum_dns; set RHOSTS {IP}; set RPORT 53; run; exit'

脆弱性評価およびペネトレーションテストのための即座に利用可能なセットアップ。レコンからレポート作成まで、20以上のツールと機能を使用してどこからでも完全なペンテストを実行します。私たちはペンテスターを置き換えるのではなく、彼らに時間を戻してさらに深く掘り下げたり、シェルをポップしたり、楽しんだりするためのカスタムツール、検出およびエクスプロイテーションモジュールを開発しています。

{% embed url="https://pentest-tools.com/" %}

htARTEHackTricks AWS Red Team ExpertでゼロからヒーローまでAWSハッキングを学びましょう!

HackTricksをサポートする他の方法: