专栏首页一名白帽的成长史【XSS漏洞】浅析XSS脚本注入点

【XSS漏洞】浅析XSS脚本注入点

Hello,各位小伙伴,依旧是晚上好~~

今天跟大家分享的课题是,当我们进行XSS脚本注入时,在不同的注入点进行注入,会产生不同的结果,那么这到底是为什么呢?不同节点,我们又该用什么针对性的插入方法呢?

且听我细细道来~

Part.1

HTML标签之间

情况一:

对于大多数HTML标签而言,如果插入点就在标签之间,那么是可以直接运行js脚本的,如下:

此处我们可以直接插入js脚本,如:

<script>alert(1)</script>,插入后代码如下:

不过这种情况应该比较少见,大多数开发者都会对前端代码进行优化,避免出现这么直白的漏洞点。

情况二:

对于<title>标签,会对标签之间的内容进行htmlencode编码,使其转码为实体编码,无法作为js代码执行,如下:

我们依旧直接注入js脚本,例如

<script>alert(1)</script>,插入后代码如下:

会出现js代码正常显示,但并不会执行的情况:

面对这种情况,我们是不是就无法插入了呢?

既然<title>标签不行,那么我们可以把<title>标签给闭合了,插入</title><script>alert(1)</script>,此时可以成功执行js脚本,插入后代码如下:

以下标签均包含htmlEncode功能,在插入js代码时,我们需要注意关闭标签。

Part.2

HTML标签之内

情况一:

插入点在value值内,如下:

这种情况下,js代码也是无法执行的,我们需要让js代码跳出value值,并且想办法执行。

方法一:闭合value属性,并使用onmouseover这种可以直接执行js代码的属性。插入 " onmouseover=alert(1),插入后代码如下:

当我们将鼠标移动到输入框时,js代码就会执行:

方法二:闭合value属性,同时也闭合标签,插入

"><script>alert(1)</script>,插入后代码如下:

那么以上两种方法,哪种更好呢?

方法一需要鼠标覆盖才能执行,但方法二<script>标签更容易被过滤。

情况二

当type类型在前,且为hidden型时,如下:

这种情况,就无法使用onmouseover的方法了,因为整个input标签的内容都无法显示。

但我们依然可以使用关闭标签的方法,插入

"><script>alert(1)</script>,插入后代码如下:

当type类型在value后,为hidden时,如下:

HTML代码有一个特性,当标签中存在两个type属性时,第二个type属性就会失效,因此我们只要插入一个type="text",问题就容易解决了。

插入" onmouseover=alert(1) type="text 即可:

又或者插入:" /><script>alert(1)</script>

Part.3

可执行js代码的情况

情况一:

在src/href/action等属性内

以上属性可以直接执行JavaScript伪协议,因此我们可以直接输入:JavaScript:alert(1)

在on*事件内:

可直接输入alert(1),如下:

情况二:

插入点在JavaScript代码中:

我们可以直接闭合掉<script>标签,输入如下:

</script><script>alert(1)</script>//

当然也可以输入";alert(1)// 仅仅闭合a属性。

Peace !

本文分享自微信公众号 - 一名白帽的成长史(monster-liuzhi),作者:Monster刘智

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【XSS漏洞】一步步教你通关DVWA

    今天小编初步学习了一下XSS漏洞,顺带打通了DVWA平台上的几道XSS漏洞题,本着学习的精神,在此跟大家分享一下这几题的解法,感兴趣的同学就跟着我一起往下看吧。

    一名白帽的成长史
  • SqlMap 工具初识

    ------------------------------------------------------------------------

    一名白帽的成长史
  • 【Python】教你一步步编写banner获取脚本

    刚好最近学习了使用python编写banner获取脚本,今天就跟大家一起一步一步再学习一遍吧。

    一名白帽的成长史
  • 2019最新实战!给程序员的7节深度学习必修课,最好还会Python!

    从 2017 年开始,fast.ai 创始人、数据科学家 Jeremy Howard 以每年一迭代的方式更新“针对编程者的深度学习课程”(Practical D...

    AI科技大本营
  • JavaScript第十五弹——ES6(四)数值的扩展

    。好了我们今天来聊聊数值的扩展吧~Math对象的厉害之处,想必大家都已经知晓了,让我们看看ES6中的数值又有了什么新东西吧~

    萌兔IT
  • php常用函数(一)

    parse_url:函数的作用是解析一个URL并返回一个包含其URL组件的关联数组,错误时返回false。例: ? 页面显示效果如下: ? ran...

    benny
  • 这是新手自学编程的开始,程序员入门的诀窍

    虽然学习IT编程技术已经是越来越热了,但是如果作为一个新手程序员想要入门还是很困难的,这里有一些前端程序员总结的程序员入门的好技巧。相对java,C,Pytho...

    企鹅号小编
  • 测试思想-流程规范 软件测试缺陷管理流程

    1.针对不可以重现的缺陷处理建议>>开发找不到原因的情况下,不进行处理,保留bug状态,并留下文字说明 (或者其它,如公司有自主研发的缺陷管理系统情况下),测...

    授客
  • Math.round(11.5)等于多少?Math.round(-11.5)等于多少?

    Math类提供的几个常用的方法就是 Math.ceil(x); Math.floor(x); Math.round(X);Math.random();等等。

    MickyInvQ
  • Js中Math对象

    Math是一个内置对象,它拥有一些数学常数属性和数学函数方法,Math用于Number类型,其不支持BigInt。

    WindrunnerMax

扫码关注云+社区

领取腾讯云代金券