安全漏洞中的倚天剑——XSS跨站脚本攻击

one、概念

XSS跨站脚本攻击(Cross-Site Scripting)就是网站将用户输入的内容输出到页面上,在这个过程中可能有恶意代码被浏览器执行,XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常呼略其危害性。
XSS通常情况可以有两种解释就是它可以是一种攻击方式,或者是一种漏洞。
XSS其实叫CSS,但是由于和另一种网页技术——层叠样式表(Cascading Style Sheets)的缩写一样,为了防止混淆,所以把原本的CSS简称为XSS。
这一漏洞攻击在各种WEB应用安全漏洞中,一直被OWASP(Open Web Application Security Project)组织评为十大应用安全中的其中之一。

XSS一般攻击的是前端(比如盗取其他用户cookie),而不是后端,所以XSS一般需要结合其他漏洞进行挂马。(个人理解)

two、原理

XSS的原理是由于Web应用程序对用户输入过滤不足,这时候攻击者就可以通过这些不足在网页上面注入一些比如盗取cookie,转账等等的JavaScript脚本恶意代码,当用户浏览这些网页时就会执行其中的恶意代码,从而就完成一个的完整的XSS攻击流程。

跨站脚本,就是用户稀里糊涂地执行了攻击者放在网页上的恶意脚本,归根结底就是服务端过于信任客户端提交的数据

在这里由于XSS有分类,所以对XSS原理的解释只是一个比较泛的解释,具体的原理还得需要具体的XSS类型去分析,即在下面博文中。

three、类型

上面说了,XSS只是一个比较泛的概念,具体的攻击漏洞,还得具体分析,一般XSS漏洞有反射型,存储型、DOM型(DOM—based型)。

1、反射型XSS

安全漏洞中的倚天剑——XSS跨站脚本攻击_第1张图片
感觉看上面的图比较难理解,zzzzzz

反射型XSS又叫非持久型XSS,是用户点击到攻击者设置好的恶意网站(一般这种是POST请求才使用)或者是用户访问到攻击者设置好的URL(即可以使用GET请求),在网页返回的内容中出现攻击者设置的XSS脚本代码,并被浏览器解析执行。反射的意思就是XSS攻击脚本被Web服务器反射回来给浏览器解析执行。

在这里我们会发现,反射型XSS由于请求方式不同攻击手法也不同,但原理大同小异,就是都是让客户去触发到这个漏洞点上,返回服务器反射给浏览器并被浏览器解析,这之间服务器他就相当于一个传递者,将恶意代码传递个用户,这一过程看上去就像反射镜反射一样,攻击者将一束光线射给反射镜,反射镜又将这束光反射给用户。

注意:这里是浏览器解析了脚本,而不是服务器

2、存储型XSS

安全漏洞中的倚天剑——XSS跨站脚本攻击_第2张图片
存储型XSS也叫持久性XSS,是攻击者将恶意脚本代码存储到Web服务器中并被解析,客户当访问到这网页时将受到攻击。在这里一定要注意反射型与存储型区别:链接在这里。

这时我们就会发现不管是什么方式请求,

注意:这里是服务器解析了脚本,而不是浏览器

3、DOM型XSS

安全漏洞中的倚天剑——XSS跨站脚本攻击_第3张图片
首先我们需要明白什么是DOM?

DOM(Document Object Model),是一种文档对象模型,DOM通常用于代表在HTML、XHTML和XML中的对象,使用DOM可以允许程序和脚本动态地访问和更新文档的内容、结构和样式,本质就是一种树状的模型。

DOM型XSS是基于DOM文档对象模型的一种漏洞,所以受客户端浏览器的脚本代码所影响,而不是想前面两种会与服务器交互(不是解析,是交互)。

DOM型XSS由于是取决于输出位置,并不取决于输出环境,因此也可以说DOM型XSS既有可能是反射型的,也有可能是存储型的,就是说它的输出点是在DOM位置上。

这个类型有点抽象,说实话自己在了解到这个类型XSS时也是懵逼的很,看了这篇博文,大概懂了个一二:链接

就是说DOM型XSS只在浏览器上有恶意代码才算。

如果对三种类型的XSS还有不了解或者区分不开的读者可以查看这个链接:链接在此

four、危害

个人觉得XSS与SQL注入是漏洞安全中两个必不可少的话题,就像倚天剑和屠龙刀一样,其危害可想而知。

以下是说可能涉及到的危害:

  • 1、盗取各类用户帐号
  • 2、控制网站服务器数据
  • 3、盗窃所属网站公司的商业价值资料
  • 4、非法转账
  • 5、传播XSS跨站脚本蠕虫
  • 6、结合其他漏洞进行综合漏洞攻击
  • 7、提升攻击者权限
  • 8、控制受害者机器向其他网站发起攻击
  • 9、网站挂马

five、XSS攻击流程

攻击流程:

我们来假设一个情景:现在有一个网站,它可能有XSS漏洞,那么攻击流程可以如下:
1、先在文本框或者URL里判断这个输入位是在HTML属性里面还是在属性外面,如果是属性里面,那么我们就需要对其进行闭合猜测,即:>、’>、">等等,并且可以利用未闭合的特点加入事件引发弹窗等现象,如果是在外面,那么进入下一步
2、我们可以使用语句及其变种进行初步测试,如果有结果,那么我们就进入第四步,如果没有结果,那么我们就进入下一步
3、使用特殊的方式方法对XSS防御进行绕过,当绕过成功时进入下一步
4、对网站进行进一步渗透,并结合其他漏洞进行综合渗透
5、整理数据,书写漏洞报告

测试XSS:

  • 检测XSS一般分两种:手工检查、全自动检测

  • 手工检查
    一般使用盲打的方式,就是不知道后台代码,靠自己的经验去猜测,或者使用一些比较敏感的符号'<>"/()
    反正见到输入框或者是URL参数就是加代码。

  • 全自动检测
    检测工具:Appscan、AWVS、BurpSuite。。。

一些常见的脚本代码函数:

<script>alert(/xss/)</script>		alert()方法用于显示带有指定消息和确认按钮的警告框
"><script>alert(/xss/)</script>		对页面属性的闭合操作
document.cookie					显示当前页面的cookie
window.location.hostname		返回Web主机的域名
window.location.pathname 		返回当前页面的路径和文件名
window.location.port			返回Web主机的端口(80或443)
window.location.protocol 		返回所使用的Web协议(http:或https:)
window.location.href   			返回当前显示的文档的完整URL 
onload                  一张页面或一幅图像完成加载
onsubmit              	确认按钮被点击触发
onmousemove				鼠标移动到相应位置触发
onerror                 在加载文档或图像时发生错误

xss-labs-master靶机攻略

攻略地址:链接在此

Six、防御措施

  • 1、对任何用户的输入与输出都采取不信任
  • 2、对特殊符号及特殊语句进行的严格过滤
  • 3、设置黑名单与白名单
  • 4、在开发时开发人员严格设置WEB安全编码规范
  • 5、对cookie进行特殊防御
  • 6、对进行网页编码实体化
  • 7、对Session标记、验证码或者HTTP头的检查

防御措施说白了,就是对任何用户都采取不信任。

后语:我们不是网络上面的破坏者,而是网络世界的维护者,我们是白帽子,也是红帽子!

你可能感兴趣的:(hack)