浅谈xss原理

近日,论坛上面XSS满天飞,各处都可以见到XSS的痕迹,前段时间论坛上面也出现了XSS的迹象。然后我等小菜不是太懂啊,怎么办?没办法只有求助度娘跟谷歌这对情侣了。

可以说小菜也算懂了一些,不敢藏私,故发文出来大家一块学习,讨论。

下面是正文:

0x00:xss的来由

记得之前看过一篇文章,这样来形容XSS “ 如果把浏览器看作WEB2.0后时代的操作系统,那么客户端脚本就相当于传统的应用程序,而XSS的攻击方式其实就相当于在被攻击者的系统上执行了一个木马程序。但这种“木马”有个很大的缺点,就是无法像传统木马那样在操作系统中安家,以后还能自动执行。 ”

这可能是对XSS的最好诠释了吧,但是XSS究竟是什么?下面就跟小菜来一窥其神秘面容吧。

XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。

为什么会出现XSS呢,这个没什么好说的,肯定是过滤不严,或者就是程序猿认为XSS并没有什么实际的用途,从而忽略了XSS攻击的产生。比如在一个搜索框里面,对于输入数据没有一点过滤的话,那么我们提交下面这条语句

<script>alert(’test’)</script>

结果是什么,大家应该都知道,就是页面弹出了一个对话框。

我记得当我刚开始对黑客技术产生兴趣的时候,那是的XSS还仅仅在于娱乐的地步。

0x01:xss的类型

XSS的类型一般是三种:

第一种:反射型XSS

这种xss,跨站代码一般存在于某一个链接中,当呗攻击者访问这样的连接时,跨站代码就被执行,这类跨站代码一般不会存储在服务器上面

第二种:存储型XSS

这种xss用起来比较方便,跨站代码会存储在服务器上面数据库中,换句话就是可以持久的进行攻击,亦称持久型XSS

第三种:就是基于DOM的XSS

这是由于客户端脚本自身的解析不正确导致的安全问题

0x02:反射型XSS的攻击原理

反射型XSS,是最常用,使用最广的一种方式。它通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特有的恶意代码参数被HTML解析、执行。它的特点是非持久化,必须用户点击带有特定参数的链接才能引起。

既然是需要用户点击才能触发的跨站,那么这就要考验你的忽悠水平了,就像前段时间论坛出现的XSS攻击,就是通过转账,然后被攻击者查看消息从而触发的一种反射型XSS攻击

再如:

http://searchb.dangdang.com/?key=f‘,true,1);alert(1);//

这个经常逛乌云的应该都不陌生,这就是一个典型的反射型XSS,需要诱使用户去点击该链接,xss代码并不存储在服务端。所以攻击并不能持续。

常用测试方法:

对整个输入(特别强调的是,整个HTTP请求都是输入,数据库取来的数据其实也是输入。HTTP请求包括GET、POST参数,COOKIE,URL,头部的REFERER等等)中每个地方都可以如下操作,

1.        自己构造一个唯一的串,例如:myxsstestxxxx

2.        将某个输入项(比如某个参数)替换为上面的串

3.        查看HTTP相应中是否有这个串,并记录下来

4.        根据HTML上下文决定,用哪种类型串来尝试,尝试攻击串,然后重新提交请求

5.        如果能够找到相应的攻击串说明漏洞是存在的 这里的关键在于第四步,因为服务器端可能会做一些限制,比如encode或者长度限制,测试的时候需要想办法看看是否能绕过限制。

0x03:存储型XSS的攻击原理

存储型就是攻击脚本被存储到了数据库或者文件中,服务器端(可能是别的应用或者别的页面)在读取了存储的内容后回显了,就是存储型。这种情况用户可能直接打开正常的页面就会看到被注入了

原理其实也很简单

XSS代码被提交给网站-->网站把XSS代码存储进数据库—>当该页面再次被请求时,服务器发送已经被植入XSS代码的数据给客户端—>客户端执行XSS代码

比较常见的例子是在留言板上插入XSS代码,前提当然是留言内容过滤不善

想内容中添加[/code]<script>alert(‘test’)</script>[/code]

这样就会弹出对话框,当然只要是可以添加内容的地方,你都可以试试XSS,比如说QQ空间的装扮里面,有一个自定义模块,你可以选择图片,然后添加如下代码

javascript:alert(‘XSS‘)"

当然,其可以执行的前提是服务端代码是这样写的

A=get[a]

<img src=$a>

利用方法还有很多,比如现在兴起的XSS平台,新建一个项目,你就可以做很多事情

0x04:XSS BASED DOM

DOM—based XSS漏洞是基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM—based
XSS漏洞。

DOM—based XSS攻击源于DOM相关的属性和方法,被插入用于XSS攻击的脚本。一个典型的例子如下:

HTTP请求http://www.Xss.com/hello.html?name=test使用以下的脚本打印出登录用户test的名字,即

<SCRIPT>

var pos=docmnent.URL.indexOf(”name=”)+5;

document.write (document.URL.substring(pos,document.URL.1ength));

< /SCRIPT>

如果这个脚本用于请求http://www.Xss.com/hello.html?name=<script>alert(‘test’)</script>时,就

导致XSS攻击的发生。

当用户点击这个链接,服务器返回包含上面脚本的HTML静态文本,用户浏览器把HTML文本解析成DOM,DOM中的document对象URL属性的值就是当前页而的URL。在脚本被解析时,这个URL属性值的一部分被写入HTML文本,而这部分HTML文本却是JavaScript脚本,这使得<script>alert(‘test’)</script>成为页面最终显示的HTML文本,从而导致DOM—base XSS攻击发生。

0x05: XSS的防范办法

上面简单说了一下各种XSS的原理,以及最简单的利用方法,当然一些高级的XSS利用技巧,这里不会涉及,授人以鱼不如授人以渔嘛。还靠各位去琢磨了。下面我们来简单说一下XSS的防范。

现在的XSS如此流行,原因何在。我想大家应该都知道,就是在输入的时候没有做严格的过滤,而在输出的时候,也没有进行检查,转义,替换等

所以防范的方法就是,不信任任何用户的输入,对每个用户的输入都做严格检查,过滤,在输出的时候,对某些特殊字符进行转义,替换等

0x06:浅谈CSRF攻击

其实之前我一直不知道csrf是什么东西,直到那次phpmywind被搞掂官网,我才注意到这个攻击方法,之后呢,通过度娘,谷歌这一对好情侣,慢慢了了解了一下

CSRF是伪造客户端请求的一种攻击,CSRF的英文全称是Cross Site Request Forgery,字面上的意思是跨站点伪造请求。这种攻击方式是国外的安全人员于2000年提出,国内直到06年初才被关注。

CSRF的定义是强迫受害者的浏览器向一个易受攻击的Web应用程序发送请求,最后达到攻击者所需要的操作行为。

CSRF漏洞的攻击一般分为站内和站外两种类型:

CSRF站内类型的漏洞在一定程度上是由于程序员滥用$_REQUEST类变量造成的,一些敏感的操作本来是要求用户从表单提交发起POST请求传参给程 序,但是由于使用了$_REQUEST等变量,程序也接收GET请求传参,这样就给攻击者使用CSRF攻击创造了条件,一般攻击者只要把预测好的请求参数 放在站内一个贴子或者留言的图片链接里,受害者浏览了这样的页面就会被强迫发起请求。

CSRF站外类型的漏洞其实就是传统意义上的外部提交数据问题,一般程序员会考虑给一些留言评论等的表单加上水印以防止SPAM问题,但是为了用户的体验 性,一些操作可能没有做任何限制,所以攻击者可以先预测好请求的参数,在站外的Web页面里编写javascript脚本伪造文件请求或和自动提交的表单 来实现GET、POST请求,用户在会话状态下点击链接访问站外的Web页面,客户端就被强迫发起请求。

如果,各位看官想详细了解CSRF google it!

这里仅仅是说了一些简单的XSS原理,算一个抛砖引玉吧,各位可以跟帖讨论,如何发挥XSS的最大能力

时间: 2024-10-07 14:40:41

浅谈xss原理的相关文章

浅谈 XSS &amp; CSRF(转)

浅谈 XSS & CSRF 客户端(浏览器)安全 同源策略(Same Origin Policy) 同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性. 如: 不能通过Ajax获取另一个源的数据: JavaScript不能访问页面中iframe加载的跨域资源. 对 http://store.company.com/dir/page.html 同源检测 跨域限制 浏览器中,script.img.iframe.link等标签,可以跨域引用或加载资源. 不同于 XMLHttpReq

我对软件测试行业的个人理解 6 - 浅谈自动化测试原理

   自动化测试是我从进入这个行业开始,听到最多的词汇之一了.大家,特别是手工测试工程师,很多都想了解自动化测试,学习工具,并以此提高自己的收入.今天我不讲工具.而是讲讲这个词背后的原理,为读者从事自动化测试工作打一个理论基础.如果打算从事专职自动化测试工作,不论是你原来是开发人员,还是手工测试人员,都必须了解这个基础.以我实际上的工作中遇到的新人来看,最缺的就是这个理论基础,而工具大家都能学会.我下面用自顶向下的方式来解释自动化测试的原理,从高度抽象讲到具体内容.当然这些只是我的个人理解,整理

浅谈编译原理

什么是编译原理? 编译原理顾名思义,编译就是将源语言(高级程序语言)翻译成等价的目标语言(机器语言即计算机可以识别的语言即0和1或汇编语言)的过程.原理就是研究这一过程的思想方法.理论和技术.从本质上来讲编译是一个算法问题,但由于它的问题相当复杂,导致设计解决这个问题的算法也十分复杂.这里的算法和我们学习的数据结构和算法中的算法有些不同,后者讲述的是基础算法,是解决我们生活中遇到的问题,而编译中的算法则是在人与计算机交流时需要解决的“沟通”问题的算法,比较专注解决一种的算法.编译的过程包括:源程

浅谈xss攻击

近期学习过程中提到xss攻击的问题,便想要了解一下,总结如下: XSS攻击:跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS. 1.什么是XSS攻击: XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中.比如这些代码包括HTML代码和客户端脚本. 2.XSS的危害: 1.盗取各类用户账号,如机器登录帐号.用户网银帐

浅谈 操作系统原理

注 :  文中讲述的原理是推理和探讨 , 和现实中的实现不一定完全相同 . 操作系统 , 主要分为 5 个部分 : 1 进程调度 2 虚拟内存 3 文件系统 4 网络通信 5 设备驱动 进程调度 , 原文地址:https://www.cnblogs.com/KSongKing/p/9495999.html

浅谈搜索引擎原理

http://t.qq.com/nanjingxia7551 http://t.qq.com/p/t/466214001064098 http://t.qq.com/lishuixiaojiebao http://t.qq.com/p/t/441720100016863 http://t.qq.com/wuxixiaojiebaoye http://t.qq.com/p/t/457708060557722 http://t.qq.com/jiangyinxi1705 http://t.qq.co

浅谈 zookeeper 原理,安装和配置

当前云计算流行, 单一机器额的处理能力已经不能满足我们的需求,不得不采用大量的服务集群.服务集群对外提供服务的过程中,有很多的配置需要随时更新,服务间需要协调工作,那么这些信息如何推送到各个节点?并且保证信息的一致性和可靠性?我们知道分布式协调服务很难正确无误地实现, 因为他们很容易在竞争条件和死锁上犯错误.那么zookeeper将是一个不错的选择 Zookeeper是什么? 引用官方的说法:“Zookeeper是一个高性能,分布式的,开源分布式应用协调服务.它提供了简单原始的功能,分布式应用可

浅谈IM软件业务知识——非对称加密,银行U盾的原理

概述 首先了解一下相关概念:RSA算法:1977年由Ron Rivest.Adi Shamirh和LenAdleman发明的,RSA就是取自他们三个人的名字.算法基于一个数论:将两个大素数相乘非常容易,但要对这个乘积的结果进行 因式分解却非常困难,因此可以把乘积公开作为公钥,该算法能够抵抗目前已知的所有密码攻击.RSA算法是一种非对称算法,算法需要一对密钥,使用其中一个 加密,需要使用另外一个才能解密.我们在进行RSA加密通讯时,就把公钥放在客户端,私钥留在服务器. RSA非对称加密算法,可以验

[转] 浅谈 ArrayList 内部原理

转自:浅谈 ArrayList 内部原理 System.Collections.ArrayList 就是我们常说的动态数组,也是我们常用的 "数据类型" 之一.在 MSDN 上是这样表述的:使用大小可按需动态增加的数组实现 IList 接口.我来解释一下,就是:一个可以根据需要动态增加使用大小并可按照索引单独访问的对象的非泛型集合.一般人都认为 ArrayList 就是一个 "纯动态" 的数组,与 <数据结构> 中 "链表" 的原理一