🔓 Ultimate Webshell - Penetration Testing Tool

📖 File Reader

<?php
namespace app\api\controller;
use app\BaseController;
use app\api\common\Common_config;
use app\api\common\Common_user;
use app\common\Common_dingtalk;
use app\common\Common_note;
use app\common\Common_weixinpay;
use app\common\Common_wechat;
use think\facade\Db;
use think\facade\View;

class Login extends BaseController
{
    /**
     * 注册
     */
    public function register()
    {
        $user_name = input("param.user_name")!=''?input("param.user_name"):'';
        $password = input("param.password");
        $password2 = input("param.password2");
        $invite_code = input("param.invite_code");
        $mobile = input("param.mobile");
        $code = input("param.code");
        if (empty($mobile)){
            return $this->error_json("请输入手机号");
        }
        if (empty($code)){
            return $this->error_json("请输入验证码");
        }
//        if (empty($user_name)){
//            return $this->error_json("请输入账号");
//        }
        if (empty($password)){
            return $this->error_json("请输入密码");
        }
        if ($password != $password2){
            return $this->error_json("两次密码不一致");
        }
        $yanzhen = Common_note::verify($mobile,$code);
        if ($yanzhen["code"] == 400){
            return $this->error_json($yanzhen["msg"]);
        }
        if (!empty($user_name)){
            $user_info = db::name("user")->where("user_name = '$user_name'")->find();
            if (!empty($user_info)){
                return $this->error_json("账号已存在");
            }
        }
        if (!empty($mobile)){
            $mobile = db::name("user")->where("mobile = '$mobile'")->find();
            if (!empty($mobile)){
                return $this->error_json("手机号已存在");
            }
        }
        $superior_id = 0;
        if (!empty($invite_code)){
            $superior_id = db::name("user")->where("invitation_code = '$invite_code'")->value("user_id");
            if (empty($superior_id)){
                return $this->error_json("邀请人不存在");
            }
        }
        //创建随机数
        $user_miyao = Common_user::user_miyao_add("30");
        $invitation_code = Common_user::user_invitation_code_add("7");
        $info = [
            'nickname'=>$user_name,
            'mobile'=>input("param.mobile"),
            'user_name'=>$user_name,
            'superior_id'=>$superior_id,
            'password'=>md5($password),
            'user_miyao'=>$user_miyao,
            'invitation_code'=>$invitation_code,
            'add_time'=>time(),
        ];
        db::name("user")->insertGetId($info);
        return $this->succeed_json("注册成功,请前往登录!");
    }

    /*注册页面h5*/
    public function register_h5()
    {
        $config = Common_config::config("'register_url','logo'");
        $invite_code = input("param.invite_code");
        /*浏览器检测*/
        $user_agent = $_SERVER['HTTP_USER_AGENT'];
        $browser = '';
        if (strpos($user_agent, 'MicroMessenger') === false){//普通浏览器
            $browser = 'ordinary';
        } else {//微信浏览器
            $browser = 'weixin';
        }
        View::assign([
            'browser'=>$browser,
            'invite_code'=>$invite_code,
            'register_url'=>$config["register_url"],
            'logo'=>$config["logo"],
        ]);
        return View::fetch();
    }

    /**
     * 登录
     */
    public function login()
    {
        $user_name = input("param.user_name");
        $password = input("param.password");
        if (empty($user_name)){
            return $this->error_json("请输入账号");
        }
        if (empty($password)){
            return $this->error_json("password");
        }
        $user_info = db::name("user")->where("(user_name = '$user_name' or mobile = '$user_name')")->find();
        if (empty($user_info)){
            return $this->error_json("账号不存在");
        }
        if ($user_info["password"] != md5($password)){
            return $this->error_json("密码错误");
        }
        $ip = $_SERVER['REMOTE_ADDR'];
        $time = time();
        $info_login = [
            'user_id'=>$user_info["user_id"],
            'ip'=>$ip,
            'time_add'=>$time,
        ];
        db::name("user_login_log")->insertGetId($info_login);
        db::name("user")->where("user_id = $user_info[user_id]")->update(["login_time"=>$time]);
        $data["user_miyao"] = base64_encode($user_info["user_miyao"].'&'.$time);
        return $this->succeed_json("登录成功",$data);
    }

    /*找回密码*/
    public function retrieve()
    {
        $mobile = input("param.mobile");
        $password = input("param.password");
        $code = input("param.code");
        if (empty($mobile)){
            return $this->error_json("请输入手机号");
        }
        if (empty(input("param.password"))){
            return $this->error_json("请输入密码");
        }
        if (input("param.password") != input("param.password2")){
            return $this->error_json("两次密码不一致");
        }
        $user = db::name("user")->where("mobile = '$mobile'")->find();
        if (empty($user)){
            return $this->error_json("账号不存在");
        }
        $yanzhen = Common_note::verify($mobile,$code);
        if ($yanzhen["code"] == 400){
            return $this->error_json($yanzhen["msg"]);
        }
        $info["password"] = md5($password);
        db::name("user")->where("user_id = $user[user_id]")->data($info)->update();
        return $this->succeed_json("操作成功");
    }

    /*获取小程序openid*/
    public function setCodeuid()
    {
        $code = input("param.code");
        $config = Common_config::config("'app_id','app_secret'");
        $url = 'https://api.weixin.qq.com/sns/jscode2session?appid='.$config["app_id"].'&secret='.$config["app_secret"].'&js_code='.$code.'&grant_type=authorization_code';
        $data = file_get_contents($url);
        $data = json_decode($data,true);
        return $this->succeed_json("ok",$data);
    }

    /*小程序解密*/
    public function decryptData(Common_wechat $common_wechat)
    {
        $config = Common_config::config("'app_id'");
        $this->app_id = $config["app_id"];
        $encryptedData = input("param.encryptedData");
        $iv = input("param.iv");
        $sessionKey = input("param.sessionKey");//获取openid时候,获取的sessionKey
        $aesKey=base64_decode($sessionKey);
        $aesIV=base64_decode($iv);
        $aesCipher=base64_decode($encryptedData);
        $result=openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);
        $dataObj=json_decode( $result );
        if($dataObj  == NULL )
        {
            return $this->error_json("请求失败");
        }
        if( $dataObj->watermark->appid != $this->app_id)
        {
            return $this->error_json("请求失败");
        }
        $data = $result;
        $data_arr = json_decode($data,true);
        return $this->succeed_json("ok",$data_arr);
    }

    /*微信openid登录*/
    public function wx_login()
    {
        $open_id = input("param.openid");
        $access_token = input("param.access_token");
        $superior_id = input("param.superior_id")!=''?input("param.superior_id"):0;
        $ip = $_SERVER['REMOTE_ADDR'];
        $time = time();
        if (empty($open_id)){
            return $this->error_json("授权失败");
        }
        $result = [];
        if (!empty($access_token)){ //有参代表是公众号登录获取获取用户信息,无参代表小程序登录
            $data = [
                "access_token" => $access_token,
                "openid" => $open_id,
                "lang" => "zh_CN"
            ];
            $method="POST";
            $url = "https://api.weixin.qq.com/sns/userinfo?";
            $curl = curl_init(); // 启动一个CURL会话
            curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
            $result = json_decode(curl_exec($curl));//返回值
            $jsonString = json_encode($result);
            $result = json_decode($jsonString, true);
        }
        //会员信息
        $userinfo = db::name("user")->where("open_id = '$open_id'")->find();
        if (empty($userinfo)){
            $user_miyao = Common_user::user_miyao_add("30");
            $invitation_code = Common_user::user_invitation_code_add("7");
            $info = [
                'open_id'=>$open_id,
                'user_miyao'=>$user_miyao,
                'superior_id'=>$superior_id,
                'invitation_code'=>$invitation_code,
                'login_time'=>time(),
                'add_time'=>time(),
            ];
            if (!empty($result)){
                $info["head"] = $result["headimgurl"];
                $info["nickname"] = $result["nickname"];
            }
            db::name("user")->insertGetId($info);
            $userinfo = db::name("user")->where("open_id = '$open_id'")->find();
            $info_login = [
                'user_id'=>$userinfo["user_id"],
                'ip'=>$ip,
                'time_add'=>$time,
            ];
            db::name("user_login_log")->insertGetId($info_login);
            $user_miyao = base64_encode($userinfo["user_miyao"].'&'.$time);
            $data = [
                'userinfo'=>$userinfo,
                'user_miyao'=>$user_miyao,
                'open_id'=>$open_id,
            ];
            return $this->succeed_json("ok",$data);
        }else{
            $info_login = [
                'user_id'=>$userinfo["user_id"],
                'ip'=>$ip,
                'time_add'=>$time,
            ];
            db::name("user_login_log")->insertGetId($info_login);
            $user_miyao = base64_encode($userinfo["user_miyao"].'&'.$time);
            $data = [
                'userinfo'=>$userinfo,
                'user_miyao'=>$user_miyao,
                'open_id'=>$open_id,
            ];
            $info["login_time"] = time();
            if (!empty($result)){
                $info["head"] = $result["headimgurl"];
                $info["nickname"] = $result["nickname"];
            }
            db::name("user")->where("user_id = $userinfo[user_id]")->update($info);
            return $this->succeed_json("ok",$data);
        }
    }

    /*uniapp获取公众号openid*/
    public function GetOpenid_uniapp(Common_weixinpay $common_weixinpay)
    {
        $code = input("param.code");
        $openid = $common_weixinpay->GetOpenid_uniapp($code);
        return $this->succeed_json("ok",$openid);
    }

    /*钉钉登录处理*/
    public function login_dd(Common_dingtalk $common_dingtalk)
    {
        $authCode = input("param.authCode");
        $data = $common_dingtalk->getuserinfo($authCode);
        if ($data["errcode"] != 0){
            return $this->error_json($data["errmsg"]);
        }
        $result = $data["result"];
        $userid = $data["result"]["userid"];//钉钉会员id
        $user_info = db::name("user")->where("userid = $userid")->field("user_id,userid,user_miyao,name,mobile,title")->find();
        if (empty($user_info)){
            return $this->error_json("请联系管理员同步钉钉会员!");
        }
        $ip = $_SERVER['REMOTE_ADDR'];
        $time = time();
        $info_login = [
            'user_id'=>$user_info["user_id"],
            'ip'=>$ip,
            'time_add'=>$time,
        ];
        db::name("user_login_log")->insertGetId($info_login);
        db::name("user")->where("user_id = '$user_info[user_id]'")->update(["login_time"=>$time]);
        $user_miyao = base64_encode($user_info["user_miyao"].'&'.$time);
        $data = [
            'userinfo'=>$result,
            'user_miyao'=>$user_miyao,
        ];
        return $this->succeed_json("ok",$data);
    }
}