Pikachu靶场之URL重定向详解
思考和闯关
进入本关页面显示如下,有4个链接
依次点击查看,发现第一个和第二个网页无变化
点击第三个网页跳转到概述页面
点击第四个页面,发现网站有个?url=i
接下来有两种方法可以找到漏洞位置
(1)右键 查看网页源代码
找到上图四个链接的位置,可以发现url重定向是通过 urlredirect.php?url=
来实现的
拼接当前页面url之后,完整的payload是:http://ip:port/pikachu/vul/urlredirect/urlredirect.php?url=xxx
ip、port、xxx根据自己情况写
(2)通过burpsuite抓包
HTTP状态码302表示重定向
上图第3个request报文的具体内容如下,由此也可得到payload
重定向后转向的是/pikachu/vul/urlredirect/unsafere.php
尝试一下漏洞利用:
浏览器地址栏输入http://ip:port/pikachu/vul/urlredirect/urlredirect.php?url=http://www.baidu.com
页面跳转到了http://www.baidu.com
原因和防御
为什么会有这个漏洞呢?还不是因为用户可控的参数没有被好好过滤。
本关代码中与漏洞有关的节选如下,当url参数的值不为i时,就会跳转到url值表示的页面(23行)
试着防御一下,修改一下if else语句分支(22~25行),如果url的值为unsafere.php,则跳转到unsafere.php,如果url的值不为i,也不为unsafere.php,则留在当前页面,并提示“非法地址!”
在浏览器地址栏输入之前使用的payload,页面没有跳转,并提示非法地址。
防御成功
URL跳转的几种方式
对于URL跳转的实现一般会有几种实现方式:
META标签内跳转
javascript跳转
header头跳转
html中使用META标签内跳转
<head>
<!-- 以下方式只是刷新不跳转到其他页面-->
<meta http-equiv="refresh" content="10">
<!-- 以下方式定时转到其他页面 -->
<meta http-equiv="refresh" content="5;url=hello.html">
</head>
javascript跳转
//window.location.href方式
<script language="javascript" type="text/javascript">
window.location.href="target.aspx";
</script>
//window.navigate方式跳转
<script language="javascript">
window.navigate("target.aspx");
</script>
//window.loction.replace方式实现页面跳转
<script language="javascript">
window.location.replace("target.aspx");
</script>
//self.location方式实现页面跳转
<script language="JavaScript">
self.location='target.aspx';
</script>
//top.location
<script language="javascript">
top.location='target.aspx';
</script>
//window.history.back
<script language="javascript">
alert("返回");
window.history.back(-1);
</script>
PHP
php中header函数可实现跳转,当然其他服务器端编程语言都可以实现例如java web的redirect等等。
<?php
//重定向浏览器
header("Location: http://bbs.lampbrother.net");
//确保重定向后,后续代码不会被执行
exit;
?>