当前位置:网站首页>复现20字符短域名绕过以及xss相关知识点
复现20字符短域名绕过以及xss相关知识点
2022-07-29 03:10:00 【鸡哥yyds】
HTML实体编码介绍
在XHTML中,这些保留字符出现在标签里会立刻报错,但是HTML解析器太懒了,容错性大,并不会出现语法报错
要想安全的使用<,&,>,"等字符,就需要使用一套实体编码(entity encoding)的简单编码策略
这套HTML实体编码策略是以&符号开头,以;分号结尾的
在XML中只有少数几个这种编码,而在HTML中,存在数百个这种实体编码,并且常用的浏览器都支持这种用法
HTML编码有以下几种方式
HTML实体编码,格式 以&符号开头,以;分号结尾的
HTML实体编码参考手册
<textarea name="" id="textarea" cols="30" rows="10">
<img src="localhost">
</textarea>
结果是:
<img src="localhost">
十进制的ASCLL编码,格式: 以符号&#开头,分号;结尾
ascll编码对照表
<textarea name="" id="textarea" cols="30" rows="10">
<img src="localhost">
</textarea>
结果是:
<img src="localhost">
Unicode字符编码,格式: 以符号&#开头,分号;结尾
另外,下面的unicode编码参考表的数字对应的是十六进制的,但是我们需要先转换为十进制再显示!
unicode编码参考
首先把0022转换为十进制是0034;003D转换为十进制是0061
<textarea name="" id="textarea" cols="30" rows="10">
<img src="localhost">
</textarea>
结果是:
<img src="localhost">
十六进制的ascll码,格式: 以&#x开头,分号;结尾
参考上面的ascll表,但是注意需要先转换为十六进制。
<textarea name="" id="textarea" cols="30" rows="10">
<img src="localhost">
</textarea>
结果是:
<img src="localhost">
最后综合几种写法看看
<textarea name="" id="textarea" cols="30" rows="10">
<@!<>
</textarea>
最后在textarea中显示
<@!<>
也就是<被解析为"<“;@被解析为”@“;!被解析为”!“;<被解析为”<“;>被解析为”>"
HTML实体编码使用
使用在标签的双引号内部
HTML实体编码不可用于javascript
HTML实体编码的范围是HTML文档,不包括javscript执行环境,因为javascript执行环境的解析器不是HTML解析器!
接下来看个代码
document.write('<img src=@ οnerrοr=alert(123) />') // <img [email protected] οnerrοr=alert(123) />
console.log('<img src=@ οnerrοr=alert(123) />') // <img [email protected] οnerrοr=alert(123) />
console.log('\<img [email protected] οnerrοr=alert(123) \/\>') // <img [email protected] οnerrοr=alert(123) />_
- document.write由于最后的字符串被输出到html页面,所以还是会被html实体解码为对应标签
2. 由于只是在js环境中打印,所以最后没有进行html实体编码,字符串不变
3. 由于js的自解码机制会对纯转义字符添加反斜号,所以最后被解析为没有反斜号的形式
URL解析
URL解析器也是一个状态机模型,从输入流中进来的字符可以引导URL解析器转换到不同的状态;
URL资源类型必须是ASCII字母,不然就会进入“无类型”状态。简单来说就是不可以将协议也写成编码;并且在URL编码过程中使用utf-8编码类型来编码每一个字符,如果尝试将URL连接做了其他编码类型的编码,URL解析器就不会正确识别。
JavaScript解析
JavaScript解析过程与HTML解析过程有点不一样。JavaScript语言是一门内容关于语言无关的语言。
像\uXXXX一样的字符被称作Unicode转义序列。可以将转义序列分为3个部分:分别是:
字符串中:当Unicode转义序列存在再字符串中的时候,他只会被解释为正规字符,而不是单引号,双引号等一些其他能够打破字符串上下文的字符。
标识符名称:他会被解码解释为标识符名称的一部分。
Unicode转义序列中也被允许用在表示符名称,被当做名称中的一个字符;但是将符号前置在Unicode转义序列串中不可以作为表示符名称中的字符。并且将Unicode转义序列串放在表示符名称中是非法的。
控制字符:例如单引号、双引号、括号等都不会被解释成控制字符,而被解码并解析为表示符名称或字符串常量。7
所以总结下来就是:Unicode转义序列只有在标识符名称里不会被当做字符串,而且争优在标识符名称里的编码字符能够被正常的解析。
从 XSS Payload 学习浏览器解码
(1)
<a href="%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29"></a>
这里采用URL编码的方式将javascript:alert(1)转成了上面的样子
(2)
<a href="javascript:%61%6c%65%72%74%28%32%29">
先HTML解码在进行URL解码
<a href="javascript:alert(2)">
(3)
<a href="javascript%3aalert(3)"></a>
和之前的一样使用URL编码
(4)
<div><img src=x οnerrοr=alert(4)></div>
这里包含了HTML编码内容,反过来以开发者的角度思考,HTML编码就是为了显示这些特殊字符,而不干扰正常的DOM解析,所以这里面的内容不会变成一个img元素,也不会被执行.
(5)
<textarea><script>alert(5)</script></textarea>
<
是RCDATA元素(RCDATA elements),可以容纳文本和字符引用,注意不能容纳其他元素,HTML解码得到于是直接显示RCDATA元素(RCDATA elements)包括textarea和title,所以不会弹窗(6)
<textarea><script>alert(6)</script></textarea>
和第五个一样,textarea和title里会有HTML解码操作,但不会有子元素,所以不会弹窗
(7)
<button onclick="confirm('7');">Button</button>
这里onclick中为标签的属性值(类比2中的href),会被HTML解码,得到
<button onclick="confirm('7');">Button</button>
(8)
<button onclick="confirm('8\u0027);">Button</button>
onclick中的值会交给JS处理,在JS中只有字符串和标识符能用Unicode表示,也不能编码符号,'显然不行,JS执行失败,所以不会弹窗
(9)
<script>alert(9)</script>
script属于原始文本元素(Raw text elements),只可以容纳文本,注意没有字符引用,于是直接由JS处理,这里全部到作文本,,JS也认不出来,执行失败,所以不能弹窗
原始文本元素(Raw text elements)有
(10)
<script>\u0061\u006c\u0065\u0072\u0074(10);</script>
和上面第二个一样,函数名alert属于标识符,没有编码符号编码的字符,直接被JS执行,所以可以弹窗
(11)
<script>\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0031\u0029</script>
在JS中只有字符串和标识符能用Unicode表示,这个编码了符号,JS执行失败,不能弹窗
(12)
<script>\u0061\u006c\u0065\u0072\u0074(\u0031\u0032)</script>
这里看似将没毛病,但是这里\u0031\u0032在解码的时候会被解码为字符串12,注意是字符串,不是数字,文字显然是需要引号的,JS执行失败
(13)
<script>alert('13\u0027)</script>
编码的 ‘ 是个符号,所以无法弹窗
(14)
<script>alert('14\u000a')</script>
\u000a在JavaScript里是换行,就是\n,虽然换行了,但是引号都在,没有被编码,能直接执行,所以可以弹窗
(15)
<a
href="javascript:%5c%75%30%30%36%31%5c%75%30%30%36%63%5c%75%30%30%36%35%5c%75%30%30%37%32%5c%75%30%30%37%34(15)"></a>
先用HTML解码和URL解码
javascript:\u0061\u006c\u0065\u0072\u0074(15)
识别JS协议,然后由JS模块处理,解码得到
javascript:alert(15)
总结
<script>和<style>数据只能有文本,不会有HTML解码和URL解码操作
<textarea>和<title>里会有HTML解码操作,但不会有子元素
其他元素数据(如div)和元素属性数据(如href)中会有HTML解码操作
部分属性(如href)会有URL解码操作,但URL中的协议需为ASCII
JavaScript会对字符串和标识符Unicode解码
3.本机搭建galleryCMS的服务器
打开PHPstudy,将galleryCMS文件放入根文件下,并修改配置文件
打开数据库,添加数据库galleryCMS到浏览器刷新一下,进入galleryCMS网页
我们在源码中把限制长度改成35
虽然xss-clean过滤了很多标签,但是他还没有过滤掉< svg >标签,所以我们使用< svg>标签进行一个测试。
发现我们添加成功,所以我们用svg标签来进行绕过,接下来就是解决字符的长短问题
我们能看到就这些已经29个字符了,所以我们只能通过修改域名长度,通过一个字符来代替三个字符,用来实现短域名绕过。
℠ expands to sm
㏛ expands to sr
st expands to st
㎭ expands to rad
℡ expands to tel
ff expands to ff
当我在kali上准备安装一下beef-xss的时候,安装的时候总是发生错误,我也试着尝试过使用apt-get update更新
但更新速度太太太太太太太慢了,然后我就放弃了。。。。。。
边栏推荐
- C traps and defects Chapter 3 semantic "traps" 3.2 pointers to non arrays
- 服务器运行管理制度
- "PHP Basics" output approximate value of PI
- Algorithm --- paint the house (kotlin)
- 三子棋(玩家+电脑)
- C陷阱与缺陷 第3章 语义“陷阱” 3.7 求值顺序
- VASP calculation task error: M_ divide:can not subdivide 8 nodes by 6
- cuda-gdb提示:/tmp/tmpxft_***.cudafe1.stub.c: No such file or directory.
- R language error: compilation failed for package '****‘
- 力扣刷题之分数加减运算(每日一题7/27)
猜你喜欢
Alibaba Sentinel - 工作流程及原理解析
Verilog的时间系统任务----$time、$stime、$realtime
Learn more than 4000 words, understand the problem of this pointing in JS, and handwrite to realize call, apply and bind
cuda-gdb提示:/tmp/tmpxft_***.cudafe1.stub.c: No such file or directory.
【C】 Array
Chapter 2 VRP command line
MYCAT read / write separation configuration
Analysis of concepts and terms in data warehouse
Let's talk about the summary of single merchant function modules
SOA(面向服务架构)是什么?
随机推荐
「PHP基础知识」输出圆周率的近似值
Learn more than 4000 words, understand the problem of this pointing in JS, and handwrite to realize call, apply and bind
西瓜书学习第六章---SVM
Navicat new database
Incremental real-time disaster recovery notes
Typescript学习(一)
国产ERP有没有机会击败SAP ?
Data truncation and estimation
Summary of common hooks
C#从网址异步获得json格式的数据
Flask creation process day05-06 creation project
Confusion matrix learning notes
会议OA之反馈功能
Verilog:阻塞赋值和非阻塞赋值
MySQL operation database data error: fatal error encoded during command execution
C陷阱与缺陷 第3章 语义“陷阱” 3.1 指针与数组
从零开始实现lmax-Disruptor队列(六)Disruptor 解决伪共享、消费者优雅停止实现原理解析
HTB-Blocky
C traps and defects Chapter 2 syntax "traps" 2.6 problems caused by "hanging" else
C陷阱与缺陷 第3章 语义“陷阱” 3.4 避免“举偶法”