在进行安全验证评估测试时,评估方给定一个目标域名后,我们需要对其进行详细的信息收集,就跟行军打仗一样,我们需要明白作战地点、敌方将帅等信息,做到知己知彼,才能百战不殆。网络安全验证评估测试也是如此,比如给定www.antian365.com 这个域名,我们需要穷尽一起办法,收集antian365.com的各种详细信息:

1.域名注册人及其相关信息。通过域名注册网站或者特殊网站来收集域名注册人的各种信息,其中主要需要收集公司地址、电话、email、姓名等信息。

2.利用前面收集的信息进行扩散收集,收集使用相同信息注册的一些信息

3.收集子域名信息。
(1)通过subDomainsBrute( https://github.com/lijiejie/subDomainsBrute )等工具收集该域名下的所有子域名地址及其对应IP地址信息。
(2)通过百度等搜索引擎使用site:antian365.com等语法进行检索,查看其子域名开放情况
(3)使用 http://fofa.so 对域名进行检索。
(4)使用 https://www.zoomeye.org/ 对域名进行检索
(5)使用 https://www.shodan.io/ 对域名进行检索
(6)使用 https://crt.sh/ 对目标公司网站的安全证书进行检索。
(7)使用 http://searchdns.netcraft.com/ 对域名进行检索
(8)使用 https://www.yougetsignal.com/tools/web-sites-on-web-server/ 等对域名进行IP地址及同网站域名查询。
(9)同网段IP域名信息收集 http://www.webscan.cc/、http://www.5kik.com/c/

4.主站及子站信息收集,对站点的各种信息进行收集,电话、邮箱、用户名等信息。

5.利用百度等搜索引擎限定域名进行信息收集,收集公司人员信息,公司培训手册等各种信息。

1.1域名(子域名)收集方法

在对目标网络进行安全验证时,除了收集端口、域名、对外提供服务等信息外,其子域名信息收集是非常重要的一步,相对主站,分站的安全防范会弱一些,因此通过收集子域名信息来进行安全验证是目前常见的一种手法。子域名信息收集可以通过手工,也可以通过工具,还可以通过普通及漏洞搜索引擎来进行分析。在挖SRC漏洞时,子域名信息的收集至关重要!

主域名由两个或两个以上的字母构成,中间由点号隔开,整个域名只有1个点号;子域名(Sub-domain),是顶级域名(.com、.top、.cn)的下一级,域名整体包括两个“.”或包括一个“.”和一个“/”。比如baidu.com是顶级域名,其rj.baidu.com则为其子域名,在其中包含了两个“.”,再举一个例子google.com 这叫一级域名或顶级域名,mail.google.com 这叫二级域名,250.mail.google.com 这叫三级域名,mail.google.com和250.mail.google.com统称为子域名。

在有些情况下,域名进行重定向,例如rj.baidu.com定向到 baidu.com/rj ,在该地址中出现了一个“.”和一个“/”,主域名一般情况是指以主域名结束的多个前缀。例如rj(软件)、bbs(论坛)等。由于域名持有者仅仅一个域名无法满足其业务的需要,因此可以注册很多个子域名,这些子域名分别指向不同的业务系统(CMS),在主站上会将有些子域名所部署的系统建立连接,但绝大部分是公司自己知道。对于安全验证人员而言如果知道这些子域名,相当于扩大了安全验证危害的范围,子域名测试方法就是通过URL访问,看其返回结果,如果有页面信息返回或者地址相应,则证明其存在,否则不存在。收集子域名主要有下面一些方法:

1.Web子域名猜测与实际访问尝试

最简单的一种方法,对于 Web 子域名来说,猜测一些可能的子域名,然后浏览器访问下看是否存在,这种方法只能进行初略的测试,比如baidu.com,其可能域名fanyi/v/tieba/stock/pay/pan/bbs.baidu.com等,这种方法对于常见的子域名测试效果比较好。

 2.搜索引擎查询主域名地址

在搜索引擎中通过输入“site:baidu.com”来搜索其主要域名baidu.com下面的子域名,如图1所示。在其搜索结果中可以看到有fanyi、image、index等子域名,利用搜索引擎查找子域名可能会有很多重复的页面和结果,还有可能遗漏掉爬虫未抓取的域名。

图1利用百度搜索子域名

一些技巧:
(1)allintext: = 搜索文本,但不包括网页标题和链接
(2)allinlinks: = 搜索链接, 不包括文本和标题。
(3)related:URL = 列出于目标URL地址有关的网页。
(4)link:URL = 列出到链接到目标URL的网页清单。
(5)使用“-”去掉不想看的结果,例如site:baidu.com -image.baidu.com

3.查询DNS的解析记录

通过查询其域名下的mx、cnmae记录,主要通过nslookup命令来查看。例如:
nslookup -qt=mx 163.com //查询邮箱服务器,其mx可以换成一下的一些参数进行查询。

A 地址记录(Ipv4)
AAAA 地址记录(Ipv6)
AFSDB Andrew文件系统数据库服务器记录
ATMA ATM地址记录
CNAME 别名记录
HINFO 硬件配置记录,包括CPU、操作系统信息
ISDN 域名对应的ISDN号码
MB 存放指定邮箱的服务器
MG 邮件组记录
MINFO 邮件组和邮箱的信息记录
MR 改名的邮箱记录
MX 邮件服务器记录
NS 名字服务器记录
PTR 反向记录
RP 负责人记录
RT 路由穿透记录
SRV TCP服务器信息记录
TXT 域名对应的文本信息
X25 域名对应的X.25地址记录

4.基于DNS查询的暴力破解

目前有很多开源的工具支持子域名暴力破解,通过尝试字典+“.”+“主域名”进行测试,例如字典中有:bbs/admin/manager,对baidu.com进行尝试,则会爬取:
bbs.baidu.com、admin.baidu.com、manager.baidu.com,通过访问其地址,根据其相应状态关键字来判断是否从开启和存在。

5.手工分析

通过查看主站主页以及相关页面,从html代码以及友情链接地地方去手工发现,担任其主域名或者其它域名下的crossdomain.xml文件会包含一些子域名信息。

1.2 kali子域名信息收集工具

在kali linux下有dnsenum、dnsmap、dnsrecon、dnstracer、dnswalk、fierce、urlcrazy共七个dns信息收集与分析工具,如图2所示。

图2 kali linux dns信息收集与分析工具

1.dnsenum

dnsenum的目的是尽可能收集一个域的信息,它能够通过谷歌或者字典文件猜测可能存在的域名,以及对一个网段进行反向查询。它可以查询网站的主机地址信息、域名服务器、mx record(函件交换记录),在域名服务器上执行axfr请求,通过谷歌脚本得到扩展域名信息(google hacking),提取自域名并查询,计算C类地址并执行whois查询,执行反向查询,把地址段写入文件。目前最新版本为1.2.4,下载地址:https://github.com/fwaeytens/dnsenum
kali安全验证测试平台配置版本为1.2.3。

1.安装git clone https://github.com/fwaeytens/dnsenum.git
更新必需插件:apt-get install cpanminus

2.使用命令

dnsenum.pl  [选项]  <域名>

普通选项

--dnsserver   <server>  指定dns服务器,一般可以直接使用目标dns服务器,(PS:8.8.8.8 是一个IP地址,是Google提供的免费dns服务器的IP地址,另一个是:8.8.4.4)来进行A(IPv4地址)、NS(服务器记录)和MX(邮件交换记录)查询。
--enum              快捷参数,相当于--threads 5 -s 15 -w(启动5线程,谷歌搜索15条子域名,)
-h, --help            打印帮助信息.
--noreverse          忽略反转查询操作。
--nocolor             禁用ANSI颜色输出
--private             在domain_ips.txt文件末端显示和保持私有IP地址。
--subfile <file>        将所有有效子域写入[file]中。
-t, --timeout <value>   设置tcp 和 udp超时的秒数(默认10秒)
--threads <value>    在不同查询中将会执行的线程数
-v, --verbose        显示错误信息和详细进度信息
google搜索选项:
-p, --pages <value>   从谷歌搜索的页面数量,默认5页,-s参数必须指定,如果无需使用google抓取,则值指定为0
-s, --scrap <value>   子域名将被Google搜索的最大值,缺省值是15.
暴力破解选线:
-f, --file <file>     从文件中读取进行子域名暴力破解
-u, --update  <a|g|r|z> 更新将有效的子域名到-f参数指定的文件中,具体的更新方式见update参数列表:
 a (all)      更新使用所有的结果
 g            更新只使用google搜出的有效结果。
 r           更新只使用反向查询出的有效结果
 z            更新只使用区域转换的有效结果
 -r, --recursion       穷举子域,暴力破解所有发现有DS记录的子域。
WHOIS 选项:
-d, --delay <value>  whois查询的最大值,缺省是3秒
-w, --whois           在C端网络上执行whois查询
反向查询选项:
-e, --exclude <regexp> 从反向查找结果表达式匹配中排除PTR记录,对无效的主机名有用。
输出结果选线:
-o --output <file>    输入xml格式文件名可以被导入MagicTree (www.gremwell.com)

3.常用命令
(1)使用dns.txt文件对baidu.com进行子域名暴力破解
./dnsenum.pl -f dns.txt baidu.com
(2)查询baidu.com域名信息,主要查询主机地址、名称服务器、邮件服务器以及尝试区域传输和获取绑定版本。
./dnsenum.pl baidu.com
(3)对域名example.com不做逆向的LOOKUP(-noreverse),并将输出保存到文件(-o mydomain.xml)
./dnsenum.pl --noreverse -o mydomain.xml example.com

2.dnsmap

dnsmap最初是在2006年发布的,主要用来收集信息和枚举DNS信息,默认在kali中安装,其下载地址:https://github.com/makefu/dnsmap ,目前最新版本为

1.安装
git clone https://github.com/makefu/dnsmap.git
make 或者gcc -Wall dnsmap.c -o dnsmap

2.使用参数
命令:dnsmap <目标域名> [选项]
选项:

-w <字典文件>
-r <常规结果文件>
-c <以csv文件保存>
-d <延迟毫秒 >
-i <忽略ips > (在获得误报时很有用)

3.使用示例
(1)直接枚举域名
dnsmap baidu.com
(2)使用默认字典wordlist_TLAs.txt进行暴力枚举,并保存结果到/tmp/baidu.txt
dnsmap baidu.com -w wordlist_TLAs.txt -r /tmp/baidu.txt
(3)以3000毫秒延迟,扫描结果以常规文件按照时间格式保存在/tmp目录
dnsmap baidu.com -r /tmp/ -d 3000
(4)批量方式暴力破解目标域列表
./dnsmap-bulk.sh domains.txt / tmp / results /

4.总结
dnsmap暴力破解子域名信息,需要字典配合,速度比较快。

3.dnsrecon

dnsrecon由Carlos Perez 用Python开发,用于DNS侦察,该工具可以区域传输、反向查询、暴力猜解、标准记录枚举、缓存窥探、区域遍历和Google查询。目前最新版本0.8.12,其下载地址:https://github.com/darkoperator/dnsrecon

1.参数
用法: dnsrecon.py <选项>
选项:

   -h, --help                   显示帮助信息并退出,执行默认命令也显示帮助信息
   -d, --domain      <domain>   目标域名
   -r, --range       <range>    反向查询的IP地址范围
   -n, --name_server <name>    如果没有给定域名服务器,则默认使用目标的SOA
   -D, --dictionary  <file>     暴力破解的字典文件
   -f                   过滤掉域名暴力破解,解析到通配符定义
   -t, --type        <types>    枚举执行的类型,以逗号进行分隔。
                                std       SOA, NS, A, AAAA, MX and SRV.
                                rvl       一个给定的反向查询CIDR或者地址范围.
                                brt      域名暴力破解指定的主机破解字典。
                                srv       SRV 记录.
                                axfr      测试所有ns服务器的区域传输。
                                goo      利用谷歌执行搜索子域和主机.
                                bing   利用bing执行搜索子域和主机                                
   -g                           利用google进行枚举.
   -b                           利用bing进行枚举.
   --threads         <number>  线程数
   --lifetime        <number>   等待服务器响应查询的时间。
   --db              <file>     SQLite 3文件格式保存发现的记录.
   --xml             <file>     XML文件格式保存发现的记录.
   --iw                继续通配符强制域,即使通配符记录被发现.
   -c, --csv         <file>     csv文件格式.
   -j, --json        <file>     JSON 文件
   -v                      显示详细信息。

2.使用示例
(1)执行标准的DNS查询

./dnsrecon.py -d <domain>

(2)DNS区域传输
DNS区域传输可用于解读公司的拓扑结构.如果发送DNS查询,列出了所有DNS信息,包括MX,CNAME,区域系列号,生存时间等,这就是区域传输漏洞。DNS区域传输漏洞现今已不容易发现,DNSrecon可使用下面方法查询

./dnsrecon.py -d <domain>  -a 
./dnsrecon.py -d <domain> -t axfr

(3)反向DNS查询

./dnsrecon.py -r <startIP-endIP>

(4)DNS枚举,会查询A,AAA,CNAME记录:

./dnsrecon.py -d <domain> -D <namelist> -t brt

(5)缓存窥探
DNS服务器存在一个DNS记录缓存时,就可以使用这个技术.DNS记录会反应出许多信息,DNS缓存窥探并非经常出现

./dnsrecon.py -t snoop -n Sever -D <Dict>

(6)区域遍历

./dnsrecon.py -d <host> -t zonewalk

4.dnstracer

dnstracer最新版本1.9,下载地址http://www.mavetju.org/download/dnstracer-1.9.tar.gz
Usage: dnstracer [选项] [主机]

        -c: 禁用本地缓存,默认启用
        -C: 启用negative缓存, 默认启用
        -o: 启用应答概览,默认禁用
        -q <querytype>: DNS查询类型, 默认 A
        -r <retries>: DNS请求重试的次数,默认为3
        -s <server>: 对于初始请求使用这个服务器,默认为localhost,如果指定则a.root-servers.net将被使用。
        -t <maximum timeout>:每次尝试等待的限制时间
        -v: verbose
        -S <ip address>:使用这个源地址.
        -4: 不要查询IPv6服务器

5.dnswalk

dnswalk是一个DNS调试器。它执行指定域的区域传输,并以多种方式检查数据库的内部一致性以及准确性,主要用来调试区域传输漏洞,其下载地址:https://sourceforge.net/projects/dnswalk/ ,主要参数:

-r    递归子域名
 -i    禁止检查域名中的无效字符。
-a    打开重复记录的警告.
-d    调试
-m   仅检查域是否已被修改。(只有dnswalk以前运行过才有效)
-F    开启"facist" 检查
 -l    检查瘸腿的代表团

使用方法:
dnswalk baidu.com.
注意,其域名后必须加一个“.”,程序写于1997年,有些老了!

6.fierce

测试区域传输漏洞和子域名暴力破解。

fierce -dns blog.csdn.net
fierce -dns blog.csdn.net -wordlist myDNSwordlist.txt

7.urlcrazy

Typo域名是一类的特殊域名。用户将正确的域名错误拼写产生的域名被称为Typo域名。例如,http://www.baidu.com 错误拼写为http://www.bidu.com ,就形成一个Typo域名。对于热门网站的Typo域名会产生大量的访问量,通常都会被人抢注,以获取流量。而haker也会利用Typo域名构建钓鱼网站。Kali Linux提供对应的检测工具urlcrazy,该工具统计了常见的几百种拼写错误。它可以根据用户输入的域名,自动生成Typo域名;并且会检验这些域名是否被使用,从而发现潜在的风险。同时,它还会统计这些域名的热度,从而分析危害程度。

urlcrazy [选项] domain

选项

 -k, --keyboard=LAYOUT  Options are: qwerty, azerty, qwertz, dvorak (default: qwerty)
 -p, --popularity       用谷歌检查域名的受欢迎程度
 -r, --no-resolve       不解析DNS
 -i, --show-invalid     显示非法的域名
 -f, --format=TYPE     输出csv或者可阅读格式,默认可阅读模式
 -o, --output=FILE      输出文件
 -h, --help            This help
 -v, --version          打印版本信息

例如:查看baidu.com的仿冒域名:
urlcrazy -i baidu.com

1.3windows下子域名信息收集工具

1. subDomainsBrute子域名暴力破解工具

subDomainsBrute是李劼杰开发的一款开源工具,subDomainsBrute主要目标是发现其他工具无法探测到的域名, 如Google,aizhan,fofa。高频扫描每秒DNS请求数可超过1000次,目前最新版本为2.5,对于大型公司子域名的效率非常高,比国外的一些工具好用。

(1)下载及设置
git clone https://github.com/lijiejie/subDomainsBrute.git
cd subDomainsBrute
chmod +x subDomainsBrute.py

(2)使用参数
--version 显示程序版本信息
-h, --help 显示帮助信息
-f FILE 对多个文件中的子域名进行暴力猜测,文件中一行一个域名。
--full 文件subnames_full.txt将用来进行全扫描。
-i, --ignore-intranet 忽略内网IP地址进行扫描
-t THREADS, --threads=THREADS 设置扫描线程数,默认为200
-p PROCESS, --process=PROCESS 扫描进程数,默认为6
-o OUTPUT, --output=OUTPUT 输出文件

(3)实际使用
./subDomainsBrute.py qq.com
对qq.com进行子域名暴力破解,扫描结束后将其结果保存为qq.com.txt
注意,如果是在python环境下,有的需要安装dnspython(pip install dnspython)才能正常运行。扫描效果如图3所示,对39万多域名进行扫描,发现8488个,仅用424.7秒。

图3 subDomainsBrute子域名暴力破解

2. Layer子域名挖掘机

Layer子域名挖掘机是Seay写的一款国产好用的子域名暴力破解工具,其运行平台为windows,可在window xp/2003/2008等环境中使用,需要安装.net 4.0环境,操作使用比较简单,在域名输入框中输入域名,选择dns服务,启动即可,运行界面如图4所示。下载地址:https://pan.baidu.com/s/1i5NpcJ7

图4 Layer子域名挖掘机

1.4子域名在线信息收集

目前互联网上一些个人或者公司提供了域名查询和资产管理,可以通网站进行在线查询。

1.子域名查询

网站地址http://subdomain.chaxun.la/,输入域名信息即可查询,该网站只收录流量高的站点,对于小网站查询效果较差,例如查询百度,如图5所示,可以看到有880条记录。

图5查询子域名

2.站长工具子域名查询

子域名查询地址:http://tool.chinaz.com/subdomain/ ,使用同样的域名查询在chinaz中仅仅显示40条。

3. 云悉在线资产平台查询

信息查询地址:http://www.yunsee.cn/info.html ,对百度域名进行查询,其结果显示有6170条,如图6所示,记录包含域名和标题,还可以查看web信息、域名信息和IP信息等。

图6云悉在线子域名查询

4.威胁平台子域名资产管理

一些威胁平台都提供了子域名资产管理,但大都需要注册,才能查看,例如有:
微步:https://x.threatbook.cn/domain/baidu.com
360天眼:https://ti.360.net/
http://www.webscan.cc/

5.根据 HTTPS 证书查询子域名

crt.sh 网站(https://crt.sh/ )提供了通过域名查证书,或者通过证书查找域名。该方法也是收集子域名的一个好方法,在对大公司挖掘漏洞时比较有效。

6.收集的一些在线等域名枚举工具

https://github.com/lijiejie/subDomainsBrute (Classical Subdomain Enumeration Tool)
https://github.com/ring04h/wydomain (Intergrated Subdomain Enumeration Tool via Massive Dictionary Rules)
https://github.com/le4f/dnsmaper (Subdomain Enumeration via DNS Record)
https://github.com/0xbug/orangescan (Online Subdomain Enumeration Tool)
https://github.com/TheRook/subbrute (Subdomain Enumeration via DNS Record)
https://github.com/We5ter/GSDF (Subdomain Enumeration via Google Certificate Transparency)
https://github.com/mandatoryprogrammer/cloudflare_enum (Subdomain Enumeration via CloudFlare)
https://github.com/guelfoweb/knock (Knock Subdomain Scan)
https://github.com/Evi1CLAY/CoolPool/tree/master/Python/DomainSeeker (An Intergratd Python Subdomain Enumeration Tool)
https://github.com/code-scan/BroDomain (Find brother domain)
https://github.com/chuhades/dnsbrute (a fast domain brute tool)
https://github.com/yanxiu0614/subdomain3 (A simple and fast tool for bruting subdomains)

1.5子域名利用总结

通过对目前市面上一些常见的域名收集工具进行测试和分析,发现kali上面集成的工具比较成就,很多子域名暴力破解工具效率低下,在windows下法师开发的layer子域名暴力破解工具效果和效率都不错,且支持导出。

1.比较好用的子域名暴力破解工具

(1)dnsenum、dnsmap、dnsrecon
(2)subDomainsBrute
(3)一些在线资产管理平台,例如云悉等。

2.在线的一些漏洞搜索引擎也可以收集域名信息

(1)dnsdb:https://www.dnsdb.io
(2)censys:https://www.censys.io/
(3)fofa:https://fofa.so/
(4)钟馗之眼:https://www.zoomeye.org/
(5)shodan:https://www.shodan.io/

3.子域名收集的完毕程度,可以增加安全验证成功的几率

接下来跟着我一起探索web安全大世界吧!这已经是我在51CTO订阅专栏上线的第二个专栏了。鉴于上一个专栏《SQLmap入门到精通》的读者非常期待我能再出一个web方向的专栏,因此有了本专栏《web网站安全评估分析及防御》的写作方向。专栏大纲如下:

1.目标域名、子域名及信息收集
2.CMS指纹识别技术及应用
3.nmap端口扫描及应用
4.使用Acunetix Web Vulnerability Scanner扫描及利用网站漏洞
5.使用Router Scan扫描路由器密码
6.MySQL口令扫描安全验证测试与防范
7.使用JSKy扫描及利用网站漏洞及防御
8.使用webcruiser扫描网站漏洞及防御
9.利用burpsuite进行漏洞扫描及分析
10.使用Netspark扫描及利用网站漏洞及防御
11.msf下web漏洞扫描及防御
12.web目录扫描及防御
13.web前台及后台登录口令暴力破解及防御
14.Fckeditor漏洞利用及防御
15.KindEditor漏洞利用及防御
16.web中间件漏洞利用及防御
17.普通sql注入漏洞扫描利用及防御
18.soap注入漏洞扫描利用及防御
19.git信息泄露利用及防御
20.网站源代码SVN泄露利用及防御
21.常见cms-1漏洞利用及总结
22.常见cms-2漏洞利用及总结
23.网站日志分析及漏洞修复
24.网站webshell的检测及扫描
25.web漏洞安全危害溯源分析
26.web漏洞手工挖掘及利用
27.利用waf日志对漏洞进行分析及验证
28.部署防御系统进行网络流量分析
29.若干漏洞扫描及利用实战案例
30.对某网站一次的安全评估测试报告