第一部分:被动信息收集
1、简介
在信息收集这块区域,我将其分为两部分:第一部分即被动信息收集,第二部分即主动信息收集。
对于标准的渗透测试人员来说,当明确目标做好规划之后首先应当进行的便是信息收集,那么在收集的过程中就需要考虑是否应该被目标发现。对于企业安全管理来说,他会无时无刻的监管着企业的服务器,保持企业的正常的运行,所以当如果企业的服务器出现异常访问、或者大量的信息请求等等不是正常的流量的情况下,企业的安全运维人员便会对访问者即使作出应急响应,比如:限制访问次数、拒绝响应请求、封锁IP等等。那么这无疑会增大渗透测试者的攻击难度,为了避免这种情况的发生,最好的办法就是在此之前避免与之直接交互先收集足够的信息,不被目标发现,当我们无法再收集有用的信息之后,主动收集便是我们才要进行的步骤。
当然,在被动信息收集的时候,我们应当注意被动信息收集的三个基本要求:
- 公开渠道可获得的信息
- 与目标系统不产生直接交互
- 尽量避免留下一切痕迹
总之一句话,被动信息收集的过程中,保持最大的隐蔽性,防止目标发现,不予目标产生直接的交互,也可以理解为,在目标看来一切的收集过程都是正常的访问过程。
2、信息收集的内容
在这一阶段,信息收集的内容可能会很多,例如:
IP地址段、域名信息、邮件地址、文档图片数据、公司地址、公司组织架构、联系电话/传真号码、人员姓名/职务、目标系统使用的技术架构、公开的商业信息等等。
上面所说的内容,仅仅只是我们常用的一些内容,在这一阶段,针对目标所有的一些信息都可能成为我们利用的信息。有一点很重要,对于一个良好的渗透测试人员来说,没有什么信息是没有用处的,如果有,那就是可能漏了什么。
3、信息收集的用途
当我们收集到信息之后,我们的信息是很杂乱的,那么这就需要对这些信息做一些整理,例如:
域名查询到的信息为一类,具体到可为:
子域名
真实IP
...
各种搜索引擎查询到的信息为一类,如:
- Google hacking
- fofa
- ZoomEye
- shodan
DNS解析记录(whois)查询为一类,如:
域名所有者的姓名
联系人电话
邮箱地址
...
当然,实际情况并不是像上面一样一个一个列,一个一个记录,在真实的渗透测试信息收集环境中,一般不会是独自完成,那么这样收集的信息就会更乱,所以,很多时候都会用到信息统计工具,将我们所收集的信息分类录入上去,这样,团队信息收集完成后,这样的信息便会一目了然。
对我们来说,我们的目的是利用收集的信息,所以当对我们手中所掌握的信息有了一个足够的了解之后,我们就应该开始进行信息利用了,那么实际情况中信息利用的方向就很广,并不局限。
例如以下用途:
1、用信息描述目标:
这个目标的真实IP地址是什么,它具有的子域名有什么,曾经是否发生过信息威胁记录等等。
2、发现:
目标网站的技术框架是什么、哪个版本、目标时候具有防火墙或者CDN、C段查询、站点真实IP对应的开放端口有哪些,提供什么服务等等。
3、社会工程学攻击:
在一些DNS解析中,可能会收集到目标站点的注册者的相关信息,那么有了这些信息,通常就会利用邮件钓鱼等方式。
注:请在目标用户的许可和符合法律的情况之下进行,否则切勿操作。
4、物理缺口:
这种利用就不再是网络操作而已,更多的就是实地考察等。
4、二级域名或IP收集
1).DNS信息收集
dns信息收集的意义:dns信息中包含了很多对渗透人员来说有用的信息,这些信息能为接下来的渗透行为提供思路,比如攻击dns服务器、域名劫持、子域渗透等。对渗透目标进行dns信息的收集通常是被动的形式,不会对被渗透目标产生影响也不会在被渗透目标上留下任何痕迹。
dns需要收集的信息:
A记录:记录域名和服务器的对应关系
cname记录:别名记录,把一个域名解析到另一个域名
ns记录:记录解析该域名的dns服务器
mx记录:邮件交换记录,对应邮件服务器
txt记录:一般为验证记录
bind信息:域名服务器所使用的bind版本信息
这里说明两个工具:nslookup、dig、dnsenum
新版kali不再包含nslookup工具,需要使用如下命令:
apt-get install bind9-utils
利用nslookup
这里能看到域名解析之后的CName以及对应的IP地址,下面再举几个例子:
通过这几个域名的解析我们能够看到DNS解析后能够得到的IP地址,如果在以前可能这就是真实的IP地址,但现在来说一般企业都会用到CDN加速自己的网站,那么这样解析得到的IP地址就变得作用甚微,因为CDN就像类似代理一样,你并不知道目前获得的IP地址是否是真实的IP地址,比如:
多次进行:nslookup 域名、ping 域名
能够清楚的看到,这一次的解析与上一次的解析完全不同,这就是做了CDN的网站,那么如何绕过这种CDN找到真实的IP地址呢?稍后会说明
补充:我这里用到百度对应的域名服务器的IP地址119.29.29.29且对应的服务端口号就是53端口(DNS服务的通信端口),那么对于一个服务器来说,53端口的开放就能做到很多事,比如像利用DNS53端口绕过校园网认证 (百度就别想了)。有关端口的一些利用和所对应的服务并不在这里详述。
当然,nslookup并不是只有此用法,还有如获取不同类型的记录,a、mx、ns、any等。
更多的可用法可以使用man nslookup查询。
利用dig
上面已经描述了相关的DNS解析,那么这里就直接说明工具的用法了。
用法:
dig @server name type
这里用Google的DNS服务器去解析百度的mx记录,效果如下:
解析百度any:
dig能够反向查询DNS服务器的IP地址,如:
dig能够进行DNS追踪,如:(这里的dig查询过程是值得探究的,至于具体的可以抓包⽐比较递归查询、迭代查询过程的区别)
2).DNS域传送漏洞
这里会用到三个工具:dnsenum、dig、host
dnsenum是一款强大的域名信息收集工具,它除了能查询常用的dns记录外,还能使用google搜索和使用字典爆破子域名。
Dns是整个互联网公司业务的基础,越来越多的互联网公司开始自己搭建DNS服务器做解析服务,同时由于DNS服务是基础性服务非常重要,因此很多公司会对DNS服务器进行主备配置而DNS主备之间的数据同步就会用到dns域传送,但如果配置不当,就会导致任何匿名用户都可以获取DNS服务器某一域的所有记录,将整个企业的基础业务以及网络架构对外暴露从而造成严重的信息泄露,甚至导致企业网络被渗透。
如果存在,不仅能搜集子域名,还能轻松找到一枚洞,这样子的好事百试不厌。
利用dig
利用host
也可以利用host去进行域传送漏洞查询:
利用dnsenum
dnsenum工具可以获取dns域中的域名,如:
dnsenum参数说明:
` -h 查看工具使用帮助
--dnsserver 指定域名服务器
--enum 快捷选项,相当于"--threads 5 -s 15 -w"
--noreverse 跳过反向查询操作
--nocolor 无彩色输出
--private 显示并在"domain_ips.txt"文件结尾保存私有的ips
--subfile 写入所有有效的子域名到指定文件
-t, --timeout tcp或者udp的连接超时时间,默认为10s(时间单位:秒)
--threads 查询线程数
-v, --verbose 显示所有的进度和错误消息
-o ,--output 输出选项,将输出信息保存到指定文件
-e, --exclude 反向查询选项,从反向查询结果中排除与正则表达式相符的PTR记录,在排查无效主机上非常有用
-w, --whois 在一个C段网络地址范围提供whois查询
-f dns.txt 指定字典文件,可以换成 dns-big.txt 也可以自定义字典`
3).备案号查询
在我国,每一个网站都会进行备案,那么在同一个备案号下就可能查到其他的相关公司域名。