信息收集
第一部分:被动信息收集
1、简介
在信息收集这块区域,我将其分为两部分:第一部分即被动信息收集,第二部分即主动信息收集。
对于标准的渗透测试人员来说,当明确目标做好规划之后首先应当进行的便是信息收集,那么在收集的过程中就需要考虑是否应该被目标发现。对于企业安全管理来说,他会无时无刻的监管着企业的服务器,保持企业的正常的运行,所以当如果企业的服务器出现异常访问、或者大量的信息请求等等不是正常的流量的情况下,企业的安全运维人员便会对访问者即使作出应急响应,比如:限制访问次数、拒绝响应请求、封锁IP等等。那么这无疑会增大渗透测试者的攻击难度,为了避免这种情况的发生,最好的办法就是在此之前避免与之直接交互先收集足够的信息,不被目标发现,当我们无法再收集有用的信息之后,主动收集便是我们才要进行的步骤。
当然,在被动信息收集的时候,我们应当注意被动信息收集的三个基本要求:
总之一句话,被动信息收集的过程中,保持最大的隐蔽性,防止目标发现,不予目标产生直接的交互,也可以理解为,在目标看来一切的收集过程都是正常的访问过程。
2、信息收集的内容
在这一阶段,信息收集的内容可能会很多,例如:
上面所说的内容,仅仅只是我们常用的一些内容,在这一阶段,针对目标所有的一些信息都可能成为我们利用的信息。有一点很重要,对于一个良好的渗透测试人员来说,没有什么信息是没有用处的,如果有,那就是可能漏了什么。
3、信息收集的用途
当我们收集到信息之后,我们的信息是很杂乱的,那么这就需要对这些信息做一些整理,例如:
当然,实际情况并不是像上面一样一个一个列,一个一个记录,在真实的渗透测试信息收集环境中,一般不会是独自完成,那么这样收集的信息就会更乱,所以,很多时候都会用到信息统计工具,将我们所收集的信息分类录入上去,这样,团队信息收集完成后,这样的信息便会一目了然。
对我们来说,我们的目的是利用收集的信息,所以当对我们手中所掌握的信息有了一个足够的了解之后,我们就应该开始进行信息利用了,那么实际情况中信息利用的方向就很广,并不局限。
例如以下用途:
4、二级域名或IP收集
1).DNS信息收集
这里说明两个工具:nslookup、dig、dnsenum
利用nslookup
这里能看到域名解析之后的CName以及对应的IP地址,下面再举几个例子:
通过这几个域名的解析我们能够看到DNS解析后能够得到的IP地址,如果在以前可能这就是真实的IP地址,但现在来说一般企业都会用到CDN加速自己的网站,那么这样解析得到的IP地址就变得作用甚微,因为CDN就像类似代理一样,你并不知道目前获得的IP地址是否是真实的IP地址,比如:
多次进行:nslookup 域名、ping 域名
能够清楚的看到,这一次的解析与上一次的解析完全不同,这就是做了CDN的网站,那么如何绕过这种CDN找到真实的IP地址呢?稍后会说明
当然,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域传送漏洞
如果存在,不仅能搜集子域名,还能轻松找到一枚洞,这样子的好事百试不厌。
利用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).备案号查询
在我国,每一个网站都会进行备案,那么在同一个备案号下就可能查到其他的相关公司域名。
http://www.beianbeian.com、ICP网站域名备案查询网
以CSDN为例:
上面就能清楚的看到在这个备案号下面还有多少域名,然后做出相关域名收集整理
4).SSL查询
目前一般的企业站点都会具备HTTPS协议的能力,那么通过这一项也能查找出一些相关的子域名。
SSL状态检测
例如:
5).APP提取(可能)
在这一个内容中,前提就是目标站点具有安卓app,如果没有,那么就只能忽略。同时,现在很多app都会具有加壳手段,那么直接反编译就不再具备效果,需要脱壳处理,前提是具有汇编和逆向的能力;如果没有加壳技术,那么这就是一个很好的查找子域名的思路,毕竟APP里面有大量的接口IP和内网 IP,可以获取不少安全漏洞。
这里就不再详细举例子介绍了,如果有去壳的app那么就可以用反汇编工具尝试一下,像AndroidKiller反编译工具等。
6).微信公众号
如果目标具有相关公众号,那么渗透相关公众号,绝对会有意外收获,比如获取不少漏洞+域名,可以参考 Burp APP抓包抓取微信公众号数据。
7).暴力破解/字典枚举
所谓暴力破解即利用一个已经生成的数字组合不断尝试与目标匹配,直到找出相符的目标单位。
暴力破解可以用很多工具,如DNSReconcile、Layer子域名挖掘机、DirBuster、fierce、dnsdict6、dnsenum、dnsmap、dnsrecon、等等
下面举个几个例子,同时这里的字典就用工具自带的字典了。
用Demon:
利用dnsdict6
安装:dnsdict6
`https://src.fedoraproject.org/lookaside/pkgs/thc-ipv6/thc-ipv6-2.7.tar.gz/2975dd54be35b68c140eb2a6b8ef5e59/thc-ipv6-2.7.tar.gz
tar -zxvf thc-ipv6-2.7.tar.gz
cd thc-ipv6-2.7/
apt-get install -y libpcap-dev libssl-dev
make
cp dnsdict6 /usr/bin/
dnsdict6`
利用dnsenum
8).DNS历史记录解析
像这种历史记录解析,一般都可以查到以前域名拥有着的相关信息,例如:
注:像通常所谓的钓鱼攻击,一般都会去收集这些历史信息。
9).威胁情报查询
像华为、360都拥有威胁情报查询的能力:360威胁情报中心
比如以前站点出现过哪些漏洞、相关内容,都可能在情报中查到:
10).证书序列号获取域名与IP
一个网站都会具有相关的证书,那么对证书的序列号进行查询,也会有意外的收获:
转为十进制后,就可以用fofa去搜一搜:
11).搜索引擎(重点)
在信息收集中,搜索引擎能够提供给我们很大的帮助,几乎很大的程度的帮助都来自于搜索引擎,而普遍的搜索引擎有:
- shodan
- fofa
- ZoomEye(知道创宇)
还有很多好用的搜索引擎就不再多介绍了这里就说说常用的搜索引擎。
一般使用Google进行搜索的话,也叫Googlehacking,简单说明几个例子,关于搜索引擎的用法其实有很多,可以任意搭配,不可能说的完。
1、搜索含有管理员登录页面的URL
语法:inurl:/admin/login.php
2、搜索文件类型为xls且包含username、password字段的内容
语法:filetype:xls "username | password"
3、搜索含有充值字符没有支付制服的页面
语法:+充值 -支付
关于Google搜索引擎的用法,可以去https://www.exploit-db.com/google-hacking-database这个页面浏览,然后根据自己情况写出适合自己的。
shodan
据说shodan是一个很强大的搜索引擎,用于搜索联⽹的设备,传言只要有联网的设备都会被搜索到,其原始开发者有msf框架的开发者参与。
Shodan Search Engine
常见的过滤规则就是:
net、city、country、port、os、hostname
语法比如:os:windows country:CN city:neijing
语法可以自己构造,也可以参考:https://www.shodan.io/explore看看别人怎么构造语句的。
fofa
https://fofa.so/
想必到了这里搜索引擎的语句构造就不需要再赘述了,那么简单说两个例子:
1、查询C段
ip="10.0.0.0/24"
2、查询网站名(可列出钓鱼网站)
title="网站名"
其他的可以自行参考文档:https://fofa.so/help
`查询语法
直接输入查询语句,将从标题,html内容,http头信息,url字段中搜索
title="abc" 从标题中搜索abc。例:标题中有北京的网站
header="abc" 从http头中搜索abc。例:jboss服务器
body="abc" 从html正文中搜索abc。例:正文包含Hacked by
domain="qq.com" 搜索根域名带有qq.com的网站。例: 根域名是qq.com的网站
host=".gov.cn" 从url中搜索.gov.cn,注意搜索要用host作为名称。例: 政府网站, 教育网站
port="443" 查找对应443端口的资产。例: 查找对应443端口的资产
ip="1.1.1.1" 从ip中搜索包含1.1.1.1的网站,注意搜索要用ip作为名称。例: 查询IP为220.181.111.1的网站; 如果想要查询网段,可以是:ip="220.181.111.1/24",例如查询IP为220.181.111.1的C网段资产
protocol="https" 搜索指定协议类型(在开启端口扫描的情况下有效)。例: 查询https协议资产
city="Hangzhou" 搜索指定城市的资产。例: 搜索指定城市的资产
region="Zhejiang" 搜索指定行政区的资产。例: 搜索指定行政区的资产
country="CN" 搜索指定国家(编码)的资产。例: 搜索指定国家(编码)的资产
cert="google" 搜索证书(https或者imaps等)中带有google的资产。例: 搜索证书(https或者imaps等)中带有google的资产
banner=users && protocol=ftp 搜索FTP协议中带有users文本的资产。例: 搜索FTP协议中带有users文本的资产
type=service 搜索所有协议资产,支持subdomain和service两种。例: 搜索所有协议资产
os=windows 搜索Windows资产。例: 搜索Windows资产
server=="Microsoft-IIS/7.5" 搜索IIS 7.5服务器。例: 搜索IIS 7.5服务器
app="HIKVISION-视频监控" 搜索海康威视设备,更多app规则。例: 搜索海康威视设备
after="2017" && before="2017-10-01" 时间范围段搜索。例: 时间范围段搜索,注意: after是大于并且等于,before是小于,这里 after="2017" 就是日期大于并且等于 2017-01-01 的数据,而 before="2017-10-01" 则是小于 2017-10-01 的数据
asn="19551" 搜索指定asn的资产。例: 搜索指定asn的资产
org="Amazon.com, Inc." 搜索指定org(组织)的资产。例: 搜索指定org(组织)的资产
base_protocol="udp" 搜索指定udp协议的资产。例: 搜索指定udp协议的资产
is_ipv6=true 搜索ipv6的资产,只接受true和false。例: 搜索ipv6的资产
is_domain=true 搜索域名的资产,只接受true和false。例: 搜索域名的资产
ip_ports="80,443" 或者 ports="80,443" 搜索同时开放80和443端口的ip资产(以ip为单位的资产数据)。例: 搜索同时开放80和443端口的ip
ip_ports"80,443" 或者 ports"80,443" 搜索同时开放80和443端口的ip资产(以ip为单位的资产数据)。例: 搜索只开放80和443端口的ip
ip_country="CN" 搜索中国的ip资产(以ip为单位的资产数据)。例: 搜索中国的ip资产
ip_region="Zhejiang" 搜索指定行政区的ip资产(以ip为单位的资产数据)。例: 搜索指定行政区的资产
ip_city="Hangzhou" 搜索指定城市的ip资产(以ip为单位的资产数据)。例: 搜索指定城市的资产
ip_after="2019-01-01" 搜索2019-01-01以后的ip资产(以ip为单位的资产数据)。例: 搜索2019-01-01以后的ip资产
ip_before="2019-01-01" 搜索2019-01-01以前的ip资产(以ip为单位的资产数据)。例: 搜索2019-01-01以前的ip资产
高级搜索:可以使用括号 和 && || !=等符号,如
title="powered by" && title!=discuz
title!="powered by" && body=discuz
( body="content="WordPress" || (header="X-Pingback" && header="/xmlrpc.php" && body="/wp-includes/") ) && host="gov.cn"
新增完全匹配的符号,可以加快搜索速度,比如查找qq.com所有host,可以是domain"qq.com"
关于建站软件的搜索语法请参考:组件列表
`
ZoomEye
ZoomEye - Cyberspace Search Engine
相关搜索语句可以见帮助然后自行构造。
12).JSFinder
这里的方法就是利用开源的Python脚本,从js文件里面提取二级域名以及ip。
参考:GitHub - Threezh1/JSFinder: JSFinder is a tool for quickly extracting URLs and subdomains from JS files on a website.
13).用户信息收集
这里利用的theharvester与metagoofil工具对用户的一些信息进行搜集,例子:
theharvester -d sina.com -l 300 -b google
metagoofil -d baidu.com -t pdf -l 300 -o test -f test.html
其他的参数可以查看手册:man
14).MELTAGO
这是一个非常好用的域名、ip等等信息收集的工具,既可以在linux上运行,也可以在Windows上运行,举个例子:
15).C段旁站
什么是旁站?旁站是和目标网站在同一台服务器上的其它的网站。
什么是C段?C段是和目标服务器ip处在同一个C段的其它服务器。
旁站
C段
C段/旁站(前提条件要获取到网站的真实ip)即:当知晓目标真实IP后;一般来说主页面很难存在可利用点,那么这时候就可以通过嗅探此IP段内其他的主机服务器来实现C段利用,或者从此服务器上的其他网站入手。
像ARP攻击等。
那么下面就会用到一些工具,如搜索引擎或者工具扫描:
上面已经说了shodan、fofa、ZoomEye等扫网段,那么下面就说两个例子工具:
总结
5、敏感信息收集
在这一部分中我们主要就是收集的关于一些泄露的信息,即我能可能直接利用的一些信息,大致将其划为以下内容:
-
WEB源代码泄露(可以用7kb)
-
github信息泄露
注:与github这样的网站有很多的类似,如:https://searchcode.com/、https://gitee.com/、gitcafe.com、code.csdn.net
-
Google hack
-
接口信息泄露
-
社工信息泄露
-
邮箱地址信息泄露
-
历史漏洞收集
-
其他
6、信息整理
1).指纹识别
2).waf识别
3).CDN识别(绕过,获取真实IP)
1、通过ping一个不存在的二级域名获取真实ip或没有挂cdn的域名
2、通过fofa语法title标签获取真实ip
3、DNS历吏记录
4、在线网站查找:What's that site running? | Netcraft
5、phpinfo(可以忽略):如果目标网站存在phpinfo泄露等,可以在phpinfo中的SERVER_ADDR或_SERVER[“SERVER_ADDR”]找到真实ip。
6、shodan搜索引擎查询
7、挂国外节点再ping目标网站
4).旁注与C段(获取真实IP情况下)
1、站长之家http://stool.chinaz.com/same
2、网络搜索引擎 www.fofa.so、www.shodan.io、www.ZoomEye.org等
3、Nmap,Msscan扫描C段(nmap建议之后主动信息收集的时候使用)
nmap常用说明:
总结:
# 第二部分 主动信息收集
1、二层发现
这里用三个工具来说明举例:arping、nmap、Netdiscover
2、三层发现
这里用五个工具来说明举例:ping、scapy、nmap、fping、hping
举例:
3、四层发现
这里可以用一些工具,类似如:nmap、scapy、hping等进行实操。