Tryhackme에서 Ignite라는 기초 문제를 클리어해보겠습니다.
공격을 시작하기 전에 해야하는 과정이 있으니 참고 바랍니다.

문제 사이트에 들어와서 Start Machine을 눌러 공격할 대상인 가상머신을 활성화하고, 공격할 대상의 IP를 확인합니다.

문제의 내용입니다. User.txt의 플래그 내용과 Root.txt의 플래그의 내용을 찾아 입력해야 하는 문제입니다.
1시간을 기본으로 주지만, 부족한 경우 추가할 수 있습니다.
세팅이 끝났으니 IP의 정보를 수집해보겠습니다.
일단, 해당 아이피가 열어놓은 포트를 확인해보겠습니다. 포트를 스캔할 때는 주로 nmap 이라는 포트 스캐너를 사용합니다.
nmap 스캔할IP

스캔이 끝나면 80번 포트가 열려있는 것을 확인할 수 있습니다.
nmap 명령어에 추가적인 옵션을 더 붙여서 추가적인 정보들을 얻을 수도 있습니다.
nmap -sV 스캔할IP
-sV 옵션은 특정 포트에서 동작하고 있는 프로세스를 보여주는 옵션입니다.

80번 포트에서 http 서비스인 Apache httpd 2.4.18((Ubuntu))가 실행되고 있다는 것을 알아내었습니다.
http가 작동하고 있다는 것을 알았으니, 해당 프로세스를 좀더 알아봅시다.
nmap은 기본적으로 피자의 토핑과 같은 역할을 하는 스크립트들을 추가적으로 제공합니다. 그중, http 프로세스의 정보를 더 보여주는 스크립트를 사용해보겠습니다.
스크립트는 .nse라는 확장자명을 가진 파일입니다.
ls /usr/share/nmap/scripts 를 터미널에 입력하여 nmap이 제공하는 scripts를 확인해봅니다.

수많은 스크립트 파일 중 http-enum.nse 파일을 사용하겠습니다.
enum은 enumuration의 약자로, http의 정보를 열거할 수 있도록 합니다.
nmap 스캔대상의 뒤에 -script 옵션과 사용할 스크립트를 입력합니다.
nmap 10.10.64.2 -script http-enum.nse

http-enum 스크립트가 /robots.txt라는 디렉토리를 찾아냈습니다.
robots.txt는 웹 사이트에 로봇이 접근하는 것을 방지하기 위한 규약으로, 이 문제를 푸는데 활용할 수 없습니다. 헛걸음질
해당 IP의 포트 정보에 대해 좀더 깊히 스캔해보겠습니다.
nmap -sV -sC 스캔할IP
-sV 옵션은 포트에서 작동하는 프로세스의 버전 정보를, -sC옵션은 nmap에서 제공하는 기본 스크립트 프리셋을 사용할 수 있는 옵션입니다.

스캔을 마치니 서비스의 정보를 자세히 볼 수 있습니다.
웹페이지의 디렉토리를 Gobuster 스캐너를 사용해 스캔해봅시다.
Gobuster는 웹 서버의 디렉터리를 무차별 대입(Brute force)하는 소프트웨어 도구입니다. 이걸 이용해 해당 도메인의 하위 디렉토리를 스캔할 수 있습니다.
Gobuster를 사용하려면 wordlist(단어 목록)이 필요한데, 일반적으로 아래 파일을 사용합니다. 상황에 맞춰 다른 wordlist를 사용하거나, 다운받아 적용할 수도 있습니다.
/usr/share/wordlists/dirb/common.txt

디렉토리 스캔을 잘 마쳤습니다.
위에서 확인할 수 있는 정보 중 건질만한 것은 없는 것 같습니다.
해당 IP의 웹사이트에 방문해보도록 하겠습니다.

방문한 웹사이트에서 Fuel CMS라고 쓰여진 페이지를 볼 수 있습니다. Fuel CMS는 1.4버전을 사용중인 것으로 보입니다.


자격 증명을 위한 정보들이 있는 디렉토리에 관한 정보같습니다. 접속해보겠습니다.

관리자 패널에 접속했지만, 아무것도 얻을 수 없었습니다.
지금까지 80/tcp 포트에서 Fuel CMS 1.4 버전과, Apache 2.4.18 버전이 실행 중이라는 것을 알아냈습니다.
이제 얻은 정보들을 이용해 해당 프로세스를 Exploit 해보겠습니다.
일단, 공격할 대상이 실행중인 프로세스의 취약점을 먼저 검색해보겠습니다. 취약점을 검색할 때는 ExploitDB 사이트를 사용합니다.

Fuel CMS 프로세스에서 Remote Code Execution 공격을 진행할 수 있다는 것을 확인할 수 있습니다.
Remote Code Execution(RCE취약점) 이란 공격자가 조직의 컴퓨터나 네트워크에서 악성 코드를 실행하는 것을 말합니다. 한마디로 원격으로 코드를 실행할 수 있는 취약점입니다.
+귀찮게 사이트에서 검색하지 않아도 searchsploit 명령어를 사용해 터미널에서 검색할 수 있습니다.

Fuel CMS를 exploit하기 위한 파일은 가장 최신 버전인 Linux/webapps/50477.py를 사용하겠습니다.
정확히는 /usr/share/exploitdb/exploits/php/webapps/50477.py에 있습니다.
그럼 저 50477.py 파일을 실행시켜보겠습니다.

성공적으로 쉘을 획득하였습니다. ls 명령어도 원격으로 작동하는 것을 볼 수 있습니다.

하지만 디렉토리를 바꾸려 해도 바꿔지지 않습니다. 반쪽짜리 쉘이었습니ㄷr.... 이런 쉘에서는 뭘 할 수가 없을것 같습니다.
여기서 Reverse Shell이라는 공격 기법을 사용해보겠습니다.
Reverse Shell이란, 공격자가 쉘로 접속하는 것이 아닌 공격자의 포트를 열어놓고 공격대상에서 접속하는 쉘입니다.
일단, 공격자의 포트(내 PC)를 열어야 하기 때문에,

위처럼 nc(netcat) 명령어와 -nlvp 옵션으로 포트를 열어놓습니다.

9999번 포트가 열려있는 것을 확인할 수 있습니다.
이제 Reverse Shell Cheat Sheet tool을 웹사이트에서 열어서 사용해보겠습니다.

이번에는 nc mkfifo라는 기법을 통해 리버스 쉘을 사용해보겠습니다.
연결할 IP(공격자의 IP)를 입력하고, 복사합니다.
공격 대상이 공격자에게 쉘을 연결한 모습.
공격자에게 연결된 쉘의 모습.
이번에도 성공적으로 리버스 쉘을 마쳤습니다.
공격 대상의 쉘을 획득했다고 끝난 것이 아닙니다. 이제 권한의 상승을 통해 root 권한을 획득하거나, 언제든지 공격대상에 다시 접속하기 쉽도록 백도어를 설치해야 합니다. (백도어는 추후 업로드...)
그전에 쉘을 더 Interactive하게 만들어봅시다. 지금 쓰고있는 쉘은 단방향 쉘이기 때문에, 이 쉘을 실제 우리가 쓰는 쉘처럼 만들겁니다. 아래 코드를 입력합니다.
python -c 'import pty; pty.spawn("/bin/bash")'
기본적으로 웹 서버에는 Credential(자격증명)을 위한 DB가 존재합니다.
이 DB에 접속해 root 자격증명을 위한 정보를 찾아보겠습니다.

/fuel/application/config/ 에 database.php가 있는 것을 발견했습니다.

root라는 유저의 비밀번호가 mememe라는 것을 알아냈습니다!
이제 su root를 입력해 root 권한을 얻을 수 있습니다.

이제 문제를 Task 1을 풀어보겠습니다.
User.txt와 Root.txt의 내용을 입력해야하는 문제입니다.

home의 하위 디렉토리 www-data에서 flag.txt를 찾았습니다. 이것이 user.txt의 정답입니다.

root 디렉토리에서 root.txt를 찾았습니다.

지금까지 FuelCMS의 취약점을 이용하여 리버스쉘과 쉘 업그레이드를 하고, 루트 권한을 획득하여 문제를 해결해 보았습니다😊