zoukankan      html  css  js  c++  java
  • Pikachu漏洞平台---XSS(Cross-Site Scripting) 跨站脚本

    XSS(跨站脚本)概述
        Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型:
            1.反射性XSS;
            2.存储型XSS;
            3.DOM型XSS;

    危害: 存储型>反射型>DOM型

    1.反射型XSS(get)

    随便输入,  输入   '  "  <>  特殊字符都可以原封不动得输出      可以发现没有任何过滤,

     

    只是限制了输入字符的长度,F12修改一下即可  因为一般 前端中得输入框 会做一个长度得限制,  我们将他修改为20000

    <script>  alert("你好,我是一个警告框!") ;</script>    //   弹窗得语法

                       

    查看后台代码,发现 后台代码并没有对你输入得东西 做任何修改 只是原封不动得输出了

    总结:  随便输入,可以发现没有任何过滤,只是限制了输入字符的长度,F12修改一下即可, 

               后台不会存储数据,  刷新后 不会弹窗!

    输入kobe     会生成链接     http://192.168.50.100/pikachu/vul/xss/xss_reflected_get.php?message=kobe&submit=submit#

    2.反射型XSS(post)

    admin  123456  登陆成功后 显示 

    输入 kobe  会以post方式提交请求  http://192.168.50.100/pikachu/vul/xss/xsspost/xss_reflected_post.php#

    这种情况下 无法将恶意代码 发送到后端  

    提前写好  html页面 发送给用户 和用户点击 就可以获取cookie值

    让用户去点击这个页面  获取cookie值

     

    3.存储型XSS

    提交留言后刷新  会一直存储在留言板上  后台有数据  这就是 和反射型xss一个区别

    ' " <> ?   6666666   输入特殊字符 发现没有过滤  

    查看前端代码

    我们输入  <script>  alert("xss") </script>   会出现一个弹窗

      

    我们查看后台代码

    判断message是否存在 并且 message不为空

    进行了转义 防止sql注入

    插数据库的时候 做了对应的转义 防止数据库的注入  把massage 插入到表中  存下来 存到后台

    将存储得留言 都显示出来

    4.DOM型XSS

        DOM学习链接:   https://www.w3school.com.cn/htmldom/index.asp

     你可以理解为DOM为一个一个访问html的标准编程接口

    输入1111

     

    初步观察,点击 click me! 后会出现 what do you see? 的链接按钮,
    其指向是 当前目录/you_input 审查元素时发现onclick后会执行函数 domxss() ,其作用是读取input的值并将其拼接到新创建的link节点中,

    查看代码

    有一段script的代码  他获取了id=text的值  输出了  通过字符串拼接方式 

     

     构造闭合方式

    "<a href='  "+str+"  '>     what do you see?</a>";

    "<a href='    '  >             what do you see?</a>"

    "<a href=' #'   onclick="alert(111)">    '   what do you see?</a>"

                        #' onclick="alert(111)">

    实际会出现<a href=' #'   闭合

    剩下  >'what do you see?  显示到下方

    点击  onclick="alert(111)"会出现弹窗    111

     

    5.DOM型XSS-X

      输入后显示  

    查看源代码,发现代码获取的是url的text  值

    "<a href='  "+str+"  '>就让往事都随风,都随风吧</a>"

    "<a href='    '  >          就让往事都随风,都随风吧</a>"

    "<a href=' #'   onclick="alert(111)">    '  就让往事都随风,都随风吧</a>"

                        #' onclick="alert(111)">

       构造 #' onclick="alert(111)">

    弹窗

     

    6.XSS之盲打

     

     输入 :   <script>alert('xss')</script>    发现  也没有其他内容输出

     

    根据提示 登录后台  :  http://192.168.50.100/pikachu/vul/xss/xssblind/admin_login.php

    7.XSS之过滤

    XSS过滤:

    几种XSS绕过的姿势:

    1.直接f12修改前端的限制,例如长度。

    2.大小写混合:<SCRIpt>ALErt(11)<SCRipt>

    3.拼凑:<scr<script>ipt>alert(11)</sc<script>ript>

    4.注释符:<scr<!--text-->ipt>alert(11)</sc<!--text-->ript>

    5.编码的方式,

    但是在使用时要注意是否会被输出点识别和执行,不然绕过了也没有用。

    输入<script>' "  特殊字符 看输出结果 字符被过滤 查看前端源码  输入结果不一致

    查看后端源码 发现对script进行了 过滤 替换为空格 但是只是对小写进行了替换

     

    利用大小写混合输入的方式  进行绕过处理  <sCrIpt>alert(1111)</sCriPt>  ,则会弹窗

     

    8.xss之htmlspecialchars  

    学习链接:  https://baijiahao.baidu.com/s?id=1621553793329253809&wfr=spider&for=pc

    在php中,htmlspecialchars()函数是使用来把一些预定义的字符转换为HTML实体,返回转换后的新字符串,原字符串不变。

    如果 string 包含无效的编码,则返回一个空的字符串,除非设置了 ENT_IGNORE 或者 ENT_SUBSTITUTE 标志;

    被转换的预定义的字符有:

    &  :  转换为&amp;

    "  :  转换为&quot;

    '  :  转换为成为 '

    <  :  转换为&lt;

    >  :  转换为&gt;

     可用的引号类型:

    ENT_COMPAT:默认。仅编码双引号。

    ENT_QUOTES:编码双引号和单引号。

    ENT_NOQUOTES:不编码任何引号。

    输入特殊字符 查看源码,  我们看到     '   "   <   >   都进行了编码

     所以使用单引号闭合:q' onclick='alert(111)'

    XSS防范  总原则:  输入做过滤,输出做转义

    过滤:  根据业务需求进行过滤,比如输入点要求输入手机号。则只允许输入手机号格式的数字

    转义 : 输出到前端的数据根据输出点 进行转义    html做html转义 js页面做js转义

    9.xss之href输出

    查看源码,这次htmlspecialchars函数使用了ENT_QUOTES类,也加上了对单引号的转义,

    但是在a标签的href属性里面,可以使用javascript协议来执行js

    于是:javascript:alert(1111)

     所以在 href 的输出最安全的防范措施:  因为herf里面可以写超链接 只允许http,https,其次在进行htmlspecialchars处理

     

    10xss之js输出

    输入1111,观察源码

     只要闭合语句即可:</script>'<script>alert("111")</script> 

     
    这里讲输入动态的生成到了js中,形成xss
    javascript特点:不会对tag和字符实体进行解释的,    就是不对实体编码 进行转义  ,所以需要进行js转义


    这里如果进行html的实体编码,虽然可以解决XSS的问题,但是实体编码后的内容,在JS里面不会进行翻译,这样会导致前端的功能无法使用。
    所以正确的防范      在JS的输出点应该使用对特殊字符进行转义

  • 相关阅读:
    两个三汇API使用的坑
    呼叫中心系统架构
    呼叫中心搭建的前期准备步骤
    呼叫中心基础知识
    一步一步开发呼叫中心
    富文本框保存和显示问题
    WebApi和Andriod对接上传和下载文件
    WebApi和Andriod对接访问模式问题
    Sql Server Report Service 的部署问题
    Web API 路由访问设置
  • 原文地址:https://www.cnblogs.com/xingyuner/p/12299217.html
Copyright © 2011-2022 走看看