pikachu——不安全的URL跳转(如何防御,附带源码解析)

不安全的url跳转问题可能发生在一切执行了url地址跳转的地方。
如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地,而又没有做判断的话
就可能发生"跳错对象"的问题。

url跳转比较直接的危害是:
–>钓鱼,既攻击者使用漏洞方的域名(比如一个比较出名的公司域名往往会让用户放心的点击)做掩盖,而最终跳转的确实钓鱼网站

打靶

先抓个包:

发现第三个 像秋天的风一样的少年 里面的 url 中有 url=unsafere

image-20231012220656604

第四个 我就是我,放荡不羁的我 里面的 url 中的 url=i

image-20231012221055623

以上两个案例都是典型的可利用的 url 不安全链接,在渗透测试的过程中可以留意一下这种特殊的命名或者参数传输。会有意想不到的效果

先观察以上两个链接会跳到哪儿去:

第三个:

(跳到了概述)

image-20231012221507457

第四个:

(跳到了本页面,没变化)

image-20231012221523406

组合 payload

第三个:

payload:

http://192.168.200.8/vul/urlredirect/urlredirect.php?url=www.baidu.com

image-20231012221921555

第四个:

payload:

http://192.168.200.8/vul/urlredirect/urlredirect.php?url=www.baidu.com

image-20231012222003430

如何防御

以第三个举例

查看原码:

<?php
$SELF_PAGE = substr($_SERVER['PHP_SELF'],strrpos($_SERVER['PHP_SELF'],'/')+1);

if ($SELF_PAGE = "urlredirect.php"){
    $ACTIVE = array('','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','active open','','active','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','');
}

$PIKA_ROOT_DIR =  "../../";
include_once $PIKA_ROOT_DIR.'header.php';

$html="";
if(isset($_GET['url']) && $_GET['url'] != null){
    $url = $_GET['url'];
    if($url == 'i'){
        $html.="<p>好的,希望你能坚持做你自己!</p>";
    }else {
        header("location:{$url}");
    }
}
?>

image-20231012231233841

关键源码:

if($url == 'i'){
        $html.="<p>好的,希望你能坚持做你自己!</p>";
    }else {
        header("location:{$url}");
}

检查重定向目标

修改源码:

如果 url 的值为 unsafere.php ,则跳转到 unsafere.php ,如果 url 的值不为 i ,也不为 unsafere.php ,则留在当前页面,并显示提示信息。

if($url == 'i'){
    	$html.="<p>好的,希望你能坚持做自己!</p>";
	}else if($url == 'urlredirect.php'){
    	header("loaclhost:{$url}");
	}else{
    	$html.="<p>警告,sb别搞</p>";
}

image-20231012231120791

设置安全的重定向URL

使用 urlencode()函数URL 进行编码

$redirect_url = "http://example.com/redirect.php?redirect_url=".urlencode($user_input);

header("Location:".$redirect_url); //执行重定向

使用相对路径重定向

相对路径只指定目标文件的相对位置,而不是完整的 URL 的好处是,无法使用恶意 URL 来进行攻击。

header("Location:/index.php");   //使用相对路径重定向

防止循环重定向

循环重定向的危害:循环跳转导致系统进入死循环,服务器资源耗尽

解决:使用一个计数器来限制重定向的次数。

通过 SESSION 变量储存重定向的次数,超过限制时拒绝执行重定向。

$redirect_count = $_SESSION['redirect_count'];  // 获取重定向计数器
if($redirect_count > 5){
    echo"重定向次数太多辣";     // 重定向次数过多,拒绝执行
}else{
    $_SESSION['redirect_count'] = $redirect_count + 1; //更新计数器
    header("Location:".$redirect_count);  //执行重定向
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

visionkiwi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值