WEB渗透测试之信息收集

搞渗透的人应该都清楚,给一个目标站点做测试,第一步就是信息收集,通过各种渠道和手段尽可能收集到多的关于这个站点的信息,帮助我们更多的去找到渗透点。而信息收集的方式有很多,大致有搜索引擎、域名注册网站、shodan、github信息收集工具、网站公告等等,甚至还有社工的方式。

1.拿到一个待检测的站。你觉得应该先做什么。

收集信息:whois、网站源 IP、旁站、C 段网站、服务器系统版本、容器版本、程序版本、数据库类型、二级域名、防火墙、维护者信息。

1.whois查询

可用信息:邮箱地址,注册人,作者信息

www.whois.aliyun.com //阿里
www.whois365.com/cn/ //全球查
http://whois.chinaz.com //站长
http://whois.aizhan.com //爱站

kali自带

命令:whois www.xxx.com

2.备案查询

注册人姓名

http://beianbeian.com //IPC备案查询
http://tianyancha.com //天眼查
http://beian.miit.gov.cn //工信部

3.子域名收集

工具:

  • Subbrute //快速枚举 DNS 记录和子域名。
  • Nmap - 不仅仅只是端口扫描,可以使用脚本枚举子域名。使用 --script dns-brute 脚本。
  • 谷歌语法:site:github.com
  • wydomain2 - 猪猪侠的作品,好用不解释。
  • Layer 子域名挖掘机 //法师的作品,因为是用.NET写的,所以基本只能在Win下使用,也是相当好用的。

网站:

原理

子域名发现的原理无非就是以下几种:

  1. 利用现有搜索引擎:
    • 网页搜索引擎(如:谷歌等)
    • 空间搜索引擎(如:Shodan等)
    • SSL证书(如:crt.sh等),这个主要针对大站
  2. 进行爆破,而爆破又分为两种:
    • 直接访问子域名
    • 利用 DNS 请求
  3. 其他泄露信息:
    • 如 crossdomain.xml 文件等
    • 爬虫递归爬取等
    • DNS域传送漏洞等

4.CMS识别

尽量搞明白web程序是用了什么CMS或者是用什么框架开发的
比如Thinkphp、Strust2。都有成熟的POC

在线识别:

http://whatweb.bugscaner.com/look/ //识别很快python写的网站
www.yunsee.cn //云悉

本地识别

御剑cms 大禹cms

kali

whatweb url

5.敏感目录扫描

工具

​ 御剑、Dirmap、wwwscan、DirBuster、Dirsearch、cansina。

kali

​ dirb url //命令行使用
​ dirbuster //界面化工具
​ wordpress:

1
wpscan -u http://www.baidu.comcom  //kali扫描WordPress漏洞

6.端口

端口信息收集:

Windows:
1
netstat -anbo       //windows查看开放端口及对应进程,-a查看所有连接和侦听端口,-n以数字方式显示地址和端口号,-b显示端口连接的程序,-o显示关联pid
Linux:
1
netstat -tunlp       // -t (tcp) 仅显示tcp相关选项 -u (udp)仅显示udp相关选项 -n 拒绝显示别名,能显示数字的全部转化为数字 -l 仅列出在Listen(监听)的服务状态 -a (all)列出所有服务状态-p 显示建立相关链接的程序名

端口探测

本地工具
1
2
3
nmap -A -v -T4 <目标IP> //查看开放端口
nmap <目标IP> -p <探测端口>
masscan -p<探测端口> <目标IP> --rate=10000 //rate每秒发送的数据包
在线工具:
1
http://tool.chinaz.com/port    //站长工具

常见端口漏洞

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
21    FTP      匿名访问,弱口令
22 SSH 弱口令登录
23 Telnet 弱口令登录
80 Web 常见Web漏洞或后台登录弱口令
161 SNMP public弱口令
389 LDAP 匿名访问
443 openssl 心脏滴血等
445 smb 操作系统溢出漏洞
873 rsync 匿名访问,弱口令
1099 JAVArmi 命令执行
1433 MsSQL 弱口令
1521 Oracle 弱口令
2601 Zebra 默认密码zebra
3128 squid 匿名访问(可能内网漫游)
3306 MySQL 弱口令
3389 RDP 远程桌面弱口令
4440 Rundeck 弱口令admin
4848 GlassFish 弱口令admin/adminadmin
5432 PostGreSQL 弱口令爆破
6379 Redis 匿名访问
7001,7002 Weblogic 弱口令爆破
8080 Tomcat\Jboss 弱口令,Jboss匿名访问
8080-8090 常见Web端口
9043 WebSphere 弱口令爆破
27017 MongoDB 未授权访问

7.敏感信息收集

Google Hack

1
2
3
4
5
6
7
8
9
filetype: 搜索制定类型的文件,例如:filetype:doc.将返回所有以doc结尾的文件URL。
intext: 把网页中的正文内容中的某个字符做为搜索条件。例如在google里输入:intext:Melon.将返回所有在网页正文部分包含”Melon”的网页。
intitle: 搜索网页标题中是否有我们所要找的字符。allintitle:也同intitle类似。
cache: 搜索google里关于某些内容的缓存,有时候往往能找到一些好东西。
info: 查找指定站点的一些基本信息。
inurl: 搜索我们指定的字符是否存在于URL中.例如输入:inurl:admin,将返回N个类似于这样的连接:http://xxx/admin,常用于查找通用漏洞、注入点、管理员登录的URL。
allinurl:也同inurl类似,可指定多个字符
linkurl: 例如搜索:linkurl:melons.top可以返回所有和melons.top做了链接的URL。
site: 搜索指定域名,如site:melons.top.将返回所有和melons.top有关的URL。

查看响应头

F12查看系统,中间件版本。

通过Github搜索获取敏感信息

site:Github password

8.真实IP

IP查询
https://www.ipip.net 查询该ip的具体信息
https://site.ip138.com ip反查域名/域名对应ip
http://www.cip.cc/ 本机ip/其他ip简单信息

判断是否为CDN

1、多地ping

如果多地ping同一网站,出现多个解析IP地址,那么说明使用了CDN进行内容分发~
html

2、nslookup

使用nslookup查看域名解析对应的IP地址,如果解析到多个IP地址则说明使用了CDN~
html
从上面可以看到解析到多个IP地址说明使用了CDN~

3、使用CDN查询工具进行查看

https://www.ipip.net/ip.html //高精度IP查询
绕CDN查真实IP地址

1、域名历史解析记录

查看IP与域名绑定的历史记录,有可能会存在使用CDN前的记录信息

1
2
3
4
https://dnsdb.io/zh-cn/
https://x.threatbook.cn/
http://toolbar.netcraft.com/site_report?url=
http://viewdns.info/

2、查询子域名

很多站长也许只会对主站或者流量大的子站点加 CDN,很多小站点又跟主站在同一台服务器或者同一个C段内,此时就可以通过子域名查询对应的 IP 来辅助查找网站的真实IP。

3、漏洞利用

目标敏感文件泄露,例如:phpinfo之类的探针、GitHub信息泄露等。
html
XSS盲打,命令执行反弹shell,SSRF等。
无论是用社工还是其他手段,拿到了目标网站管理员在CDN的账号,从而在从CDN的配置中找到网站的真实IP。

4、网站邮件订阅查找

让服务器主动连接我们告诉我们它的IP,不过使用的是合法的服务,如RSS邮件订阅,很多网站都自带sendmail,会发邮件给我们,此时查看邮件源码里面就会包含服务器的真实 IP 了。

5、使用国外主机解析域名

国内很多 CDN 厂商因为各种原因只做了国内的线路,而针对国外的线路可能几乎没有,此时我们使用国外的主机直接访问可能就能获取到真实IP。

6、网络空间引擎搜索法

常见的有以前的钟馗之眼,shodan,fofa搜索。以fofa为例,只需输入:title:“网站的title关键字”或者body:“网站的body特征”就可以找出fofa收录的有这些关键字的ip域名,很多时候能获取网站的真实ip。

7、F5 LTM解码法

当服务器使用F5 LTM做负载均衡时,通过对set-cookie关键字的解码真实ip也可被获取,例如:Set-Cookie: BIGipServerpool_8.29_8030=487098378.24095.0000,先把第一小节的十进制数即487098378取出来,然后将其转为十六进制数1d08880a,接着从后至前,以此取四位数出来,也就是0a.88.08.1d,最后依次把他们转为十进制数10.136.8.29,也就是最后的真实ip。

8、利用网站返回的内容寻找真实原始IP

如果原始服务器IP也返回了网站的内容,那么可以在网上搜索大量的相关数据。
浏览网站源代码,寻找独特的代码片段。在JavaScript中使用具有访问或标识符参数的第三方服务(例如Google Analytics,reCAPTCHA)是攻击者经常使用的方法。

9、利用SSL证书寻找真实原始IP

以CloudFlare这款CDN加速器举例:假如你在 abc.com 上托管了一个服务,原始服务器IP是136.23.63.44。 而CloudFlare则会为你提供DDoS保护,Web应用程序防火墙和其他一些安全服务,以保护你的服务免受攻击。
为此,你的Web服务器就必须支持SSL并具有证书,此时CloudFlare与你的服务器之间的通信,就像你和CloudFlare之间的通信一样,会被加密(即没有灵活的SSL存在)。这看起来很安全,但问题是,当你在端口443(https://x.x.x.x:443) 上直接连接到IP时,SSL证书就会被暴露。
此时,如果攻击者扫描0.0.0.0/0,即整个互联网,他们就可以在端口443上获取在 aaa.com上的有效证书,进而获取提供给你的Web服务器IP。
目前Censys工具(https://censys.io/) 就能实现对整个互联网的扫描,Censys是一款用以搜索联网设备信息的新型搜索引擎,安全专家可以使用它来评估他们实现方案的安全性,而黑客则可以使用它作为前期侦查攻击目标、收集目标信息的强大利器。
Censys搜索引擎能够扫描整个互联网,Censys每天都会扫描IPv4地址空间,以搜索所有联网设备并收集相关的信息,并返回一份有关资源(如设备、网站和证书)配置和部署信息的总体报告。
而攻击者唯一需要做的就是把上面用文字描述的搜索词翻译成实际的搜索查询参数。
Censys证书查询搜索步骤如下:

1、aaa.com 证书的搜索查询参数为:parsed.names:aaa.com

只显示有效证书的查询参数为:tags.raw:trusted
攻击者可以在Censys上实现多个参数的组合,这可以通过使用简单的布尔逻辑来完成。

2、组合后的搜索参数为:parsed.names: aaa.com and tags.raw: trusted
3、Censys将向你显示符合上述搜索条件的所有标准证书。要逐个查看这些搜索结果,攻击者可以通过单击右侧的”Explore”,打开包含多个工具的下拉菜单。What’s using this certificate? > IPv4 Hosts;

10、通过shodan favicon.ico获取真实IP

在Shodan搜索中有一个关于网站icon图标的搜索语法,http.favicon.hash,我们可以使用这个语法来搜索出使用了同一icon图标的网站。(其实这种方法是看运气的,如果shodan中收录了目标网站则可以查到)

1
2
3
4
5
6
7
import mmh3
import requests

response = requests.get('https://www.baidu.com/favicon.ico')
favicon = response.content.encode('base64')
hash = mmh3.hash(favicon)
print hash

计算出的hash用 http.favicon.hash:hash 搜索

9.shodan

shodan网站:www.shodan.io
webcam //网络摄像头
搜索技巧:
搜索指定端口:port:3389
搜索指定IP地址:host:61.135.169.121
搜索具体城市开放具体端口:city:hangzhou port:22
搜索指定服务器:microsoft iis 6.0 / apache
kali:
获取自身外部ip:myip
查询指定IP:host xxxx (网页版可能不会显示)
查看蜜罐保护:shodan honeyscore xxxx
python-shodan:
初始化api key
python-shodan search 方法:

1
2
3
4
5
6
7
8
9
10
常用 Shodan 库函数
shodan.Shodan(key) :初始化连接API
Shodan.count(query, facets=None):返回查询结果数量
Shodan.host(ip, history=False):返回一个IP的详细信息
Shodan.ports():返回Shodan可查询的端口号
Shodan.protocols():返回Shodan可查询的协议
Shodan.services():返回Shodan可查询的服务
Shodan.queries(page=1, sort='timestamp', order='desc'):查询其他用户分享的查询规则
Shodan.scan(ips, force=False):使用Shodan进行扫描,ips可以为字符或字典类型
Shodan.search(query, page=1, limit=None, offset=None, facets=None, minify=True):查询Shodan数据

10.旁站

看看网站有没有旁站
https://phpinfo.me/bing.php //查询IP 查询旁站
对旁站进行信息收集 为下面的以后的漏洞挖掘做准备。

11.判断系统版本

最快速的就是利用Windows和Linux的对大小写敏感来判断
Windows对大小写不敏感 Linux对大小写敏感
利用TTL起始值判断操作系统,不同类型的操作系统都有默认的TTL值
TTL起始值:Windows xp(及在此版本之前的windows) 128 (广域网中TTL为65-128)
html
Linux/Unix64(广域网中TTL为1-64)
html
某些Unix:255,网关:255
html
使用nmap识别操作系统:nmap -O 192.168.0.1 #参数-O表示扫描操作系统信息,nmap基于签名,指纹,特征,CPE编号等方法去判断目标系统的信息 。
html

11.目标用的是哪种web服务器 具体版本号是多少

首先手工测试目标web服务器是否允许一些危险请求的方法:put move options
Apach 2.2.x/2.4.x
Nginx
IIS 6.x/7.x/8.x 尝试webdav写及远程执行CVE-2017-7269 尝试短文件漏洞目录文件扫描
Tomcat 6.x/7.x/8.x 曾经出现的远程命令执行多 默认的管理面板 弱口令 部署war包
Jboss 未授权访问进入JBoss后台进行文件上传的漏洞,例如:CVE-2007-1036,CVE-2010-0738,CVE-2005-5750 Java反序列化进行远程代码执行的漏洞,例如:CVE-2015-7501,CVE-2017-7504,CVE-2017-12149,CVE-2013-4810。 还有一种 JBoss seam2的模板注入CVE-2010-1871漏洞。
Resin
是否是集成环境 XAMPP LNMP

12.目标站有没有WAF

有没有WAF,是什么类型的WAF 加入敏感特征看看会不会拦截 FUZZ测试