当前位置:网站首页>安全基础8 ---XSS
安全基础8 ---XSS
2022-08-03 20:58:00 【抱小猫】
目录
XSS---跨站脚本攻击
产生原因
对用户的输入没有过滤,用户提交的数据中有恶意代码被输入到服务器
分类
- 反射型XSS:危害不大,不持久,只能运行一次,不会进入数据库,仅在前端页面做弹窗窗口
- DOM型XSS:特殊的反射型XSS,危害较小
- 存储型XSS:危害最大,能进入数据库,可以多次执行(危害:可以获取后台地址、管理员的cookies)(产生原因:没有对js标签做过滤)
危害(作用点的不同而不同)
- 盗取被攻击者的 cookie 值,进行身份冒充
- 网页篡改---js 中某些函数可以获取并且重新复制 HTML 的标签值
- 删除页面---通过改变页面的某些值(如:将值改为空值)将页面删除
- 流量劫持---如:小网页增大流量的方式:1.正常操作---引流----送钱、打广告、 2.非常规(违法行为)---利用 XSS 漏洞自动请求流量较 小的网站或在其他网站上添加二维码
- 钓鱼网站
- 配合 CSRF 攻击---ajax、window.location
防御手段
- 将关键字进行过滤
- 将特殊字符转换成字符串-->实体化编码
XSS paylaod
测试网站:http://test.attacker-domain.com/browserparsing/tests.html
1、
<a href="%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29"></a>
没有编码成功 (解码顺序:先 实体编码-->Unicode-->js中的Unicode编码)
原因:没有实体编码-->进行Unicode编码,但是协议不能Unicode编码,URL规定协议、用户名、密码都必须是ASCII,否则识别不了
2、
<a href="javascript:%61%6c%65%72%74%28%32%29">Click me</a>
成功:先进行实体解码 --> href中为URL,URL模块可以实别为JavaScript协议,进行URL解码 --> JS模块处理后执行
3、
<a href="javascript%3aalert(3)">Click me</a>
失败:编码了协议,Unicode编码识别不了协议,所以弹窗失败
4、
<div><img src=x onerror=alert(4)></div>
<img src=x onerror=alert(4)>
失败,img标签在正常状态下可以解析,为什么img标签解析不了?
原因:是解析器在解析这个字符引用后不会转换到"标签开始状态"。正因为如此,就不会建立新标签。因此,我们能够利用字符实体编码这个行为来转义用户输入的数据从而确保用户输入的数据只能被解析成"数据"。标签没有进入开始状态,弹窗就不会出来
5、
<textarea><script>alert(5)</script></textarea>
可以解析,标签没有进入开始状态
6、
<textarea><script>alert(6)</script></textarea>
原因:<title>和<textarea>标签中的字符引用会被HTML解析器解码。在解析这些字符引用的过程中不会进入“标签开始状态"。 <textarea>不能执行脚本,只能容纳文本或字符引用
7、
<button onclick="confirm('7');">Button</button>
成功执行,先解析实体编码,onclick中属性值会被HTML解码,识别成功后执行
8、
<button onclick="confirm('8\u0027);">Button</button>
失败原因:使用js编码,js编码可以容纳Unicode编码,但是在js中不能编码符号(如:括号、等号.......)
9、
<script>alert(9);</script>
没有弹窗原因:编码了alert,<script>标签中属于原始文本,但是原始文本只能容纳文本,没有字符引用,无法执行
10、
<script>\u0061\u006c\u0065\u0072\u0074(10);</script>
成功,利用js中的Unicode编码,但是仅编码了字符,可以成功
11、
<script>\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0031\u0029</script>
失败,利用js中的Unicode编码了括号
12、
<script>\u0061\u006c\u0065\u0072\u0074(\u0031\u0032)</script>
失败,js运行时,里面有字符串需要使用引号包裹起来才能运行,js中使用Unicode编码数字时解码后成为字符串,所以需要引号包裹。
13、
<script>alert('13\u0027)</script>
失败,利用js中的Unicode编码了符号
14、
<script>alert('14\u000a')</script>
成功,编码没问题,都存在
15、
<a href="javascript:%5c%75%30%30&# x25;36%31%5c%75%30%30%36%63% 5;c%75%30%30%36%35%5c%75%30 %30%37%32%5c%75%30%30%37%&# x33;4(15)">Click me</a>
成功,先用HTML实体解码 --> JavaScript:头部出来 --> 由href中url模块解码 --> 识别js协议--> js模块处理 --> 最后解码
注意
- HTML官网:w3c.org
- 解码顺序:先 实体编码 --> Unicode --> js中的Unicode编码
- <textarea>和<title>下不会有脚本能够执行,只能容纳文本或字符引用。无需进行测试
- div 、href等属性元素会有HTML解码操作
- URL规定协议、用户名、密码都必须是ASCII
- JavaScript会对字符串和标识符Unicode解码
HTML实体编码
HTML 实体是一段以连字号(&
)开头、以分号(;
)结尾的文本(字符串)。实体常常用于显示保留字符(这些字符会被解析为 HTML 代码)和不可见的字符(如“不换行空格”)
- 不可分的空格:
<
(小于符号):<
>
(大于符号):>
&
(与符号):&
″
(双引号):"
'
(单引号):''
(版权符号)
©
边栏推荐
猜你喜欢
随机推荐
为什么 BI 软件都搞不定关联分析
Orcad Capture Cadence 新建原理图多部分smybol和Homogeneous、Heterogeneous类型介绍教程
Abs (), fabs () and LABS ()
leetcode 1837. The sum of the digits in the K-base representation
YARN功能介绍、交互流程及调度策略
CheckBox列表项选中动画js特效
检测和控制影子IT的五个步骤
小朋友学C语言(3):整数、浮点数、字符
好朋友离职了,一周面试了20多场,我直呼内行
9月1日起我国给予多哥等16国98%税目产品零关税待遇
LeetCode_Digit Statistics_Medium_400. Nth Digit
Power button 206 - reverse list - the list
if _name_ == “__main__“:NameError: name ‘_name_‘ is not defined
ES、Kibana 8.0安装
【HiFlow】经常忘记签到怎么办?使用腾讯云场景连接器每天提醒你。
收藏-即时通讯(IM)开源项目OpenIM-功能手册
leetcode 231. Powers of 2
leetcode 136. Numbers that appear only once (XOR!!)
华为设备配置VRRP与BFD联动实现快速切换
Often forget HiFlow 】 【 check-in?Use tencent cloud scenario connector to remind you every day.