XSS跨站脚本漏洞 初学

0x00 概述

XSS是指攻击者在网页中嵌入客户端脚本,通常是JavaScript编写的恶意代码,当用户使用浏览器浏览被嵌入恶意代码的网页时,恶意代码将会在用户的浏览器上执行。
XSS属于客户端攻击,但网站管理人员也属于用户之一,这就说明XSS可以攻击“服务器端”

0x01 XSS原理解析

XSS攻击是在网页中嵌入客户端恶意脚本代码,这些恶意代码一般使用JavaScript语言编写,因此JavaScript能力越强,XSS的威力越大。攻击者所需要的就是向Web页面中注入JavaScript代码

0x02 XSS类型

XSS主要分为三类:反射型、存储型和DOM型

反射型XSS

也叫作非持久性XSS,当用户访问一次带有XSS代码的URL请求时,浏览器解析这段代码,造成XSS漏洞。可以用于获取Cookie等

存储型XSS

又称为持久性XSS,允许用户存储数据的Web应用程序都可能会出现存储型XSS漏洞,当攻击者提交一段XSS代码后,被服务器端接收并存储,当攻击者再次访问某个页面时,这段XSS代码被程序读出来响应给浏览器,造成XSS攻击

DOM XSS

DOM

DOM(Document Object Model),即文档对象模型,通常在HTML、XHTML、XML,使用DOM可以允许程序和脚本动态地访问和更新文档的内容、结构和样式
DOM为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构。
DOM的规定:

  • 整个文档是一个文档节点
  • 每个HTML标签是一个元素节点
  • 包含在HTML元素中的文本是文本节点
  • 每一个HTML属性是一个属性节点
  • 节点与节点之间都有等级关系
    XSS跨站脚本漏洞 初学
DOM XSS

基于DOM型的XSS是不需要与服务器端交互的,它只发生在客户端处理数据阶段

【目前还没有理解DOM型XSS与反射型的差别】

0x03 检测XSS

手工检测

在手工检测时,一定要选测有特殊意义的字符,这样可以快速测试是否存在XSS,而不要直接输入XSS跨站语句测试,应该一步一步地进行。

可得知输出位置

输入一些敏感字符比如“<、>、()”等,提交申请后查看HTML源代码,看看是否被转义,为了方便查找这些字符可以用“AAAAA<>”字符串,便于查找

无法得知输出位置

有很多Web应用程序源代码是不对外公开的,这时在测试XSS时就有可能无法看到输出数据,对于这种情况,通常采取“/>XSS Test”闭合标签来测试

自动检测

APPSCAN、WEVS、Burp Suite等都可以检测XSS漏洞
XSSER、XSSF都是专业XSS扫描工具