网络安全之XSS基础

从 XSS Payload 学习浏览器解码

xss payload

1.<a href="%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29">1</a>

2.<a href="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:%61%6c%65%72%74%28%32%29">2</a>

3.<a href="javascript%3aalert(3)">3</a>

4.<div>&#60;img src=x οnerrοr=alert(4)&#62;</div>

5.<textarea>&#60;script&#62;alert(5)&#60;/script&#62;</textarea>

6.<textarea><script>alert(6)</script></textarea>

7.<button οnclick="confirm('7&#39);">Button</button>

8.<button οnclick="confirm('8\u0027);">Button</button>

9.<script>&#97;&#108;&#101;&#114;&#116&#40;&#57;&#41;&#59</script>

10.<script>\u0061\u006c\u0065\u0072\u0074(10);</script>

11.<script>\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0031\u0029</script>

12.<script>\u0061\u006c\u0065\u0072\u0074(\u0031\u0032)</script>

13.<script>alert('13\u0027)</script>

14.<script>alert('14\u000a')</script>

15.<a href="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x33;&#x31;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x36;&#x33;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x33;&#x35;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x37;&#x25;&#x33;&#x32;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x37;&#x25;&#x33;&#x34;&#x28;&#x31;&#x35;&#x29;">15</a>

基础部分(前六个)

第一个,很明显没有执行

原因是编码部分是URL encoded "javascript:alert(1)",里面没有HTML编码内容,不考虑,其中href内部是URL,于是直接丢给URL模块处理,但是协议无法识别(即被编码的javascript:),解码失败,不会被执行。

URL规定协议,用户名,密码都必须是ASCII,所以编码就无效。

第二个,经过用户交互之后是可以实现的

解析流程:

先HTML解码,得到<a href="javascript:%61%6c%65%72%74%28%32%29">,href中为URL,URL模块可识别为javascript协议,进行URL解码,得到<a href="javascript:alert(2)">,由于是javascript协议,解码完给JS模块处理,于是被执行

第三个,经过测试,也是不行的

原因是编码部分是URL encoded `:`,里面没有HTML编码内容,不考虑,其中href内部是URL,于是直接丢给URL模块处理,但是协议无法识别,解码失败,不会被执行。

第四个,经过测试,也是不成功的

原因是这里对<>进行了实体编码,这里包含了HTML编码内容,反过来以开发者的角度思考,HTML编码就是为了显示这些特殊字符,而不干扰正常的DOM解析,所以这里面的内容不会变成一个img元素,也不会被执行。从HTML解析机制看,在读取<div>之后进入数据状态,<会被HTML解码,但不会进入标签开始状态,当然也就不会创建img元素,也就不会执行。

第五个,经过交互,也是不能实现的

原因是这里依然是对<>进行了实体编码,而<textarea>是RCDATA元素(RCDATA elements),可以容纳文本和字符引用,注意不能容纳其他元素,HTML解码得到<textarea><script>alert(5)</script></textarea>于是直接显示,RCDATA`元素(RCDATA elements)包括`textarea`和`title`

第六个,经过交互,也是不能实现的

原因是<textarea>是RCDATA元素(RCDATA elements),可以容纳文本和字符引用,注意不能容纳其他元素,HTML解码得到<textarea><script>alert(5)</script></textarea>于是直接显示

高级部分

第七个,经过交互测试,是可以的

原因是,这里对 ` ' `进行了实体编码,这里onclick中为标签的属性值(类比2中的href),会被HTML解码,得到<button οnclick="confirm('7');">Button</button>然后被执行。

第八个,经过交互,是不可以的

原因是onclick中的值会交给JS处理,在JS中只有字符串和标识符能用Unicode表示,'显然不行,JS执行失败

第九个,也是不行的

原因是script属于原始文本元素(Raw text elements),只可以容纳文本,注意没有字符引用,于是直接由JS处理,JS也认不出来,执行失败。原始文本元素(Raw text elements)有<script>和<style>

第十个,经过测试是可以的

原因是函数名alert属于标识符,直接被JS执行

第十一个,经过测试,是不可以的

原因是在JS中只有字符串和标识符能用Unicode表示

第十二个,经过测试,也是不可以的

原因是这里\u0031\u0032在解码的时候会被解码为字符串12,注意是字符串,不是数字,文字显然是需要引号的,JS执行失败。

第十三个,经过测试是不可以的

原因是在JS中只有字符串和标识符能用Unicode表示,'显然不行,JS执行失败

第十四个,经过测试是可以的

原因是\u000a在JavaScript里是换行,就是\n,直接执行,相当于在源码里直接按一下回车键,后面的代码都换行了,这个无关紧要。

第十五个,经过交互,是可以的

原因是首先进行html实体解码得到<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)">15</a>,然后在href中由URL模块处理,解码得到<a href="javascript:\u0061\u006c\u0065\u0072\u0074(15)">15</a>,最后经过Unicode解码得到<a href="javascript:alert(15)">15</a>,交互后可执行。

相关推荐
AltmanChan2 分钟前
大语言模型安全威胁
人工智能·安全·语言模型
马船长13 分钟前
红帆OA iorepsavexml.aspx文件上传漏洞
安全
hikktn8 小时前
如何在 Rust 中实现内存安全:与 C/C++ 的对比分析
c语言·安全·rust
23zhgjx-NanKon9 小时前
华为eNSP:QinQ
网络·安全·华为
23zhgjx-NanKon9 小时前
华为eNSP:mux-vlan
网络·安全·华为
昔我往昔10 小时前
阿里云文本内容安全处理
安全·阿里云·云计算
棱角~~12 小时前
盘点和嗨格式一样好用的10款数据恢复!!
数据库·经验分享·安全·电脑·学习方法
NETFARMER运营坛13 小时前
如何优化 B2B 转化率?这些步骤你不可不知
大数据·安全·阿里云·ai·ai写作
安徽京准13 小时前
京准时钟:无人机卫星信号安全防护隔离装置
安全·无人机·信号安全防护装置·卫星安全隔离装置·北斗授时安全隔离·北斗对时防护隔离装置
mingzhi6114 小时前
渗透测试-快速获取目标中存在的漏洞(小白版)
安全·web安全·面试·职场和发展