Web 漏洞靶场练习(第二弹)
本文详细介绍了XSS(跨站脚本)攻击的核心原理及实验案例,包括直接注入、闭合标签、利用onfocus和onclick事件、a href标签法等绕过过滤的方法,并分析了htmlspecialchars函数的作用及防御机制。 2025-11-5 10:44:45 Author: www.freebuf.com(查看原文) 阅读量:3 收藏

freeBuf

主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

2、xss-labs

XSS 的核心原理是 攻击者通过输入恶意脚本,利用网站未过滤的漏洞,让浏览器执行这些脚本,从而实施攻击

level1_直接注入

202511021955481.png

查看源码:

202511021956284.png

当调用alert()时,实际上会执行以下操作:

  1. 弹出一个确认对话框,显示消息“完成的不错!”。

  2. 用户点击确认后,页面会重定向到level2.php,并且传递一个查询参数keyword=test

直接在地址栏输入

name=<script>alert()</script>

202511021956277.png

level2_”>闭合绕过

先插入js尝试

202511021956109.png

这里属于特殊符号被实体转义,所以<script>alert()</script>没有被实体转移

202511021956812.png

可以看到<script>alert(1)</script>被嵌套到value属性中,所以我们需要闭合input标签。

payload:
"><script>alert(1)</script>

202511021957776.png

level3_onfocus和οnclick

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{    
confirm("完成的不错!");
window.location.href="level4.php?keyword=try harder!";
}
</script>

<title>欢迎来到level3</title>

</head>

<body>
<h1 align=center>欢迎来到level3</h1>

<h2 align=center>没有找到和相关的结果.</h2><center>
<form action=level3.php method=GET>
<input name=keyword  value=''>
<input type=submit name=submit value=搜索 />
</form>

</center><center><img src=level3.png></center>

<h3 align=center>payload的长度:0</h3></body>

</html>

尝试闭合单引号

202511021957476.png

查看源代码

202511021957990.png

htmlspecialchars()是 PHP 中用于将特殊字符转换为 HTML 实体的核心安全函数,主要用于防止 XSS(跨站脚本攻击)并确保内容在 HTML 中正确显示。


原字符正确转换后的 HTML 实体触发条件
&&始终转换
""默认(ENT_COMPAT)或ENT_QUOTES
''(或'*)仅当设置 ENT_QUOTES** 时**
<<始终转换
>>始终转换

使用 htmlspecialchars 函数对 $str 进行转义

利用onfocus事件绕过

' onfocus=javascript:alert()‘

202511021957196.png

利用onclick事件绕过

' οnclick='javascript:alert()'

level4_onfocus和οnclick

" onfocus=javascript:alert() "

202511021957997.png

level5_a href标签法

202511021957242.png

202511021958585.png

分析源代码:

<?php 
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level5.php method=GET>
<input name=keyword value="'.$str3.'">
<input type=submit name=submit value=搜索 />
</form>

</center>';
?>
<center><img src=level5.png></center>

<?php
  • strtolower()函数用于将字符串中的所有大写字母转换为小写字母。非字母字符(如数字、符号、中文等)不受影响。

  • str_replace()函数,用于在字符串中查找并替换指定的内容。

这里我们使用a href标签法

HTML 标签参考手册

关于 HTML 中<a>标签(超链接)的href属性用法:HTML 标签_

href属性的意思是:当标签<a>被点击的时候,就会触发执行跳转,跳转到一个网站,还可以触发执行一段js代码。

基础语法

<a>标签通过 href属性定义链接目标,基本格式如下:

<a href="目标地址">链接文本或元素</a>
  • 点击元素:可以是文本、图片或其他 HTML 内容。

  • 行为:点击后默认在当前页面跳转(可通过target属性控制)。

添加一个标签得闭合前面的标签,构建payload:

"> <a href=javascript:alert()>xxx</a> <"

免责声明

1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。

2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。

3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。

已在FreeBuf发表 0 篇文章

本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)


文章来源: https://www.freebuf.com/articles/web/455812.html
如有侵权请联系:admin#unsafe.sh