xss基础

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


提示:以下是本篇文章正文内容,下面案例可供参考

一、xss

1.什么是XSS

xss又叫css,全称跨站脚本攻击。它是指攻击者往web页面或url里插入恶意JavaScript脚本代码且应用程序对用户输入的内容没有过滤,那么当正常用户浏览该页面时,嵌入在web页面的恶意JavaScript脚本代码会被执行,从而达到恶意攻击正常用户的目的。

2.XSS的分类

(1)反射型:非持久型跨站

反射型 XSS 一般可以由攻击者构造带有恶意代码参数的 URL 来实现,在构造的URL 地址被打开后,其中包含的恶意代码参数被浏览器解析和执行。这种攻击的特点是非持久化,必须用户点击包含恶意代码参数的链接时才会触发。
其实说白了就类似于 SQL 注入,只不过一个是针对数据库,一个是针对 HTML

(2)存储型:持久型跨站

嵌入到web页面的恶意HTML会被存储到应用服务器端,简而言之就是会被存储到数据库,等用户在打开页面时,会继续执行恶意代码,能够持续的攻击用户

(3)DOM型:作用于前端

DOM是一个前端的操作接口

为了避免反射型 XSS 攻击,建议采用以下方式进行防御:

	1.对用户的输入进行合理验证(如年龄只能是数字),对特殊字符(如`<、>、'、"`以及 `<script>、javascript` 等进行过滤。

	2.根据数据将要置于 HTML上 下文中的不同位置(HTML 标签、HTML 属性、JavaScript 脚本、	CSS、URL),对所有不可信数据进行恰当的输出编码。

	3.返回参数不要和请求参数一致,对用户输入的参数进行验证,确保没有包含 HTML 或 JS 等代码)

3.从 XSS Payload 学习浏览器解码

1,常见字符
在这里插入图片描述
部分具有特定名称的字符实体
而对于其他没有特定名称的实体来说:
html实体编码:&#十进制 对应符号的Ascii的值前加上&#,后以;结尾
unicode编码 :%十六进制 对应符号的Ascii的值换算成16进制前加上%,后以;结尾
注意:字符实体解码后得到的值为字符串型,HTML解析器只将其当做字符串文本处理。
2,HTML元素
共有5种元素:空元素、原始文本元素、RCDATA元素、外来元素以及常规元素。
空元素:area、base、br、col、command、embed、hr、img、input、keygen、link、meta、param、source、track、wbr
原始文本元素:script、style
RCDATA元素:textarea、title
外来元素:来自MathML命名空间和SVG命名空间的元素。
常规元素:其他HTML允许的元素都称为常规元素。
3,浏览器解析机制摘要
1,起始标签a

<a href="http://www.0x002.com">0x002</a>
	1,DataState:碰到<,进入TagOpenState状态
	2,TagOpenState:碰到a,进入TagNameState状态
	3,TagNameState:碰到空格,进入BeforeAttributeNameState状态
	4,BeforeAttributeNameState:碰到h,进入AttributeNameState状态
	5,AttributeNameState:碰到=,进入BeforeAttributeValueState状态(HTMLToken属性列表中加入一个属性,属性名为href)
	6,BeforeAttributeValueState: 碰到",进入AttributeValueDoubleQuotedState状态
	7,AttributeValueDoubleQuotedState:碰到b,保持状态,提取属性值
	8,AttributeValueDoubleQuotedState:碰到",进入AfterAttributeValueQuotedState(HTMLToken当前属性的值为http://www.0x002.com).
	9,AfterAttributeValueQuotedState: 碰到>,进入DataState,完成解析。
		在完成startTag的解析的时候,会在解析器中存储与之匹配的end标签(m_appropriateEndTagName),等到解析end标签的时候,会同它进行匹配(语法解析的时候)。
	html,body起始标签类似a起始标签,但没有属性解析

2,元素内容

DataState:0x002,碰到0,维持原状态,提取元素内容(HTMLToken的type为character)。

DataState:0x002,碰到<,完成解析.

3,结束标签

DataState:0x002,碰到<,进入TagOpenState。

TagOpenState:0x002,碰到/,进入到EndTagOpenState。(HTMLToken的type为endTag)。

EndTagOpenState:0x002,碰到a,进入到TagNameState。

TagNameState:0x002,碰到>,进入到DataState,完成解析。

4,0x03常见添加编码的xss载荷讲解

1. <a href="%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29"></a>
HTML解析器解析a标签,将属性href的内容:
%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29
发送给URL编码器,URL编码器找到:的位置,但%6a%61%76%61%73%63%72%69%70%74协	议不存在,故无法确定协议,默认为http协议。对整个内容进行url解码,得:javascript:alert(1),最终的结果相当于,载荷无效

2.<a href="javascript%3aalert(3)"></a>
由于找不到:,URL转码器按照默认http协议进行。结果相当于<a href="http://javascript:alert(3)"></a>

3. <div>&#60;img src=x onerror=alert(4)&#62;</div>
div属于常见元素中的一个,字符实体可以被成功解码,不过此时得到的是字符串型的数据,无法构成标签。

即:<div>&#60;img src=x onerror=alert(4)&#62;</div>中,=所代表的<转码后得到的值为字符串型,无法被HTML解析器解析成构成的标签起始位的<。若是<div><img src=x onerror=alert(4)></div>的话是可以被成功解析的。

链接: 浏览器解析机制

二、复现20字符短域名绕过

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值