信息收集在开始web渗透测试之前是一个非常重要的阶段,正所谓“知己知彼,百战不殆”,当我们对目标计算机更了解和掌握更多的信息,对渗透测试工作就越有利。
通常在我们确定了渗透的目标后,渗透的思路就是从信息收集开始,主要需要收集的目标信息有以下几点:
域名信息收集
真实ip地址信息
旁站/C段
目标站点指纹
敏感目录文件
端口扫描
目标系统使用的基础技术架构
当知道目标域名信息后,我们要做的第一件事就是收集域名的注册信息:包括该域名的DNS服务器信息和注册人的信息,常用的DNS域名收集方式有以下几种:
1. Whois工具
2. NSLOOKUP工具
3. DIG工具
1. 社会工程学字典生成—cewl
cewl是一个kali下的字典生成程序,由ruby开发,通过给cewl的爬虫制定URL地址和爬取深度,或者添加外部链接,cewl会返回一个字典文件。
cewl常用选项:
-d x:爬行深度x,默认2
-w:将输出结果写入到文件
-e:包括email地址。
-o:允许爬虫访问其他站点
-u:设置user agent
-c:显示发现的每个单词的数量。
例如:
cewl http://www.hengtongaustralia.com/ -d 2 -o -w dict.txt
cewl会爬取网站的每个单词并存放到dict字典文件中
2. NSLOOKUP工具
对于公司域名和ip地址信息,可以使用NSLOOKUP工具来进行相关域名信息的收集,NSLOOKUP工具是kali linux的一个DNS域名收集工具:
以查询域名www.sina.com对应的ip地址为例,运行NSLOOKUP工具后直接输入域名,发现查询出来的是c name记录,所谓c name记录就是作为一个域名的别名,用于描述域名,当dns服务器在查询CNAME时会逐级的往下查询,一直查询到ptr或者A记录为止,成功查询后才会做出回应,A记录则是web服务器的ip对应的域名(也就是说主机记录),我们可以看到117.169.85.188就是www.sina.com域名对应的服务器ip地址。
NSLOOKUP工具当然也支持直接查询A记录,通过set type=a命令设置查找A记录:
NSLOOKUP还能查询MX记录,即邮件交换记录,用于将以该域名结尾的邮件指向对应的邮件服务器,:
例如张三通过sina.com为后缀的地址发送电子邮件时,邮件系统会通过DNS系统查找sina.com域名对应的mx记录,如果存在的话用户就会发送电子邮件到指定邮件服务器上,上图中sina.com域名对应的邮件服务器地址有三个。前面那一部分代表邮件服务器的优先级,越小越优先,会查找优先级高的邮件服务器。
查找邮件服务器对应的主机记录(A记录):
以上就是三个邮件服务器对应的主机记录。
另外通过set type=ns命令可以查找域名对应的域名服务器地址:
还可以通过set type=any命令查询所有类型的记录,或者通过set -q=any 163.com命令查看163.com域名的所有类型记录。
3. DIG工具
使用DIG工具进行DNS域名追踪:
dig工具会把整个dns域名逐步查询解析的过程列出来,例如上图中会先把13台根域服务器进行解析,然后再到com服务器解析,最终到sina.com服务器解析。
4. whois工具
whois是一个标准互联网协议,可用于收集网络注册的信息,包括域名,ip等地址信息。简单来说,whois就是就是一个用来查询域名注册信息的数据库(例如域名所有人,域名注册商),在whois查询中得到注册人的名字和邮箱对我们的渗透工作非常有帮助。
在kali系统中whois已经默认安装了,我们可以直接输入域名查询DNS域名注册的相关信息:
5. 子域名探测
单个网站可能只有一个域名,但有些大型站点可能一个域名下会有很多子域名,例如baidu.com就有很多子域名(map.baidu.com,news.baidu.com等等)。
收集更多的子域名是为了发现更多服务,增加攻击面,提高发现漏洞的概率。特别是我们对一个站点没有找到相关漏洞,束手无策时,可以通过渗透旁站的方式再拿到其权限。
子域名常出现在OA,论坛,商城,等其它管理系统,子域名探测方法:在线查询网站,暴力破解,搜索引擎,CT证书透明,信息泄露,DNS区域传送.
在线查询网址:
暴力破解工具:layer,subDomainsBrute,Sublist3r
subDomainsBrute:
subDomainsBrute工具是一个python编写的子域名暴力破解工具,并且内置了字典来提高子域名爆破的效率, 下载安装地址:https://github.com/lijiejie/subDomainsBrute
subDomainsBrute工具内置的字典:
常用选项:
--version 显示版本信息
-f FILE 指定字典文件,不指定默认为subnames.txt
-t 指定扫描的线程数量
-p --process=PROCESS 扫描进程数量,默认是6
-o OUTPUT 扫描结果输出的文件名
subDomainsBrute工具的用法,扫描子域名:
Sublist3r
Sublist3r工具和subDomainsBrute的作用是类似的,常用选项如下:
-d //指定子域名
-b //开启暴力破解
-p //指定端口
-v //实时列举搜索结果
-t //指定线程
-e //指定搜索引擎,例如-e google,yahoo
-o //输出到文件
用法:python3 Sublist3r.py -d [子域名]
OneForAll
OneForAll工具是一款子域名探测的工具集合,项目地址:https://github.com/shmilylty/OneForAll
在下载安装OneForAll之前,当前系统环境需要python3.6以上,pip3的版本,可以通过pip3 -V命令查看:
┌──(songly㉿kali)-[~]
└─$ pip3 -V
pip 20.3.4 from /usr/lib/python3/dist-packages/pip (python 3.9)
输入命令进行安装OneForAll:
python3 -m pip install -r requirements.txt
OneForAll工具用法:
python3 oneforall.py --target example.com run //探测单个域名
python3 oneforall.py --targets ./example.txt run //指定域名文件example.txt
执行完毕后,会在当前/result目录文件下生成一个以域名为文件名的csv文件:
6. 真实ip查询
现在大部分的服务器系统架构都会存在cdn节点,我们在渗透过程中需要确定两件事:
- 判断目标系统有无cdn节点
- 绕过cdn节点,找到目标系统真实的ip地址。
单个网站的情况下如何判断有无CDN,一般可通过以下方式去判断,其中一个方式有,则代表有cdn:
1.多地ping网址,看ip是否唯一(可通过https://wepcc.com网站多个线路去ping网址,如果有解析不同ip,则有cdn)
2.访问ping目标网址的ip,如果有cdn,是不能通过ip访问网站的
3.一般有cname记录的,大多数有cdn节点
4.在反查网站的ip时,如果有多个不同的域名,则说明这个ip不是真实ip地址
多个网站判断是否有无cdn,可以通过github地址:https://github.com/al0ne/Vxscan/blob/master/README.zh-CN.md
获取真实ip可以通过不常用的域名或子域名的方式,可以通过工具来判断:
子域名扫描器subDomainsBrute也可以获取真实ip
7. 旁站/C段
旁站是和目标网站在同一台服务器上的其它网站,而C段就是和目标服务器在同一网络的的其它服务器。
当我们拿到其中一台服务器的权限后相当于进入了内网,也就是说,旁站/C段探测的意义也是发现更多服务,扩大攻击面。
旁站探测工具:
站长工具 http://stool.chinaz.com/same?s=ip
webscan https://www.webscan.cc/
C段探测工具:
fofa
zoomeye
nmap
masscan
举个例子:192.168.0.1地址,192可以看做是一个A段,168是B段,0是C段,1是D段。nmap工具扫描C段,-p指定端口,-Pn禁止ping探测,跳过主机发现:
nmap -p 1-65535 -Pn 192.168.0.0/24
masscan和nmap的功能差不多,号称最快的网络扫描器,不过masscan扫描速度比nmap更快。
<ip/range> IP地址范围,有三种有效格式,1、单独的IPv4地址 2、类似"10.0.0.1-10.0.0.233"的范围地址 3、CIDR地址 类似于"0.0.0.0/0",多个目标可以用都好隔开
-p <ports> 指定端口进行扫描
--banners 获取banner信息,支持少量的协议
--rate <packets-per-second> 指定发包的速率
-c <filename>, --conf <filename> 读取配置文件进行扫描
--echo <filename> 将当前的配置重定向到一个配置文件中
-e <ifname> , --adapter <ifname> 指定用来发包的网卡接口名称
--adapter-ip <ip-address> 指定发包的IP地址
--adapter-port <port> 指定发包的源端口
扫描192.168.0.0网段,将扫描的结果以json的数据格式输出到ip.txt文件中:
masscan -p 80,443 -Pn 192.168.0.0/24 -oJ ip.txt
8. 目标系统指纹信息
所谓指纹信息指的就是目标系统所使用的技术架构,例如:操作系统,开发语言,web框架,数据库,中间件,cms,waf等等。当我们知道了指纹信息就可以利用相关漏洞对目标系统进行渗透。
常见的指纹信息收集工具和网址:
whatweb,Wappalyzer工具
BugScaner:http://whatweb.bugscaner.com/look/
云悉指纹:http://www.yunsee.cn/finger.html
WhatWeb:https://whatweb.net/
1.操作系统指纹识别:
通过nmap工具的-O参数来扫描目标站点的操作系统信息,例如nmap -sV -O 192.168.0.110
2.开发语言的识别:
可以通过查看网页的后缀(.do .jsp .asp .aspx .php)
查看首页index的方式,例如百度的index.php可以访问,但是index.jsp访问失败
google hack语法,例如site:qq.com inurl:php能查到,但jsp则没有
通过浏览器F12的web调试工具在network菜单中分析http包的server字段获取web服务器框架
wappalyzer插件可以获取目标站点的操作系统(web服务器框架,开发语言,前端框架,数据库)
3.WAF识别:
手工提交恶意数据或者WhatWaf工具,可以通过./whatwaf -u host命令检测waf
waf在线识别:https://scan.top15.cn/web/
4.CMS类型识别:可以whatweb,Wappalyzer工具
9. 敏感目录文件
扫描网站的目录结构,看是否有敏感的目录文件,例如数据库的配置文件,应用的源代码文件,这些信息有利于我们下一步的渗透:
版本控制信息(git/svn)
WEB-INF文件
网站备份文件
配置文件
robots.txt,phpinfo.php
物理路径
目录浏览
系统管理后台
文件泄露有crossdomain.xml和robots.txt,github,svn仓库,html源码,js接口等等。
WEB-INF文件是java开发中比较重要,常用的一个配置文件:
WEB-INF/web.xml文件是web应用程序servlet的配置文件
WEB-INF/database.properties文件是数据库配置文件
WEB-INF/classes/目录文件一般是存放java类文件(.class)
WEB-INF/lib/目录是存放打包好的库(.jar)
WEB-INF/src/目录存放php,asp源代码
robots.txt文件是用来限制爬虫的,该文件里定义的内容可以规定那些内容可以被robot访问,那些不能访问,这样我们不想让robot访问的内容就不会被搜索引擎收录。
敏感文件探测工具dirsearch
dirsearch是一个python开发的网站目录伟岸扫描工具,主要是扫描敏感的文件或目录。dirsearch常用选项:
-u: 指定URL
-l: 指定URL文件
-e: 网站的语言类型
-X: 排除的脚本类型
-w: 字典
--prefixes: 前缀
-timeout: 超时时间
-s: 2个请求的间隔时间
--proxy: 代理
--exclude-status:排除的状态码,例如有时候扫描的时候会有一些404的文件目录,这样会增加我们分析该网站目录结构的工作量,那么可以通过该选项进行排除
--include-status:包含的状态码,
dirsearch的用法:
python3 dirsearch.py -u https://www.51cto.com -e java -X php,asp --exclude-status=403,401
扫描https://www.jss.com.cn网站的java目录,并过滤php,asp语言的目录,并过滤掉403,401的状态码。