XSS漏洞靶场
http://127.0.0.1/xss-labs-master/level1.php?name=<script> alert("攻击成功")</script>
此漏洞主要源于代码对用户输入未进行充分的过滤和转义处理。在 PHP 代码里,通过 $_GET["name"] 接收用户从 URL 传递过来的 name 参数,接着直接将该参数输出到 HTML 页面中。若攻击者在 name 参数里注入恶意的 JavaScript 代码,当页面加载时,这些恶意代码就会被浏览器执行,进而达成 XSS 攻击。
通过分析源码,可在name参数上尝试用简单的JS代码进行XSS攻击
http://127.0.0.1/xss-labs-master/level2.php?keyword="><script>alert('XSS 攻击成功!')</script><"
虽然代码在部分输出时使用了 htmlspecialchars 函数对用户输入进行了处理,但在表单输入框的 value 属性赋值时,没有对用户输入进行足够的转义处理。攻击者可以通过构造特殊的输入,绕过这种部分防护,使得恶意的 JavaScript 代码在页面中被执行,从而实现 XSS 攻击。
在上述代码里,$str 是从 $_GET["keyword"] 获取的用户输入,在 <input> 标签的 value 属性中直接使用了 $str,而没有进行合适的转义。
在h2标签之中的恶意代码被htmlspecialchars编码了。其中<、>都被编码成了html字符实体,恶意代码被编码了,只能从属性值中的恶意代码处进行突破了,,只需要将属性的引号和标签先闭合就可以了。
http://127.0.0.1/xss-labs-master/level3.php?writing='οnmοuseοver='alert("XSS")
代码中对 $str 进行了 htmlspecialchars 处理,在大部分情况下能防止常见的 XSS 攻击。不过,当攻击者利用 HTML 事件属性时,仍可能构造出能执行恶意脚本的情况。在 HTML 标签的属性中,如果输入包含事件处理函数(如 onclick、onload 等),即使使用了 htmlspecialchars 转义了引号,攻击者依然可以通过构造合适的输入绕过部分防护。
点击边框过关
漏洞分析
过滤不彻底
代码尝试通过 str_replace 函数去除输入中的 < 和 > 字符,以防止用户注入 HTML 标签。然而,攻击者可以利用 HTML 实体编码绕过这种过滤。HTML 实体编码允许将特殊字符用特定的编码表示,例如 < 可以用 < 表示,> 可以用 > 表示。当页面输出时,浏览器会将这些实体编码解析为对应的字符。
部分输出转义问题
虽然在 <h2> 标签中使用了 htmlspecialchars 对输出进行转义,但在 <input> 标签的 value 属性中,使用的是经过 str_replace 处理后的 $str3,没有再次进行全面的转义,这就给攻击者留下了可乘之机。
http://127.0.0.1/xss - labs - master/level4.php?keyword="οnfοcus=javascript:alert('xss') "
攻击原理:
攻击者通过构造恶意的 keyword
参数,将包含 JavaScript 代码的字符串注入到页面中。当页面加载时,浏览器会执行注入的 JavaScript 代码,从而实现攻击目的。例如,使用如下 URL:
http://127.0.0.1/xss-labs-master/level5.php?keyword="><a href=javascript:alert("攻击成功")>"点这"</a>
在这个 URL 中,keyword 参数的值为 "><a href=javascript:alert("攻击成功")>"点这"</a>。当页面加载时,这个恶意代码会被嵌入到 input 标签的 value 属性中,导致浏览器执行 alert("攻击成功") 代码,显示一个提示框,表明攻击成功