0x001 信息搜集阶段
渗透测试者可以使用的信息收集方法包括公开来源信息查询、Google Hacking、社会工程学、网络踩点、扫描探测、被动监听、服务查点等。而对目标系统的情报探查能力是渗透测试者一项非常重要的技能,信息搜集是否充分在很大程度上决定了渗透测试的成败,因为如果你遗漏关键的情报信息,你将可能在后面的阶段里一无所获。
0x002 域名
1. Whois查询
Whois 是一个用来查询域名是否已经被注册,以及注册域名的详细信息的数据库(如域名所有人、域名注册商、域名注册日期和过期日期等)。通过域名Whois服务器查询,可以查询域名归属者联系方式,以及注册和到期时间。
- http://whois.chinaz.com/
2. 子域名爆破
2.1 域传送漏洞
方法一: 利用nmap检测域传送漏洞,如果存在漏洞将有大量域名信息显示。
代码语言:javascript复制nmap --script dns-zone-transfer --script-args dns-zone-transfer.domain=nwpu.edu.cn -p 53 -Pn dns.nwpu.edu.cn
参数:
–-script:表示加载nmap文件夹下的脚本
–-script-args: 向脚本传递参数
-p:设置扫描端口
-Pn:设置通过Ping发现主机是否存活
方法二: 利用Kail下面的工具Dnsenum检测该漏洞
代码语言:javascript复制dnsenum --enum domain.com
方法三: 利用nslookup检测域传送漏洞
代码语言:javascript复制nslookup -type=ns 地址 查询dns服务器
更多详细操作,点击查看域传送漏洞
2.2 工具使用
dnsenum (kali)
dnsenum的目的是尽可能收集一个域的信息,它能够通过谷歌或者字典文件猜测可能存在的域名,以及对一个网段进行反向查询。它可以查询网站的主机地址信息、域名服务器、mx record(函件交换记录),在域名服务器上执行axfr请求,通过谷歌脚本得到扩展域名信息(google hacking),提取自域名并查询,计算C类地址并执行whois查询,执行反向查询,把地址段写入文件。
代码语言:javascript复制使用:dnsenum baidu.com -f /usr/share/dnsenum/dns.txt -dnsserver 8.8.8.8
参数:
-f 指定爆破字典
-dnsserver 指定要使用的dns;若不设置,则采用默认的dns
layer 子域名挖掘机
Layer子域名挖掘机是一款域名查询工具,可提供网站子域名查询服务;拥有简洁的界面、简单的操作模式,支持服务接口、暴力搜索、同服挖掘三种模式,支持打开网站、复制域名、复制IP、复制CDN、导出域名、导出IP、导出域名 IP、导出域名 IP WEB服务器以及导出存活网站!
代码语言:javascript复制下载:https://pan.baidu.com/s/1_N8nHLOr_hkRRgjMLb0o2Q
提取码:bsvu
subDomainsBrute
SubDomainsBrute用于测试者的快速子域粗暴工具,本工具用于渗透测试目标域名收集。高并发DNS暴力枚举,发现其他工具无法探测到的域名,如Google,aizhan,fofa。
代码语言:javascript复制环境:pip install dnspython gevent # python2.7
下载:https://www.freebuf.com/sectool/106625.html
使用:python subDomainsBrute.py -t 10 qq.com -o qq.com.txt
参数:
-t 线程数
-o 指定保存的文件名
wydomain
wydomain是猪猪侠开发的一款子域名信息搜集工具,因其枚举速度快,结果准确,成为不少白帽居家旅行的必备神器。
工具主要分为两个模块,dnsburte模块和wydomain模块:
- dnsburte模块通过用户自定义字典发送dns查询,最后筛选出符合条件的域名。
- wydomain模块则是通过调用多个第三方网站的公开api获取子域名数据。
下载:git clone https://github.com/ring04h/wydomain.git
使用:python dnsburte.py -d qq.com -t 10 -f wydomain.csv -o qq.com.txt
参数:
-d 指定目标域名
-f 指定的字典,默认是default.csv
-o 指定保存的文件名,若不指定,默认保存在./result/目录下
-t 指定线程数
在线子域名挖掘
- http://z.zcjun.com/
- https://phpinfo.me/domain/
3. 绕过CDN,找真实IP
3.1 判断是否CDN
使用各种多地 ping 的服务,查看对应 IP 地址是否唯一,如果不唯一,则很有可能是使用了CDN ,相关查询网站有以下几个:
- http://ping.chinaz.com/
- http://ping.aizhan.com/
- http://ce.cloud.360.cn/
- https://www.17ce.com/
3.2 查询历史CDN记录
查看IP与域名绑定的历史记录,可能会存在使用CDN之前的记录,相关查询网站有以下几个:
- https://dnsdb.io/zh-cn/
- https://x.threatbook.cn/
- https://toolbar.netcraft.com/site_report?url=
- http://viewdns.info/
3.3 查询子域名
毕竟CDN也是不便宜的,所以很多站长可能只会对主站或者流量大的子站点做了CDN,而很多小站子站点又跟主站在同一个服务器或者一个C段内,此时就可以通过查询子域名对应的IP来辅助查找网站的真实IP。
3.4 让服务器主动连接我们
目的是让服务器主动连接我们,可利用XSS盲打,命令反弹shell,SSRF等漏洞。或者是通过RSS邮件订阅,很多网站都自带sendmail功能,会发邮件给我们,此时查看邮件原文里的内容就会包含网站的真实IP了。
以QQ邮箱为例
首先打开一封邮箱,点击显示邮件原文
找到Received对应的内容,包含真实IP地址
3.5 使用国外主机解析域名
国内很多CDN厂商因为各种原因只做了国内的线路,而针对国外的线路可能几乎没有,此时我们使用国外的主机直接访问就有可能获取到真实IP,也可以使用在线的多地ping网站筛选出国外对该目标的解析地址是否唯一来判断真实IP。
3.6 目标敏感文件泄露
可能目标服务器上存在一些敏感文件的泄露会直接告诉我们真实IP,比如phpinfo之类的探针文件。
3.7 目标全网扫描
这种方法对小网站比较有效果,利用Zmap对目标进行全网扫描,大概一个多小时时间,扫描完成后会出现一些IP,甚至非常多个IP,将这些IP利用本地hosts文件进行一一绑定测试,如果能正常访问目标网站,则为真实IP。
3.8 SSL证书查询
- 查询地址:https://censys.io/
- search选择:Certificates
- 搜索语法:parsed.names:test.com and tags.raw:trusted
- 点开目标信息后,点击右边Explore按钮,点击IPv4 Hosts即可
3.9 CDN 工具
- https://github.com/boy-hack/w8fuckcdn
- https://github.com/Tai7sy/fuckcdn
3.10 更多绕过CDN方法
- 绕过CDN查找真实IP方法总结
- 绕过CDN查询真实IP(有效)方法
- 绕过CDN查找网站真实IP
- 绕过CDN找到真实IP的一些方法
- 11种绕过CDN查找真实IP方法
0x003 搜索引擎
1. 常用引擎
- google.com
- bing.cn
- sogou.com
- baidu.com
2. theHarvester
TheHarvester能够收集电子邮件账号、用户名、主机名和子域名等信息。它通过Google、Bing、PGP、LinkedIn、Baidu、Yandex、People123、Jigsaw、Shodan等公开资源整理收集这些信息。这些信息将在后期的渗透测试阶段发挥巨大的作用。
代码语言:javascript复制环境:python3 -m pip3 install pipenv uvloop # python3
下载1:https://github.com/laramies/theHarvester/tree/master
下载2:apt-get install theHarvester
例子:从百度搜索引擎中的前200项搜索结果中挖掘目标域里的电子邮件地址和主机名
使用1:python3 theHarvester.py -d qq.com -l 200 -b baidu
使用2:theharvester -d qq.com -l 200 -b baidu
3. Google Hacker语法
搜索敏感文件
代码语言:javascript复制site:xxx.com filetype:doc intext:pass
site:xxx.com filetype:xls intext:pass
site:xxx.com filetype:conf
site:xxx.com filetype:inc
搜索管理后台
代码语言:javascript复制site:xxx.com 管理
site:xxx.com admin
site:xxx.com login
搜索mail
代码语言:javascript复制site:xxx.com intext:@xxx.com
intext:@xxx.com
搜索敏感web路径
代码语言:javascript复制site:xxx.com intitle:mongod inurl:28017
site:xxx.com inurl:sql.php
site:xxx.com inurl:phpinfo()
更多内容,点击查看Google Hacker语法手册
3. 网络组件搜索
- www.shodan.io
- www.zoomeye.org
- www.fofa.so
0x004 旁站和C段扫描
旁站: 同服务器下的不同网站。当网站A无法渗透时,可以通过旁站注入获取网站B或者其他网站的权限。如果权限足够,直接跨目录写webshell;权限不够的话,尝试webshell提权获取服务器权限,进而渗透网站A。
C段: 同网段下的不同服务器。通过获取同网段下的服务器站点进行渗透,再进行webshell提权获取服务器权限,再进行内网渗透攻击目标服务器
- 服务器操作系统类型
- 端口开放和服务识别
- 目标网络结构
nmap工具使用
代码语言:javascript复制nmap -T4 -A -v 服务器IP
在线查询地址:
- http://www.webscan.cc/
- https://phpinfo.me/bing.php
- http://dns.aizhan.com
- http://www.114best.com/ip/114.aspx
0x005 弱点端口扫描
1. nmap端口扫描
指定域名查询
代码语言:javascript复制nmap -T4 -Pn www.baidu.com
指定IP查询
代码语言:javascript复制nmap -T4 -Pn 192.168.0.166
查询局域网的所有主机和IP
代码语言:javascript复制nmap -T4 -Pn 192.168.0.0/24
查看主机端口(1024-65535)中开放的端口
代码语言:javascript复制nmap -p 1024-65535 192.168.1.7
2. hydra爆破端口
代码语言:javascript复制https://www.cnblogs.com/ECJTUACM-873284962/p/7805116.html
3. 常见弱点端口
这里常见的弱点端口已经单独整理了一篇文章,点击链接跳转查看
- http://luckyzmj.cn/posts/562916c6.html
0x006 网站漏洞扫描
1. 网站CMS指纹识别
- BugScaner:http://whatweb.bugscaner.com/look/
- 云悉指纹:http://www.yunsee.cn/finger.html
- WhatWeb:https://whatweb.net/
- cmsmap:https://github.com/dionach/CMSmap
- kali wpScan:针对WordPress版本网站
- kali joomScan:针对Joomla!版本网站
2. 服务器类型
操作系统: Windows和Linux
最简单就是通过ping来探测,Windows的TTL值都是一般是128,Linux则是64。所以大于100的肯定是Windows,而几十的肯定是Linux。而且Windows大小写不敏感,Linux大小写敏感。
判断目标网站服务器的具体的版本的话,可以采用 nmap 进行扫描, -O 和 -A 参数都能扫描出来
代码语言:javascript复制nmap -O 服务器IP
nmap -A 服务器IP
3. 网站搭建平台
判断网站用的web搭建平台类型:Apache、Nginx、Tomcat、IIS。知道了web服务器是哪种类型后,我们还要探测web服务器具体的版本。比如Ngnix版本< 0.83会有解析漏洞 ,IIS6.0会有文件名解析漏洞、IIS7.0会有畸形解析漏洞等。不同的web服务器版本,存在着不同漏洞。
可以在网页审查元素中,刷新网络的数据包的响应头中获取到这些信息,或者用nmap等其他工具来扫描。
4. 网站脚本类型
网站用的脚本类型:php 、Jsp 、Asp 、Aspx 。
- 可以根据网站URL来判断
- site:xxx.com filetype:php
- 可以根据Firefox的插件(wappalyzer)来判断
5. 数据库类型
网站用的是哪种类型的数据库:MySQL、Oracle、SqlServer、Access 。虽然这几种数据库的语法大体上相同,但是还是有区别的。所以我们还是要知道目标网站用的是哪种数据库,并且数据库是哪个版本的
从数据库的规模来看,Access是小型数据库,,MySQL 是中小型数据库,、SqlServer是中型数据库,Oracle是大型数据库。
Access和SqlServer只支持Windows系统,如果是Linux系统,可以直接排除这两个数据库类型。
常见搭配:
- ASP 和 ASPX:ACCESS、SQL Server
- PHP:MySQL、PostgreSQL
- JSP:Oracle、MySQL
6. 网站敏感目录和文件
扫描网站目录结构,看看是否可以遍历目录,或者敏感文件泄漏
- robots.txt:指定了网站中不想被robot访问的目录
- 网站备份文件:网站源码、配置文件、数据库文件
- 后台目录:弱口令,万能密码,爆破
- 安装包:获取数据库信息,甚至是网站源码
- 上传目录:截断、上传图片马等
- mysql管理接口:弱口令、爆破,万能密码,然后脱裤,甚至是拿到shell
- 安装页面 :可以二次安装进而绕过
- phpinfo:会把目标配置的各种信息暴露出来
- 编辑器:fck、ke、等
- IIS短文件利用:条件比较苛刻 Windows、Apache等
探测目标网站后台目录可以通过字典扫描、目录爬行、开源程序、搜索引擎、二级域名、端口站点、备份文件等方式查找,相关工具有: IntelliTamper、wwwscan 、御剑 、weakfilescan、 dirbuster、dirb、QWASP、Google Hacking等
7. 网站漏洞扫描
网站漏洞扫描就是直接对网站进行漏洞探测了。例如:任意文件上传、文件包含、文件读取、编辑器漏洞(FCKEditor、ewebeditor、KindEditor…)、XXE、常见CMS识别getshell等等。
网站漏洞扫描也有很多工具。比如AWVS、AppScan、OWASP-ZAP、Nessuss、Netsparker、Safe3等等。但是需要注意的是,使用漏扫工具直接对网站进行扫描,因为一下子流量过大,有些网站可能会崩溃。所以一般最好不要使用漏洞扫描工具对网站进行扫描。并且如果未经授权就用漏扫对网站进行扫描还是违法的!
8. 物理路径探测
对目标写入webShell时需要用到真实物理路径。
8.1 探针文件
很多网站在搭建时会留下包含有网站信息的文件,说明等。常见的探针遗留文件名
代码语言:javascript复制Phpinfo.php
info.php
test.php
l.php
php.php
8.2 报错获得
多用于容错做的不是很好的网站。可以访问404页面、动态URL加特殊符号(英文单引号等)、错误的SQL语句等。
8.3 后台获得
如果可以登录到目标后台,一般后台首页会有一些说明,包括CMS版本、支持的组件、更新日期、数据库信息、物理路径、IP地址等。
8.4 IIS 高版本特性
IIS7-IIS8.5 如果配置不当,都有可能会存在这个问题,只有访问404的路径,就会爆出物理路径和IIS版本信息。
8.5 搜索引擎探测
代码语言:javascript复制site:xxx.com warning
site:xxx.com error
site:xxx.com mysql
9. Mail服务器
Mail服务器可能会有web漏洞:比如:XSS、SQL、XXE、心脏出血、破壳漏洞等等。mail弱口令爆破,mail钓鱼,mail可能是外网入口,因为传递VPN密码,服务器密码等等。
10. 网站WAF识别
工具简介
WAFW00F识别和指纹Web应用防火墙(WAF)产品。其工作原理是首先通过发送一个正常http请求,然后观察其返回有没有一些特征字符,若没有在通过发送一个恶意的请求触发waf拦截来获取其返回的特征来判断所使用的waf。
- 项目地址:https://github.com/sandrogauci/wafw00f
安装:python3环境
代码语言:javascript复制python setup.py install
使用:切换到 wafw00f
目录下,然后执行命令
E:wafw00f-masterwafw00f>python main.py http://www.yanjian.com.cn
______
/
( W00f! )
____/
,, __ 404 Hack Not Found
|`-.__ / / __ __
/" _/ /_/ / /
*===* / _/ / 405 Not Allowed
/ )__// /
/| / /---` 403 Forbidden
\/` | / _
` /_\_ 502 Bad Gateway / / 500 Internal Error
`_____``-` /_/ _
~ WAFW00F : v2.1.0 ~
The Web Application Firewall Fingerprinting Toolkit
[*] Checking http://www.yanjian.com.cn
[ ] The site http://www.yanjian.com.cn is behind Safedog (SafeDog) WAF.
[~] Number of requests: 2
0x007 Github搜索语法
在渗透测试的信息收集阶段,可以去Github和码云上搜索与目标有关的信息,或者就有意想不到的收获。(有些开发人员将代码上传到代码库的时候,有可能连一些重要的配置信息也上传了)
原文链接:https://blog.csdn.net/qq_36119192/article/details/99690742
GitHub的搜索语法:
代码语言:javascript复制in:name test #仓库标题搜索含有关键字 SpringCloud
in:descripton test #仓库描述搜索含有关键字
in:readme test #Readme文件搜素含有关键字
stars:>3000 test #stars数量大于3000的搜索关键字
stars:1000..3000 test #stars数量大于1000小于3000的搜索关键字
forks:>1000 test #forks数量大于1000的搜索关键字
forks:1000..3000 test #forks数量大于1000小于3000的搜索关键字
size:>=5000 test #指定仓库大于5000k(5M)的搜索关键字
pushed:>2019-02-12 test #发布时间大于2019-02-12的搜索关键字
created:>2019-02-12 test #创建时间大于2019-02-12的搜索关键字
user:test #用户名搜素
license:apache-2.0 test #明确仓库的 LICENSE 搜索关键字
language:java test #在java语言的代码中搜索关键字
user:test in:name test #组合搜索,用户名test的标题含有test的
邮件配置信息收集
很多网站及系统都会使用 pop3 和 smtp 发送来邮件,不少开发者由于安全意识不足会把相关的配置信息也放到Github上,所以如果这时候我们动用一下google搜索命令语句,构造一下关键字,就能把这些信息给找出来了。
代码语言:javascript复制site:Github.com smtp
site:Github.com smtp @qq.com
site:Github.com smtp @126.com
site:Github.com smtp @163.com
site:Github.com smtp @sina.com.cn
site:Github.com smtp password
site:Github.com String password smtp
……
我们也可以锁定域名搜索结合厂商域名 灵活运用例如搜百度的
site:Github.com smtp @baidu.com
数据库信息收集
代码语言:javascript复制site:Github.com sa password
site:Github.com root password
site:Github.com User ID='sa';Password
site:Github.com inurl:sql
SVN 信息收集
代码语言:javascript复制site:Github.com svn
site:Github.com svn username
site:Github.com svn password
site:Github.com svn username password
综合信息收集
代码语言:javascript复制site:Github.com password
site:Github.com ftp ftppassword
site:Github.com 密码
site:Github.com 内部
参考文章
- https://blog.csdn.net/qq_36119192/article/details/84027438