记一下第27-28课的内容。Token 验证 + URL跳转漏洞的类型与三种跳转形式;URL跳转漏洞修复 + 短信轰炸漏洞绕过挖掘
一、token有关知识
什么是token?token是用来干嘛的?_token是什么意思-CSDN博客
二、URL跳转漏洞
我们在靶场中,如果没有登录就想进行购买操作,会弹出提示让我们先登录:
我们点击“去登陆”,然后看上面的URL,会有一个redirect:
如果我们对redirect后面的内容进行修改,比如说修改为www.baidu.com,这样我们就会跳转到别的网站去,这就是URL跳转的漏洞。
URL跳转漏洞的分类:
①无需登录跳转
②需登录跳转
跳转形式的分类:
①Hearder重定向
②Js跳转
③HTML跳转
这里content = 5指的是等待5秒跳转
URL跳转漏洞-CSDN博客
三、URL跳转漏洞的修复
parse_url()函数的功能是把URL拆分成一位数组的形式:
<?php
$url = $GET['url'];
$array = parse_url($url);
var_dump($array);
结果如下图所示:
scheme代表的是协议,host代表的是域名,path代表的是地址。此外,还有可能有query部分。我们主要使用的是host,通过判断要跳转的URL的host是否与当前访问域名的host相同,来进行URL跳转漏洞的修复。下面是一种有效修复方案的演示:
<?php
$url = $GET['url'];
#获取要跳转的URL地址的host
$array = parse_url($url);
$Location_Host = $array['host'];
#获取当前访问域名的host
$Current_Host = $_SERVER['host'];
#判断两者是否相同
if($Location_Host != $Current_Host){
die('跳转的域名地址不对!');
}
下面再介绍一种方法:
<?php
$url = $GET['url'];
if(strstr($url,$_SERVER['HTTP_HOST']) === false){
die('跳转地址不对!');
}
echo '开始跳转!';
这里strstr函数的功能是,搜索字符串在另一字符串中是否存在,如果是,返回该字符串及剩余部分,否则返回 FALSE。因为这个函数只扫描是否存在,我们仍然可以进行绕过:
①
②或者使用#,但是不能直接使用,要转换成URL编码才行,#的URL编码是%23,#的作用是忽略掉后面的内容,相当于注释,我们通过把正确的URL放到#后面,把它注释掉,但是仍然可以绕过strstr函数的检测,实现URL跳转漏洞。
③或者直接创建一个目录,也可以实现绕过:
关于URL跳转漏洞更详细的内容:URL跳转漏洞-CSDN博客
四、短信轰炸漏洞
1.漏洞类型
①定向轰炸:针对于单个手机号进行批量式发送短信
②横向轰炸:不能对单个手机号造成影响,但是却可以浪费企业的资产
2.绕过思路
①空格绕过
用burp进行爆破,每发一次就在手机号后面加一个空格。但是由于ThinkPHP框架会自动过滤掉空格,这里的演示并不成功:
②换行绕过
然而,回车可以起到跟空格一样的作用,我们可以每发送一次就加一个回车:
回车的URL编码是%0a,因此我们可以直接每发送一次就加一个%0a,这样就可以绕过,而至于短信运营商发送短信的时候,会自动对空格、换行进行过滤,可以成功地将短信发送出去:
③数组绕过
有的短信运营商可以一次给多个手机号发送短信,比如说,要求传入的手机号用逗号分隔:
13333333333,16666666666,18888888888 假设这就是手机号参数
这就给了我们一个可乘之机,我们可以每发送一次就在数据包里面增加一个手机号,如果后端的判断是每次的手机号参数不能一样,我们就可以通过这样的方式轰炸一个或多个多个手机号: