2、xss-labs之level2

1、打开页面

2、传入xss代码

payload:<script>alert(xss)</script>,发现返回<script>alert(xss)</script>

3、分析原因

打开f12,没什么发现

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

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

php 复制代码
$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level2.php method=GET>
    <input name=keyword  value="'.$str.'">
    <input type=submit name=submit value="搜索"/>
</form>

4、构建payload

所以我们通过前端可以看到:<input name=keyword value="<script>alert(xss)</script>">

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

所有构建payload:"> <script>alert("xss")</script>

然后变成: <input name=keyword value=" "> <script>alert("xss")</script>

5、疑惑反思

做题遇到的疑惑:

一开始我在想传入<script>alert("xss")</script>, 不是被htmlspecialchars 函数转义成&lt;script&gt;alert(&quot;ls /&quot;)&lt;/script&gt;了么,然后又通过代码:echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>" 输出前端,为什么最后页面显示是**"没有找到和 <script>alert("ls /")</script> 相关的结果** 。而不是**"没有找到和&lt;script&gt;alert(&quot;ls /&quot;)&lt;/script&gt;相关的结果."**

通过查阅资料,就懂了

6、网页渲染过程

原理:

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

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

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

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

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

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

总结:

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

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

相关推荐
kyriewen5 分钟前
别再用防抖做懒加载了:120 张图只加载出 4 张
前端·javascript·程序员
计算机魔术师11 分钟前
Hugging Face CEO 转评前 DOGE 研究人员用 AI 智能体渗透 Anthropic 系统事件
前端
IT_陈寒19 分钟前
刚解决一个 Java 并发问题,这坑踩得我怀疑人生
前端·人工智能·后端
前端一课19 分钟前
一个晚上,四个“小问题”:我重写了 12 章 ArkUI 笔记
前端
Smoothcloud润云23 分钟前
GPU远程纳管安全吗?最小权限、网络边界与日志审计实战
服务器·网络·人工智能·安全·gpu算力·gpu
小码哥_常31 分钟前
前端图片压缩实战——我把网站图片体积砍了 70%
前端
张一凡931 小时前
把“不要乱改”从提示词里拿出来,放进可校验的提案里
前端·后端·架构
木子欢儿1 小时前
Debian 13 + vsftpd 搭建FTP服务
linux·服务器·前端·网络·debian
leeguoo1 小时前
让 Claude Code / Codex 用上你已登录的 Chrome
前端·chrome·ai编程
天蒙蒙亮1 小时前
打安卓apk包+“应用商城”发布
前端·uni-app