Enumeration
로그인 응답 차이


Rest API

게시글 작성자 조회


무차별 대입 공격




References
Last updated
워드프레스에서 기본적인 설정을 사용한다면 다음의 방법들을 사용하여 사용자 계정 목록을 열거하는 것이 가능합니다.
기본적으로 워드프레스 기반의 사이트는 최상위 경로에서 wp-admin으로 접근 시 관리자 페이지로 접근할 수 있고, 존재하는 계정과 존재하지 않는 계정을 로그인 응답으로부터 구분할 수 있습니다.


인가되지 않은 사용자로부터 Rest API 요청에 따른 응답이 되는 워드프레스 기본 설정의 경우 워드프레스 서버의 최상위 경로에서 ?rest_route=/wp/v2/users , /wp-json/wp/v2/users 엔드포인트로 접근하면 slug 키 값으로 사용자 계정 이름을 반환합니다.

워드프레스에서 게시글을 1회라도 작성한 사용자는 작성자를 검색하는 파라미터에 대한 요청을 통해 식별할 수 있습니다. 이 값은 게시글을 작성한 순서대로 인덱스 값이 올라갑니다.


위에서 언급한 방법들은 모두 다른 방식으로 사용자 목록을 열거할 수 있기 때문에 버전이나 서버 설정 등에 따른 반응의 차이에 따라 맞는 방법을 선택해야 합니다.
xmlrpc는 2000년대 초 Rest API가 보급화되기 이전 서로 다른 언어와 시스템으로 작성한 데이터를 주고받기 위해 제공하던 서비스입니다.
현재는 워드프레스에서 xmlrpc 기능을 사용할 일이 거의 존재하지 않아 언제 사라져도 이상하지 않으며, 이 기능에서 보안 취약점이 발생할 수 있기 때문에 비활성화 하거나 파일을 삭제하는 것을 권장하기도 합니다.
이 파일이 존재하거나 보안 플러그인을 사용하지 않을 경우 정상적으로 이용할 수 있으며, 엔드포인트로 접근함에 따라 그 여부를 확인할 수 있습니다.

xmlrpc.php는 POST 요청만을 허용하기 때문에 상기와 같은 405 오류가 반환된다면 양성 반응입니다.
xmlrpc에서는 워드프레스의 함수들을 XML 방식으로 요청하여 호출할 수 있는데, xp.getUsersBlogs는 사용자의 계정정보를 받아서 해당 사용자의 정보에 대한 구조체를 반환하는 함수입니다.

따라서 공격자는 xmlrpc.php의 POST 요청으로 사용자 계정정보를 무작위로 대입하여 xp.getUsersBlogs 함수를 호출하고, 이 함수의 호출 결과가 있다면 해당 계정이 유효함을 추론할 수 있습니다.


Last updated
<?xml version="1.0"?>
<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value><string>admin</string></value></param>
<param><value><string>password123</string></value></param>
</params>
</methodCall>