pikachu靶场第十四关——XSS(跨站脚本)之js输出(附代码审计)

博客围绕XSS漏洞展开,通过尝试输入不同内容查看网页源代码,发现单引号未被过滤,可通过闭合单引号并添加JavaScript代码 ';JavaScript:alert(\111\);// 来利用该漏洞,强调了输入过滤对前端安全的重要性。

源代码:

//这里讲输入动态的生成到了js中,形成xss
//javascript里面是不会对tag和字符实体进行解释的,所以需要进行js转义

//讲这个例子主要是为了让你明白,输出点在js中的xss问题,应该怎么修?
//这里如果进行html的实体编码,虽然可以解决XSS的问题,但是实体编码后的内容,在JS里面不会进行翻译,这样会导致前端的功能无法使用。
//所以在JS的输出点应该使用\对特殊字符进行转义


if(isset($_GET['submit']) && $_GET['message'] !=null){
    $jsvar=$_GET['message'];
//    $jsvar=htmlspecialchars($_GET['message'],ENT_QUOTES);
    if($jsvar == 'tmac'){
        $html.="<img src='{$PIKA_ROOT_DIR}assets/images/nbaplayer/tmac.jpeg' />";
    }
}
 <div id="xssr_main">
                <p class="xssr_title">which NBA player do you like?</p>
                <form method="get">
                    <input class="xssr_in" type="text" name="message" />

                    <input class="xssr_submit" type="submit" name="submit" value="submit" />
                </form>
                </br>
               <p id="fromjs"></p>
                <?php echo $html;?>
            </div>
<script>
    $ms='<?php echo $jsvar;?>';
    if($ms.length != 0){
        if($ms == 'tmac'){
            $('#fromjs').text('tmac确实厉害,看那小眼神..')
        }else {
//            alert($ms);
            $('#fromjs').text('无论如何不要放弃心中所爱..')
        }

    }


</script>

尝试输入111

尝试输入'111

看一下网页源代码

单引号没有被过滤,那么我们只需要将其闭合就行了。

';JavaScript:alert("111");//

记得加//哦~

### 反射型XSS(POST)的原理及实践 反射型跨站脚本攻击(Cross-site Scripting, XSS)是一种常见的Web安全漏洞,攻击者通过诱导用户点击包含恶意脚本的链接或提交恶意构造的表单,将恶意代码注入到目标网站中。与GET请求不同,使用POST方法的反射型XSS通常需要构造一个HTML表单,并利用JavaScript自动提交该表单以触发攻击。 #### 原理分析 在Pikachu靶场中,反射型XSS(POST)的实现依赖于后端服务器未对用户输入进行充分过滤或转义。当用户提交包含恶意脚本的数据时,服务器会将这些数据直接返回给浏览器并执行。这种攻击方式的键在于: - **用户输入未经过滤**:服务器接收用户的输入后,直接将其嵌入到响应页面中。 - **客户端自动执行脚本**:由于浏览器无法区分恶意脚本和合法内容,导致恶意代码被直接执行[^1]。 例如,在Pikachu靶场中,攻击者可以构造一个包含恶意脚本的POST请求,并通过隐藏的HTML表单和JavaScript自动提交来完成攻击。受害者一旦访问该页面,恶意脚本就会被执行。 #### 实践步骤 以下是如何在Pikachu靶场中完成反射型XSS(POST)的具体操作: 1. **访问靶场页面** 进入Pikachu靶场的反射型XSS(POST)部分,找到输入框或相功能模块。 2. **构造恶意表单** 在页面中插入一个隐藏的HTML表单,并设置其`method`属性为`POST`,同时指定目标URL。表单中包含一个字段,用于传递恶意脚本。示例代码如下: ```html <form id="xssForm" action="http://target-url.com/vulnerable-endpoint" method="POST"> <input type="hidden" name="inputField" value='<script>alert("XSS")</script>' /> </form> ``` 3. **自动提交表单** 使用JavaScript代码自动提交上述表单,确保受害者无需手动操作即可触发攻击。添加以下脚本: ```html <script> document.getElementById("xssForm").submit(); </script> ``` 4. **验证攻击效果** 当受害者访问包含上述代码的页面时,表单会自动提交到目标URL,服务器接收到恶意脚本后将其返回并执行,最终弹出提示框显示“XSS”。 #### 安全建议 为了防止反射型XSS攻击,开发者应采取以下措施: - **输入过滤**:对所有用户输入进行严格的过滤和验证,避免直接将其嵌入到响应中。 - **输出编码**:根据上下文对输出内容进行适当的HTML、JavaScript或URL编码,确保恶意脚本无法被执行。 - **使用安全框架**:采用现代Web框架(如React、Vue.js等),它们内置了安全机制来防范XSS攻击。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VW_浮生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值