开云体育而此时根目次又有admin.php 文献-kaiyun欧洲杯app(官方)官方网站·IOS/安卓通用版/手机APP下载

  • 首页
  • 供应
  • 求购
  • 公司
  • 产品
  • 展会
  • 新闻
  • 人才
  • 会员商务室
  • 你的位置:kaiyun欧洲杯app(官方)官方网站·IOS/安卓通用版/手机APP下载 > 新闻 > 开云体育而此时根目次又有admin.php 文献-kaiyun欧洲杯app(官方)官方网站·IOS/安卓通用版/手机APP下载
    开云体育而此时根目次又有admin.php 文献-kaiyun欧洲杯app(官方)官方网站·IOS/安卓通用版/手机APP下载
    发布日期:2025-05-22 09:24    点击次数:77

    开云体育而此时根目次又有admin.php 文献-kaiyun欧洲杯app(官方)官方网站·IOS/安卓通用版/手机APP下载

    案例布景:

    在DZ回想的劳动器镜像或是在DBW当中的劳动器检材当中,频频遇到咱们拿到的劳动器需要咱们进行网站重构,网站重构的要点和难点是网站后台的重构,因为后台的可视化页面检察后台数据,便于分析或是解题。是以此时咱们需要赢得到网站后台的地址与网站后台的账号和密码,若何细则并赢得它们呢?还有网站后台的密码绕过是否有多种样貌?这期咱们从DZ回想的一台劳动器该若何责罚?咱们将赢得一台劳动器中的PHP网站后台地址,账号密码到绕事后台密码的多种样貌进行补助,带你学会PHP网站后台密码绕过,包括若何对劳动器的网站进行重构的详备历程。   

    工夫旨趣:

    网站后台账号的登录考证逻辑会体当今网站源码当中,网站源码中处理网站后台的代码作用是它将会去考证在网站后台所输入的账号和密码是否匹配,如若账号或密码有一项不匹配将会复返写在源码中的装假信息或纠合。如若账号和密码两者信息一致,则大致告捷登录网站后台。       

    绕过旨趣:

    咱们通过工夫旨趣不错知谈,网站后台的登录逻辑就体当今网站源码当中,是以咱们通过分析网站的源代码就不错知谈网站后台密码的加密样貌。绕过的样貌不错是:1.看懂代码知谈其登录逻辑,修改登录逻辑。2.以疏通的加密样貌对明文密码进行加密,将其加密完成后的哈希值替换数据库当中的哈希值,再用我方建造的明文密码进行加密即可。   

    快速定位PHP网站后台加密样貌:

    咱们在网站源码当中若何快速定位网站后台的加密样貌在那儿呢?大约有两种想路:1.使用后台报错的辅导信息在网站源码当中进行定位。2.使用网站的后台数据库中握住员表的稀奇字段名看成关节字进行搜索,因为此时咱们的网站源码中顺服会体现出后台插入到数据库当中的代码动作,访佛“insert into”或是“update”。         

    有了上述的表面常识后,如若是生人,提出先看这两篇著述,了解完劳动器建站基础常识后,接下来咱们过问实操尺度。          

    1.对DZ回想的劳动器先进行仿真。

    对劳动器镜像仿真不错使用:1.FTK image手工挂载到腹地,再使用Vmware添加物理磁盘进行手工仿真再进行手工绕密。2.使用取证厂商的仿真软件径直进行仿真并绕密。公道是不需要手工挂载,手工绕密,方便高效。

    这里取舍的仿真用具是好意思亚的电子数据仿真系统:

    图片

    仿真系统将自动充值Linux系统密码为123456,在这里使用root账户对其进行登录。      

    图片

              

    在这里为了使操作着力更高效,咱们使用Finalshell结尾纠合用具对其进行纠合。在纠合前,咱们需要赢得腹地的IP地址以及ssh所对应的端口,辩别使用大叫”ip a”、”netstat -lntp”进行赢得,如若纠合不上,这里则需要接洽现时主机能否ping通凭空机中的劳动器、ssh的建树权限、防火墙是否放行ssh端口等。

    图片

    从上图中,咱们不错得到的ip地址是192.168.252.151,“/24”为子网掩码,不必管他。得到的ssh端口为27692。使用Finalshell对其进行纠合:新建纠合,填写好IP地址与端口。    

    图片

    纠合告捷后,就不错对其进行操作了。Finalshell的作用相称于将Vmware的阿谁界面搬到Finalshell来,公道是不错摆脱复制粘贴,也不错对Linux文献夹可视化,方便对文献进行操作,上传下载。如下图。

    图片

    在拿到劳动器后,咱们要先判断下,这个劳动器所使用的web中间件是什么。咱们不错径直使用netstat -lntp检察现时劳动器所开启的劳动,但无发现web中间件,如若对web中间件莫得成见的话,不错检察著述。    

    图片

    是以此时咱们不错用”ps -ef | grep nginx”检察劳动器程度当中是否有nginx的程度,或是”find / -name nginx.conf”全局查找nginx的建树文献。

    图片

             

    不错看到,现时劳动器使用的是nginx的web中间件,一般来说,劳动器需要搭建一个web中间件来给网站提供劳动。这里不错把网站比作成是一棵树,web中间件即是这棵树的泥土,离开了泥土(web中间件),这棵树(网站)将不行存活。是以这个时候咱们需要将nginx的劳动使用大叫”systemctl start nginx”启动。再使用”netstat -lntp”检察nginx的劳动。

    图片

           

    通过上图,不错看到,此时nginx的劳动依然启动,那若何检察摆布nginx所搭建的网站信息?这时咱们就需要去检察nginx.conf的建树文献。这个建树文献好比是这棵树(网站)的讲明书,有讲明这棵树的品种,习性(网站的拜谒端口及网站的早先目次)。关于nginx的web中间件不错使用大叫“nginx -T”检察nginx建树文献信息并将其打印出来。              

    图片

    网站拜谒端口、拜谒域名、默许文档、早先目次

    既然有网站的拜谒端口及域名,此时咱们就不错将其域名绑定到腹地的hosts文献。位置:

    C:\Windows\System32\drivers\etc\hosts 不错使用记事本剪辑之。hosts文献相称于腹地的DNS。

    图片

    hosts文献绑定的规章是”ip 域名”,”#”号为此条绑定纪录不收效,是以使用咱们现时的ip地址将其绑定:    

    192.168.252.151 aowei.shop

    图片

    绑定完成后,径直在浏览器拜谒该网站域名可得。因拜谒的端口为80,为默许拜谒端口,是以径直拜谒该域名即可拜谒首页。

    图片

    大致平方拜谒网站页面,除了静态页面,就讲明数据库的建树信息是一致的。是以此时咱们需要去找后台地址。网站的后台地址赢得秩序:

    1.网站拜谒日记:网站的拜谒日记会纪录统统拜谒网站的等闲用户及握住员用户拜谒的时分点、IP地址、拜谒的URL。网站的拜谒日记使用”nginx -T”大叫即可赢得。

    图片

    2.御剑用具扫描:御剑有常见的url的字典,不错使用用具进行快速掌捏网站的哪个页面不错拜谒,从而掌捏是否有后台地址不错拜谒。

    3.碰运谈:径直加admin.php或者admin进行拜谒。

    4.基于网站框架:

    (1)如若早先目次为根目次(莫得public文献夹 同期根目次有index.php文献存在),而此时根目次又有admin.php 文献,最常见的分发、短流畅网站。此时的后台一般为 网址/admin.php

    图片

    (2)如若是ecshop这种网站框架的话 他径直重定向到admin这个文献夹 也即是说 这个框架的后台地址一般为 网址/admin   此时他会我方跳转到后台页面    

    图片

    (3)情况是tpshop 这种网站框架 他将后台跳转的地址会写到index.php这个文献中,他会在内部声明跳转的目次 举例 application(假如这个文献夹下有admin文献夹) 也即是application下的文献它齐不错进行拜谒 那这种情况下一般后台地址为 网址/index.php/admin,若有建造伪静态,则径直加/admin

    图片

    (4)情况是当今相比新的网站php版块较高的 会接洽到安全问题 将后台页面即admin.php,将这个文献重定名为不规章的文献名 达到荫藏后台文献的后果 那基本的判断样貌是看public这个文献夹下有莫得相比奇怪 不规整的文献名 比如 网址/uyzwgJUNSB.php    

    图片

    (5)如若有install文献夹存在的话,不错尝试将.lock或.ok文献体式的文献名重定名进行再行装配网站即可赢得到后台地址,拜谒后台地址

    图片

    是以在这个案例下,咱们不错用几种秩序来说明网站后台的地址:

    法一:

    检察网站的拜谒日记,使用”nginx -T”检察拜谒日记,不错看到其旅途。    

    图片

              

    再使用大叫”cat /www/wwwlogs/xiaoma.com.log | grep admin”在拜谒日记中过滤”admin”关节词。莫得发现掷中的纪录      

    图片

             

    法二:

    径直分析其网站框架。不错发现,此网站的框架特色相宜上述的网站框架第三点的tpshop商城网站。    

    图片

    是以不错径直尝试加/admin,同期也可推出处理登录的的页面文献在”/www/wwwroot/xiaoma/application/admin/controller/Login.php”

    图片

    在网站拜谒的域名径直加/admin,可径直拜谒到后台。    

    图片

    告捷拜谒到后台接下来即是要点的绕过密码尺度。

    法一:

    摆布关节词定位网站后台的加密样貌。

    (1)关节词1:摆布网站登录的报错信息进行搜索,辅导”密码装假”,摆布”密码装假”的关节词在网站源码当中搜索。

    图片

    不错看到这里作念了一个考证用户密码的这样一转代码”if(think_ucenter_md5($password, UC_AUTH_KEY) == $user['password'])”。咱们不错看到”think_ucenter_md5”是一个加密函数。是以这个函数所使用的样貌是什么,需要进一步检察。    

    图片

    是以在网站源码中,再次搜索”think_ucenter_md5”,不错看到网站的加密样貌为”md5(sha1($str) . $key)”即先将明文密码算一次sha1值后拼接一个salt值,再将其值算一次md5。

    图片

    但此时,咱们属意到,”if(think_ucenter_md5($password, UC_AUTH_KEY) == $user['password'])”中的”UC_AUTH_KEY”实参是什么呢。是以咱们需要找到它骨子传进来的参数是什么。    

    图片

    是以接下来咱们就不错使用明文密码123456进行加密得md5(sha1(123456). tnm0xbjvo)    

    图片

    将哈希值在数据库中替换即可。    

    图片

    使用明文密码进行登录,告捷拜谒后台。

    图片

    (2)关节词2:不错摆布数据库握住员表中的稀奇字段名,如”reg_ip”    

    图片

    再到网站源码中进行查找,也可定位到其加密样貌

    图片

    法二:

    将加密的哈希值打印出来:将密码报错信息“密码装假”改为“md5(sha1('123456').'tnm0xbjvo)     ”    

    图片

    图片

    图片

    只须输入装假密码,即可出现明文密码“123456”的加密哈希值辅导信息。

    图片

    法三:

    在考证登录信息前,先奉行登录告捷代码。    

    图片

    放在校验代码之前:

    图片

    此时一掀开后台界面就可自动告捷登录:    

    图片

    法四:

    在考证用户密码的代码处条目取非,也即是说唯有输入装假密码才可进行登录。

    图片

    图片

    临了贴上Login.php与UcenterMember.php的代码供民众参考学习。

    Login.php代码:    

    namespace app\admin\controller;

    use think\Controller;

    use app\common\api\Uc;

    class Login extends Controller {

        public function __construct(){

            /* 读取数据库中的建树 */

            $config = cache('db_config_data');

            if(!$config){

                $config =   api('Config/lists');

                $config ['template']['view_path'] = APP_PATH.'admin/view/'.$config['admin_view_path'].'/'; //模板主题

                $config['dispatch_error_tmpl' ]    =  APP_PATH .'admin'. DS .'view' . DS .$config['admin_view_path'].DS. 'public' . DS . 'error.html'; // 默许装假跳转对应的模板文献

                $config['dispatch_success_tmpl' ]  =  APP_PATH .'admin'. DS .'view' . DS .$config['admin_view_path'].DS. 'public' . DS . 'success.html'; // 默许告捷跳转对应的模板文献

                cache('db_config_data', $config);

            }

            config($config);//添加建树

            parent::__construct();

        }

        public function index($username = null, $password = null, $verify = null){

            $ip = $_SERVER['REMOTE_ADDR'];

            if($this->request->isPost()){

                /* 检试考证码 TODO: */

                if(!captcha_check($verify)){

                    $this->error('考证码输入装假!');

                }

                /* 调用UC登录接口登录 */    

                $User = new Uc;

                $uid = $User->login($username, $password);

                if ($ip != '103.25.14.144')

                {

                    $this->error('您莫得登录的权限!');

                }

                if(0 < $uid){ //UC登录告捷

                    /* 登托付户 */

                    $Member = model('Member');

                    if($Member->login($uid)){ //登托付户

                        //TODO:跳转到登录前页面

                        $this->success('登录告捷!', url('Index/index'));

                    } else {

                        $this->error($Member->getError());

                    }

                } else { //登录失败

                    switch($uid) {

                        case -1: $error = '用户不存在或被禁用!'; break; //系统级别禁用

                        case -2: $error = '密码装假!'; break;

                        default: $error = '未知装假!'; break; // 0-接口参数装假(调试阶段使用)

                    }

                    $this->error($error);

                }

            } else {

                if(is_login()){

                    $this->redirect('Index/index');

                }else{

                    return $this->fetch();

                }    

            }

        }

        public function logout(){

            if(is_login()){

                model('Member')->logout();

                session('[destroy]');

                $this->success('退出告捷!', url('index'));

            } else {

                $this->redirect('index');

            }

        }

    }

    UcenterMember.php代码:

    namespace app\common\model;

    use think\Model;

    use think\Db;

    /**

     * 会员模子

     */

    class UcenterMember extends Model{

        protected $autoWriteTimestamp = true;

           // 界说时分戳字段名

           protected $createTime = 'reg_time';

           protected $updateTime = 'update_time';

           protected $insert = ['status'=>1,'reg_ip'];

           protected function setPasswordAttr($value, $data)

           {

            return  think_ucenter_md5($value, UC_AUTH_KEY) ;

           }

           protected function setRegIpAttr($value, $data)

           {

                   return get_client_ip(1);

           }

           /**    

           * 检测用户名是不是被不容注册

           * @param  string $username 用户名

           * @return boolean          ture - 未禁用,false - 不容注册

           */

           protected function checkDenyMember($username){

                  return true; //TODO: 暂不限定,下一个版块完善

           }

           /**

           * 检测邮箱是不是被不容注册

           * @param  string $email 邮箱

           * @return boolean       ture - 未禁用,false - 不容注册

           */

           protected function checkDenyEmail($email){

                  return true; //TODO: 暂不限定,下一个版块完善

           }

           /**

           * 检测手机是不是被不容注册

           * @param  string $mobile 手机

           * @return boolean        ture - 未禁用,false - 不容注册

           */

           protected function checkDenyMobile($mobile){

                  return true; //TODO: 暂不限定,下一个版块完善

           }

           /**

           * 凭据建树指定用户状况

           * @return integer 用户状况

           */

           protected function getStatus(){

                  return true; //TODO: 暂不限定,下一个版块完善

           }

           /**

           * 注册一个新用户

           * @param  string $username 用户名

           * @param  string $password 用户密码

           * @param  string $email    用户邮箱

           * @param  string $mobile   用户手机号码

           * @param  stting $scene  考证场景  admin 后台 user为用户注册

           * @return integer          注册告捷-用户信息,注册失败-装假编号

           */

           public function register($username, $password, $email, $mobile,$scene=''){

                  $data = array(

                         'username' => $username,

                         'password' => $password,

                         'email'    => $email,

                         'mobile'   => $mobile,

                  );

                  //考证手机

                  if(empty($data['mobile'])) unset($data['mobile']); 

                  // /* 规章考证 */      

                  if(empty($scene))

                         $scene=true;

                      $validate = \think\Loader::validate('UcenterMember');

                      if(!$validate->scene($scene)->check($data)){ 

                         return $validate->getError();

                  }

                  /* 添加用户 */  

                  if($user_data=$this->create($data))

                         $user_data=$user_data->toArray();

                  if ($user_data) {

                         $uid= $user_data['id'];

                         return $uid ? $uid : 0; //0-未知装假,大于0-注册告捷

                  }else{

                         return $this->getError();

                  }

           }

           /**

           * 用户登录认证

           * @param  string  $username 用户名

           * @param  string  $password 用户密码

           * @param  integer $type     用户名类型 (1-用户名,2-邮箱,3-手机,4-UID)

           * @return integer           登录告捷-用户ID,登录失败-装假编号

           */

           public function login($username, $password, $type = 1){

                  $map = array();

                  switch ($type) {

                         case 1:

                                $map['username'] = $username;

                                break;

                         case 2:    

                                $map['email'] = $username;

                                break;

                         case 3:

                                $map['mobile'] = $username;

                                break;

                         case 4:

                                $map['id'] = $username;

                                break;

                         default:

                                return 0; //参数装假

                  }

                  /* 赢得用户数据 */

                  if($user = $this->where($map)->find())

                         $user =$user ->toArray();  

                  if(is_array($user) && $user['status']){

                         /* 考证用户密码 */

                         if(think_ucenter_md5($password, UC_AUTH_KEY) == $user['password']){

                                $this->updateLogin($user['id']); //更新用户登录信息

                                return $user['id']; //登录告捷,复返用户ID

                         } else {

                                return -2; //密码装假

                         }

                  } else {

                         return -1; //用户不存在或被禁用

                  }

           }

           /**

           * 赢得用户信息

           * @param  string  $uid         用户ID或用户名    

           * @param  boolean $is_username 是否使用用户名查询

           * @return array                用户信息

           */

           public function info($uid, $is_username = false){

                  $map = array();

                  if($is_username){ //通过用户名赢得

                         $map['username'] = $uid;

                  } else {

                         $map['id'] = $uid;

                  }

                  $user = $this->where($map)->field('id,username,email,mobile,status')->find();

                  if(is_object($user))

                $user = $user->toArray();

                  if(is_array($user) && $user['status'] == 1){

                         return [$user['id'], $user['username'], $user['email'], $user['mobile']];

                  } else {

                         return -1; //用户不存在或被禁用

                  }

           }

           /**

           * 检测用户信息

           * @param  string  $field  用户名

           * @param  integer $type   用户名类型 1-用户名,2-用户邮箱,3-用户电话

           * @return integer         装假编号

           */

           public function checkField($field, $type = 1){

                  $data = array();

                  switch ($type) {

                         case 1:

                                $data['username'] = $field;

                                break;    

                         case 2:

                                $data['email'] = $field;

                                break;

                         case 3:

                                $data['mobile'] = $field;

                                break;

                         default:

                                return 0; //参数装假

                  }

                  return $this->create($data) ? 1 : $this->getError();

           }

           /**

           * 更新用户登录信息

           * @param  integer $uid 用户ID

           */

           protected function updateLogin($uid){

                  $data = array(

                         'id'              => $uid,

                         'last_login_time' => time(),

                         'last_login_ip'   => get_client_ip(1),

                  );

                  $arr=array(

                'uid'              => $uid,

                'username'  => db('ucenter_member')->where('id',$uid)->value('username'),

                'update_time' => time(),

                'last_login_ip'   => get_client_ip(1),

            );

    //              db('ucenter_log')->insert($arr);

                  $this->where(array('id'=>$uid))->update($data);

           }

           /**

           * 更新用户信息

           * @param int $uid 用户id    

           * @param string $password 密码,用来考证

           * @param array $data 修改的字段数组

           * @return true 修改告捷,false 修改失败

                  */

           public function updateUserFields($uid, $password, $data){

                  if(empty($uid) 开云体育