获取更多学习资料、想加入社群、深入学习,请扫我的二维码或加Memory20000427。
半年前,有幸拜读亮神的渗透测试笔记,其中给我印象最深的一句话是:
“渗透测试的本质就是信息收集”。
那时我还想不明白为什么,总觉得技术上的精进比信息收集重要得多,半年后回过头来看,技术是有瓶颈期的,至少对绝大多数人来说如此,最终,你能不能拿下目标,很大程度上取决于信息收集,也可以说取决于你对目标的了解的有多全、有多深。
所以,我结合自己浅薄的一些经验,写一写关于信息收集的那些事,
如有不正之处,欢迎批评指正。
关于域名信息,不得不提whois查询和备案查询,我们查来查去,直接讲重点,要的就是注册商、注册人、邮件、DNS解析服务器、注册人联系电话、地理位置等和目标自身息息相关的要素,具体的收集方法,详见我的渗透流程归纳文章,收集到以后的用法在本文第三大点作详细描述。
关于子域名,简单来讲,往往对应着目标系统的不同业务资产,教育类的可能包括教务系统、邮件系统、学生网课平台、学历信息平台、报名系统等,政府类的可能包括OA办公系统、文件存储系统、邮件系统等等。可以说,收集到的子域名越多,你对目标的了解就越全面,对目标的运行架构和框架就越熟悉,能够测试的资产就越多。
关于真实IP,他不仅托管着你一开始拿到的域名的资产,他的旁站和C段甚至机房信息都有可能为你带来意外的惊喜。拿到真实IP后,就可以对该IP的端口信息(开放端口和服务漏洞)、指纹信息(中间件版本,历史漏洞)、历史解析域名和域名的历史解析IP(拓展出更多资产)做进一步的探测。
对所有的子域名,都要收集他们的敏感信息、目录和文件,可能会包括员工个人信息、waf、登陆点、后台、历史未删除页面、物理路径、源码备份、可用于社工的信息泄露。
详见我的渗透流程归纳,已经比较全面了,在此不赘叙。
xmind+excel
刚开始做渗透的时候,自己竟然用的是记事本txt,当目标资产比较多的时候,相信我,每次重新打开文档,你根本看不过来,而且思路全是混乱的。所以,我推荐xmind这个思维导图软件,把整个渗透的流程都可以像树状图一样记录进去,既便于理清思维,也便于实际操作。
excel,便于把域名、端口、目录批量导入,去重和筛选以及整合都非常方便。
dnsenum
dnsenum 是一款用于收集 dns 信息的工具,这款工具通过字典爆破、搜索引擎、whois 查询、区域传输等手段用于获取dns 信息,查询网站的主机地址信息(A记录),域名服务器和邮件交换记录(NS和MX),在域名服务器上执行axfr(区域传送)请求,然后通过Google得到扩展域名信息,提取子域名并查询,当查询到 C 类地址的时候还会做反向的域名查询,以发现更多的域名,利用字典完成DNS爆破( /usr/share/dnsenum/dns.txt ,可替换此默认字典,国内国外的dns字典还是有差别的)。
常用方法:
详细的方法用dnsenum -h可以获取,这里只介绍常用的。
(1)dnsenum http://example.com
A记录和NS记录对应多个IP,可以判断使用了CDN,MX记录和TXT记录可能是真实IP或C段。
(2)dnsenum http://example.com -f /usr/share/dnsenum/dns.txt(dns字典绝对路径) --noreverse(跳过反向查询,节省时间)
读取已知子域名,利用dns字典进行暴力破解,跑出更多子域名。
(3)dnsenum http://example.com -f /usr/share/dnsenum/dns.txt(dns字典绝对路径) -t 1 --noreverse -o
-t参数代表超时时间,设置1秒节省时间,-o参数代表将结果输出为文件,便于查看和整理。
(4)域传送漏洞现在比较少,第一种方法里会自动检测的,留意一下就好。C类地址和IP块也挑出来整理好,以后扩大信息收集范围的时候再用。
nslookup
详细的方法用man nslookup可以获取,这里只介绍常用的。
(1)非交互式
直接查询域名
nslookup http://example.com
多个IP可以认为有cdn
指定dns服务器
nslookup http://example.com 8.8.8.8
从国内访问国内网站时,大多会被cdn解析,但是如果用国外的dns服务器,可能直接得到真实IP,用不同的dns服务器对比。
查询特定类型记录 nslookup -type=mx/ns/soa http://example.com
(2)交互式
进入交互模式:
直接输入nslookup命令,不加任何参数,则直接进入交互模式,此时nslookup会连接到默认的域名服务器(/etc/resolv.conf的第一个dns地址)。
输入nslookup - 127.0.0.1。
支持选定不同域名服务器,需要设置第一个参数为“-”,然后第二个参数是设置要连接的域名服务器主机名或IP地址。例如可以设置本机为域名服务器nslookup - 127.0.0.1
进入交互模式以后:
直接输入域名或set type=a/ns/mx/soa....
dig
dig(域信息搜索器)命令是一个用于询问 DNS 域名服务器的灵活的工具。
详细的方法用dig -h可以获取,这里只介绍常用的。
(1)dig http://example.com a/mx/ns....
(2)dig +trace http://example.com
从根域开始显示是如何一步步解析出IP地址的
(3)dig +short http://example.com 以上的简化版,直接出最后结果
layer子域名挖掘机
比较好的主动式挖掘工具,windows平台下使用,还可同时探测子域名ip、端口、中间件版本以及多层子域名挖掘。
各种在线子域名挖掘网站
优点:速度快,dns解析压力小
缺点:字典不能自定义,查了什么内容第三方知道,有时候还不准
fuzzdomain/dirbuster
类似layer,但速度比layer快很多,且支持任意数量字母数字的fuzz,不管是目录扫描、后台扫描、Web漏洞模糊测试都能灵活应对,有的目标子域名很具有规律性,用这个就比较方便。
fofa/shodan/zoomeye等资产搜索引擎
用已经收集到的信息输入进去,有时候也能发现意料之外的域名,有些目标系统除了中文名也有英文名和简写,利用旁站、C段进行查询,也可能有收获。
反查操作
根据已经收集到的注册人名、邮箱、手机号等信息进行反查,看看还有没有其他资产。站长之家、企查查、github等。
根据ip反查历史域名,根据域名反查历史注册ip。
反查往往是拓宽信息收集面的重要手段,自己在信息收集的时候,往往就是越收集越多,正向循环的一个过程。
海外ping
因为CDN的原因,国内的站用国外ping,反之亦然,可能获取真实IP。
有些子域名可能由于成本的原因没有用CDN,所以要尽可能的多收集子域名,从而有效判断真实ip。
zoomeye/fofa/shodan
同上反查操作,能找出一批IP,再进行鉴别。
历史解析ip和ip的历史解析域名
一般来说,ip和域名总有更换绑定的历史记录,在已知域名、子域名、ip的情况下,把所有域名和ip进行历史解析查询,多用国外dns,这里不赘述,详见我的渗透流程归纳。
目标发邮件得到ip
利用邮件订阅、注册、密码找回等一切能让对方服务器给自己发邮件的方式获取,邮件的源码和头部信息可能就有用。
注意:必须是目标自己的邮件服务器,第三方或公共邮件服务器是没有用的。
旁站和C段
有一定防范意识的目标,一般都会将自己的web单独托管,如果有旁站或C段看起来比较奇怪,基本也可以认为不是真实IP。
浏览器插件
DNS Checker,非常好用的插件
https://dnschecker.org/
集成大量dns相关查询工具,进入以后自己体会
获得真实IP后,进一步对端口服务、中间件、旁站和C段进行信息收集,这个工程也比较大,详见我的渗透流程归纳。
你应该掌握的shegongku
TG
https://dehashed.com/
https://aleph.occrp.org/
https://www.blackbookonline.info/
查询用户注册信息
REG007
https://checkusernames.com/
https://knowem.com/
https://namechk.com/
公开漏洞库
国内
国家信息安全漏洞库
国家信息安全漏洞共享平台
SeeBug
信息安全漏洞门户 VULHUB
数字观星
NSFOCUS绿盟科技
BugScan–漏洞插件社区
漏洞列表 | 教育行业漏洞报告平台(Beta)
工控系统行业漏洞库平台
exp库-打造中文最大exploit库
乌云漏洞库
国外
Exploit-db
Sploitus | Exploit & Hacktool Search Engine
packetstorm
SecurityFocus
cxsecurity
rapid7 Vulnerability & Exploit Database
Most recent entries – CVE-Search
CVE security vulnerability database. Security vulnerabilities, exploits
CVE mitre – Search CVE List
美国官方工控数据库 ICS-CERT Landing | CISA
路由器漏洞搜索 Routerpwn – One click exploits, generators, tools, news, vulnerabilities, poc
源码、文件泄露、敏感信息
详见渗透流程归纳,这里只提供思路。
github、gitee、gitlab等代码托管平台(目标系统,他们的技术人员github和个人博客也是很重要的一条线索)
搜索引擎hack
网盘文件聚合搜索引擎
目标相关应用
目标网站APP应用,用Fiddler或Burp Suite抓取App的请求,从里面找到目标的真实IP等信息
七麦数据:通过当前APP查询同开发商应用,得到目标所有APP应用(同开发商应用)
AppStore:通过当前APP查询同开发商应用,得到目标所有APP应用(同开发人员)
天眼查和企查查:获取目标的公众号、微博、备案站点、软件著作权等,可以结合社工拓展更多资产
一定要拿到真实ip,渗透最终如果能getshell当然是最好的,只有拿到的ip是真实ip,shell写入的才是目标系统,才能获取重要的数据。
而且,比较大的系统真实ip往往不唯一,甚至可能是完全不同的机房,信息收集的时候要注意甄别。
真实ip扫出的端口和banner信息有利用的价值,CDN分发的则没有,可以get的点明显少很多。
在拿ip的过程中,尤其注意从ip的历史解析域名和域名的历史解析ip下手,全网扫描的dns扫描工具比较多,除非从建站一开始就做好了CDN,否则一定会有蛛丝马迹被记录到。
可以说,信息收集最基础和最根本的就是找准真实ip。
信息收集时,要注意把现有的信息链尽可能的延长,每一条信息都尽可能的延展开来,继续进行搜集,就像苍天大树由主干向上不断延展、开枝散叶。
在信息收集的全流程中,总能不断发现新的ip和域名,而新的ip和域名则可以发现新的敏感信息和内容,也可以用来反查历史解析和社工,实际操作的过程中,你会发现会越收集越多,信息网织起来越来越密,对目标的了解更加全面和深入。
这样就不能等全部信息收集完再开始测试了,很多比较脆弱的资产有明显的特征,经验丰富的工程师比较容易识别出来
比如:
UI设计比较过时和过于简单的页面
搭建框架比较老旧的页面
没有验证码、验证码过于简单或验证码没有生存期的页面
数据参数过滤不严格的站点
交互信息量比较大的站点...