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

相关推荐
万少6 小时前
小龙虾(openclaw),轻松玩转自动发帖
前端·人工智能·后端
Jagger_7 小时前
抱怨到躺床关灯的一次 DIY 记录
前端
陈随易10 小时前
前端大咖mizchi不满Rust、TypeScript却爱上MoonBit
前端·后端·程序员
漏洞谷11 小时前
白帽子为什么几乎都绕不开 httpx:一款 HTTP 资产探测工具的技术价值
web安全·漏洞挖掘·安全工具
whinc12 小时前
🚀 两年小程序开发,我把踩过的坑做成了开源 Skills
前端·微信小程序·ai编程
sure28213 小时前
React Native中创建自定义渐变色
前端·react native
KKKK13 小时前
SSE(Server-Sent Events)流式传输原理和XStream实践
前端·javascript
子兮曰14 小时前
Humanizer-zh 实战:把 AI 初稿改成“能发布”的技术文章
前端·javascript·后端
Din14 小时前
主动取消的防抖
前端·javascript·typescript
百度地图汽车版14 小时前
【AI地图 Tech说】第九期:让智能体拥有记忆——打造千人千面的小度想想
前端·后端