★★实战前置声明★★
文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。
1、简单了解HTML和JS基础
想要知道怎么XSS攻击,是需要了解一些HTML和JS基础知识点的,不然后面一些脚本注入会不清楚。HTML全称HyperText Markup Language超文本标记语言,HTML文档也可以叫做web页面,主要功能是实现页面跳转,显示数据。
1.1、HTML结构标准
<!doctype html> //声明文档类型,由渲染引擎解析
<html> //根标签
<head> //头部标签
<title></title> //标题标签 ,位于页面最上方定义浏览器工具栏中的标题
</head>
<body> // 主体标签,给用户、浏览者看
<!-- 在此处写注释 -->
</body>
</html>
层级关系说明
<head> </head>和<body> </body>为并列关系
<head> </head>和<title> </title> 为嵌套关系
1.2、HTML标签
HTML标签是HTML语言中最基本的单位,也是最重要的组成部分。 标签大小写无关,但推荐使用小写。标签可分为单标签(比如<br/>
)和双标签(比如<h1></h1>
)。
常见的单标签:
<br/> // 换行
<hr/> //水平分隔线
<img /> //图片标签
<input /> //输入标签
<meta /> //HTML文档的元数据,机器可读,如<meta charset=UTF-8”/
常见的双标签:
<html></html>
<head></head>
<title></title>
<body></body>
<h1></h1> //大标题
<p></p> //段落标签
<div></div> //块标签,对内容样式控制、实现布局效果
<a></a> // <a href="https://www.baidu.com">百度</a>
<ul></ul> //列表标签
<form></form> //表单标签,用于用户输入创建HTML表单,向服务器传输数据
<select></select> //选项标签
1.3、JS(JavaScript)
JavaScript是一种直译式的脚本语言、是一种动态类型、弱类型、基于原型的语言,内置支持类型。它可以将文本动态放入HTML页面、读写HTML元素、对事件做出响应、可用来验证用户输入的数据、也可创建Cookies存储访问者计算机中的信息等。
百度百科定义
JavaScript(简称“JS”)是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式、声明式、函数式编程范式。
使用方式有两种
// 写在html的形式
<script> JavaScript的内容(123、'xss')</script>
// 引用文件的形式
<script type="text/javascript" src="js文件的路径" />
常用一些函数举例
<script>alert(1)</script>
<svg onload=alert(1)>
<img src=1 onerror=alert(1)>
<M onmouseover=alert(1)>M
<marquee onscroll=alert(1)>
<a href=javascript:alert(1)>M</a>
<body onload=alert(1)>
<details open ontoggle=alert(1)>
<embed src=javascript:alert(1)
更全面的学习可以到菜鸟教程学习,个人建议非专业前端开发人员快速了解学习就行。
2、XSS简介
XSS全称Cross Site Script,跨站脚本攻击,由于简写CSS与html的css样式重名,简称为XSS。属于web应用中计算机安全漏洞,是恶意的web访问者将脚本植入到提供给用户使用的页面中。一般使用JavaScript编写的危险代码,当用户使用浏览器访问页面时,脚本会被执行,从而达到攻击者目的。本质是恶意代码未经过滤,与网站正常的代码混在一起,浏览器无法分辨哪些脚本是可信的,导致恶意脚本被执行。
2.1、XSS攻击流程
一般包含5个节点:
1、攻击者查找目标网站或Web应用程序,尝试找到可以插入恶意脚本的漏洞点。
2、一旦攻击者找到了潜在的漏洞点,他们将准备好的恶意脚本插入到这些地方。
3、用户访问包含恶意脚本的页面,或者与包含恶意脚本的数据进行交互。
4、用户的浏览器接收到恶意脚本,并执行它。
5、恶意脚本可以执行多种操作,包括窃取用户的会话令牌、cookie、输入的敏感信息,或者将用户重定向到其他恶意网站。
(图片来源于网络)
3、XSS漏洞分类和利用
XSS漏洞可分为3类:反射型(非持续型)、存储型(持续型) 和DOM型。
3.1、反射型(非持续型)
全称:Reflected Cross-site Scripting,也称作非持久型、参数型跨站脚本,主要用于将恶意脚本附加到URL地址参数中。漏洞特征:一次性的、前端执行、不会存储到后端数据库中。危害等级:中。
反射型XSS攻击步骤:
- 攻击者构造出包含恶意代码的URL。
- 用户访问时,恶意代码会被拼接在HTML中返回给浏览器。
- 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行。
- 窃取用户数据并发送到攻击者的网站,或冒充用户的行为执行攻击者指定的操作。
3.2、存储型(持续型)
全称:Stored Cross-site Scripting,攻击者事先将恶意JS代码上传或存储到漏洞服务器,当用户浏览含恶意JS代码的页面就会执行恶意代码,不需要用户单击特定URL就能执行跨站脚本。漏洞特征:持久性、前端执行、储存在后端数据库。危害等级:高。
存储型 XSS 的攻击步骤:
- 攻击者将恶意代码提交到目标网站的数据库中。
- 用户打开目标网站时,网站服务端将恶意代码从数据库取出,拼接在HTML中返回给浏览器。
- 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行
- 窃取用户数据并发送到攻击者的网站,或冒充用户的行为执行攻击者指定的操作。
3.3、DOM型
DOM-based XSS发生在应用程序通过JavaScript操作页面DOM时,未对用户输入进行适当的过滤或转义,导致攻击者可以注入恶意脚本,进而影响其他用户。漏洞特征:一次性、前端执行、不会储存在后端数据库、程序执行不依赖服务器端的数据。危害等级:中。
与前两种类型的XSS区别,漏洞发生原因跟服务器解析无关,只是JS代码读取了URL内容导致,dom-xss取决于输出位置,并不取决于输出环境,因此dom-xss有可能是反射型的,也可能是存储型的。
4、靶场小试牛刀(一)
选择pikachu靶场的Cross-Site Scripting,实验选择反射型xss(get)。本文暂时给出一个攻击示例,其他类型的会有另外一篇分享。
先随便填写提交,看界面展示数据,右击查看页面码数据是回显的,然后根据数据结构确定构建poc提交验证。
测试验证内容
'<>?"&/6666
4.1、正常操作
输入'<>?"&/6666,界面显示如下:
4.2、查看源码
查看源码,发现输入的内容,是填充在p标签内,没有被编码。注意:文本框长度限制20
4.3、确定攻击poc
由于文本框长度限制20,攻击poc可用就变得很少了
<svg onload=alert(1)>
验证成功
5、资料获取
靶场环境搭建请参考《靶场环境搭建【XP、pikachu、dvwa、sqli-labs】》