渗透学习笔记(1)
2月22日,天气阴,今天学习《白帽子讲web安全》
互联网本来是安全的,自从有了研究安全的人,就不安全了。
1安全的本质:安全是什么?什么情况下会产生安全问题?我们要如何看待安全问题?
安全就是保护我们受信任的域,安全的本质就是信任的问题,当我们对interent和一些应用不受信任时,我们设立信任域,对来自不信任的地方的传输进来的数据接受严格检验,
同时,信任和不信任之间需要有一个度,这就是安全的艺术魅力。
安全从提出至今一直是持续发展的。
安全三要素:
机密性:保护数据文件不泄漏,加密是常见手段。
完整性:数据内容是完整的。
可用性:资源需要的时候随时能使用。
我们在确定安全方案的时候需要经过4个阶段:1资产等级划分,2威胁分析,3风险分析,4确认解决方案。
资产等级划分是最基础也是最重要的阶段,它告诉我们要目标是什么,保护什么。互联网安全的核心问题就是数据的安全问题。
确立了目标就是划分信任域和信任边界。
划分号信任域后,进行威胁分析,在安全的领域里,把可能造成危害的来源称为威胁,可能造成的损失成为风险。
威胁分析一般进行头脑风暴,想想哪里会有漏洞,一般也看微软提出的STRIDE模型。
spoofing(伪装)----冒充他人---认证
Tampering(篡改)----修改数据-----完整性
Repudiation(抵赖)----否认做过的事----不可抵赖性
informationDiscosure(信息泄漏)---信息泄漏----机密性
DoS(拒绝服务)---拒绝服务---可用性
Elevation of Privilage(提升权限)--未经授权许可---未授权访问
风险分析一般看微软提出的DREAD模型。
Damage Potential:1执行管理员操作,2泄漏敏感信息3泄漏其他信息
Reproducibility:攻击者可以随意攻击,2攻击者有攻击次数限制,3攻击者偶尔能攻击
Exploitability:初学者段时间就能攻击,熟练的攻击者才能攻击,3漏洞利用条件苛刻
Affected users:所有用户,2部分用户,3极少客户
Discoverability:漏洞明显,2需要深入才能挖到,发现漏洞极其困难
设立安全的方案,应该高效,用户体验好,高性能,低耦合,易于扩展升级
应遵循1黑白名单,白名单:只允许这些操作,或数据通过,黑名单:不许这些数据或操作通过。
2最小权限原则
3纵深防御原则:多方面,多层次的设置安全方案
4数据与代码分离原则
2、浏览器安全
1同源策略,浏览器最基本也是最核心的功能,他的作用就是限制来自不同源的文档或脚本,对当前文档读取或限制某些属性,就是说有ABC三个网页,B网页下的D脚本不能去修改A网页,也不能取修改C网页,源来自于加载的页面,就是D的源是B,先假设B关闭,当A加载B中的D时,D的源来自A
2恶意地址拦截,就是拦截钓鱼网站和被挂马的网站
3、XSS跨站脚本攻击
xss实质是一种HTML注入,攻击者通过在页面注入一些恶意脚本,当用户访问网站时,对用户的浏览器进行控制。
XSS实例:
假如网站需要客户的输入打印到页面中:
<?php
$input=$_GET["param"];
echo"<div>".$input."</div>
?>
攻击者提交:www.xx.com/test.php?param=<script>alert(/xss/)</script>
构成xss攻击
如果攻击者把这个URL发给用户就会造成反射型XSS
xss按效果一般分成2种,分别是反射型XSS和持久型XSS。
持久型就是在数据库或源码中被修改了,只要访问这个网站就会出现
还一种是DOM based XSS修改HTML中的节点,普通的就是插入一个事件,造成攻击,也是是反射型的。
xss能进行cookie劫持,利用对方的cookie进行登录,在cookie中加入httponly 防止cookie劫持
XSS甚至能进行GET和POST请求。
总之,XSS是对用户的攻击,很强大,只要javascrapt能实现的,就能通过XSS攻击。没有想不到,只有做不到。
3、XSS构造技巧
1、利用字符编码
转义各种字符,使用不同的编码
2、绕过长度限制
第一点,利用各种事件来绕过
第二点,先将XSS payload写在别的地方,然后通过简短代码加载,通常将XSS payload 放在location.hash中
第三点,利用注释绕过
3、使用<base>标签
定义一个相对的URL地址,这个大家都懂得
4、window.name的妙用
window.name 的对象是浏览器的窗体,不是文档,所以不受同源的限制,攻击者利用这个对象进行跨域攻击
<body>
<script>
window.name='test';
alert(document.domain+' '+window.name);
window.location='http://www.b.com/test1.html';
</script>
</body>
此时,a中弹窗,出现www.a.com 和test,随即跳转到b中,弹窗www.b.com和test
此时window.name跨域
4、XSS防御
1、HttpOnly
2、输入检查:一般服务器和客户端同时进行
3、使用安全的函数
5、XSS输出途径
1、在HTML标签中输出
2、在HTML属性中输出
3、在script标签中输出
4、在事件中输出
5、在CSS中输出
6、在地址中输出
3、点击劫持
就是在网站中构造一个透明的iframe,覆盖在正常的页面上,当用户点击frame或输入信息时,对用户进行攻击
apache运行原理初解
apache作为web服务器软件,主要作用是对客户的请求进行解析并返回一个答复,apache启动后,一般监听80端口,发现请求后,生成子进程处理请求。
apache在运行阶段:
2.运行阶段
在运行阶段,Apache主要工作是处理用户的服务请求。
在这个阶段,Apache放弃特权用户级别,使用普通权限,这主要是基于安全性的考虑。
运行阶段流程
Apache将请求处理循环分为11个阶段,依次是:
Post-Read-Request
URI Translation
Header Parsing
Access Control
Authentication
Authorization
MIME Type Checking
FixUp
Response
Logging
CleanUp
Apache Hook机制
Apache的Hook机制是指:Apache
允许模块(包括内部模块和外部模块,例如mod_php5.so,mod_perl.so等)将自定义的函数注入到请求处理循环中。换句话说,模块可以在
Apache的任何一个处理阶段中挂接(Hook)上自己的处理函数,从而参与Apache的请求处理过程。
mod_php5.so/ php5apache2.dll就是将所包含的自定义函数,通过Hook机制注入到Apache中,在Apache处理流程的各个阶段负责处理php请求。
Apache请求处理循环详解
1.Post-Read-Request阶段
在正常请求处理流程中,这是模块可以插入钩子的第一个阶段。对于那些想很早进入处理请求的模块来说,这个阶段可以被利用。
2.URI Translation阶段
Apache在本阶段的主要工作:将请求的URL映射到本地文件系统。模块可以在这阶段插入钩子,执行自己的映射逻辑。mod_alias就是利用这个阶段工作的。
3.Header Parsing阶段
Apache在本阶段的主要工作:检查请求的头部。由于模块可以在请求处理流程的任何一个点上执行检查请求头部的任务,因此这个钩子很少被使用。mod_setenvif就是利用这个阶段工作的。
4.Access Control阶段
Apache在本阶段的主要工作:根据配置文件检查是否允许访问请求的资源。Apache的标准逻辑实现了允许和拒绝指令。mod_authz_host就是利用这个阶段工作的。
5.Authentication阶段
Apache在本阶段的主要工作:按照配置文件设定的策略对用户进行认证,并设定用户名区域。模块可以在这阶段插入钩子,实现一个认证方法。
6.Authorization阶段
Apache在本阶段的主要工作:根据配置文件检查是否允许认证过的用户执行请求的操作。模块可以在这阶段插入钩子,实现一个用户权限管理的方法。
7.MIME Type Checking阶段
Apache在本阶段的主要工作:根据请求资源的MIME类型的相关规则,判定将要使用的内容处理函数。标准模块mod_negotiation和mod_mime实现了这个钩子。
8.FixUp阶段
这是一个通用的阶段,允许模块在内容生成器之前,运行任何必要的处理流程。和Post-Read-Request类似,这是一个能够捕获任何信息的钩子,也是最常使用的钩子。
9.Response阶段
Apache在本阶段的主要工作:生成返回客户端的内容,负责给客户端发送一个恰当的回复。这个阶段是整个处理流程的核心部分。
10.Logging阶段
Apache在本阶段的主要工作:在回复已经发送给客户端之后记录事务。模块可能修改或者替换Apache的标准日志记录。
11.CleanUp阶段
Apache在本阶段的主要工作:清理本次请求事务处理完成之后遗留的环境,比如文件、目录的处理或者Socket的关闭等等,这是Apache一次请求处理的最后一个阶段。