IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 逻辑类漏洞 -> 正文阅读

[PHP知识库]逻辑类漏洞

在这里插入图片描述

一、越权

1.越权:
分为水平越权、垂直越权与未授权访问。

水平越权:通过更换某个ID之类的身份标识,从而使A账号获取修改B账号数据;
垂直越权:使用低权限身份的账号,发送高权限账号才能有的请求,获取其更高权限的操作;
未授权访问:通过删除请求中的认证信息后重放该请求,依旧可以访问或者完成操作(比如随意登录后台);

2.pikachu靶场:
1)水平越权:我们修改username即可更改为其他用户。
在这里插入图片描述
源码:

<?php
/**
 * Created by runner.han
 * There is nothing new under the sun
 */


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

if ($SELF_PAGE = "op1_login.php"){
    $ACTIVE = array('','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','active open','','active','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','');
}
$PIKA_ROOT_DIR =  "../../../";
include_once $PIKA_ROOT_DIR . 'header.php';
include_once $PIKA_ROOT_DIR.'inc/mysql.inc.php';
include_once $PIKA_ROOT_DIR.'inc/function.php';
include_once $PIKA_ROOT_DIR.'inc/config.inc.php';

$link=connect();
// 判断是否登录,没有登录不能访问
if(!check_op_login($link)){
    header("location:op1_login.php");
}
$html='';
if(isset($_GET['submit']) && $_GET['username']!=null){
    //没有使用session来校验,而是使用的传进来的值,权限校验出现问题,这里应该跟登录态关系进行绑定
    $username=escape($link, $_GET['username']);
    $query="select * from member where username='$username'";
    $result=execute($link, $query);
    if(mysqli_num_rows($result)==1){
        $data=mysqli_fetch_assoc($result);
        $uname=$data['username'];
        $sex=$data['sex'];
        $phonenum=$data['phonenum'];
        $add=$data['address'];
        $email=$data['email'];

        $html.=<<<A
<div id="per_info">
   <h1 class="per_title">hello,{$uname},你的具体信息如下:</h1>
   <p class="per_name">姓名:{$uname}</p>
   <p class="per_sex">性别:{$sex}</p>
   <p class="per_phone">手机:{$phonenum}</p>    
   <p class="per_add">住址:{$add}</p> 
   <p class="per_email">邮箱:{$email}</p> 
</div>
A;
    }
}


if(isset($_GET['logout']) && $_GET['logout'] == 1){
    session_unset();
    session_destroy();
    setcookie(session_name(),'',time()-3600,'/');
    header("location:op1_login.php");

}

?>



<div class="main-content">
    <div class="main-content-inner">
        <div class="breadcrumbs ace-save-state" id="breadcrumbs">
            <ul class="breadcrumb">
                <li>
                    <i class="ace-icon fa fa-home home-icon"></i>
                    <a href="../op.php">Over Permission</a>
                </li>
                <li class="active">op1 member</li>
            </ul><!-- /.breadcrumb -->
            <a href="#" style="float:right" data-container="body" data-toggle="popover" data-placement="bottom" title="tips(再点一下关闭)"
               data-content="这里可以查别人的信息吗?">
                点一下提示~
            </a>

        </div>
        <div class="page-content">
            <div id="mem_main">
                <p class="mem_title">欢迎来到个人信息中心  | <a style="color:bule;" href="op1_mem.php?logout=1">退出登录</a></p>
                <form class="msg1" method="get">
                    <input type="hidden" name="username" value="<?php echo $_SESSION['op']['username']; ?>" />
                    <input type="submit" name="submit" value="点击查看个人信息" />
                </form>
                <?php echo $html;?>

            </div>


        </div><!-- /.page-content -->
    </div>
</div><!-- /.main-content -->



<?php
include_once $PIKA_ROOT_DIR . 'footer.php';
?>

2)垂直越权:

我们在登陆admin的情况下抓取admin添加用户的数据包,之后在登陆只有查看权限的pikachu用户,会发现再将数据包发出去可以成功添加用户(有session验证,需要修改数据包的session),这就是一种垂直越权:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加用户代码的注释里说的很清楚:
在这里插入图片描述
但是我们正常情况下普通用户是抓取不到admin的数据包的,因此想要越权添加用户可以有以下方法参考:

  • 知道网站源码来本地模拟搭建;
  • 普通用户根据前端信息抓取数据包(数据包的uid、数据库里的usertype/level/groupid等);
  • 根据经验盲猜(相当于没说);

在这里插入图片描述

但是加入我们可以利用弱口令或注入进入到管理员登录界面,就可以直接进去了,也就不需要越权了(后面细说)。

3.实战:墨者靶场

4.工具:privilegechecker、burp的插件authz、secscan-authcheck-master中通开源越权检测工具

在这里插入图片描述
绿色代表可以越权访问。
5.修复:
在这里插入图片描述

二、登录

登录处安全问题:
在这里插入图片描述

1.http与https:
在这里插入图片描述
ssl加密过程
在这里插入图片描述

2.账号密码处暴力破解:

burp可以对我们要爆破的密码进行加密处理
在这里插入图片描述
3.Cookie 脆弱点验证修改测试:

熊海cms(白盒代码审计):
我们在登陆界面可以知道会包含checklogin.php来验证登陆
在这里插入图片描述
在代码中我们可以看到验证登陆处存在cookie验证漏洞,我们抓包修改cookie为user=1就可以不输入账号密码直接登陆后台界面!

在这里插入图片描述
而且我们要跳转到的是?r=index界面,是此处有验证!不是?r=login处!只有在?r=index处cookie验证失败我们才会跳转到登录界面让我们登录,因此我们可以利用这里边的逻辑错误,修改在验证cookie处的cookie值,可以避开跳转,直接登录后台。
在这里插入图片描述
在这里插入图片描述

这是在白盒审计下可以发现的漏洞,而在黑盒下就得考验信息收集能力如何了,能找到源码最好,找不到就需要综合分析,比如看看服务器版本的历史漏洞等等。

同时这里有两点cookie常识

  • burp抓的包里边会掺杂许多浏览器保存的其他网站的cookie。
  • 浏览器清除痕迹包括cookie后就会将我们的登录状态清掉。

三、业务

1.数据篡改安全问题:
在这里插入图片描述
1)常见地方比如商品支付,订单,付款处。
参考:https://www.secpulse.com/archives/67080.html

2.某商城cms:

在这里插入图片描述

抓包修改订单数量、订单编号,此处没有加密和验证,很不安全::
在这里插入图片描述
3.大米手机cms:在这里插入图片描述
抓包修改价格、改id购买其他商品:
在这里插入图片描述
其实还有替换支付的漏洞,不过环境没办法搭建…

类似漏洞很多,可以参考上边那个链接,不过目前网络环境大网站很少遇到这种漏洞了,而且遇见了也不敢轻易测试。

4.修复/防御:
比如:将价格定义在数据库中,直接调用,即使修改数据包也没用,数据库的数据不会变,仍以数据库数据为准。

在这里插入图片描述

四、找回、验证、接口

在这里插入图片描述
1.墨者靶场:登录密码重置漏洞分析溯源

原理:就是我们先在重置界面发验证码给要改的目标手机号(自然得不到验证码),然后再重置自己的手机号,发验证码,得到验证码,就将自己的手机号改为目标手机号,因此可以达到修改对方密码的目的。这就是此处的逻辑漏洞,没有将验证码与手机号绑定!并且正常界面都是两个重置界面,先验证验证码在进入重置界面,此处只有这一个界面,因此可以篡改手机号。

2.客户端回显:就是抓前端包中会包含验证码。(实例:某绑定手机验证码逻辑漏洞)
在这里插入图片描述
我们都不用手机接收验证码,在数据包中就能看到;而且测试后发现验证码正确时回显为1,错误是回显为3:
在这里插入图片描述
测试发现同时此处还存在修改回显状态值漏洞,即将错误回显的3改为1也可将绑定手机修改成功。这种漏洞只有在只前端验证时才会出现,我们可以修改,若是后端验证就无法利用该漏洞了。
在这里插入图片描述

PS:

burp如何抓取response回显包
在这里插入图片描述
在这里插入图片描述

3.验证安全:在这里插入图片描述
前边我们学习csrf时知道token是用来验证客户端唯一性的,可以有效防止伪造请求。验证码就随处可见了,有简单可以用插件绕过的,也有那种复杂的拖动题就较难绕过了,需要利用收费平台的接口。

#验证码安全:
分类:图片,手机或邮箱,语音,视频,操作等
原理:验证生成或验证过程中的逻辑问题
危害:账户权限泄漏,短信轰炸,遍历,任意用户操作等
漏洞:客户端回显(已讲),验证码复用,验证码爆破(已讲),绕过等

#token 安全:
基本上述同理,主要是验证中可存在绕过可继续后续测试
token 爆破,token 客户端回显等

#验证码识别插件工具使用:
captcha-killer,Pkav_Http_Fuzz,reCAPTCHA 等

1)Pkav_Http_Fuzz工具:(需要复制图片地址带上请求数据包才能识别;能识别一些简单的,但无法与第三方应用连接不如burp,也无法调用其他库,具体使用看操作手册。)
在这里插入图片描述
2)burp插件captcha-killer与reCAPTCHA:
在这里插入图片描述
在这里插入图片描述

这个插件需要寻找一个好点的接口,而且爆破时也可以使用这个插件来识别,批量跑,不够得看接口好不好,而且好的需要收费,但也仅能识别图片,至于滑动/点击的验证码,比较复杂,难绕过。

参考:https://www.cnblogs.com/nul1/p/12071115.html

3)pikachu靶场:

服务端(on server)绕过:

此处漏洞就是没有在验证一个表单后随即消除验证码的session,导致我们之后仍然可以输入利用该验证码来爆破账号密码达到登录效果:

我们先随便输入账号密码和验证码:
在这里插入图片描述
之后将验证码修改正确,提交后发现提示不是验证码失效而是账号密码错误,因此可以判断此处验证码session并没有被销毁,可以使用同一验证码爆破账号密码绕过验证码检测:
在这里插入图片描述
在这里插入图片描述
源码:

 if (empty($_POST['vcode'])) {
                $html .= "<p class='notice'>验证码不能为空哦!</p>";
            } else {
//              验证验证码是否正确
                if (strtolower($_POST['vcode']) != strtolower($_SESSION['vcode'])) {
                    $html .= "<p class='notice'>验证码输入错误哦!</p>";
                    //应该在验证完成后,销毁该$_SESSION['vcode']
                }else{

                    $username = $_POST['username'];
                    $password = $_POST['password'];
                    $vcode = $_POST['vcode'];

                    $sql = "select * from users where username=? and password=md5(?)";
                    $line_pre = $link->prepare($sql);

                    $line_pre->bind_param('ss',$username,$password);

                    if($line_pre->execute()){
                        $line_pre->store_result();
                        //虽然前面做了为空判断,但最后,却没有验证验证码!!!
                        if($line_pre->num_rows()==1){
                            $html.='<p> login success</p>';
                        }else{
                            $html.= '<p> username or password is not exists~</p>';
                        }
                    }else{
                        $html.= '<p>执行错误:'.$line_pre->errno.'错误信息:'.$line_pre->error.'</p>';
                    }
<?php 
session_start();
include_once 'function.php';
//$_SESSION['vcode']=vcode(100,40,30,4);
$_SESSION['vcode']=vcodex();
//验证码绕过 on server 这里其实还是有一个问题,就是服务端将验证码字符串以明文COOKIE的方式给了前端,那验证码还有什么鸟意义。。。
setcookie('bf[vcode]',$_SESSION['vcode']);
?>

客户端(on client)绕过:

就是简单的前端js生成代码,这个就好绕过了,禁用js就行,能抓到包说明就已经过拦截了:
在这里插入代码片

token防爆破绕过:

token简而言之就是确保提交一次数据包附带一个唯一的token吗,可以防止爆破,同样可以防止跨站伪造,想要绕过有几个方法:

  • 看客户端回显,分析数据包(最靠谱),然后爆破token
  • 了解或猜到token的生成规则或加密方式

看客户端回显,其实就是分析回显数据包可能存在的token,其有时可能是下一个数据包的token,我们可以尝试抓取该token用于下一次发送请求:

在这里插入图片描述
然后利用bp的intruder模块爆破成功(提取上一个数据包token用于下一个发送请求操作):
在这里插入图片描述

burp还是有很多功能是没接触到的,burp yyds!

4.接口:

#接口安全问题:
调用,遍历,未授权,篡改等
调用案例:短信轰炸
遍历案列:UID 等遍历
callback 回调 JSONP
参数篡改:墨者靶场

寻找关键字,id/uid/callback等等,需要用到接口的时候才可能存在漏洞,有点类似爬虫,可以利用bp的spider模块,爬取后在target模块查看网站的结构:
在这里插入图片描述

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 12:49:24  更:2022-01-16 12:49:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/14 14:47:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码