被动信息收集 WHOIS 我们可以将WHOIS 视为域名的“白色页面”。它是一个基于TCP的面向事务的查询/响应协议,默认情况下侦听TCP端口43。我们可以使用它来查询包含域名、IP地址或自治系统的数据库,并为Internet用户提供信息服务。该协议在RFC 3912 中定义。第一个WHOIS目录是在20世纪70年代初由伊丽莎白·费恩勒(Elizabeth Feinler) 和她的团队在斯坦福大学的网络信息中心(NIC)创建的。他们与她的团队一起创建了基于计算机物理地址划分类别的域。我们可以在这里 阅读更多关于WHOIS的迷人历史。
WHOIS域名查找允许我们检索有关已注册域名的信息。互联网域名和数字公司 (ICANN
)要求认证注册商在注册域名后立即在Whois数据库中输入保持器的联系信息、域名的创建和到期日期以及其他信息。简单来说,Whois数据库是目前全球注册的所有域名的可搜索列表。
WHOIS查询最初使用命令行工具执行。如今,有许多基于Web的工具,但命令行选项通常给予我们对查询的最大控制权,并帮助过滤和排序结果输出。Sysinternals WHOIS for Windows或LinuxWHOIS 命令行实用程序是我们收集信息的首选工具。但是,我们也可以使用一些在线版本,如whois.domaintools.com 。
我们将从前面的命令中获得以下响应,以针对whois
域运行facebook.com
查找。这个whois
命令的一个例子是:
mikannse7@htb[/htb]$ export TARGET="facebook.com" # Assign our target to an environment variable mikannse7@htb[/htb]$ whois $TARGET Domain Name: FACEBOOK.COM Registry Domain ID: 2320948_DOMAIN_COM-VRSN Registrar WHOIS Server: whois.registrarsafe.com Registrar URL: https://www.registrarsafe.com Updated Date: 2021-09-22T19:33:41Z Creation Date: 1997-03-29T05:00:00Z Registrar Registration Expiration Date: 2030-03-30T04:00:00Z Registrar: RegistrarSafe, LLC Registrar IANA ID: 3237 Registrar Abuse Contact Email: abusecomplaints@registrarsafe.com Registrar Abuse Contact Phone: +1.6503087004 Domain Status: clientDeleteProhibited https://www.icann.org/epp#clientDeleteProhibited Domain Status: clientTransferProhibited https://www.icann.org/epp#clientTransferProhibited Domain Status: clientUpdateProhibited https://www.icann.org/epp#clientUpdateProhibited Domain Status: serverDeleteProhibited https://www.icann.org/epp#serverDeleteProhibited Domain Status: serverTransferProhibited https://www.icann.org/epp#serverTransferProhibited Domain Status: serverUpdateProhibited https://www.icann.org/epp#serverUpdateProhibited Registry Registrant ID: Registrant Name: Domain Admin Registrant Organization: Facebook, Inc. Registrant Street: 1601 Willow Rd Registrant City: Menlo Park Registrant State/Province: CA Registrant Postal Code: 94025 Registrant Country: US Registrant Phone: +1.6505434800 Registrant Phone Ext: Registrant Fax: +1.6505434800 Registrant Fax Ext: Registrant Email: domain@fb.com Registry Admin ID: Admin Name: Domain Admin Admin Organization: Facebook, Inc. Admin Street: 1601 Willow Rd Admin City: Menlo Park Admin State/Province: CA Admin Postal Code: 94025 Admin Country: US Admin Phone: +1.6505434800 Admin Phone Ext: Admin Fax: +1.6505434800 Admin Fax Ext: Admin Email: domain@fb.com Registry Tech ID: Tech Name: Domain Admin Tech Organization: Facebook, Inc. Tech Street: 1601 Willow Rd Tech City: Menlo Park Tech State/Province: CA Tech Postal Code: 94025 Tech Country: US Tech Phone: +1.6505434800 Tech Phone Ext: Tech Fax: +1.6505434800 Tech Fax Ext: Tech Email: domain@fb.com Name Server: C.NS.FACEBOOK.COM Name Server: B.NS.FACEBOOK.COM Name Server: A.NS.FACEBOOK.COM Name Server: D.NS.FACEBOOK.COM DNSSEC: unsigned <SNIP>
我们可以使用Windows Sysinternals中的whois.exe
收集相同的数据:
C:\htb> whois.exe facebook.com Whois v1.21 - Domain information lookup Copyright (C) 2005-2019 Mark Russinovich Sysinternals - www.sysinternals.com Connecting to COM.whois-servers.net... WHOIS Server: whois.registrarsafe.com Registrar URL: http://www.registrarsafe.com Updated Date: 2021-09-22T19:33:41Z Creation Date: 1997-03-29T05:00:00Z Registry Expiry Date: 2030-03-30T04:00:00Z Registrar: RegistrarSafe, LLC Registrar IANA ID: 3237 Registrar Abuse Contact Email: abusecomplaints@registrarsafe.com Registrar Abuse Contact Phone: +1-650-308-7004 Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited Name Server: A.NS.FACEBOOK.COM Name Server: B.NS.FACEBOOK.COM Name Server: C.NS.FACEBOOK.COM Name Server: D.NS.FACEBOOK.COM DNSSEC: unsigned URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/ >>> Last update of whois database: 2021-10-11T06:03:10Z <<< <SNIP>
从该输出中,我们收集了以下信息:
Organisation
Facebook, Inc.Facebook公司
Locations
US, 94025 Menlo Park, CA, 1601 Willo Rd94025 Menlo Park,美国,1601 Willo Rd,地图
Domain Email address
domain@fb.com
Registrar Email address
abusecomplaints@registrarsafe.com
Phone number
+1.6505434800
Language
English (US)
Registrar
RegistrarSafe, LLCRegistrarSafe,LLC
New Domain新域
fb.com
DNSSEC
unsigned 无符号
Name servers
A.NS.FACEBOOK.COM
B.NS.FACEBOOK.COM
C.NS.FACEBOOK.COM
D.NS.FACEBOOK.COM
虽然这些信息本身并不足以让我们发起攻击,但这些都是我们希望稍后记录下来的重要数据。
DNS 我们可以开始进一步研究数据,以确定特定的目标,现在我们有一些关于我们的目标的信息。域名系统 (DNS
)是寻找此类信息的绝佳场所。首先,让我们来看看什么是DNS。
什么是DNS? DNS是互联网的电话簿。域名如hackthebox.com
和inlanefreight.com
允许人们访问互联网上的内容。互联网协议(IP
)地址用于在Web浏览器之间进行通信。DNS将域名转换为IP地址,允许浏览器访问Internet上的资源。
每个连接到互联网的设备都有一个唯一的IP地址,其他机器可以使用它来定位它。DNS服务器最大限度地减少了人们学习IP地址(如104.17.42.72
中的IPv4
)或更复杂的现代字母数字IP地址(如2606:4700::6811:2b48
中的IPv6
)的需要。当用户在其Web浏览器中键入www.facebook.com
时,必须在用户键入的内容与访问www.facebook.com
网页所需的IP地址之间进行转换。
使用DNS的一些优点是:
它允许使用名称而不是数字来标识主机。
记住一个名字比记住一个数字容易得多。
通过将名称重定向到新的数字地址,服务器可以更改数字地址,而无需通知Internet上的每个人。
一个名称可能指的是在不同服务器之间分配工作负载的多个主机。
DNS结构中有一个名称层次结构。该系统的根,或最高级别,是未命名的。
顶级域名服务器,顶级域名,可以比作图书馆里的一个书架。主机名的最后一部分由这个名称服务器托管,它是搜索特定IP地址的下一个阶段(在www.facebook.com
中,DNS服务器是com
)。大多数TLD已委托给各个国家/地区的经理,他们从ISO-3166-1表 中获得代码。这些被称为国家代码顶级域名或由联合国机构管理的国家代码顶级域名。
也有少量的“通用”顶级域名(gTLD)与特定国家或地区无关。根据ISO-3166-1中规定的政策建议,域名管理人员被授予负责二级域名(SLD)和较低级别名称层次结构分配的程序和政策。
每个国家的管理员组织国家代码域。这些管理人员代表互联网社区提供公共服务。资源记录是DNS查询的结果,具有以下结构:
Resource Record
域名(通常是完全限定的域名)是资源记录的第一部分。如果您不使用完全限定的域名,则记录所在区域的名称将附加到名称的末尾。
TTL
以秒为单位,Time-To-Live(TTL
)默认为SOA记录中指定的最小值。
Record Class
Internet, Hesiod, or Chaos
Start Of Authority
(SOA
)
它应该在区域文件中的第一个,因为它指示区域的开始。每个区域只能有一个SOA
记录,此外,它还包含区域的值,如序列号和多个过期超时。
Name Servers
(NS
)
分布式数据库由NS
记录绑定在一起。它们负责区域的权威名称服务器和子区域对名称服务器的权威。
IPv4 Addresses
(A
)
A记录只是主机名和IP地址之间的映射。“前进”区域是指具有A
记录的区域。
Pointer
(PTR
) Pointer
(PTR
)
PTR记录是IP地址和主机名之间的映射。“反向”区域是那些有PTR
记录的区域。
Canonical Name
(CNAME
) Name Servers
(NS
)
别名主机名使用A
记录映射到CNAME
记录主机名。
Mail Exchange
(MX
) Name Servers
(NS
)
MX
记录标识将接受特定主机的电子邮件的主机。已为指定的主机分配优先级值。多个MX记录可以存在于同一主机上,并且由特定主机的记录组成优先级列表。
Nslookup & DIG 现在我们已经清楚地了解了DNS是什么,让我们来看看Nslookup
命令行实用程序。假设客户要求我们执行外部渗透测试。因此,我们首先需要熟悉它们的基础设施,并确定哪些主机是可公开访问的。我们可以使用不同类型的DNS请求来发现这一点。使用Nslookup
,我们可以在Internet上搜索域名服务器,并向它们询问有关主机和域的信息。虽然该工具有两种模式,交互式和非交互式,但我们将主要关注非交互式模块。
我们可以通过提交域名查询A
记录。但是我们也可以使用-query
参数来搜索特定的资源记录。例如:
Querying: A Records mikannse7@htb[/htb]$ export TARGET="facebook.com" mikannse7@htb[/htb]$ nslookup $TARGET Server: 1.1.1.1 Address: 1.1.1.1#53 Non-authoritative answer: Name: facebook.com Address: 31.13.92.36 Name: facebook.com Address: 2a03:2880:f11c:8083:face:b00c:0:25de
如果需要,我们还可以通过在命令中添加@<nameserver/IP>
来指定名称服务器。与nslookup不同,DIG
向我们展示了更多重要的信息。
mikannse7@htb[/htb]$ dig facebook.com @1.1.1.1 ; <<>> DiG 9.16.1-Ubuntu <<>> facebook.com @1.1.1.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58899 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;facebook.com. IN A ;; ANSWER SECTION: facebook.com. 169 IN A 31.13.92.36 ;; Query time: 20 msec ;; SERVER: 1.1.1.1#53(1.1.1.1) ;; WHEN: Mo Okt 18 16:03:17 CEST 2021 ;; MSG SIZE rcvd: 57
该条目以完整的域名开始,包括最后的点。在必须再次请求该信息之前,该条目可以在该高速缓存中保持169
秒。这门课是可以理解的互联网(IN
)。
查询:子域的记录 mikannse7@htb[/htb]$ export TARGET=www.facebook.com mikannse7@htb[/htb]$ nslookup -query=A $TARGET Server: 1.1.1.1 Address: 1.1.1.1#53 Non-authoritative answer: www.facebook.com canonical name = star-mini.c10r.facebook.com. Name: star-mini.c10r.facebook.com Address: 31.13.92.36
mikannse7@htb[/htb]$ dig a www.facebook.com @1.1.1.1 ; <<>> DiG 9.16.1-Ubuntu <<>> a www.facebook.com @1.1.1.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15596 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;www.facebook.com. IN A ;; ANSWER SECTION: www.facebook.com. 3585 IN CNAME star-mini.c10r.facebook.com. star-mini.c10r.facebook.com. 45 IN A 31.13.92.36 ;; Query time: 16 msec ;; SERVER: 1.1.1.1#53(1.1.1.1) ;; WHEN: Mo Okt 18 16:11:48 CEST 2021 ;; MSG SIZE rcvd: 90
查询:IP地址的PTR记录 mikannse7@htb[/htb]$ nslookup -query=PTR 31.13.92.36 Server: 1.1.1.1 Address: 1.1.1.1#53 Non-authoritative answer: 36.92.13.31.in-addr.arpa name = edge-star-mini-shv-01-frt3.facebook.com. Authoritative answers can be found from:
mikannse7@htb[/htb]$ dig -x 31.13.92.36 @1.1.1.1 ; <<>> DiG 9.16.1-Ubuntu <<>> -x 31.13.92.36 @1.1.1.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51730 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;36.92.13.31.in-addr.arpa. IN PTR ;; ANSWER SECTION: 36.92.13.31.in-addr.arpa. 1028 IN PTR edge-star-mini-shv-01-frt3.facebook.com. ;; Query time: 16 msec ;; SERVER: 1.1.1.1#53(1.1.1.1) ;; WHEN: Mo Okt 18 16:14:20 CEST 2021 ;; MSG SIZE rcvd: 106
查询:任何现有记录 在这个例子中,我们使用谷歌作为例子,而不是Facebook,因为最后一个没有回应我们的查询。
mikannse7@htb[/htb]$ export TARGET="google.com" mikannse7@htb[/htb]$ nslookup -query=ANY $TARGET Server: 10.100.0.1 Address: 10.100.0.1#53 Non-authoritative answer: Name: google.com Address: 172.217.16.142 Name: google.com Address: 2a00:1450:4001:808::200e google.com text = "docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e" google.com text = "docusign=1b0a6754-49b1-4db5-8540-d2c12664b289" google.com text = "v=spf1 include:_spf.google.com ~all" google.com text = "MS=E4A68B9AB2BB9670BCE15412F62916164C0B20BB" google.com text = "globalsign-smime-dv=CDYX+XFHUw2wml6/Gb8+59BsH31KzUr6c1l2BPvqKX8=" google.com text = "apple-domain-verification=30afIBcvSuDV2PLX" google.com text = "google-site-verification=wD8N7i1JTNTkezJ49swvWW48f8_9xveREV4oB-0Hf5o" google.com text = "facebook-domain-verification=22rm551cu4k0ab0bxsw536tlds4h95" google.com text = "google-site-verification=TV9-DBe4R80X4v0M4U_bd_J9cpOJM0nikft0jAgjmsQ" google.com nameserver = ns3.google.com. google.com nameserver = ns2.google.com. google.com nameserver = ns1.google.com. google.com nameserver = ns4.google.com. google.com mail exchanger = 10 aspmx.l.google.com. google.com mail exchanger = 40 alt3.aspmx.l.google.com. google.com mail exchanger = 20 alt1.aspmx.l.google.com. google.com mail exchanger = 30 alt2.aspmx.l.google.com. google.com mail exchanger = 50 alt4.aspmx.l.google.com. google.com origin = ns1.google.com mail addr = dns-admin.google.com serial = 398195569 refresh = 900 retry = 900 expire = 1800 minimum = 60 google.com rdata_257 = 0 issue "pki.goog" Authoritative answers can be found from:
Querying: ANY Existing Records查询:任何现有记录
mikannse7@htb[/htb]$ dig any google.com @8.8.8.8 ; <<>> DiG 9.16.1-Ubuntu <<>> any google.com @8.8.8.8 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49154 ;; flags: qr rd ra; QUERY: 1, ANSWER: 22, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;google.com. IN ANY ;; ANSWER SECTION: google.com. 249 IN A 142.250.184.206 google.com. 249 IN AAAA 2a00:1450:4001:830::200e google.com. 549 IN MX 10 aspmx.l.google.com. google.com. 3549 IN TXT "apple-domain-verification=30afIBcvSuDV2PLX" google.com. 3549 IN TXT "facebook-domain-verification=22rm551cu4k0ab0bxsw536tlds4h95" google.com. 549 IN MX 20 alt1.aspmx.l.google.com. google.com. 3549 IN TXT "docusign=1b0a6754-49b1-4db5-8540-d2c12664b289" google.com. 3549 IN TXT "v=spf1 include:_spf.google.com ~all" google.com. 3549 IN TXT "globalsign-smime-dv=CDYX+XFHUw2wml6/Gb8+59BsH31KzUr6c1l2BPvqKX8=" google.com. 3549 IN TXT "google-site-verification=wD8N7i1JTNTkezJ49swvWW48f8_9xveREV4oB-0Hf5o" google.com. 9 IN SOA ns1.google.com. dns-admin.google.com. 403730046 900 900 1800 60 google.com. 21549 IN NS ns1.google.com. google.com. 21549 IN NS ns3.google.com. google.com. 549 IN MX 50 alt4.aspmx.l.google.com. google.com. 3549 IN TXT "docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e" google.com. 549 IN MX 30 alt2.aspmx.l.google.com. google.com. 21549 IN NS ns2.google.com. google.com. 21549 IN NS ns4.google.com. google.com. 549 IN MX 40 alt3.aspmx.l.google.com. google.com. 3549 IN TXT "MS=E4A68B9AB2BB9670BCE15412F62916164C0B20BB" google.com. 3549 IN TXT "google-site-verification=TV9-DBe4R80X4v0M4U_bd_J9cpOJM0nikft0jAgjmsQ" google.com. 21549 IN CAA 0 issue "pki.goog" ;; Query time: 16 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Mo Okt 18 16:15:22 CEST 2021 ;; MSG SIZE rcvd: 922
最近的RFC 8482 规定废除ANY
DNS请求。因此,我们可能无法从DNS服务器收到对我们的ANY
请求的响应,也无法获得对上述RFC 8482的引用。
mikannse7@htb[/htb]$ dig any cloudflare.com @8.8.8.8 ; <<>> DiG 9.16.1-Ubuntu <<>> any cloudflare.com @8.8.8.8 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22509 ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;cloudflare.com. IN ANY ;; ANSWER SECTION: cloudflare.com. 2747 IN HINFO "RFC8482" "" cloudflare.com. 2747 IN RRSIG HINFO 13 2 3789 20211019145905 20211017125905 34505 cloudflare.com. 4/Bq8xUN96SrOhuH0bj2W6s2pXRdv5L5NWsgyTAGLAjEwwEF4y4TQuXo yGtvD3B13jr5KhdXo1VtrLLMy4OR8Q== ;; Query time: 16 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Mo Okt 18 16:16:27 CEST 2021 ;; MSG SIZE rcvd: 174
Querying: TXT Records mikannse7@htb[/htb]$ export TARGET="facebook.com" mikannse7@htb[/htb]$ nslookup -query=TXT $TARGET Server: 1.1.1.1 Address: 1.1.1.1#53 Non-authoritative answer: facebook.com text = "v=spf1 redirect=_spf.facebook.com" facebook.com text = "google-site-verification=A2WZWCNQHrGV_TWwKh6KHY90tY0SHZo_RnyMJoDaG0s" facebook.com text = "google-site-verification=wdH5DTJTc9AYNwVunSVFeK0hYDGUIEOGb-RReU6pJlY" Authoritative answers can be found from:
mikannse7@htb[/htb]$ dig txt facebook.com @1.1.1.1 ; <<>> DiG 9.16.1-Ubuntu <<>> txt facebook.com @1.1.1.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63771 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;facebook.com. IN TXT ;; ANSWER SECTION: facebook.com. 86400 IN TXT "v=spf1 redirect=_spf.facebook.com" facebook.com. 7200 IN TXT "google-site-verification=A2WZWCNQHrGV_TWwKh6KHY90tY0SHZo_RnyMJoDaG0s" facebook.com. 7200 IN TXT "google-site-verification=wdH5DTJTc9AYNwVunSVFeK0hYDGUIEOGb-RReU6pJlY" ;; Query time: 24 msec ;; SERVER: 1.1.1.1#53(1.1.1.1) ;; WHEN: Mo Okt 18 16:17:46 CEST 2021 ;; MSG SIZE rcvd: 249
标签:MX Records mikannse7@htb[/htb]$ export TARGET="facebook.com" mikannse7@htb[/htb]$ nslookup -query=MX $TARGET Server: 1.1.1.1 Address: 1.1.1.1#53 Non-authoritative answer: facebook.com mail exchanger = 10 smtpin.vvv.facebook.com. Authoritative answers can be found from:
mikannse7@htb[/htb]$ dig mx facebook.com @1.1.1.1 ; <<>> DiG 9.16.1-Ubuntu <<>> mx facebook.com @1.1.1.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9392 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;facebook.com. IN MX ;; ANSWER SECTION: facebook.com. 3600 IN MX 10 smtpin.vvv.facebook.com. ;; Query time: 40 msec ;; SERVER: 1.1.1.1#53(1.1.1.1) ;; WHEN: Mo Okt 18 16:18:22 CEST 2021 ;; MSG SIZE rcvd: 68
到目前为止,我们已经使用A
和NS
命令收集了MX
、CNAME
、nslookup
和dig
记录。组织在互联网上获得IP地址,但他们并不总是他们的所有者。他们可能依赖于ISP
s和托管提供商,这些提供商将较小的网络块出租给他们。
我们可以将通过nslookup收集的一些结果与whois数据库结合联合收割机,以确定我们的目标组织是否使用主机提供商。这个组合看起来像下面的例子:
Nslookup mikannse7@htb[/htb]$ export TARGET="facebook.com" mikannse7@htb[/htb]$ nslookup $TARGET Server: 1.1.1.1 Address: 1.1.1.1#53 Non-authoritative answer: Name: facebook.com Address: 157.240.199.35 Name: facebook.com Address: 2a03:2880:f15e:83:face:b00c:0:25de
WHOID mikannse7@htb[/htb]$ whois 157.240.199.35 NetRange: 157.240.0.0 - 157.240.255.255 CIDR: 157.240.0.0/16 NetName: THEFA-3 NetHandle: NET-157-240-0-0-1 Parent: NET157 (NET-157-0-0-0-0) NetType: Direct Assignment OriginAS: Organization: Facebook, Inc. (THEFA-3) RegDate: 2015-05-14 Updated: 2015-05-14 Ref: https://rdap.arin.net/registry/ip/157.240.0.0 OrgName: Facebook, Inc. OrgId: THEFA-3 Address: 1601 Willow Rd. City: Menlo Park StateProv: CA PostalCode: 94025 Country: US RegDate: 2004-08-11 Updated: 2012-04-17 Ref: https://rdap.arin.net/registry/entity/THEFA-3 OrgAbuseHandle: OPERA82-ARIN OrgAbuseName: Operations OrgAbusePhone: +1-650-543-4800 OrgAbuseEmail: domain@facebook.com OrgAbuseRef: https://rdap.arin.net/registry/entity/OPERA82-ARIN OrgTechHandle: OPERA82-ARIN OrgTechName: Operations OrgTechPhone: +1-650-543-4800 OrgTechEmail: domain@facebook.com OrgTechRef: https://rdap.arin.net/registry/entity/OPERA82-ARIN
Passive Subdomain Enumeration 子域名枚举是指映射域名中所有可用的子域名。它增加了我们的攻击面,并可能发现隐藏的管理后端面板或内联网Web应用程序,网络管理员希望使用“模糊安全”策略来隐藏这些应用程序。在这一点上,我们将只使用第三方服务或公开可用的信息执行被动子域枚举。尽管如此,我们将扩大我们收集的信息在未来的活动子域枚举活动。
VirusTotal VirusTotal维护其DNS复制服务,该服务是通过保留用户访问他们提供的URL时所做的DNS解析来开发的。要接收有关域名的信息,请在搜索栏中键入域名,然后单击“关系”选项卡。
证书 我们可以用来提取子域的另一个有趣的信息来源是SSL/TLS证书。主要原因是证书透明性(CT),该项目要求证书颁发机构(CA)颁发的每个SSL/TLS证书都发布在可公开访问的日志中。
我们将学习如何使用两个主要资源检查CT日志,以发现目标组织的其他域名和子域:
我们可以导航到https://search.censys.io/certificates或https://crt.sh并引入目标组织的域名,以开始发现新的子域。
虽然该网站很好,但我们希望将这些信息组织起来,并能够将其与整个信息收集过程中发现的其他来源联合收割机结合起来。让我们对目标网站执行一个curl请求,请求一个JSON输出,因为这对我们来说更易于管理。我们可以通过以下命令来实现:
证书透明度 mikannse7@htb[/htb]$ export TARGET="facebook.com" mikannse7@htb[/htb]$ curl -s "https://crt.sh/?q=${TARGET}&output=json" | jq -r '.[] | "\(.name_value)\n\(.common_name)"' | sort -u > "${TARGET}_crt.sh.txt"
mikannse7@htb[/htb]$ head -n20 facebook.com_crt.sh.txt *.adtools.facebook.com *.ak.facebook.com *.ak.fbcdn.net *.alpha.facebook.com *.assistant.facebook.com *.beta.facebook.com *.channel.facebook.com *.cinyour.facebook.com *.cinyourrc.facebook.com *.connect.facebook.com *.cstools.facebook.com *.ctscan.facebook.com *.dev.facebook.com *.dns.facebook.com *.extern.facebook.com *.extools.facebook.com *.f--facebook.com *.facebook.com *.facebookcorewwwi.onion *.facebookmail.com
curl -s
以最小的输出发出请求。
https://crt.sh/?q=<DOMAIN>&output=json
请求json输出。
jq -r '.[]' "\(.name_value)\n\(.common_name)"'
curl -s
处理json输出,每行打印证书的名称值和公共名称。
sort -u
curl -s
对所提供的输出进行精确排序并删除重复项。
我们还可以通过以下方式使用OpenSSL对目标手动执行此操作:
mikannse7@htb[/htb]$ export TARGET="facebook.com" mikannse7@htb[/htb]$ export PORT="443" mikannse7@htb[/htb]$ openssl s_client -ign_eof 2>/dev/null <<<$'HEAD / HTTP/1.0\r\n\r' -connect "${TARGET}:${PORT}" | openssl x509 -noout -text -in - | grep 'DNS' | sed -e 's|DNS:|\n|g' -e 's|^\*.*||g' | tr -d ',' | sort -u *.facebook.com *.facebook.net *.fbcdn.net *.fbsbx.com *.m.facebook.com *.messenger.com *.xx.fbcdn.net *.xy.fbcdn.net *.xz.fbcdn.net facebook.com messenger.com
自动化被动子域枚举 我们已经学会了如何从目标组织获取有用的信息,如子域、命名模式、备用TLD、IP范围等,使用第三方服务,而不直接与其基础设施交互或依赖自动化工具。现在,我们将学习如何使用工具和以前获得的信息枚举子域。
TheHarvester TheHarvester 是一个简单易用但功能强大且有效的工具,用于早期渗透测试和红队参与。我们可以用它来收集信息,以帮助识别公司的攻击面。该工具从各种公共数据源收集emails
、names
、subdomains
、IP addresses
和URLs
,用于被动信息收集。现在,我们将使用以下模块:
为了实现自动化,我们将创建一个名为sources.txt的文件,其中包含以下内容。
mikannse7@htb[/htb]$ cat sources.txt baidu bufferoverun crtsh hackertarget otx projecdiscovery rapiddns sublist3r threatcrowd trello urlscan vhost virustotal zoomeye
TheHarvester
mikannse7@htb[/htb]$ export TARGET="facebook.com" mikannse7@htb[/htb]$ cat sources.txt | while read source; do theHarvester -d "${TARGET}" -b $source -f "${source}_${TARGET}";done <SNIP> ******************************************************************* * _ _ _ * * | |_| |__ ___ /\ /\__ _ _ ____ _____ ___| |_ ___ _ __ * * | __| _ \ / _ \ / /_/ / _` | '__\ \ / / _ \/ __| __/ _ \ '__| * * | |_| | | | __/ / __ / (_| | | \ V / __/\__ \ || __/ | * * \__|_| |_|\___| \/ /_/ \__,_|_| \_/ \___||___/\__\___|_| * * * * theHarvester 4.0.0 * * Coded by Christian Martorella * * Edge-Security Research * * cmartorella@edge-security.com * * * ******************************************************************* [*] Target: facebook.com [*] Searching Urlscan. [*] ASNS found: 29 -------------------- AS12578 AS13335 AS13535 AS136023 AS14061 AS14618 AS15169 AS15817 <SNIP>
当这个过程完成时,我们可以提取所有找到的子域,并通过以下命令对其进行排序:
TheHarvester
mikannse7@htb[/htb]$ cat *.json | jq -r '.hosts[]' 2>/dev/null | cut -d':' -f 1 | sort -u > "${TARGET}_theHarvester.txt"
现在我们可以通过以下方式合并所有被动侦察文件:
TheHarvester
mikannse7@htb[/htb]$ cat facebook.com_*.txt | sort -u > facebook.com_subdomains_passive.txt mikannse7@htb[/htb]$ cat facebook.com_subdomains_passive.txt | wc -l 11947
到目前为止,我们已经成功地找到了11947个合并被动侦察结果文件的子域。这里需要注意的是,还有更多的方法可以被动地找到子域。例如,在OSINT:Corporate Recon 模块中显示了更多的可能性。
被动基础设施识别 Netcraft 可以为我们提供有关服务器的信息,甚至不需要与它们进行交互,从被动信息收集的角度来看,这是很有价值的。 我们可以通过访问https://sitereport.netcraft.com
并输入目标域来使用该服务。
我们可以从报告中观察到一些有趣的细节:
Background
有关域的一般信息,包括Netcraft爬虫首次看到它的日期。
Network
有关netblock所有者、托管公司、名称服务器等的信息。
Hosting history
使用的最新IP、Web服务器和目标操作系统。
我们需要特别注意使用的最新IP。有时我们可以在Web服务器被放置在负载均衡器、Web应用程序防火墙或IDS之后之前从Web服务器中发现实际的IP地址,如果配置允许,我们可以直接连接到它。这种技术可能会干扰或改变我们未来的测试活动。
Wayback Machine 互联网档案馆 是一个美国数字图书馆,提供免费的数字化材料,包括网站,通过其网络爬虫自动收集。
我们可以使用Wayback Machine 访问这些网站的几个版本,以找到可能在源代码或文件中有有趣注释的旧版本。此工具可用于在某个时间点查找网站的旧版本。让我们以一个运行WordPress的网站为例。在使用手动方法和自动化工具评估它时,我们可能找不到任何有趣的东西,所以我们使用Wayback Machine搜索它,并找到一个使用特定(现在易受攻击)插件的版本。返回到网站的当前版本,我们发现插件没有被正确删除,仍然可以通过wp-content
目录访问。然后,我们可以利用它来获得主机上的远程代码执行和一个不错的赏金。
我们可以检查2005年12月1日捕获的facebook.com
的第一个版本之一,这很有趣,也许会给我们一种怀旧的感觉,但对我们作为安全研究人员来说也非常有用。
我们还可以使用waybackurls工具来检查Wayback Machine保存的URL并查找特定的关键字。如果我们在主机上正确设置了Go
,我们可以按如下方式安装该工具:
mikannse7@htb[/htb]$ go install github.com/tomnomnom/waybackurls@latest
要从域中获取抓取的URL列表及其获取日期,我们可以将-dates
开关添加到我们的命令中,如下所示:
mikannse7@htb[/htb]$ waybackurls -dates https://facebook.com > waybackurls.txt mikannse7@htb[/htb]$ cat waybackurls.txt 2018-05-20T09:46:07Z http://www.facebook.com./ 2018-05-20T10:07:12Z https://www.facebook.com/ 2018-05-20T10:18:51Z http://www.facebook.com/#!/pages/Welcome-Baby/143392015698061?ref=tsrobots.txt 2018-05-20T10:19:19Z http://www.facebook.com/ 2018-05-20T16:00:13Z http://facebook.com 2018-05-21T22:12:55Z https://www.facebook.com 2018-05-22T15:14:09Z http://www.facebook.com 2018-05-22T17:34:48Z http://www.facebook.com/#!/Syerah?v=info&ref=profile/robots.txt 2018-05-23T11:03:47Z http://www.facebook.com/#!/Bin595 <SNIP>
如果我们想访问特定的资源,我们需要将URL放在搜索菜单中,并导航到快照创建的日期。如前所述,Wayback Machine可以是一个方便的工具,不应该被忽视。它很可能会让我们发现被遗忘的资产、页面等,这可能导致发现缺陷。
主动基础设施识别 Web应用程序的基础设施是保持其运行并允许其运行的基础设施。Web服务器直接参与任何Web应用程序的操作。其中最受欢迎的是Apache,Nginx和Microsoft IIS等。
如果我们发现了目标应用程序背后的Web服务器,它可以让我们给予一个很好的想法,什么操作系统运行在后端服务器上。例如,如果我们发现正在运行的IIS版本,我们可以通过将IIS版本映射回默认安装的Windows版本来推断正在使用的Windows操作系统版本。一些默认安装是:
IIS 6.0: Windows Server 2003
IIS 7.0-8.5: Windows Server 2008 / Windows Server 2008R2
IIS 10.0 (v1607-v1709): Windows Server 2016
IIS 10.0 (v1809-): Windows Server 2019
虽然这在处理Windows时通常是正确的,但我们不能确定Linux或基于BSD的发行版是否正确,因为它们可以在Nginx或Apache中运行不同的Web服务器版本。这种技术可能会干扰或改变我们未来的测试活动。然而,如果我们处理Web服务器,我们将无法在HTML或JS中找到有关服务器的任何指纹。
Web Servers Web Server 我们需要从Web服务器中发现尽可能多的信息,以了解其功能,这可能会影响未来的测试。例如,URL重写功能、负载平衡、服务器上使用的脚本引擎或Intrusion detection system
(IDS
)可能会妨碍我们的一些测试活动。
要识别Web服务器版本,我们可以做的第一件事是查看响应头。
mikannse7@htb[/htb]$ curl -I "http://${TARGET}" HTTP/1.1 200 OK Date: Thu, 23 Sep 2021 15:10:42 GMT Server: Apache/2.4.25 (Debian) X-Powered-By: PHP/7.3.5 Link: <http://192.168.10.10/wp-json/>; rel="https://api.w.org/" Content-Type: text/html; charset=UTF-8
在响应报头中对Web服务器进行指纹识别时,还需要考虑其他特征。这些措施是:
X-Powered-By header:这个header可以告诉我们Web应用正在使用什么。我们可以看到像PHP、ASP.NET、JSP等值。
Cookie:Cookie是另一个有吸引力的价值,因为每种技术默认都有自己的Cookie。一些默认的cookie值是:
.NET:ASPSESSIONID<RANDOM>=<COOKIE_VALUE>
PHP: PHPSESSID=<COOKIE_VALUE>
JAVA: JSESSION=<COOKIE_VALUE>
mikannse7@htb[/htb]$ curl -I http://${TARGET} HTTP/1.1 200 OK Host: randomtarget.com Date: Thu, 23 Sep 2021 15:12:21 GMT Connection: close X-Powered-By: PHP/7.4.21 Set-Cookie: PHPSESSID=gt02b1pqla35cvmmb2bcli96ml; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate Pragma: no-cache Content-type: text/html; charset=UTF-8
其他可用的工具通过探测它们并将它们的响应与签名数据库进行比较来分析常见的Web服务器特征,以猜测Web服务器版本,安装的模块和启用的服务等信息。其中一些工具是:
Whatweb 认可Web技术,包括内容管理系统(CMS)、博客平台、统计/分析软件包、JavaScript库、Web服务器和嵌入式设备。我们建议通过whatweb
阅读whatweb -h
帮助菜单,以了解可用选项,如攻击级别控制或详细输出。在本例中,我们将通过-a
标志使用侵略级别3,并通过-v
使用详细输出。
WhatWeb mikannse7@htb[/htb]$ whatweb -a3 https://www.facebook.com -v WhatWeb report for https://www.facebook.com Status : 200 OK Title : <None> IP : 31.13.92.36 Country : IRELAND, IE Summary : Strict-Transport-Security[max-age=15552000; preload], PasswordField[pass], Script[text/javascript], X-XSS-Protection[0], HTML5, X-Frame-Options[DENY], Meta-Refresh-Redirect[/?_fb_noscript=1], UncommonHeaders[x-fb-rlafr,x-content-type-options,x-fb-debug,alt-svc] Detected Plugins: [ HTML5 ] HTML version 5, detected by the doctype declaration [ Meta-Refresh-Redirect ] Meta refresh tag is a deprecated URL element that can be used to optionally wait x seconds before reloading the current page or loading a new page. More info: https://secure.wikimedia.org/wikipedia/en/wiki/Meta_refresh String : /?_fb_noscript=1 [ PasswordField ] find password fields String : pass (from field name) [ Script ] This plugin detects instances of script HTML elements and returns the script language/type. String : text/javascript [ Strict-Transport-Security ] Strict-Transport-Security is an HTTP header that restricts a web browser from accessing a website without the security of the HTTPS protocol. String : max-age=15552000; preload [ UncommonHeaders ] Uncommon HTTP server headers. The blacklist includes all the standard headers and many non standard but common ones. Interesting but fairly common headers should have their own plugins, eg. x-powered-by, server and x-aspnet-version. Info about headers can be found at www.http-stats.com String : x-fb-rlafr,x-content-type-options,x-fb-debug,alt-svc (from headers) [ X-Frame-Options ] This plugin retrieves the X-Frame-Options value from the HTTP header. - More Info: http://msdn.microsoft.com/en-us/library/cc288472%28VS.85%29. aspx String : DENY [ X-XSS-Protection ] This plugin retrieves the X-XSS-Protection value from the HTTP header. - More Info: http://msdn.microsoft.com/en-us/library/cc288472%28VS.85%29. aspx String : 0 HTTP Headers: HTTP/1.1 200 OK Vary: Accept-Encoding Content-Encoding: gzip x-fb-rlafr: 0 Pragma: no-cache Cache-Control: private, no-cache, no-store, must-revalidate Expires: Sat, 01 Jan 2000 00:00:00 GMT X-Content-Type-Options: nosniff X-XSS-Protection: 0 X-Frame-Options: DENY Strict-Transport-Security: max-age=15552000; preload Content-Type: text/html; charset="utf-8" X-FB-Debug: r2w+sMJ7lVrMjS/ETitC6cNpJXma0r3fbt0rIlnTPAfQqTc+U4PQopVL7sR/6YA/ZKRkqP1wMPoFdUfMBP1JSA== Date: Wed, 06 Oct 2021 09:04:27 GMT Alt-Svc: h3=":443"; ma=3600, h3-29=":443"; ma=3600,h3-27=":443"; ma=3600 Connection: close WhatWeb report for https://www.facebook.com/?_fb_noscript=1 Status : 200 OK Title : <None> IP : 31.13.92.36 Country : IRELAND, IE Summary : Cookies[noscript], Strict-Transport-Security[max-age=15552000; preload], PasswordField[pass], Script[text/javascript], X-XSS-Protection[0], HTML5, X-Frame-Options[DENY], UncommonHeaders[x-fb-rlafr,x-content-type-options,x-fb-debug,alt-svc] Detected Plugins: [ Cookies ] Display the names of cookies in the HTTP headers. The values are not returned to save on space. String : noscript [ HTML5 ] HTML version 5, detected by the doctype declaration [ PasswordField ] find password fields String : pass (from field name) [ Script ] This plugin detects instances of script HTML elements and returns the script language/type. String : text/javascript [ Strict-Transport-Security ] Strict-Transport-Security is an HTTP header that restricts a web browser from accessing a website without the security of the HTTPS protocol. String : max-age=15552000; preload [ UncommonHeaders ] Uncommon HTTP server headers. The blacklist includes all the standard headers and many non standard but common ones. Interesting but fairly common headers should have their own plugins, eg. x-powered-by, server and x-aspnet-version. Info about headers can be found at www.http-stats.com String : x-fb-rlafr,x-content-type-options,x-fb-debug,alt-svc (from headers) [ X-Frame-Options ] This plugin retrieves the X-Frame-Options value from the HTTP header. - More Info: http://msdn.microsoft.com/en-us/library/cc288472%28VS.85%29. aspx String : DENY [ X-XSS-Protection ] This plugin retrieves the X-XSS-Protection value from the HTTP header. - More Info: http://msdn.microsoft.com/en-us/library/cc288472%28VS.85%29. aspx String : 0 HTTP Headers: HTTP/1.1 200 OK Vary: Accept-Encoding Content-Encoding: gzip Set-Cookie: noscript=1; path=/; domain=.facebook.com; secure x-fb-rlafr: 0 Pragma: no-cache Cache-Control: private, no-cache, no-store, must-revalidate Expires: Sat, 01 Jan 2000 00:00:00 GMT X-Content-Type-Options: nosniff X-XSS-Protection: 0 X-Frame-Options: DENY Strict-Transport-Security: max-age=15552000; preload Content-Type: text/html; charset="utf-8" X-FB-Debug: 7bEryjJ3tsTb/ap562d5L6KUJyJJ3bJh9XoamIo2lCVrX4cK/VAGbLx7muaAwnyobVm9myC3fQ+CXJqkk0eacg== Date: Wed, 06 Oct 2021 09:04:31 GMT Alt-Svc: h3=":443"; ma=3600, h3-29=":443"; ma=3600,h3-27=":443"; ma=3600 Connection: close
我们还希望将Wappalyzer 安装为浏览器扩展。它具有与Whatweb类似的功能,但结果会在导航目标URL时显示。
WafW00f 是一个Web应用程序防火墙(WAF
)指纹识别工具,它发送请求并分析响应,以确定安全解决方案是否到位。我们可以使用以下命令安装它:
Installing WafW00f mikannse7@htb[/htb]$ sudo apt install wafw00f -y
我们可以使用-a
这样的选项来检查所有可能的WAF,而不是在第一次匹配时停止扫描,通过-i
标志从输入文件中读取目标,或者使用-p
选项代理请求。
mikannse7@htb[/htb]$ wafw00f -v https://www.tesla.com ______ / \ ( Woof! ) \ ____/ ) ,, ) (_ .-. - _______ ( |__| ()``; |==|_______) .)|__| / (' /|\ ( |__| ( / ) / | \ . |__| \(_)_)) / | \ |__| ~ WAFW00F : v2.1.0 ~ The Web Application Firewall Fingerprinting Toolkit [*] Checking https://www.tesla.com [+] The site https://www.tesla.com is behind CacheWall (Varnish) WAF. [~] Number of requests: 2
Aquatone 是一种跨多台主机自动和可视化检查网站的工具,通过扫描可配置端口列表、使用无头Chrome浏览器访问网站并进行屏幕截图,可以方便地快速获得基于HTTP的攻击表面的概述。这很有帮助,尤其是在处理庞大的子域列表时。在Parrot Linux中,默认情况下不会安装Aquatone
,因此我们需要通过以下命令进行安装。
安装Aquatone mikannse7@htb[/htb]$ sudo apt install golang chromium-driver mikannse7@htb[/htb]$ go get github.com/michenriksen/aquatone mikannse7@htb[/htb]$ export PATH="$PATH":"$HOME/go/bin"
在此之后,我们需要探索一些选择:
Aquatone Options mikannse7@htb[/htb]$ aquatone --help Usage of aquatone: -chrome-path string Full path to the Chrome/Chromium executable to use. By default, aquatone will search for Chrome or Chromium -debug Print debugging information -http-timeout int Timeout in miliseconds for HTTP requests (default 3000) -nmap Parse input as Nmap/Masscan XML -out string Directory to write files to (default ".") -ports string Ports to scan on hosts. Supported list aliases: small, medium, large, xlarge (default "80,443,8000,8080,8443") -proxy string Proxy to use for HTTP requests -resolution string screenshot resolution (default "1440,900") -save-body Save response bodies to files (default true) -scan-timeout int Timeout in miliseconds for port scans (default 100) -screenshot-timeout int Timeout in miliseconds for screenshots (default 30000) -session string Load Aquatone session file and generate HTML report -silent Suppress all output except for errors -template-path string Path to HTML template to use for report -threads int Number of concurrent threads (default number of logical CPUs) -version Print current Aquatone version
现在,是时候在我们的子域列表中使用cat
并通过以下方式将命令传递给aquatone
了:
mikannse7@htb[/htb]$ cat facebook_aquatone.txt | aquatone -out ./aquatone -screenshot-timeout 1000 aquatone v1.7.0 started at 2021-10-06T10:14:42+01:00 Targets : 30 Threads : 2 Ports : 80, 443, 8000, 8080, 8443 Output dir : aquatone edge-star-shv-01-cdg2.facebook.com: port 80 open edge-extern-shv-01-waw1.facebook.com: port 80 open whatsapp-chatd-edge-shv-01-ams4.facebook.com: port 80 open edge-secure-shv-01-ham3.facebook.com: port 80 open sv-se.facebook.com: port 80 open ko.facebook.com: port 80 open whatsapp-chatd-msgr-mini-edge-shv-01-lis1.facebook.com: port 80 open synthetic-e2e-elbprod-sli-shv-01-otp1.facebook.com: port 80 open edge-star-shv-01-cdg2.facebook.com: port 443 open edge-extern-shv-01-waw1.facebook.com: port 443 open whatsapp-chatd-edge-shv-01-ams4.facebook.com: port 443 open http://edge-star-shv-01-cdg2.facebook.com/: 200 OK http://edge-extern-shv-01-waw1.facebook.com/: 200 OK edge-secure-shv-01-ham3.facebook.com: port 443 open ondemand-edge-shv-01-cph2.facebook.com: port 443 open sv-se.facebook.com: port 443 open http://edge-secure-shv-01-ham3.facebook.com/: 200 OK ko.facebook.com: port 443 open whatsapp-chatd-msgr-mini-edge-shv-01-lis1.facebook.com: port 443 open http://sv-se.facebook.com/: 200 OK http://ko.facebook.com/: 200 OK synthetic-e2e-elbprod-sli-shv-01-otp1.facebook.com: port 443 open http://synthetic-e2e-elbprod-sli-shv-01-otp1.facebook.com/: 400 default_vip_400 https://edge-star-shv-01-cdg2.facebook.com/: 200 OK https://edge-extern-shv-01-waw1.facebook.com/: 200 OK http://edge-star-shv-01-cdg2.facebook.com/: screenshot timed out http://edge-extern-shv-01-waw1.facebook.com/: screenshot timed out https://edge-secure-shv-01-ham3.facebook.com/: 200 OK https://sv-se.facebook.com/: 200 OK https://ko.facebook.com/: 200 OK http://edge-secure-shv-01-ham3.facebook.com/: screenshot timed out http://sv-se.facebook.com/: screenshot timed out http://ko.facebook.com/: screenshot timed out https://synthetic-e2e-elbprod-sli-shv-01-otp1.facebook.com/: 400 default_vip_400 http://synthetic-e2e-elbprod-sli-shv-01-otp1.facebook.com/: screenshot successful https://edge-star-shv-01-cdg2.facebook.com/: screenshot timed out https://edge-extern-shv-01-waw1.facebook.com/: screenshot timed out https://edge-secure-shv-01-ham3.facebook.com/: screenshot timed out https://sv-se.facebook.com/: screenshot timed out https://ko.facebook.com/: screenshot timed out https://synthetic-e2e-elbprod-sli-shv-01-otp1.facebook.com/: screenshot successful Calculating page structures... done Clustering similar pages... done Generating HTML report... done Writing session file...Time: - Started at : 2021-10-06T10:14:42+01:00 - Finished at : 2021-10-06T10:15:01+01:00 - Duration : 19s Requests: - Successful : 12 - Failed : 5 - 2xx : 10 - 3xx : 0 - 4xx : 2 - 5xx : 0 Screenshots: - Successful : 2 - Failed : 10 Wrote HTML report to: aquatone/aquatone_report.html
当它完成时,我们将有一个名为aquatone_report.html
的文件,我们可以在其中看到屏幕截图,确定的技术,服务器响应头和HTML。
Active Subdomain Enumeration 我们可以执行主动子域枚举,探测由目标组织或我们之前确定的第三方DNS服务器管理的基础设施。在这种情况下,产生的流量可能会导致我们的侦察活动被发现。
ZoneTransfers 区域转移是辅助DNS服务器从主DNS服务器接收信息并更新信息的方式。主从方法用于在域中组织DNS服务器,从DNS服务器从主DNS接收更新的DNS信息。主DNS服务器应配置为启用从辅助(从属)DNS服务器的区域传输,尽管这可能配置错误。
例如,我们将使用https://hackertarget.com/zone-transfer/ 服务和zonetransfer.me
域来了解通过这种技术可以获得的信息。
手动方法将是以下命令集:
1.识别服务器 mikannse7@htb[/htb]$ nslookup -type=NS zonetransfer.me Server: 10.100.0.1 Address: 10.100.0.1#53 Non-authoritative answer: zonetransfer.me nameserver = nsztm2.digi.ninja. zonetransfer.me nameserver = nsztm1.digi.ninja.
使用-type=any
和-query=AXFR
参数执行区域传输
2.测试ANY和AXFR区域传输 mikannse7@htb[/htb]$ nslookup -type=any -query=AXFR zonetransfer.me nsztm1.digi.ninja Server: nsztm1.digi.ninja Address: 81.4.108.41#53 zonetransfer.me origin = nsztm1.digi.ninja mail addr = robin.digi.ninja serial = 2019100801 refresh = 172800 retry = 900 expire = 1209600 minimum = 3600 zonetransfer.me hinfo = "Casio fx-700G" "Windows XP" zonetransfer.me text = "google-site-verification=tyP28J7JAUHA9fw2sHXMgcCC0I6XBmmoVi04VlMewxA" zonetransfer.me mail exchanger = 0 ASPMX.L.GOOGLE.COM. zonetransfer.me mail exchanger = 10 ALT1.ASPMX.L.GOOGLE.COM. zonetransfer.me mail exchanger = 10 ALT2.ASPMX.L.GOOGLE.COM. zonetransfer.me mail exchanger = 20 ASPMX2.GOOGLEMAIL.COM. zonetransfer.me mail exchanger = 20 ASPMX3.GOOGLEMAIL.COM. zonetransfer.me mail exchanger = 20 ASPMX4.GOOGLEMAIL.COM. zonetransfer.me mail exchanger = 20 ASPMX5.GOOGLEMAIL.COM. Name: zonetransfer.me Address: 5.196.105.14 zonetransfer.me nameserver = nsztm1.digi.ninja. zonetransfer.me nameserver = nsztm2.digi.ninja. _acme-challenge.zonetransfer.me text = "6Oa05hbUJ9xSsvYy7pApQvwCUSSGgxvrbdizjePEsZI" _sip._tcp.zonetransfer.me service = 0 0 5060 www.zonetransfer.me. 14.105.196.5.IN-ADDR.ARPA.zonetransfer.me name = www.zonetransfer.me. asfdbauthdns.zonetransfer.me afsdb = 1 asfdbbox.zonetransfer.me. Name: asfdbbox.zonetransfer.me Address: 127.0.0.1 asfdbvolume.zonetransfer.me afsdb = 1 asfdbbox.zonetransfer.me. Name: canberra-office.zonetransfer.me Address: 202.14.81.230 cmdexec.zonetransfer.me text = "; ls" contact.zonetransfer.me text = "Remember to call or email Pippa on +44 123 4567890 or pippa@zonetransfer.me when making DNS changes" Name: dc-office.zonetransfer.me Address: 143.228.181.132 Name: deadbeef.zonetransfer.me Address: dead:beaf:: dr.zonetransfer.me loc = 53 20 56.558 N 1 38 33.526 W 0.00m 1m 10000m 10m DZC.zonetransfer.me text = "AbCdEfG" email.zonetransfer.me naptr = 1 1 "P" "E2U+email" "" email.zonetransfer.me.zonetransfer.me. Name: email.zonetransfer.me Address: 74.125.206.26 Hello.zonetransfer.me text = "Hi to Josh and all his class" Name: home.zonetransfer.me Address: 127.0.0.1 Info.zonetransfer.me text = "ZoneTransfer.me service provided by Robin Wood - robin@digi.ninja. See http://digi.ninja/projects/zonetransferme.php for more information." internal.zonetransfer.me nameserver = intns1.zonetransfer.me. internal.zonetransfer.me nameserver = intns2.zonetransfer.me. Name: intns1.zonetransfer.me Address: 81.4.108.41 Name: intns2.zonetransfer.me Address: 167.88.42.94 Name: office.zonetransfer.me Address: 4.23.39.254 Name: ipv6actnow.org.zonetransfer.me Address: 2001:67c:2e8:11::c100:1332 Name: owa.zonetransfer.me Address: 207.46.197.32 robinwood.zonetransfer.me text = "Robin Wood" rp.zonetransfer.me rp = robin.zonetransfer.me. robinwood.zonetransfer.me. sip.zonetransfer.me naptr = 2 3 "P" "E2U+sip" "!^.*$!sip:customer-service@zonetransfer.me!" . sqli.zonetransfer.me text = "' or 1=1 --" sshock.zonetransfer.me text = "() { :]}; echo ShellShocked" staging.zonetransfer.me canonical name = www.sydneyoperahouse.com. Name: alltcpportsopen.firewall.test.zonetransfer.me Address: 127.0.0.1 testing.zonetransfer.me canonical name = www.zonetransfer.me. Name: vpn.zonetransfer.me Address: 174.36.59.154 Name: www.zonetransfer.me Address: 5.196.105.14 xss.zonetransfer.me text = "'><script>alert('Boo')</script>" zonetransfer.me origin = nsztm1.digi.ninja mail addr = robin.digi.ninja serial = 2019100801 refresh = 172800 retry = 900 expire = 1209600 minimum = 3600
如果我们成功地为某个域执行了区域转移,则无需继续枚举此特定域,因为这将提取所有可用信息。
Gobuster Gobuster是一个我们可以用来执行子域枚举的工具。模式选项对我们来说特别有趣,因为我们已经从被动信息收集中了解了一些命名约定,我们可以使用这些信息来发现遵循相同模式的新子域。
我们可以使用Seclists 仓库中的单词列表沿着gobuster
,如果我们正在寻找模式中的单词而不是数字。请记住,在被动子域枚举活动中,我们发现了一个模式lert-api-shv-{NUMBER}-sin6.facebook.com
。我们可以使用此模式来发现其他子域。第一步是用以前发现的模式创建一个patterns.txt文件,例如:
GoBuster - patterns.txt lert-api-shv-{GOBUSTER}-sin6 atlas-pp-shv-{GOBUSTER}-sin6
下一步是使用gobuster
模块启动dns
,指定以下选项:
dns
:启动DNS模块
-q
: Don’t print the banner and other noise.
-r
:使用自定义DNS服务器
-d
:目标域名
-p
:模式文件的路径
-w
:单词列表的路径
-o
:输出文件
在我们的情况下,这将是命令。
Gobuster - DNS mikannse7@htb[/htb]$ export TARGET="facebook.com" mikannse7@htb[/htb]$ export NS="d.ns.facebook.com" mikannse7@htb[/htb]$ export WORDLIST="numbers.txt" mikannse7@htb[/htb]$ gobuster dns -q -r "${NS}" -d "${TARGET}" -w "${WORDLIST}" -p ./patterns.txt -o "gobuster_${TARGET}.txt" Found: lert-api-shv-01-sin6.facebook.com Found: atlas-pp-shv-01-sin6.facebook.com Found: atlas-pp-shv-02-sin6.facebook.com Found: atlas-pp-shv-03-sin6.facebook.com Found: lert-api-shv-03-sin6.facebook.com Found: lert-api-shv-02-sin6.facebook.com Found: lert-api-shv-04-sin6.facebook.com Found: atlas-pp-shv-04-sin6.facebook.com
Virtual Hosts 虚拟主机(vHost
)是一种允许多个网站托管在一台服务器上的功能。如果您有许多网站,并且不想经历为每个网站设置新Web服务器的耗时(和昂贵)过程,这是一个很好的解决方案。想象一下,必须为同一页面的移动的和桌面版本设置不同的Web服务器。有两种方法可以配置虚拟主机:
IP
-based virtual hosting
Name
-based virtual hosting
IP-based Virtual Hosting 对于此类型,主机可以具有多个网络接口。可以在主机的每个网络接口上配置多个IP地址或接口别名。在主机上运行的服务器或虚拟服务器可以绑定到一个或多个IP地址。这意味着不同的服务器可以在此主机上的不同IP地址下寻址。从客户端的角度来看,服务器是相互独立的。
Name-based Virtual Hosting 在应用程序级别区分请求服务的域。例如,多个域名(如admin.inlanefreight.htb
和backup.inlanefreight.htb
)可以引用同一个IP。在服务器内部,这些文件使用不同的文件夹进行分离和区分。在这个例子中,在Linux服务器上,vHost admin.inlanefreight.htb
可以指向文件夹/var/www/admin
。对于backup.inlanefreight.htb
,文件夹名称将进行调整,可能看起来像/var/www/backup
。
在我们的子域发现活动中,我们看到一些子域具有相同的IP地址,这些子域可以是虚拟主机,或者在某些情况下,位于代理后面的不同服务器。
假设我们在内部pentest中识别了一个位于192.168.10.10
的Web服务器,它使用以下命令显示了一个默认网站。是否存在任何虚拟主机?
mikannse7@htb[/htb]$ curl -s http://192.168.10.10 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
让我们创建一个cURL
请求,发送一个在HOST
头中收集信息时识别的域。我们可以这样做:
mikannse7@htb[/htb]$ curl -s http://192.168.10.10 -H "Host: randomtarget.com" <html> <head> <title>Welcome to randomtarget.com!</title> </head> <body> <h1>Success! The randomtarget.com server block is working!</h1> </body> </html>
现在,我们可以通过使用可能的vhost名称的字典文件(例如Pwnbox上的/opt/useful/SecLists/Discovery/DNS/namelist.txt
)并检查Content-Length头来查找任何差异来自动执行此操作。
vHosts List app blog dev-admin forum help m my shop some store support www
vHost Fuzzing mikannse7@htb[/htb]$ cat ./vhosts | while read vhost;do echo "\n********\nFUZZING: ${vhost}\n********";curl -s -I http://192.168.10.10 -H "HOST: ${vhost}.randomtarget.com" | grep "Content-Length: ";done ******** FUZZING: app ******** Content-Length: 612 ******** FUZZING: blog ******** Content-Length: 612 ******** FUZZING: dev-admin ******** Content-Length: 120 ******** FUZZING: forum ******** Content-Length: 612 ******** FUZZING: help ******** Content-Length: 612 ******** FUZZING: m ******** Content-Length: 612 ******** FUZZING: my ******** Content-Length: 612 ******** FUZZING: shop ******** Content-Length: 612 ******** FUZZING: some ******** Content-Length: 195 ******** FUZZING: store ******** Content-Length: 612 ******** FUZZING: support ******** Content-Length: 612 ******** FUZZING: www ******** Content-Length: 185
我们已经成功识别了一个名为dev-admin
的虚拟主机,我们可以使用cURL
请求访问它。
mikannse7@htb[/htb]$ curl -s http://192.168.10.10 -H "Host: dev-admin.randomtarget.com" <!DOCTYPE html> <html> <body> <h1>Randomtarget.com Admin Website</h1> <p>You shouldn't be here!</p> </body> </html>
Automating Virtual Hosts Discovery 我们可以对一个小的虚拟主机列表使用这种手动方法,但如果我们有一个广泛的列表,它就不可行了。使用ffuf ,我们可以根据响应中的参数加快处理和滤波。让我们复制我们对ffuf所做的相同过程,但首先,让我们看看它的一些选项。
MATCHER OPTIONS: -mc Match HTTP status codes, or "all" for everything. (default: 200,204,301,302,307,401,403,405) -ml Match amount of lines in response -mr Match regexp -ms Match HTTP response size -mw Match amount of words in response FILTER OPTIONS: -fc Filter HTTP status codes from response. Comma separated list of codes and ranges -fl Filter by amount of lines in response. Comma separated list of line counts and ranges -fr Filter regexp -fs Filter HTTP response size. Comma separated list of sizes and ranges -fw Filter by amount of words in response. Comma separated list of word counts and ranges
我们可以根据不同的选项匹配或过滤响应。每次我们在HOST
头中发出无效的虚拟主机时,Web服务器都会响应默认的静态网站。我们可以使用filter by size -fs
选项来丢弃默认响应,因为它总是具有相同的大小。
mikannse7@htb[/htb]$ ffuf -w ./vhosts -u http://192.168.10.10 -H "HOST: FUZZ.randomtarget.com" -fs 612 /'___\ /'___\ /'___\ /\ \__/ /\ \__/ __ __ /\ \__/ \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\ \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/ \ \_\ \ \_\ \ \____/ \ \_\ \/_/ \/_/ \/___/ \/_/ v1.1.0-git ________________________________________________ :: Method : GET :: URL : http://192.168.10.10 :: Wordlist : FUZZ: ./vhosts :: Header : Host: FUZZ.randomtarget.com :: Follow redirects : false :: Calibration : false :: Timeout : 10 :: Threads : 40 :: Matcher : Response status: 200,204,301,302,307,401,403,405 :: Filter : Response size: 612 ________________________________________________ dev-admin [Status: 200, Size: 120, Words: 7, Lines: 12] www [Status: 200, Size: 185, Words: 41, Lines: 9] some [Status: 200, Size: 195, Words: 41, Lines: 9] :: Progress: [12/12] :: Job [1/1] :: 0 req/sec :: Duration: [0:00:00] :: Errors: 0 ::
where:其中:
-w
: Path to our wordlist
-u
: URL we want to fuzz
-H "HOST: FUZZ.randomtarget.com"
: This is the HOST
Header, and the word FUZZ
will be used as the fuzzing point.
-fs 612
: Filter responses with a size of 612, default response size in this case.
Crawling 抓取网站是系统的或自动的过程,探索一个网站,列出所有的资源遇到沿着。它向我们展示了我们正在审计的网站的结构,以及我们将在未来测试的攻击面的概述。我们使用抓取过程来找到尽可能多的网页和子目录属于一个网站尽可能。
ZAP Zed Attack Proxy (ZAP
)是一个开源Web代理,属于Open Web Application Security Project (OWASP
)。它允许我们对Web应用程序执行手动和自动安全测试。使用它作为代理服务器将使我们能够拦截和操纵所有通过它的流量。
我们可以在下面的步骤中使用蜘蛛功能。打开ZAP,在右上角打开浏览器。
在地址栏中写入网站,并使用左侧菜单中的第一个条目将其添加到范围中。
返回ZAP窗口,右键单击目标网站,单击攻击菜单,然后单击蜘蛛图标。
一旦进程完成,我们就可以看到蜘蛛进程发现的资源。
ZAP的一个方便的功能是内置的模糊和手动请求编辑器。我们可以发送任何请求给他们,手动修改它,或者通过右键单击请求并使用菜单“用请求编辑器打开/重新发送.或者“警察…“点击攻击菜单。
ZAP有很好的文档 ,可以帮助您快速使用它。有关ZAP的更详细研究,请查看HTB Academy上的使用Web代理模块 。
FFuF ZAP蜘蛛模块只枚举它在链接和表单中找到的资源,但它可能会遗漏重要信息,如隐藏文件夹或备份文件。
我们可以使用ffuf 来发现我们无法通过简单浏览网站来发现的文件和文件夹。我们所需要做的就是用一个文件夹名称列表启动ffuf
,并指示它递归地查看它们。
mikannse7@htb[/htb]$ ffuf -recursion -recursion-depth 1 -u http://192.168.10.10/FUZZ -w /opt/useful/SecLists/Discovery/Web-Content/raft-small-directories-lowercase.txt /'___\ /'___\ /'___\ /\ \__/ /\ \__/ __ __ /\ \__/ \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\ \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/ \ \_\ \ \_\ \ \____/ \ \_\ \/_/ \/_/ \/___/ \/_/ v1.1.0-git ________________________________________________ :: Method : GET :: URL : http://192.168.10.10/FUZZ :: Wordlist : FUZZ: /opt/useful/SecLists/Discovery/Web-Content/raft-small-directories-lowercase.txt :: Follow redirects : false :: Calibration : false :: Timeout : 10 :: Threads : 40 :: Matcher : Response status: 200,204,301,302,307,401,403,405 ________________________________________________ wp-admin [Status: 301, Size: 317, Words: 20, Lines: 10] [INFO] Adding a new job to the queue: http://192.168.10.10/wp-admin/FUZZ wp-includes [Status: 301, Size: 320, Words: 20, Lines: 10] [INFO] Adding a new job to the queue: http://192.168.10.10/wp-includes/FUZZ wp-content [Status: 301, Size: 319, Words: 20, Lines: 10] [INFO] Adding a new job to the queue: http://192.168.10.10/wp-content/FUZZ admin [Status: 302, Size: 0, Words: 1, Lines: 1] login [Status: 302, Size: 0, Words: 1, Lines: 1] feed [Status: 301, Size: 0, Words: 1, Lines: 1] [INFO] Adding a new job to the queue: http://192.168.10.10/feed/FUZZ ...
-recursion
:激活递归扫描。
-recursion-depth
:指定要扫描的最大深度。
-u
:我们的目标URL,FUZZ
将是注入点。
-w
:我们的单词列表路径。
我们可以在图片中看到ffuf
如何为每个检测到的文件夹创建新作业。对于目标服务器来说,此任务可能非常耗费资源。如果网站响应速度比平时慢,我们可以使用-rate
参数降低请求速率。
使用Ffuf攻击Web应用 程序模块更深入地介绍了ffuf
的用法,并展示了本模块中教授的许多技术。
这是典型的Web服务器和Web应用程序来处理它需要的功能文件。但是,通常会找到可能包含重要信息或凭据的备份或未引用文件。备份或未引用的文件可以通过创建快照、文件的不同版本或在Web开发人员不知情的情况下从文本编辑器生成。我们可以在SecLists的raft-[ small | medium | large ]-extensions.txt
文件中找到一些常见扩展名列表。
我们将联合收割机结合我们以前发现的一些文件夹,常见扩展名列表,以及从网站上提取的一些单词,看看我们是否能找到一些不应该在那里的东西。第一步是用以下文件夹名创建一个文件,并将其保存为folders.txt
。
wp-admin wp-content wp-includes
接下来,我们将使用CeWL 从网站中提取一些关键字。我们将指示该工具提取最小长度为5个字符的单词-m5
,将其转换为单词--lowercase
并将其保存到名为wordlist.txt的文件-w <FILE>
中:
mikannse7@htb[/htb]$ cewl -m5 --lowercase -w wordlist.txt http://192.168.10.10
下一步将是联合收割机在ffuf的一切,看看我们是否可以找到一些多汁的信息。为此,我们将在ffuf
中使用以下参数:
-w
:我们通过逗号分隔单词列表,并为它们添加别名,以便稍后将它们作为模糊点注入
-u
:我们的目标URL与模糊点。
mikannse7@htb[/htb]$ ffuf -w ./folders.txt:FOLDERS,./wordlist.txt:WORDLIST,./extensions.txt:EXTENSIONS -u http://192.168.10.10/FOLDERS/WORDLISTEXTENSIONS /'___\ /'___\ /'___\ /\ \__/ /\ \__/ __ __ /\ \__/ \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\ \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/ \ \_\ \ \_\ \ \____/ \ \_\ \/_/ \/_/ \/___/ \/_/ v1.1.0-git ________________________________________________ :: Method : GET :: URL : http://192.168.10.10/FOLDERS/WORDLISTEXTENSIONS :: Wordlist : FOLDERS: ./folders.txt :: Wordlist : WORDLIST: ./wordlist.txt :: Wordlist : EXTENSIONS: ./extensions.txt :: Follow redirects : false :: Calibration : false :: Timeout : 10 :: Threads : 40 :: Matcher : Response status: 200,204,301,302,307,401,403,405 ________________________________________________ [Status: 200, Size: 8, Words: 1, Lines: 2] * EXTENSIONS: ~ * FOLDERS: wp-content * WORDLIST: secret [Status: 200, Size: 0, Words: 1, Lines: 1] * FOLDERS: wp-includes * WORDLIST: comment * EXTENSIONS: .php [Status: 302, Size: 0, Words: 1, Lines: 1] * FOLDERS: wp-admin * WORDLIST: comment * EXTENSIONS: .php ...
mikannse7@htb[/htb]$ curl http://192.168.10.10/wp-content/secret~ Oooops!
通过这种方法,我们成功地找到了一个秘密文件。
Skills Assessment