Target: Game Zone @TryHackMe
Core Techniques: SQL Injection, SSH Tunneling, SQLMap (for SQLi Automation), Webmin Privilege Escalation
Target IP: 10.10.41.232
Reconnaissance
먼저 Nmap을 통해 대상 서버에 열려있는 포트를 스캔하면, 아래 그림에서 볼 수 있듯 22번 포트의 ssh 프로토콜과 http 프로토콜의 80번 포트가 열려있는 것을 확인할 수 있다.
/etc/hosts 파일에 대상 서버 IP와 gamezone.thm 도메인을 매핑한 후, 대상 서버의 80번 포트에 접근하도록 한다. 그러면 아래 그림에서 보듯, 특정 웹사이트가 나오고 해당 웹사이트에는 로그인 기능이 존재하는 것을 확인할 수 있다.
로그인을 우회하기 위해 아래 그림에서와 같이, SQLi 공격을 수행하여 로그인 인증 우회가 가능한지 확인해보도록 한다. 여기서, ID는 ' or 1=1 -- 이며, PASSWORD는 1234로 임의의 값을 입력하였다. 만약 해당 웹 애플리케이션이 SQLi에 취약한 경우, 로그인 인증이 우회되면서, SELECT절을 통해 반환된 테이블 내 제일 첫번째 레코드의 사용자로 로그인 되게 된다.
아래 그림에서 보듯, 해당 웹앱은 SQLi에 취약하며, 따라서 로그인 인증 우회가 가능하다. 그리고 리다이렉션된 경로는, /portal.php에 해당하며, 게임 리뷰를 검색할 수 있는 기능이 존재한다.
해당 검색 기능을 이용하여 검색 시, Burpsuite을 통해 Request를 인터셉트하도록 한다.
인터셉트한 요청 메시지를 req.txt 파일로 저장하여, SQLi 공격을 자동화 할 수 있는 SQLMap을 이용하여, 검색 시 사용되는 searchitem 파라미터에 SQLi 취약점이 존재하는지 확인해도록 한다.
먼저 아래와 같이, -r 옵션과 --dbs 옵션을 통해 SQLi 취약점이 존재하는지, 그리고 존재한다면 어떤 종류의 SQLi가 존재하는지, 또한 해당 웹앱과 연동된 RDBMS를 파악하도록 한다.
아래 그림에서 보듯, searchitem 파라미터는 boolean-based blind, error-based, time-based blind, UNION query 종류의 SQLi에 취약점이 존재하는 것을 확인할 수 있다. 또한 해당 웹앱과 연동된 RDBMS는 MySQL이다.
Exploit
검색 시에 사용되는 searchitem 파라미터에 SQLi 취약점이 존재한다는 것을 알았고, 이어서, 아래 명령어를 통해, SQLi 취약점을 악용하여 해당 웹앱과 연동된 데이터베이스 내의 내용을 덤프하도록 한다.
sqlmap -r req.txt --dbms=mysql --dump --batch
그러면 아래 그림에서 확인할 수 있듯, db라는 데이터베이스 내, users 테이블의 내용을 확인할 수 있고, 해당 테이블 내의 필드 이름이 username, pwd 인 것으로 보아, 해당 웹 애플리케이션의 아이디와 비밀번호임을 알 수 있다.
hash-identifier를 이용하여 위 해쉬 처리된 비밀번호에 적용된 해싱 알고리즘을 파악하도록 한다. 그러면 아래 그림에서 보듯, SHA-256 혹은 HAVAL-256이 위 값에 적용된 해싱 알고리즘인 것을 파악할 수 있다.
아래와 같이 John The Ripper를 이용하여 해싱된 값의 평문 값을 알아내도록 한다.
john --wordlist=/usr/share/wordlists/rockyou.txt --format=Raw-SHA256 credentials
그러면 아래 그림에서 보듯 해당 해시 값의 평문 값이 videogamer124라는 것을 확인할 수 있다.
획득한 계정 정보는 해당 웹앱과 연동된 데이터베이스 내에 존재하는 계정 정보임으로, 해당 웹앱의 로그인 정보에 대응된다. 하지만 많은 사람에게 존재하는 인지적 편의성으로 인해, 동일한 아이디와 패스워드를 다른 웹사이트 혹은 시스템 로그인 시에도 사용하게 된다.
따라서, Nmap 포트 스캔을 통해 확인하였듯이, 열려있는 22번 포트의 ssh 프로토콜을 사용하여, 대상 서버에 원격 접속을 시도하고, 사용자와 비밀번호는 위 과정을 통해 획득한 agent47:videogamer124를 활용하도록 한다.
획득한 웹앱 계정 정보를 통해 위 그림에서 보듯, 대상 서버에 원격 접속이 가능하다.
Privilege Escalation
이후, ss -tulpn 명령어를 통해 해당 호스트에서 실행중인 TCP/UDP 소켓 관련 정보를 확인하도록 한다.
실행 중인 네트워크 소켓 관련 정보를 확인하기 위해 사용한 옵션은 아래와 같다.
옵션 | 의미 |
-t | TCP 소켓 표시 |
-u | UDP 소켓 표시 |
-l | Listening 중인 소켓만 표시 |
-p | 소켓을 사용 중인 프로세스 표시 |
-n | 서비스 이름 반환하지 않고, IP와 포트를 숫자로 표시 |
위 그림에서 보듯 10000번 포트에 대해서는 모든 네트워크 인터페이스(*:10000)가 접근이 가능한 것을 확인할 수 있다. 단, 방화벽 규칙이 설정되어 있지 않을 경우에만 실질적으로 모든 네트워크 인터페이스가 접근이 가능하다..
로컬 머신이 아닌, 즉 대상 서버가 아닌, 공격자 측에서도 대상 서버의 10000번 포트에 접근이 가능한지 아래 명령어를 통해 확인보면, 아래 그림에서 보듯 외부 네트워크에 대해 해당 포트로의 인바운드 트래픽이 차단되어 있음을 확인할 수 있다. 즉 이는 인바운드 트래픽 관련 방화벽 규칙 설정이 되어 있음을 의미한다.
nc -zv <Target_IP> 10000
따라서, 해당 문제를 해결하기 위해, SSH Local Port Fowarding을 이용하여, 공격자 측의 10000번 포트로의 요청이 ssh 터널을 통해, 대상 서버 로컬의 10000번 포트로 포워딩하여 해당 요청의 결과를 공격자 측의 10000번 포트로 반환하여 표시할 수 있도록 만든다.
SSH Local Port Forwarding |
ssh -L 10000:localhost:10000 <user>@<Target_IP> |
그 후, 공격자 측에서 웹 브라우저를 통해, 10000번 포트로 요청을 보내면 아래 그림에서 보듯, 해당 포트에는 Webmin이라는 Linux/Unix 계열의 서버 관리 도구가 구동 중인 것을 확인할 수 있다.
해당 서버 관리 도구의 대시보드 로그인 또한 위 과정에서 획득한 해당 웹앱의 아이디/비밀번호를 사용하여 로그인을 시도한다.
agent47:videogamer124
획득했던 웹앱의 아이디/비밀번호로 Webmin 관리자 페이지에 접근이 가능한 것을 위 그림에서 확인할 수 있다.
또한, 아래 그림에서 보듯, Burpsuite의 HTTP history를 확인하여, 로그인 시의 요청 및 응답 메시지를 확인해보면, 응답 메시지 내의 Server 헤더를 통해 확인할 수 있듯이, 해당 서버 관리 도구의 버전이 1.580 인 것을 확인할 수 있다.
searchsploit(exploit-db에 존재하는 exploit 코드 검색 도구)을 통해 Webmin 1.580의 exploit 코드가 존재하는지 확인해보면, 아래 그림에서 보듯, /file/show.cgi와 관련된 RCE 코드가 존재하는 것을 확인할 수 있다.
해당 exploit 코드를 아래 그림에서 보듯 Metasploit 모듈을 통해 사용하도록 한다.
해당 exploit 모듈을 선택한 후, show info 명령어를 입력하면 아래 그림에서 보듯, 해당 공격 모듈은 Webmin 1.580에 대해 임의의 명령을 실행할 수 있는 취약점을 악용하는 모듈이며, 취약점은 /file/show.cgi 컴포넌트에 존재하며, 해당 취약점은 File Manager 모듈에 접근할 수 있는 인증된 사용자가 ROOT 권한으로 임의의 명령어 실행, 즉 RCE가 가능한 exploit 모듈이라고 설명하고 있다.
show options 명령어를 입력하여, 해당 모듈 실행에 필요한 옵션을 설정하도록 한다. 여기서는 PASSWORD, RHOSTS, RPORT, SSL, USERNAME, LHOST, LPORT의 설정이 필요하다. 또한 페이로드도 설정해줘야 하며, 페이로드의 경우, show payloads 명령을 통해 확인 가능한 6번째 페이로드인 cmd/unix/reverse 페이로드를 사용하도록 한다.
아래와 같이 exploit 명령어를 입력하여, 대상 시스템의 웹 기반 서버 관리 도구의 RCE 취약점을 악용하여 역방향 연결이 되도록 한다.
만약 exploit 과정이 끝난 후, 아래와 같이 역방향 연결된 콘솔의 세션이 백그라운드에서 실행될 경우, sessions 명령을 통해 백그라운드에서 실행 중인 세션을 확인하여, 해당하는 세션을 sessions -i <session_ID>를 통해 선택하여, 포그라운드에서 실행되게 만든다.
아래 그림에서 보듯, 대상 시스템의 웹 기반 서버 관리 도구의 RCE 취약점을 이용하여 역방향 연결에 성공하고, 역방향 연결된 계정이 Linux 시스템에서의 최상위 권한을 가진 계정인 root 유저인 것을 아래 그림을 통해 확인할 수 있다.
'InfoSec Log > PenTesting' 카테고리의 다른 글
[PenTesting] Daily Bugle Writeup @TryHackMe (0) | 2025.01.09 |
---|---|
[PenTesting] Skynet Writeup @TryHackMe (0) | 2025.01.07 |
[PenTesting] mKingdom 침투테스트 @TryHackMe (3) | 2024.10.01 |
[PenTesting] Lazy Admin 침투테스트 @TryHackMe (2) | 2024.09.27 |
DC1 침투테스트 과정 (0) | 2023.02.19 |