渗透测试是实施安全评估(即审计)的具体手段。(更倾向于入侵,会带来破坏性影响)
方法论是在制定、实施信息安全审计方案时,需要遵循的规则、惯例和过程。、
渗透测试的种类
*黑盒测试:安全审计员在不清楚被测单位的内部技术构造的情况下,从外部评估网络基础设施的安全性,暴露出目标的安全问题,甚至可以揭露尚未被他人利用的安全弱点。(技术含量高一点)
*白盒测试:审计员可以获取被测单位的各种内部资料甚至不公开资料,所以渗透测试人员的视野更为开阔。以白盒测试的方法评估安全漏洞,测试人员可以以最小的工作量达到最高的评估精确度。
脆弱性评估 有两种:1)内部脆弱性评估,可保证内部系统的安全性,2)外部脆弱性评估,是验证边界防护。(漏洞扫描的同时提出防御策略)
安全测试方法论
*开放式Web应用程序安全项目
测试指南、开发人员指南、代码审查指南
OWASP TOP 10(Web十大安全漏洞)
1)注入:SQL注入,NOSQL注入,OS注入,LDAP注入等
2)失效的身份认证:暴力破解,cookie欺骗等
3)敏感信息泄露:传输过程中的数据,存储的数据以及交互数据
4)XML外部实体(XXE):自己定义,要让对方认识?
5)失效的访问控制:访问其他用户的账户,修改其他用户的数据,更改访问权限
6)安全配置错误:弱口令
7)跨站脚本(XSS):Java中用
8)不安全的反序列化 9)使用含有已知漏洞的组件 10)不足的日志记录和监控
*通用缺陷列表CWE :某一类漏洞编号
*通用漏洞与披露CVE:某一个漏洞编号
*其他方法论
渗透测试流程
*渗透测试执行标准PTES(7个阶段)
1)事前互动 2)情报搜集 3)威胁建模 4)漏洞分析 5)漏洞利用 6)深度利用 7)书面报告
*通用渗透测试框架
1)范围界定 2)信息搜索 3)目标识别 4)服务枚举 5)漏洞映射 6)社会工程学 7)漏洞利用 8)权限提升 9)访问维护 10)文档报告
信息搜索:在这个阶段,渗透人员需要使用各种公开资源尽可能地获取测试目标的相关信息。互联网渠道主要有:论坛|公告板|新闻组|媒体文章|博客|社交网络|其他商业或非商业网站|搜索引擎。收集的信息主要包括DNS服务器、路由关系、whois数据库、电子邮件地址、电话号码、个人信息以及用户账户。
DNS信息:主要关注域名注册商管理员联系方式、电话和邮箱、子域名等信息
whois查询,是一个集成在Kali虚拟机中的小工具,可以用来查询域名注册信息
命令 whois+域名 还可以反查,邮箱反查、注册人反查、电话反查
子域名查询:netcraft 证书
与传送漏洞(可以用dig工具检测)
DNS区域传送:指的是一台备用服务器使用来自主服务器看的数据刷新自己的与数据库(允许不受信任的因特网用户执行DNS区域传送)通过漏洞可以得到子域名信息,子域名信息,子域名对应的IP
DNS2IP通过DNS解析到IP地址
----ping命令,得到的地址是非权威解答 ----nslookup ------站长工具
CDN加速:CDN(内容分发网络)本意是进行节点缓存,使网站访问速度加快,一般情况下是没办法得到目标的真实IP的
IP查询:站长工具 同IP网站查询(同一个IP上的地址)
IP-whois查询
IP2Location :查询IP 可以查地址经纬度
利用搜索引擎搜集信息谷歌
钟馗之眼:支持公网设备指纹检索和web指纹检索。网站指纹包括应用名、版本、前端框架、后端框架、服务端语言、服务器操作系统、网站容器、内容管理系统和数据等。
目标识别:主要任务,是识别目标的网络状态、操作系统和网络架构,完整的展现目标网络里各种联网设备或技术的完整性。
服务枚举:(端口扫描)进一步找出目标系统中所有开放的端口
漏洞映射:(漏洞扫描)查找、分析目标系统中存在的漏洞
社会工程学:诱导目标组织去做一些事情,对目标组织中的人员进行定向攻击
漏洞利用:主要任务是控制目标系统
权限提升:(留后门)提升权限的最终目的是获得目标系统的最高访问权限
访问维护:可以节约获取目标系统访问权限所需要的时间、金钱和资源
文档报告:在这个环节中,审计人员要记录、报告并现场演示那些已经识别、验证和利用了的安全漏洞
*简化渗透测试流程
明确目标(确定范围|确定规则|确定需求)信息收集(基础信息|系统信息|应用信息|人员信息|防护信息)漏洞探测(系统漏洞|web服务漏洞|web应用漏洞|其他端口|通信安全)漏洞验证(手工验证|工具验证|实验验证)漏洞利用(定制EXP|防御绕过|进一步渗透|清理痕迹)形成报告(整理结果|补充介绍|修复建议)
web工作机制
输入网址之后的流程:本地缓存->host->IP/ARP->DNS->IP->网关->路由->到达对方主机->访问80 443-> 3次握手->建立连接->HTTP数据包->HTTP响应(html文件直接解析,php文件需要解析mysql)
网页,网站:我们通过浏览器上网看到的精美页面就是网页【一般都是经过浏览器渲染过的】,多个网页的集合就是网站
web容器:也叫web服务器,主要提供web服务,HTTP服务。常见的web容器有apache支持php/IIS/Nginx等
静态页面:都是一些HTML文件,纯文本文件,这些文件中包含html代码【HTML,超文本标记语言,在浏览器中解释运行】
中间件服务器:以上的只能单向地给用户展示信息。动态页面有交互的功能,所谓动态就是利用flash、php、asp、Java等技术在网页中嵌入一些可运行的脚本,用户浏览器在解释页面的时候,遇到脚本就会启动去运行它,这些脚本可以嵌入在页面中,如JS等。也可以以文件的形式单独存放在web服务器的目录里,如.asp、.php、.jsp文件等,这些功能性的脚本形成常用的工具包,单独管理,在web业务开发时,直接使用就可以了,这就是中间件服务器。它实际上是web服务器处理能力的扩展。weblogic、jboss
数据库的出现:web开发者在web服务器后边增加了一个数据库服务器,那些经常变化的数据存进数据库,可以随时更新。当用户请求页面时,脚本根据用户请求的页面,涉及到动态数据的地方,利用SQL数据库语言,从数据中读取最新的数据,生成“完整”页面,最后呈现给用户。
HTTP协议概述:是浏览器与web服务器之间的通信协议,是传递消息的规范和要求,是一个请求和响应的协议,客户端发送请求,服务端对请求给出回应,HTTP使用可靠的TCP连接,默认端口80。
特点:支持浏览器/服务器模式;简单快速,浏览器向服务器提出请求时,只需要传送请求方法和请求路径;灵活,HTTP可以运行传输任意类型的数据对象,包括.html、.jpg、.mp3;HTTP协议是无状态的协议
URL(统一资源定位符)用来告诉web容器,浏览器所请求资源(文件)的路径 格式:
锚点:实现页面定位
URL编码: URL中允许出现的字符是有限制的,URL中path开始允许直接发现A-Z a-z 0-9半角减号(-)、下划线句点(.)、波浪线(~)。其他字符均会被百分号编码。如下:# %23 空格 %20 % - %25 (在进行编程的时候用+代替空格),%+ASCI I码16进制形式
HTTP请求由请求行、请求头、请求正文三个部分组成
请求行:方法,GET(最常用)/POST(可以向服务器提交参数以及表单包括文件流)/HEAD(与GET方法类似,但在服务器响应中只返回首部)/PUT(与GET从服务器读取文档相反,PUT会向服务器写入文档)/TRACE(回显浏览器的请求)/OPTIONS(请求web服务器告知其支持的各种功能)/DELETE(请求服务器删除请求URL所指定的资源);资源路径,/php/test/get.php;协议/版本 HTTP/1.1
请求头:从请求报文第二行开始到第一个空行为止之间的内容。其中包含很多字段 请求正文:
响应报文由状态行、响应头、响应正文三部分组成
1)状态行:协议/版本,状态代码,描述短语
2)响应头:第二行开始到第一个空行为止的所有内容,其中包含了关于HTTP响应的重要字段
3)响应正文:服务器返回资源的内容(浏览器接收到的HTML代码)
状态代码:100~199信息性状态码 200~299成功状态码 300~399重定向状态码
400~499客户端错误状态码 500~599服务器错误状态码
主要字段
server:服务器指纹 set-cookie向浏览器端设置cookie
last-modified服务器通过这个头消息告诉浏览器,资源的最后修改时间
content-length正文长度 location重定向目标页面
refresh服务器通过refresh头告诉浏览器定时刷新浏览器
cookie与session机制