渗透测试信息收集总结
一、信息收集介绍
信息收集对于渗透测试前期来说是非常重要的,因为只有我们掌握了目标网站或目标主机足够多的信息之后,我们才能更好地对其进行漏洞检测。正所谓,知己知彼百战百胜!
信息收集的方式可以分为两种:主动和被动。
主动信息收集:通过直接访问、扫描网站,这种流量将流经网站
被动信息收集:利用第三方的服务对目标进行访问了解,比例:Google搜索、Shodan搜索等
主动方式,你能获取更多的信息,但是目标主机可能会记录你的操作记录。
被动方式,你收集的信息会相对较少,但是你的行动并不会被目标主机发现。
一般在一个渗透项目下,你需要有多次的信息收集,同时也要运用不同的收集方式,才能保证信息收集的完整性。
二、信息收集
1、域名信息收集
当我们确定了要渗透的目标,也就是知道了其域名,接下来我们需要收集域名对应的 ip,域名的whois信息、子域名等等一系列与域名相关的信息。
1.1、收集真实IP地址信息
CDN介绍 :CDN的全称是Content Delivery Network,即内容分发网络。
判断CDN存在: 通过设置代理或者利用在线ping网站来使用不同地区的Ping服务器来测试目标。
网站测速工具_超级ping _多地点ping检测 - 爱站网
如果查询出的ip数量大于一个的话,则说明该ip地址不是真实的服务器地址。
如果ip地址是2个或者3个,并且这几个地址是同一地区的不同运营商的话,则很有可能这几个地址是服务器的出口地址,该服务器在内网中,通过不同运营商NAT映射供互联网访问,同时采用几个不同的运营商可以负载均衡和热备份。如果是多个ip地址,并且这些ip地址分布在不同地区的话,则基本上可以断定就是采用了CDN了。
绕过CDN:如果目标没有使用CDN,可以直接利用ping获得IP地址。或者利用在线网站:http://www.ip138.com/ 如果目标使用CDN,需要绕过CDN来获取真实IP地址。
1、内部邮箱源 收集到内部邮箱服务器IP地址
2、网站phpinfo文件 phpinfo.php
3、分站IP地址,查询子域名 CDN很贵,很有可能分站就不再使用CDN。
4、国外访问 https://asm.ca.com/en/ping.php
5、查询域名解析记录 https://viewdns.info/|https://www.netcraft.com/
6、查询主域名,以前用CDN的时候有个习惯,只让WWW域名使用cdn,秃域名不适用,为的是在维护网站时更方便,不用等cdn缓存。所以试着把目标网站的www去掉,ping一下看ip是不是变了
7、Nslookup查询,查询域名的NS记录、MX记录、TXT记录等很有可能指向的是真实ip或同C段服务器。
8、网站漏洞,利用网站自身存在的漏洞,很多情况下会泄露服务器的真实IP地址
9、Censys查询SSL证书找到真实IP,利用“Censys网络空间搜索引擎”搜索网站的SSL证书及HASH,在https://crt.sh上查找目标网站SSL证书的HASH,然后再用Censys搜索该HASH即可得到真实IP地址。
1.2、域名的whois信息
whois是用来查询域名注册所有者等信息的传输协议。简单说,whois就是一个用来查询域名是否已经被注册,以及注册域名的详细信息的数据库(如域名所有人、域名注册商)。
通过whois来实现对域名信息的查询。早期的whois查询多以命令行接口存在,但是现在出现了一些网页接口简化的线上查询工具,可以一次向不同的数据库查询。网页接口的查询工具仍然依赖whois协议向服务器发送查询请求,命令行接口的工具仍然被系统管理员广泛使用。whois通常使用TCP协议43端口。每个域名/IP的whois信息由对应的管理机构保存。
Whois查询的重要性:通过Whois查询可以获得域名注册者邮箱地址等信息。一般情况下对于中小型网站域名注册者就是网站管理员。利用搜索引擎对Whois查询到的信息进行搜索,获取更多域名注册者的个人信息。
Whois查询方法:
1、Web接口查询:
https://whois.aliyun.com/ 阿里云
https://www.whois365.com/cn/http://whois.chinaz.com/ 站长之家
https://whois.aizhan.com/ 爱站
2、通过Whois命令行查询。
在Kali linux下自带了Whois查询工具,通过命令 whois 域名 进行查询。
whois 域名
1.3、备案信息查询
备案好处:为了防止在网上从事非法的网站经营活动,打击不良互联网信息的传播,如果网站不备案的话,很有可能被查处以后关停。
ICP备案查询方法:
Web接口查询:
http://www.beianbeian.com/
http://www.miitbeian.gov.cn/publish/query/indexFirst.action https://www.tianyancha.com/
1.4、子域名信息收集
子域名是某个主域的二级域名或者多级域名,在防御措施严密情况下无法直接拿下主域,那么就可以采用迂回战术拿下子域名,然后无限靠近主域。
子域名挖掘方法
1、子域名挖掘工具
如:Maltego CE、wydomain、subDomainsBrute、dnsmaper、Layer子域名挖掘机。
2、搜索引擎挖掘
如: 在Google中输入 site:sina.com
3、第三方网站查询:
http://tool.chinaz.com/subdomain
https://dnsdumpster.com/
4、证书透明度公开日志枚举:
HTTPS证书:https://crt.sh/
http://censys.io/
5、DNS解析记录:
6、其他途径:
https://phpinfo.me/domain
DNS记录查询脚本
# -*- coding: utf-8 -*-
# python3.7环境
"""
Created on Wed Apr 10 16:40:17 2019
@author: 小谢
"""
##############################################################DNS域名记录查询脚本######################################################
import dns.resolver
domain=input("请输入要查询的域名全拼(例如:www.baidu.com):") #网站子域名
domainpart=[]
num=domain.count('.')
part=domain.split('.')
for i in range(num):
j=i+1
domainpart.append(part[j])
subdomain=".".join(domainpart) #网站主域名
print("该网站主域名为:%s"%subdomain)
#查询A记录
A=dns.resolver.query(domain,'A')
print("********************A记录********************")
for i in A.response.answer:
print(i)
#查询CNAME记录
try:
CNAME=dns.resolver.query(domain,'CNAME')
print("********************CNAME记录********************")
for i in CNAME.response.answer:
print(i)
except:
print("--------------------该域名没有CNAME记录!!--------------------")
#domain=input("请输入要查询的主域名(例如:baidu.com):")
#查询MX记录
try:
MX=dns.resolver.query(subdomain,'MX')
print("********************MX记录********************")
for i in MX.response.answer:
print(i)
except:
print("--------------------该域名没有MX记录!!--------------------")
#NS记录
try:
NS=dns.resolver.query(subdomain,'NS')
print("********************NS记录********************")
for i in NS.response.answer:
print(i)
except:
print("--------------------该域名没有NS记录!!--------------------")
#SOA记录
try:
SOA=dns.resolver.query(subdomain,'SOA')
print("********************SOA记录********************")
for i in SOA.response.answer:
print(i)
except:
print("--------------------该域名没有SOA记录!!--------------------")
#TXT记录
try:
TXT=dns.resolver.query(subdomain,'TXT')
print("********************TXT记录********************")
for i in TXT.response.answer:
print(i)
except:
print("--------------------该域名没有TXT记录!!--------------------")
#SRV记录
try:
SRV=dns.resolver.query(domain,'SRV')
print("********************SRV记录********************")
for i in SRV.response.answer:
print(i)
except:
print("--------------------该域名没有SRV记录!!--------------------")
#AAAA记录
try:
SRV=dns.resolver.query(domain,'AAAA')
print("********************AAAA记录********************")
for i in SRV.response.answer:
print(i)
except:
print("--------------------该域名没有AAAA记录!!--------------------")
IP转换为经纬度
# -*- coding: utf-8 -*-
# python2.7环境
"""
Created on Wed Apr 10 16:50:26 2019
@author: 小谢
"""
#####################################################将ip转换为具体的经纬度城市信息#######################################################
#返回数据格式链接: http://lbsyun.baidu.com/index.php?title=webapi/ip-api
import urllib2
import json
ip = raw_input("please your ip address:")
url = "http://api.map.baidu.com/location/ip?ip=%s&ak=GrwQFVVB5qDWviGtSoB4VbU4KK10QVLy&coor=bd09ll"%ip
req = urllib2.Request(url)
res_data = urllib2.urlopen(req)
res = res_data.read().decode("unicode-escape") # 转格式
jsonaddress=json.loads(res)
#print res
print "城市:",jsonaddress['content']['address']
print "省份:",jsonaddress['content']['address_detail']['province']
print "区县:",jsonaddress['content']['address_detail']['district']
print "街道:",jsonaddress['content']['address_detail']['street']
print "经纬度:",jsonaddress['content']['point']['x'],",",jsonaddress['content']['point']['y']
print "纬经度:",jsonaddress['content']['point']['y'],",",jsonaddress['content']['point']['x']
2、公司敏感信息搜集
敏感信息收集重要性:针对某些安全做的很好的目标,直接通过技术层面是无法完成渗透测试。在这种情况下,可以利用搜索引擎搜索目标暴露在互联网上的关联信息。例如:数据库文件、SQL注入、服务器配置信息、甚至是通过Git找到站点泄露源代码、以及Redis等未授权访问、robots.txt等敏感信息。从而达到渗透测试的目的。如果通过收集敏感信息直接获得了目标系统的数据库访问权限,那么渗透测试任务也就结束一大半了。
2.1、Google Hacking语法:
google hack是指使用Google等搜索引擎对某些特定的网络主机漏洞(通常是服务器上的脚本漏洞)进行搜索,以达到快速找到漏洞主机或特定主机的漏洞的目的。
Google hacking数据库:https://www.exploit-db.com/google-hacking-database/例如:查询Access数据:filetype:mdb “standard jet” (password | username | user | pass)
关键字 | 含义 |
---|---|
site | 指定搜索域名 例如:site:baidu.com |
inurl | 指定URL中是否存在某些关键字 例如:inurl:.php?id= |
intext | 指定网页中是否存在某些关键字 例如:intext:网站管理 |
filetype | 指定搜索文件类型 例如:filetype:txt |
intitle | 指定网页标题是否存在某些关键字 例如:intitle:后台管理 |
link | 指定网页链接 例如:link:baidu.com 指定与百度做了外链的站点 |
info | 指定搜索网页信息 info:baidu.com |
2.2、HTTP响应收集Server信息
通过HTTP或HTTPS与目标站点进行通信中,目标响应的报文中Server头和X-Powered-By头会暴露目标服务器和使用的编程语言信息,通过这些信息可以有针对的利用漏洞尝试。
获取HTTP响应的方法:
1、利用工具 如:浏览器审计工具、Burpsuite等代理截断工具。
2、编写Python脚本 requests库 参考链接:http://www.python-requests.org/en/master/
import requests
r = requests.get('目标')
print(r.headers)
2.3、Github信息泄露
众所周知,当今是大数据时代,大规模数据泄露事情一直在发生,从未停止过,但有些人不知道的是很多时候一些敏感信息的泄露其实是我们自己无意中造成的,然而一个小疏忽,往往却造成一系列连锁反应。Github上敏感信息的泄露,就是一个典型的例子,Github虽然方便开发者,但其中也埋藏着一些安全隐患。
Github之邮件配置信息泄露:site:Github.com smtp、site:Github.com smtp @qq.com
Github之数据库信息泄露:site:Github.com sa password、site:Github.com root password、site:Github.com User ID=’sa’;Password
Github之svn信息泄露:site:Github.com svn、site:Github.com svn username
Github之综合信息泄露:site:Github.com password、site:Github.com ftp ftppassword、site:Github.com 密码、site:Github.com 内部
3、CMS指纹识别
在渗透测试中,对目标服务器进行指纹识别是相当有必要的,因为只有识别出相应的Web容器或者CMS,才能查找与其相关的漏洞,然后才能进行相应的渗透操作。CMS又称整站系统。常见的CMS有:WordPress、Dedecms、Discuz、PhpWeb、PhpWind、Dvbbs、PhpCMS、ECShop、、SiteWeaver、AspCMS、帝国、Z-Blog等。
3.1、CMS识别工具:
1、在线工具 (搜索cms识别)
http://whatweb.bugscaner.com/look/
http://www.yunsee.cn/finger.html
2、本地工具
whatweb、
御剑web指纹识别程序(https://pan.baidu.com/share/link?shareid=437376&uk=3526832374)、
大禹CMS识别程序 https://github.com/Ms0x0/Dayu
3.2、针对CMS漏洞查询
对于查询到的CMS可以利用 https://bugs.shuimugan.com 网站查询指定CMS的漏洞。
4、敏感目录和文件
针对目标Web目录结构和敏感隐藏文件探测是非常重要的。在探测过程中很有可能会探测出后台页面、上传页面、数据库文件、甚至是网站源代码文件压缩包等。
- 后台目录:弱口令,万能密码,爆破
- 安装包:获取数据库信息,甚至是网站源码
- 上传目录:截断、上传图片马等
- mysql管理接口:弱口令、爆破,万能密码,然后脱裤,甚至是拿到shell
- 安装页面 :可以二次安装进而绕过
- phpinfo:会把你配置的各种信息暴露出来
- 编辑器:fck、ke、等
- iis短文件利用:条件比较苛刻 windows、apache等
探测工具:
1、御剑后台扫描工具
2、wwwscan命令行工具
3、dirb命令行工具
4、dirbuster扫描工具
5、cansina
提到了网站敏感目录我们就不得不提 robots.txt 文件了
robots.txt 文件是专门针对搜索引擎机器人robot 编写的一个纯文本文件。我们可以在这个文件中指定网站中不想被robot访问的目录。这样,我们网站的部分或全部内容就可以不被搜索引擎收录了,或者让搜索引擎只收录指定的内容。因此我们可以利用robots.txt让Google的机器人访问不了我们网站上的重要文件,GoogleHack的威胁也就不存在了。
假如编写的robots.txt文件内容如下:
User-agent: *
Disallow: /data/
Disallow: /db/
Disallow: /admin/
Disallow: /manager/
Allow:/images/
其中“Disallow”参数后面的是禁止robot收录部分的路径,例如我们要让robot禁止收录网站目录下的“data”文件夹,只需要在Disallow参数后面加上 /data/ 即可。如果想增加其他目录,只需按此格式继续添加。文件编写完成后将其上传到网站的根目录,就可以让网站远离Google Hack了。
虽然robots文件目的是让搜索蜘蛛不爬取想要保护的页面,但是如果我们知道了robots文件的内容的话,我们就可以知道目标网站哪些文件夹不让访问,从侧面说明这些文件夹是很重要的了。
5、整站分析
5.1、服务器类型(Linux/Windows)
服务器信息包括服务器用的操作系统:Linux 还是 Windows 。现在企业网站服务器的操作系统有百分之九十以上用的是Linux操作系统。知道了服务器的操作系统之后,还需要知道操作系统使用的具体版本。因为很多低版本的操作系统都存在已知的漏洞。
1、ping探测
判断是Linux还是Windows最简单就是通过ping来探测,Windows的TTL值都是一般是128,Linux则是64。所以大于100的肯定是Windows,而几十的肯定是Linux。但是,通过TTL值来判断服务器类型也不是百分之百准确的,有些windows服务器的TTL值也是几十,而且有的服务器禁止ping。
2、nmap探测
而判断目标网站服务器的具体的版本的话,可以采用 nmap 进行扫描, -O 和 -A 参数都能扫描出来
3、大小写判断
windows系统类服务器是不区分大小写的 然而linux系统则区分大小写
index.PHP大小写判断
5.2、网站容器(Apache/Nginx/Tomcat/IIS)
知道了这些信息之后,我们就需要知道网站用的web服务器是什么类型的:Apache、Nginx、Tomcat 还是 IIS。知道了web服务器是哪种类型后,我们还要探测web服务器具体的版本。比如Ngnix版本<0.83会有解析漏洞 ,IIS6.0会有文件名解析漏洞、IIS7.0会有畸形解析漏洞等。不同的web服务器版本,存在着不同漏洞。
看网站的报错
5.3、脚本类型(php/jsp/asp/aspx)
我们需要知道网站用的脚本类型:php 、Jsp 、Asp 、Aspx 。
1:可以根据网站URL来判断
2:site:xxx filetype:php
3:可以根据Firefox的插件来判断
5.4、数据库类型(Mysql/Oracle/Accees/Mqlserver)
我们需要知道网站用的是哪种类型的数据库:Mysql、Oracle、SqlServer 还是 Access 。虽然这几种数据库的语法大体上相同,但是还是有区别的。所以我们还是要知道目标网站用的是哪种数据库,并且数据库是哪个版本的
几种数据库的区别:
-
Access 全名是Microsoft Office Access,是由微软发布的关联式数据库管理系统。小型数据库,当数据库达到100M左右的时候性能就会下降。数据库后缀名: .mdb 一般是asp的网页文件用access数据库
-
SQL Server是由Microsoft开发和推广的关系数据库管理系统(DBMS),是一个比较大型的数据库。端口号为1433。数据库后缀名 .mdf
-
MySQL 是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的应用软件之一,MySQL数据库大部分是php的页面。默认端口是3306
-
Oracle又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。常用于比较大的网站。默认端口是1521
首先,成本上的差距,access是不要钱的,mysql也是开源的,sql server 是收费的一般也就几千,Oracle的费用则数万。其次,处理能力,access支持千以内的访问量,sql server支持几千到上万的访问,而Oracle则支持海量的访 问。再次,从数据库的规模来看,access是小型数据库,,mysql 是中小型数据库,sql server是中型数据库,Oracle是大型数据库。
常见搭配:
- ASP 和 ASPX:ACCESS、SQL Server
- PHP:MySQL、PostgreSQL
- JSP:Oracle、MySQL
6、主机扫描(Nessus)
对目标主机进行扫描,而不仅仅是对网站进行扫描,扫描目标主机开放了哪些端口,扫描端口运行的服务,目标主机上有哪些漏洞。
主机扫描的工具也有很多,比如:Nessus
7、端口扫描(nmap)
需要知道目标服务器开放了哪些端口,常见的如 135 、137 、138 、139 、445,这几个端口经常爆发漏洞。以下是一些服务端口的漏洞:
- 22——>ssh弱口令
- 873——>rsync 未授权访问漏洞
- 3306——>mysql弱口令
- 6379——>redis未授权访问漏洞
端口扫描工具有nmap和masscan。nmap扫描的准确性较高,但是扫描的比较慢。masscan扫描的比较快,但是准确性较低。
1、使用nmap 探测。
nmap -A -v -T4 目标
2、使用masscan探测。
masscan -p80 192.168.220.139/24 --rate=10000
3、使用在线网站探测
http://tool.chinaz.com/port/。
4、netcat工具
nc -nvz IP地址 端口扫描范围(20-30)
5、dmitry工具
dmitry -pd IP地址
8、旁站和C段扫描
旁站指的是同一服务器上的其他网站,很多时候,有些网站可能不是那么容易入侵。那么,可以查看该网站所在的服务器上是否还有其他网站。如果有其他网站的话,可以先拿下其他网站的webshell,然后再提权拿到服务器的权限,最后就自然可以拿下该网站了!
对于红蓝对抗和护网,C段扫描比较有意义。对于单独网站的渗透测试,C段扫描意义不大。C段指的是同一内网段内的其他服务器,每个IP有ABCD四个段,举个例子,192.168.0.1,A段就是192,B段是168,C段是0,D段是1,而C段嗅探的意思就是拿下它同一C段中的其中一台服务器,也就是说是D段1-255中的一台服务器,然后利用工具嗅探拿下该服务器。
旁站和C段在线查询地址:
http://www.webscan.cc/
https://phpinfo.me/bing.php
9、网站漏洞扫描
网站漏洞扫描就是直接对网站进行漏洞探测了。网站漏洞扫描也有很多工具。比如 AWVS、AppScan、OWASP-ZAP、nessuss等等。但是需要注意的是,使用漏扫工具直接对网站进行扫描,因为一下子流量过大,有些网站可能会崩溃。所以一般最好不要使用漏洞扫描工具对网站进行扫描。并且如果未经授权就用漏扫对网站进行扫描还是违法的!
系统漏洞扫描:
nmap工具扫描
nmap --script vuln 目标IP地址 -T4快速
nessus工具
Nessus漏洞扫描器 :系统漏洞扫描与分析软件
官网:http://www.tenable.com/downloads/nessus
安装:dpkg -i Nessus-........
启动:/bin/systemctl start nessusd.service
https://kali:8834/
web应用程序漏洞扫描:
web漏洞扫描器:
Owasp-zap 、AWVS 、Appscan 、Nikto 、Burpsuite
1、OWASP-ZAP工具
2、nikto工具
nikto -host IP地址