pikachu靶场第十四关——XSS(跨站脚本)之js输出(附代码审计)
源代码:
//这里讲输入动态的生成到了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");//
记得加//哦~