• 2、xss-labs之level2


    1、打开页面

    2、传入xss代码

    payload:,发现返回

    3、分析原因

    打开f12,没什么发现

    看后端源码,在这form表单通过get获取keyword的值赋给$str,然后$str通过htmlspecialchars()过滤

    htmlspecialchars() 是 PHP 中的一个函数,用于将特殊字符转换为 HTML 实体。这通常用于防止跨站脚本攻击(XSS),并确保特殊字符(如 <>&"' 等)在 HTML 上下文中被正确解析。

    1. $str = $_GET["keyword"];
    2. echo "

      没有找到和".htmlspecialchars($str)."相关的结果.

      "
      .'
    3. $str.'">

    4、构建payload

    所以我们通过前端可以看到:>

    所以我们考虑将 value=" "这个闭合,然后后面在跟我们的xss代码,这样传入的value就被过滤,但我们xss就被网页执行

    所有构建payload:">

    然后变成:

    5、疑惑反思

    做题遇到的疑惑:

    一开始我在想传入不是被htmlspecialchars 函数转义成<script>alert("ls /")</script>了么,然后又通过代码:echo "

    没有找到和".htmlspecialchars($str)."相关的结果.

    输出前端,为什么最后页面显示是“没有找到和 相关的结果。而不是”没有找到和<script>alert("ls /")</script>相关的结果.“

    通过查阅资料,就懂了

    6、网页渲染过程

    原理:

    1、你参数传进去,PHP 后端中使用 htmlspecialchars 对输入进行转义

    2、然后开始执行PHP的后端代码,你的参数就执行不了,传入的payload也执行不了

    3、PHP后端代码执行完后,浏览器会将转义后的字符还原为原始字符进行显示

    4、因此,页面最终显示的是用户原始输入的内容,而不是转义后的字符

    所以我们要通过闭合来绕开后端的过滤,来执行我的payload

    反思:开发与安全缺一不可

    总结:

    1、xss的payload的构建可以f12查看前端代码

    2、理解构建xss的闭合过程,其实就是绕过过滤

  • 相关阅读:
    我问老大:TCP 四次挥手,可以变成三次吗?
    upload-labs通关
    单调队列优化DP 上 day46
    Linux下的进程控制
    写着简单跑着又快的数据库语言SPL
    PT_连续型随机变量/分布函数/概率密度
    python 调用钉钉机器人接口案例一则 —— 筑梦之路
    图像库 PIL(一)
    数据库原理及应用实验报告-实验9-用户定义完整性
    浅谈C#字符串构建利器StringBuilder
  • 原文地址:https://blog.csdn.net/weixin_51520483/article/details/139202687