zoukankan      html  css  js  c++  java
  • WEB安全系列之如何挖掘任意用户登录漏洞

    WEB安全系列之如何挖掘任意用户登录漏洞



    0x01  前言   
         每周两篇文章打卡。坏蛋100块钱都不给我,好坏好坏的。


    0x02  什么是任意用户登录漏洞
       几乎每个网站都有自己的会员系统,有会员,就有登录机制,如果可以登录其他用户账户,那么就可以窃取其他用户的资料数据。如果配合上脚本的话,甚至可以批量获取用户的数据。对网站来说,任意用户登录是一个很高危的漏洞。


    0x03  实战的案例(白盒测试)
         Vlcmsv1.2.0,就拿这套CMS来说吧。
         vlcms/Application/Media/Controller/MemberController.class.php
         post获取uid传进autoLogin()中

    1. public function res_login(){
    2.                 parent::autoLogin($_POST['uid']);
    3.                 echo $this->ajaxReturn(array("status"=>0,"uid"=>$_POST['uid']));
    4.         }
    复制代码

         将id传进entity()。

    1. protected function autoLogin($uid){
    2.                 $user =$this->entity($uid);
    3.         /* 记录登录SESSION和COOKIES */
    4.         $auth = array(
    5.             'mid'             => $user['id'],
    6.             'account'             => $user['account'],
    7.             'nickname'        => $user['nickname'],
    8.             'balance'         => $user['balance'],
    9.             'last_login_time' => $user['login_time'],
    10.         );
    11.         session('member_auth', $auth);
    12.         session('member_auth_sign', data_auth_sign($auth));
    13.         }
    复制代码

    entity中直接根据id查询账户了。。所以只需一个id就能登录任意用户。

    1. protected function entity($id){
    2.                 $data = M('User','tab_')->find($id);
    3.                 if(empty($data)){
    4.                         return false;
    5.                 }
    6.                 return $data;
    7.         }
    复制代码


    0x04  实战的案例(黑盒测试)
         http://127.0.0.1/vlcms/index.php?s=/member/res_login/
         POST:uid=60


         访问后,返回一串代码。
          <ignore_js_op> 

         接着访问http://127.0.0.1/vlcms/index.php?s=/member/,可以看到,已经成功登录账户


          <ignore_js_op> 
         访问:post:uid=61
          <ignore_js_op> 
         接着访问http://127.0.0.1/vlcms/index.php?s=/member/


         成功登录uid为61的账户


          <ignore_js_op> 

    0x05  修复建议
         不要用id来判断账户身份。

    本文来源:http://bbs.ichunqiu.com/thread-8655-1-1.html?from=bokeyuan

  • 相关阅读:
    uboot的仓库在哪里?
    git如何查看执行过的历史git命令
    for(;;)和while(true)的区别
    CountDownLatch的理解和使用
    countDownLatch
    websocket @ServerEndpoint(value = "/websocket/{ip}")详解
    Java原子性操作之——Atomic包的原理分析
    CAS原理
    java线程池ThreadPoolExecutor的keepAliveTime=0时,表示超过core线程数的线程在空闲时立即结束!!!
    ThreadPoolExecutor 线程池Demo
  • 原文地址:https://www.cnblogs.com/ichunqiu/p/5703966.html
Copyright © 2011-2022 走看看