hacker101教学笔记--introduction--the web in depth
hacker101笔记
提前准备:运行java的环境 burp proxy(代理) firefox(浏览器)
xss 可以控制参数,发送JavaScript到服务器,再从服务器反映到浏览器上面
<script>alert(1);</script>
cookie 服务器发送给浏览器的键值对,有效时间
可以设置example.com的子域 为子域添加的cookie只能在该子域及其子域中读取,不能在兄弟姐妹的子域中读取。
e.g. test.example.com 的cookie不能在 test2.example.com中发挥作用, example.com 的cookie可以在foo.test.example.com中发挥作用
cookie两个重要的标志需要知道
secure:cookie只能访问HTTPS页面 HTTPOnly javascript无法读取cookie
服务器在set-cookie头中指示这些标志,set-cookie头首先传递这些标志
如果,从服务器那里传来的是HTTP,没有HTTPOnly,就可以用JavaScript的document.cookie取出来,应用它
HTML目前的解析是HTML5
从安全来说,HTML会被浏览器解析,web应用程序防火墙和其他过滤器解析
如果这些解析存在差异,就往往会带来安全问题,存在利用的漏洞
比如,example.com/vulnerable?name=<script/xss%20src=http://evilsite.com/my.js>
web应用程序上的xss过滤器可能以为script/xss不是脚本,但是Firefox会把它当成HTML执行了,/ 被处理成为空白,从而启用攻击
传统的解析
由于几十年来HTML都很糟糕,浏览器非常善于清除作者之后的代码,而这些条件通常是可以利用的。
1.<script>标签本身将在结束时自动关闭
2.没有闭合的标签会在遇到下一个标签的方括号时自动关闭。
MIME 嗅探
如果它看起来足够像HTML,它将被解析为HTML
这导致了IE 6/7时代的bug,其中包含HTML标签的图像和文本文件将作为HTML执行
encoding 编码嗅探 (主要是旧的浏览器)
如果没有为HTML文档指定编码,浏览器将应用启发式来确定它
如果能够控制浏览器解码文本的方式,则可以更改解析或by pass绕过
比如:在UTF-7文本中放入XSS有效载荷。 +ADw-script+AD4-alert(1);+ADw-/script+AD4-
总之,没有设置好字符集,浏览器根据上下文默认识别出它是UTF-7,按照UTF-7字符集还原它,变成<script>alert(1);</script>
这将通过HTML编码清楚地解析,因为没有“不安全”字符。这就通过上传,绕过了服务器的过滤器,最后到达用户的浏览器
IE8及以下版本,以及许多其他较老的浏览器,将在一个名为UTF-7的页面中看到这一点,并切换解析,使攻击能够成功
同样的事情也会发生在ASCII或utf-8
所以:不管在服务器端还是浏览器端都要始终指定MIME类型,明确好,用什么字符集
同源策略 SOP same-origin policy
浏览器如何限制一些关键的安全功能:
1.您可以通过XMLHttpRequest请求哪些域(ajax)
2.通过单独的框架/窗口访问DOM
同源策略的匹配
SOP的源匹配方式要比cookie严格得多
1.协议必须匹配——没有交叉HTTP/HTTPS的边界
2.端口号必须匹配
3.域名必须完全匹配——没有通配符或子域名遍历
放松SOP
开发人员可以通过更改document.domain文档放松SOP对其通信的控制。在窗口之间发布消息,并使用CORS(跨源资源共享)。
所有这些都为攻击开辟了有趣的途径。
任何人都可以将postMessage调用到IFrame中——有多少页面可以正确验证消息?
千万不要放松SOP,没有任何理由要这样做,这里的设计通常存在问题。
CORS
CORS仍然是非常新的,但启用在一些非常危险的情况下。
从本质上说,您可以将xmlhttprequest创建到源之外的域,但是它们有特殊的头文件来表示请求的来源、添加了哪些自定义头文件,等等。
甚至可以让它传递接收域的cookie,从而允许攻击者潜在地危害登录用户。
这里的安全前景在很大程度上仍有待探索.
**如果看得模棱两可,我建议以后遇到例子再结合起来一起掌握,这里就当知道有这些个东西存在就行了**
跨站点请求伪造 cross-site request forgery CSRF
当攻击者欺骗受害者进入由攻击者控制的页面时,该页面将数据作为受害者提交给目标站点。
它是当今最常见的漏洞之一,并支持许多其他漏洞,即rXSS。
网站变成了受害者,这是令人难以忍受的。
例如:正常的银行转账网站。这里我们有一个表单,允许用户将钱从他们的帐户转移到目标帐户。
来历不明的请求
当服务器从客户机收到这样一个传输请求时,它如何知道请求实际上来自真实的站点?引用头充其量是不可靠的。
在这里,我们可以看到如果用户登录将自动利用转移资金。
我去其他论坛,伪造一个看起来就像是在同一个网站里正常发出的请求,服务器如何验证这个请求是从本站发来的,还是从其他地方发来的?这就是实际的漏洞,如果用户登录了来历不明的请求,资金将被转移。
服务器是否会发出警告,告诉该请求与正常请求有什么不同?(比如交易要在同一个房间进行,结果你去了另一个房间发来一个交易请求,服务器如何判断你在同一个房间里,还是不一样的房间里?)
防御措施
显然,我们需要一种方法让服务器确定请求来自它自己的页面。
减轻这个bug的最好方法是使用CSRF令牌。token
这些是与用户会话相关联的随机令牌,您可以将其嵌入到您生成的每个表单中。
在这里,您可以看到包含安全的随机CSRF令牌的表单。
在这种情况下,它是32个十六进制的半字节 - 充足的随机性,以防止猜测它。
当服务器获得POST请求时,它应检查是否存在CSRF令牌并匹配与用户会话关联的令牌。
请注意,这通常不会帮助您处理GET请求,但应用程序不应该使用GET请求更改状态。
我已经看到许多网站实施“动态CSRF证明形式”。
他们有一个csrf.js文件,它发回的代码大致相当于:$ csrf ='session CSRF token';
在每个页面上,他们都有<script src =“/ csrf.js”>,然后将CSRF令牌从那里进入到表单中。
所以我所要做的就是在我自己的漏洞利用中加入相同的标签
hacker101教学笔记--introduction--the web in depth的更多相关文章
- Linux实战教学笔记06:Linux系统基础优化
第六节 Linux系统基础优化 标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 基础环境 第2章 使用网易163镜像做yum源 默认国外的yum源速度很慢,所以换成国内的. 第一步:先备份 ...
- Linux实战教学笔记02:计算机系统硬件核心知识
标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 互联网企业常见服务器介绍 1.1 互联网公司服务器品牌 - DELL(大多数公司,常用) - HP - IBM(百度在用) 浪潮 联想 航天联 ...
- Linux实战教学笔记01:计算机硬件组成与基本原理
标签(空格分隔): Linux实战教学笔记 第1章 如何学习Linux 要想学好任何一门学问,不仅要眼睛看,耳朵听,还要动手记,勤思考,多交流甚至尝试着去教会别人. 第2章 服务器 2.1 运维的基本 ...
- Linux实战教学笔记08:Linux 文件的属性(下半部分)
第八节 Linux 文件的属性(下半部分) 标签(空格分隔): Linux教学笔记 ---更多相关资料请点我查看 第1章 链接的概念 在linux系统中,链接可分为两种:一种为硬链接(Hard Lin ...
- Linux实战教学笔记21:Rsync数据同步工具
第二十一节 Rsync数据同步工具 标签(空格分隔): Linux实战教学笔记-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载,转载 ...
- Linux实战教学笔记25:自动化运维工具之ansible (一)
第二十五节 ansible之文件的批量分发 标签(空格分隔): Linux实战教学笔记-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转 ...
- Linux实战教学笔记22:企业级NFS网络文件共享服务
目录 第二十二节 企业级NFS网络文件共享服务 第一章 NFS网络文件共享服务 1.1 NFS介绍 1.2 NFS系统原理介绍 1.3 NFS服务端部署环境准备 1.4 NFS server端的设置 ...
- Linux实战教学笔记26:http协议原理
目录 第二十六节 http协议原理 第1章 Web服务基础 1.1 http服务重要基础 1.2 HTTP协议 1.3 HTTP资源 1.4 网站流量度量术语 1.5 www服务软件介绍 1.6 本章 ...
- Linux实战教学笔记19:Linux相关网络知识梳理
第十九节 Linux相关网络知识梳理 标签(空格分隔): Linux实战教学笔记-陈思齐 一,前言 一个运维有时也要和网络打交道,所以具备最基本的网络知识,对一个运维人员来说是必要的.但,对于我们的工 ...
随机推荐
- newgrp - 登录到新的用户组中
总览 (SYNOPSIS) newgrp [ group ] 描述 (DESCRIPTION) Newgrp 改变 调用者 的 用户组标识, 类似于 login(1). 调用者 仍旧 登录 在 系统 ...
- HBase(一)——HBase介绍
HBase介绍 1.关系型数据库与非关系型数据库 (1)关系型数据库 关系型数据库最典型的数据机构是表,由二维表及其之间的联系所组成的一个数据组织 优点: 1.易于维护:都是使用表结构,格 ...
- php内置函数分析array_count_values()
PHP_FUNCTION(array_count_values) { zval *input, /* Input array */ *entry, /* An entry in the input a ...
- bzoj5017 [Snoi2017]炸弹 (线段树优化建图+)tarjan 缩点+拓扑排序
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5017 题解 这个题目方法挺多的. 线段树优化建图 线段树优化建图的做法应该挺显然的,一个炸弹能 ...
- 数据结构--排序--快排and冒泡(python)
听说大厂面试,限时两分钟写出来快排... 闲着没事,写了一下... def Partition(L,low,high): pivotkey = L[low] while low<high: wh ...
- jq 获取各个元素的宽度高度的方法
JS获取各种宽度.高度的简单介绍: scrollHeight: 获取对象的滚动高度. scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离 scrollTop:设置或获 ...
- mysql DELETE语句 语法
mysql DELETE语句 语法 作用:用于删除表中的行.广东大理石构件 语法:DELETE FROM 表名称 WHERE 列名称 = 值 mysql DELETE语句 示例 //删除person表 ...
- Java——开发环境配置
[1]JDK的安装与卸载 (1)卸载程序 控制面板--添加或删除程序--J2SE Development Kit和J2SE Runtime Envioroment--删除 (2)安装程 ...
- Java——package与import
[package] <1>为了解决类的命名冲突问题,Java引入包(package)机制,提供类的多重类命名空间. <2>package作为源文件的第一条语句(缺省时指定为 ...
- 洛谷P1199 三国游戏——题解
题目传送 显然,在这样的数据范围下搜索是没希望的了.好好分析一下,发现小涵时不可能拿到与一个武将最默契的另一个武将了.所以考虑一下默契值次大的一对武将. 显然,对每一个武将来说,小涵是可以拿到默契值次 ...