前言:
此刻各位老铁们对“php后台密码破解”大约比较看重,看官们都想要了解一些“php后台密码破解”的相关文章。那么小编同时在网络上搜集了一些有关“php后台密码破解””的相关资讯,希望同学们能喜欢,咱们快快来了解一下吧!最近打算开发个个人博客网站,网上做博客的框架有很多,记得之前捣腾过wordpress框架,本打算拿出来继续捣腾,没想到忘记后台密码了,因为框架在本地服务器上无法通过邮箱验证,于是乎网上各种找方法,什么修改数据库md5,password,命令行,什么5种修改方式,七种修改方式,通通不奏效。本打算重新安装,但作为一名开发人员,源码在手,还能找不回来密码?于是乎开始了我的wordpress源码找密码之旅。
问题来了,该从哪里入手?头脑闪现了一个单词install(安装),于是打开目录查找含这个单词的文件,没想到在框架根目录下的/wp-admin目录下真有个install.php文件,有了安装入口文件,还能不知道是怎么配置的吗?于是继续顺藤摸瓜,寻寻觅觅。
最终找到两个函数:
wp_generate_password( 12, false );//生成12位随机密码 wp_hash_password( $pwd );//对生成的密码进行加密
index.php中调用这两个函数,将生成的加密密码替换掉数据库中的加密密码,再次登录,搞定。
接下来,阐述下捣腾的过程,涉及到源码,感兴趣的小伙伴可以继续往下看。
一、入口文件(index.php)查找安装流程入口(install.php)
访问域名或IP,默认会访问到index文件,这是做网站开发都知道的。经过载入关系(从上到下)的查找,(说明:以下斜杆“/”表示框架根目录)
入口文件(/index.php)中 载入 //加载 头部文件,以下依次载入头部文件(/wp-blog-header.php) 中载入 //作用:加载框架环境和模板加载文件(/wp-load.php)中载入 //作用:加载框架库配置文件(/wp-config.php)中载入 //作用:做配置,如数据库配置、常量配置等设置文件(/wp-settings.php)//作用:加载相关文件,调用相关函数,开始走不同流程
在根目录下的wp-settings.php文件中调用了判断是否安装框架的函数
// Run the installer if WordPress is not installed.wp_not_installed();
通过wp-settings.php中的载入关系查找到该函数在
/wp-includes目录下的load.php文件中,函数中代码如下:
function wp_not_installed() { if ( is_multisite() ) { if ( ! is_blog_installed() && ! wp_installing() ) { nocache_headers(); wp_die( __( 'The site you have requested is not installed properly. Please contact the system administrator.' ) ); } } elseif ( ! is_blog_installed() && ! wp_installing() ) { nocache_headers(); require ABSPATH . WPINC . '/kses.php'; require ABSPATH . WPINC . '/pluggable.php'; $link = wp_guess_url() . '/wp-admin/install.php'; //载入安装文件 wp_redirect( $link ); die(); }}
二、进入wp-admin/install.php
该文件为前端安装页面,根据页面表单查找到关键词password,根据该关键词进行追踪,
(1)提交表单处理:
/*接收前端提交的参数*/ $weblog_title = isset( $_POST['weblog_title'] ) ? trim( wp_unslash( $_POST['weblog_title'] ) ) : ''; $user_name = isset( $_POST['user_name'] ) ? trim( wp_unslash( $_POST['user_name'] ) ) : ''; $admin_password = isset( $_POST['admin_password'] ) ? wp_unslash( $_POST['admin_password'] ) : ''; $admin_password_check = isset( $_POST['admin_password2'] ) ? wp_unslash( $_POST['admin_password2'] ) : ''; $admin_email = isset( $_POST['admin_email'] ) ? trim( wp_unslash( $_POST['admin_email'] ) ) : ''; $public = isset( $_POST['blog_public'] ) ? (int) $_POST['blog_public'] : 1;/*参数做合法性校验*/ // Check email address. $error = false; if ( empty( $user_name ) ) { // TODO: Poka-yoke. display_setup_form( __( 'Please provide a valid username.' ) ); $error = true; } elseif ( sanitize_user( $user_name, true ) !== $user_name ) { display_setup_form( __( 'The username you provided has invalid characters.' ) ); $error = true; } elseif ( $admin_password !== $admin_password_check ) { // TODO: Poka-yoke. display_setup_form( __( 'Your passwords do not match. Please try again.' ) ); $error = true; } elseif ( empty( $admin_email ) ) { // TODO: Poka-yoke. display_setup_form( __( 'You must provide an email address.' ) ); $error = true; } elseif ( ! is_email( $admin_email ) ) { // TODO: Poka-yoke. display_setup_form( __( 'Sorry, that isn’t a valid email address. Email addresses look like <code>username@example.com</code>.' ) ); $error = true; } if ( false === $error ) { $wpdb->show_errors(); //调用框架安装函数 $result = wp_install( $weblog_title, $user_name, $admin_email, $public, '', wp_slash( $admin_password ), $loaded_language );
根据提交表单处理流程,最终调用了wp_install()函数处理表单数据,进入该函数查看流程。
(2)、根据载入关系,在/wp-admin\includes\upgrade.php文件中查找到该函数,代码如下:
function wp_install( $blog_title, $user_name, $user_email, $is_public, $deprecated = '', $user_password = '', $language = '' ) { if ( ! empty( $deprecated ) ) { _deprecated_argument( __FUNCTION__, '2.6.0' ); } wp_check_mysql_version(); wp_cache_flush(); make_db_current_silent(); populate_options(); populate_roles(); update_option( 'blogname', $blog_title ); update_option( 'admin_email', $user_email ); update_option( 'blog_public', $is_public ); // Freshness of site - in the future, this could get more specific about actions taken, perhaps. update_option( 'fresh_site', 1 ); if ( $language ) { update_option( 'WPLANG', $language ); } $guessurl = wp_guess_url(); update_option( 'siteurl', $guessurl ); // If not a public site, don't ping. if ( ! $is_public ) { update_option( 'default_pingback_flag', 0 ); } /* * Create default user. If the user already exists, the user tables are * being shared among sites. Just set the role in that case. */ $user_id = username_exists( $user_name ); $user_password = trim( $user_password ); $email_password = false; $user_created = false; if ( ! $user_id && empty( $user_password ) ) { /************************************GET ^_^*********************************/ $user_password = wp_generate_password( 12, false );//这里得到密码生成函数 /*****************************************************************************/ $message = __( '<strong><em>Note that password</em></strong> carefully! It is a <em>random</em> password that was generated just for you.' ); $user_id = wp_create_user( $user_name, $user_password, $user_email );//创建用户 update_user_meta( $user_id, 'default_password_nag', true ); $email_password = true; $user_created = true; } elseif ( ! $user_id ) { // Password has been provided. $message = '<em>' . __( 'Your chosen password.' ) . '</em>'; $user_id = wp_create_user( $user_name, $user_password, $user_email ); $user_created = true; } else { $message = __( 'User already exists. Password inherited.' ); } $user = new WP_User( $user_id ); $user->set_role( 'administrator' ); if ( $user_created ) { $user->user_url = $guessurl; wp_update_user( $user ); } wp_install_defaults( $user_id ); wp_install_maybe_enable_pretty_permalinks(); flush_rewrite_rules(); wp_new_blog_notification( $blog_title, $guessurl, $user_id, ( $email_password ? $user_password : __( 'The password you chose during installation.' ) ) ); wp_cache_flush(); /** * Fires after a site is fully installed. * * @since 3.9.0 * * @param WP_User $user The site owner. */ do_action( 'wp_install', $user ); return array( 'url' => $guessurl, 'user_id' => $user_id, 'password' => $user_password, 'password_message' => $message, ); }
▲▲▲到这里我们找到了 (密码生成函数 ^_^):
$user_password = wp_generate_password( 12, false );
(3)、存入数据库的密码是通过加密的,所以还得继续捣腾出密码加密方法:
$user_id = wp_create_user( $user_name, $user_password, $user_email );//创建用户
根据文件载入关系查找创建用户函数wp_create_user(),结果在/wp-includes目录下找到该函数
function wp_create_user( $username, $password, $email = '' ) { $user_login = wp_slash( $username ); $user_email = wp_slash( $email ); $user_pass = $password; /** * compact() 函数创建一个包含变量名和它们的值的数组 * 任何没有变量名与之对应的字符串都被略过 */ //将三个变量存入数组并赋值给$userdata $userdata = compact( 'user_login', 'user_email', 'user_pass' ); return wp_insert_user( $userdata );}
可以看到,该函数中又调用了wp_insert_user()函数,在当前文件中查到到该函数。
function wp_insert_user( $userdata ) { global $wpdb; if ( $userdata instanceof stdClass ) { $userdata = get_object_vars( $userdata ); } elseif ( $userdata instanceof WP_User ) { $userdata = $userdata->to_array(); } // Are we updating or creating? if ( ! empty( $userdata['ID'] ) ) { $user_id = (int) $userdata['ID']; $update = true; $old_user_data = get_userdata( $user_id ); if ( ! $old_user_data ) { return new WP_Error( 'invalid_user_id', __( 'Invalid user ID.' ) ); } // Hashed in wp_update_user(), plaintext if called directly. $user_pass = ! empty( $userdata['user_pass'] ) ? $userdata['user_pass'] : $old_user_data->user_pass; } else { $update = false; /************************************GET ^_^*********************************/ // Hash the password. $user_pass = wp_hash_password( $userdata['user_pass'] );//生成加密密码 /*****************************************************************************/ }/*.....此处省略无关代码....*/ return $user_id;}
▲▲▲到这里我们找到了 (密码加密函数 ^_^):
$user_pass = wp_hash_password( $userdata['user_pass'] );
至于密码生成和加密的详细流程,感兴趣的小伙伴可以继续追踪。
密码生成函数wp_generate_password和密码加密函数wp_hash_password
所在文件:/wp-includes\pluggable.php
好了,欢迎评论点赞转发,^_^!
标签: #php后台密码破解