Web漏洞-XSS理论和靶场小试牛刀(一)

★★实战前置声明★★
文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。

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】》

热门相关:茅山神婿   星界游民   星界游民   韩娱之影帝   绍宋