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的闭合过程,其实就是绕过过滤

相关推荐
90后的晨仔2 分钟前
别再搞混了!uni-app 中 node_modules 和 uni_modules 到底是什么关系?
前端
kyriewen1 小时前
面试官问"这段逻辑为什么这样写"——我才发现,这半年我写的代码,我自己都解释不了
前端·javascript·面试
谢小飞1 小时前
大文件上传很难?学会这招,GB文件秒传不是梦
前端·node.js
程序员黑豆2 小时前
Windows 系统 Java 环境变量配置全攻略:解决“不是内部或外部命令”
java·前端·ai编程
To_OC2 小时前
别只拿 useRef 绑 DOM 了,搭配 Web Worker 解决页面卡顿才是真的香
前端·react.js·dom
IT_陈寒3 小时前
Vue的响应式让我原地破防,原来问题出在这
前端·人工智能·后端
子兮曰3 小时前
Bun vs Node.js 深度对决:跑分快 4 倍,真实业务只剩 3%,2026 年到底该怎么选?
前端·后端·typescript
笨#小孩3 小时前
文件上传漏洞:原理与20种实战绕过方法(上)
安全·web安全
计算机魔术师3 小时前
终端用户
前端
码事漫谈4 小时前
把 AI 拆掉,你的系统还能跑吗?
前端·后端