声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。
测试步骤
渗透测试遵循软件测试的基本流程,但由于其测试过程与目标的特殊性,在具体实现步骤上渗透测试与常见软件测试并不相同。渗透测试流程主要包括8个步骤,如下图所示:
ps:渗透测试与入侵区别
出于保护系统的目的,更全面地找出测试对象的安全隐患。
入侵:不择手段地(甚至是具有破坏性的)拿到系统权限。
用一句话概括网络入侵与渗透测试的区别:网络入侵是带有目的性与侵略性的非法攻击行为,而渗透测试是在授权下主动发现并修复漏洞的合法防御行为。
1.明确目标
当测试人员拿到需要做渗透测试的项目时,首先确定测试需求,如测试是针对业务逻辑漏洞,还是针对人员管理权限漏洞等;然后确定客户要求渗透测试的范围,如IP段、域名、整站渗透或者部分模块渗透等;最后确定渗透测试规则,如能够渗透到什么程度,是确定漏洞为止还是继续利用漏洞进行更进一步的测试,是否允许破坏数据,是否能够提升权限等。
在这一阶段,测试人员主要是对测试项目有一个整体明确的了解,方便测试计划的制订。
确定范围:测试目标范围,IP,域名,内外网。
确定规则:能渗透到什么程度,时间?能否修改上传?能否提权等。
确定需求:web应用的漏洞(新上线程序)?业务逻辑漏洞(针对业务的)?人员权限管理漏洞(针对人员、权限)?等等。(立体全方位)
根据需求和自己技术能力来确定能不能做,能做多少。
2. 收集信息
在信息收集阶段要尽量收集关于项目软件的各种信息。例如,对于一个Web应用程序,要收集脚本类型、服务器类型、数据库类型以及项目所用到的框架、开源软件等。信息收集对于渗透测试来说非常重要,只有掌握目标程序足够多的信息,才能更好地进行漏洞检测。
信息收集的方式可分为以下2种。
①主动收集:通过直接访问、扫描网站等方式收集想要的信息,这种方式可以收集的信息比较多,但是访问者的操作行为会被目标主机记录。
有流量 有数据传输无法隐匿 耗时
②被动收集:利用第三方服务对 目标进行了解,如上网搜索相关信息。这种方式获取的信息相对较少且不够直接,但目标主机不会发现测试人员的行为。
去站长之家,fofa,不产生直接流量
方式:主动扫描,开放搜索等
开放搜索:利用搜索引擎获得,后台,未授权页面,敏感url等。
基础信息:IP,网段,域名,端口
系统信息:操作系统版本
应用信息:各端口的应用,例如web应用,邮件应用等等
版本信息:所有这些探测到的东西的版本。
服务信息
人员信息:域名注册人员信息,web应用中网站发帖人的id,管理员姓名等。
防护信息:试着看能否探测到防护设备
网站与服务器信息-whois
whois是用来查询域名的IP以及所有者等信息的传输协议,可以理解为是一个可以查询域名注册详细信息的大数据,whois中包含域名注册者的姓名,邮箱,电话,地址,dns服务器等信息这些对我们渗透目标都很有用,然后在通过whois 获取到的注册者和邮箱进行域名反查可以获取更多的信息。
ps:站长之家,whios查询
推荐网站:
命令查询
whois http://xxx.com
在线查询
工具类
SamSpade:http://www.samspade.com
SuperScan:http://www.foundstone.com
NetScan Tools Pro:http://www.nwpsw.com
网站与服务器信息(DNS查询)
DNS是域名系统(DomainNameSystem)的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
DNS是由解析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。其中域名必须对应一个IP地址,而IP地址不一定只对应一个域名。
DNS查询可以有两种解释,一种是指客户端查询指定DNS服务器上的资源记录(如A记录),另一种是指查询FQDN名的解析过程。
查询DNS服务器上的资源记录,可以在Windows平台下,使用命令行工具,输入nslookup,返回的结果包括域名对应的IP地址(A记录)、别名(CNAME记录)等。除了以上方法外,还可以通过一些DNS查询站点如国外的国内的查询域名的DNS信息。
https://www.sspu-wyl.com/posts/63889/
命令行查询
Nslookup、dig
在线查询
http://www.72e.net/tools/dns.aspx
工具类
DNSenum
DNATracer
DNSWalk
Netifera
nslookup是较为常用的工具之一,它甚至比同类工具dig的使用人数更多,因为它的运行环境是Windows,并且不需要额外安装软件或程序。dig是在Linux环境里运行的命令,虽然也可以在Windows环境里使用,但是需要安装digWindows版本的程序nslookup命令以两种方式运行:交互式和非交互式。交互式系统是指执行过程中允许用户输入数据和命令的系统。而非交互式系统,是指一旦开始运行,不需要人干预就可以自行结束的系统。nslookup以非交互式方式运行,就是说运行后自行结束。
Nslookup命令解析
nslookup -type=ptr 8.8.8.8 # 查询一个IP地址对应的域名
nslookup -type=ns http://baidu.com # 查询http://baidu.com使用的DNS服务器名称
nslookup # 进入交互式shell
server http://ns2.baidu.com # Server设定查询将要使用的DNS服务器
ls http://baidu.com # ls命令列出某个域中的所有域名
Mx记录电子邮件交换记录,记录一个邮件域名对应的IP地址,比如my[at]http://seclines.com
后面的部分seclinescom,邮件服务器对应的IP地址
NS记录域名服务器记录,记录该域名由哪台域名服务器解析
PTR记录反向记录,也即从IP地址到域名的一条记录
TXT记录记录域名的相关文本信息
搜索引擎
钟馗之眼(Zoomeye)
ZoomEye支持公网设备指纹检索和 Web 指纹检索,网站指纹包括应用名、版本、前端框架、后端框架、服务端语言、服务器操作系统、网站容器、内容管理系统和数据库等。设备指纹包括应用名、版本、开放端口、操作系统、服务名、地理位置等。看起来和shodan搜索引擎差不多,但用起来还是有些区别,shodan搜索引擎是以英文语法形式进行搜索,而ZoomEye更多是以中文语法形式进行搜索。
fofa
FOFA是北京白帽汇科技有限公司推出的一款网络空间搜索引擎,它通过网络空间测绘帮助研究人员或企业迅速进行网络空间匹配,加快后续工作进程。如进行漏洞影响范围分析、应用分布统计、应用流行度排名统计等
社会工程学
公开信息
新闻报道
例如:xx公司采用xx系统,...
社交网站
往往是我们公开信息最多的地方,比如我们常用的QQ、QQ空间、微信朋友圈微博等。能获取到的信息可能有姓名、年龄、生日、星座、爱好、照片、人际交往关系;甚至邮箱、手机、住址、身份证等等隐私、敏感信息。还有一些招聘求职网站也往往是信息泄露最严重的地方。
隐私信息
社工库
运用社会工程学进行攻击的时候积累的各方面数据的结构化数据库。这个数据库里有大量信息,甚至可以找到每个人的各种行为记录,比如酒店开房记录、个人身份证姓名和电话号码。
社会工程学经典案例分析
案例一 获取口令
攻击者在得到管理员的手机号码后,就可以利用身份为伪造去骗取系统口令。身份伪造是指攻击者利用各种手段隐藏真实身份,以一种目标取得信任的身份出现来达到目的。
攻击者大多以能够自由出目标内部身份出现,获取情报和信息或采取更高明的手段,如伪造身份证、ID卡等,在没有专业人士或系统检测的情况下,要识别其真伪是有定难度的。
在各种社交类型的网络上搜索用户信息时,得到管理员的手机号码后,就可以假装是管理员所在公司的一个新员工,然后利用得到的手机号给目标发信息,告诉他“我是你的新同事xxx,是新的xx部门的经理,这是我的手机号码”。再寻找话题与管理员聊天,使其对自己说的话深信不疑。最后,再告诉管理员,x x经理让我在公司内部办公系统上下载一份文档, 但我忘记问他公司的内部办公系统设的密码,你可以把口令告诉我吗,我急需这份文档。当管理员听到这些话后,可能就会相信你所说的,并将口令告诉你。这样,就顺利地从管理员口中获得系统口令了。
案例二 网络钓鱼
网络钓鱼(Phishing,与钓鱼的英语fishing发音相近,又名钓鱼法或钓鱼式攻击)是通过大量发送声称来自于银行或其他知名机构的欺骗性垃圾邮件,意图引诱收信人给出敏感信息(如用户名、口令、帐号 ID、ATM PIN 码或信用卡详细信息)的一种攻击方式。
最典型的网络钓鱼攻击将收信人引诱到一个通过精心设计与目标组织的网站非常相似的钓鱼网站上,并获取收信人在此网站上输入的个人敏感信息,通常这个攻击过程不会让受害者警觉。它是“社会工程攻击”的一种形式。简单地说,它是通过伪造信息获取受害者的信任并且响应。由于网络信息是呈爆炸式增长的,人们面对各种各样的信息往往难以辨别真伪,依托网络环境进行钓鱼攻击是一种容易让人们上当的攻击手段。
在实际生活中常会遇到钓鱼事件,并且如此拙劣的手段仍能频频得手,主要是因为网络的鱼充分利用了人们的心理漏洞。首先,人们收到攻击者发送的影响力很大的邮件时,很多人都不会怀疑信件的真实性,而会下意识地根据要求打开邮件里面指定的URL进行操作。其次,页面打开后,通常不会注意浏览器地址栏中显示的地址,而只是留意页面内容,这正是让钓鱼者有机可乘的原因。
3.扫描工具
在这一阶段,综合分析收集到的信息,借助扫描工具对目标程序进行扫描,查找存在的安全漏洞。
利用上一步中列出的各种系统,应用等使用相应的漏洞。
方法:
1.漏扫,awvs,IBM appscan等。
2.结合漏洞去exploit-db等位置找利用。
3.在网上寻找验证poc。
内容:
系统漏洞:系统没有及时打补丁
Websever漏洞:Websever配置问题
Web应用漏洞:Web应用开发问题
其它端口服务漏洞:各种21/8080(st2)/7001/22/3389
通信安全:明文传输,token在cookie中传送等。
4.验证漏洞
在扫描漏洞阶段,测试人员会得到很多关于目标程序的安全漏洞,但这些漏洞有误报,需要测试人员结合实际情况,搭建模拟测试环境对这些安全漏洞进行验证。被确认的安全漏洞才能被利用执行攻击。
将上一步中发现的有可能可以成功利用的全部漏洞都验证一遍。结合实际情况,搭建模拟环境进行试验。成功后再应用于目标中。
自动化验证:结合自动化扫描工具提供的结果
手工验证,根据公开资源进行验证
试验验证:自己搭建模拟环境进行验证
登陆猜解:有时可以尝试猜解一下登陆口的账号密码等信息
业务漏洞验证:如发现业务漏洞,要进行验证
公开资源的利用
-exploit-db/wooyun/
-google hacking
-渗透代码网站
-通用、缺省口令
-厂商的漏洞警告等等
5.分析信息
经过验证的安全漏洞就可以被利用起来向目标程序发起攻击,但是不同的安全漏洞,攻击机制并不相同,针对不同的安全漏洞需要进一步分析,包括安全漏洞原理、可利用的工具、目标程序检测机制、攻击是否可以绕过防火墙等,制订一个详细精密的攻击计划,这样才能保证测试顺利执行。
6.渗透攻击
渗透攻击就是对目标程序发起真正的攻击,达到测试目的,如获取用户账号密码、截取目标程序传输的数据、控制目标主机等。一般渗透测试是一次性测试,攻击完成之后要执行清理工作,删除系统日志、程序日志等,擦除进人系统的痕迹
7.整理信息
渗透攻击完成之后,整理攻击所获得的信息,为后面编写测试报告提供依据。
整理渗透工具:整理渗透过程中用到的代码,poc,exp等
整理收集信息:整理渗透过程中收集到的一切信息
整理漏洞信息:整理渗透过程中遇到的各种漏洞,各种脆弱位置信息
目的:为了最后形成报告,形成测试结果使用。
8.编写测试报告
测试完成之后要编写测试报告,阐述项目安全测试目标、信息收集方式、漏洞扫描工具以及漏洞情况、攻击计划、实际攻击结果、测试过程中遇到的问题等。此外,还要对目标程序存在的漏洞进行分析,提供安全有效的解决办法
按需整理:按照之前第一步跟客户确定好的范围,需求来整理资料,并将资料形成报告
补充介绍:要对漏洞成因,验证过程和带来危害进行分析
修补建议:当然要对所有产生的问题提出合理高效安全的解决办法
总结
当然还有一点,著名大黑客凯文·米特尼克(Kevin David Mitnick)当初就说过一句名言:
it is much easier to trick someone into giving a password for a system than to spend the effort to crack into the system。(欺骗某人然后输入系统密码要比花精力渗透系统容易得多。